[ABAP] QF01质检通知单删除行数据BAPI:BAPI_QUALNOT_DEL_DATA
最近做一个QF01的批导创建需求,QF01质检通知单创建的BAPI一开始没有找到采用录屏的的方式实现的,后边查资料找到几个BAPI还没有去验证测试:QFFE_FAILURE_RECORDING、BAPI_QNOTIFICAT_CREATE、BAPI_QUALNOT_CREATE等。
后边需求有变更要求导入时已创建的检验批数据需要覆盖通知单,这样就涉及到QF01的删除行数据操作了,偏偏前台操作SAP没有预留整单删除按钮,录屏又不太好实现,这样尝试去查找删除质检通知单的BAPI找到:BAPI_QUALNOT_DEL_DATA
阅读BAPI文档得到需要与BAPI_QUALNOT_SAVE连用,类似于一个提交操作。
在使用BAPI_QUALNOT_DEL_DATA的时候需要注意参数值需要填写完整,而完整的参数值很难通过表取数获取,可以通过调用:BAPI_QUALNOT_GETDETAIL来获取相关参数值,将需要删除的行数据填入BAPI_QUALNOT_DEL_DATA就可以了。
需要注意:即使用BAPI删除了通知单的所有行数据, 抬头表QMEL的删除标识KZLOESCH也是不会打钩的,但是前台QF01删除所有行数据抬头QMEL-KZLOESCH会自动打钩,这点在使用中需要注意。
欢迎指正!

附调用代码:
*&---------------------------------------------------------------------*
*& Form FRM_DELETE_QMNUM
*& 删除通知单
*&---------------------------------------------------------------------*
FORM frm_delete_qmnum USING pv_qmnum TYPE bapi2078_nothdre-notif_noCHANGING p_head LIKE gs_data.DATA: lt_notitem TYPE TABLE OF bapi2078_notiteme,lt_notifcaus TYPE TABLE OF bapi2078_notcause,lt_notifactv TYPE TABLE OF bapi2078_notactve,lt_notiftask TYPE TABLE OF bapi2078_nottaske,lt_notifpartnr TYPE TABLE OF bapi2078_notpartnre,lt_return TYPE TABLE OF bapiret2.DATA: lt_notitem_del TYPE TABLE OF bapi2078_notitemi,lt_notifcaus_del TYPE TABLE OF bapi2078_notcausi,lt_notifactv_del TYPE TABLE OF bapi2078_notactvi,lt_notiftask_del TYPE TABLE OF bapi2078_nottaski,lt_notifpartnr_del TYPE TABLE OF bapi2078_notpartnri,lt_return_del TYPE TABLE OF bapiret2.DATA: lt_return_save TYPE TABLE OF bapiret2."获取通知单明细数据CALL FUNCTION 'BAPI_QUALNOT_GETDETAIL'EXPORTINGnumber = pv_qmnum
* IMPORTING
* NOTIFHEADER_EXPORT =
* NOTIFHDTEXT =TABLES" NOTLONGTXT =notitem = lt_notitemnotifcaus = lt_notifcausnotifactv = lt_notifactvnotiftask = lt_notiftasknotifpartnr = lt_notifpartnrreturn = lt_return.IF NOT line_exists( lt_return[ type = 'E' ] )."删除通知单行项目MOVE-CORRESPONDING lt_notitem[] TO lt_notitem_del[].MOVE-CORRESPONDING lt_notifcaus[] TO lt_notifcaus_del[].MOVE-CORRESPONDING lt_notifactv[] TO lt_notifactv_del[].MOVE-CORRESPONDING lt_notiftask[] TO lt_notiftask_del[].
" MOVE-CORRESPONDING lt_notifpartnr[] TO lt_notifpartnr_del[].CALL FUNCTION 'BAPI_QUALNOT_DEL_DATA'EXPORTINGnumber = pv_qmnumTABLESnotitem = lt_notitem_delnotifcaus = lt_notifcaus_delnotifactv = lt_notifactv_delnotiftask = lt_notiftask_del
" notifpartnr = lt_notifpartnr_delreturn = lt_return_del.IF line_exists( lt_return_del[ type = 'E' ] ) OR line_exists( lt_return_del[ type = 'A' ] ).CALL FUNCTION 'BAPI_TRANSACTION_ROLLBACK'.p_head-statu = c_red .p_head-message = '执行失败,执行删除操作失败!'.LOOP AT lt_return_del INTO DATA(ls_return_del) WHERE type = 'E' OR type = 'A'.p_head-message =COND #( WHEN p_head-message = space THEN ls_return_del-messageELSE |{ p_head-message }/{ ls_return_del-message }| ).ENDLOOP.EXIT.ELSE.CALL FUNCTION 'BAPI_QUALNOT_SAVE'EXPORTINGnumber = pv_qmnumTABLESreturn = lt_return_save.IF line_exists( lt_return_save[ type = 'E' ] ) OR line_exists( lt_return_save[ type = 'A' ] ).CALL FUNCTION 'BAPI_TRANSACTION_ROLLBACK'.p_head-statu = c_red .p_head-message = '执行失败,执行删除操作失败!'.LOOP AT lt_return_save INTO DATA(ls_return_save) WHERE type = 'E' OR type = 'A'.p_head-message =COND #( WHEN p_head-message = space THEN ls_return_save-messageELSE |{ p_head-message }/{ ls_return_save-message }| ).ENDLOOP.EXIT.ELSE.CALL FUNCTION 'BAPI_TRANSACTION_COMMIT'EXPORTINGwait = 'X'.ENDIF.ENDIF.ELSE.p_head-statu = c_red .p_head-message = '执行失败,执行删除操作失败!'.LOOP AT lt_return INTO DATA(ls_return) WHERE type = 'E' OR type = 'A'.p_head-message =COND #( WHEN p_head-message = space THEN ls_return-messageELSE |{ p_head-message }/{ ls_return-message }| ).ENDLOOP.EXIT.ENDIF.ENDFORM.
本文来自互联网用户投稿,文章观点仅代表作者本人,不代表本站立场,不承担相关法律责任。如若转载,请注明出处。 如若内容造成侵权/违法违规/事实不符,请点击【内容举报】进行投诉反馈!
