SAP PI开发手册-ERP发布服务供外部系统调用(sproxy代理类)
转自: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,'<?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>
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代理类)的更多相关文章
- SAP PI开发手册-ERP发布服务供外围系统调用(RFC类型)
1转自:https://www.cnblogs.com/fanjb/p/10677018.html 8年进入国网项目后陆陆续续做了一些接口,按实现方法去分有RFC和代理类sproxy类型,按服务提供方 ...
- 20-SAP PI开发手册-ERP发布服务供外部系统调用(sproxy代理类)
一. 接口内容 接口详细信息 1. 字段对应关系 发送字段对应关系 返回字段对应关系 2. 报文信息 传入报文(报文结构,外围系统提供) 1 <?xml version=" ...
- 10-PI开发手册-ERP发布服务供外围系统调用(RFC类型)
一. 文档信息 版本号* 更新日期* 姓名* 更新内容及更新理由* 备注* V1.0 2019/02/19 fanjb 文档创建 以福利接口13589(Z00HRJ_GJJ_REV_FI ...
- 在Salesforce中创建Web Service供外部系统调用
在Salesforce中可以创建Web Service供外部系统调用,并且可以以SOAP或者REST方式向外提供调用接口,接下来的内容将详细讲述一下用SOAP的方式创建Web Service并且用As ...
- 关于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开发手册(规约)>.该开发规范在阿里内部经过了长期的修缮,现已总结成册,向所有移动开发者.技术爱好者开放,希 ...
随机推荐
- 动态SQL屏幕条件选择(里面还有赋值的新语法)
有时候屏幕条件中使用PARAMETERS时候,如果你为空的话,会查不出数据,但是可能你的想法是不想限制而已,但是系统默认理解为了空值,这个时候,如果取判断一下条件是不是空,在SQL里决定写不写的话,会 ...
- python凯撒加密
在密码学中,恺撒密码是一种最简单且最广为人知的加密技术.它是一种替换加密的技术,明文中的所有字母都在字母表上向后(或向前)按照一个固定数目进行偏移后被替换成密文.例,当偏移量是3的时候,所有的字母A将 ...
- push和pop的区别?
1.push是什么?(推进) push就是推,延伸为推进.这个它是汇编的一个指令,(在其它语言中也可能会见到它).意思都是差不多的,就是把一个元素放入栈中.你可以假想栈是一个放光盘的那种盒子,有底没盖 ...
- Scala字符穿插值器
从2.10.0版本开始,Scala提供了三种创新的字符串插值方法: s.f 和 raw 于2.11.0版本开始,用于模式匹配patter match中 小结: s: s"Hello, $na ...
- Lnmp架构部署动态网站环境.2019-7-2-1.1
一.Mysql简介 Mysql数据库: 1.社区版 2.商业版 3.cluster集群 Mysql安装方式 1.编译安装 2.yum/rpm 3.二进制包,直接解压,无需编译 二.Mysql安装部署 ...
- C C++ ARM X86 函数 方法 的调用约定
参考:https://bbs.pediy.com/thread-224583.htm 整理成表格方便查询 cdecl(C规范), stdcall(WinAPI默认), fastcall, ATPCS( ...
- 问题解决:import paddle.fluid出错:DLL load failed: 找不到指定的模块
问题描述: 使用Pycharm编程,导入paddlepaddle库出错.即:import paddle.fluid出错:DLL load failed: 找不到指定的模块 解决方法: 补上缺失的DLL ...
- LG1505 [国家集训队]旅游 树链剖分
问题描述 LG1505 题解 边化点权. 超级多操作的树剖板子... 以后就拿这个当树剖板子复习吧... \(\mathrm{Code}\) #include<bits/stdc++.h> ...
- vue-cli2 打包
npm run build 打包安装 相当于静态资源 解决vue-cli项目打包出现空白页和路径错误的问题 路径错误的问题解决方式: 打开config文件夹下的 index.js 找到如下图所示区域: ...
- IDEA取消SVN关联 , 在重新分享项目
IDEA取消SVN关联,在重新分享项目 安装插件 1.打开Intellij中工具栏File的setting(ctrl+alt+s),选择plugins,在右边搜索框输入“SVN”,搜索.选择“ ...