この記事の目次
SalesforceのCallableインターフェースとは?
![](https://b-engineer-media-cms.s3.amazonaws.com/item/image/user/8c7f204d9ede4027afb1e4450514b993d07cd4a1/cc5cf742-511e-4170-b2ac-99d2cb2c1d9e.jpg)
Callableインターフェースの利用方法
![](https://b-engineer-media-cms.s3.amazonaws.com/item/image/user/356a192b7913b04c54574d18c28d46e6395428ab/272a2336-5b05-41db-9794-42346b1c6582.jpg)
Callableインターフェースの実装クラス
SalesforceのCallableインターフェースの実装クラスを実装します。Callableインターフェースの実装クラスでは、call()の実装が必須です。call()では、第1引数によって呼び出すメソッドやAPIを振り分け、第2引数を呼び出したメソッドやAPIに引き渡すように実装します。public class CallableExtension implements Callable {
// 実処理を行うメソッドを実装
String getGreeting(String userName) {
return userName + 'さん、こんにちは。';
}
// 実処理を行うメソッドを実装
Decimal sumNumbers(Decimal[] decimalValues) {
Decimal sum = 0;
for(integer x = 0; x < example.size(); x++){
sum += example[x];
}
return sum;
}
// 呼び出されたメソッドを振り分けるメソッドを実装する
// 第1引数:メソッドの動作(型: String)
// 第2引数:第1引数の動作で使用する引数(型: Map)
public Object call(String action, Map args) {
// actionの文字列によって実行メソッドを振り分ける
switch on action {
when 'getGreeting' {
// actionが「getGreeting」の場合
return this.getGreeting((String)args.get('userName'));
}
when 'sumNumbers' {
// actionが「sumNumbers」の場合
return this.sumNumbers((Decimal)args.get('decimalValues'));
}
when else {
// 上記以外の場合
System.debug('メソッドが実装されていません。');
return null;
}
}
}
}
実装クラスの実行処理
Type.forName()でCallableインターフェースの実装クラスをインスタンス生成したオブジェクトに対して、Callableにキャストします。Callableのcallメソッドの引数に、呼び出すメソッドの動作とその引数を指定します。@IsTest
private with sharing class TestExtensionCaller {
@IsTest
private static void calledExtensionResult() {
// Callableインターフェースの実装クラス名
String extensionClassName = 'CallableExtension';
// Callableインターフェースの実装クラスで、動作するメソッドの引数
Decimal[] decimalTestValues = new Decimal[]{10, 50};
// Callableインターフェースの実装クラスをインスタンス生成する
// 生成したインスタンスをCallableでキャストする
Callable extension =
(Callable) Type.forName(extensionClassName).newInstance();
// Callableのcallメソッドを実行する
// 第1引数:メソッドの動作(型: String)
// 第2引数:第1引数の動作で使用する引数(型: Map)
Decimal result = (Decimal)
extension.call('sumNumbers', new Map {
'decimalValues' => decimalTestValues
});
System.assertEquals(60, result);
}
}
Callableインターフェースを利用してみよう
![](https://b-engineer-media-cms.s3.amazonaws.com/item/image/user/9e08934fd24485c7d9e691a312f16a4ef7ff96eb/654bd373-e8cd-4bfa-b2e9-6a2405b5a5ff.jpg)
この記事の監修者・著者
![株式会社オープンアップITエンジニア](https://tenshoku-careerchange.jp/wp-content/uploads/2023/07/fzxADbr-_400x400-1-150x150.jpg)
-
未経験からITエンジニアへのキャリアチェンジを支援するサイト「キャリアチェンジアカデミー」を運営。これまで4500人以上のITエンジニアを未経験から育成・排出してきました。
・AWS、salesforce、LPICの合計認定資格取得件数:2100以上(2023年6月時点)
・AWS Japan Certification Award 2020 ライジングスター of the Year 受賞
最新の投稿
- 2024年3月26日キャリア・転職保安職(自衛官・警察・消防官など)に向いている人の性格・特徴ランキング【現役保安職(自衛官・警察・消防官など)36人が回答】
- 2024年3月26日キャリア・転職保安職(自衛官・警察・消防官など)に必要なスキルランキング&スキルアップの方法とは?【現役保安職(自衛官・警察・消防官など)36人が回答】
- 2024年3月26日キャリア・転職クリエイター職(ライター・デザイナー・編集)に向いている人の性格・特徴ランキング【現役クリエイター職(ライター・デザイナー・編集)64人が回答】
- 2024年3月26日キャリア・転職クリエイター職(ライター・デザイナー・編集)に必要なスキルランキング&スキルアップの方法とは?【現役クリエイター職(ライター・デザイナー・編集)64人が回答】