
在 SAP S/4HANA 的数据模型里,只要开始大量使用 ABAP CDS Association,很快就会碰到一个很容易被低估的问题,Association 在定义时明明是to many,可真正沿着 Path Expression 读取字段时,经过过滤以后,结果又可能只剩下一条记录。这时候,如果 CDS 代码仍然只表达原始 Association 的 Cardinality,数据模型描述出来的关系就和实际查询语义出现了偏差。多语言文本就是最典型的场景。SAP 的很多业务对象都会把语言无关数据和语言相关文本分开存储。产品、物料、销售组织、公司代码、业务伙伴角色、状态、计量单位等对象,都可能拥有英语、德语、中文、日语等不同语言的描述。对于一个业务对象而言,它和文本数据之间天然不是一对一关系,而是一对多关系。假设某个业务对象拥有编号1000,文本实体里存在这样的数据关系。业务对象1000对应德语描述一条,对应英语描述一条,对应中文描述一条。从业务对象实体出发访问文本实体时,_TextAssociation 很自然就是to many。同一个源记录可以找到多个目标记录。可是在一个 CDS View 中,我们并不一定需要所有语言。某个消费场景可能明确要求德语文本。这时候 Path Expression 里可以增加LanguageCode = 'DE'这样的过滤条件。过滤之前,一个业务对象可能对应十几个文本记录。过滤之后,只剩下德语记录。此时 Pat