• ABAP接口部分-Web Service提供者与消费者


    ABAP接口部分-Web Service提供者与消费者

    Web Service提供者

    Web Service

    1、 创建Web Service:SE80

    在这里插入图片描述
    在这里插入图片描述

    在包上,右击,点击“创建”—“企业服务”:

    在这里插入图片描述

    选择Service Provider,点击继续:
    在这里插入图片描述

    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述

    填写模块的名称:

    在这里插入图片描述

    如果没有函数模块,则创建一个:

    事务代码:SE37

    在这里插入图片描述

    在这里插入图片描述

    在这里插入图片描述

    填写导入参数:
    在这里插入图片描述

    导出参数:

    在这里插入图片描述

    之后是:
    在这里插入图片描述

    在这里插入图片描述

    点击完成:

    在这里插入图片描述

    点击保存:

    在这里插入图片描述
    在这里插入图片描述

    点击确定:
    在这里插入图片描述

    点击激活按钮进行激活:

    在这里插入图片描述

    参数文件可以修改:

    在这里插入图片描述

    这个可以给外部第三方的开发人员调用:

    在这里插入图片描述

    测试

    点击测试按钮进行测试:
    在这里插入图片描述

    点击“执行”:
    在这里插入图片描述

    执行结果:

    在这里插入图片描述

    修改成:
    在这里插入图片描述

    修改完成之后,点击这里:

    在这里插入图片描述

    点击"执行"按钮执行:
    在这里插入图片描述

    执行之后:

    在这里插入图片描述

    原本执行不成功,后面重新生成服务Z_WS002。
    在这里插入图片描述

    除了这种办法,还可以直接将函数发布成WebServices。

    对Z_WS002同样进行SOA设置:
    在这里插入图片描述
    在这里插入图片描述

    WSDL地址:http://mysap.goodsap.cn:50400/sap/bc/srt/wsdl/flv_10002A111AD1/bndg_url/sap/bc/srt/rfc/sap/z_ws002/400/z_ws002/z_ws002?sap-client=400

    配置

    1、 配置:t-code:soamanager(由于服务器问题,这个方法暂时配置不了;)
    在这里插入图片描述

    在点击“配置”按钮进行配置:
    在这里插入图片描述

    发现进去报错了:
    在这里插入图片描述

    后面在自购的账号群公告中看到这个SOA登录网址:

    在这里插入图片描述

    SOA网址

    https://mysap.goodsap.cn:44300/sap/bc/webdynpro/sap/appl_soap_management

    输入集团、用户和密码,点击登录:

    在这里插入图片描述

    点击“Web服务配置”:
    在这里插入图片描述

    这里填写我们刚刚创建的服务:

    在这里插入图片描述

    双击服务名称:

    在这里插入图片描述

    点击“创建服务”:

    在这里插入图片描述

    填写信息,点击“下一个”:
    在这里插入图片描述

    设置用户名和密码:
    在这里插入图片描述

    直接下一步->-下一步。

    用户标识/密码如果无法选择,请把Web Service级别改为 NONE:
    在这里插入图片描述
    在这里插入图片描述

    在这里插入图片描述

    点击“打开WSDL生成”:
    在这里插入图片描述

    复制URL:

    在这里插入图片描述

    http://mysap.goodsap.cn:50400/sap/bc/srt/wsdl/flv_10002A111AD1/bndg_url/sap/bc/srt/rfc/sap/z_ws001/400/z_ws001/z_ws001?sap-client=400

    RFC函数同步更新:

    注意: 如果RFC 函数更新了,也需要到Web Service服务做“一致性检查”更新同步;

    在服务上右击,点击“一致性检查”:

    在这里插入图片描述

    保存并激活:
    在这里插入图片描述

    测试

    点击测试运行按钮进行测试:
    在这里插入图片描述
    在这里插入图片描述

    结果:
    在这里插入图片描述

    Web Service消费者

    事务代码:SE80

    创建Services Consumer消费者

    选择:Service Consumer,点击“继续”:
    在这里插入图片描述

    选择“External WSDL/Schema”,点击“继续”:
    在这里插入图片描述

    选择“URL”:

    在这里插入图片描述

    输入URL地址:
    在这里插入图片描述

    输入用户名和密码:

    在这里插入图片描述

    点击,新建请求号,输入描述,点击确定:

    在这里插入图片描述

    选择好请求号:

    在这里插入图片描述

    输入请求号,输入前缀:

    在这里插入图片描述

    点击“完成”:
    在这里插入图片描述
    点击“保存”按钮进行保存:

    在这里插入图片描述

    保存并激活:

    在这里插入图片描述

    在这里插入图片描述

    创建RFC连接

    用事务代码 SM59 进入 RFC 连接配置:

    事务代码:SM59

    点击创建:
    在这里插入图片描述

    输入要创建的目标名称,选择连接类型:
    在这里插入图片描述

    输入描述,服务器提供者的域名和端口号,点击保存:

    在这里插入图片描述

    在这里插入图片描述

    创建逻辑端口-IP地址

    现在不使用LPCONFIG创建逻辑接口,而是在SOA网址上创建

    使用在是外部ip地址和端口的情况,例如这种:

    在这里插入图片描述

    T-CODE: LPCONFIG

    事务代码: LPCONFIG

    输入事务代码之后,点击确定:

    在这里插入图片描述

    复制这个类的名称:

    在这里插入图片描述

    填写到这里:

    在这里插入图片描述

    如果是外部的ip地址端口,就可以使用下面的:

    在这里插入图片描述

    在这里插入图片描述

    使用URL

    如果是SAP WebSerivices创建的URL ,就填这个:
    在这里插入图片描述

    这里改了之后,还是报错。

    这里要选中,否则激活会失败:
    在这里插入图片描述

    在这里插入图片描述

    点击激活按钮进行激活:
    在这里插入图片描述

    返回接受者服务器运行测试:
    在这里插入图片描述

    输入逻辑接口:

    在这里插入图片描述

    可以点击这里,修改参数的名称:

    在这里插入图片描述

    可以这里返回执行界面:

    在这里插入图片描述

    点击“执行”按钮执行:

    在这里插入图片描述

    输入用户名和密码

    在这里插入图片描述

    报错

    在这里插入图片描述
    在这里插入图片描述

    无法访问,是因为前面选择的是HTTP对象,RFC里面的WebServices_Test2,后面改成URL地址。
    在这里插入图片描述

    这个不是很清楚是怎么回事,后面查阅资料,重新再SOA中为WebServices消费者创建逻辑接口

    在这里插入图片描述

    创建逻辑端口-WebServices URL

    现在使用这个创建逻辑端口

    之前的逻辑端口没有什么效果,在这里重新创建逻辑端口,这个是基于之前在SAP系统中创建WebServices提供者时,暴露给外面的那个URL地址的。

    进入SOA网址

    进入SOA网址:
    在这里插入图片描述

    填写端口信息

    填写逻辑端口的名称为ZWS_CO_Z_WS002_LHY,填写描述等信息:
    在这里插入图片描述

    填写WebServicesURL、用户名和密码:
    在这里插入图片描述

    点击“下一个”:
    在这里插入图片描述

    输入用户名和密码:
    在这里插入图片描述

    点击“完成”按钮:

    在这里插入图片描述

    填写好参数的值之后:

    重新测试执行

    点击执行:
    在这里插入图片描述

    在这里插入图片描述
    在这里插入图片描述

    点击执行之后,返回结果是3:

    在这里插入图片描述

    用自己创建的WebService

    将在C#中创建的WebService服务弄到本机的IIS上

    创建服务消费者

    事务代码:SE80

    1、点击创建企业服务

    在这里插入图片描述

    选择“Service Customer”,点击“继续”:
    在这里插入图片描述

    选择“External WSDL/Schma",点击”继续“:
    在这里插入图片描述

    选择URL:
    在这里插入图片描述

    输入URL,要在文件的后面加上?wsdl:

    在这里插入图片描述

    填写请求号,点击创建,输入描述:
    在这里插入图片描述

    填写请求号,和前缀:
    在这里插入图片描述

    点击“完成“按钮:
    在这里插入图片描述

    点击保存:

    在这里插入图片描述

    创建的企业服务如下:
    在这里插入图片描述

    保存并激活:
    在这里插入图片描述

    注意

    在这里插入图片描述

    创建RFC

    用事务代码 SM59 进入 RFC 连接配置:
    在这里插入图片描述

    填写描述、主机和端口:

    在这里插入图片描述

    点击“连接测试”:
    在这里插入图片描述

    输入用户名和密码即可:

    在这里插入图片描述

    登录SOA网址

    在这里插入图片描述

    点击“Web服务配置”:
    在这里插入图片描述

    选择消费者代理,输入筛选条件,找到这个类名,双击:

    在这里插入图片描述

    点击创建,选择“基于WSDL的配置’':
    在这里插入图片描述

    填写信息,勾选缺省:

    在这里插入图片描述

    输入URL,输入用户名和密码,点击下一个:

    在这里插入图片描述

    点击下一个:

    在这里插入图片描述

    输入用户名和密码,点击下一个:
    在这里插入图片描述

    点击下一个:
    在这里插入图片描述

    一直点击下一个,直至完成:
    在这里插入图片描述

    逻辑端口创建成功:
    在这里插入图片描述

    测试服务消费者

    返回接受者服务器运行测试:
    在这里插入图片描述

    输入逻辑端口名称和方法名称,点击执行:
    在这里插入图片描述

    可以点击这个按钮,修改xml的内容:

    在这里插入图片描述

    修改完毕之后,可以点击这个按钮返回:
    在这里插入图片描述

    点击执行:

    在这里插入图片描述

    返回结果,说明配置成功:

    在这里插入图片描述

    代码调用

    创建程序

    在这里插入图片描述

    在这里插入图片描述

    在这里插入图片描述

    输入下面的代码:

    *&---------------------------------------------------------------------*
    *& Report ZTEST_WEB_SERVICE_CONSUMER
    *&---------------------------------------------------------------------*
    *&
    *&---------------------------------------------------------------------*
    REPORT ztest_web_service_consumer.
    DATA: lo_clientproxy   TYPE REF TO zws_co_web_service1soap,      "参考生成的代理类
          lo_sys_exception TYPE REF TO cx_ai_system_fault.
    DATA: ls_srm_input          TYPE zws_age_soap_in,
          ls_srm_input_response TYPE zws_age_soap_out.
    
    * 2、调用webservice
      CREATE OBJECT lo_clientproxy
        EXPORTING
          logical_port_name = 'ZWS_CO_WEB_SERVICE1SOAP'.  "调用对应的逻辑端口
    
          ls_srm_input-a1 = '22'.
          ls_srm_input-a2 = '52'.
    
          TRY.
          CALL METHOD lo_clientproxy->age
            EXPORTING
              input          = ls_srm_input
            IMPORTING
              output = ls_srm_input_response.
    
        CATCH cx_ai_system_fault INTO lo_sys_exception."捕获错误
          "CATCH zoa_cx_exception INTO lo_oa_exception.
      ENDTRY.
      "o_type    = ls_srm_input_response-parameters-return-status.
      "o_message = ls_srm_input_response-parameters-return-message.
      "o_data    = ls_srm_input_response-parameters-return-data.
    
    WRITE: /,'WebService 测试:',ls_srm_input_response-age_result.
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31
    • 32
    • 33
    • 34

    调用Web Service API

    输入程序名,点击创建:

    输入描述,选择可执行文件:

    *&---------------------------------------------------------------------*
    *& Report ZWEBSERVICE_TEST02
    *&---------------------------------------------------------------------*
    *&
    *&---------------------------------------------------------------------*
    REPORT ZWEBSERVICE_TEST02.
    
    data: len         type        i,"发送报文长度
          len_string  type        string,
          url         type        string, "接口地址
          http_client type ref to if_http_client,"http客户端
          post_string type        string,
          result      type        string.
    
      DATA: LV_LEN         TYPE I.
    
    data: it_header type tihttpnvp.
    data: gv_json_in TYPE string.
    
    gv_json_in = '{"ApiType":"SapInterfaceController","Parameters":[{"Value":[{"Factory":"1100",'
                    &&'"FactoryName":"和胜","Center":"C001","CenterDesc":"工作中心001","Depart":"MES",'
                    &&'"DepartName":"MES项目组","Flag":"0"}]}],"Method":"SaveWorkCenter","Context":{"InvOrgId":1}}'.
    
    START-OF-SELECTION.
    
    url = 'http://192.168.4.32:1028/api/dataportal/invoke'.
    
      "创建http客户端
      call method cl_http_client=>create_by_url
        exporting
          url                = url
        importing
          client             = http_client
        exceptions
          argument_not_found = 1
          plugin_not_active  = 2
          internal_error     = 3
          others             = 4.
    
      "设定传输请求内容格式以及编码格式
      http_client->REQUEST->SET_CONTENT_TYPE( CONTENT_TYPE = 'application/json; charset=utf-8' ).
    
     "设置http method 为POST
      http_client->request->set_method( if_http_request=>co_request_method_post ).
     "设置待传输内容长度
      LV_LEN = STRLEN( gv_json_in ).
    
     "设置调用方法
      CALL METHOD http_client->REQUEST->SET_HEADER_FIELD
        EXPORTING
          NAME  = '~request_method'
          VALUE = 'POST'.
    
      "http_client->request->set_cdata( data = gv_json_in ).
    
      "设置传入字符串
      CALL METHOD http_client->REQUEST->SET_CDATA
        EXPORTING
          DATA   = gv_json_in
          OFFSET = 0
          LENGTH = LV_LEN.
      "发送数据
      call method http_client->send
        exceptions
          http_communication_failure = 1
          http_invalid_state         = 2
          http_processing_failed     = 3
          http_invalid_timeout       = 4
          others                     = 5.
      "接收返回
      call method http_client->receive
        exceptions
          http_communication_failure = 1
          http_invalid_state         = 2
          http_processing_failed     = 3.
    
     "获取接口返回的字符串
      result = http_client->response->get_cdata( ).
    
    WRITE: /,'测试数据',result.
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31
    • 32
    • 33
    • 34
    • 35
    • 36
    • 37
    • 38
    • 39
    • 40
    • 41
    • 42
    • 43
    • 44
    • 45
    • 46
    • 47
    • 48
    • 49
    • 50
    • 51
    • 52
    • 53
    • 54
    • 55
    • 56
    • 57
    • 58
    • 59
    • 60
    • 61
    • 62
    • 63
    • 64
    • 65
    • 66
    • 67
    • 68
    • 69
    • 70
    • 71
    • 72
    • 73
    • 74
    • 75
    • 76
    • 77
    • 78
    • 79
    • 80

    后面这个本地文件不行

    选择本地文件,因为本地的URL不成功:
    在这里插入图片描述

    选择文件:
    在这里插入图片描述

    在这里另存为下来的:
    在这里插入图片描述

    创建新的请求号,并填写描述:
    在这里插入图片描述

    填写内容之后,点击“继续”:
    在这里插入图片描述

    点击“完成”:
    在这里插入图片描述

    点击保存,并激活:
    在这里插入图片描述

    创建逻辑端口

    为我们刚刚创建的消费者创建逻辑端口

    登录SOA网址:https://mysap.goodsap.cn:44300/sap/bc/webdynpro/sap/appl_soap_management

    在这里插入图片描述
    在这里插入图片描述

    选择“Web服务配置”:
    在这里插入图片描述

    选择“消费者代理”,输入ZSW_*筛选条件,点击搜索,找到我们刚刚创建的消费者代理:
    在这里插入图片描述

    双击刚刚创建的“消费者代理”:

    在这里插入图片描述

    点击“创建”,选择“基于WSDL的配置”:

    在这里插入图片描述

    输入逻辑端口名称和描述,点击下一个:
    在这里插入图片描述

    选择文件,选中文件,点击下一个:
    在这里插入图片描述

    输入用户名和密码,点击下一个:
    在这里插入图片描述

    点击“下一个”:
    在这里插入图片描述

    点击“完成”:
    在这里插入图片描述

    测试服务消费者

    点击执行测试:

    在这里插入图片描述

    输入逻辑端口名称,点击执行
    在这里插入图片描述

    选择方法,再次点击执行:

    在这里插入图片描述

    可以点击这里修改XML内容,改变参数的值:

    在这里插入图片描述

    修改参数的值,点击返回:

    在这里插入图片描述

    点击“执行”:

    在这里插入图片描述

    报错

    点击执行之后,报下面的错误:
    在这里插入图片描述

    在这里插入图片描述

    调用 SOAP 运行时函数时出错:SRT:Processing error in Internet Communication Framework: (“Direct connect to 192.168.7.31:8080 failed: NIECONN_REFUSED(-10)”)

    出现上面这个问题是因为,我自己的SAP服务器在外网,但是我访问的地址是内网地址,所以是访问不到的,所以失败了。

    SRT Framework exception: 服务 Ping 错误:调用 SOAP 运行时函数时出错:SRT: Processing errorin Internet Communication Framework: (“Direct connect to 192.168.7.31:8080 failed: NIECONN_REFUSED(-10)”)类型消息SRT Framework exception: 服务 Ping 错误:调用 SOAP 运行时函数时出错:SRT: Processing errorin Internet Communication Framework: (“Direct connect to 192.168.7.31:8080 failed: NIECONN_REFUSED(-10)”)服务 Ping 错误:调用 SOAP 运行时函数时出错:SRT: Processing error in Internet Communication Framework: (“Direct connect to 192.168.7.31:8080 failed: NIECONN_REFUSED(-10)”)处理 Web 服务调用时出错调用 SOAP 运行时函数时出错:SRT: Processing error in Internet Communication Framework: (“Direct connect to 192.168.7.31:8080 failed: NIECONN_REFUSED(-10)”

    Postman测试接口

    首先用Postman测试接口是否配通

    Headers设置

    在这里插入图片描述

    报错如下:
    在这里插入图片描述

    Body设置

    选择raw,XML:

    在这里插入图片描述

    这里填成在浏览器测试时显示的请求格式:

    在这里插入图片描述

    点击Send发送,得到相应结果:

    在这里插入图片描述

    Direct connect to 192.168.7.31:8080 failed: NIECONN_REFUSED(-10)

    在这里插入图片描述

    这个问题没有解决。

  • 相关阅读:
    大模型背景下软件工程的机遇与挑战
    汉字乱码汇总
    LeetCode --- 1491. Average Salary Excluding the Minimum and Maximum Salary 解题报告
    springboot使用mybatis
    CentOS 7 安装Java环境
    Android入门第43天-Activity与Activity间的互相传值
    家居服务小程序发展指南
    mac修改/etc/profile导致终端所有命令不可使用
    9.Springboot整合Security很全
    Gin中的Cookie和Session的用法
  • 原文地址:https://blog.csdn.net/weixin_44686958/article/details/136621726