我正在尝试使用计算节点创建xml文件。 我的要求是生成以下xml文档
<soapenv:Envelope>
<soapenv:Body>
<man:request domain="My-Dom">
<man:b2b-query-metadata>
<man:query>
<man:query-condition evaluation="property-greater-than">
<man:property-name>InputTime</man:property-name>
<man:value>2018-08-10 00:00:00</man:value>
</man:query-condition>
</man:query>
<man:result-constraints>
<man:sort-order>
<man:property-name direction="asc">InputTime</man:property-name>
</man:sort-order>
</man:result-constraints>
</man:b2b-query-metadata>
</man:request>
</soapenv:Body>
</soapenv:Envelope>
以下是用于生成所需xml文档的代码段。
CREATE COMPUTE MODULE FLOW_Compute
CREATE FUNCTION Main() RETURNS BOOLEAN
BEGIN
CALL CopyMessageHeaders();
CALL CreateSOAPReq();
RETURN TRUE;
END;
CREATE PROCEDURE CopyMessageHeaders() BEGIN
DECLARE I INTEGER 1;
DECLARE J INTEGER;
SET J = CARDINALITY(InputRoot.*[]);
WHILE I < J DO
SET OutputRoot.*[I] = InputRoot.*[I];
SET I = I + 1;
END WHILE;
END;
CREATE PROCEDURE CreateSOAPReq() BEGIN
DECLARE soapenv NAMESPACE 'http://schemas.xmlsoap.org/soap/envelope/';
DECLARE man NAMESPACE 'http://www.datapower.com/schemas/management';
SET OutputRoot.HTTPRequestHeader.POST = 'https://my.testbox.com:5550/service/mgmt/3.0';
SET OutputRoot.HTTPRequestHeader."Content-Type" = 'text/xml;charset=UTF-8';
SET OutputRoot.HTTPRequestHeader."Authorization" = 'Basic '||base64Encode(CAST('myuserid:mypassword' as BLOB CCSID InputRoot.Properties.CodedCharSetId));
SET OutputRoot.HTTPRequestHeader.Host = 'my.testbox.com:5550';
SET OutputRoot.XMLNSC.soapenv:Envelope.soapenv:Body.man:request.(XMLNSC.Attribute)man:domain = 'My-Dom';
SET OutputRoot.XMLNSC.soapenv:Envelope.soapenv:Body.man:request.man:"b2b-query-metadata".man:query.man:"query-condition".evaluation = 'property-greater-than';
SET OutputRoot.XMLNSC.soapenv:Envelope.soapenv:Body.man:request.man:"b2b-query-metadata".man:query.man:"query-condition".man:"property-name" = 'InputTime';
SET OutputRoot.XMLNSC.soapenv:Envelope.soapenv:Body.man:request.man:"b2b-query-metadata".man:query.man:"query-condition".man:value = '2018-08-10 00:00:00';
--SET OutputRoot.XMLNSC.soapenv:Envelope.soapenv:Body.man:request.man:"b2b-query-metadata".man:"result-constraints".man:"sort-order".man:"property-name".(XMLNSC.Attribute)man:direction = 'asc';
END;
END MODULE;
更新:
在成功清除障碍之后,我可以使用以下语句<man:request domain="My-Dom">
获得以下xml元素:SET OutputRoot.XMLNSC.soapenv:Envelope.soapenv:Body.man:request.(XMLNSC.Attribute)man:domain = 'B2B-Dev';
,在这一部分,我感到震惊:<man:property-name direction="asc">InputTime</man:property-name>
我尝试扫描一些示例,其中我们从头开始创建outputroot
,但是大多数示例都处理通过入站内容进行的解析:
https://www.ibm.com/support/knowledgecenter/en/SSKM8N_8.0.0/com.ibm.etools.mft.doc/ac67241_.htm
我了解我们拥有一些属性,需要为其分配元素值。我不确定如何进行此操作。有人可以指出一个涉及esql中的SET
命令的示例。
欢迎任何建议。
答案 0 :(得分:0)
这不是普通的XML属性-它是名称空间声明。 您需要声明一个名称空间常量,然后按如下所述在您的ESQL中使用它:
https://www.ibm.com/support/knowledgecenter/en/SSMKHH_10.0.0/com.ibm.etools.mft.doc/ac67194_.htm
答案 1 :(得分:0)
以下是我到目前为止所面临的问题。
OutputRoot.XMLNSC.soapenv:Envelope.soapenv:Body.man:request.(XMLNSC.Attribute)man:domain = 'My-Dom';
,已解决,当将MQ Output节点放在Compute节点的前面时,我得到了期望的结果。感谢@Attila Repasi在我的esql代码中指出了这些缺陷。 :)
答案 2 :(得分:0)
尝试翻转作业。
假设下面是XML
<NS1:Envelope xmlns:NS1="http://schemas.xmlsoap.org/soap/envelope/">
<NS1:Header/>
<NS1:Body>
<NS2:request domain="default" xmlns:NS2="http://www.datapower.com/schemas/management">
<NS2:set-file name="local:///Phase1/tullu">UGlzdGFzaW5naA==</NS2:set-file>
</NS2:request>
</NS1:Body>
</NS1:Envelope>
下面是ESQL
SET OutputRoot.XMLNSC.ns21:Envelope.ns21:Body.ns39:request.(XMLNSC.Attribute)domain = datapowerDomain;
SET OutputRoot.XMLNSC.ns21:Envelope.ns21:Body.ns39:request.ns39:"set-file"=InputRoot.XMLNSC.ns:createFileRequest.directoryDetails.fileContentsInBase64;
SET OutputRoot.XMLNSC.ns21:Envelope.ns21:Body.ns39:request.ns39:"set-file".(XMLNSC.Attribute)name=targetFQFileName;