Регистрация  |  Вход

Из apex в LWC прилетает "Too many DML statements: 1" и это не то, что вы подумали

как известно "Too many DML statements: 1" прилетает из apex в LWC когда твой апекс метод имеет (cacheable=true) и ДМЛ операцию внутри (да еще при-@wire-рен). Эта ситуация понятна.

теперь представьте что есть простейший апекс метод:

@AuraEnabled(cacheable=false)
public static String setInProgress(string recordId){

DO DML

}

и вы вызываете его императивно:

setInProgress()
.then(result => {
console.log('setInProgress result');
console.log(result);
})
.catch(error => {
console.log('setInProgress error');
console.log(error);
});

и, да, вы правильно заметили, что он вызывается с ошибкой, так как аргумент recordId не указан, ну бывает...

ну так вот, если его вот так вот с ошибкой вызывать в connectedCallback(), то прилетает ошибка с фейлом в выполнении апекс метода, и по ней все понятно, что recordId там нулевой.

а вот если тот же императивный вызов ты используешь

<lightning-record-edit-form onsuccess={ВОТ_ЗДЕСЬ} onsubmit={ИЛИ_ВОТ_ЗДЕСЬ}>

то прилетит "Too many DML statements: 1", и ты будешь долго и безрезультатно доказывать, что (cacheable=false) там, хотя проблема совсем не в этом

как известно "Too many DML statements: 1" прилетает из apex в LWC когда твой апекс метод имеет (cacheable=true) и ДМЛ операцию внутри (да еще при-@wire-рен). Эта ситуация понятна.

теперь представьте что есть простейший апекс метод:

[code]
@AuraEnabled(cacheable=false)
public static String setInProgress(string recordId){

DO DML

}
[/code]

и вы вызываете его императивно:

[code]  
setInProgress()
  .then(result => {
      console.log('setInProgress result');
      console.log(result);
  })
  .catch(error => {
      console.log('setInProgress error');
      console.log(error);
  });
[/code]

и, да, вы правильно заметили, что он вызывается с ошибкой, так как аргумент recordId не указан, ну бывает...

ну так вот, если его вот так вот с ошибкой вызывать в connectedCallback(), то прилетает ошибка с фейлом в выполнении апекс метода, и по ней все понятно, что recordId там нулевой.

а вот если тот же императивный вызов ты используешь 

[code]<lightning-record-edit-form onsuccess={ВОТ_ЗДЕСЬ} onsubmit={ИЛИ_ВОТ_ЗДЕСЬ}>[/code]

то прилетит "Too many DML statements: 1", и ты будешь долго и безрезультатно доказывать, что (cacheable=false) там, хотя проблема совсем не в этом