2020-08-14 15:01发布
加入QQ群:457200227(SAP S4 HANA技术交流) 群内免费提供SAP练习系统(在群公告中)
你好朋友
对于使用badi的me21n交易,我需要在PO标头中创建带有客户字段的新标签页。
我已经使用模块池为ME_GUI_PO_CUST和屏幕创建了badi实现。 我可以在me23n中显示带有客户字段的自定义标签,但ME21N和ME22N交易中不会显示该标签。
如何在ME21N事务中显示带有字段的选项卡?
此致
Rushikesh
感谢进阶..!
嗨,
也许看看下面的教程,看看是否实现了所有必需的方法:
http://saptechnical.com/Tutorials/ExitsBADIs/ME21N/Index.htm
如果仍然无法正常工作,请尝试在以下情况下调试SUBSCRIBE方法
最好的问候,
Geert-Jan Klaps
Hi Geert
感谢您的宝贵时间...我已经用过了,但是当我单击"创建/更改模式"时它仍然不会显示..仅在显示模式下显示...下面是我的代码,请告诉我 错过了。。
方法IF_EX_ME_GUI_PO_CUST〜SUBSCRIBE。数据:ls_subscriber就像re_subscribers的行一样。 *我们想在Header选项卡上添加一个客户子屏幕。 CHECK im_application ='PO'。 CHECK im_element = 'HEADER'。 * re_subscribers中的每一行都会生成一个子屏幕。 在此示例中,我们添加了一个子屏幕。 CLEAR re_subscribers []。 *名称是子屏幕的唯一标识符,并在该类定义中定义。 ls_subscriber-name = subscreen1。 * dynpro编号 可以使用 ls_subscriber-dynpro ='0100'。 *可以找到dynpro的程序 ls_subscriber-program ='ZME_GUI_PO_CUST_SCREEN2'。 *每个子屏幕都需要自己的DDIC结构 > ls_subscriber-struct_name ='CI_EKKODB'。 *可以定义标签 ls_subscriber-label ='客户标签'。 *可以定义tabstrib中的位置 * ls_subscriber-position = 13. *可以在此处定义屏幕的高度。 当前,我们支持两种屏幕尺寸: *值<= 7辅助线子屏幕 *值> 7 16线子屏幕 * ls_subscriber-height =7。附加ls_subscriber到re_subscribers。结束方法。
*************************************************** **************************************
方法IF_EX_ME_GUI_PO_CUST〜MAP_DYNPRO_FIELDS。字段符号:类似于ch_mapping的行。在ch_mapping ASSIGNING 处循环。 CASE 字段名称。何时ZDATE '。 -metafield = mmmfd_cust_03。 ENDCASE。 ENDLOOP。
结束方法。
方法IF_EX_ME_GUI_PO_CUST〜TRANSPORT_FROM_MODEL。数据:l_header类型对if_purchase_order_mm的引用, ls_mepoheader类型mepoheader, ls_customer类型CI_EKKODB。 * ------------- -------------------------------------------------- ----- * *系统要求将数据从业务逻辑传输到视图中 * ------------------------ -------------------------------------------- * 案例im_name 。当subscreen1。 *是标题时? im_model可以是标头或项目。 mmpur_dynamic_cast l_header im_model。请勿检查l_header是INITIAL。 *传输标准字段 ls_mepoheader = l_header-> get_data()。 *存储信息以备后用。 使用将ls_mepoheader移动到dynp_data_pbo。在其他情况下。 * ... 结束。
方法IF_EX_ME_GUI_PO_CUST〜TRANSPORT_TO_DYNP。 CASE im_name。子屏幕1.时通话功能'Y_MM_MEPOBADI_PUSH'导出 im_dynp_data = dynp_data_pbo。
方法IF_EX_ME_GUI_PO_CUST〜TRANSPORT_FROM_DYNP。 CASE im_name。子屏幕1. 调用功能'Y_MM_MEPOBADI_POP'导入 ex_dynp_data = dynp_data_pai。 *发生了某些变化,因此我们必须通知框架 *将数据传输到模型中。 re_changed = mmpur_yes。 ENDIF。其他时使用。 ENDCASE。
方法。
*************************************************** ******************************************************
方法IF_EX_ME_GUI_PO_CUST〜TRANSPORT_TO_MODEL。数据:l_header TYPE REF to if_purchase_order_mm, ls_mepoheader TYPE mepoheader, ls_customer TYPE CI_EKKODB, l_po_header_hand_le -------------------------------------------------- -------------- * *数据必须传输到业务逻辑 * ------------------- ------------------------------------------------- * 案例im_name。子屏幕1. *是项目吗? im_model可以是标头或项目。 mmpur_dynamic_cast l_header im_model。不检查l_header是INITIAL。 ls_mepoheader = l_header-> get_data()。 *标准字段是否已更改?如果dynp_data_pbo-zdate NE dynp_data_pai-zdate。 *或dynp_data_pbo-zzproject NE dynp_data_pai-zzproject。 *更新标准字段 ls_mepoheader-zdate = dynp_data_pai-zdate。 * ls_mepoheader-zzdata = d。 >呼叫方法l_header-> set_data 导出 im_data = ls_mepoheader。 ENDIF。当其他人使用时。 ENDCASE。终止方法。
方法IF_EX_ME_PROCESS_PO_CUST〜FIELDSELECTION_HEADER。数据:l_persistent TYPE mmpur_bool, l_changeable TYPE mmpur_bool。 FIELD-SYMBOLS:类似于ch_fieldselection的LINE字段。 *如果该项为*。 数据库,我们不允许更改字段badi_bsgru l_persistent = im_header-> is_persistent()。 l_changeable = im_header-> is_changeable()。 *如果l_persistent EQ mmpur_yes。读取表ch_fields选择分配 > WITH TABLE KEY metafield = mmmfd_cust_01。如果sy-subrc是INITIAL。如果l_changeable ='X'。 -fieldstatus ='。'。 "准备输入 ELSE。 -fieldstatus ='*'。"视图 endif。 else。 -fieldstatus ='-'。 " SUPRESS IT ENDIF。 endmethod。
当我尝试执行ME21N时,它显示一个错误,指出"尚未分配字段符号"。
尝试使用BADI ME_PROCESS_PO_CUST可以解决此要求。
Hi Abinath,
感谢您的评论...我已经使用了它,但是它仍然不会影响ME21N上的内容
请参阅我的代码,请告诉我我该做些什么。
方法IF_EX_ME_PROCESS_PO_CUST〜FIELDSELECTION_HEADER。数据:l_persistent TYPE mmpur_bool, l_changeable TYPE mmpur_bool。 FIELD-SYMBOLS:类似于ch_fieldselection的行。 该项目已经在数据库中,我们不允许更改字段badi_bsgru l_persistent = im_header-> is_persistent()。 l_changeable = im_header-> is_changeable()。 *如果l_persistent EQ mmpur_yes。 通过表键元字段= mmmfd_cust_01读取表ch_fieldselection分配。 如果sy-subrc是INITIAL。如果l_changeable ='X'。 - fieldstatus ='。'。 "准备输入 ELSE。 -fieldstatus ='*'。"视图 endif。 else。 -fieldstatus ='-'。 " SUPRESS IT ENDIF。 endmethod。
最多设置5个标签!
嗨,
也许看看下面的教程,看看是否实现了所有必需的方法:
http://saptechnical.com/Tutorials/ExitsBADIs/ME21N/Index.htm
如果仍然无法正常工作,请尝试在以下情况下调试SUBSCRIBE方法
最好的问候,
Geert-Jan Klaps
Hi Geert
感谢您的宝贵时间...我已经用过了,但是当我单击"创建/更改模式"时它仍然不会显示..仅在显示模式下显示...下面是我的代码,请告诉我 错过了。。
方法IF_EX_ME_GUI_PO_CUST〜SUBSCRIBE。
数据:ls_subscriber就像re_subscribers的行一样。
*我们想在Header选项卡上添加一个客户子屏幕。
CHECK im_application ='PO'。
CHECK im_element = 'HEADER'。
* re_subscribers中的每一行都会生成一个子屏幕。 在此示例中,我们添加了一个子屏幕。
CLEAR re_subscribers []。
*名称是子屏幕的唯一标识符,并在该类定义中定义。
ls_subscriber-name = subscreen1。
* dynpro编号 可以使用
ls_subscriber-dynpro ='0100'。
*可以找到dynpro的程序
ls_subscriber-program ='ZME_GUI_PO_CUST_SCREEN2'。
*每个子屏幕都需要自己的DDIC结构
> ls_subscriber-struct_name ='CI_EKKODB'。
*可以定义标签
ls_subscriber-label ='客户标签'。
*可以定义tabstrib中的位置
* ls_subscriber-position = 13.
*可以在此处定义屏幕的高度。 当前,我们支持两种屏幕尺寸:
*值<= 7辅助线子屏幕
*值> 7 16线子屏幕
* ls_subscriber-height =7。
附加ls_subscriber到re_subscribers。
结束方法。
*************************************************** **************************************
方法IF_EX_ME_GUI_PO_CUST〜MAP_DYNPRO_FIELDS。类似于ch_mapping的行。处循环。字段名称。 -metafield = mmmfd_cust_03。
字段符号:
在ch_mapping ASSIGNING
CASE
何时ZDATE '。
ENDCASE。
ENDLOOP。
结束方法。
********************************************* ****************************************************** *****方法IF_EX_ME_GUI_PO_CUST〜TRANSPORT_FROM_MODEL。
数据:l_header类型对if_purchase_order_mm的引用,
ls_mepoheader类型mepoheader,
ls_customer类型CI_EKKODB。
* ------------- -------------------------------------------------- ----- *
*系统要求将数据从业务逻辑传输到视图中
* ------------------------ -------------------------------------------- *
案例im_name 。
当subscreen1。
*是标题时? im_model可以是标头或项目。
mmpur_dynamic_cast l_header im_model。
请勿检查l_header是INITIAL。
*传输标准字段
ls_mepoheader = l_header-> get_data()。
*存储信息以备后用。 使用
将ls_mepoheader移动到dynp_data_pbo。
在其他情况下。
* ...
结束。
结束方法。
********************************************* ****************************************************** *****方法IF_EX_ME_GUI_PO_CUST〜TRANSPORT_TO_DYNP。
CASE im_name。
子屏幕1.时
通话功能'Y_MM_MEPOBADI_PUSH'
导出
im_dynp_data = dynp_data_pbo。
结束方法。
********************************************* ****************************************************** *****方法IF_EX_ME_GUI_PO_CUST〜TRANSPORT_FROM_DYNP。
CASE im_name。
子屏幕1.
调用功能'Y_MM_MEPOBADI_POP'
导入
ex_dynp_data = dynp_data_pai。
*发生了某些变化,因此我们必须通知框架
*将数据传输到模型中。
re_changed = mmpur_yes。
ENDIF。
其他时使用。
ENDCASE。
方法。
*************************************************** ******************************************************
方法IF_EX_ME_GUI_PO_CUST〜TRANSPORT_TO_MODEL。
数据:l_header TYPE REF to if_purchase_order_mm,
ls_mepoheader TYPE mepoheader,
ls_customer TYPE CI_EKKODB,
l_po_header_hand_le -------------------------------------------------- -------------- *
*数据必须传输到业务逻辑
* ------------------- ------------------------------------------------- *
案例im_name。
子屏幕1.
*是项目吗? im_model可以是标头或项目。
mmpur_dynamic_cast l_header im_model。
不检查l_header是INITIAL。
ls_mepoheader = l_header-> get_data()。
*标准字段是否已更改?
如果dynp_data_pbo-zdate NE dynp_data_pai-zdate。
*或dynp_data_pbo-zzproject NE dynp_data_pai-zzproject。
*更新标准字段
ls_mepoheader-zdate = dynp_data_pai-zdate。
* ls_mepoheader-zzdata = d。 >呼叫方法l_header-> set_data
导出
im_data = ls_mepoheader。
ENDIF。
当其他人使用时。
ENDCASE。
终止方法。
*************************************************** ******************************************************
方法IF_EX_ME_PROCESS_PO_CUST〜FIELDSELECTION_HEADER。类似于ch_fieldselection的LINE字段。读取表ch_fields选择分配 > WITH TABLE KEY metafield = mmmfd_cust_01。
-fieldstatus ='。'。 "准备输入
-fieldstatus ='*'。"视图
-fieldstatus ='-'。 " SUPRESS IT
数据:l_persistent TYPE mmpur_bool,
l_changeable TYPE mmpur_bool。
FIELD-SYMBOLS:
*如果该项为*。 数据库,我们不允许更改字段badi_bsgru
l_persistent = im_header-> is_persistent()。
l_changeable = im_header-> is_changeable()。
*如果l_persistent EQ mmpur_yes。
如果sy-subrc是INITIAL。
如果l_changeable ='X'。
ELSE。
endif。
else。
ENDIF。
endmethod。
当我尝试执行ME21N时,它显示一个错误,指出"尚未分配字段符号"。
此致
Rushikesh
嗨,
尝试使用BADI ME_PROCESS_PO_CUST可以解决此要求。
Hi Abinath,
感谢您的评论...我已经使用了它,但是它仍然不会影响ME21N上的内容
请参阅我的代码,请告诉我我该做些什么。
方法IF_EX_ME_PROCESS_PO_CUST〜FIELDSELECTION_HEADER。
类似于ch_fieldselection的行。
。
- fieldstatus ='。'。 "准备输入
-fieldstatus ='*'。"视图
-fieldstatus ='-'。 " SUPRESS IT
数据:l_persistent TYPE mmpur_bool,
l_changeable TYPE mmpur_bool。
FIELD-SYMBOLS:
该项目已经在数据库中,我们不允许更改字段badi_bsgru
l_persistent = im_header-> is_persistent()。
l_changeable = im_header-> is_changeable()。
*如果l_persistent EQ mmpur_yes。
通过表键元字段= mmmfd_cust_01读取表ch_fieldselection分配
如果sy-subrc是INITIAL。
如果l_changeable ='X'。
ELSE。
endif。
else。
ENDIF。
endmethod。
此致
Rushikesh
一周热门 更多>