RFC连接
RFC中引用类型组
http://t.csdnimg.cn/wQWAYhttp://t.csdnimg.cn/wQWAY
远程目标系统维护SM59
这里的类型指的是目标系统的系统类型(目标系统即rfc函数存在的系统).
类型2(R/2连接),只需给出主机名,所有通信信息都已在存储在SAP网关的sideinfo表中,如果需要,也可以指定登录信息。
类型3(ABAP连接或称R/3连接),创建时必须给出主机名和通信服务。如果需要,也可以指定登录信息。还可以选择负载平衡选项。
类型I(内部连接),与当前系统连接到同一数据库的ABAP系统。这种类型的条目都是预定义的且无法修改。条目名称与事务SM51中所显示的应用服务器名相同。
类型L(逻辑目标),该条目不指定连接,而是参照物理目标生成。也可以参照其他逻辑目标生成。这类条目通常除包含所参照的条目中的信息外,还添加额外信息。一般情况下,所参照的条目会给出主机信息,类型L的条目本身给出登录数据。(通常工作流系统定制过程中需配置的RFC目标即为该类型的逻辑目标)
类型X,指定安装了特殊ABAP设备驱动程序的系统。在创建类型X条目时,必须给出ABAP设备驱动程序名。
类型S,定义通过SNA或APPC启动的外部程序连接。
类型M,定义通过CMC(即协议X.400)到ABAP系统中异步RFC连接。
类型T,定义通过TCP/IP并使用RFC库或SAP连接器的外部程序连接。该类型分为启动和注册两种连接模式。如果设为启动模式,必须指定要启动的主机名和程序路径名;如果设为注册模式,则需要指定一个RFC服务器程序。
类型G,定义外部系统到本地的HTTP连接
类型H,定义ABAP系统到本地的HTTP连接
rfc函数创建:
RFC函数是对一个函数模块的调用,但是调用者的系统与被调用函数所在的系统是不一样的
任何一个ABAP程序都可以调用一个远程调用函数,使用语句CALL FUNCTION…DESTINATION.这个DESTINATION参数告诉SAP系统,被调用函数运行的系统不同于访问者的系统,这个目标参数destination呈现一个入口,在RFCDES表中(SM59定义),这个入口包含了所有必要的字段,这些字段用来连接和登录到目标系统中
当你调用一个RFC函数,RFC接口关注于:转变所有的参数数据为远程系统所需要的形式
1.1、创建函数组
方式一
(1)登录SAPGUI,执行事务码 SE37,进入函数构建器:初始屏幕
(2)菜单栏→转到→函数组→创建组
方式二
SE80->选择函数组->输入函数组名称->选择'是'创建
输入函数组名称以及描述,点击保存
选择包,点击保存(请忽略函数名后面的下划线,此处为演示又新建一个)
挂载请求,点击保存,函数组创建完成。
激活函数组
激活成功
1.2、创建函数
SE37 输入功能模块名称,点击创建
输入第一步中创建的函数组,以及函数描述,点击保存(换名称了)
忽略系统提示,点击对勾,进入函数构建器
切换至属性页签,务必勾选处理类型中的“远程启用的模块”,否则无法被远程调用,PO中就没法导入该RFC。
1.3、添加函数输入输出参数
参数类型:
导入:仅输入参数,此处定义两个输入参数,IV_NAME和IV_AGE,类型为CHAR10和I,以及描述。根据需要设置字段是否可选,远程调用函数,输入输出参数必须勾选“值传递”。
导出:仅输出参数,此处定义一个输出参数,IV_HELLO,类型为CHAR100。
表:输入输出参数,此处未定义。
例外用于异常
ABAP中的异常处理 - TRY CATCH的使用实例_abap try catch-CSDN博客
1.4、编写函数源代码
编写函数源代码如下:
执行测试
填写入参值
执行结果如下
FUNCTION ZXYY_RFC_001 .
*"----------------------------------------------------------------------
*"*"本地接口:
*" IMPORTING
*" VALUE(FIRST_NUM) TYPE INT1
*" VALUE(FUHAO) TYPE CHAR1
*" VALUE(SECOND_NUM) TYPE INT1
*" EXPORTING
*" VALUE(THREE_NUM) TYPE I
*" EXCEPTIONS
*" NO_FUHAO
*" NO_ZERO
*" ERRO_FUHAO
*"----------------------------------------------------------------------
*FUNCTION ZXYY_RFC_001 .
CASE FUHAO.
WHEN '/'.
IF SECOND_NUM = 0.
RAISE NO_ZERO.
ELSE.
THREE_NUM = FIRST_NUM / SECOND_NUM.
ENDIF.
WHEN '*'.
THREE_NUM = FIRST_NUM * SECOND_NUM.
WHEN ''.
RAISE NO_FUHAO.
WHEN '+'.
THREE_NUM = FIRST_NUM + SECOND_NUM.
WHEN '-'.
THREE_NUM = FIRST_NUM - SECOND_NUM.
WHEN '^'.
THREE_NUM = FIRST_NUM ** SECOND_NUM.
WHEN '%' .
THREE_NUM = FIRST_NUM mod SECOND_NUM.
WHEN OTHERS.
RAISE ERRO_FUHAO.
ENDCASE.
执行结果
第三系统请求RFC
3步骤和关键概念
要从第三方系统请求SAP系统中的RFC(Remote Function Call)远程函数,您需要使用SAP提供的RFC SDK(RFC Software Development Kit)或者通过SAP Gateway来实现。以下是一些步骤和关键概念:
RFC远程函数:首先,确保您已经在SAP系统中定义了要调用的RFC远程函数。RFC是SAP中的标准方式来实现远程通信和集成。您需要知道要调用的RFC函数名称以及所需的输入和输出参数。
SAP RFC SDK:SAP提供了RFC SDK,这是一组库和工具,用于在非SAP系统中与SAP系统通信。您需要获取并安装RFC SDK以便在第三方系统中使用。
RFC连接配置:在第三方系统中,您需要配置RFC连接参数,包括SAP系统的主机名、端口号、登录凭据等信息。这些参数用于建立到SAP系统的连接。
RFC调用:使用RFC SDK或RFC相关的库函数,在第三方系统中编写代码来执行RFC调用。在调用RFC函数时,您需要提供所需的输入参数,并处理返回的结果。
CALL FUNCTION '<rfc函数名>'
DESTINATION '<应用服务器名>'"server name
EXPORTING
<参数>
...
TABLES
<参数>
EXCEPTIONS
no_permission = 1
command_not_found = 2
IF sy-subrc = 0.
ENDIF.
DESTINATION附加项后面接的是远程目标名称,该目标在事务SM59中设定,其中包含连接和登录远程系统所需的全部参数信息。如果调用的就是本机的RFC目标,则DESTINATION可以使用<主机名>_<系统标识>_<实例编号>来指定(就是指下图中的Server Names),可以通过SM51查看当前SAP系统中活动的应用服务器:
SM51
英文:
中文:
除去SM59中定义的远程目标之外,SAP还提供两个预定义的目标,可以直接在CALL FUNCTION语句的DESTINATION附加项中使用。具体包括:
1. 目标NONE:指定该远程目标意味着将运行当前程序的应用服务器作为目标系统,但是调用过程将通过RFC接口实现,并拥有自己的RFC上下文。该目标可以应用于任意调用类型。
2. 目标BACK:用于被远程调用的RFM程序内部的CALL FUNCTION语句中的目标指定,通过已建立的RFC连接反过来调用该函数的主调者系统中的其他功能模块(即主调程序—>远程系统中的RFM—>又回调主调程序所在系统中的其他函数)
3. 目标SPACE: DESTINATION选项将会被忽略,被调功能函数将作为普通函数在本机调用
在事务性RFC调用过程中,如果在COMMIT WORK语句之前出现的事务性RFC调用分别针对多个不同的目标,则系统将根据其目标分组为多个不同的LUW,相同目标的调用组合到同一个LUW中,在COMMIT WORK语句执行时,处理所有的LUW
错误处理和日志记录:确保在调用RFC时实施适当的错误处理和日志记录机制,以便跟踪调用的状态并处理任何潜在的错误情况。
安全性:在RFC调用中确保数据的安全性,使用合适的认证和授权机制来验证RFC请求的合法性。
测试和监控:在实际应用程序中使用RFC调用之前,进行充分的测试以确保其正常运行。监控RFC调用,以确保其在生产环境中的可靠性和性能。
SAP Gateway:另一种方法是使用SAP Gateway来提供RFC远程函数的RESTful服务。SAP Gateway允许您将RFC函数通过HTTP或HTTPS协议提供给外部系统。这需要在SAP系统中进行一些配置和开发工作,但提供了更灵活的方式来与SAP系统集成。
同步异步事务RFC请看下文
*&---------------------------------------------------------------------*
*& Report ZTXYY_1162
*&---------------------------------------------------------------------*
*&
*&---------------------------------------------------------------------*
REPORT ztxyy_1162.
PARAMETERS:p_num1 TYPE int1 default 10,
p_char type char1 default '/',
p_num2 TYPE int1 default 2.
DATA la_num TYPE string.
CALL FUNCTION 'ZXYY_RFC_001'
EXPORTING
first_num = p_num1
fuhao = p_char
second_num = p_num2
IMPORTING
THREE_NUM = la_num
EXCEPTIONS
system_failre = 1"用于sap连接上的异常,不是在函数中定义
communication_failure = 2"用于sap连接上的异常,不是在函数中定义
OTHERS = 3.
.
IF sy-subrc <> 0.
* Implement suitable error handling here
ENDIF.
WRITE:/ '自身系统:' ,la_num.
clear la_num.
CALL FUNCTION 'ZXYY_RFC_001'
DESTINATION 'rfc_xyy_topu' "SM59中区分大小写。
EXPORTING
first_num = p_num1
fuhao = p_char
second_num = p_num2
IMPORTING
three_num = la_num
EXCEPTIONS
system_failre = 1
communication_failure = 2
OTHERS = 3.
WRITE:/ '被调用:' ,la_num.
CLEAR la_num.
CALL FUNCTION 'ZXYY_RFC_001'
DESTINATION 'saptest_ECP_01' "SM51中区分大小写。
EXPORTING
first_num = p_num1
fuhao = p_char
second_num = p_num2
IMPORTING
three_num = la_num
EXCEPTIONS
system_failre = 1
communication_failure = 2
OTHERS = 3.
WRITE:/ '被调用:' ,la_num.
ABAP 远程 RFC 函数创建完整详细教程(外部系统调用SAP接口)_sap rfc接口配置_lo波德莱尔ve的博客-CSDN博客
LUW
https://www.cnblogs.com/ricoo/p/15481087.html
在SAP ABAP系统中,数据库LUW是一个关键概念,用于管理数据库操作的一致性和隔离性。
数据库LUW(Logical Unit of Work)的概念:
在SAP ABAP系统中,数据库LUW是一组数据库操作的逻辑集合,这些操作要么全部成功地提交到数据库,要么全部回滚。它确保了数据库操作的一致性和隔离性。在SAP ABAP中,事务是一种常见的LUW类型。事务可以由一组相关的数据库操作组成,这些操作要么全部成功地执行,要么全部回滚,以保持数据的完整性和一致性。
数据库LUW的重要性:
数据库LUW的概念在SAP ABAP中非常重要。它确保了在一组数据库操作中的数据变化要么全部应用,要么全部撤销。这对于避免数据不一致和数据丢失非常关键。在复杂的业务逻辑和多用户并发的情况下,数据库LUW可以确保数据操作的正确性和一致性。
SAP ABAP 中的 database LUW(数据库逻辑单元)是一种重要的数据库交易处理概念,用于确保数据的完整性和一致性。database LUW 是一组数据库操作,这些操作要么全部成功,要么全部失败。这就意味着,如果一个 database LUW 中的任何操作失败,那么整个 database LUW 都会被回滚(撤消),以确保数据的一致性。
举个例子,假设一个银行应用要进行转账操作。转账操作包含两个步骤:从一个账户扣款,然后把这个金额加到另一个账户。如果在这两步之间发生错误(比如系统崩溃),那么就可能出现数据不一致的情况,即一个账户被扣款,但另一个账户没有收到款项。为了避免这种情况,我们可以把这两个步骤放在一个 database LUW 中。这样,如果其中一个步骤失败,整个 database LUW 都会被回滚,就像没有操作发生一样。
在 SAP ABAP 中,database LUW 的开始和结束是由 COMMIT WORK 和 ROLLBACK WORK 语句控制的。COMMIT WORK 语句表示当前 database LUW 的结束,并提交所有挂起的数据库更改。然后会开始一个新的 database LUW。ROLLBACK WORK 语句用于撤销当前 database LUW 中的所有数据库更改,然后开始一个新的 database LUW。
同步或异步更新(提交)
COMMIT WORK 异步更新,该语句执行后不会等待所有更新函数都执行完后才继续执行后面的代码
COMMIT WORK AND WAIT同步更新,该语句执行后会等待所有更新函数都执行完后才继续执行后面的代码,执行结果可以通过sy-subrc来判断事务提交是否成功
例如,以下 ABAP 代码将两个数据库操作包括在一个 database LUW 中:
DATA: wa_bkpf TYPE bkpf,
wa_bseg TYPE bseg.
wa_bkpf-bldat = sy-datum.
wa_bkpf-budat = sy-datum.
wa_bkpf-blart = 'DZ'.
wa_bkpf-waers = 'USD'.
INSERT INTO bkpf VALUES wa_bkpf.
wa_bseg-buzei = 1.
wa_bseg-shkzg = 'S'.
wa_bseg-dmbtr = 100.
INSERT INTO bseg VALUES wa_bseg.
COMMIT WORK.
在这个例子中,如果 INSERT INTO bkpf 或 INSERT INTO bseg 操作失败,那么整个 database LUW 都会回滚,就像没有插入操作发生一样。只有当这两个插入操作都成功时,COMMIT WORK 语句才会提交更改,并开始新的 database LUW。
在设计复杂的 ABAP 程序时,正确使用 database LUW 是非常关键的。不正确的使用 database LUW 可能会导致数据不一致,或者程序性能下降。例如,如果你在一个循环中为每个迭代都开始一个新的 database LUW,那么可能会导致性能问题,因为每个 COMMIT WORK 都需要等待数据库完成所有挂起的更改。
SAP WebService
SAP WebService概念
3.1 什么是SAPWebService
SAP Web Services是一种强大的工具,用于将SAP系统与其他应用程序集成,实现数据共享和自动化业务流程。它在企业中广泛用于提高业务效率、加强数据一致性和支持业务创新。开发人员可以使用标准的Web服务协议与SAP系统进行通信,从而简化集成和开发过程.它允许外部应用程序通过标准的Web服务协议与SAP系统通信,以执行各种操作,如读取或写入数据、执行业务逻辑等。以下是有关SAP Web Services的关键信息:
3.2 特征
SOAP和RESTful Web Services:SAP支持两种主要的Web服务协议,即SOAP(Simple Object Access Protocol)和RESTful(Representational State Transfer)Web服务。SOAP通常用于复杂的企业级集成,而RESTful Web服务更轻量级,适用于简单的HTTP请求和响应。
功能:SAP Web Services允许外部应用程序执行多种功能,包括读取和写入SAP系统中的数据、触发业务流程、调用BAPIs(Business Application Programming Interfaces)等。
数据交换:通过SAP Web Services,您可以实现SAP系统与其他应用程序之间的数据交换。这可以包括与供应商、客户、合作伙伴系统的集成,以及内部SAP系统之间的通信。
安全性:SAP Web Services支持各种安全性机制,包括基于用户名和密码的身份验证、SSL/TLS加密、SAML(Security Assertion Markup Language)等,以确保数据的机密性和完整性。
WSDL和API文档:SAP Web Services通常会提供WSDL(Web Services Description Language)文档,该文档描述了服务的接口和可用操作。此外,SAP通常提供API文档,以便开发人员了解如何使用Web服务。
集成工具:SAP提供了多种工具和技术,以帮助开发人员创建、部署和管理SAP Web Services。这包括SAP NetWeaver平台、SAP Cloud Platform Integration等。
版本和协议:SAP Web Services可能基于不同版本的SAP系统和使用不同的协议。开发人员需要根据其具体的SAP环境和需求选择适当的Web服务
生成WS的大致流程为:
1.首先在SAP中创建一个属性为RFC的函数
2.然后对该函数进行封装
3.最后通过事务代码--SOAMANAGER进行配置,即可得到供外部系统进行调用ws的URL
关于Webservice的概念和原理,简单来讲,Webservice是一种基于SOAP传输协议,用WSDL描述,用XML封装数据的接口技术。由于其跨平台、跨防火墙、开发成本低、开发周期短等优势而被广泛应用,但也有局限性,包括传输负载大、没有统一的实现模型等。
Web Service就是一个应用程序,它向外界暴露出一个能够通过Web调
用的API。Web Service是一种基于Web的中间件技术。用户通过把应用程
序的一部分包装成Web服务的形式,将自己的应用程序功能提供给别人,
实现应用程序之间的接口。webservice可用于多个系统和SAP系统之间的
传输,比较灵活。
根据外部系统提供的webservice的wsdl地址,在SAP系统创建
webservice consumer时候输入该URL。使用SOAMANAGER创建逻辑端口,
封装函数,在函数里指定端口,并调用类的方法,反之,创建webservice
provider,生成wsdl供外部调用。
WebService实战
SAP创建webservice
第一步sm59--rfc连接.
这里采用中文系统连接英文系统(即中文系统调用英文系统中的rfc函数).
如果 IP地址是sap系统已经维护的了话目标主机会变为名称
相反sap系统没有维护的则会IP地址和目标主机都是类似(192.168.1.1)这种.
英文辅助
英文辅助
连接成功
点击后进入目标系统界面.
第二步
rfc函数创建-----参考上面
第三步进入webservice向导创建
方式一:
注意服务定义名称自定义名称要以Z或Y打头
创建webservice有两种途径,一种是通过se80,另一种是通过se37,前一种提供了多种选择类型(WS,Proxy object等),后者只能创建WS.上文中使用后一种方法.
第二种se80
调用webservice
SAP 能通过设置WebService与外部的webservice服务连接; 1、进入事务:SE80,选择 Package ,指定保存的开发包,如图,创建一个Enterprise Service。
[注意]在弹出窗口中输入选择本地则是
[注意]在窗口中选择URL/HTTP Destination’
在弹出的窗口中,选择‘URL’,并输入wdsl地址;
下一步在弹出的窗口中,在'Package'栏中输入所需保存的开发类,若保存为本地开发类,则需将‘Local/Object’选上;
下一步点击完最终的‘Complete’后,如果相连接的WDSL没有问题,则会出现WebService 代理类的创建窗口;
重命名后双击进入类中
点击它们的参考类型
测试界面:
在创建程序
*&---------------------------------------------------------------------*
*& Report ZTXYY_1163
*&---------------------------------------------------------------------*
*&
*&---------------------------------------------------------------------*
REPORT ZTXYY_1163.
DATA LR_MOTH TYPE REF TO ZTXYY_11001CO_Z_RFC_XYY_TOPU.
DATA INPUT TYPE ZTXYY_11001ZXYY_RFC_001.
DATA OUTPUT TYPE ZTXYY_11001ZXYY_RFC_001RESPONS.
TRY.
CREATE OBJECT lr_moth
EXPORTING
logical_port_name = 'ZLP01'"用于指定端口lpconfig 配置逻辑端口
.
CATCH cx_ai_system_fault .
ENDTRY.
INPUT-FIRST_NUM = 10.
INPUT-FUHAO = '/'.
INPUT-SECOND_NUM = 2.
IF lr_moth IS NOT INITIAL.
TRY.
CALL METHOD lr_moth->zxyy_rfc_001
EXPORTING
INPUT = INPUT
IMPORTING
OUTPUT = OUTPUT
.
CATCH cx_ai_system_fault .
CATCH ztxyy_11001cx_zxyy_rfc_001_exc .
ENDTRY.
ENDIF.
BREAK-POINT.
*下文为最优
DATA: go_proxy TYPE REF TO ZTXYY_11001CO_Z_RFC_XYY_TOPU,
gs_input TYPE ZTXYY_11001ZXYY_RFC_001,
gs_output TYPE ZTXYY_11001ZXYY_RFC_001RESPONS,
go_exception TYPE REF TO cx_ai_system_fault.
TRY.
CREATE OBJECT go_proxy.
gs_input-FIRST_NUM = '3'.
gs_input-SECOND_NUM = '7'.
gs_input-FUHAO = '*'.
go_proxy->zxyy_rfc_001(
EXPORTING INPUT = gs_input
IMPORTING OUTPUT = gs_output ).
WRITE gs_output-THREE_NUM.
CATCH cx_ai_system_fault INTO go_exception.
WRITE go_exception->errortext.
ENDTRY.
uline.
DATA:lo_clientproxy TYPE REF TO ZTXYY_11001CO_Z_RFC_XYY_TOPU. "proxy class
DATA:lo_input TYPE ZTXYY_11001ZXYY_RFC_001, "输入参数
lo_output TYPE ZTXYY_11001ZXYY_RFC_001RESPONS. "输出参数
DATA:g_sys_exception TYPE REF TO cx_ai_system_fault.
DATA:g_app_exception TYPE REF TO cx_ai_application_fault.
*lo_request = request.
TRY.
CREATE OBJECT lo_clientproxy.
CALL METHOD lo_clientproxy->zxyy_rfc_001 "web service函数
EXPORTING
INPUT = lo_input
IMPORTING
output = lo_output.
* ***Write Out the Basic Information
CATCH cx_ai_system_fault INTO g_sys_exception."捕获错误
IF g_sys_exception IS NOT INITIAL.
WRITE: 'Error:Communication Error'.
ENDIF.
CATCH cx_ai_application_fault INTO g_app_exception.
IF g_app_exception IS NOT INITIAL.
WRITE 'Error:Application Error'.
ENDIF.
ENDTRY.
lpconfig 配置逻辑端口
在进入创建端口的界面后,输入描述,并在‘一般设置’下的‘调用参数’页签中,在'URL'中输入WSDL地址,并在‘应用程序特定设置’的‘全局设置’页签下将‘状态管理’勾上,否则在激活的时候会提示‘激活不成功’;
这里可以通过填写 URL 的 方式,也可以通过 http 目标的方式,这个地方就是 sm59 里 RFC 的名字.(也可以上传本地文件)
操作:右侧SOAP操作,输入xml文件中soapAction等号后的内容,包括引号,有可能仅仅只是两个引号
在事务SM59中定义一个指向BB1系统的R3类型的RFC连接(连接类型3)。
例:作用:将内表转成 json 字符串并发送.
MOVE-CORRESPONDING gt_item TO lt_kv.
DATA :rv_proxy TYPE REF TO zco_inter_face,
y_exp TYPE zexecute_web_services_request,
y_imp TYPE zexecute_web_services_response.
DATA: serializer TYPE REF TO cl_trex_json_serializer,
lv_json TYPE string.
DATA:o_return5 TYPE string .
DATA: lo_writer TYPE REF TO cl_sxml_string_writer,
lv_output_length TYPE i,
lt_binary_tab TYPE STANDARD TABLE OF sdokcntbin,
lv_jsonx TYPE xstring.
CLEAR lv_json .
lo_writer = cl_sxml_string_writer=>create( type = if_sxml=>co_xt_json ).
CALL TRANSFORMATION id SOURCE text = lt_kv[] RESULT XML lo_writer.
lv_jsonx = lo_writer->get_output( ).
CALL FUNCTION 'SCMS_XSTRING_TO_BINARY'
EXPORTING
buffer = lv_jsonx
IMPORTING
output_length = lv_output_length
TABLES
binary_tab = lt_binary_tab.
CALL FUNCTION 'SCMS_BINARY_TO_STRING'
EXPORTING
input_length = lv_output_length
IMPORTING
text_buffer = lv_json
output_length = lv_output_length
TABLES
binary_tab = lt_binary_tab.
DATA str1 TYPE string.
DATA str2 TYPE string.
DATA str3 TYPE string.
DATA str4 TYPE string.
CLEAR:str1,str2,str3,str4 .
SPLIT lv_json AT '[' INTO str1 str2.
SPLIT str2 AT ']' INTO str3 str4.
CONCATENATE '[' str3 ']' INTO o_return5 .
CLEAR:y_exp,y_imp.
TRY.
CREATE OBJECT rv_proxy
EXPORTING
logical_port_name = 'LZP01'.
"为此webservice创建的逻辑端口。
CATCH cx_ai_system_fault .
MESSAGE '出错了' TYPE 'E'.
ENDTRY.
y_exp-method_para = o_return5 .
y_exp-method_name = 'tldErpManagerWebGXService'.
TRY .
CALL METHOD rv_proxy->execute_web_services
EXPORTING
execute_web_services_request = y_exp
IMPORTING
execute_web_services_response = y_imp.
CATCH cx_ai_system_fault .
IF y_imp-execute_web_services_return EQ '0'.
MESSAGE '执行成功' TYPE 'S'.
ENDIF.
CATCH cx_ai_application_fault .
IF y_imp-execute_web_services_return EQ '1'.
MESSAGE '执行失败' TYPE 'S'.
ENDIF.
ENDTRY.
SAP与 WebService接口的配置与调用_sap lpconfig_酒剑仙abc的博客-CSDN博客
https://www.cnblogs.com/jimi520/p/12125632.html
https://www.cnblogs.com/rainysblog/p/6625563.html
查看企业服务(webservice)
外部系统访问配置
若是生成的WS供SAP系统调用,则此步骤可以省略,非SAP系统访问则必须配置,通过事务代码;
SOAMANAGER对web service(zrfc_xyy_topu)进行配置具体过程
点击webservice Administration 进行配置,进入后选择自己创建的WS,然后Apply Selection;
再点击Configurations,然后点击Edit按钮,如下
在上图中输入用户名和密码即可,然后点击Save按钮配置完成,再点击下图中的Overview按钮,然后打开;Open WSDL document for selected binding标签,即可获得URL.
四、外围系统的接口调整(字段调整导致webservice接口调整)
如果外围系统新增或者删除了字段,那么SAP端也要进行相应调整
步骤如下:
-
输入开发包然后选择要重新生成的服务,点击修改和重新生成按钮:
-
选择URL选择,一下步骤和上边的一样,具体步骤和生成服务的步骤一致:
SAP 调用外部系统webservice接口(SOAP-XML)-SOAMANAGER_sap webservice接口-CSDN博客
⑤SAP 发布 Webservice 供其他系统调用
a. 服务配置,- sicf
b. 函数创建,- SE37:YRFC_TEST_WEB
c. 生产 webservice, 函数 -> 设置
d. 进行 IE 发布 SOAMANAGER
e. 外部语言进行调用测试,
SAP Webservice 使用 | Small Fire`s Blog
总结
1, webservice简介
关于Webservice的概念和原理,简单来讲,Webservice是一种基于SOAP传输协议,用WSDL描述,用XML封装数据的接口技术。由于其跨平台、跨防火墙、开发成本低、开发周期短等优势而被广泛应用,但也有局限性,包括传输负载大、没有统一的实现模型等。
对于Webservice在SAP系统中的应用,多被用在系统同步要求高,数据传输负载小的接口开发上。下面以SAP系统和外部系统的交互为例,SAP ECC系统两个、外部系统一个(Java EJB3 Jboss5),分别讲述从SAP到SAP,SAP到Java,Java到Java,Java到SAP的Webservice实例。
2, SAP系统间的Webservice调用
SE37创建函数z_calculate,类型要设置为RFC类型,参数都设置为传值:
代码如下:
*"----------------------------------------------------------------------
*"*"Local interface:
*" IMPORTING
*" VALUE(NUMBER1) TYPE STRING
*" VALUE(NUMBER2) TYPE STRING
*" VALUE(OPERATOR) TYPE STRING
*" EXPORTING
*" VALUE(RESULT) TYPE STRING
*"----------------------------------------------------------------------
TRY .
CASE operator.
WHEN '+'.
result = number1 + number2.
WHEN '-'.
result = number1 - number2.
WHEN '*'.
result = number1 * number2.
WHEN '/'.
result = number1 / number2.
WHEN OTHERS.
result = 'Not supported!'.
ENDCASE.
CATCH cx_root.
result = 'Not supported!'.
ENDTRY.
CONDENSE result.
ENDFUNCTION.
把函数发布成Webservice
其他一路下来默认,完成后服务已经创建;接下来到SOAMANAGER中去找WSDL的URL,进入到Web service Administration界面,
Apply selection => Overview => Displayselected Binding's WSDL URL,在右边可以看到了。
接下来去事务码:SICF中找到服务的Endpoint地址
在浏览器中会得到地址:
下面进入到Webservice的Client端SAP系统,SE80创建代理类:
SAP Webservice实例教程 | 摆渡SAP =====================中文版
最详细的 SAP ABAP Web Service 创建和消费步骤讲解 - 知乎 =============英文版
webservice的配置
SAP Web Service配置准备工作
Webservice最终是以WSDL形式发布,即一个带有URL的XML文件。既然是URL,就必然涉及到发布服务器的域名、端口、目录等信息,因此SAP提供的webservice在能够被正常调用之前,需要对服务器的域名进行DNS解析,并且WS要发布必须要通过SAP的SOA Manager进行服务的绑定,所以还需要对SOA Manager进行的一定的设置,让其正常工作,才能进行下一步的服务绑定。具体步骤见下面章节。
1. 通过RZ10配置服务器名称和其他参数
服务器的参数一般是由basis来配置完成的。这里主要用来查看服务器的Hostname,以帮助下一步的DNS解析操作。
在SAP客户端首页运行T-code:RZ10,即可进入服务器参数文件管理界面,如下图:
点击“参数文件”旁边的搜索帮助按钮,即可弹出服务器上已有的实例和默认的参数设置,这里我们只需选择默认参数文件查看即可。选择下面的“基本维护”选项,就可以快速查看服务器默认的Hostname以及默认集团号,如下图所示:
如果想查看更多服务器信息,可以选择参数维护概览界面的“扩展维护”选项,就可以看到服务器的详细信息,如下图所示:
如果想修改系统的参数,建议找Basis修改,这里与webservice相关的几个重要参数为:
v login/system_client 登录时默认的Client号
v login/fails_to_user_lock 密码输错多少次后锁定
v rdisp/mshost 状态栏中显示的系统名称
v Sapglobalhost SAP全局主机名,这个参数就是后面需要设置的被解析的对象
读者如果对其他参数有兴趣,可自行到互联网上查找相关信息,这里不再赘述。
2. 配置服务器被DNS解析
如果SAP服务器本身没有加入到所在工作环境的域控中,那么服务器的hostname默认是无法被解析到的,则需要进行服务器的host解析。常见的host解析办法有两种:集中解析和单机解析。各自的优缺点和办法如下:
(1)集中解析
集中解析就是将host解析条目添加到服务器所在网络的DNS服务中,一般需要联系网络管理员来添加这个解析条目。集中解析的优点就是处于该网络环境中的所有客户端主机,只要使用的默认DNS服务器,就可以直接访问发布后的webservice,而不需要在本机上做出任何操作。
(2)单机解析
单机解析就是在客户端电脑上,直接修改本地的host文件,具体操作如下:
依次浏览到这个目录下:<系统盘盘符>:\Windows\System32\drivers\etc,找到下面的一个名为“hosts”不带文件类型后缀的文件,右击这个文件,选择以记事本方式打开该文件,然后在下面的空白区域添加这样一条解析:
<SAP服务器的IP地址><SAP的hostname>
例如: 192.168.1.10 erpdev01。这里的hostname就是我们上一步通过RZ10查看到的SAPGlobalhost中名称,添加完成后保存该文件即可正常解析了。要检验配置是否成功,只需要在命令提示符中使用PING命令即可以检测。
在host文件中加入 一个域名和系统应用服务器IP地址.
3.启用SOAMANAGER服务
前面已经介绍过SAP是通过SOAMANAGER来对外发布指定服务器的,SOAMANAGER本身其实也是一个基于Netweaver的Web Dynpro程序,当你在SAP GUI客户端执行T-Code:SOAMANAGER的时候,就会默认调用IE来打开这个WDA程序,从而实现对webservice的发布的管理。但是根据SAP官方Note1124553的说法,出于安全方面的考虑,SAP Netweaver组件安装后,默认是不激活WDA程序显示服务以及SOAMANAGER服务的,因此,需要手工通过T-Code:SICF来先激活WAD程序显示相关服务以及SOAMANAGER服务,具体需要激活的服务如下:
①与显示WDA程序相关的服务
/default_host/sap/bc/webdynpro
(注意:这里只需要激活webdynpro这个服务,不需要激活其下面的子服务。当你右键激活这个服务的时候,其子节点的服务并不会被激活,这点与我们常见的激活逻辑有区别)
/default_host/sap/public/myssocntl
/default_host/sap/public/bc
(注意:如果你激活bc下面的子服务,这里的bc服务就会自动激活,不需要再手动激活了,因此这里可以跳过这个服务,直接激活其下面的子节点服务即可)
- /default_host/sap/public/bc/ur
- /default_host/sap/public/bc/icons
- /default_host/sap/public/bc/icons_rtl
- /default_host/sap/public/bc/webicons
- /default_host/sap/public/bc/pictograms
- /default_host/sap/public/bc/webdynpro/* (ssr, mimes等所有子节点服务)
②与SOAMANAGER相关的服务
- /default_host/sap/bc/soap
- /default_host/sap/bc/srt
- /default_host/sap/bc/srt/rfc/sap
- /default_host/sap/bc/webdynpro/sap
- /default_host/sap/bc/webdynpro/sap/appl_soap_management.
具体操作步骤如下:
在SAP首页执行T-code:SICF,打开服务定义选择界面,在“层次结构类型”中输入“Service”或者通过F4选择出这个值,然后执行,就可以进入服务管理界面,如下图所示:
在服务管理界面,可以看到上半部分为一个服务查询的界面,可以供用户快速定位到需要的管理的服务上;下半部分为一个树形结构的服务目录,可以通过逐级展开Default host\sap\bc等等,进行服务的查找,如下图所示:
上半部分通过查找可以快速定位到所需服务,在服务名称里面输入服务的名称,点击“应用”按钮,即可快速定位相应的服务,也可以在下半部分逐级展开目录来定位到相应的服务,如下图所示:
在这里可以看到被激活过的服务或者目录颜色比较深,而处于待激活状态的服务或者目录呈现灰色。被激活过的对象无法被再激活,只能取消激活。这里我们选择相应的待激活的服务或者子目录(呈现灰色状态),右击-》激活服务-》选择“是”,即可以激活相应的服务或者目录。如下图所示:
按照上面的步骤依次激活本节开始所列举的那些服务,应该就能顺利打开SOAMANAGER了,如果还不能打开,可以根据弹出的浏览器中提示的错误来找到相应的服务进行激活即可。配置成功后可以在SAP GUI中运行T-code: SOAMANAGER来进行测试。
在SAP首页运行T-code: SOAMANAGER,回车,会弹出IE浏览器窗口,如果成功的话,会先弹出认证框(与某些电脑的安全设置相关,也有可能先弹出IE安全站点提示信息,这时候只需要展开“详细信息”-》转到网页(不推荐)继续访问即可),输入登录信息后,就可以进入到SOA管理界面了。如下3图所示:
如果配置失败,一般会在浏览器提示相应的错误信息。如果显示为:“无法访问此页面”或者类似的完全打不开的提示信息,请回头检查自己的网络链接是否正常,或者是前面步骤中DNS的解析是否添加成功。
如果提示403错误,则表示某些服务没有启动,则可以通过显示该页面的URL,从URL中找到相应的服务,然后再按照上面激活服务的办法去激活相应的服务即可。服务没启动时,会报出403错误,如下图所示:
在该页面空白处右击-》属性,即可以打开该页面的属性,在属性的地址中,找到URL中问号“?”前的最后一个子节点,即相应的服务。