使っているクラウドなどの小ネタ Advent Calendar 2024 2日目
フローを即興で作ったら、Apexのテストクラスでエラーです。
11:21:56:205 FATAL_ERROR System.DmlException: Upsert failed. First exception on row 0; first error: CANNOT_EXECUTE_FLOW_TRIGGER, 「取引先のメインフロー」処理失敗により、このレコードを保存できません。Salesforce システム管理者に次の詳細を報告してください。このフローで未対応の障害が発生しました
フローを処理中に未対応の障害が発生しました。詳細は、組織のシステム管理者にお問い合わせください。このフローで未対応の障害が発生しました
フローを処理中に未対応の障害が発生しました。詳細は、組織のシステム管理者にお問い合わせください。: []
手がかりがつかめない。
手を抜いてはいけませんね。sandboxにも同じフローを作ってテストクラスを走らせると...
このエラーの前に... Too many DML statements: 151 これだな
11:21:56:196 FLOW_ELEMENT_ERROR このエラーは、フローでレコードの更新が試行されたときに発生しました: Too many DML statements: 151。ExceptionCode の値については、『SOAP API 開発者ガイド』を参照してください。|FlowRecordUpdate|update_customer_nameonly
エラーになった個所をみると
この処理はテストデータをインサートしている処理ですね。レコードトリガーフローの中でもレコードの取得をやっているので151を超えた可能性が高い。
//main
FkdAdministratorConsole.GenerateData_createGenkiuuri_Account();
List<Account> Accounts = [Select id from Account];
System.assert(Accounts.size() > 0, 'Account found');
FkdAdministratorConsole.GenerateData_createZaikoHattyu_tantosya();
FkdAdministratorConsole.GenerateData_createZaikoHattyu_Account();
FkdAdministratorConsole.GenerateData_createSyanaisiyou_Account();
FkdAdministratorConsole.GenerateData_createUri01_Account();
FkdAdministratorConsole.GenerateData_createUri02_Account();
FkdAdministratorConsole.GenerateData_createUri03_Account();
FkdAdministratorConsole.GenerateData_createUri04_Account();
FkdAdministratorConsole.GenerateData_createUri05_Account();
FkdAdministratorConsole.GenerateData_createUri06_Account();
FkdAdministratorConsole.GenerateData_createUri09_Account(); <--- ここでエラー
FkdAdministratorConsole.GenerateData_createSyanaisiiresaki_Account();
FkdAdministratorConsole.GenerateData_createGenkiuuri_tantosya();
適当なところに Test.startTest(); と Test.stopTest();を入れてDLMのカウンターをリセットしたら問題なく機能しました。
本当はこの処理の中で1件ずつupsertしないで、List変数に格納して一括更新するのが正しいだろうな。
以下のようなupsertがたくさんあります。
Account Ac01 = new Account(
Name ='センター',
SeishikiMei__c ='センター',
RyakushikiMei__c ='センター',
customer_code__c ='00019',
SyanaiTrihiki__c = '社内売上',
RecordTypeId = recordTypeList[0].Id,
yomi_kana__c='センター',
Phone = Phone,
Fax = Fax,
zip_code__c = zip_code,
Address1__c = Address1//,
//Address2__c = Address2
);
upsert Ac01 customer_code__c; <--- ここをList.add
最終的には他でもこのクラスを使っていたのでList変数に書きなおしました。
ことの発端は私の設定ミス
指定したクラスだけにする時に、カンマをつけ忘れてしまっていました。