解決方法③ futureをつけて非同期処理を行う
@futureをつけることでDMLを実行することができます。
しかし、返り値を返すことや、同じ@futureのついたfunctionから呼び出せないことなど、Apexの非同期処理は制約が多いのも現実です。
public static void sampleFunc(){
updateFormOwner(aid, bid);
}
@future
private static void updateFormOwner(Id formId, Id groupId){
Form__c form = [SELECT OwnerId FROM Form__c WHERE Id = :formId];
system.debug(form);
form.OwnerId = groupId;
update form;
}
メソッドの引数はList<??>,Set<??>,ID,Stringなどだけ設定できます。
According to Salesforce doc, you can't pass sObject to @future methods.