1

此 MarkLogic XQuery 将 SOAP 消息发布到 CRM 并以 XML 形式返回响应,请您帮我在同一个查询中实现以下目标:

  1. 我想使用MarkLogic Task Server每五分钟运行一次这个查询。在它下次运行之前,我必须解析最后一个响应并执行以下操作:

a) 如果在响应 XML 中我们看到 results/response/code[.=200],则选择 results/response/header/date 并将其分配给 XQuery 的 $lastUpdateTime 变量。否则 $lastUpdateTime 不应该被更新(以确保交易成功)。

乙)。我在 MarkLogic 数据库中有一个 XML,其中包含 id、first_name、last_name、phone、email 标签。每次 SOAP 响应时,我都会从 CRM 更新详细信息,即名字、姓氏、电话、电子邮件(其中 ID 是唯一标识符)。现在我必须遍历每个响应/项目,当 id 与 ML DB 的 XML 中存在的任何记录匹配时,我必须更新相应的 first_name、last_name、phone、email。

查询:

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>

现有的机器学习数据库 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 模块,而不是一个库模块。

最后,进入管理界面,打开您感兴趣的组,打开计划任务,并在那里添加一个新任务。模块数据库应指向您存储脚本的位置。任务根是指该模块数据库中的路径前缀。您可以将其留给 / 以保持简单。任务数据库应指向您存储用户 XML 的位置。

于 2012-07-27T10:21:24.127 回答