Invoke apex soap methodを使用したApexクラス呼び出し

今回はSalesforceから公開されたREST APIを呼び出す方法について記載しました。今回はSOAP編になります。

スポンサーリンク

今回使うコンポーネント

コンポーネントアイコン・領域用途
Invoke apex soap methodInvoke apex rest methodSalesforceのSOAP Webサービスを呼び出す

使い方

まずはSalesforce側でwebservice Apexクラスを作成します。webservice Apexクラスは以前少し取り上げていますが、globalクラスとして定義し、webServiceメソッドとして記述します。今回は以下のコードを使用して、文字列を引数として、メッセージを返すシンプルなコードでやってみることにします。

global class MyWebService {
    webService static String makeContact(String message) {         
        return 'message is ' +message;
    }
}

SOAPを呼び出すフローを以下のように記載します。Invoke apex soap methodでwebServiceメソッドを呼び出しますが、その前後のTransform Messageで入出力を定義します。

Transform messageの書き方は少々コツが入ります。SOAPを使用するということは、WSDLの読み込みが必須となります。そのため、Invoke apex soap method前のTransform messageには、webServiceの情報が詰まっているWSDLを読み込みをします。

具体的には以下のような記載で、WSDLを取得し、引数の情報などをセットします。

%dw 2.0
output application/xml
ns ns0 http://soap.sforce.com/schemas/class/MyWebService
---
{
	ns0#makeContact: {
		ns0#message: "TestMessge"
	}
}

ここでいうWSDLの取得にあたる部分が3行目。nsと記載されているのは、名前空間(Name Space)を意味し、MyWebServiceのメソッド情報を取得しているという感じです。ns0は変数みたいなもので、取得したWSDL情報をns0という箱の中にインポートしているような形になります。

Invoke apex soap methodにはInput、Apex Class name、Apex Class Method Nameを指定します。Invoke apex rest methodほど複雑な入力はないため、xml形式のInputが間違っていなければ問題なく設定できるかと思います。

項目設定内容
InputTransform Messageで設定したpayload
Apex Class NameApexクラス名(MyWebService)
Apex Class Method Nameメソッド名(mekeContact)

Invoke apex soap method直後のTransform Messageはxml形式のものをJSON形式に変換するために入れています。

%dw 2.0
output application/json
---
payload

フローを実行した結果のレスポンスは以下のようになります。

{
  "makeContactResponse": {
    "result": "message isTestMessge"
  }
}

このようにSalesforce上で作成されたwebservice Apexクラスを呼び出すこともできるため、より実装の幅が広がるのではないかと思います。

MuleSoft
スポンサーリンク

コメント