创建时检查存储库对象的原始语言

时间:2018-11-12 07:50:19

标签: sap abap

在我们公司中,必须使用原始语言EN创建存储库对象。 如果在ABAP存储库中创建新对象,是否可以检查登录语言?

期望的行为:

SE80-创建程序/类/数据元素/表/....

==>用户出口/ badi检查登录语言。如果不是“ EN”,则会拒绝创建。

致谢

乌马尔·阿卜杜拉

3 个答案:

答案 0 :(得分:2)

我知道这里有一个出口,但我不记得确切的名字了。您可以使用通用目的找到出口。转到SE24并打开 CL_EXITHANDLER 类,找到 GET_INSTANCE 方法并添加断点。然后开始创建项目,它将在调试器上多次暂停,尝试找到合适的项目。

答案 1 :(得分:0)

按照@mkysoft的建议,您可以在 BAdI CTS_REQUEST_CHECK 方法 CHECK_BEFORE_ADD_OBJECTS 中实施检查,该方法将在对象将要附加到对象时调用运输要求。引发异常CANCEL以使附件失败(因此也不会创建对象)。

编辑:抱歉,请忽略我的回答,如note 2150125 - Method CHECK_BEFORE_ADD_OBJECTS not triggered

中所述,“此方法未发布供客户使用”

答案 2 :(得分:0)

免责声明:绝对不建议使用此处描述的方法。

正如其他成员正确指出的那样,没有标准和客户公开的方法可以满足您的要求,但是如果您在创建过程中必须绝对启用此检查,则可以使用以下方法。除了向您提供previously offered之外,它还涉及修改SAP标准。

有一个系统BAdi CTS_TADIR_SUBSCREEN位于增强点CTS_ES_TADIR_POPUP内部。它们是SAP内部的,不能发布供客户使用,因此,后果自负。

实施过程:

步骤0 。您需要更改的第一件事是一个SAP内部使用标志,为此您需要对象访问密钥,可以从SAP或从在组织中实施该实现的SAP合作伙伴那里获得。如果您尝试实施原始状态,则此BAdi会引发错误

enter image description here

因此,在下文中,我们假设您已经在BAdi设置中选中了此复选框

enter image description here

第1步

为了实施BAdi,需要在此之前实施增强点。这是最复杂的部分,因为尽管我们禁用了内部性标记,但必须仅将SAP命名空间的增强功能存储在SAP命名空间的对象中。 SAP命名空间是指非Z,非Y和非T(测试)。这意味着要实现此增强功能,除了修改增强功能定义外,还需要创建一个名为enh.impl。的CTS_ES_TADIR,并将其保存到非Z包中,这也是您需要创建的。您的增强实现选择器应该看起来像这样

enter image description here

在上面的屏幕上,只有第二个有效,其余的Z则无效。

每个非Z对象都需要对象访问密钥,还记得吗?太糟糕了。但是,为了展示概念证明,我将继续进行。

第2步。创建enh之后。 SAP命名空间中的实现,它将建议您创建BAdi实现。此处应用相同的原理:仅SAP命名对象的SAP命名容器,因此CTS_TADIR_SUBSCREEN应该具有实现类,例如CL_TADIR_SUBSCREEN。在创建增强功能的过程中,您会看到许多警告

enter image description here

但是最后您应​​该有类似的内容,其中创建了所有以系统命名的对象,并激活了增强功能/ BAdi。

enter image description here

第3步。为了使BAdi正常运行,我们需要启用此子屏幕处理

enter image description here

在进行增强演奏时,我发现没有独立触发BAdi类,没有增强屏幕事件,因此要使其正常工作,您需要触摸屏幕100的屏幕增强功能

enter image description here

如果您不想修改屏幕元素逻辑,只需在包含SHOW_TADIR末尾的LSTRDO18对话框模块中添加虚拟增强功能

PROCESS BEFORE OUTPUT.

MODULE SHOW_TADIR. "<-- create the dummy enhancement here
CALL SUBSCREEN subs_info INCLUDING gv_badi_prog gv_badi_dynnr.

例如像我一样的声明语句

enter image description here

步骤4 。激活您创建的BAdi类,并在其中放置必要的逻辑。我无法触发方法GET_DATA_FROM_SCREEN,但是PUT_DATA_TO_SCREEN工作正常

enter image description here

如果我们根据您的要求进行此简单处理

METHOD cts_if_tadir_subscreen~get_data_from_screen.

  IF object_data-l_mstlang <> 'E'.
    MESSAGE 'Objects in non-English languages are not allowed!' TYPE 'A'.
  ENDIF.

ENDMETHOD.

不允许使用非英语语言创建对象。

enter image description here

在显示屏幕之前已经完成了签入方法get_data_from_screen,因此可以通过系统登录设置来确定语言。如果想进一步使用此BAdi,我想也可以启用方法GET_DATA_FROM_SCREEN,这将使检查用户输入成为可能,即用户将更改默认语言的情况。