入力パラメータをList型で定義していますが、フローから呼び出そうとするとコレクション変数が選択できないですね。
困った。だからフローは使いたくない。 ヘルプを見てコードを書いたけど機能しない。
@InvocableMethod(label='sendRport')
public static List<String> test004(List<String> inputStringList) {
1日探して回答かなぁって思ったけど違う。
Flow calling Apex, can't pass Collection Variable
Listを重ねた不細工な定義しましたが、コレクション変数は出てきませんね。
@InvocableMethod(label='sendRport')
public static List<String> test004(List<List<String>> inputStringList) {
このようにはならんなぁ
How to pass Salesforce Flow variables into Apex Class with correct scope?
一旦フローの編集ページを抜けて、再度開いて確かめたら、おおおお出てきたよ。やっと。
しかし、以下の「入力で使用可能」の設定がないとエラーになりました。
There can be at most one input parameter and its data type must be a list of the following: primitive data type, sObject type, generis sObject type, user-defined type containing variables of the supported types above, or user-defined Apex types.
sObjectならできる?
@InvocableMethod(label='sendRport')
public static List<String> test004(List<sObject> inputStringList) {
ああああ、できませんね。選択できるのがオブジェクトになっただけ。
結果数は、1 つの一括実行要求で実行されたインタビュー数と一致しません。
コレクション変数を渡せるようになったので、Apexの中でメールを複数送信してみました。
どうもフローのApexアクションの中でメールを送信できるのは1通だけかもしれませんね。
シングルメールがダメかな?
Messaging.SingleEmailMessage email = new Messaging.SingleEmailMessage();
EmailService service = new EmailService(email);
英語のエラーメッセージで言えば、これのようです。
The number of results does not match the number of interviews that were executed in a single bulk execution request.
Flow Error: The number of results does not match ....
この回答を読むと入力でList変数のサイズが2なら、出力でもList変数のサイズは2にしないといけないようです。
入力と出力のサイズを同じにする必要がありますです。
I believe the error was on the input parameter being an sobject not a list . Changing the request type and the logic within the method to handle list of sobjects did the trick!
しかし、リストの結果はサイズ2を返しているけどエラーになりますね。よく分からん。
解決方法がみつかりました。
Apexのコードですが入力時の変数はフローから見てコレクション変数として扱えるようにList<List<String>>と定義していましたが、戻り値はList<String>でした。 入力と同じようにList<List<String>>で返すと、このエラーは無くなりました。
入力と出力の変数の型をそろえておくということでしょうか?