Я пытаюсь создать 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;
Обновление:
После успешного устранения препятствия, когда я смог получить следующий элемент xml: <man:request domain="My-Dom">
, используя следующее выражение 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
Я понимаю, что у нас есть атрибуты, которым необходимо присвоить значение элемента. Я не уверен, что делать дальше. Может кто-нибудь указать мне на пример, который включает в себя команду SET
в esql.
Любые предложения приветствуются.