繁体   English   中英

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

[英]Check original language of repository objects at creation?

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

期望的行为:

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

==> 用户出口/badi 检查登录语言。 当它不是'EN'时,创建将被拒绝。

问候,

奥马尔·阿卜杜拉

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

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

编辑:抱歉,请忽略我的回答,“此方法未发布供客户使用”,如注释 2150125 中所述- 未触发方法 CHECK_BEFORE_ADD_OBJECTS

免责声明:绝对不推荐此处描述的方法。

正如其他成员正确指出的那样,没有标准和客户公开的方法来满足您的要求,但如果您绝对必须在创建期间启用此检查,则可以使用以下方法。 除了之前提供给您的,它还涉及对 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方法,这将使检查用户输入成为可能,即用户要更改默认语言的情况。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM