0
点赞
收藏
分享

微信扫一扫

WebService 创建  发布 调用整个流程_SAP刘梦

虽然有不少webservice的资料,但是按照上面的做还是有不少问题,

而且NetWeaver版本不一样,操作也不一样。

最近刚做了个webservice,顺便写个例子,以便以后参考吧。

1、首先创建了个可远程调用的FM ​WebService <wbr>创建 <wbr> <wbr>发布 <wbr>调用整个流程


就是个加法

FUNCTION zlm_ws_add .

*"----------------------------------------------------------------------

*"*"Local Interface:

*"  IMPORTING

*"     VALUE(I_A) TYPE  INT4 OPTIONAL

*"     VALUE(I_B) TYPE  INT4 OPTIONAL

*"  EXPORTING

*"     VALUE(E_RESULT) TYPE  INT4

*"----------------------------------------------------------------------


  e_result 

= i_a + i_b .

ENDFUNCTION .

2、激活后,创建后发布 ​WebService <wbr>创建 <wbr> <wbr>发布 <wbr>调用整个流程



然后根据向导一步步进行 ​WebService <wbr>创建 <wbr> <wbr>发布 <wbr>调用整个流程



WebService <wbr>创建 <wbr> <wbr>发布 <wbr>调用整个流程



WebService <wbr>创建 <wbr> <wbr>发布 <wbr>调用整个流程



WebService <wbr>创建 <wbr> <wbr>发布 <wbr>调用整个流程



WebService <wbr>创建 <wbr> <wbr>发布 <wbr>调用整个流程


然后可以看到一个激活的服务 ​WebService <wbr>创建 <wbr> <wbr>发布 <wbr>调用整个流程



3、进入SAO配置服务,按图点击或者使用tcode:soamanager

WebService <wbr>创建 <wbr> <wbr>发布 <wbr>调用整个流程



进入如下:


WebService <wbr>创建 <wbr> <wbr>发布 <wbr>调用整个流程


WebService <wbr>创建 <wbr> <wbr>发布 <wbr>调用整个流程



点编辑

WebService <wbr>创建 <wbr> <wbr>发布 <wbr>调用整个流程



WebService <wbr>创建 <wbr> <wbr>发布 <wbr>调用整个流程


可以填写用户名,密码,语言,不让每次调用得输入用户名密码

之后点击保存,显示已经激活 ​WebService <wbr>创建 <wbr> <wbr>发布 <wbr>调用整个流程



查看WSDL文件: ​WebService <wbr>创建 <wbr> <wbr>发布 <wbr>调用整个流程




WebService <wbr>创建 <wbr> <wbr>发布 <wbr>调用整个流程



这个xml文档就是WSDL文件,这个网址,经过稍微修改就是需要的URL地址

如果仅仅是自己系统测试,不需要修改,如果是提交给外部需要如下操作: 1、把URL地址中公司域名改成真正的ip地址; 2、把URL中,ws_policy 改为 standard,standard才是真正被外部系统调用的 3、地址最后加上 ?WSDL  

因为是本地测试, 我只加了最后的WSDL,结果如下 http://公司域名 :8000/sap/bc/srt/wsdl /srvc_000C294FE4B61EE2A5D5749FEABB6954/wsdl11/allinone/ws_policy/document?sap-client=800?wsdl

这样,一个服务就建好了。

然后继续创建代理类 1、se80创建 ​WebService <wbr>创建 <wbr> <wbr>发布 <wbr>调用整个流程



然后按着向导一步步操作


WebService <wbr>创建 <wbr> <wbr>发布 <wbr>调用整个流程



WebService <wbr>创建 <wbr> <wbr>发布 <wbr>调用整个流程

WebService <wbr>创建 <wbr> <wbr>发布 <wbr>调用整个流程



WebService <wbr>创建 <wbr> <wbr>发布 <wbr>调用整个流程



