【问题标题】:Class/Method to check if table exists in SE11 or not?检查表是否存在于 SE11 中的类/方法?
【发布时间】:2020-12-26 19:50:37
【问题描述】:

我想通过ABAP检查SE11中是否存在表。

它们是一些可用的 FM,例如“C_TABLE_EXISTENCE”.... 但是我不能使用FM。 我想或必须在我的软件中使用 Class 及其方法。

请建议我,我如何在不使用任何 FM 的情况下检查表的存在。 最好是类和方法。

【问题讨论】:

  • 你为什么“必须使用”一个方法?
  • 我必须使用方法,因为我的客户没有给予许可,或者由于某些原因他们不会使用这个特定的 FM。
  • 很抱歉,但这实在是太愚蠢了。我不想在这里开始冗长的咆哮,但是告诉他们在不使用键盘的情况下键入他们的电子邮件怎么样 - 只是因为?笨蛋,我没有别的词了。
  • @vwegert 感谢您的建议,但您不能这样说。因为,我们必须以任何方式倾听客户的意见......如果您知道,请给我一个解决方案谢谢

标签: abap sap-data-dictionary


【解决方案1】:

你可以使用类 cl_rebf_ddic_tabl

如果对象(表、结构或视图)在 SE11 中存在,它的存在将返回 X

EG:

CALL METHOD cl_rebf_ddic_tabl=>exists
  EXPORTING
    id_name     = [table name]
    id_tabclass = 'TRANSP'  " For table
*    if_noview   = ABAP_FALSE
  receiving
    rf_exists   = yes
    .

【讨论】:

  • 请注意,此类是RE-FX 包的一部分,因此不能保证在每个 ABAP 系统上都存在。
【解决方案2】:

判断字典数据类型是否存在的官方API是函数模块DDIF_NAMETAB_GET。它具有相当全面的文档。请注意,它适用于各种表和数据结构,并确保您检查了DDOBJTYPE

如果出于某种原因(也许这是一项家庭作业......?)您必须将自己限制在方法调用中,您可以使用 RTTI 类(CL_ABAP_TYPEDESCR 的后代) - 但请注意,这有点多工作,因为你必须确保你得到的实际上是一张桌子。 RTTI 类将返回任何数据类型的描述符,甚至是内部 ABAP 运行时类型,而 DDIF_NAMETAB_GET 仅限于字典类型。

【讨论】:

    【解决方案3】:
      CALL METHOD cl_abap_structdescr=>describe_by_name
        EXPORTING
          p_name = tabname
        EXCEPTIONS
          OTHERS = 1.
      IF sy-subrc <> 0.
        WRITE: `Table ` && tabname && ` does not exist`.
        RETURN.
      ENDIF.
    

    要手动验证结果,请调用 SE11(或 SE16,表 DD02L)。

    【讨论】:

      【解决方案4】:

      你应该看看功能模块DD_OBJECT_EXISTS,会有帮助的。

      【讨论】:

        猜你喜欢
        • 2016-02-29
        • 2018-11-03
        • 2014-12-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2018-04-28
        • 2017-02-24
        相关资源
        最近更新 更多