SAP PI/PO Soap2File 接收方使用StrictXml2PlainBean将XML转换为文本格式

目录

PI端配置

ESR配置

ID配置

SAP端配置

StrictXml2PlainBean使用介绍部分


本案例为Soap2File的测试用例,数据从SAP侧输出到客户的FTP服务器上,需要将Soap的XML报文格式转换为.dat或其他文本格式(.txt/.csv等也适用),以下为完整配置步骤说明。

发送方:S4DCLNT120

接收方:PSAM_WMS

XML报文格式:

 生成的文本格式:

PI端配置

  • ESR配置

    1.创建Data Type

    2.创建Message Type

    3.创建Service Interfaces


    4.创建Message Mappings

    5.创建Operation Mappings

  • ID配置
    1.创建Configuration Scenario


    2.创建发送方Communication Channel

    3.配置接收方Communication Channel


    XML转换为文本格式重点在下图,使用Module对报文内容进行格式转换。下面会对参数进行详细解释。

    4.创建Integrated Configuration



SAP端配置

SAP端需要在事务代码SPROXY中创建对应的代理类,双击创建未创建的代理,激活后结束。

 代码测试部分:

REPORT zprsap2ftp_test001.

DATA:
  lv_error               TYPE REF TO cx_ai_system_fault,
  lv_error2              TYPE REF TO cx_ai_application_fault,
  lv_text                TYPE string,
  lv_xi_message_id       TYPE sxmsmguid,
  lo_message_id_protocol TYPE REF TO if_wsprotocol_message_id.

DATA:
  lc_test001 TYPE REF TO zprco_si_sap2ftp_test001_req,
  ls_input   TYPE zprmt_sap2ftp_test001,
  lt_data    TYPE zprdt_sap2ftp_test001_head_tab,
  ls_data    TYPE zprdt_sap2ftp_test001_head.
*  lt_items   TYPE zprdt_sap2ftp_test001_item_tab,
*  ls_items   TYPE zprdt_sap2ftp_test001_items.

*lt_items = VALUE #( ( itemno = '001' itemtxt = '明细文本1' werks = '1710' )
*                    ( itemno = '002' itemtxt = '明细文本2' werks = '1720' ) ).

lt_data = VALUE #( ( bukrs = '1000' butxt = `公司1` )
                   ( bukrs = '1200' butxt = `公司2` )
                   ( bukrs = '1300' butxt = `公司3` ) ).


ls_input-mt_sap2ftp_test001-head = lt_data.

IF lc_test001 IS INITIAL.
  TRY.
      CREATE OBJECT lc_test001.
    CATCH cx_ai_system_fault INTO lv_error.
  ENDTRY.
ENDIF.

TRY.
    lo_message_id_protocol ?= lc_test001->get_protocol( if_wsprotocol=>message_id ).

    CALL METHOD lc_test001->si_sap2ftp_test001_req
      EXPORTING
        output = ls_input.

    lv_xi_message_id = lo_message_id_protocol->get_message_id( ).

    COMMIT WORK.
  CATCH cx_ai_system_fault INTO lv_error.
    IF sy-subrc = 0.
      CALL METHOD lv_error->if_message~get_text
        RECEIVING
          result = lv_text.
    ENDIF.
  CATCH cx_ai_application_fault INTO lv_error2.
    IF sy-subrc = 0.
      CALL METHOD lv_error2->if_message~get_text
        RECEIVING
          result = lv_text.
    ENDIF.
ENDTRY.

IF lv_text IS INITIAL.
  WRITE:/ 'Send success'.
ELSE.
  WRITE: lv_text.
ENDIF.

StrictXml2PlainBean使用介绍部分:

你可以使用此模块将XML文档转换为文本格式,可以是固定长度的文本,或者是具有分隔符的文本格式,不支持深层结构的转换。

StrictXml2PlainBean使用方式

 1.首先在接收方的Module页签下添加模块AF_Modules/StrictXml2PlainBean,类型选择Local Enterprise Bean,Module Key可以任意指定,与下面的列表对应。

 2.在下方的Module Configuration列表中添加对应的参数和值,以下是参数介绍:

转换类型

recordTypes:可以为XML文档中每个记录集定义不同的转换类型

singleRecordType:为XML文档中所有记录集定义相同的转换类型,本例中使用该方式。

tips:只能选择一种转换类型,无论选择哪个参数,都会自动排除第二个参数。

下文中的<RecordType>即为转换类型具体的值,本例中维护的值为xmlHeadData,则<RecordType>在实际参数名称中需要替换为xmlHeadData,可参照上图。

转换为具有分隔符的文本列表

<RecordType>.fieldSeparator:指定字符之间的分隔符,'|',',','-' 等等,一些特殊的字符如下

TAB符:\t

回车符(CR):\r

换行符(LF):\n

任意字符:\x<code>        <code>表示要显示的字符的十六进制字符代码

转换为具有固定长度的文本列表

<RecordType>.fieldLengths:指定一个以逗号分隔的字符串,表示文本生成的字段数量和长度。

例:BUKRS  BUTXT  WERKS转换为固定长度的文本,该参数值可以指定为 4,30,4

<RecordType>.fieldLengthExceeded:指定如何处理超过配置字段长度的字段,该参数允许的值为:

  • error (default)
    中断消息处理并报错
  • cut
    切掉多余的字符
  • ignore
    忽略字段长度限制

其他选项

<RecordType>.beginSeparator:开始分隔符,将字符串放在第一个字段前面

<RecordType>.endSeparator:结束分隔符,将字符串放在最后一个字段后面

contentType:输入转换后的有效负载的MIME类型,默认为text/plain

addHeaderLine:仅当转换类型为singleRecordType时,才定义此参数

  • none (default)            不添加标题行
  • formXML                   根据XML节点的元素名添加标题行
  • formConfiguration   根据配置的参数添加标题行,即自定义标题行

headerLine:仅当使用了 addHeaderLine=fromConfiguration 时才使用此参数

本例使用了该方法,值为:公司代码\t描述\r ,以Tab符分隔,回车符结束

fixedLineWidth:指定单行的最大长度n(以字符为单位),配合lineSeparator参数使用,将lineSeparator指定的分隔符每隔n个字符插入到文本中。

lineSeparator:仅当使用了fixedLineWidth参数时,才使用该参数,将该字符写入到fixedLineWidth指定的长度位置,默认为\r\n。


关于上面转换参数的解释示例,如果要转换的文档如下:

<root>

    <RecordType1>

        <column-name1>column-value</column-name1>

        <column-name2>column-value</column-name2>

        <column-name3>column-value</column-name3>

    </RecordType1>

    <RecordType2>

        <data>column-value</data>

        <data2>column-value</data2>

        <data3>column-value</data3>

    </RecordType2>

</root>

如果转换类型使recordTypes,则可以指定recordTypes=RecordType1,RecordType2,然后你可以为每个记录集类型定义不同的转换规则。

如果转换类型使用singleRecordType,则两种记录集的转换方式相同。

官方地址:https://help.sap.com/docs/SAP_NETWEAVER_750/2462a9a468b1491b91fda1923d23f667/44748d595dab6fb5e10000000a155369.html?locale=en-US&q=Module%20Processor

以上。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

DeveloperMrMeng

你的鼓励将是我创作的最大动力

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

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

打赏作者

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

抵扣说明:

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

余额充值