通过CL_ABAP_SYST获取交易代码

2020-09-07 15:21发布

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

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


大家好,

使用类CL_ABAP_SYST及其方法GET_TRANSACTION_CODE时遇到问题。 根据方法文档,它应该返回用户显式调用的最后一个事务。 因此,如果我调用我的ZYX事务,并从那里通过语句CALL TRANSACTION我的ZXY事务,则在两种情况下该方法都应返回第一个事务,即ZYX,而SY-TCODE在CALL TRANSACTION之前的值为ZYX,在之后为ZXY。

但是它不起作用! 无论是显式调用还是隐式调用(即通过CALL TRANSACTION或LEAVE TO TRANSACTION),该方法始终返回最后一笔交易的值。 甚至方法文档中的示例也不起作用。 我可以观察到的唯一区别是带有参数的事务。 在这种情况下,该方法返回被调用的事务,而SY-TCODE等于原始事务(最佳示例:在SE80中直接执行报表-该方法返回SE80,但是SY-TCODE等于SEU_INT,因为SE80是一个 具有SEU_INT参数的交易)。

所以问题是:我是否缺少某些东西,做错了什么? 我在以下系统中尝试过:7.00 SP28、7.31 SP09和7.53。

这是代码:

 WRITE:/sy-tcode。
 写:/cl_abap_syst => get_transaction_code()。

 如果sy-tcode ='ZXY'。
   返回。
 万一。

 呼叫交易" ZXY"。

任何线索或建议,我将不胜感激。

最好的问候

Michał

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

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


大家好,

使用类CL_ABAP_SYST及其方法GET_TRANSACTION_CODE时遇到问题。 根据方法文档,它应该返回用户显式调用的最后一个事务。 因此,如果我调用我的ZYX事务,并从那里通过语句CALL TRANSACTION我的ZXY事务,则在两种情况下该方法都应返回第一个事务,即ZYX,而SY-TCODE在CALL TRANSACTION之前的值为ZYX,在之后为ZXY。

但是它不起作用! 无论是显式调用还是隐式调用(即通过CALL TRANSACTION或LEAVE TO TRANSACTION),该方法始终返回最后一笔交易的值。 甚至方法文档中的示例也不起作用。 我可以观察到的唯一区别是带有参数的事务。 在这种情况下,该方法返回被调用的事务,而SY-TCODE等于原始事务(最佳示例:在SE80中直接执行报表-该方法返回SE80,但是SY-TCODE等于SEU_INT,因为SE80是一个 具有SEU_INT参数的交易)。

所以问题是:我是否缺少某些东西,做错了什么? 我在以下系统中尝试过:7.00 SP28、7.31 SP09和7.53。

这是代码:

 WRITE:/sy-tcode。
 写:/cl_abap_syst => get_transaction_code()。

 如果sy-tcode ='ZXY'。
   返回。
 万一。

 呼叫交易" ZXY"。

任何线索或建议,我将不胜感激。

最好的问候

Michał

付费偷看设置
发送
5条回答
樱桃小丸子0093
1楼-- · 2020-09-07 15:33

Chaouki Akir :您有一个答案,并有 Sandra Rossi ,但后来我编辑了帖子,您的答案现在消失了。 抱歉,我不知道,编辑帖子会导致答案的删除。

Nir深蓝
2楼-- · 2020-09-07 15:43

您的SE80示例与我的示例不同,其中sy-tcode = SEU_INT并且方法返回SE80(这是

我只是想知道,我以为调用事务或离开事务也是一种显式的调用事务的方法...

Aaron 3364
3楼-- · 2020-09-07 15:35

< rel =" nofollow" hraf=" https://people.sap.com/raymond.giuseppi">雷蒙德·朱塞佩:谢谢您的评论和提示-我不确定,是否知道这一点 类。 但是,您命名的方法的结果始终与其他方法的结果相同。 除了还有更多原因,为什么我更喜欢使用CL_ABAP_SYST类:

  1. CL_ABAP_SYST的程序状态为系统程序。 CL_DYNPRO是未分类。 我不确定该程序的状态是什么,但我想系统程序是为客户发布的,而不是 Unclassified 。
  2. CL_DYNPRO类中的方法调用系统函数。 但是此语句的文档说,如果可能的话,应改用内核方法。 CL_ABAP_SYST类中的方法是内核方法。
  3. 大多数内核方法可能比系统功能更快。 而且CL_DYNPRO也具有CLASS_CONSTRUCTOR,它将被执行。 在我的测试中,使用CL_DYNPRO的时间是使用CL_ABAP_SYST的两倍。

Sandra Rossi :谢谢您的评论。 帖子中实际上有两个问题:

  1. 该方法的文档正确无误,或者做错了吗?
  2. 如果该方法无法正常运行,那么可以通过其他方法来实现此目标吗?

Quynh Doan Manh :谢谢您的评论—您是对的,有一个错误 在我的帖子中。 我会纠正的。 好的,在这种情况下,该方法比SY-TCODE更好(因为因为可以操纵SY-TCODE,所以它总是如此)。 关于事务的显式调用的意思是用户在命令字段中键入代码或从菜单中调用事务。 代码中的语句不是由于用户操作而直接执行的-这就是为什么我将其隐式命名。

太Q了
4楼-- · 2020-09-07 15:38

CL_DYNPRO => GET_CURRENT_TRANSACTION可被视为已释放,因为SAP注释中已提及 617930-新声明保留当前交易

1。 您只是不太了解文档/文档不清楚。 雷蒙德很好地解释了它是如何工作的。 您还可以阅读注释617930(如果您接受CL_ABAP_SYST => GET_TRANSACTION_CODE与CL_DYNPRO => GET_CURRENT_TRANSACTION具有相同的作用)。

2。 正如我所说:"要获得用户运行的交易代码,我认为必须对SAP Easy Access进行增强或修改。或者在某处进行C调用..."

昵称总是被占用
5楼-- · 2020-09-07 15:26
# p #

我删除了我的答案,因为它不相关。 似乎该方法未按文档中所述运行。 也许您可以尝试打开SAP的票证,并要求他们澄清文档。

一周热门 更多>