抱歉,您的浏览器无法访问本站
本页面需要浏览器支持(启用)JavaScript
了解详情 >

本篇笔记将对消息转换器中的几个对象和工具进行简单介绍。这些工具和对象是CPI开发过程中不可或缺的存在。实际对这些对象的实际应用会在后面的实例中介绍。这里先简单介绍一下这些对象的功能和默认参数等。

SAP CPI Palette Functions - 消息转换器

一、介绍

本篇笔记将对消息转换器中的几个对象和工具进行简单介绍。这些工具和对象是CPI开发过程中不可或缺的存在。实际对这些对象的实际应用会在后面的实例中介绍。这里先简单介绍一下这些对象的功能和默认参数等。

二、内容修正符

该对象是CPI开发过程中最常使用的对象。该对象可以用于修改传入的有效负载内容(例如:报文与抬头等信息)。开发者可以将有效负载存储在Property中,并在之后的开发中进行使用。

1.内容修正符_属性

我们在Exchange Property页签中新建的变量并不会被传输给接收方。这里的逻辑可以简单理解成是定义变量。然后在之后的对象中进行引用。

创建一个名为CPIBody的参数,用来存储有效负载中的报文内容。因为有效负载的报文是一个表达式,所以需要修改Source TypeExpression。在Source Value中填入**${in.body}**。而Source Type正如上面说的和定义变量类似,有很多类型可供选择。常量、全局变量、数字范围、表达式、XPath、标头、局部变量、属性等。

2.内容修正符_设置Property属性

在当前内容修正符中设置的Message Body部分中的所有内容都将会被传递到下一个IFlow的对象中。不管来自源的系统传入和有效负载如何。

3.内容修正符_设置Body属性

三、转换器

1.XML转CSV

XSD 中源元素的路径 — 必须提供要从中转换 CSV 的节点的 XPath。以下面这个XML的内容为示例。XPath为:/message/content。

1
2
3
4
5
6
7
8
<message>
<content>
<from>webmaster@w3resource.com</from>
<to>webmaster@w3resource.com
<subject>On xml</to>
<body>Nesting of xml elements must be proper, in a well-formed xml document</body>
</content>
</message>
4.转换器_XML2CSV

XML转CSV的其他属性和设置如下:

  • Field Separator in CSV:默认为逗号。
  • CSV Header:如果您需要在 CSV 文件的第一行中使用字段名称作为标题,则应启用此选项。
  • Include field name as Headers:如果要在 CSV 文件中包括 XML 文件的父元素,请选中此复选框。
  • Include Parent element:如果要在 CSV 文件中包括 XML 文件的父元素,请选中此复选框。
  • Include attribute values: 如果要在 CSV 文件中包含属性值,请选中此复选框。

2.XML转JSON

5.转换器_XML2JSON

(1)JSON Prefix Separator

JSON 前缀分隔符。默认为冒号。用来区分Key和Value之间的分隔符。例如:“Key” : “Value”的形式。

除上面的分隔符之外,还有下面的分割符可供选择。

  • Comma:逗号 ,
  • Dot:点 .
  • Pipe:竖线 |
  • Semicolon:分号 ;
  • Space:空格

(2)JSON Output Encoding

JSON 输出编码。默认值为 “from header or property”。系统将从有效负载的标头或属性中读取 CamelCharsetName 编码格式。如果不存在此类标头或属性,则将使用默认 UTF-8。其他下拉值为:UTF-16BE、UTF-16LE、UTF-32BE、UTF-32LE、UTF-8。

(3)Suppress JSON Root Element

隐藏 JSON 根元素。如果要在转换为 JSON 后删除根元素,则可以启用此选项。从SAP传入的报文基本都是会包含根元素的,而如果接收方并不希望有根元素存在,则可以启用该选项。

以下面的XML为例子。

1
2
3
4
5
6
<notes>
<to>Tove</to>
<from>Jani</from>
<heading>Reminder</heading>
<body>Don't forget me this weekend!</body>
</notes>

JSON(选择 suppress root element 时 – 删除根元素)

1
2
3
4
5
6
{
"to": "Tove",
"from": "Jani",
"heading": "Reminder",
"body": "Don't forget me this weekend!"
}

(4)Streaming

通过流式处理,您可以指定 JSON 数组是显示整个 XML 还是仅显示指定的 XML 元素。如果要显示整个XML需要在勾选Streaming的同时,设置Convert XML Elements to JSON Array为ALL。

但如果仅将其中的某一个层级设置为数组形式。则可以选择Specified Ones,然后在最下方的XML Element中设置需要转换为JSON数组的层级节点。

以上面的XML为例子,我们按照XML转JSON图片中设置的 /notes 层级来转换JSON,转换后的结果如下所示。

1
2
3
4
5
6
7
8
9
10
{
"notes": [
{
"to": "Tove",
"from": "Jani",
"heading": "Reminder",
"body": "Don't forget me this weekend!"
}
]
}

四、解码器

该工具栏目中的对象可用于解码通过网络接收的消息内容。无需在 CPI 中进行任何配置。只需将其添加到您的 IFlow 中,其余部分会自行执行。

  • Base64 解码器:解码 base64 编码的消息内容
  • GZIP 解压缩:使用 GNU zip (GZIP) 解压缩邮件内容
  • MIME 多部份解码器:将MIME多部分消息转换为带有附件的消息。如果多部分头信息包含在消息正文中,请选择“多部分头信息内联(Multipart Headers Inline)”。如果未选择此选项且内容类型camel-header未设置为多部分类型,则不会进行解码。如果选择了此选项,但消息正文不是MIME多部分(正文中有MIME头信息),则该消息将被视为MIME注释,之后正文将为空。
  • ZIP 解压缩:使用 zip 解压缩消息内容
6.解码器

五、EDI 提取器

EDI提取器使您能够提取EDI报文头信息并将其传输到camel头信息中。该元素可以从单个传入的EDI报文中提取数据,并将其添加到exchange中,以便这些信息可以在后续的消息处理中进一步使用。EDI提取器可以读取两个平面文件和XML格式。

六、过滤器

从传入的 XML 消息中筛选所需的节点或节点列表或特定节点的值。以下面的XML为例子,提取message标签下的content标签列表的数据。

1
2
3
4
5
6
7
8
9
10
11
12
<message>
<content>
<from>Sales Order Header Table VBAK</from>
<to>Sales Order Item Table VBAP</to>
<body>Get Sales Order Information</body>
</content>
<content>
<from>Purchase Order Header Table EKKO</from>
<to>Purchase Order Item Table EKPO</to>
<body>GetPurchase Order Information</body>
</content>
</message>
7.过滤器

被提取出来的XML内容如下所示。

1
2
3
4
5
6
7
8
9
10
<content>
<from>Sales Order Header Table VBAK</from>
<to>Sales Order Item Table VBAP</to>
<body>Get Sales Order Information</body>
</content>
<content>
<from>Purchase Order Header Table EKKO</from>
<to>Purchase Order Item Table EKPO</to>
<body>GetPurchase Order Information</body>
</content>

七、消息摘要

1.介绍

和过滤器类似,但不一样的是消息摘要是将报文中的信息存储在消息标头中,而不是报文中。但是该对象只能处理XML形式的内容。

在详细信息中,“Message Digest” 集成流步骤将消息转换为规范 XML 文档。从此文档,计算摘要(哈希值)并写入消息标头。

2.属性

9.消息摘要
  • **Filter (XPath)**:筛选器 (XPath)。如果您只想转换部分消息,请输入 XPath 表达式以指定部分(可选属性)。还可定义前缀命名空间映射。
  • Canonicalization Method:规范化方法。规范化会跳过 XML 文档中的非重要元素。举例说明,在 XML 文档规范化期间应用以下更改:将引号和空格或空元素的编码统一为开始/结束对。原始消息保持不变。其中的默认值相关内容可以参考定义消息摘要 | SAP Help Portal中的内容。
  • Digest Algorithm:选择将用于计算摘要的哈希算法(必填属性)。
  • Target Header:目标标头名称。 输入要包含哈希值(必填属性)的目标标头元素的名称。此标头的值包含 base64 编码的消息摘要。默认情况下,标头的名称为 SAPMessageDigest,但您也可以定义其他标头名称。

八、脚本

这个内容十分多,后面或许会单独提出来讲。这个时候也可以看官方的教程。开发脚本和脚本集合 | SAP Help Portal

在 CPI 中,有 Groovy 和 JavaScript,其中 Groovy 是 CPI 社区中主要使用的一种。

九、参考资料

SAP Cloud Platform Integration (CPI) Part 8 – Palette Functions 2 – Message Transformers

SAP Cloud Integration | SAP Help Portal

评论