概要
トラウマランキングNo.1エラー。
エラーの中身は文字通り、「Calloutの実行前にトランザクションをコミットするなりロールバックするなりして終わらせよ」というもの。
恐ろしいのは、指示通りに修正してもエラーが消えないという点…
一般的な対策法
コード側
- Calloutメソッドを非同期化する(@futureアノテーションを付けるorQueueableインタフェースを利用する。)
- Calloutの前にDML操作やロールバックを終わらせてトランザクションを完了させる。
テスト側
- コールアウトクラスの呼び出しメソッドをTest.startTest()とTest.stopTest()で挟む
- Test.setMockでMock Classを呼び出す
Test.startTest();
Test.setMock(HttpCalloutMock.class, new boardOppApiMock());
BoardOppPost.CreateBoardOppCallout(FlowVariables);
Test.stopTest();
上記の対策を行ってもエラーが出続ける場合
結論、上記の対策を行ってもエラーは出続けます。
現在発生中のSalesforceのバグです。
下記のIdeaにある通り、コールアウトクラスのAPIバージョンを34以下に設定すると解決します。Spring’21修正予定です。
https://trailblazer.salesforce.com/issues_view?id=a1p3A000000ATF1QAO