转自:https://www.cnblogs.com/fanjb/p/10829858.html

一、      接口内容

接口详细信息

1.  字段对应关系

发送字段对应关系

返回字段对应关系

2.  报文信息

传入报文(报文结构,外围系统提供)

 1 <?xml version="1.0" encoding="utf-8"?>
2 <REQMESG>
3 <HEADER>
4 <WERKS>B001</WERKS>
5 </HEADER>
6 <ITEM>
7 <MATNR>000000000500022359</MATNR>
8 <WERKS>B001</WERKS>
9 <LGORT>BBBB</LGORT>
10 </ITEM>
11 <ITEM>
12 <MATNR>000000000500022352</MATNR>
13 <WERKS>B001</WERKS>
14 <LGORT>9501</LGORT>
15 </ITEM>
16 </REQMESG>

返回报文(外围系统提供)

 1 <?xml version="1.0" encoding="UTF-8"?>
2 <RESPONSE>
3 <MESG>天津市电工厂名称为</MESG>
4 <ITEM>
5 <MATNR>000000000500022359</MATNR>
6 <WERKS>B001</WERKS>
7 <LGORT>BBBB</LGORT>
8 <MAKTX>测试物料2004</MAKTX>
9 <LABST>3425.0</LABST>
10 </ITEM>
11 <ITEM>
12 <MATNR>000000000500022352</MATNR>
13 <WERKS>B001</WERKS>
14 <LGORT>9501</LGORT>
15 <MAKTX>test004</MAKTX>
16 <LABST>6.0</LABST>
17 </ITEM>
18 </RESPONSE>

二、      接口配置

登陆网址:http://sgnwpid.sgcc.com.cn:50000/dir/start/index.jsp

事物码登陆:SXMB_IFR

A.  配置ESR(Enterprise Service Builder)

找到对应命名空间(人资组开发机目前只有薪酬通道是正常的,此处我们暂时挂到薪酬组下)

1.      创建Data Types

代理类形式需要为双方接口创建数据类型,国网项目都需要走esb通道,所传数据以<![CDATA[*]]>包裹xml报文形式进行传输,所以发出方只需要输入输出各一个参数即可,此处我们使用公共数据类型

1.1  外围侧发送方

DT_SHARE_SGHRERP2CEERP_REQ

DT_SHARE_SGHRERP2CEERP_RESP

1.2  ERP侧接收方

DT_TS01_MM2CEERP_REQ

DT_TS01_MM2CEERP_RESP

1.3  外围和集中部署关系图如下

2.      创建Message Types

根据DATA TYPES创建ERP侧的MESSAGER TYPES

3.      创建Service Interface

分别创建外围系统方和集中部署方服务接口。

SIO_TS01_MM_GETMSG

SII_TS01_CEERP_GETMSG

4.      创建Imported Archives

编辑xsl文档,并导入IA

CDATA和xml之间转换的固定格式:

 1 <?xml version="1.0" encoding="UTF-8"?>
2 <xsl:stylesheet version="2.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
3 <xsl:output method="xml" version="1.0" encoding="UTF-8" indent="yes"/>
4 <xsl:template match="*">
5 <!-- disable-output-escaping 属性为yes不转义符号-->
6 <xsl:variable name="xmlStr" select="/*/*"/>
7 <xsl:choose>
8 <xsl:when test="contains($xmlStr,'&lt;?xml version=&quot;1.0&quot; encoding=&quot;UTF-8&quot;?&gt;')">
9 <xsl:value-of select="substring-after($xmlStr,'&lt;?xml version=&quot;1.0&quot; encoding=&quot;UTF-8&quot;?&gt;')" disable-output-escaping="yes"/>
10 </xsl:when>
11 <xsl:when test="contains($xmlStr,'&lt;?xml version=&quot;1.0&quot; encoding=&quot;utf-8&quot;?&gt;')">
12 <xsl:value-of select="substring-after($xmlStr,'&lt;?xml version=&quot;1.0&quot; encoding=&quot;utf-8&quot;?&gt;')" disable-output-escaping="yes"/>
13 </xsl:when>
14 <xsl:otherwise>
15 <xsl:value-of select="$xmlStr" disable-output-escaping="yes"/>
16 </xsl:otherwise>
17 </xsl:choose>
18 </xsl:template>
19 </xsl:stylesheet>
 1 <?xml version="1.0" encoding="UTF-8"?>
