1

この MarkLogic XQuery post SOAP メッセージを CRM に送信すると、応答が XML として返されます。同じクエリで次のことを達成するのを手伝ってください。

  1. MarkLogic Task Serverを使用して、このクエリを 5 分ごとに実行したいと考えています。次回実行する前に、最後の応答を解析して次のことを行う必要があります。

a) 応答 XML に results/response/code[.=200] が表示されている場合は、results/response/header/date を選択して XQuery の $lastUpdateTime 変数に割り当てます。それ以外の場合、$lastUpdateTime は更新されません (トランザクションが成功したことを確認するため)。

b)。id、first_name、last_name、phone、email タグを含む XML が MarkLogic データベースに 1 つあります。SOAP が応答するたびに、CRM から更新された詳細、つまり、first_name、last_name、phone、email (ID は一意の識別子) が返されます。ここで、すべての応答/アイテムをループする必要があり、id が ML DB の XML に存在するいずれかのレコードと一致する場合、それぞれの first_name、last_name、phone、email を更新する必要があります。

XQuery:

let $lastUpdateTime := xdmp:get-request-field("lastUpdateTime", "2012-07-23 09:26:03")

let $payload := xdmp:quote(
    <SOAP-ENV:Envelope>
      <SOAP-ENV:Body>
        ....
      </SOAP-ENV:Body>
    </SOAP-ENV:Envelope>
  )
return
  let $createLogin := xdmp:http-post("http://localhost/SugarCE-Full-6.5.0/service/v2/soap.php/login")  
  let $payload2 := xdmp:quote(
      <SOAP-ENV:Envelope>
        <SOAP-ENV:Body>
          <query>date_modified >= '{$lastUpdateTime} AND deleted = 0'</query>
        </SOAP-ENV:Body>
      </SOAP-ENV:Envelope>)
  return
    xdmp:http-post("http://localhost/SugarCE-Full-6.5.0/service/v2/soap.php/login")

応答:

<?xml version="1.0" encoding="UTF-8"?>
<results warning="more than one root item">
  <response xmlns="xdmp:http">
    <code>200</code>
    <message>OK</message>
    <headers>
      <date>Thu, 26 Jul 2012 19:33:58 GMT</date>      
    </headers>
  </response>
  <SOAP-ENV:Envelope>
    <SOAP-ENV:Body>
      <entry_list>
        <item xsi:type="tns:entry_value">
        <item xsi:type="tns:name_value">
          <name xsi:type="xsd:string">id</name>
          <value xsi:type="xsd:string">90cd7230-9fdd-20ae-9ad2-500dabecdb70</value>
        </item>
        <item xsi:type="tns:name_value">
          <name xsi:type="xsd:string">first_name</name>
          <value xsi:type="xsd:string">Jhon</value>
        </item>
        <item xsi:type="tns:name_value">
          <name xsi:type="xsd:string">last_name</name>
          <value xsi:type="xsd:string">Carter</value>
        </item>
        <item xsi:type="tns:name_value">
          <name xsi:type="xsd:string">email</name>
          <value xsi:type="xsd:string">jhone@carter.com</value>
        </item>
        <item xsi:type="tns:name_value">
          <name xsi:type="xsd:string">phone</name>
          <value xsi:type="xsd:string">99999999</value>
        </item>     
          </name_value_list>
        </item>
        <item xsi:type="tns:entry_value">
        <item xsi:type="tns:name_value">
          <name xsi:type="xsd:string">id</name>
          <value xsi:type="xsd:string">90cd7230-9fdd-20ae-9ad2-500dabecdb71</value>
        </item>
        <item xsi:type="tns:name_value">
          <name xsi:type="xsd:string">first_name</name>
          <value xsi:type="xsd:string">Jack</value>
        </item>
        <item xsi:type="tns:name_value">
          <name xsi:type="xsd:string">last_name</name>
          <value xsi:type="xsd:string">Sully</value>
        </item>
        <item xsi:type="tns:name_value">
          <name xsi:type="xsd:string">email</name>
          <value xsi:type="xsd:string">jack@sully.com</value>
        </item>
        <item xsi:type="tns:name_value">
          <name xsi:type="xsd:string">phone</name>
          <value xsi:type="xsd:string">8888888</value>
        </item>     
          </name_value_list>
        </item>    
        </item>
      </entry_list> 
      </SOAP-ENV:Body>
  </SOAP-ENV:Envelope>
</results>

既存の ML DB XML

<?xml version="1.0" encoding="UTF-8"?>
<Users>
    <user>
        <id>90cd7230-9fdd-20ae-9ad2-500dabecdb70</id>
        <firstName>Jhon</firstName>
        <lastName>Carter</lastName>
        <phone>999999999</phone>
        <email>abc@abc.com</email>
    </user>
    <user>
        <id>90cd7230-9fdd-20ae-9ad2-500dabecdb72</id>
        <firstName>Pankja</firstName>
        <lastName>Pankaj</lastName>
        <phone>88888</phone>
        <email>pankaj@pankaj.com</email>
    </user>
    <user>
        <id>90cd7230-9fdd-20ae-9ad2-500dabecdb78</id>
        <firstName>xyz</firstName>
        <lastName>abc</lastName>
        <phone>1111111</phone>
        <email>xyz@abc</email>
    </user>
</Users>

どんな提案でも大いに役立ちます。ありがとう。

4

1 に答える 1

1

まず、lastUpdateTimeパラメータを取り除きます。たとえば、その値をユーザーのxml内にルート要素の属性として保存し、スクリプトが呼び出されるとすぐにそこから読み取ります。既存のコードを拡張して、ユーザー XML を更新するたびにそのタイムスタンプを更新します。

次に、選択したデータベースにスクリプトを保存します。ライブラリ モジュールではなく、メインの xquery モジュールであることを確認してください。

最後に、管理インターフェイスに移動し、目的のグループを開き、スケジュールされたタスクを開き、そこに新しいタスクを追加します。Modules データベースは、スクリプトを保存した場所を指している必要があります。タスク ルートは、そのモジュール データベース内のパス プレフィックスを参照します。物事をシンプルに保つために、/ に任せることができます。タスク データベースは、ユーザー XML を保存した場所を指している必要があります。

チッ!

于 2012-07-27T10:21:24.127 に答える