過去にも同じエラーで躓いた
結果数は、1 つの一括実行要求で実行されたインタビュー数と一致しません。
以下のようなJson形式で返される明細データを1件づつのレコードとしてList変数で返すApexをフローで呼び出しています。
[
[{"column_number":"0","value":"収入印紙"},{"column_number":"1","value":"600 円 × 5 枚 = 3,000"}],
[{"column_number":"0","value":"収入印紙"},{"column_number":"1","value":"1,000 円 × 3 枚 = 3,000"}],
[{"column_number":"0","value":"切手"},{"column_number":"1","value":"460 円 × 3 枚 = 1,380"}]
]
//入力のList<List<String>> inputStringと出力のList<List<hiyoumeisai__c>> を同じような2重のList変数にしましたが、結果数が違うというエラーになります。
@InvocableMethod(label='JSON_deserialize')
public static List<List<hiyoumeisai__c>> test001(List<List<String>> inputString) {
List<List<hiyoumeisai__c>> RetList = new List<List<hiyoumeisai__c>>();
List<hiyoumeisai__c> RetList0 = new List<hiyoumeisai__c>();
String resBody = inputString[0][0];
List<List<colval01>> l = (List<List<colval01>>)JSON.deserializeStrict(resBody,List<List<colval01>>.class);
for (List<colval01> l2 : l ){
String formula = l2[1].value;
List<String> formulas = formula.split('=');
system.debug(Logginglevel.INFO,'=====> ' + formulas[1].replaceAll(',','') );
hiyoumeisai__c m2 = new hiyoumeisai__c();
m2.Field01__c = l2[0].value;
m2.Field02__c = l2[1].value;
m2.amount__c = Decimal.valueOf(formulas[1].replaceAll(',','').trim());
RetList0.add(m2);
RetList.add(RetList0);
}
return RetList;
}
①フローインタビュー数とはフローの開始条件に該当しそのフローが作動したレコードの数のこと ②(①の認識があっていると仮定して)ガバナ制限を考慮するには、開始条件をしっかり決めてインタビュー数をなるべく増やさないようにする。
上記を考慮すると今回はJsonのテキストレコードは1件、結果が3件返ってくるので一致しないということですよね。
Jsonの中身が何件あるかが最初に分かっていれば無理やり入力用のListにダミーの値を追加すればいいけど、今回はできないですね。
仕方ないApexの中でレコードを追加するように変更するしかないです。