ABAP 调用CIS webservice 抓取SRM 数据
ZMLSCP1_FR0013 合肥美菱采购订单下传SRM系统(send)
FUNCTION zmlscp1_fr0013. *"---------------------------------------------------------------------- *"*"本地接口: *" TABLES *" POHDEAR STRUCTURE ZSMLPO_HDR OPTIONAL *" POITEMS STRUCTURE ZSMLPO_ITEM OPTIONAL *" RET_MSGS STRUCTURE ZSMLPO_MSG1 OPTIONAL *"---------------------------------------------------------------------- *data definition DATA: error TYPE REF TO cx_ai_system_fault. DATA: prxy TYPE REF TO zco_request_handle_mlpurchase."Proxy Name DATA: z_in TYPE zrequest8."request in DATA: z_out TYPE zresponse8."request out DATA: lv_aufnr TYPE aufnr. DATA: lv_cy_seqnr TYPE cy_seqnr."生产订单分配标签上字段屏幕顺序号 * 返回报文内表 DATA: BEGIN OF basereturnheader OCCURS 0, hresv1 TYPE c LENGTH 20,"采购订单号 hresv2 TYPE c LENGTH 20,"行项目号 hresv3 TYPE c LENGTH 20, hresv4 TYPE c LENGTH 20, hresv5 TYPE c LENGTH 20, returnmsg TYPE c LENGTH 200,"消息文本 status TYPE c LENGTH 20,"消息状态(S或E) uuid TYPE c LENGTH 30,"ID" END OF basereturnheader. DATA: basereturnitem LIKE basereturnheader OCCURS 0 WITH HEADER LINE. DATA: lo_oref TYPE REF TO cx_st_error. *clear return parameters CLEAR ret_msgs. *delete lines where ebeln is null DELETE pohdear WHERE ebeln IS INITIAL. DELETE poitems WHERE ebeln IS INITIAL. *check input data IF pohdear[] IS INITIAL OR poitems[] IS INITIAL. ret_msgs-msgty = 'E'. ret_msgs-msgtx = '传入参数POHDEAR或POHDEAR不能为空'. APPEND ret_msgs. EXIT. ENDIF. * Get filed value LOOP AT poitems. * 需求跟踪号存的值为生产订单号,根据生产订单取物料代码+描述 IF NOT poitems-bednr IS INITIAL. CLEAR lv_aufnr. * 采购订单上的需求跟踪号长度10,而生产订单长度12 CALL FUNCTION 'CONVERSION_EXIT_ALPHA_INPUT' EXPORTING input = poitems-bednr IMPORTING output = lv_aufnr. SELECT SINGLE matnr FROM afpo INTO poitems-co_matnr WHERE aufnr EQ lv_aufnr. IF sy-subrc EQ 0. SELECT SINGLE maktx FROM makt INTO poitems-co_matxt WHERE matnr EQ poitems-co_matnr AND spras EQ sy-langu. * 物料主数据SCP供应链字段获取 SELECT SINGLE zcbwl zjit zctwl zzdzd zjmwl zbbwl INTO (poitems-zcbwl,poitems-zjit,poitems-zctwl,poitems-zzdzd,poitems-zjmwl,poitems-zbbwl) FROM zmlscpzsj WHERE matnr EQ poitems-co_matnr AND werks EQ poitems-werks. * 生产订单分配标签上的屏幕分配号字段 CLEAR lv_cy_seqnr. SELECT SINGLE cy_seqnr INTO lv_cy_seqnr FROM afko WHERE aufnr EQ lv_aufnr. CALL FUNCTION 'CONVERSION_EXIT_ALPHA_OUTPUT' EXPORTING input = lv_cy_seqnr IMPORTING output = poitems-backup1. ENDIF. ENDIF. * Set canOntime(业务状态:是否可以按时交货) * Set noR3Receive(R3未收货数量) MODIFY poitems. CLEAR poitems. ENDLOOP. CLEAR: xmlstr,z_in,z_out. *generate xml string CONCATENATE '<?xml version="1.0" encoding="utf-8"?>' xmlstr INTO xmlstr. append_data_to_xml 'handleMLPurchaseOrderService' '' 'B'. append_data_to_xml 'in0' '' 'B'. append_data_to_xml 'pos' '' 'B'. LOOP AT pohdear. append_data_to_xml 'Po' '' 'B'. append_data_to_xml 'poHeader' '' 'B'. append_data_to_xml 'aedat' pohdear-aedat 'A'. append_data_to_xml 'backup1' '' 'A'. append_data_to_xml 'backup2' '' 'A'. append_data_to_xml 'backup3' '' 'A'. append_data_to_xml 'backup4' '' 'A'. append_data_to_xml 'backup5' '' 'A'. append_data_to_xml 'backup6' '' 'A'. append_data_to_xml 'bedat' pohdear-bedat 'A'. append_data_to_xml 'bsart' pohdear-bsart 'A'. append_data_to_xml 'bukrs' pohdear-bukrs 'A'. append_data_to_xml 'ebeln' pohdear-ebeln 'A'. append_data_to_xml 'ekgrp' pohdear-ekgrp 'A'. append_data_to_xml 'ekorg' pohdear-ekorg 'A'. append_data_to_xml 'elikz' pohdear-elikz 'A'. append_data_to_xml 'ernam' pohdear-ernam 'A'. append_data_to_xml 'frggr' pohdear-frggr 'A'. append_data_to_xml 'frgsx' pohdear-frgsx 'A'. append_data_to_xml 'iresv1' pohdear-iresv1 'A'. append_data_to_xml 'iresv10' '' 'A'. append_data_to_xml 'iresv2' '' 'A'. append_data_to_xml 'iresv3' '' 'A'. append_data_to_xml 'iresv4' '' 'A'. append_data_to_xml 'iresv5' '' 'A'. append_data_to_xml 'iresv6' '' 'A'. append_data_to_xml 'iresv7' '' 'A'. append_data_to_xml 'iresv8' '' 'A'. append_data_to_xml 'iresv9' '' 'A'. append_data_to_xml 'lifnr' pohdear-lifnr 'A'. append_data_to_xml 'loekz' pohdear-loekz 'A'. append_data_to_xml 'waers' pohdear-waers 'A'. append_data_to_xml 'zterm' pohdear-zterm 'A'. append_data_to_xml 'poHeader' '' 'E'. append_data_to_xml 'poItem' '' 'B'. LOOP AT poitems WHERE ebeln EQ pohdear-ebeln. append_data_to_xml 'PoItem' '' 'B'. append_data_to_xml 'backup1' poitems-backup1 'A'. append_data_to_xml 'backup2' poitems-backup2 'A'. append_data_to_xml 'backup3' poitems-backup3 'A'. append_data_to_xml 'backup4' poitems-backup4 'A'. append_data_to_xml 'backup5' poitems-backup5 'A'. append_data_to_xml 'backup6' poitems-backup6 'A'. append_data_to_xml 'bednr' poitems-bednr 'A'. append_data_to_xml 'canOntime' poitems-canontime 'A'. append_data_to_xml 'charg' poitems-charg 'A'. append_data_to_xml 'co_matnr' poitems-co_matnr 'A'. append_data_to_xml 'co_matxt' poitems-co_matxt 'A'. append_data_to_xml 'ebeln' poitems-ebeln 'A'. append_data_to_xml 'ebelp' poitems-ebelp 'A'. append_data_to_xml 'eindt' poitems-eindt 'A'. append_data_to_xml 'ekgrp' poitems-ekgrp 'A'. append_data_to_xml 'elikz' poitems-elikz 'A'. append_data_to_xml 'isShouHuo' '' 'A'. append_data_to_xml 'knttp' poitems-knttp 'A'. append_data_to_xml 'lgort' poitems-lgort 'A'. append_data_to_xml 'loekz' poitems-loekz 'A'. append_data_to_xml 'matkl' poitems-matkl 'A'. append_data_to_xml 'matnr' poitems-matnr 'A'. append_data_to_xml 'meins' poitems-meins 'A'. append_data_to_xml 'menge' poitems-menge 'A'. append_data_to_xml 'mfrnr' poitems-mfrnr 'A'. append_data_to_xml 'mwskz' poitems-mwskz 'A'. append_data_to_xml 'noR3Receive' poitems-nor3receive 'A'. append_data_to_xml 'pstyp' poitems-pstyp 'A'. append_data_to_xml 'repos' poitems-repos 'A'. append_data_to_xml 'susr1' poitems-susr1 'A'. append_data_to_xml 'susr10' poitems-susr10 'A'. append_data_to_xml 'susr11' poitems-susr11 'A'. append_data_to_xml 'susr12' poitems-susr12 'A'. append_data_to_xml 'susr13' poitems-susr13 'A'. append_data_to_xml 'susr14' poitems-susr14 'A'. append_data_to_xml 'susr15' poitems-susr15 'A'. append_data_to_xml 'susr2' poitems-susr2 'A'. append_data_to_xml 'susr3' poitems-susr3 'A'. append_data_to_xml 'susr4' poitems-susr4 'A'. append_data_to_xml 'susr5' poitems-susr5 'A'. append_data_to_xml 'susr6' poitems-susr6 'A'. append_data_to_xml 'susr7' poitems-susr7 'A'. append_data_to_xml 'susr8' poitems-susr8 'A'. append_data_to_xml 'susr9' poitems-susr9 'A'. append_data_to_xml 'uebto' poitems-uebto 'A'. append_data_to_xml 'untto' poitems-untto 'A'. append_data_to_xml 'webre' poitems-webre 'A'. append_data_to_xml 'werks' poitems-webre 'A'. append_data_to_xml 'xersy' poitems-xersy 'A'. append_data_to_xml 'zbbwl' poitems-zbbwl 'A'. append_data_to_xml 'zcbwl' poitems-zcbwl 'A'. append_data_to_xml 'zctwl' poitems-zctwl 'A'. append_data_to_xml 'zjit' poitems-zjit 'A'. append_data_to_xml 'zjmwl' poitems-zjmwl 'A'. append_data_to_xml 'zzdzd' poitems-zzdzd 'A'. append_data_to_xml 'PoItem' '' 'E'. CLEAR poitems. ENDLOOP. append_data_to_xml 'poItem' '' 'E'. append_data_to_xml 'Po' '' 'E'. CLEAR pohdear. ENDLOOP. append_data_to_xml 'pos' '' 'E'. append_data_to_xml 'in0' '' 'E'. append_data_to_xml 'handleMLPurchaseOrderService' '' 'E'. z_in-request_data = xmlstr. * 发送前记录发送的订单数据,状态Y DATA: itab_zmlscp_log01 TYPE zmlscp_log01 OCCURS 0 WITH HEADER LINE. DATA: lv_ztime LIKE zmlscp_log01-ztime. lv_ztime = sy-datum && sy-uzeit. LOOP AT pohdear. CLEAR itab_zmlscp_log01. itab_zmlscp_log01-ebeln = pohdear-ebeln. itab_zmlscp_log01-msgty = 'Y'. itab_zmlscp_log01-msgtx = '已发送,等待SRM返回处理结果'. itab_zmlscp_log01-ztime = lv_ztime. itab_zmlscp_log01-uname = sy-uname. APPEND itab_zmlscp_log01. CLEAR pohdear. ENDLOOP. INSERT zmlscp_log01 FROM TABLE itab_zmlscp_log01. * COMMIT WORK AND WAIT. *send data to srm via cis(soa) CLEAR error. TRY. CREATE OBJECT prxy EXPORTING logical_port_name = 'ZMLSCP_SEND_PO'. CALL METHOD prxy->request EXPORTING input = z_in IMPORTING output = z_out. CATCH cx_ai_system_fault INTO error. ret_msgs-msgty = 'E'. ret_msgs-msgtx = error->errortext. APPEND ret_msgs. EXIT. ENDTRY. * 返回报文解析(XML字符串解析) IF z_out-return_code EQ 'S'."CIS转发成功 IF z_out-return_data IS NOT INITIAL."业务系统返回报文不为空 TRY . BREAK-POINT. REFRESH: basereturnheader,basereturnheader. CALL TRANSFORMATION zml_xml_trans01 SOURCE XML z_out-return_data RESULT basereturnheader = basereturnheader[] basereturnitem = basereturnitem[]. CATCH cx_st_error INTO lo_oref . ret_msgs-msgty = 'E'. ret_msgs-msgtx = lo_oref->get_text( ) . APPEND ret_msgs. ENDTRY. * deal with logs only headers LOOP AT basereturnheader. CLEAR ret_msgs. ret_msgs-eblen = basereturnheader-hresv1. IF basereturnheader-status EQ 'S'. ret_msgs-msgty = 'S'. ELSE. ret_msgs-msgty = 'E'. ENDIF. ret_msgs-msgtx = basereturnheader-returnmsg. ret_msgs-msgid = lv_ztime. APPEND ret_msgs. * SRM返回结果更新日志表 CLEAR itab_zmlscp_log01. itab_zmlscp_log01-ebeln = ret_msgs-eblen. itab_zmlscp_log01-ztime = ret_msgs-msgid. itab_zmlscp_log01-uname = sy-uname. itab_zmlscp_log01-msgty = ret_msgs-msgty. itab_zmlscp_log01-msgtx = ret_msgs-msgtx. APPEND itab_zmlscp_log01. CLEAR basereturnheader. ENDLOOP. IF NOT itab_zmlscp_log01[] IS INITIAL. UPDATE zmlscp_log01 FROM TABLE itab_zmlscp_log01. ENDIF. ELSE. ret_msgs-msgty = 'E'. ret_msgs-msgtx = 'CIS返回字段return_data为空'. APPEND ret_msgs. ENDIF. ELSE. ret_msgs-msgty = 'E'. ret_msgs-msgtx = 'CIS返回字段return_code不等于S'. APPEND ret_msgs. ENDIF. ENDFUNCTION.
本人常年接收SAP运维和远程项目,ECC,S/4HANA,CRM,WDA.
远程人天可谈,终身售后,有活请联系V信:18925782767(问问题免费,欢迎交流!)
!!请关注本人技术分享公众号:SAP翔子(可扫头像二维码)
每天分享新知识,博客文章也会陆续整理并迁移至公众号,与您一起共同学习

浙公网安备 33010602011771号