如何找到某个 ABAP structure 某字段的源头来自哪个数据库表
我的微信群里有朋友提问:
如何找到某个 ABAP structure 里的某个字段,运行时的值是从哪个数据库表的字段里写入的?
以 ABAP structure BAPIAD1VL 为例,假设我们需要查找 字段 DISTRCT_NO 的来源。
其实没有什么太好太精确的办法。我这里提供一种办法。
选中 DISTRCT_NO, 点击 SE11 工具栏的 Where used list 图标:
有4条结果,一条一条人工查看。如果结果数很多,这种方法就很低效了。
第三条记录里,发现是 ADDR1_VAL 结构的 CITYP_CODE 字段,写入了我们要查找的目标结构 BAPIAD1VL-DISTRCT_NO 字段。
这个 ADDR1_VAL 仍然是一个 ABAP 结构,所以我们这里有两种选择。
一是我们的目标,转而划归为查找结构 ADDR1_VAL 的字段 CITYP_CODE 来自何方。可以递归地用 SE11 的 where used list,查找字段 CITYP_CODE, 直至搜索结果里,发现真正的数据库表才结束探索。
第二种选择是,使用 SE80 的 Repository information system.
打开 SE80, 左边展开 Fields->Table Fields, 右边输入 CITYP_CODE:
在搜索结果里,发现 ADRCITYPRT 和 ADRSTREET 这两张表的 CITYP_CODE 字段最有可能是我们要查找的字段。
此时手动到 SE16 查看这两张表的字段来确认。
另外群里这位朋友还问到了 check table. 这个概念往往容易和另一个 value table 相混淆。
check table
它只是包含特定外键表字段的所有有效条目的表。用于字段级验证(它限制字段值)。
value table
值表在域(domain)级别维护,也称为域级别验证。
二者的区别
check table 将对在任何应用程序中输入的表字段的输入值进行检查,value table 将在 F4 帮助上为该表字段提供值。
check table 定义外键并且是表定义的一部分。而 value table 是域定义的一部分。
check table是字段级别的验证,value table 是域级别的验证,用于为引用该域的所有字段提供 F4 帮助。