RFC使用与WebService

news2024/11/26 4:28:30

 RFC连接

CSDN

 RFC中引用类型组

http://t.csdnimg.cn/wQWAYicon-default.png?t=N7T8http://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

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.

 
含异步,同步rfc详细介绍 

ABAP 远程 RFC 函数创建完整详细教程(外部系统调用SAP接口)_sap rfc接口配置_lo波德莱尔ve的博客-CSDN博客

rfc创建---需要什么怎么使用巨细

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系统访问则必须配置,通过事务代码;

SOAMANAGERweb service(zrfc_xyy_topu)进行配置具体过程

点击webservice Administration 进行配置,进入后选择自己创建的WS,然后Apply Selection;

再点击Configurations,然后点击Edit按钮,如下

在上图中输入用户名和密码即可,然后点击Save按钮配置完成,再点击下图中的Overview按钮,然后打开;Open WSDL document for selected binding标签,即可获得URL.

总结

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命令即可以检测。

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中问号“?”前的最后一个子节点,即相应的服务。

【SAP】ABAP——Web Service简介与配置方法_abap webservice-CSDN博客

我的运维日常-SAP显示外部系统可访问的Webservice地址 - 知乎

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1177841.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

软件系统设计方法和工具介绍

软件系统设计方法和工具介绍 在构建系统时&#xff0c;尤其是一些大项目实施的过程中&#xff0c;可以接触和学习一些高阶层面分析问题和系统架构的方法论&#xff0c; 如麦肯锡的解决问题7步法&#xff1a;定义问题、分解问题、排定优先级、制定工作计划、分析问题、综合分析…

比SAM小60倍的分割一切模型:MobileSAM

1 MobileSAM SAM就是一类处理图像分割任务的通用模型。与以往只能处理某种特定类型图片的图像分割模型不同&#xff0c;SAM可以处理所有类型的图像。 在SAM出现前&#xff0c;基本上所有的图像分割模型都是专有模型。比如&#xff0c;在医学领域&#xff0c;有专门分割核磁图…

Python批量下载ERA5数据

1. ERA5数据简介 ERA5是第五代ECMWF大气再分析全球气候数据(ECMWF)&#xff0c;该数据集的第一部分现在可以公开使用(1979年到3个月内)。ERA5数据提供每小时的大气、陆地和海洋气候变量的估计值&#xff0c;地球数据精确到了30km网格&#xff0c;包括了137层的大气数据。 网址…

【教3妹学编程-算法题】最大单词长度乘积

3妹&#xff1a;哇&#xff0c;今天好冷啊&#xff0c; 不想上班。 2哥&#xff1a;今天气温比昨天低8度&#xff0c;3妹要空厚一点啊。 3妹 : 嗯&#xff0c; 赶紧把我的羽绒服找出来穿上&#xff01; 2哥&#xff1a;哈哈&#xff0c;那倒还不至于&#xff0c; 不过气温骤降&…

使用Anaconda安装TensorFlow环境以及没有搜到的报错的解决方法

1.在官网下载Anaconda 这一步几乎不会有人报错 下稳定的版本 或者最新的版本都可以 2.TensorFlow分两个版本 一个是用cpu跑 另一个是用gpu跑 显而易见 cpu的计算性能已经比不上现在主流的显卡了 所以有独显的电脑尽量安装gpu版本 CPU版本: 先给出cpu版本的安装方法: 打开A…

体坛巨星商业价值完美呈现,B体育等超巨品牌堪称经典案例

近几年&#xff0c;伴随着互联网的发展&#xff0c;我们惊喜的发现体坛巨星的商业代言越来越多&#xff0c;他们代言的广告已经融入到我们的生活之中&#xff0c;陪伴很多人度过了美妙的时刻。越来越多的品牌也意识到&#xff0c;比起娱乐明星&#xff0c;体坛巨星的全球属性对…

EMS员工管理系统 python

python基础练习&#xff0c;简单的增删改查&#xff0c;涉及python基础语法&#xff0c;逻辑、分支结构以及一些基础数据格式的操作&#xff0c;文件操作&#xff0c;思路理解等等 部分代码如下 print(""*20,"欢迎使用员工管理系统",""*20)# em…

浏览器自动播放音视频-前端实现方案

目录 前言 浏览器自动播放策略 策略详情&#xff1a; 实现方案 方案1&#xff1a; 互动后播放 方案2&#xff1a; 互动后出声 总结 前言 在开发中可能有遇到这样的需求&#xff0c;当用户打开页面后&#xff0c;需要自动播放视频或音频&#xff0c;按理说那就打开页面…

