SAP 获取RFC的WSDL文件

news2025/3/29 1:36:25

主要是CPI要用到WSDL文件做mapping,客户的SAP服务器不一定直接可在浏览器访问http或者https的地址,所以在SAP里面开发程序内部调用地址获取WSDL文件

*&---------------------------------------------------------------------*
*& Report YXX_GET_WSDL
*&---------------------------------------------------------------------*
*&
*&---------------------------------------------------------------------*
REPORT yxx_get_wsdl.

DATA: gv_url          TYPE string,
      gv_protocol     TYPE string,
      gv_host         TYPE rfcdisplay-rfchost,
      gv_ip           TYPE rfcdisplay-rfchost,
      gv_port         TYPE string,
      gv_resp         TYPE string,
      gv_path         TYPE string,
      gv_fullpath     TYPE string,
      gv_extension    TYPE string,
      gv_filename     TYPE string,
      go_http_client  TYPE REF TO if_http_client,
      gt_resp         TYPE TABLE OF string,
      gt_service_info TYPE TABLE OF icm_sinfo2.

SELECTION-SCREEN BEGIN OF BLOCK blk01 WITH FRAME TITLE TEXT-101.

PARAMETERS: p_rfc TYPE rs38l-name OBLIGATORY MATCHCODE OBJECT sfunc_modules.

SELECTION-SCREEN END OF BLOCK blk01.

