20-SAP PI开发手册-ERP发布服务供外部系统调用(sproxy代理类)
一、 接口内容
接口详细信息
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,'<?xml version="1.0" encoding="UTF-8"?>')">
9 <xsl:value-of select="substring-after($xmlStr,'<?xml version="1.0" encoding="UTF-8"?>')" disable-output-escaping="yes"/>
10 </xsl:when>
11 <xsl:when test="contains($xmlStr,'<?xml version="1.0" encoding="utf-8"?>')">
12 <xsl:value-of select="substring-after($xmlStr,'<?xml version="1.0" encoding="utf-8"?>')" 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>
TS01_CDATA2XML
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>
TS01_XML2CDATA
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>
TS01_REQ
根据外围系统传入报文路径取数拼接到集中部署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>
TS01_RESP
同理,将集中部署侧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.
20-SAP PI开发手册-ERP发布服务供外部系统调用(sproxy代理类)的更多相关文章
- SAP PI开发手册-ERP发布服务供外部系统调用(sproxy代理类)
转自:https://www.cnblogs.com/fanjb/p/10829858.html 一. 接口内容 接口详细信息 1. 字段对应关系 发送字段对应关系 返回字段对应关系 2. ...
- SAP PI开发手册-ERP发布服务供外围系统调用(RFC类型)
1转自:https://www.cnblogs.com/fanjb/p/10677018.html 8年进入国网项目后陆陆续续做了一些接口,按实现方法去分有RFC和代理类sproxy类型,按服务提供方 ...
- 10-PI开发手册-ERP发布服务供外围系统调用(RFC类型)
一. 文档信息 版本号* 更新日期* 姓名* 更新内容及更新理由* 备注* V1.0 2019/02/19 fanjb 文档创建 以福利接口13589(Z00HRJ_GJJ_REV_FI ...
- 关于IIS寄宿WCF服务,客户端不能生成代理类
我在使用VS2010写好WCF的Web服务后,部署在IIS7.0上,可以在IE9上进行访问,并且能显示XML数据,如下图 然后我在项目的客户端进行服务的添加引用,如下图 VS2010自动生成代理类,但 ...
- 10_Jaxws使用自定义pojo发布服务
[简述] 查询三天的天气信息(天气概况.日期.温度),测试jaxws是否支持自定义pojo发布服务. [开发过程] 服务端: 1.自定义pojo(天气概况.日期.温度) 2.开发SEI接口及实现类 3 ...
- 阿里巴巴Java开发手册更新了!
自2017年,<阿里巴巴Java开发手册>发布,现已有超过260万位工程师下载及查阅手册,在数以千计的企业应用,手册成为受业界认可的开发规范. 昨天,<Java开发手册>再次更 ...
- Dubbo2.7源码分析-如何发布服务
Dubbo的服务发布逻辑是比较复杂的,我还是以Dubbo自带的示例讲解,这样更方便和容易理解. Provider配置如下: <?xml version="1.0" encod ...
- 重磅发布:《阿里巴巴Android开发手册(规约)》
1.前言 阿里巴巴于近日为广大程序员再送上重磅开春好礼:<阿里巴巴Android开发手册(规约)>.该开发规范在阿里内部经过了长期的修缮,现已总结成册,向所有移动开发者.技术爱好者开放,希 ...
- 在线教学、视频会议 Webus Fox(2) 服务端开发手册
上次在<在线教学.视频会议软件 Webus Fox(1)文本.语音.视频聊天及电子白板基本用法>里介绍了软件的基本用法.本文主要介绍服务器端如何配置.开发. 1. 配置 1.1 IIS配置 ...
随机推荐
- Ubuntu使用mail命令发送邮件
sudo apt-get install mailutils 如下命令发送邮件: mail -s "Test mail from ubuntu" ckboss@y< ...
- 理解 Android Binder 机制(一):驱动篇
Binder的实现是比较复杂的,想要完全弄明白是怎么一回事,并不是一件容易的事情. 这里面牵涉到好几个层次,每一层都有一些模块和机制需要理解.这部分内容预计会分为三篇文章来讲解.本文是第一篇,首先会对 ...
- Stream(三)
public class Test08 { /* * 二.中间的加工操作 * (1)filter(Predicate p):过滤 * (2)distinct():去重 * (3)limit(long ...
- BIO编程
在实际的工作开发中,传统的模型有client/service模型.client端和service端要进行通信的话,有一种套接字的方式.传统的socket编程,包含一个socket服务端和一到多个soc ...
- 【总结】swagger
1.swagger概念及配置 1.1基本概念 1.是一款让你更好的书写API文档的规范且完整框架. 2.提供描述.生产.消费和可视化RESTful Web Service. 3.是由庞大工具集合支撑的 ...
- git版本管理系统使用
版本管理系统Git 关注公众号"轻松学编程"了解更多. git下载链接:https://pan.baidu.com/s/12vJn-K0lK9XlkVQbNe8S-A 密码:m4m ...
- TCP的粘包和拆包问题及解决办法(C#)
本文参考:https://blog.csdn.net/wxy941011/article/details/80428470 原因 如果客户端连续不断的向服务端发送数据包时,服务端接收的数据会出现两个数 ...
- Hash 算法与 Manacher 算法
目录 前言 简单介绍 简述 Hash 冲突 离散化 基本结构 普通 Hash 简述 例题 字符串 Hash 简单介绍 核心思想 基本运算 二维字符串 Hash 例题 兔子与兔子 回文子串的最大长度 后 ...
- shp文件转dwg并创建文本标注
不得不说,ArcGIS 和 CAD 之间的兼容性非常差,shapefile文件和dwg文件之间互相转换会丢失各种属性,但是很多时候他们之间的转换对我们来说是刚需.通常我们都是通过第三方软件(如FME) ...
- VC6最基本
高级语言C++程序设计[chap4][p119-1][我的自考书-刘璟周玉龙书] 1.VC6使用: <1>.编译:"Build"-->"Compile& ...