因为我当时没保存账户密码,需要输入

WebService <wbr>创建 <wbr> <wbr>发布 <wbr>调用整个流程



然后看到一个新 的代理类 ​WebService <wbr>创建 <wbr> <wbr>发布 <wbr>调用整个流程

然后点击激活 ​WebService <wbr>创建 <wbr> <wbr>发布 <wbr>调用整个流程



2、进入soa继续配置代理类(tcode:soamanager) ​WebService <wbr>创建 <wbr> <wbr>发布 <wbr>调用整个流程


选中代理后,点apply

WebService <wbr>创建 <wbr> <wbr>发布 <wbr>调用整个流程



创建端口,写上用户名和密码

WebService <wbr>创建 <wbr> <wbr>发布 <wbr>调用整个流程



WebService <wbr>创建 <wbr> <wbr>发布 <wbr>调用整个流程



WebService <wbr>创建 <wbr> <wbr>发布 <wbr>调用整个流程


点击保存 ​WebService <wbr>创建 <wbr> <wbr>发布 <wbr>调用整个流程


保存,激活后,代理类完成

此时应该注意可能此端口还没有创建,需要创建端口: tcode:LPCONFIG ​WebService <wbr>创建 <wbr> <wbr>发布 <wbr>调用整个流程


然后点击保存并激活


此时,查看生成的服务和代理 se80: ​WebService <wbr>创建 <wbr> <wbr>发布 <wbr>调用整个流程


 

WebService <wbr>创建 <wbr> <wbr>发布 <wbr>调用整个流程


WebService <wbr>创建 <wbr> <wbr>发布 <wbr>调用整个流程



WebService <wbr>创建 <wbr> <wbr>发布 <wbr>调用整个流程




最后,调用! 太累了,不想再写这个程序了 摘一段别的程序的调用,仅作参考 : REPORT  zlm_ws_001 . 

"定义代理类

DATA :

      lc_proxy 

TYPE  REF  TO zlm_prefix_test1co_zlm_ws_test .

"定义输入输出

DATA :

      

input  TYPE  zlm_prefix_test1zrfc_test01 ,

      

output  TYPE zlm_prefix_test1zrfc_test01res .

"定义异常类

DATA :

      lc_sys_exception 

TYPE  REF  TO cx_ai_system_fault ,

      lc_application_exception 

TYPE  REF  TO cx_ai_application_fault .

"定义错误捕获消息

DATA :

      l_msg 

TYPE  REF  TO cx_ai_system_fault .

DATA : l_string  TYPE string .


DATA :

      l_it_data   

TYPE ZLM_PREFIX_TEST1ZLM_BD1_TAB ,

      l_wa_data   

LIKE  LINE  OF l_it_data .

START-OF-SELECTION .

*"参数赋值

l_wa_data

- id  =  3 .

l_wa_data

-name  =  'LM' .

l_wa_data

-age  =  22 .

l_wa_data

-ADDTION1  =  'TEST' .

APPEND l_wa_data  to l_it_data .


input -IT_DATA -ITEM  = l_it_data .



"创建对象

TRY   .

    

CREATE OBJECT lc_proxy .

  

CATCH cx_ai_system_fault  INTO lc_sys_exception .

    

MESSAGE  '创建实例出错!'  TYPE  'I' .

    

EXIT .

ENDTRY .


"调用代理类

TRY  .

    

CALL  METHOD lc_proxy ->zrfc_test01

      

EXPORTING

        

input   =  input

      

IMPORTING

        

output  =  output .


  

CATCH cx_ai_system_fault  INTO l_msg .

    l_string 

= l_msg ->if_message ~get_text (  ) .

    

WRITE l_string .

    

EXIT .

  

CATCH cx_ai_application_fault  .

    

MESSAGE  '应用调用错误!'  TYPE  'I' .

    

EXIT .

ENDTRY .






举报

相关推荐

0 条评论