2020-09-10 10:21发布
加入QQ群:457200227(SAP S4 HANA技术交流) 群内免费提供SAP练习系统(在群公告中)
嗨,
我在pi 7.4双协议栈中工作,每当PI中有错误时,都需要将错误信息发送到特定客户端。 客户名称将出现在消息的有效负载中,因此基于有效负载条件,需要将警报电子邮件路由到特定的客户端。
Ex:如果PI中客户端名称字段为" X"的消息失败,并且出现了一些错误,则必须将该错误消息路由到"客户端X"的邮件ID,对于其他客户端" Y"," Z"也是如此 定制的主体和主题。
请提出实现此要求的方法。
致谢
Pavan
嗨,Pavan,您可以使用以下一个-
包com.sap.pi.JSON2XMLConversion; 导入org.json.JSONObject; 导入org.json.XML; 导入com.sap.aii.mapping.api.AbstractTransformation; 导入com.sap.aii.mapping.api.StreamTransformationException; 导入com.sap.aii.mapping.api.TransformationInput; 导入com.sap.aii.mapping.api.TransformationOutput; 导入java.io.InputStream; 导入java.io.OutputStream; 公共类JSON2XMLConversion扩展AbstractTransformation { 公共无效transform(TransformationInput arg0,TransformationOutput arg1)引发StreamTransformationException { InputStream in = arg0.getInputPayload()。getInputStream(); OutputStream输出= arg1.getOutputPayload()。getOutputStream(); 尝试 { byte [] b =新的byte [in.available()]; in.read(b); 字符串JSONreq =新字符串(b); JSONreq = JSONreq.replace("&","&"); JSONreq = JSONreq.replace(" ",""); int contStart = JSONreq.indexOf(" "); int contEnd = JSONreq.indexOf(" "); JSONreq = JSONreq.substring(contStart,contEnd).replace(" ",""); JSONObject obj =新的JSONObject(JSONreq); //将json转换为xml 字符串xml_data = XML.toString(obj); xml_data =" "。concat(xml_data).concat(" "); out.write(xml_data.getBytes()); } 捕获(异常e) { e.toString(); } } }
将电子邮件输入视为XML如下-
它将像这样转换为XML-您可以将其映射到目标邮件包结构,以将电子邮件发送给特定的客户端。 我在这里使用了UDS属性ReprocessAccount,但是您可以使用Client ID进行更改,然后在下一步中进行映射。
您必须在构建路径/Maven中添加外部jar-在NWDS中构建上述Java类时,还需要将ESR作为导入的Archive导入。
https://www.java2s.com/Code/Jar/j/下载javajsonjar.htm
希望这会有所帮助!
谢谢
Sugata
嗨,Sugata,
非常感谢您的回复
据我了解,在第一种情况下,我需要为客户端名称配置内部邮件ID和uds,以便在第二种情况下(邮件到邮件),邮件发件人适配器将从内部邮件ID中读取警报并将其发送到客户端邮件 使用邮件接收者的ID。
感谢不赞成使用邮件包的人共享源结构的示例架构,我可以继续使用邮件包作为目标结构来创建映射吗? 请建议
请帮忙分享一下Java映射,以便从uds中提取值
Hello Pavan,您希望每次根据有效负载中的客户端名称将电子邮件警报发送到特定的电子邮件ID。
您可以执行以下操作-考虑到每个客户端共享相同的发送方接口有效载荷模式
1。 创建ICO1-这是您的实际情况。 为此接口创建一个AlertRule。 PI出现此故障后,您可以将警报电子邮件发送到特定的电子邮件ID。例如, abc@xyz.com 。
您还可以为此发件人界面配置UDS,以便可以在警报电子邮件中包括客户端名称。
2。 创建ICO2-,这将是一个邮件到邮件的方案,您将把电子邮件作为目标接收者发送给客户端。
在这种情况下,您的发件人邮件适配器将读取从第一种情况发送警报的电子邮件ID。 您还需要一个Java映射(因为电子邮件正文为JSON)来提取UDS值-这是客户端名称。 然后在第二步消息映射中,您可以创建一个邮件包结构。 在第二步映射中,您可以使用"固定值"或"值映射"来获取客户端的电子邮件ID。
您可以将警报邮件中的JSON转换为XML,然后根据该XML创建XSD。 在第二个映射中,可以将此XSD用作源,并将邮件包用作目标。
样本警报架构-
JSON到XML转换器-
https://www.freeformatter.com/json-to-xml- converter.html
XML到XSD转换器-
https://www.freeformatter.com/xsd-generator.html
确定,并且在代码中使用此行-
不确定为什么将其更改为下面的代码部分
JSONreq = JSONreq.replace("&","&");
非常感谢您的努力和共享代码,我将按照您的建议尝试并让您知道结果。
最多设置5个标签!
嗨,Pavan,
您可以使用以下一个-
将电子邮件输入视为XML如下-
它将像这样转换为XML-您可以将其映射到目标邮件包结构,以将电子邮件发送给特定的客户端。 我在这里使用了UDS属性ReprocessAccount,但是您可以使用Client ID进行更改,然后在下一步中进行映射。
您必须在构建路径/Maven中添加外部jar-在NWDS中构建上述Java类时,还需要将ESR作为导入的Archive导入。
https://www.java2s.com/Code/Jar/j/下载javajsonjar.htm
希望这会有所帮助!
谢谢
Sugata
嗨,Sugata,
非常感谢您的回复
据我了解,在第一种情况下,我需要为客户端名称配置内部邮件ID和uds,以便在第二种情况下(邮件到邮件),邮件发件人适配器将从内部邮件ID中读取警报并将其发送到客户端邮件 使用邮件接收者的ID。
感谢不赞成使用邮件包的人共享源结构的示例架构,我可以继续使用邮件包作为目标结构来创建映射吗? 请建议
请帮忙分享一下Java映射,以便从uds中提取值
致谢
Pavan
Hello Pavan,
您希望每次根据有效负载中的客户端名称将电子邮件警报发送到特定的电子邮件ID。
您可以执行以下操作-考虑到每个客户端共享相同的发送方接口有效载荷模式
1。 创建ICO1-这是您的实际情况。 为此接口创建一个AlertRule。 PI出现此故障后,您可以将警报电子邮件发送到特定的电子邮件ID。例如, abc@xyz.com 。
您还可以为此发件人界面配置UDS,以便可以在警报电子邮件中包括客户端名称。
2。 创建ICO2-,这将是一个邮件到邮件的方案,您将把电子邮件作为目标接收者发送给客户端。
在这种情况下,您的发件人邮件适配器将读取从第一种情况发送警报的电子邮件ID。 您还需要一个Java映射(因为电子邮件正文为JSON)来提取UDS值-这是客户端名称。 然后在第二步消息映射中,您可以创建一个邮件包结构。 在第二步映射中,您可以使用"固定值"或"值映射"来获取客户端的电子邮件ID。
您可以将警报邮件中的JSON转换为XML,然后根据该XML创建XSD。 在第二个映射中,可以将此XSD用作源,并将邮件包用作目标。
样本警报架构-
JSON到XML转换器-
https://www.freeformatter.com/json-to-xml- converter.html
XML到XSD转换器-
https://www.freeformatter.com/xsd-generator.html
谢谢
Sugata
确定,并且在代码中使用此行-
不确定为什么将其更改为下面的代码部分
JSONreq = JSONreq.replace("&","&");
嗨,Sugata,
非常感谢您的努力和共享代码,我将按照您的建议尝试并让您知道结果。
致谢
Pavan
一周热门 更多>