サービスへのクエリの設定

logo cloud IDE Cloud IDE

logo desktop IDE Desktop IDE

これは進行中のベータリリースです。ベータ状態での Anypoint Code Builder の使用には、該当するベータサービス契約条件が適用されます。

始める前に

次の手順を実行します。

Salesforce レコードを見つけるためのロジックを設定する

このアプリケーションの目的は、POST 要求のクエリパラメーターの ​firstName​、​lastName​、および ​phoneNumber​ を持つレコードを受け取って、Salesforce 組織に対するクエリに変換し、同じ取引先責任者を取得することです。

Salesforce から情報を取得するには、次のクエリを使用します。

SELECT phone, ID from Contact WHERE FirstName=':firstname' AND LastName=':lastname'

前のクエリでは ​firstname​ と ​lastname​ の 2 つのクエリパラメーターを使用します。値を各パラメーターに割り当てるには、​firstnameVar​ と ​lastnameVar​ の 2 つの変数を作成する必要があります。

  1. Anypoint Code Builder で ​contact-sync.xml​ ファイルを開きます。

  2. [Flow List (フローリスト)]​ 要素を使用して ​post:\updatePhone:contact-sync-config​ フローに移動します。

    sync api outline select flow
  3. 既存の Transform Message コンポーネントを削除します。

    sync api remove transform message
  4. これを ​[transform with output JSON (出力 JSON を使用して変換)]​ オプションを使用する Transform Message コンポーネントで置き換えます。

    sync api transform output json
  5. 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 に送信する

Salesforce Connector を使用して Salesforce からレコードを取得します (レコードが存在する場合)。

  1. Anypoint Code Builder で ​contact-sync.xml​ ファイルを開きます。

  2. Transform Message コンポーネントの後の ​​ (​[Add component (コンポーネントを追加)]​) アイコンをクリックします。

    add salesforce query canvas
  3. 「query」​と入力して ​[query]​ 操作を選択します。

    add query operations salesforce canvas
  4. 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>
  5. 空の ​<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 (取引先責任者が存在する)」に移動します。

  1. Query​ 操作の後の ​​ (​[Add component (コンポーネントを追加)]​) アイコンをクリックします。

    add choice component canvas
  2. 「choice」​と入力して ​[mule:choice]​ を選択します。

    choice operation canvas
    <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​ オブジェクトの配列が返されます。この場合、取引先責任者に電話番号がないときはフローで失敗メッセージが返されます。

この条件を捕捉する式を作成します。

  1. <when/>​ 要素で次の式を追加します。

    <when expression="#[payload.Phone[0] != null]" doc:name="contact exists">
  2. 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"/>
  3. 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 から取得した既存の電話番号を保存するロジックを追加できます。

  4. <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 コンポーネント

API をテストする

  1. REST クライアントを開きます。

  2. <choice/>​ 要素の赤いアイコンをクリックして、ブレークポイントをセットアップします。

    add breakpoint sync api
  3. F5 を押してアプリケーションを実行します。

  4. お気に入りの REST クライアントを開きます。

  5. POST​ 要求を実行します。

    0.0.0.0:8081/api/updatePhone?phoneNumber=555555&firstName=Anna&lastName=Woods

    アプリケーションは Choice router コンポーネントの前で停止し、クエリパラメーターは変数に変換されます。

    query params to vars api sync
  6. Anypoint Code Builder でメッセージ ​[Failure: Contact does not exist in Salesforce (失敗: 取引先責任者は Salesforce に存在しません)]​ を含む ​returnMessage​ 変数が返されるまで、実行を進めます。

    set variable for no contact api sync
  7. データの並列保存に進み、取引先責任者が存在しない場合に MySQL データベースと Salesforce レコードを更新したり、保存された電話番号と異なる場合に電話番号を更新したりするようにアプリケーションを設定します。