您的位置:首页 > 其它

WebService 创建  发布 调用整个流…

2014-01-22 09:18 429 查看
虽然有不少webservice的资料,但是按照上面的做还是有不少问题,
而且NetWeaver版本不一样,操作也不一样。

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

1、首先创建了个可远程调用的FM


创建 发布 调用整个流程" TITLE="WebService 创建 发布 调用整个流程" />


就是个加法

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、激活后,创建后发布


创建 发布 调用整个流程" TITLE="WebService 创建 发布 调用整个流程" />


然后根据向导一步步进行


创建 发布 调用整个流程" TITLE="WebService 创建 发布 调用整个流程" />




创建 发布 调用整个流程" TITLE="WebService 创建 发布 调用整个流程" />




创建 发布 调用整个流程" TITLE="WebService 创建 发布 调用整个流程" />




创建 发布 调用整个流程" TITLE="WebService 创建 发布 调用整个流程" />




创建 发布 调用整个流程" TITLE="WebService 创建 发布 调用整个流程" />


然后可以看到一个激活的服务


创建 发布 调用整个流程" TITLE="WebService 创建 发布 调用整个流程" />


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


创建 发布 调用整个流程" TITLE="WebService 创建 发布 调用整个流程" />


进入如下:



创建 发布 调用整个流程" TITLE="WebService 创建 发布 调用整个流程" />




创建 发布 调用整个流程" TITLE="WebService 创建 发布 调用整个流程" />


点编辑



创建 发布 调用整个流程" TITLE="WebService 创建 发布 调用整个流程" />




创建 发布 调用整个流程" TITLE="WebService 创建 发布 调用整个流程" />


可以填写用户名,密码,语言,不让每次调用得输入用户名密码
之后点击保存,显示已经激活


创建 发布 调用整个流程" TITLE="WebService 创建 发布 调用整个流程" />


查看WSDL文件:


创建 发布 调用整个流程" TITLE="WebService 创建 发布 调用整个流程" />




创建 发布 调用整个流程" TITLE="WebService 创建 发布 调用整个流程" />


这个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创建


创建 发布 调用整个流程" TITLE="WebService 创建 发布 调用整个流程" />


然后按着向导一步步操作



创建 发布 调用整个流程" TITLE="WebService 创建 发布 调用整个流程" />




创建 发布 调用整个流程" TITLE="WebService 创建 发布 调用整个流程" />


创建 发布 调用整个流程" TITLE="WebService 创建 发布 调用整个流程" />




创建 发布 调用整个流程" TITLE="WebService 创建 发布 调用整个流程" />


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


创建 发布 调用整个流程" TITLE="WebService 创建 发布 调用整个流程" />


然后看到一个新的代理类

创建 发布 调用整个流程" TITLE="WebService 创建 发布 调用整个流程" />

然后点击激活


创建 发布 调用整个流程" TITLE="WebService 创建 发布 调用整个流程" />


2、进入soa继续配置代理类(tcode:soamanager)


创建 发布 调用整个流程" TITLE="WebService 创建 发布 调用整个流程" />


选中代理后,点apply


创建 发布 调用整个流程" TITLE="WebService 创建 发布 调用整个流程" />


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



创建 发布 调用整个流程" TITLE="WebService 创建 发布 调用整个流程" />




创建 发布 调用整个流程" TITLE="WebService 创建 发布 调用整个流程" />




创建 发布 调用整个流程" TITLE="WebService 创建 发布 调用整个流程" />


点击保存


创建 发布 调用整个流程" TITLE="WebService 创建 发布 调用整个流程" />


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

此时应该注意可能此端口还没有创建,需要创建端口: tcode:LPCONFIG


创建 发布 调用整个流程" TITLE="WebService 创建 发布 调用整个流程" />


然后点击保存并激活

此时,查看生成的服务和代理
se80:


创建 发布 调用整个流程" TITLE="WebService 创建 发布 调用整个流程" />




创建 发布 调用整个流程" TITLE="WebService 创建 发布 调用整个流程" />




创建 发布 调用整个流程" TITLE="WebService 创建 发布 调用整个流程" />




创建 发布 调用整个流程" TITLE="WebService 创建 发布 调用整个流程" />


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


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.
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: