本案例为File2Soap的测试用例,数据从客户的FTP服务器上进过格式转换传输给SAP进行处理,需要将.dat或其他文本格式(.txt/.csv等也适用)转换为XML格式,以下为完整配置步骤说明。
发送方:PSAM_WMS
接收方:S4DCLNT120
测试文档格式:
转换后的XML格式:
PI端配置
-
ESR配置
1.创建Data Types
2.创建 Message Types
3.创建Service Interfaces
4.创建Message Mappings5.创建Operation Mappings
-
ID配置
1.创建Configuration Scenario
2.创建发送方Communication Channel文本内容格式转换的关键在下图,使用Content Conversion对内容进行转换。下面会对参数进行详细解释。
3.创建接收方Communication Channel
4.创建Integrated Configuration
SAP端配置
SAP端需要在事务代码SPROXY中创建对应的代理类,双击创建未创建的代理,激活后结束。
Content Conversion使用介绍部分
当发送方选择 file Content Conversion 作为 Message Protocol的时候,可以在此模式下将文本转换为XML格式。
Content Conversion Parameters 参数说明:
Document Name*:输入Message Type的名称,对于映射是必须的。
Document Namespace*:将命名空间插入到文档名称中,对于映射是必须的。
Document Offset:指定在文档开头忽略的行数,比如可以跳过注释行或者列标题行,不输入默认为0行。
Recordset Name:输入结构的名称,包含在XML架构中,默认名称<Recordset>,可使用ignoreRecordsetName参数进行忽略。
Recordset Namespace:设置上面参数Recordset Name结构的命名空间。
Recordset Structure*:输入序列的子节点的名称和数量,可以是:<NameA,nA,NameB,nB,...>,
nA=1,2,3,....或者*,*代表可以有无数条记录,可以理解为表类型。
例如此处的「Data,*」,即代表子节点名称为Data, '*' 代表可以有无限个子节点
<xml>
<Data>
...some fields
</Data>
<Data>
...some fields
</Data>
....
</xml>
Recordset Sequence*:可以选择Ascending或者Variable。
- Ascending:假定记录集结构的序列是唯一的。一旦出现较早的结构,就会启动新的记录集。
- Variable:假定记录集结构的顺序不是固定的。在出现另一个使用固定编号定义的结构之前,不会启动新的记录集。如果将所有结构都定义为变量,则系统会将整个文档解释为单个记录集。
Recordsets per Message:指定消息负载中组合在一起的记录集数,默认为*,如果文档中的记录集大于指定数量,则会拆分创建多条消息。
Key Field Name:如果Recordset Structure至少有一个具有值 '*',则必须指定Key字段,并且字段名必须出现在所有子结构中,准确来说,只要文件中有不同解析规则的数据时,就必须定义Key Filed Name以及KeyFieldValue。
Key Field Type:如果定义了Key Field Name,则使用该选项,指定预定义的key字段类型。
记录集结构的参数说明:
ignoreRecordsetName:true或者不使用该参数,为true时则会忽略掉自动添加的<Recordset>节点。
<NameA>.fieldFixedLengths:输入以逗号分隔的数字,作为拆分行数据的依据。
<NameA>.fieldSeparator:输入分隔符,解析器会以该字段作为拆分行数据的依据。
一些特殊的字符如下
TAB符:\t
回车符(CR):\r
换行符(LF):\n
任意字符:\x<code> <code>表示要显示的字符的十六进制字符代码
<NameA>.keepIncompleteFields:仅当维护了<NameA>.fieldFixedLengths参数时,该参数才会生效;
NO:在结构中找到的最后一个字段短于 中指定的字段,则处理将终止,并显示相应的错误消息。
YES:在入站结构中找到的最后一个字段将传输到出站结构,即使该字段短于<NameA>.fieldFixedLengths中指定的字段,使用此参数可以控制结构中最后一个字段的转换例程的行为。
<NameA>.fieldFixedLengthType:(PI7.5版本之前不支持该属性)
byte:计算字符的字节长度
char:默认值,计算字符长度
<NameA>.enclosureSign:指定充当文本分隔符的字符串。由此类分隔符括起来的文本将原封不动地传输到目标结构,尽管默认设置是删除所有文本分隔符。此类文本中的分隔符将被忽略。
此参数是可选的。默认设置为空值(无文本分隔符)。
<NameA>.enclosureSignEnd:如果文本开头和结尾的文本分隔符不同,请在此处为文本结尾指定文本分隔符。
如果未在此处输入,则使用NameA.enclosureSign的内容。
<NameA>.enclosureSignEscape:指定一个字符串,如果文本分隔符出现在它分隔的文本中,则替换该字符串。
传输文本时,字符串将替换为NameA.enclosureSign中指定的值。
<NameA>.enclosureSignEndEscape:指定一个字符串,如果文本出现在文本分隔的文本中,则替换文本末尾的文本分隔符。
传输文本时,字符串将替换为 NameA.enclosureSignEnd 中指定的值
<NameA>.enclosureConversion:要在传输时删除分隔符,或将其替换为转义字符,请输入YES(默认值)。要传输未更改的字符,请输入NO。
如果指定 xml.enclosureSign='' and xml.enclosureSignEsc='''',则用引号括起来的文本将原封不动地传输,并删除引号。
如果引号 ('''') 的转义字符出现在文本本身中,则在传输过程中将用引号替换。
<NameA>.endSeparator:若要将其他字符串定义为行中最后一列之后的分隔符,请在此处指定该字符串。系统在处理最后一列时跳过此字符串(否则系统会将其视为最后一列的一部分)。
<NameA>.beginSeparator:要将其他字符串定义为行中第一列之前的分隔符,请在此处进行规范。系统在处理此列时会跳过此分隔符(否则系统会将其视为第一列的一部分)。
在分隔符的所有字符串(NameA.fieldSeparatorNameA.beginSeparatorNameA.endSeparator)中,可以指定不可打印的 ASCII 字符。这些字符都可以以“0xHH”的形式单独插入字符串中(包括引号),其中 HH 表示编码为十六进制值的字符。
在 XML 文档中插入分隔符的字符串:
用 NameA.beginSeparator 和 NameA.endSeparator 指定的分隔符也可以作为字段插入到生成的 XML 文档的结构中。为此,请使用以下条目指定字段名称:
NameA.addBeginSeparatorAsField=<fieldname> and/or NameA.addEndSeparatorAsField=<fieldname>
然后,将字符串与指定的字段名称一起插入到结构的开头或结尾,因为它们是在NameA.beginSeparator和NameA.endSeparator中指定的,即包括特殊字符的定义。无法转换特殊字符,因为 XML 文档中不允许使用此类型的字符。
<NameA>.fieldNames:输入结构列的名称。输入格式取决于以下内容:
如果为 NameA.fieldFixedLengths 指定了值,则需要一个字符串,其中包含文件列的名称作为以逗号分隔的参数,如果您还为 NameA.columnSeparator 指定了值,这也同样适用。
如果仅为 NameA.fieldSeparator 指定值,则系统需要一个字符串,其中包含与文件行格式相同的文件列名称。这意味着相同的分隔符和您为其指定的 NameA.endSeparatorand/或NameA.beginSeparator 的任何其他字符串都是预期的。
<NameA>.keyFieldValue:指定结构的键字段的值,如果设置了键字段名称,则此条目是必需的。否则,将忽略该条目。
<NameA>.fieldContentFormatting:
trim:可删除找到的值的所有前导空格和后续空格。这是默认值
nothing:确保值保持不变,保持原有空格。
<NameA>.keyFieldInStructure:
如果要将子结构的键字段添加到 XML 文档中,请输入:add,这是默认值。
如果要忽略键字段,请输入:ignore
<NameA>.missingLastfields:如果入站结构的字段少于配置中指定的字段,则按如下方式创建 XML 出站结构:
- ignore
出站结构仅包含入站结构中的字段
- add
出站结构包含配置中的所有字段;入站结构中缺少的字段为空。
- error
由于入站结构不完整,转换将终止。将显示一条错误消息。
<NameA>.additionalLastFields:如果入站结构的字段数多于配置中指定的字段数,则按如下方式创建 XML 出站结构:
- ignore
出站结构仅包含入站结构中的字段
- error
由于入站结构不完整,转换将终止。将显示一条错误消息。
默认值为 ignore。如果已定义参数NameA.fieldFixedLengths,则缺省值为 error。
如果已定义 NameA.fieldFixedLengths参数,并且未设置上述任一参数(<NameA>.missingLastfields 和 <NameA>.additionalLastFields), 除默认值外,转换例程的工作方式与处理结构偏差中所述相同。
只有在设置两个参数中的一个后,才会使用其默认值评估另一个参数。
为了确保为变量入站结构明确定义的运行时行为,我们建议您始终设置这两个参数。