在 ABAP Dictionary 里复用结构时,一个很容易遇到的设计问题是,同一组字段虽然可以复用,但它们在不同业务上下文中的输入帮助和外键语义未必完全相同。
例如,一个公共结构里有航空公司代码、航班连接号等字段。这个结构本身可以被多个业务结构复用,但在结构 A 中,某个字段可能需要使用一套 Search Help,而到了结构 B 中,相同字段可能需要根据结构 B 内的其他字段共同约束输入帮助。如果为了改变一个 Search Help 就复制一份结构,字段定义虽然解决了,结构复用的价值却几乎消失了。
DDIC DDL 为这一类问题提供的机制就是DEFINE STRUCTURE中INCLUDE后面的EXTEND component。
这里的EXTEND很容易和 ABAP Dictionary 的 Append Structure、EXTEND TYPE,甚至 CDS View Entity 的扩展机制混在一起。实际上,它们解决的不是同一个层面的问题。
DEFINE STRUCTURE中的EXTEND component并不负责给结构增加一个新的字段,也不负责改变组件的数据类型。它针对的是已经通过INCLUDE引入进来的组件,并在当前结构上下文中重新定义这个组件的 Search Help 或 Foreign Key 等语义属性。
因此理解这套语法时,更合适的思路不是把EXTEND理解成增加字段,而是把它理解成对被复用字段的语义重绑定。