PM任务清单批量导入IA05的BAPI

今天在修改项目上批量导入PM任务清单程序时,发现目前系统中使用BDC录屏方式进行批量导入,当然BDC导入的弊端想必大家很清楚的,那么是否有BAPI可以使用?(抱歉,废话有点多,直接上代码)

 LOOP AT t_zspmrp006.
    "新任务清单
    AT END OF itemno.
      DATA(lv_end) = 'X'.
    ENDAT.

    AT NEW groupid.
      CLEAR:lv_plnnr,lv_plnal.
    ENDAT.

    AT NEW itemno.
      DATA(lv_new) = 'X'.
    ENDAT.

    IF lv_new = 'X'.
      CLEAR lv_new.
      CLEAR ls_header.
      ls_header-plnty = 'A'.
      IF lv_plnnr IS NOT INITIAL.
        ls_header-plnnr = lv_plnnr.
      ENDIF.

      ls_header-plnal = CONV numc2( t_zspmrp006-itemno )."lv_plnal.
      ls_header-datuv = sy-datum.
      ls_header-ktext = t_zspmrp006-ktext.
      ls_header-iwerk = ls_header-werks = t_zspmrp006-werks.
      IF t_zspmrp006-arbpl IS NOT INITIAL.
        ls_header-arbpl_werk = t_zspmrp006-werks.
        ls_header-arbpl = t_zspmrp006-arbpl.
      ENDIF.
      ls_header-vagrp = t_zspmrp006-vagrp.
      ls_header-statu = '4'.
      ls_header-strat = t_zspmrp006-strat.
    ENDIF.

    l_vornr = l_vornr + 10.
    CLEAR:lt_options.
    lt_options-plnty = 'A'.
    lt_options-plnal = CONV numc2( t_zspmrp006-itemno ).
    lt_options-vornr = l_vornr.
    lt_options-arbpl = t_zspmrp006-arbpl_d.
    lt_options-werks = t_zspmrp006-werks.
    lt_options-ltxa1 = t_zspmrp006-ltxa1.
    lt_options-ltxa1 = sy-langu.
    APPEND lt_options.

    CLEAR:lt_stream,lt_stream[],lt_itf[].
    IF t_zspmrp006-ltext IS NOT INITIAL.
      lt_stream = t_zspmrp006-ltext.
      APPEND lt_stream.
      CALL FUNCTION 'CONVERT_STREAM_TO_ITF_TEXT'
        TABLES
          text_stream = lt_stream
          itf_text    = lt_itf.
    ENDIF.

    IF lt_itf[] IS NOT INITIAL.
      CLEAR lt_text.
      lt_text-plnty = 'A'.
      lt_text-plnal = CONV numc2( t_zspmrp006-itemno ).
      lt_text-vornr = l_vornr.
      lt_text-langu = sy-langu.

      lt_text-textstart = lines( lt_text_lines ) + 1.
      lt_text-textend = lt_text-textstart + lines( lt_itf ) - 1.
      APPEND lt_text.
    ENDIF.

    APPEND LINES OF lt_itf TO lt_text_lines.

    IF lv_end = 'X'.

      CALL FUNCTION 'EAM_TASKLIST_CREATE'
        EXPORTING
          is_header     = ls_header
        IMPORTING
          ev_plnnr      = lv_plnnr
          ev_plnal      = lv_plnal
        TABLES
          it_operations = lt_options
          et_return     = lt_return
          it_text       = lt_text
          it_text_lines = lt_text_lines.

      sy-subrc = 4.
      LOOP AT lt_return INTO DATA(ls_return) WHERE type CA 'AEX'.
        CHECK ls_return-id <> 'BAPI'.

        MESSAGE ID ls_return-id TYPE ls_return-type
        NUMBER ls_return-number
        WITH ls_return-message_v1 ls_return-message_v2
             ls_return-message_v3 ls_return-message_v4
        INTO DATA(lv_msg).
        t_zspmrp006-mesag = |{ t_zspmrp006-mesag }{ lv_msg };|.
      ENDLOOP.

      IF sy-subrc = 0.
        t_zspmrp006-icon = icon_incomplete.
      ELSE.
        t_zspmrp006-icon = icon_checked.
        CLEAR lt_return.

        CALL FUNCTION 'EAM_TASKLIST_POST'
          EXPORTING
            iv_plnty  = 'A'
            iv_plnnr  = lv_plnnr
          IMPORTING
            et_return = lt_return[].

        sy-subrc = 4.
        LOOP AT lt_return INTO ls_return WHERE type CA 'AEX'.
          CHECK ls_return-id <> 'BAPI'.

          MESSAGE ID ls_return-id TYPE ls_return-type
          NUMBER ls_return-number
          WITH ls_return-message_v1 ls_return-message_v2
               ls_return-message_v3 ls_return-message_v4
          INTO lv_msg.

          t_zspmrp006-mesag = |{ t_zspmrp006-mesag }{ lv_msg };|.
        ENDLOOP.
        IF sy-subrc = 0 .
          CALL FUNCTION 'BAPI_TRANSACTION_ROLLBACK'.
          t_zspmrp006-icon = icon_incomplete.
        ELSE.
          CALL FUNCTION 'BAPI_TRANSACTION_COMMIT'
            EXPORTING
              wait = 'X'.

          t_zspmrp006-icon = icon_checked.
          t_zspmrp006-plnnr = lv_plnnr.
        ENDIF.
      ENDIF.

      t_zspmrp006-plnal = lv_plnal.
      MODIFY t_zspmrp006 FROM t_zspmrp006 TRANSPORTING mesag icon plnnr plnal WHERE groupid = t_zspmrp006-groupid AND itemno = t_zspmrp006-itemno.

      CLEAR:l_vornr,lv_end,lt_return[],lt_options[],lt_text[],lt_text_lines[],ls_header."lv_plnnr,lv_plnal.

    ENDIF.
  ENDLOOP.

主要适用的FM:EAM_TASKLIST_CREATE、EAM_TASKLIST_POST。

代码上完了,说一下注意事项:

1、通常来讲我们调用EAM_TASKLIST_POST函数,会认为不需要进行Commit Work,但是对于任务清单来讲,Commit Work还是少不了的。

2、如果不调用EAM_TASKLIST_POST,而直接调用BAPI_TRANSACTION_COMMIT是否可行?

不可以,系统直接会提示ABAP DUMP,所以以上两个FM是配合使用的。

3、EAM_TASKLIST_CREATE创建任务清单时,每次只可创建一个计数器清单,不可多条创建。

4、对于同一个任务清单的多个计数器来讲,以上代码中均通过EAM_TASKLIST_CREATE来进行创建而没有使用EAM_TASKLIST_CHANGE进行修改原任务清单来增加计数器(不确定通过EAM_TASKLIST_CHANGE可以实现,大家可以自行试一下)。

5、在创建同一个任务清单的多个计数器时,需要先创建任务清单,并提交,然后创建下一计数器。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值