【Salesforce】System.CalloutException: You have uncommitted work pending. Please commit or rollback before calling

【Salesforce】System.CalloutException: You have uncommitted work pending. Please commit or rollback before calling

プロセスビルダーから呼び出したApexの処理で、HTTPRequestにて外部へ処理を行いました。

その際に、見たことがあるエラーが発生しました。

System.CalloutException: You have uncommitted work pending. Please commit or rollback before calling

DML操作を行った後に同じトランザクション内で外部に向けて処理を行うと発生するエラーですね。

しかし、今回はDML操作の後にHTTPRequestを送信していません。

ということは、プロセスビルダー内の項目自動更新がDML発行扱いになっているのでしょうか。

というわけで、別のトランザクションとして非同期処理を呼び出すように修正しました。

今回の例ではSalesforce内の処理を呼び出しています。

/**
 * 非同期処理を呼び出す
 */ 
@InvocableMethod
public static void callHTTPRequest(){
    
    String sessionId;
    
    // セッションIDを取得する
    sessionId = UserInfo.getSessionId();
    // 非同期処理を呼び出す
    callHTTPRequest(sessionId);
}

/**
 * HTTPリクエストを送信する
 */
@future(callout=true)
public static void callHTTPRequest(String sessionId){

    // HTTPRequestを送信する。
}

もっといい方法があるかもしれません。

プロセスビルダーは便利なのですが、よく知らないです。

No comments.

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です