SAP PI/PO File2Soap 发送方使用Content Conversion将文本格式转换为XML格式

本案例为File2Soap的测试用例,数据从客户的FTP服务器上进过格式转换传输给SAP进行处理,需要将.dat或其他文本格式(.txt/.csv等也适用)转换为XML格式,以下为完整配置步骤说明。

发送方:PSAM_WMS

接收方:S4DCLNT120

测试文档格式:

转换后的XML格式:

PI端配置

  • ESR配置

    1.创建Data Types

    2.创建 Message Types

    3.创建Service Interfaces


    4.创建Message Mappings
    5.创建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), 除默认值外,转换例程的工作方式与处理结构偏差中所述相同。

只有在设置两个参数中的一个后,才会使用其默认值评估另一个参数。

为了确保为变量入站结构明确定义的运行时行为,我们建议您始终设置这两个参数。

官方文档:https://help.sap.com/docs/SAP_NETWEAVER_750/5cf7d2de571a45cc81f91261668b7361/446713ec3f914ddee10000000a1553f7.html?locale=en-US

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

DeveloperMrMeng

觉得有用的佛系投币哦

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值