如何在事务VL03n中仅为dsiplay制作自定义字段

2020-09-15 11:10发布

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

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


专家,

根据我们的要求,我通过使用badi 'LE_SHP_TAB_CUST_HEAD'和FM在事务 VL01N 的标题中添加了新标签。

现在我面临一个问题,尽管我正在事务 VL02N VL03N中转向显示模式,但是自定义字段仍然可以更改。

为解决此问题,我在输出中添加了以下代码,但仍然存在相同的问题,对于解决此问题的任何建议和指导将不胜感激。

 FUNCTION zz_output。

 *" ------------------------------------------------  ---------------------
 *" *" Lokale Schnittstelle:

 *"正在导入

 *" REFERENCE(IS_LIKP)TYPE LIKP

 *" ------------------------------------------------  ---------------------
   gv_field = is_likp-zfield。

 如果sy-tcode ='VL03N'。
   环视屏幕。
     IF SCREEN-NAME ='9000'。"我已经定义的子屏幕。
       屏幕输入= 0。
       修改屏幕。
     万一。
   结局。
 万一。
 结束功能。


 

致谢

珍妮

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

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


专家,

根据我们的要求,我通过使用badi 'LE_SHP_TAB_CUST_HEAD'和FM在事务 VL01N 的标题中添加了新标签。

现在我面临一个问题,尽管我正在事务 VL02N VL03N中转向显示模式,但是自定义字段仍然可以更改。

为解决此问题,我在输出中添加了以下代码,但仍然存在相同的问题,对于解决此问题的任何建议和指导将不胜感激。

 FUNCTION zz_output。

 *" ------------------------------------------------  ---------------------
 *" *" Lokale Schnittstelle:

 *"正在导入

 *" REFERENCE(IS_LIKP)TYPE LIKP

 *" ------------------------------------------------  ---------------------
   gv_field = is_likp-zfield。

 如果sy-tcode ='VL03N'。
   环视屏幕。
     IF SCREEN-NAME ='9000'。"我已经定义的子屏幕。
       屏幕输入= 0。
       修改屏幕。
     万一。
   结局。
 万一。
 结束功能。


 

致谢

珍妮

付费偷看设置
发送
9条回答
土豆飞人
1楼 · 2020-09-15 11:28.采纳回答

Raymond嗨,非常感谢您的支持和耐心。

已通过将子屏幕名称替换为我已经创建的字段名称" zfieldl"来解决此问题。

致谢。

Jenie

愤怒的猪头君
2楼-- · 2020-09-15 11:22

现在设置两个断点,在FM中设置一个断点,在PBO中设置第二个断点,并检查字段的值。

哎,真难
3楼-- · 2020-09-15 11:38

不要使用SY-TCODE,请使用在ACTIVATE_TAB_PAGE,TRANSFER_DATA_TO/FROM_SUBSCREEN方法中接收到的IF_TRTYP"交易类型"参数。 转移并保存显示的值到处理dynpro的程序中,请检查PBO逻辑中Domain TRTYP中的值以停用输入。

Cikesha
4楼-- · 2020-09-15 11:29

我不确定tstat指的是什么。 您是从标准代码中找到的一些代码示例中获得此信息的吗?

我昨天所做的只是在T180-AKTYP上放置一个监视点,我发现在切换显示和更改VL02N之后,它已更改。

现在,我无法检查系统是否确实发生了此更改,但是您应该可以自己看到。 关于此ACTVT,我无法确定是否可以覆盖它。

能不能别闹
5楼-- · 2020-09-15 11:27

为什么要对交易代码进行硬编码?

您为什么不像SAP在许多程序中那样使用T180-AKTYP来检查创建/更改/显示模式?

不同于SY-TCODE,当您在VL02N中从编辑模式切换到显示模式时,AKTYP从V变为A,从而省去了同时添加VL02,VL03,Z *,Y *等的麻烦。

哎,真难
6楼-- · 2020-09-15 11:40

很抱歉,我之前的回复不太清楚。 想法是模仿按下"显示/更改"按钮时标准输入字段的行为,以使VL02N和VL03N的行为保持一致。

以下是我认为应该执行的步骤。

  1. 创建一个新的Z功能组。 在函数组的顶部include中,声明XFELD类型的GV_ENABLE_INPUT变量(如果系统允许,则为ABAP_BOOL)。 在功能组中,创建三个功能模块SET_ENABLE_INPUT,该模块将使用导入参数并将其设置为GV_ENABLE_INPUT。 TOGGLE_ENABLE_INPUT,每次调用时简单地切换GV_ENABLE_INPUT的值(从'X'到空格,反之亦然),以及GET_ENABLE_INPUT。 它返回GV_ENABLE_INPUT的值作为导出参数。 (此方法的面向对象版本是创建一个具有私有属性和三个方法的单例类)
  2. 在方法ACTIVATE_TAB_PAGE中,取决于IF_TRTYP,根据显示或编辑模式,通过传递适当的值(X或空格)来调用SET_ENABLE_INPUT。
  3. 在方法PASS_FCODE_TO_SUBSCREEN中,检查接收到的功能代码是否与"显示/更改"按钮相对应(通过调试查找功能代码)。 如果已按下"显示/更改"按钮,请在该方法中调用TOGGLE_ENABLE_INPUT。
  4. 在子屏幕的PBO中,调用GET_ENABLE_INPUT。 如果返回的值是'X',则将SCREEN-INPUT设置为1,否则将其设置为0(请注意,ABAP 7.40及更高版本中LOOP AT SCREEN的建议语法已更改。请参见此处或参阅SAP系统的ABAP文档)。/li>
野沐沐
7楼-- · 2020-09-15 11:19

另一种方法是

  1. 维护一个标志变量(类型XFELD或ABAP_BOOL),该变量决定字段是可编辑的还是只读的。 这将从类中进行设置,并在子屏幕PBO中读取,以将字段设置为只读或可编辑。 可以使用GET SET功能模块对或单例类来完成。
  2. 如Raymond所述,请使用IF_TRTYP在交易开始时设置此变量的初始值。
  3. 使用PASS_FCODE_TO_SUBSCREEN检测是否已按下"显示/更改"按钮并切换该标志。

一周热门 更多>