隐式增强点不在呼叫事务VF01中执行

2020-08-19 02:50发布

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

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


嗨。

我们创建了一个隐式增强点,用于在保存VF01交易(SD帐单)时更改某些Ztable值。

我们在RV_INVOICE_REFRESH功能模块的最后一行中创建了一个隐式增强点。

此功能模块RV_INVOICE_REFRESH在创建SD账单时,在保存标准例程之后,总是直接通过VF01事务执行,并且当我们在Z程序内部调用事务VF01命令时始终执行。

我们通过在comamnd栏中输入来执行VF01事务,我将会话断点设置为catch,我们可以对其进行调试。

但是当我们使用Call Transaction VF01命令时,相同的中断不会停止执行。

尽管没有任何条件可以调用/执行此增强功能。

我也测试了一个无限循环,但是它没有停止。
我可以在Zprogram中调用一个新的功能模块,但是我真的很想知道它。

在通过sap主屏幕或通过Call Transaction在命令栏中执行事务时,实现隐式增强点时是否有所不同?为什么?

(61.9 kB)

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

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


嗨。

我们创建了一个隐式增强点,用于在保存VF01交易(SD帐单)时更改某些Ztable值。

我们在RV_INVOICE_REFRESH功能模块的最后一行中创建了一个隐式增强点。

此功能模块RV_INVOICE_REFRESH在创建SD账单时,在保存标准例程之后,总是直接通过VF01事务执行,并且当我们在Z程序内部调用事务VF01命令时始终执行。

我们通过在comamnd栏中输入来执行VF01事务,我将会话断点设置为catch,我们可以对其进行调试。

但是当我们使用Call Transaction VF01命令时,相同的中断不会停止执行。

尽管没有任何条件可以调用/执行此增强功能。

我也测试了一个无限循环,但是它没有停止。
我可以在Zprogram中调用一个新的功能模块,但是我真的很想知道它。

在通过sap主屏幕或通过Call Transaction在命令栏中执行事务时,实现隐式增强点时是否有所不同?为什么?

(61.9 kB)
付费偷看设置
发送
5条回答
Haoba3210
1楼-- · 2020-08-19 03:45

您选择了静态(声明)还是动态(代码)增强点(根据您的第二个屏幕快照,该字段为空,因此我认为如果进行隐式增强,则该字段不为空。)

通常,如果您始终希望执行代码,则将选择静态增强。 如果希望"动态"调用它,则需要在增强实施对象的属性中应用开关设置。 当然,必须启用该开关才能使编码"处于活动状态"。

我发现静态和动态命名比声明和代码更合适。 在创建增强功能时,还请查看"信息"图标,它会为您提供与我上述相同和更多的信息。

我还没有遇到过根据这种情况选择动态隐式增强功能的情况 来自交换框架的交换。 我认为,这可能更多地用于在几个系统和具有不同开关设置的不同系统中使用的编码。

木偶小白
2楼-- · 2020-08-19 03:41

您使用了什么确切的"呼叫交易'VF01'"? (与USING,OPTIONS FROM等一起使用?)

它是否完全在相同的上下文,相同的用户,相同的服务器,相同的客户端,相同的数据等环境下运行?

暮风yp
3楼-- · 2020-08-19 03:51

嗨! 谢谢您的回答。

隐式增强的类型是我们直接在源代码中创建的(在atandard程序的开始或结束时)。

因此,我

在ABAP编辑器(ECC 6.0)的功能模块内部

单击增强按钮(Shift + F4)

该增强上的右键 在功能模块的最后一行指向点线:

在增强操作选项上下文菜单中,选择"创建实现"。

在弹出选项上选择代码(增强选项)。 。

单击"创建增强实施"按钮(F8)

增强实施新名称:zenh_test

短文本:测试

综合增强 。

点击按钮创建。

因此我们现在可以将ABAP代码放入新的增强功能和EndEnhancement中。

增强1 zenh_test。 "活动版本。

我将代码放在这里。

ENDENHANCEMENT。

""""""""""""""""""  """"""""""""""""""""""""""""""""""""""""""""""""""""""  """""""""""""""""""""""""" $" $ \ SE:(1)功能模块RV_INVOICE_REFRESH,结束
绿领巾童鞋
4楼-- · 2020-08-19 03:45

>您使用了什么"呼叫交易'VF01'"(与USING,OPTIONS FROM等一起使用?)


 表格f_bapi_criar_fat_devo。

 数据:
   gv_modo_bi类型c长度1值'N'。

   清除gv_nova_fat_devo。


   免费:gt_bdc,
         gt_messages。

   执行f_preenche_bdc使用:
           'X''SAPMV60A''0102'。
   执行f_preenche_bdc使用:
          '''KOMFK-VBELN(01)'gv_new_sales_order_devo。
   执行f_preenche_bdc使用:
          '''BDC_OKCODE''= SICH'。

   呼叫交易'VF01'
         使用gt_bdc
         模式gv_modo_bi
         将消息发送到gt_messages。

   清除gt_messages。
   使用键msgtyp ='E'读取表gt_messages。
   如果sy-subrc = 0。
     错误
     使用gv_nova_ov_devo的消息i048(zsd)。
 *显示为" E"。
     信息
     编号gt_messages-msgid
     类型" S"
     NUMBER个gt_messages-msgnr
     与gt_messages-msgv1
             gt_messages-msgv2
             gt_messages-msgv3
             gt_messages-msgv4
             显示" E"。
     停。

   其他。

     成功
     使用键msgtyp ='S'读取表gt_messages
                                     msgstr ='VF'
                                     msgnr ='311'。
     如果sy-subrc = 0。
       gv_new_bill_devo = gt_messages-msgv1。

       创建了销售订单&1和Billind文档&2
       使用gv_new sales_order_devo gv_new_bill_devo的消息s047(zsd)。

     万一。

   万一。


 ENDFORM。

>它是否完全在相同的上下文,相同的用户,相同的服务器,相同的客户端,相同的数据等环境下运行?

对于所有波纹管是肯定的。
相同 上下文,
相同用户,
相同服务器,
相同客户端,
相同数据等

我们可以通过执行标准事务VA01和VF01

我们可以从Zprogram中调用callig VA01和VF01。

骆驼绵羊
5楼-- · 2020-08-19 03:39
Glauco souza ,如果您使用答案框,则只会有一条通知发送给问题的作者,即您。 如果您想通知特定的社区成员,则必须直接评论他们的答案,或者必须在评论框中提及他们,例如 Glauco souza 。 另外,仅对问题的答案使用"答案"框,对于问题的注释或更多详细信息,请勿使用"答案"框。关于您的问题:因此,您使用了动态/代码隐式增强功能,这要求您 还要在您的增强对象的属性中设置一个开关设置,并且该开关需要打开,就像我上面已经提到的那样。与其使用动态/代码隐式增强,不如建议使用静态/声明隐式增强,因为这些 激活增强功能后始终执行。 命名代码vs声明相当令人困惑,但是只要查看一下ABAP对这两者的帮助,您就会理解。

让我知道您是否找到了解决问题的方法还是仍然存在问题。

# p#

一周热门 更多>