2
3 <xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="2.0">
4
5 <xsl:output version="1.0" encoding="UTF-8" method="xml"/>
6
7
8 <xsl:template match="/">
9
10
11 <m:MT_SHARE_SGWMS2ERP_RESP xmlns:m="http://www.sgcc.com.cn/sgwms">
12
13
14 <INPUT>
15
16 <!--加CDATA头-->
17
18
19 <xsl:text disable-output-escaping="yes"><![CDATA[</xsl:text>
20
21 <!--节点完全复制-->
22
23
24 <xsl:copy-of select="./*"/>
25
26 <!--加CDATA尾-->
27
28
29 <xsl:text disable-output-escaping="yes">]]></xsl:text>
30
31 </INPUT>
32
33 </m:MT_SHARE_SGWMS2ERP_RESP>
34
35 </xsl:template>
36
37 </xsl:stylesheet>

REQUEST:

 1 <?xml version="1.0" encoding="UTF-8"?>
2 <xsl:stylesheet version="2.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
3 <xsl:output method="xml" version="1.0" encoding="utf-8" indent="yes"/>
4 <xsl:template match="/">
5 <ns1:MT_TS01_MM2CEERP_REQ xmlns:ns1="http://www.sgcc.com.cn/sghrerp/hrxc">
6 <HEADER>
7 <WERKS>
8 <xsl:value-of select="HEADER/WERKS"/>
9 </WERKS>
10 </HEADER>
11 <xsl:for-each select="ITEM">
12 <ITEM>
13 <MATNR>
14 <xsl:value-of select="MATNR"/>
15 </MATNR>
16 <WERKS>
17 <xsl:value-of select="WERKS"/>
18 </WERKS>
19 <LGORT>
20 <xsl:value-of select="LGORT"/>
21 </LGORT>
22 </ITEM>
23 </xsl:for-each>
24 </ns1:MT_TS01_MM2CEERP_REQ>
25 </xsl:template>
26 </xsl:stylesheet>

根据外围系统传入报文路径取数拼接到集中部署messagetyeps的报文结构中

RESPONSE:

 1 <?xml version="1.0" encoding="UTF-8"?>
2 <xsl:stylesheet version="2.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
3 <xsl:output method="xml" version="1.0" encoding="UTF-8" indent="yes"/>
4 <xsl:template match="/">
5 <xsl:apply-templates select="*"/>
6 </xsl:template>
7 <xsl:template match="*">
8 <MESG>
9 <xsl:value-of select="RETURN/MESG"/>
10 </MESG>
11 <xsl:for-each select="ITEM">
12 <ITEM>
13 <MATNR>
14 <xsl:value-of select="MATNR"/>
15 </MATNR>
16 <WERKS>
17 <xsl:value-of select="WERKS"/>
18 </WERKS>
19 <LGORT>
20 <xsl:value-of select="LGORT"/>
21 </LGORT>
22 <MAKTX>
23 <xsl:value-of select="MAKTX"/>
24 </MAKTX>
25 <LABST>
26 <xsl:value-of select="LABST"/>
27 </LABST>
28 </ITEM>
29 </xsl:for-each>
30 </xsl:template>
31 </xsl:stylesheet>

同理,将集中部署侧messagetypes的返回报文的值拼入到外围返回报文中去

5.      创建Operation Mapping

B.  配置integration builder

1.      创建Configuration Scenario(场景)

CS_TS01_MM2CEERP_GETMSG

2.      导入Business System

3.      创建发送方Communication Channel

CC_TS01_MM_GETMSG

4.      创建Sender Agreement,发送方

发送方为:BS_SGHRERP

5.      创建Receiver Determination

确认接收方系统

接收方:集中部署201

6.      创建Interface Determination,

确认接收方系统的接收接口

7.      创建接收方Communication Channel

(代理类用XI,RFC类型用RFC)

8.      创建Receiver Agreement,接收方

9.      激活CS,并导出wsdl

所有的组件均要导入CS场景CS_TS01_MM2CEERP_GETMSG中,一步一激活确认所有组件均激活后导出wsdl进行测试。有一种情况的报错需要把场景及其组件删掉重新配置注册的情况,请注意。

按照如下格式修改URL并填入

http://10.1.169.34:50000/XISOAPAdapter/MessageServlet?channel=:BS_SGHRERP:CC_TS01_MM_GETMSG

选择对应的接口,外围系统调用

外围系统调用即:SIO_TS01_MM_GETMSG

填写CC:BS_SGHRERP,并导出wsdl即可供外围系统调用。

三、      GUI侧接口开发

前文部分为PI接口java端的开发配置,接下来开发基于abap的服务提供方接口(既ERP侧)的逻辑代码。

事物代码:sproxy

1.      根据组件名称、命名空间、接口名找到对应的接口

由于服务提供方为集中部署,我们只需开发ceerp侧的接口即可

