点击此处---> 群内免费提供SAP练习系统(在群公告中)
加入QQ群:457200227(SAP S4 HANA技术交流) 群内免费提供SAP练习系统(在群公告中)
同事们,
我正在尝试将JSON请求(来自外部系统)转换为HCI中的XML(C4C)。 我正在使用groovy脚本。
我的输入json是:
{ " serviceCall":{ " id":" 4021788", " statusCode":"-2" } }
C4C中预期的输出xml是:
TEST_INB_SER_CORE 2006-03-28T12:00:00.1234567Z 假 true <发送方>AAAA <收件人方>ZZZZ 3 106 SRQ_REQ_CONF_BMH 4021788 -2
除了json中的两个值之外,我还必须对所有具有属性,值,名称空间和前缀的xml结构进行硬编码。
因此我要做的是
步骤1:我将接收到的json修改为上述xml格式,以便在步骤2-JSONtoXML转换器中可以直接将其转换并获取输出
代码:
导入com.sap.gateway.ip.core.customdev.util.Message; 导入java.util.HashMap; 导入java.lang.StringBuffer; 导入groovy.json.JsonSlurper; 导入groovy.json.JsonBuilder; 导入groovy.json。*; def消息processData(消息消息){ //身体 //def body = message.getBody(java.lang.String)as String; 字符串正文= message.getBody(String.class); def messageLog = messageLogFactory.getMessageLog(message); if(messageLog!= null){ messageLog.setStringProperty(" Logging#1","将有效负载打印为附件"); messageLog.addAttachmentAsString("从Postman-Coresystem传入的JSON:",正文," text/json"); } //解析来自内核的传入json响应 def jsonSlurper =新的JsonSlurper(); def entryJson = jsonSlurper.parseText(body); //从incomingJson获取值 字符串serviceCallID = entryJson.serviceCall.id; 字符串statusCode = entryJson.serviceCall.statusCode; //将值设置为message属性 message.setProperty(" id",serviceCallID); message.setProperty(" statusCode",statusCode); //使用c4c请求结构构建新的json def builder =新的JsonBuilder() builder.ServiceRequestReplicateConf { MessageHeader { ID(" MJTEST_CORE_TO_C4C") CreationDateTime('2018-07-07T12:00:00.1234567Z') TestDataIndicator('假') ReconciliationIndicator('true') SenderParty { 内部识别码{ '@schemeID'('CommunicationSystemID') '@schemeAgencyID'('310') '$ title'('AAAA') } } 接收方{ 内部识别码{ '@schemeID'('CommunicationSystemID') '@schemeAgencyID'('310') '$ title'('ZZZZ') } } 业务范围 { TypeCode('3') ID('106') } } ServiceRequestReplicationConfirmationMessage { BasicMessageHeader { ID('SRQ_REQ_CONF') } ServiceRequestInstance { '@actionCode'('02') ID(serviceCallID) StatusText(状态代码) } } } 字符串newjson = JsonOutput.prettyPrint(builder.toString()); def messageLog2 = messageLogFactory.getMessageLog(message); if(messageLog!= null){ messageLog.setStringProperty(" Logging#1","将有效负载打印为附件"); messageLog.addAttachmentAsString("已重构的Json,具有完整的结构,如C4C:",newjson," text/json"); } message.setBody(newjson); 返回消息; }
修改后的输出Json { " ServiceRequestReplicateConf":{ " MessageHeader":{ " ID":" MJTEST_CORE_TO_C4C", " CreationDateTime":" 2018-07-07T12:00:00.1234567Z", " TestDataIndicator":" false", " ReconciliationIndicator":" true", " SenderParty":{ " InternalID":{ " @schemeID":" CommunicationSystemID", " @schemeAgencyID":" 310", " $ title":" AAAA" } }, " RecipientParty":{ " InternalID":{ " @schemeID":" CommunicationSystemID", " @schemeAgencyID":" 310", " $ title":" ZZZZ" } }, "业务范围": { " TypeCode":" 3", " ID":" 106" } }, " ServiceRequestReplicationConfirmationMessage":{ " BasicMessageHeader":{ " ID":" SRQ_REQ_CONF" }, " ServiceRequestInstance":{ " @actionCode":" 02", " ID":" 4021788", " StatusText":"-2" } } } }
第2步:使用Json Prefix(glob)和XML名称空间( http://sap.com/xi/SAPGlobal20/Global )
第3步:通过SOAP适配器将XML发送到C4C
我得到的输出XML:
<?xml version ='1.0'encoding ='UTF-8'?>MJTEST_CORE_TO_C4C 2018-07-07T12:00:00.1234567Z 假 true <发送方>AAAA <收件人方>ZZZZ 3 106 SRQ_REQ_CONF 4021788 -2
我的要求是:
在以下标签中,我需要在标签的开头添加前缀" glob",如C4C中的Expected output xml所示。
和
您能帮我吗?
谢谢
玛丽
同事们,
我可以找到我想要的答案。
我通过在单引号中提供前缀和开始标记,对下面的Step1代码进行了修改:
这给了我所需的预期输出:
输出Json:
输出带有前缀glob的XML:
P.S:为什么我尝试采用的方法是,对于Sender,他们没有XSD或可以映射到C4C入站服务结构的常规结构。 因此尝试了这种方式。
我面临的挑战:
当我尝试从Google获得的答案时,JSONtoXML转换器或groovy脚本不支持。 另外,我在Cloud Platform Integration( help.sap.com )文档中找不到 在我的情况下应支持的任何示例或语法。 我基本上不愿意添加JSON前缀(在我的示例中为 eg:glob),名称空间( eg: xmlns:glob =" http://sap.com/xi/SAPGlobal20/Global ")和 也带有具有属性和值的JSON元素( InternalID {'@schemeID'('CommunicationSystemID')'@ schemeAgencyID'('310')'$ title'('AAAA') }。在这里,要表示属性,我们必须使用前缀" @",对于值,我们必须使用前缀" $"。
希望这对尝试使用Groovy脚本中的JSON到XML转换器将传入JSON转换为传出XML的同事有所帮助。
感谢与问候,
玛丽·何塞
一周热门 更多>