项目定义创建

7 篇文章 2 订阅
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.
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值