Vue2和Vue3生命周期映射关系及异同

生命周期映射关系表 beforeCreate -> 使用 setup() created -> 使用 use setup() beforeMount ->onBeforeMount mounted -> onMounted beforeUpdate -> onBeforeUpdate updated -> onUpdated beforeDestroy-> onBeforeUnmount destroyed ->onUnmounted…

800*A. Domino piling(规律数学)

Problem - 50A - Codeforces #include<bits/stdc.h> using namespace std; const int N1e55; int n,m,res; signed main(){scanf("%d%d",&n,&m);if(n>1){resn/2*m;n%2; }if(n1) resm/2;cout<<res;return 0; }

WPS表格无法粘贴信息,原因是复制区域与粘贴区域形状不同

WPS表格无法粘贴信息&#xff0c;原因是复制区域与粘贴区域形状不同 问题描述 我是选中了一整列&#xff0c;复制&#xff0c;但是无法粘贴到另一个EXCEL表格中 原因 首先我的数据量很大&#xff0c;有20万行&#xff0c;然后需要复制的EXCEL是.xls格式的&#xff0c;.xls格…

缓解缓存击穿的大杀器之---singleflight深入浅出

singleflight简单介绍 singlefight直译“单飞”&#xff0c;那顾名思义就是有一堆鸟&#xff0c;但是咱只让一只鸟单飞。。。&#x1f604; singleflight 提供了重复函数调用抑制机制&#xff0c;使用它可以避免同时进行相同的函数调用。第一个调用未完成时后续的重复调用会等…

20231106_抽象类abstract

抽象类abstract 关键字 abstract运用抽象类抽象方法:修饰抽象类中的某个方法,强制子类重写该方法 归纳 关键字 abstract 对于子类必须要实现特定方法,当时父类无法明确时,可定义为抽象类及抽象方法 不合理: 动物吃东西是基础,在这里写吃的方法过于简单,信息没有实际意义; 怎…

FSDiffReg:心脏图像的特征和分数扩散引导无监督形变图像配准

论文标题&#xff1a; FSDiffReg: Feature-wise and Score-wise Diffusion-guided Unsupervised Deformable Image Registration for Cardiac Images 翻译&#xff1a; FSDiffReg&#xff1a;心脏图像的特征和分数扩散引导无监督形变图像配准 摘要 无监督可变形图像配准是医学…

人工智能:技术进步与未来趋势

人工智能&#xff1a;技术进步与未来趋势 随着科技的快速发展&#xff0c;人工智能(AI)已经深入影响到我们生活的方方面面。从智能手机、自动驾驶汽车&#xff0c;到医疗诊断、工业自动化&#xff0c;AI的应用越来越广泛。这篇文章将探讨人工智能的技术发展、现状以及未来趋势。…

Webpack 中 Plugin 的作用是什么?常用 plugin 有哪些?

说说webpack中常见的Plugin&#xff1f;解决了什么问题&#xff1f;- 题目详情 - 前端面试题宝典 1、plugin 的作用 Plugin 是一种计算机应用程序&#xff0c;它和主应用程序互相交互&#xff0c;以提供特定的功能。 是一种遵循一定规范的应用程序接口编写出来的程序&#…

制作甘特图

教程秒懂百科​​​​​​

一文学会Scala【Scala一站式学习笔记】

文章目录 为什么要学习Scala语言什么是Scala如何快速掌握Scala语言Scala环境安装配置Scala命令行 Scala的基本使用变量数据类型操作符if 表达式语句终结符循环高级for循环 Scala的集合体系集合SetListMapArrayArrayBuffer数组常见操作Tuple总结 Scala中函数的使用函数的定义函数…

双十一运动健身好物推荐,这几款健身好物一定不要错过!

双十一购物狂欢节又要到了&#xff0c;又要到买买买的时候了&#xff01;相信有很多想健身的小白还在发愁不知道买啥装备&#xff1f;别急&#xff0c;三年健身达人这就给你们分享我的年度健身好物&#xff01; 第一款&#xff1a;南卡Runner Pro4s骨传导耳机 推荐理由&#…

批量导出有道云笔记并放入Logseq

出发点 大学的时候用有道云笔记&#xff0c;积累了不少文章和总结 随这这几年的网盘等业务关停&#xff0c;个人重要数据依赖互联网总感觉没有安全感 前几年换成了纯本地的双链笔记Logseq&#xff0c;感觉非常简洁好用&#xff08;LogseqPC端/移动端Synology Dive同步&#…