自定义选项卡未反映在ME21N和ME22N BADI创建中

2020-08-14 15:01发布

         点击此处--->   EasySAP.com群内免费提供SAP练习系统(在群公告中)

加入QQ群:457200227(SAP S4 HANA技术交流) 群内免费提供SAP练习系统(在群公告中)


你好朋友

对于使用badi的me21n交易,我需要在PO标头中创建带有客户字段的新标签页。

我已经使用模块池为ME_GUI_PO_CUST和屏幕创建了badi实现。 我可以在me23n中显示带有客户字段的自定义标签,但ME21N和ME22N交易中不会显示该标签。

如何在ME21N事务中显示带有字段的选项卡?

此致

Rushikesh

感谢进阶..!

         点击此处--->   EasySAP.com群内免费提供SAP练习系统(在群公告中)

加入QQ群:457200227(SAP S4 HANA技术交流) 群内免费提供SAP练习系统(在群公告中)


你好朋友

对于使用badi的me21n交易,我需要在PO标头中创建带有客户字段的新标签页。

我已经使用模块池为ME_GUI_PO_CUST和屏幕创建了badi实现。 我可以在me23n中显示带有客户字段的自定义标签,但ME21N和ME22N交易中不会显示该标签。

如何在ME21N事务中显示带有字段的选项卡?

此致

Rushikesh

感谢进阶..!

付费偷看设置
发送
4条回答
Cikesha
1楼-- · 2020-08-14 15:38

嗨,

也许看看下面的教程,看看是否实现了所有必需的方法:

http://saptechnical.com/Tutorials/ExitsBADIs/ME21N/Index.htm

如果仍然无法正常工作,请尝试在以下情况下调试SUBSCRIBE方法

最好的问候,

Geert-Jan Klaps

jovirus
2楼-- · 2020-08-14 15:23

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时,它显示一个错误,指出"尚未分配字段符号"。

此致

Rushikesh

callcenter油条
3楼-- · 2020-08-14 15:25

嗨,

尝试使用BADI ME_PROCESS_PO_CUST可以解决此要求。

SAP德到
4楼-- · 2020-08-14 15:46

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。

此致

Rushikesh

一周热门 更多>