调用Webservice触发OA审批
1.SE80创建企业服务
详细过程网上很多教程,我这里就不详述
2.lpconfig创建逻辑
这里也可以使用SOAMANAGER,效果都是一样的
有一点需要注意的是,要注意激活,否则调用的时候会提示无效,如果创建的时候没有激活,再进来激活的时候要通过菜单栏-逻辑端口-激活
3.程序调用
WHEN 'ZOASP1' OR 'ZOASP2'.
READ TABLE gt_output03 INTO gs_output03 WITH KEY box = 'X'.
IF sy-subrc <> 0.
MESSAGE '请先选择数据' TYPE 'E'.
ENDIF.
PERFORM frm_push_oa.
FORM frm_push_oa .
DATA:lt_ztmm024 TYPE TABLE OF ztmm024 WITH HEADER LINE.
DATA: answer TYPE string.
DATA: selectlist TYPE TABLE OF spopli WITH HEADER LINE,
lo_sys_exception TYPE REF TO cx_ai_system_fault,
lo_service TYPE REF TO zmm_service01co_capbomservice.
DATA:ps_import TYPE zmm_service01set_capbomarray1,
ps_return TYPE zmm_service01set_capbomarray_1,
ps_header TYPE zmm_service01rdm_oabomh,
ps_form TYPE zmm_service01detail,
pt_form TYPE zmm_service01detail_tab,
result TYPE string.
DATA:lt_dd07t LIKE TABLE OF dd07t WITH HEADER LINE.
CLEAR: lt_dd07t.
REFRESH:lt_dd07t.
SELECT * FROM dd07t INTO CORRESPONDING FIELDS OF TABLE lt_dd07t
WHERE domname = 'ZDMSPSTATUS' AND ddlanguage = '1' AND as4local = 'A'.
SELECT * FROM ztmm024 INTO TABLE lt_ztmm024
WHERE uname = sy-uname.
IF lt_ztmm024[] IS INITIAL.
MESSAGE '请先使用 ZFIT79 维护SAP对应的OA帐号!' TYPE 'E'.
ENDIF.
CLEAR selectlist.
REFRESH selectlist.
LOOP AT lt_ztmm024.
selectlist-varoption = lt_ztmm024-zoaname.
APPEND selectlist.
ENDLOOP.
CALL FUNCTION 'POPUP_TO_DECIDE_LIST'
EXPORTING
textline1 = '请选择账号'
titel = '账号'
IMPORTING
answer = answer
TABLES
t_spopli = selectlist
EXCEPTIONS
not_enough_answers = 1
too_much_answers = 2
too_much_marks = 3
OTHERS = 4.
IF answer EQ 'A'.
MESSAGE '已取消' TYPE 'S'.
EXIT.
ENDIF.
TRY.
CREATE OBJECT lo_service
EXPORTING
logical_port_name = 'ZMM_SERVICE01CO_CAPBOMSERVICE'.
CATCH cx_ai_system_fault INTO lo_sys_exception.
MESSAGE '调用接口时出现异常,请联系IT处理!' TYPE 'E'.
EXIT.
ENDTRY.
READ TABLE lt_ztmm024 INDEX answer.
ps_header-username = lt_ztmm024-zoaid.
LOOP AT gt_output03 INTO gs_output03 WHERE box = 'X'.
CLEAR:ps_form.
ps_form-subcontractor = gs_output03-name2."分包方
ps_form-model = gs_output03-zcx_t. "零担/车型
ps_form-city = gs_output03-zarea_t && gs_output03-zcity_t && gs_output03-zcountry_t. "目的城市
ps_form-price = gs_output03-zprice1 && '/' && gs_output03-zprice2 && '/' && gs_output03-zprice3
&& '/' && gs_output03-zprice4 && '/' && gs_output03-zprice5 && '/' && gs_output03-zprice6 && '/' && gs_output03-zprice7."区间单价
ps_form-num2 = gs_output03-zpacks && '/' && gs_output03-zpackl && '/' && gs_output03-zpackt && '/' && gs_output03-zpackc."回桶
APPEND ps_form TO pt_form.
CLEAR:gs_output03.
ENDLOOP.
ps_import-parameters-arg1 = ps_header.
ps_import-parameters-arg0-rdm_oa_bom_i = pt_form.
TRY.
CALL METHOD lo_service->set_capbomarray
EXPORTING
set_capbomarray = ps_import
IMPORTING
set_capbomarray_response = ps_return.
CATCH cx_ai_system_fault INTO lo_sys_exception.
MESSAGE lo_sys_exception->errortext TYPE 'I'.
EXIT.
ENDTRY.
IF ps_return-parameters-return CS 'false' OR ps_return-parameters-return IS INITIAL.
MESSAGE '推送OA失败,请检查OA账号是否维护正确!' TYPE 'E'.
ELSE.
LOOP AT gt_output03 INTO gs_output03 WHERE box = 'X'.
gs_output03-zstatus = '2'.
gs_output03-zstatus_t = '已提交待审批'.
MODIFY gt_output03 FROM gs_output03.
CLEAR:gs_output03.
ENDLOOP.
MESSAGE s000(oo) WITH '提交成功!' ps_return-parameters-return.
ENDIF.
ENDFORM. " FRM_PUSH_OA