2.      双击创建,分配包、请求号、前缀,系统自动根据PI的配置生成输入输出参数及其参考数据结构

3.      双击方法,在其内编写逻辑代码即可,注意导入导出的参数使用方式,一般接口data types都会定义成string类型,遇到数字型QUAN、DEC可能出现转换错误,可在代码中进行转换

4.      实例参考代码

 1 METHOD zpi00_ii_sii_ts01_ceerp_getmsg~sii_ts01_ceerp_getmsg.
2 *** **** INSERT IMPLEMENTATION HERE **** ***
3
4 DATA p_werks TYPE mard-werks.
5
6 TYPES:BEGIN OF ty_out,
7 matnr TYPE mard-matnr,
8 werks TYPE mard-werks,
9 lgort TYPE mard-lgort,
10 maktx TYPE makt-maktx,
11 labst TYPE mard-labst,
12 END OF ty_out.
13
14 DATA:lw_out TYPE ty_out,
15 lt_out TYPE TABLE OF ty_out.
16
17 DATA: lw_header TYPE zpi00_dt_ts01_mm2ceerp_req_hea, "输入参数抬头信息
18 lt_input_item TYPE TABLE OF zpi00_dt_ts01_mm2ceerp_req_ite, "输入参数内表
19 lw_input_item TYPE zpi00_dt_ts01_mm2ceerp_req_ite, "输入参数工作区
20 lw_return TYPE zpi00_dt_ts01_mm2ceerp_resp_re, "输出参数返回消息
21 lt_output_item TYPE TABLE OF zpi00_dt_ts01_mm2ceerp_resp_it, "输出参数内表
22 lw_output_item TYPE zpi00_dt_ts01_mm2ceerp_resp_it "输出参数工作区
23 .
24
25 DATA:lw_t001w TYPE t001w,
26 zmsg TYPE string.
27
28 MOVE-CORRESPONDING input-mt_ts01_mm2ceerp_req-header TO lw_header.
29 p_werks = lw_header-werks.
30
31 SELECT SINGLE werks name1 FROM t001w INTO CORRESPONDING FIELDS OF lw_t001w WHERE werks = p_werks AND spras = sy-langu.
32
33 IF lw_t001w-werks IS NOT INITIAL.
34 CONCATENATE lw_t001w-werks '工厂名称为' lw_t001w-name1 INTO zmsg.
35 lw_return-mesg = zmsg.
36 output-MT_TS01_MM2CEERP_RESP-RETURN = lw_return.
37 ELSE.
38 lw_return-mesg = '该工厂不存在'.
39 output-MT_TS01_MM2CEERP_RESP-RETURN = lw_return.
40 ENDIF.
41
42
43 LOOP AT input-mt_ts01_mm2ceerp_req-item INTO lw_input_item.
44 CALL FUNCTION 'CONVERSION_EXIT_ALPHA_INPUT' "增加前导零
45 EXPORTING
46 input = lw_input_item-matnr
47 IMPORTING
48 output = lw_input_item-matnr.
49 APPEND lw_input_item TO lt_input_item.
50 ENDLOOP.
51
52 LOOP AT lt_input_item INTO lw_input_item.
53 SELECT SINGLE
54 a~matnr
55 a~werks
56 a~lgort
57 b~maktx
58 a~labst
59 FROM mard AS a INNER JOIN makt AS b
60 ON a~matnr = b~matnr
61 INTO CORRESPONDING FIELDS OF lw_output_item
62 WHERE a~matnr = lw_input_item-matnr AND
63 a~werks = lw_input_item-werks AND
64 a~lgort = lw_input_item-lgort AND
65 b~spras = sy-langu.
66
67 IF sy-subrc eq 0.
68 APPEND lw_output_item TO output-mt_ts01_mm2ceerp_resp-item.
69 CLEAR: lw_output_item.
70 ENDIF.
71 ENDLOOP.
72
73 ENDMETHOD.

SAP PI开发手册-ERP发布服务供外部系统调用(sproxy代理类)的更多相关文章

  1. SAP PI开发手册-ERP发布服务供外围系统调用(RFC类型)

    1转自:https://www.cnblogs.com/fanjb/p/10677018.html 8年进入国网项目后陆陆续续做了一些接口,按实现方法去分有RFC和代理类sproxy类型,按服务提供方 ...

  2. 20-SAP PI开发手册-ERP发布服务供外部系统调用(sproxy代理类)

    一.      接口内容 接口详细信息 1.  字段对应关系 发送字段对应关系 返回字段对应关系 2.  报文信息 传入报文(报文结构,外围系统提供) 1 <?xml version=" ...

  3. 10-PI开发手册-ERP发布服务供外围系统调用(RFC类型)

      一.      文档信息 版本号* 更新日期* 姓名* 更新内容及更新理由* 备注* V1.0 2019/02/19 fanjb 文档创建 以福利接口13589(Z00HRJ_GJJ_REV_FI ...

  4. 在Salesforce中创建Web Service供外部系统调用

    在Salesforce中可以创建Web Service供外部系统调用,并且可以以SOAP或者REST方式向外提供调用接口,接下来的内容将详细讲述一下用SOAP的方式创建Web Service并且用As ...

  5. 关于IIS寄宿WCF服务,客户端不能生成代理类

    我在使用VS2010写好WCF的Web服务后,部署在IIS7.0上,可以在IE9上进行访问,并且能显示XML数据,如下图 然后我在项目的客户端进行服务的添加引用,如下图 VS2010自动生成代理类,但 ...

  6. 10_Jaxws使用自定义pojo发布服务

    [简述] 查询三天的天气信息(天气概况.日期.温度),测试jaxws是否支持自定义pojo发布服务. [开发过程] 服务端: 1.自定义pojo(天气概况.日期.温度) 2.开发SEI接口及实现类 3 ...

  7. 阿里巴巴Java开发手册更新了!

    自2017年,<阿里巴巴Java开发手册>发布,现已有超过260万位工程师下载及查阅手册,在数以千计的企业应用,手册成为受业界认可的开发规范. 昨天,<Java开发手册>再次更 ...

  8. Dubbo2.7源码分析-如何发布服务

    Dubbo的服务发布逻辑是比较复杂的,我还是以Dubbo自带的示例讲解,这样更方便和容易理解. Provider配置如下: <?xml version="1.0" encod ...

  9. 重磅发布:《阿里巴巴Android开发手册(规约)》

    1.前言 阿里巴巴于近日为广大程序员再送上重磅开春好礼:<阿里巴巴Android开发手册(规约)>.该开发规范在阿里内部经过了长期的修缮,现已总结成册,向所有移动开发者.技术爱好者开放,希 ...

随机推荐

  1. XSS攻击(跨站脚本攻击)

    一.什么是XSS?怎么发生的? XSS(Cross site scripting)全称为跨站脚本攻击,是web程序中最常见的漏洞.指攻击者在网页中嵌入客户端脚本(例如Javascript),当用户浏览 ...

  2. postgreSQL数据库的初探

    kali是黑客的强大武器,还有一个也是哦——Metasploit postgreSQL数据库是Metasploit的默认数据库哦! 启动postgresql: service postgresql s ...

  3. 移动OA办公——Smobiler第一个开源应用解决方案,快来get吧

    产品简介 SmoONE是一款移动OA类的开源解决方案,通过Smobiler平台开发,包含了注册.登陆.用户信息等基本功能.集成了OA中使用场景较多的报销.请假.部门管理.成本中心等核心功能. 免费获取 ...

  4. gitlab设置项目组成员权限

    你敢相信这是个码农? setting菜单的“Members”功能页: 该页面展示了当前Project的成员列表,以及每个成员对应的权限角色,Owner/Master/Developer 注意到该页面顶 ...

  5. 大数据分析的下一代架构--IOTA架构设计实践[下]

    大数据分析的下一代架构--IOTA架构设计实践[下] 原创置顶 代立冬 发布于2018-12-31 20:59:53 阅读数 2151  收藏 展开 IOTA架构提出背景 大数据3.0时代以前,Lam ...

  6. redis 进程使用root用户启动 -- 整改方案

    最近内部风险整改, 各种进程使用root身份进行启动不符合要求, 于是各路神仙各施其法,为的就是让 某进程不以root 启动: 先以 redis 为例: 原有进程如下: #超一流标准的执行文件位置及配 ...

  7. Linux命令: cat

    -s  连续多个空行显示为一个空行. -n 给每一行前显示行号. -b 只给非空行前显示行号. -E  在每行后显示一个$ cat f - g  把文件f的内容.STDIN.文件g的内容连接起来 .

  8. c# WF 第8节 label控件

    本节内容: 1: 文本控件 2:实现label的你追我赶实例 1:文本控件 2:实现label的你追我赶实例 步骤1 : 步骤2 : 知识点:

  9. day76_10_23自定义签发token,其他drf组件

    一.签发token的原理 当认证类authentication_classes是JSONWebTokenAuthentication时,其父类JSONWebTokenAPIView只有post 方法, ...

  10. shellnet运行train_val_seg.py

    1.semantic3d数据集准备:prepare_semantic3d_data.py 11个测试数据集(.txt文件): 假如运行的是室外点云数据集“seg_semantic3d”,可能需要做以下 ...