Salesforceでは、フローとApexを連携する際に @InvocableMethod
と @InvocableVariable
というアノテーションを使います。
この記事では、それぞれの役割や使い方について、解説します!
InvocableMethod アノテーションとは?
@InvocableMethod
は フローから呼び出せるメソッド を定義するためのアノテーションです。
このアノテーションを付けると、Apexクラスのメソッドを簡単にフローから利用できるようになります。
特徴
- 1クラスに1つだけ 定義できます。
- メソッドの引数は リスト型(
List<T>
) のみ受け取ります。 - メソッドの戻り値は任意ですが、一般的には リスト型 または void(戻り値なし)です。
使用例
以下の例は、フローから呼び出して複数の取引先(Account)レコードの名前を更新するメソッドを作成しています。
public class AccountUpdater {
@InvocableMethod(label='取引先名を更新') // フローで見えるラベル名
public static void updateAccountNames(List<AccountUpdateRequest> requests) {
List<Account> accountsToUpdate = new List<Account>();
for (AccountUpdateRequest request : requests) {
Account acc = new Account(Id = request.accountId, Name = request.newName);
accountsToUpdate.add(acc);
}
update accountsToUpdate; // レコードを更新
}
}
このメソッドにより、フローから指定された取引先レコードの名前を一括更新できます。
InvocableVariable アノテーションとは?
@InvocableVariable
は フローから値を受け渡すための変数 に付けるアノテーションです。
このアノテーションを使うことで、フローから変数の値を設定できるようになります。
特徴
- インナークラス(クラス内クラス) の変数に使います。
- パブリック変数 にのみ使用可能です。
- フローから直接値を設定できます。
使用例
AccountUpdater
クラスには、AccountUpdateRequest
というインナークラスがあり、このインナークラスの変数に @InvocableVariable
を付けています。
public class AccountUpdater {
public class AccountUpdateRequest {
@InvocableVariable(label='取引先ID') // フローで見えるラベル名
public Id accountId;
@InvocableVariable(label='新しい名前') // フローで見えるラベル名
public String newName;
}
}
InvocableMethod と InvocableVariable の違い
特徴 | InvocableMethod | InvocableVariable |
---|---|---|
対象 | メソッド | クラス内の変数 |
定義可能な数 | 1クラスに1つ | 制限なし |
主な用途 | フローから呼び出せるメソッドの登録 | フローで設定可能な変数の登録 |
使用場所 | 外部(フローやプロセスビルダー) | インナークラス |
注意点
-
引数はリストで指定
-
@InvocableMethod
で定義するメソッドの引数は、必ずリスト型にする必要があります。
-
-
アノテーションの組み合わせ
- 通常、
@InvocableMethod
と@InvocableVariable
はセットで使用されます。インナークラスを使ってデータを定義し、メソッドに渡す構造が基本です。
- 通常、
まとめ
@InvocableMethod
と @InvocableVariable
は、フローとApex を連携するアノテーションです。ぜひ、実際に試してみてください!
参考
InvocableMethod アノテーション
https://developer.salesforce.com/docs/atlas.ja-jp.apexcode.meta/apexcode/apex_classes_annotation_InvocableMethod.htm
InvocableVariable アノテーション
https://developer.salesforce.com/docs/atlas.ja-jp.apexcode.meta/apexcode/apex_classes_annotation_InvocableVariable.htm