1.效果

增强数据保存到QALS表的ZZREASON

2.增强点:QEVA_SUBSCREEN_1101
2.1 filter

2.2 增强子屏幕和函数组
需要创建个函数组ZQMFG01,来托管子屏幕以及处理屏幕数据和标准程序主程序数据之间的传递
增强结构CI_QALS

函数组top全局变量定义
TABLES: qals_cust.
DATA: subscr_1101_qeva TYPE REF TO if_ex_qeva_subscreen_1101,
gs_qals TYPE qals,
flt_val TYPE qherk,
gs_rqeva TYPE rqeva.


增强屏幕逻辑流代码
PROCESS BEFORE OUTPUT.
MODULE status_9001.
PROCESS AFTER INPUT.
FIELD qals_cust-zzreason MODULE mod_check_zzreason.
MODULE user_command_9001.
增强屏幕PBO代码
*----------------------------------------------------------------------*
***INCLUDE LZQMFG01O01.
*----------------------------------------------------------------------*
*&---------------------------------------------------------------------*
*& Module STATUS_9001 OUTPUT
*&---------------------------------------------------------------------*
*&
*&---------------------------------------------------------------------*
MODULE status_9001 OUTPUT.
IF subscr_1101_qeva IS INITIAL.
CALL METHOD cl_exithandler=>get_instance_for_subscreens
CHANGING
instance = subscr_1101_qeva " Instance
EXCEPTIONS
no_reference = 1
no_interface_reference = 2
no_exit_interface = 3
data_incons_in_exit_managem = 4
class_not_implement_interface = 5
OTHERS = 6.
IF sy-subrc <> 0.
MESSAGE ID sy-msgid TYPE sy-msgty NUMBER sy-msgno
WITH sy-msgv1 sy-msgv2 sy-msgv3 sy-msgv4.
ENDIF.
ENDIF.
PERFORM frm_modify_screen.
ENDMODULE.
增强屏幕PAI代码
我的需求是决策代码输入03 退货供应商时,原因必填。可以用增强点SMOD:EXIT_SAPMQEVA_010实现检查。但EXIT_SAPMQEVA_010里报E消息,屏幕所有字段灰色不能输入,并不友好。故这里选择在增强9001屏幕的PAI,写个module检查

*----------------------------------------------------------------------*
***INCLUDE LZQMFG01I01.
*----------------------------------------------------------------------*
*&---------------------------------------------------------------------*
*& Module USER_COMMAND_9001 INPUT
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
MODULE user_command_9001 INPUT.
MOVE-CORRESPONDING qals_cust TO gs_qals.
IF subscr_1101_qeva IS NOT INITIAL .
CALL METHOD subscr_1101_qeva->get_data
EXPORTING
flt_val = flt_val " Inspection Lot Origin
IMPORTING
e_qals = gs_qals. " Inspection Lot Record
ENDIF .
ENDMODULE.
*&---------------------------------------------------------------------*
*& Module MOD_CHECK_ZZREASON INPUT
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
MODULE mod_check_zzreason INPUT.
PERFORM frm_check_zzreason.
ENDMODULE.
FORM代码
*----------------------------------------------------------------------*
***INCLUDE LZQMFG01F01.
*----------------------------------------------------------------------*
*&---------------------------------------------------------------------*
*& Form FRM_CHECK_ZZREASON
*&---------------------------------------------------------------------*
*& text
*&---------------------------------------------------------------------*
*& --> p1 text
*& <-- p2 text
*&---------------------------------------------------------------------*
FORM frm_check_zzreason .
FIELD-SYMBOLS <fs_rqeva> TYPE rqeva.
ASSIGN ('(SAPMQEVA)RQEVA') TO <fs_rqeva>.
CHECK sy-subrc = 0.
IF <fs_rqeva>-vcodegrp = 'IQCUD'
AND <fs_rqeva>-vcode = '03' "退供应商,要求填写原因
AND qals_cust-zzreason IS INITIAL.
MESSAGE e000(zqm001).
ENDIF.
ENDFORM.
*&---------------------------------------------------------------------*
*& Form FRM_MODIFY_SCREEN
*&---------------------------------------------------------------------*
*& text
*&---------------------------------------------------------------------*
*& --> p1 text
*& <-- p2 text
*&---------------------------------------------------------------------*
FORM frm_modify_screen .
ASSIGN ('(SAPMQEVA)G_T185F_AKTI') TO FIELD-SYMBOL(<fs_akti>).
IF sy-subrc = 0 AND <fs_akti> = 'A'.
LOOP AT SCREEN.
IF screen-name+0(12) = 'QALS_CUST-ZZ'.
screen-input = 0.
MODIFY SCREEN.
ENDIF.
ENDLOOP.
ENDIF.
ENDFORM.
PBO的函数,作用:主程序数据传给屏幕
FUNCTION zqm_put_qa11_data.
*"----------------------------------------------------------------------
*"*"本地接口:
*" IMPORTING
*" REFERENCE(I_QALS) TYPE QALS
*" REFERENCE(I_QHERK) TYPE QHERK
*" REFERENCE(I_RQEVA) TYPE RQEVA
*"----------------------------------------------------------------------
CLEAR: gs_rqeva.
MOVE-CORRESPONDING i_qals TO qals_cust.
MOVE-CORRESPONDING i_rqeva TO gs_rqeva.
flt_val = i_qherk.
ENDFUNCTION.
PAI的函数,作用:屏幕数据传给主程序
FUNCTION zqm_get_qa11_data.
*"----------------------------------------------------------------------
*"*"本地接口:
*" EXPORTING
*" REFERENCE(E_QALS) TYPE QALS
*" REFERENCE(E_RQEVA) TYPE RQEVA
*"----------------------------------------------------------------------
* 屏幕数据传递到主程序
MOVE-CORRESPONDING gs_qals TO e_qals.
MOVE-CORRESPONDING gs_rqeva TO e_rqeva.
ENDFUNCTION.
3.BADI实施类
ZCL_IM_QEVA_SUBSCREEN_1101

实施方法GET_DATA和PUT_DATA
METHOD if_ex_qeva_subscreen_1101~get_data.
DATA: program_name TYPE string VALUE '(SAPMQEVA)QALS',
infos TYPE ci_qals,
cust TYPE ci_qals.
FIELD-SYMBOLS:<fs_info> TYPE qals .
CALL FUNCTION 'ZQM_GET_QA11_DATA'
IMPORTING
e_qals = e_qals
e_rqeva = e_rqeva.
MOVE-CORRESPONDING e_qals TO if_ex_qeva_subscreen_1101~g_qals.
ASSIGN (program_name) TO <fs_info> .
IF sy-subrc IS INITIAL.
MOVE-CORRESPONDING e_qals TO cust .
MOVE-CORRESPONDING cust TO <fs_info> .
ENDIF .
ENDMETHOD.
METHOD if_ex_qeva_subscreen_1101~put_data.
DATA: ls_qals TYPE qals.
IF if_ex_qeva_subscreen_1101~g_qals IS NOT INITIAL .
MOVE-CORRESPONDING if_ex_qeva_subscreen_1101~g_qals TO ls_qals .
ELSE.
MOVE-CORRESPONDING i_qals TO ls_qals .
ENDIF .
CALL FUNCTION 'ZQM_PUT_QA11_DATA'
EXPORTING
i_qals = ls_qals
i_qherk = flt_val
i_rqeva = i_rqeva.
ENDMETHOD.

1035

被折叠的 条评论
为什么被折叠?



