前面的部分链接为:
BP客户增强-详细
BP客户增强说明
该部分介绍在BP客户界面保存时增加一个校验事件 DCHCK
首先我们对于前面的增强做一个限制:
1.BP界面合作商类型字段为10,20,30时,才能维护合作商,99或为空时不允许维护;否则报错”当前合作商类型不允许维护合作商LIST”
2.BP界面合作商类型有值且不为99或空时,可以维护合作商LIST,合作商类型需要和BP界面的合作商类型一致;否则报错”存在合作商LIST的合作商类型和BP界面的合作商类型不一致”
1.创建保存前检查校验的函数
这时我们需要使用到事件(BUS7)-DCHCK;
在该事件中维护函数:
在函数组ZBP_FG_ENHENCEMENT中创建DCHCK函数(ZBP_BUPA_EVENT_DCHCK):
在BP事件中,可以使用BUS_MESSAGE_STORE函数来把你所想要报错的消息存储起来,当保存时,会去检测,有E类型错误时,不准保存。
FUNCTION zbp_bupa_event_dchck. *"---------------------------------------------------------------------- *"*"本地接口: *"---------------------------------------------------------------------- *参考:BUP_BUPA_EVENT_DCHCK 创建 DATA lt_knb1 TYPE TABLE OF knb1. *获取目前界面数据 cvi_bdt_adapter=>get_current_bp_cc_data( EXPORTING i_table_name = table_name_knb1 IMPORTING e_data_table = lt_knb1[] ). CHECK lt_knb1[] IS NOT INITIAL. READ TABLE lt_knb1 INTO DATA(ls_knb1) INDEX 1.
DATA(lv_corporate_type) = ls_knb1-corporate_type.
"1.BP界面合作商类型字段为10,20,30时,才能维护合作商,99或为空时不允许维护; IF ( lv_corporate_type IS INITIAL OR lv_corporate_type = '99' ) AND ls_knb1-maintain_corpo = abap_on. "调用BUS_MESSAGE_STORE 来写入报错信息 CALL FUNCTION 'BUS_MESSAGE_STORE' EXPORTING arbgb = 'ZBP' msgty = 'E' txtnr = 001. ELSE. "2.2.BP界面合作商类型有值且不为99或空时,可以维护合作商LIST,合作商类型需要和BP界面的合作商类型一致 LOOP AT gt_ztbp001_info_buf[] TRANSPORTING NO FIELDS WHERE corporate_type NE lv_corporate_type. "调用BUS_MESSAGE_STORE 来写入报错信息 CALL FUNCTION 'BUS_MESSAGE_STORE' EXPORTING arbgb = 'ZBP' msgty = 'E' txtnr = 002. EXIT. ENDLOOP. ENDIF.
ENDFUNCTION.
|
2.执行效果
当我们修改LIST内和BP界面合作商不一致时,然后保存数据
BP会报错:
然后我们修改BP界面合作商类型为99
点击保存:
更多ABAP/SAP资料可以关注我的公众号谢谢。