【Salesforce】ApexエラーMIXED_DML_OPERATIONの解決法3選

qiita.com

 

 解決方法③ 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.

developer.salesforce.com