在我们公司中,必须使用原始语言EN创建存储库对象。 如果在ABAP存储库中创建新对象,是否可以检查登录语言?
期望的行为:
SE80-创建程序/类/数据元素/表/....
==>用户出口/ badi检查登录语言。如果不是“ EN”,则会拒绝创建。
致谢
乌马尔·阿卜杜拉
答案 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会引发错误
因此,在下文中,我们假设您已经在BAdi设置中选中了此复选框
第1步。
为了实施BAdi,需要在此之前实施增强点。这是最复杂的部分,因为尽管我们禁用了内部性标记,但必须仅将SAP命名空间的增强功能存储在SAP命名空间的对象中。 SAP命名空间是指非Z,非Y和非T(测试)。这意味着要实现此增强功能,除了修改增强功能定义外,还需要创建一个名为enh.impl。的CTS_ES_TADIR,并将其保存到非Z包中,这也是您需要创建的。您的增强实现选择器应该看起来像这样
在上面的屏幕上,只有第二个有效,其余的Z则无效。
每个非Z对象都需要对象访问密钥,还记得吗?太糟糕了。但是,为了展示概念证明,我将继续进行。
第2步。创建enh之后。 SAP命名空间中的实现,它将建议您创建BAdi实现。此处应用相同的原理:仅SAP命名对象的SAP命名容器,因此CTS_TADIR_SUBSCREEN
应该具有实现类,例如CL_TADIR_SUBSCREEN
。在创建增强功能的过程中,您会看到许多警告
但是最后您应该有类似的内容,其中创建了所有以系统命名的对象,并激活了增强功能/ BAdi。
第3步。为了使BAdi正常运行,我们需要启用此子屏幕处理
在进行增强演奏时,我发现没有独立触发BAdi类,没有增强屏幕事件,因此要使其正常工作,您需要触摸屏幕100的屏幕增强功能
如果您不想修改屏幕元素逻辑,只需在包含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.
例如像我一样的声明语句
步骤4 。激活您创建的BAdi类,并在其中放置必要的逻辑。我无法触发方法GET_DATA_FROM_SCREEN
,但是PUT_DATA_TO_SCREEN
工作正常
如果我们根据您的要求进行此简单处理
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.
不允许使用非英语语言创建对象。
在显示屏幕之前已经完成了签入方法get_data_from_screen
,因此可以通过系统登录设置来确定语言。如果想进一步使用此BAdi,我想也可以启用方法GET_DATA_FROM_SCREEN
,这将使检查用户输入成为可能,即用户将更改默认语言的情况。