2022/04/19

SalesforceのCallableインターフェースとは?実装例とともに解説!

 
  

SalesforceのCallableインターフェースとは?

SalesforceのCallableインターフェースとは、共通のインターフェースで別のパッケージのメソッドやAPIを呼び出せるように、提供されたApexのインターフェースです。 Callableインターフェースは実行するメソッドと引数を拡張できる仕組みを提供しています。そのため、Apexクラスやトリガ間で依存性、関係性が低いプログラムを実装することが可能です。 また、会社間や部署間でCallableインターフェースの使い方をあらかじめ取り決めることで、それぞれ作成したプログラムを相互に利用することも可能になります。 なお、SalesforceのCallableインターフェースと、Javaの非同期呼び出しで使用されるCallableインターフェースは異なるものですので、ご注意ください。

Callableインターフェースの利用方法

SalesforceのCallableインターフェースの利用方法として、Callableインターフェースの実装クラスの実装方法と実装クラスの実行処理について解説します。

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引数の動作で使用する引数(型: Mappublic 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インターフェースを利用してみよう

今回は、SalesforceのCallableインターフェースについて実装例とともに紹介しました。SalesforceのCallableインターフェースとは、共通のインターフェースでApexの別パッケージのメソッドやAPIを呼び出せるようにするインターフェースです。 Callableインターフェースを利用することで、Apexクラスやトリガ間で依存性、関係性が低いプログラムを実装することが可能になります。SalesforceのApex言語を利用してプログラムを実装する際は、Callableインターフェースをぜひ利用してみてください。]]>

ITエンジニアへのキャリアチェンジならキャリアチェンジアカデミー

この記事の監修者・著者

株式会社オープンアップITエンジニア
株式会社オープンアップITエンジニア
未経験からITエンジニアへのキャリアチェンジを支援するサイト「キャリアチェンジアカデミー」を運営。これまで4500人以上のITエンジニアを未経験から育成・排出してきました。
・AWS、salesforce、LPICの合計認定資格取得件数:2100以上(2023年6月時点)
・AWS Japan Certification Award 2020 ライジングスター of the Year 受賞

おすすめの動画

  • 【未経験からIT業界へ転職するなら】相談窓口とスキルの獲得はここで解決!IT転職が一気に有利に!【キャリアチェンジアカデミー】

  • 【費用一切不要】未経験からIT業界へ転職するならまずはここへ相談!【キャリアチェンジアカデミー】

  • 【何のエンジニアになれるのか?】未経験からITエンジニアを目指すとこんな道がある【キャリアチェンジアカデミー】