ME35K  审批采购合同

标准功能可以单条数据审批,客户想要实现批量审批

采购订单审批_数据

采购订单审批_数据_02 

跟踪程序:

找到程序里的USER_COMMAND

采购订单审批_ico_03

采购订单审批_子程序_04

(gt_grid-i_callback_user_command)  =ALV_USER_COMMAND
(
i_callback_program)                       = SAPLMEREP

R_UCOMM                        =&IC1

LS_SELFIELD

程序名为  SAPLMEREP
       子程序   LMEREPF01

       子程序   LMEREPI20
调用函数       BAPI_PO_RELEASE      

UESR_COMMAND的代码为

采购订单审批_ico_05


采购合同和采购订单审批都会走同样的逻辑,用的同样的FUNCTION

标准代码:

METHOD rel_resetrel.

DATA: ls_outtab TYPE merep_outtab_purchdoc_rel,
l_model TYPE REF TO lcl_reporting_model,
l_datablade TYPE REF TO lcl_datablade_general,
l_frgab TYPE rm06b-frgab,
l_frgzu TYPE ekko-frgzu,
l_frgke TYPE ekko-frgke,
l_ebeln TYPE ekko-ebeln.

FIELD-SYMBOLS: <line> LIKE LINE OF gt_outtab_purchdoc_rel.

l_model = my_view->get_model( ).
l_datablade ?= l_model->get_current_datablade( ).
l_frgab = l_datablade->get_option( 'FRGAB' ).
CHECK NOT l_frgab IS INITIAL.

MOVE-CORRESPONDING im_wa TO ls_outtab.
CASE ls_outtab-icon_release.
WHEN lcl_datablade_purchdoc_rel=>my_icon_allowed.
* release
CALL FUNCTION 'BAPI_PO_RELEASE'
EXPORTING
purchaseorder = ls_outtab-ebeln
po_rel_code = l_frgab
use_exceptions = 'X'
IMPORTING
rel_status_new = l_frgzu
rel_indicator_new = l_frgke
EXCEPTIONS
error_message = 1
OTHERS = 2.
IF sy-subrc <> 0.
MESSAGE ID sy-msgid TYPE 'I' NUMBER sy-msgno
WITH sy-msgv1 sy-msgv2 sy-msgv3 sy-msgv4.
ELSE.
* update output table
LOOP AT gt_outtab_purchdoc_rel ASSIGNING <line> WHERE
ebeln = ls_outtab-ebeln.
IF l_ebeln NE ls_outtab-ebeln.
<line>-icon_release = lcl_datablade_purchdoc_rel=>my_icon_done.
l_ebeln = ls_outtab-ebeln.
ELSE.
CLEAR <line>-icon_release.
ENDIF.
<line>-frgzu = l_frgzu.
<line>-frgke = l_frgke.
SELECT SINGLE frget FROM t16fe INTO <line>-frget WHERE
spras EQ sy-langu AND
frgke EQ l_frgke.
ENDLOOP.
ENDIF.

WHEN lcl_datablade_purchdoc_rel=>my_icon_done.
* reset release
CALL FUNCTION 'BAPI_PO_RESET_RELEASE'
EXPORTING
purchaseorder = ls_outtab-ebeln
po_rel_code = l_frgab
use_exceptions = 'X'
IMPORTING
rel_status_new = l_frgzu
rel_indicator_new = l_frgke
EXCEPTIONS
error_message = 1
OTHERS = 2.

IF sy-subrc <> 0.
MESSAGE ID sy-msgid TYPE 'I' NUMBER sy-msgno
WITH sy-msgv1 sy-msgv2 sy-msgv3 sy-msgv4.
ELSE.
LOOP AT gt_outtab_purchdoc_rel ASSIGNING <line> WHERE
ebeln = ls_outtab-ebeln.
IF l_ebeln NE ls_outtab-ebeln.
<line>-icon_release = lcl_datablade_purchdoc_rel=>my_icon_allowed.
l_ebeln = ls_outtab-ebeln.
ELSE.
CLEAR <line>-icon_release.
ENDIF.
<line>-frgzu = l_frgzu.
<line>-frgke = l_frgke.
SELECT SINGLE frget FROM t16fe INTO <line>-frget WHERE
spras EQ sy-langu AND
frgke EQ l_frgke.
ENDLOOP.
ENDIF.

ENDCASE.
ENDMETHOD. "rel_resetrel


采购订单审批与撤销审批BAPI

*"----------------------------------------------------------------------
*"*"本地接口:
*" IMPORTING
*" REFERENCE(IN_EBELN) TYPE BAPIMMPARA-PO_NUMBER
*" REFERENCE(IN_FLAG) TYPE CHAR01
*" REFERENCE(IN_FRGCO) TYPE BAPIMMPARA-PO_REL_COD
*" EXPORTING
*" REFERENCE(OUT_MSG) TYPE STRING
*"----------------------------------------------------------------------
CLEAR:OUT_MSG.
IF IN_FLAG = 'Y'.
CALL FUNCTION 'BAPI_PO_RELEASE'
EXPORTING
PURCHASEORDER = IN_EBELN
PO_REL_CODE = IN_FRGCO
EXCEPTIONS
AUTHORITY_CHECK_FAIL = 1
DOCUMENT_NOT_FOUND = 2
ENQUEUE_FAIL = 3
PREREQUISITE_FAIL = 4
RELEASE_ALREADY_POSTED = 5
RESPONSIBILITY_FAIL = 6
OTHERS = 7.
IF SY-SUBRC <> 0.
MESSAGE ID SY-MSGID TYPE SY-MSGTY NUMBER SY-MSGNO
WITH SY-MSGV1 SY-MSGV2 SY-MSGV3 SY-MSGV4.
ELSE.
OUT_MSG = 'S'.
ENDIF.
ELSEIF IN_FLAG = 'N'.
CALL FUNCTION 'BAPI_PO_RESET_RELEASE'
EXPORTING
PURCHASEORDER = IN_EBELN
PO_REL_CODE = IN_FRGCO
EXCEPTIONS
AUTHORITY_CHECK_FAIL = 1
DOCUMENT_NOT_FOUND = 2
ENQUEUE_FAIL = 3
PREREQUISITE_FAIL = 4
RELEASE_ALREADY_POSTED = 5
RESPONSIBILITY_FAIL = 6
NO_RELEASE_ALREADY = 7
NO_NEW_RELEASE_INDICATOR = 8
OTHERS = 9.
IF SY-SUBRC <> 0.
MESSAGE ID SY-MSGID TYPE SY-MSGTY NUMBER SY-MSGNO
WITH SY-MSGV1 SY-MSGV2 SY-MSGV3 SY-MSGV4.
ELSE.
OUT_MSG = 'S'.
ENDIF.
ENDIF.

NDFUNCTION.