Flex Gateway新着情報
Governance新着情報
Monitoring API Manager
これは進行中のベータリリースです。ベータ状態での Anypoint Code Builder の使用には、該当するベータサービス契約条件が適用されます。 |
このアプリケーションの目的は、POST 要求のクエリパラメーターの firstName
、lastName
、および phoneNumber
を持つレコードを受け取って、Salesforce 組織に対するクエリに変換し、同じ取引先責任者を取得することです。
Salesforce から情報を取得するには、次のクエリを使用します。
SELECT phone, ID from Contact WHERE FirstName=':firstname' AND LastName=':lastname'
前のクエリでは firstname
と lastname
の 2 つのクエリパラメーターを使用します。値を各パラメーターに割り当てるには、firstnameVar
と lastnameVar
の 2 つの変数を作成する必要があります。
Anypoint Code Builder で contact-sync.xml
ファイルを開きます。
[Flow List (フローリスト)] 要素を使用して post:\updatePhone:contact-sync-config
フローに移動します。
既存の Transform Message コンポーネントを削除します。
これを [transform with output JSON (出力 JSON を使用して変換)] オプションを使用する Transform Message コンポーネントで置き換えます。
Transform Message コンポーネントを次のコードサンプルで置き換えます。
<ee:transform doc:name="Set FirstName, LastName, Phone" doc:id="14b208-1ae908">
<ee:variables>
<ee:set-variable variableName="firstnameVar">
<![CDATA[%dw 2.0 output application/java --- attributes.queryParams.firstName]]>
</ee:set-variable>
<ee:set-variable variableName="lastnameVar">
<![CDATA[%dw 2.0 output application/java --- attributes.queryParams.lastName]]>
</ee:set-variable>
<ee:set-variable variableName="phonenumberVar">
<![CDATA[%dw 2.0 output application/java --- attributes.queryParams.phoneNumber]]>
</ee:set-variable>
</ee:variables>
</ee:transform>
この Transform Message プロセッサーを使用すると、複数の DataWeave マッピングを並列で実行できます。この変換では 3 つのマッピングが必要です。
firstnameVar
変数にマッピングされる、受信ペイロードの名。
lastnameVar
変数にマッピングされる、受信ペイロードの姓。
phonenumberVar
変数にマッピングされる、受信ペイロードの電話番号。
Salesforce Connector を使用して Salesforce からレコードを取得します (レコードが存在する場合)。
Anypoint Code Builder で contact-sync.xml
ファイルを開きます。
Transform Message コンポーネントの後の ([Add component (コンポーネントを追加)]) アイコンをクリックします。
「query」
と入力して [query] 操作を選択します。
Salesforce-Config
という既存の Salesforce Connector 設定を参照するように <salesforce:query/>
の config-ref
属性を設定します。
また、コンポーネントの名前を [Query SFDC for Contact]
(SFDC の取引先責任者を照会) に更新します。
<salesforce:query config-ref="Salesforce-Config" doc:name="Query SFDC for Contact">
<salesforce:salesforce-query/>
</salesforce:query>
空の <salesforce:salesforce-query/>
要素内に、Salesforce レコードを探すクエリを追加します。
<salesforce:query config-ref="Salesforce-Config" doc:name="Query SF for contact" doc:id="ionxui" >
<salesforce:salesforce-query>
<![CDATA[SELECT phone, ID from Contact WHERE FirstName=':firstname' AND LastName=':lastname']]>
</salesforce:salesforce-query>
<salesforce:parameters>
<![CDATA[#[output application/java
---
{
firstname : vars.firstnameVar,
lastname : vars.lastnameVar
}]]]>
</salesforce:parameters>
</salesforce:query>
Choice ルーターを使用して、特定の条件に基づいて動作を定義します。この場合は、Choice ルーターを使用して、Salesforce 環境のレコードに電話番号があるかどうかに基づいて動作を定義できます。ある場合、アプリケーションのロジック「the contact exists (取引先責任者が存在する)」に移動します。
Query 操作の後の ([Add component (コンポーネントを追加)]) アイコンをクリックします。
「choice」
と入力して [mule:choice] を選択します。
<choice doc:name="Choice">
<when doc:name="When" >
</when>
<otherwise doc:name="Otherwise" >
</otherwise>
</choice>
Mule フローを読みやすくするために、<choice/>
、<when/>
、<otherwise/>
要素の名前を更新します。
<choice doc:name="If Contact exists in SFDC">
<when doc:name="contact exists" >
</when>
<otherwise doc:name="contact does not exist" >
</otherwise>
</choice>
最初の分岐の条件として、Salesforce Query 操作の結果を確認します。結果がある場合、Salesforce:Query
プロセッサーで Contact オブジェクトの配列が返されます。この場合、取引先責任者に電話番号がないときはフローで失敗メッセージが返されます。
この条件を捕捉する式を作成します。
<when/>
要素で次の式を追加します。
<when expression="#[payload.Phone[0] != null]" doc:name="contact exists">
Logger コンポーネントと、失敗メッセージを返す Set Variable コンポーネントを使用して <otherwise/>
要素を完了します。
<logger level="INFO" message="Contact does not exist in Salesforce" doc:name="Logger"/>
<set-variable variableName="ReturnMessage" value="Failure: Contact does not exist in Salesforce" doc:name="Set Return Variable"/>
XML Code を確認します。
<choice doc:name="If Contact exists in SFDC">
<when expression="#[payload.Phone[0] != null]" doc:name="contact exists">
</when>
<otherwise doc:name="contact does not exist" >
<logger level="INFO" message="Contact does not exist in Salesforce" doc:name="Logger"/>
<set-variable variableName="ReturnMessage" value="Failure: Contact does not exist in Salesforce" doc:name="Set Return Variable"/>
</otherwise>
</choice>
取引先責任者が存在するかどうかの条件と、存在しない場合のエラーメッセージを設定したら、Salesforce から取得した既存の電話番号を保存するロジックを追加できます。
<when/>
要素の後に改行を追加して次のコンポーネントを追加します。
<set-variable variableName="phoneNumberSFVar" value="#[payload.Phone[1]]" doc:name="Set Phone from SFDC" /> (1)
<set-variable variableName="IDVar" value="#[payload.Id[1]]" doc:name="Set ID" /> (2)
<logger level="INFO" message='#["Existing phone number in salesforce: " ++ vars.phonenumberSFVar]' doc:name="Logger" /> (3)
<set-variable variableName="ReturnMessage" value="Contact exists in Salesforce" doc:name="Set Return Message" /> (4)
1 | 取引先責任者の電話の値を phonenumberSFVar という一時的な変数に割り当てるための Set Variable コンポーネント |
2 | ID を IdVar という一時的な変数に保存するための 2 番目の Set Variable コンポーネント |
3 | レコードで見つかった電話の値を印刷するための Logger コンポーネント |
4 | 一時的な値を ReturnMessage 変数に割り当てる Set Variable コンポーネント |
REST クライアントを開きます。
<choice/>
要素の赤いアイコンをクリックして、ブレークポイントをセットアップします。
F5 を押してアプリケーションを実行します。
お気に入りの REST クライアントを開きます。
POST
要求を実行します。
0.0.0.0:8081/api/updatePhone?phoneNumber=555555&firstName=Anna&lastName=Woods
アプリケーションは Choice router コンポーネントの前で停止し、クエリパラメーターは変数に変換されます。
Anypoint Code Builder でメッセージ [Failure: Contact does not exist in Salesforce (失敗: 取引先責任者は Salesforce に存在しません)]
を含む returnMessage
変数が返されるまで、実行を進めます。
データの並列保存に進み、取引先責任者が存在しない場合に MySQL データベースと Salesforce レコードを更新したり、保存された電話番号と異なる場合に電話番号を更新したりするようにアプリケーションを設定します。