虽然有不少webservice的资料,但是按照上面的做还是有不少问题,
ENDFUNCTION .
而且NetWeaver版本不一样,操作也不一样。
最近刚做了个webservice,顺便写个例子,以便以后参考吧。
1、首先创建了个可远程调用的FM
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
.
*"----------------------------------------------------------------------
*"*"Local
*"
*"
*"
*"
*"
*"----------------------------------------------------------------------
ENDFUNCTION .
2、激活后,创建后发布
然后根据向导一步步进行
然后可以看到一个激活的服务
进入如下:
之后点击保存,显示已经激活
查看WSDL文件:
如果仅仅是自己系统测试,不需要修改,如果是提交给外部需要如下操作:
1、把URL地址中公司域名改成真正的ip地址;
2、把URL中,ws_policy 改为 standard,standard才是真正被外部系统调用的
3、地址最后加上 ?WSDL
因为是本地测试, 我只加了最后的WSDL,结果如下
http://公司域名
:8000/sap/bc/srt/wsdl
/srvc_000C294FE4B61EE2A5D5749F
EABB6954/wsdl11/allinone/ws_policy/document?sap-client=800?wsdl
这样,一个服务就建好了。
然后继续创建代理类
1、se80创建
然后按着向导一步步操作
然后点击激活
![WebService <wbr>创建 <wbr> <wbr>发布 <wbr>调用整个流程 WebService <wbr>创建 <wbr> <wbr>发布 <wbr>调用整个流程](https://i-blog.csdnimg.cn/blog_migrate/a4c26d1e5885305701be709a3d33442f.gif)
2、进入soa继续配置代理类(tcode:soamanager)
点击保存
保存,激活后,代理类完成
此时应该注意可能此端口还没有创建,需要创建端口: tcode:LPCONFIG
此时,查看生成的服务和代理
se80:
![WebService <wbr>创建 <wbr> <wbr>发布 <wbr>调用整个流程 WebService <wbr>创建 <wbr> <wbr>发布 <wbr>调用整个流程](https://i-blog.csdnimg.cn/blog_migrate/a4c26d1e5885305701be709a3d33442f.gif)
![WebService <wbr>创建 <wbr> <wbr>发布 <wbr>调用整个流程 WebService <wbr>创建 <wbr> <wbr>发布 <wbr>调用整个流程](https://i-blog.csdnimg.cn/blog_migrate/a4c26d1e5885305701be709a3d33442f.gif)
最后,调用!
太累了,不想再写这个程序了
摘一段别的程序的调用,仅作参考
:
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
.
"定义代理类
DATA :
"定义输入输出
DATA :
"定义异常类
DATA :
"定义错误捕获消息
DATA :
DATA :
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 .
*"参数赋值
l_wa_data - id
l_wa_data -name
l_wa_data -age
l_wa_data -ADDTION1
APPEND
input -IT_DATA -ITEM
"创建对象
TRY
ENDTRY .
"调用代理类
TRY
ENDTRY .