FUNCTION zpfcs1809_01.
*"----------------------------------------------------------------------
*"*"Local interface:
*" IMPORTING
*" VALUE(DATA) TYPE STRING
*" EXPORTING
*" VALUE(OUTPUT) TYPE STRING
*"----------------------------------------------------------------------
DATA: BEGIN OF ls_data ,
posid TYPE zpfcs1809_01a-posid,
gjahr TYPE zpfcs1809_01a-gjahr,
kstar TYPE zpfcs1809_01a-kstar,
dmbtr TYPE zpfcs1809_01a-dmbtr,
END OF ls_data .
DATA: it_table LIKE TABLE OF ls_data,"存放解析成功数据
es_table TYPE zpfcs1809_01a,
et_table LIKE TABLE OF zpfcs1809_01a."存放返回ESB的数据
DATA: gt_log LIKE TABLE OF zpfcs1809_01a WITH HEADER LINE."日志表
DATA: l_error.
DATA: l_mess TYPE string.
DATA: lo_cx_root TYPE REF TO cx_root.
DATA: et_lines TYPE string.
DATA: l_posid TYPE prps-posid,
tdx TYPE sy-tabix.
DATA: lv_outguid TYPE char32.
CLEAR: i_head,e_head,l_mess,l_error.
REFRESH: it_table,et_table.
*--------------------------------------------------------------------*
* 2. 开始记录XML文件日志 add by pengwei
*--------------------------------------------------------------------*
PERFORM frm_log_record_start IN PROGRAM saplzz_xml_fg001 "子程序池
USING 'I' "I/O
'ZPFCS1809_01 ' "接口函数名
'1' "标示顺序
data "传入XML
''
'' "FIELD1-ANS单号
'' "FIELD2-
'' "FIELD3-
'' "FIELD3-
''
'X' "是否COMMIT 'X'/''
CHANGING lv_outguid
IF FOUND.
*--------------------------------------------------------------------*
* 1.解析传入DATA参数XML,转为内表in_table
TRY.
CALL TRANSFORMATION zpfcs1809_01a
SOURCE XML data
RESULT i_head = i_head
i_itab = it_table. "输出参数 (i_head表头 i_itab内表与解析的A里面的定义一致)
CATCH cx_root INTO lo_cx_root ."捕捉解析异常
l_mess = lo_cx_root->get_text( ) ."获取详细错误信息
e_head-result = '1'.
e_head-biztransactionid = i_head-biztransactionid.
CONCATENATE '解析XML失败:' l_mess INTO e_head-errorinfo.
* 返回解析错误消息给ESB
CALL TRANSFORMATION zpfcs1809_01b
SOURCE e_head = e_head
RESULT XML output.
RETURN.
ENDTRY .
"记录ESB传输ID,回传给ESB
e_head-biztransactionid = i_head-biztransactionid.
" 解析出的内表in_table数据是否为空判断
IF it_table IS INITIAL.
e_head-result = '1'.
e_head-errorinfo = '传入数据为空!'.
CALL TRANSFORMATION zpfcs1809_01b
SOURCE e_head = e_head
RESULT XML output.
RETURN.
ENDIF.
*执行BAPI
DATA: headerinfo TYPE bapiplnhdr.
DATA: wa_indexstructure TYPE bapiacpstru.
DATA: indexstructure LIKE TABLE OF wa_indexstructure.
DATA: wa_coobject TYPE bapipcpobj.
DATA: coobject LIKE TABLE OF wa_coobject.
DATA: wa_totvalue TYPE bapipcptot.
DATA: totvalue LIKE TABLE OF wa_totvalue.
DATA: wa_return TYPE bapiret2,
return LIKE TABLE OF wa_return.
CLEAR: headerinfo,wa_indexstructure,wa_coobject,wa_totvalue,wa_return,
tdx.
REFRESH: gt_log,indexstructure,coobject,totvalue,return.
LOOP AT it_table INTO ls_data.
* 写入日志表
CLEAR: gt_log.
MOVE-CORRESPONDING ls_data TO gt_log.
gt_log-erdat = sy-datum.
gt_log-utime = sy-uzeit.
gt_log-uname = sy-uname.
gt_log-bizid = i_head-biztransactionid.
*抬头数据
headerinfo-co_area = 'FTJT'.
headerinfo-fisc_year = ls_data-gjahr.
headerinfo-period_from = '001'.
headerinfo-period_to = '012'.
headerinfo-version = '0'.
headerinfo-plan_currtype = 'C'.
l_posid = ls_data-posid.
CALL FUNCTION 'CONVERSION_EXIT_ALPHA_INPUT'
EXPORTING
input = l_posid
IMPORTING
output = l_posid.
tdx = tdx + 1.
*INDEXSTRUCTURE
wa_indexstructure-object_index = tdx.
wa_indexstructure-value_index = tdx.
APPEND wa_indexstructure TO indexstructure.
*COOBJECT
wa_coobject-object_index = tdx.
wa_coobject-wbs_element = l_posid. "WBS元素
APPEND wa_coobject TO coobject.
*TOTVALUE
wa_totvalue-value_index = tdx.
wa_totvalue-cost_elem = ls_data-kstar."成本要素-
wa_totvalue-dist_key_fix_val = '2'.
wa_totvalue-dist_key_var_val = '2'.
wa_totvalue-fix_value = ls_data-dmbtr."金额
APPEND wa_totvalue TO totvalue.
CALL FUNCTION 'BAPI_COSTACTPLN_POSTPRIMCOST'
EXPORTING
headerinfo = headerinfo
TABLES
indexstructure = indexstructure
coobject = coobject
totvalue = totvalue
return = return.
READ TABLE return INTO wa_return WITH KEY type = 'E'.
IF sy-subrc NE 0.
gt_log-status = 'S'.
gt_log-message = '预算创建成功!'.
CALL FUNCTION 'BAPI_TRANSACTION_COMMIT'
EXPORTING
wait = 'X'.
ELSE.
l_error = 'X'.
CLEAR l_mess.
LOOP AT return INTO wa_return .
CONCATENATE l_mess '/' wa_return-message INTO l_mess.
ENDLOOP.
gt_log-status = 'E'.
gt_log-message = l_mess.
ENDIF.
APPEND gt_log.
ENDLOOP.
* 生成返回XML
IF l_error EQ 'X'.
e_head-result = '1'.
LOOP AT gt_log WHERE status = 'E'.
CONCATENATE e_head-errorinfo gt_log-message INTO e_head-errorinfo.
* e_head-errorinfo = '创建预算失败,具体请看明细!'.
ENDLOOP.
CONCATENATE '创建预算失败:' e_head-errorinfo INTO e_head-errorinfo.
CALL TRANSFORMATION zpfcs1809_01b
SOURCE e_head = e_head
RESULT XML output.
CALL FUNCTION 'BAPI_TRANSACTION_ROLLBACK'.
ELSE.
e_head-result = '0'.
* 获取结果条数,并赋值给xml表头参数和日志message字段
DESCRIBE TABLE it_table LINES e_head-successcount.
* 返回ESB 成功XML
CALL TRANSFORMATION zpfcs1809_01b
SOURCE e_head = e_head
RESULT XML output.
ENDIF.
*--------------------------------------------------------------------*
* 4. 结束记录XML文件日志
*--------------------------------------------------------------------*
PERFORM frm_log_record_end IN PROGRAM saplzz_xml_fg001 "SAPLZZ_XML_FG001是子程序池
USING 'O' "I/O
'ZPFCS1809_01' "接口函数名
'2' "标示顺序
output "
''
'' "
'' "
''
''
''
lv_outguid "接口开始处记录的 日志流水号
IF FOUND.
* 更新日志表
MODIFY zpfcs1809_01a FROM TABLE gt_log.
COMMIT WORK AND WAIT.
ENDFUNCTION.
项目定义创建
最新推荐文章于 2022-07-16 08:25:04 发布