START-OF-SELECTION.

  " 检查函数名
  SELECT SINGLE
    funcname
  FROM tfdir
  WHERE
    funcname = @p_rfc
  INTO @DATA(ls_tfdir).
  IF sy-subrc <> 0.
    MESSAGE '函数不存在' TYPE 'E'.
  ENDIF.

  " 获取ip
  gv_host = sy-host.
  CALL FUNCTION 'RFC_HOST_TO_IP'
    EXPORTING
      rfchost = gv_host
    IMPORTING
      rfcip   = gv_ip.

  " 获取http端口
  CALL FUNCTION 'ICM_GET_INFO2'
    TABLES
      servlist = gt_service_info.
  gv_port     = VALUE #( gt_service_info[ protocol = 1 ]-service OPTIONAL ). " HTTP 端口
  gv_protocol = 'http'.
  IF gv_port IS INITIAL.
    gv_port = VALUE #( gt_service_info[ protocol = 2 ]-service OPTIONAL ). " HTTPS 端口
    gv_protocol = 'https'.
  ENDIF.

  " WSDL地址 使用之前需要在SICF Service Tree中激活WSDL服务的地址才可以访问
  gv_url = |{ gv_protocol }://{ gv_ip }:{ gv_port }/sap/bc/soap/wsdl11?services={ p_rfc }&sap-client={ sy-mandt }|.

  " 调用WSDL地址
  cl_http_client=>create_by_url(
    EXPORTING
      url = gv_url
    IMPORTING
      client = go_http_client
    EXCEPTIONS
      argument_not_found = 1
      plugin_not_active  = 2
      internal_error     = 3
      OTHERS             = 4 ).
  IF sy-subrc <> 0.
    MESSAGE ID sy-msgid TYPE sy-msgty NUMBER sy-msgno WITH
               sy-msgv1 sy-msgv2 sy-msgv3 sy-msgv4.
    EXIT.
  ENDIF.

  " 设置授权
  go_http_client->request->set_content_type( content_type = 'application/xml; charset=utf-8' ).
  go_http_client->request->set_authorization( username = CONV #( sy-uname ) password = CONV string( '' ) ).
  go_http_client->authenticate( username = CONV #( sy-uname ) password = CONV string( '' ) ).
  go_http_client->request->set_method( if_http_request=>co_request_method_post ).

  " 发送请求
  go_http_client->send(  EXCEPTIONS http_communication_failure = 1
                                   http_invalid_state         = 2  ).

  " 读取远程服务返回的结果消息。
  go_http_client->receive( EXCEPTIONS http_communication_failure = 1
                                      http_invalid_state         = 2
                                      http_processing_failed     = 3 ).

  IF sy-subrc <> 0.
    "操作失败,获取失败原因
    go_http_client->get_last_error( IMPORTING message = DATA(lv_message) ).
    MESSAGE lv_message TYPE 'E'.
  ELSE.
    gv_resp = go_http_client->response->get_cdata( ).

    " 选择文件保存路径
    cl_gui_frontend_services=>file_save_dialog(
      EXPORTING
        default_extension = 'WSDL'
        default_file_name = CONV string( p_rfc )
      CHANGING
        filename          = gv_filename
        path              = gv_path
        fullpath          = gv_fullpath
      EXCEPTIONS
        OTHERS            = 1 ).

    IF sy-subrc <> 0 OR gv_fullpath IS INITIAL.
      MESSAGE '未选择文件保存路径' TYPE 'E'. " 未选择文件保存路径
      RETURN.
    ENDIF.

    APPEND gv_resp TO gt_resp.

    " 下载本地
    CALL FUNCTION 'GUI_DOWNLOAD'
      EXPORTING
        filename = gv_fullpath
        filetype = 'DAT'
      TABLES
        data_tab = gt_resp.

  ENDIF.

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

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

相关文章

java8循环解压zip文件---实现Excel文件数据追加

java8循环追加Excel数据 实际遇到问题&#xff1a;定期获取zip文件&#xff0c;zip文件内有几个固定模板的Excel文件&#xff0c;有的Excel文件可能还包含多个sheet。 有段时间一次性获取到好几个zip包&#xff0c;需要将这些包都解压&#xff0c;并且按照不同的文件名、sheet进…

基于SpringBoot的电影售票系统

作者&#xff1a;计算机学姐 开发技术&#xff1a;SpringBoot、SSM、Vue、MySQL、JSP、ElementUI、Python、小程序等&#xff0c;“文末源码”。 专栏推荐&#xff1a;前后端分离项目源码、SpringBoot项目源码、Vue项目源码、SSM项目源码、微信小程序源码 精品专栏&#xff1a;…

SQL Server 2022 安装问题

一、安装与配置问题 1. SQL Server 2022 安装失败怎么办&#xff1f; 常见原因&#xff1a; 硬件或操作系统不满足最低要求&#xff08;如内存、磁盘空间不足&#xff09;。未关闭防火墙或杀毒软件。之前版本的 SQL Server 残留文件未清理。 解决方案&#xff1a; 确保硬件配…

MySQL 8.0.41安装教程(附安装包)mysql8.0.41图文详细安装教程

文章目录 前言一、MySQL 8.0.41下载安装包二、MySQL 8.0.41安装教程1.启动安装程序2.选择安装模式3.选定安装组件4.确认安装设置5.执行安装操作6.安装进行中7.设置数据库密码8.继续点击下一步9.执行配置操作10.完成配置11. 再次点击下一步12.结束安装向导 三、MySQL 8.0.41配置…

深入解析 C++20 中的 std::bind_front:高效函数绑定与参数前置

文章目录 1. 什么是 std::bind_front&#xff1f;2. 使用 std::bind_front2.1 基本用法2.2 绑定多个参数 3. 优势与特点3.1 简化代码3.2 支持可调用对象3.3 支持完美转发 4. 实际应用场景4.1 事件处理4.2 算法通用化4.3 成员函数调用 5. 总结 在现代 C 编程中&#xff0c;函数绑…

python裁剪nc文件数据

问题描述&#xff1a; 若干个nc文件储存全球的1850-2014年月尺度的mrro数据(或其他数据)&#xff0c;从1850-1到2014-12一共1980个月&#xff0c;要提取出最后35年1980.1~2014.12年也就是420个月的数据。 代码实现 def aaa(input_file,output_file,bianliang,start_index,en…

CSS网格布局Grid

目录 一、Grid 网格布局 1.Grid 布局基础 2.网格容器属性 3.网格项目属性 4.高级功能 5.典型应用场景 6.最佳实践 二、Flex和Grid对比 示例&#xff1a; 一、Grid 网格布局 CSS Grid 是一种强大的二维布局系统&#xff0c;能够以行和列的方式精确控制网页布局。它比传…

医院挂号预约小程序|基于微信小程序的医院挂号预约系统设计与实现(源码+数据库+文档)

医院挂号预约小程序 目录 基于微信小程序的医院挂号预约系统设计与实现 一、前言 二、系统功能设计 三、系统实现 1、小程序用户端 2、系统服务端 &#xff08;1&#xff09; 用户管理 &#xff08;2&#xff09;医院管理 &#xff08;3&#xff09;医生管理 &#xf…

蓝桥杯第十届 特别的数

题目描述 小明对数位中含有 2、0、1、9 的数字很感兴趣&#xff08;不包括前导 0&#xff09;&#xff0c;在 1 到 40 中这样的数包括 1、2、9、10 至 32、39 和 40&#xff0c;共 28 个&#xff0c;他们的和是 574。 请问&#xff0c;在 1 到 n 中&#xff0c;所有这样的数的…

Qt开发:QInputDialog的使用

文章目录 一、QInputDialog的介绍二、 QInputDialog的基本用法三、使用 QInputDialog的实例四、QInputDialog的信号与槽 一、QInputDialog的介绍 QInputDialog 是 Qt 提供的一个对话框类&#xff0c;用于获取用户输入的文本、整数或浮点数。它提供了简单易用的静态方法和可定制…

redis--JavaSpring客户端

目录 一、引言 二、配置 三、相关操作 四、总结 一、引言 本篇文章会将redis与spring项目进行结合&#xff0c;看看再spring项目中&#xff0c;redis是如何使用的 二、配置 三、相关操作 四、总结 在spring项目中的使用和在基础项目上的使用有差异&#xff0c;但是差异并不大…

2、二分和贪心

一、二分 这里有个小技巧&#xff0c;你会发现&#xff0c;只要是求最大最小最多等等的贪心过程&#xff0c;我们就有3种方法&#xff1a;①二分②贪心算法③动态规划 我们先讲二分和贪心&#xff0c;动态规划比较麻烦&#xff0c;留到后期。 1、了解 2、模版 class Solution …

QuecPython 网络协议之TCP/UDP协议最祥解析

概述 IP 地址与域名 IP 地址是网络中的主机地址&#xff0c;用于两台网络主机能够互相找到彼此&#xff0c;这也是网络通信能够成功进行的基础。IP 地址一般以点分十进制的字符串来表示&#xff0c;如192.168.1.1。 ​ 我们日常访问的网站&#xff0c;其所在的服务器主机都有…

ISIS-2 邻居建立关系

上一章我们介绍了ISIS的基础概念以及报文内容和作用在什么样的场景下面的 这一章我们来介绍IS-IS的邻居建立关系 一、概念 IS-IS中路由器的角色可分为L1、L2、L1/2这三种类型其中的L1/L2有点类似与我们OSPF中的ABR IS-IS中的邻居关系分为L1与L2邻居关系,其中所有建立L2邻居关…

Nature Machine Intelligence 嵌入式大语言模型使机器人能够在不可预测的环境中完成复杂的任务

近期英国爱丁堡大学发表Nature Machine Intelligence研究工作&#xff0c;提出了一种名为ELLMER&#xff08;具身大型语言模型支持机器人&#xff09;的创新框架&#xff0c;通过整合大型语言模型&#xff08;如GPT-4&#xff09;、检索增强生成&#xff08;RAG&#xff09;、视…

Springboot整合elasticsearch详解 封装模版 仓库方法 如何在linux里安装elasticsearch

目录 版本 下载地址 ElasticSearch频繁报503错误 开放 9300 和 9200 两个端口 测试联通性 改动包装类 elasticsearchTemplate getAllRespRepository 封装elasticsearchService 业务逻辑 版本 首先要对应版本 这是我在官网找到的版本信息 一定要 springboot 和 es 相…

【矩阵快速幂】P6601 「EZEC-2」机器|普及+

本文涉及知识点 【矩阵快速幂】封装类及测试用例及样例 P6601 「EZEC-2」机器 题目背景 tlx 喜欢科幻小说。 小宇宙中只剩下漂流瓶和生态球。漂流瓶隐没于黑暗里,在一千米见方的宇宙中,只有生态球里的小太阳发出一点光芒。在这个小小的生命世界中,几只清澈的水球在零重力环…

FPGA助力智能机器人应用

今年开年AI机器人引爆科技圈&#xff0c;都说FPGA是“万能芯”&#xff0c;在AI方向上已经挣扎了几年&#xff0c;仍旧不能“破圈”&#xff0c;那么在机器人方向呢&#xff1f; 个人观点我是不太看好目前FPGA能在机器人方面能“破圈”&#xff0c;但是一切皆有可能&#xff0c…

如何在jupyter notebook中使用django框架

(最好以管理员身份进入&#xff0c;否则在安装某些内容时会报错) 一.创建一个名为new_env虚拟环境 输入以下指令创建名为new_env的虚拟环境&#xff1a; conda create -n new_env python3.8 回车&#xff0c;出现以下内容&#xff0c;输入y确认安装&#xff0c;等待安装完毕…