1

According to documentation, it is recommended to make wired apex calls from LWC cached, by adding the following annotation to the controller's method:

@AuraEnabled(cacheable=true)

However, adding the "cacheable=true" part also means that the DML limit goes all the way to zero. because:

To improve runtime performance, annotate the Apex method with @AuraEnabled(cacheable=true), which caches the method results on the client. To set cacheable=true, a method must only get data, it can’t mutate (change) data. To call an Apex method imperatively, you can choose to set cacheable=true. This setting caches the result on the client, and prevents Data Manipulation Language (DML) operations.

The standard structure for us to return data to the client is as follows:

  try {
    //code for returning data to client
 } catch(Exception e) {
   //here code writes a record to the log object , this triggers a DML 
 exception

 }

Now as you can see, whenever there are some exceptions, there is code that tries to write a log record, which then triggers a DMLLimitException! Is there any solution for it?

Trying to avoid following possible solutions:

  1. Make the error logging code (there is a service class for this) asynchronous with @future or queueable
  2. Remove the "Cacheable=true" annotation
8
  • Does it also bar you from attempting to publish a Platform Event?
    – Charles T
    Feb 6 '20 at 13:27
  • The logger service class is already asynchronous through platform events.
    – Sagnik
    Feb 6 '20 at 13:28
  • I'm not sure what the question is here. It also appears to include possibly a suggested answer. If that's the case, the question should be made clear and a separate answer added.
    – Phil W
    Feb 6 '20 at 13:29
  • 1
    Also, it isn't a recommendation that a wire uses a cacheable apex method, it is mandatory.
    – Phil W
    Feb 6 '20 at 13:30
  • 2
    Thanks for your suggestions as of now will proceed with calling the method imperatively instead.
    – Sagnik
    Feb 6 '20 at 13:57
0
  1. ) throw the exception in catch block catch(Exception ex) { throw ex. }

2.) Your promise method in js will catch the Exception .error()

3.) Call another APEX method in JS to pass the exception back and use DML statement to insert the exception into Log there.

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service, privacy policy and cookie policy

Not the answer you're looking for? Browse other questions tagged or ask your own question.