2012-07-26 102 views
1

這MarkLogic XQuery的職位SOAP消息發送到CRM,得到響應回爲XML,可以請你幫我實現相同的查詢如下:MarkLogic SOAP響應處理

  1. 我希望每次運行此查詢五分鐘使用MarkLogic Task Server。它運行下一次之前,我要解析的最後一個響應並執行以下操作:

a)如果在響應XML,我們看到的結果/響應/代碼[= 200],然後選擇結果/響應/頭/日期並將其分配給XQuery的$ lastUpdateTime變量。否則$ lastUpdateTime不應得到更新(以確保事務成功)。 b)。我在MarkLogic DataBase中有一個XML,其中包含id,first_name,last_name,phone,email標記。每次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">[email protected]</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">[email protected]</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>[email protected]</email> 
    </user> 
    <user> 
     <id>90cd7230-9fdd-20ae-9ad2-500dabecdb72</id> 
     <firstName>Pankja</firstName> 
     <lastName>Pankaj</lastName> 
     <phone>88888</phone> 
     <email>[email protected]</email> 
    </user> 
    <user> 
     <id>90cd7230-9fdd-20ae-9ad2-500dabecdb78</id> 
     <firstName>xyz</firstName> 
     <lastName>abc</lastName> 
     <phone>1111111</phone> 
     <email>[email protected]</email> 
    </user> 
</Users> 

任何建議將是一個很大的幫助。謝謝。

回答

1

首先,擺脫lastUpdateTime參數。例如,將該值存儲在用戶xml中作爲根元素的屬性,並在腳本被調用後立即從那裏讀取它。每次更新用戶XML時,擴展現有代碼以更新該時間戳。

接下來,將腳本存儲在您選擇的數據庫中。確保它是一個主要的xquery模塊,而不是一個庫模塊。

最後,進入管理界面,打開您感興趣的羣組,打開計劃任務,然後在其中添加一個新任務。模塊數據庫應指向您存儲腳本的位置。任務根引用該模塊數據庫中的路徑前綴。你可以讓它保持簡單。任務數據庫應指向您存儲用戶XML的位置。

HTH!