您的参考方面的targetQualifier属性在整个应用程序中是否应该是唯一的?

2020-08-23 03:42发布

点击此处---> 群内免费提供SAP练习系统(在群公告中)加入QQ群:457200227(SAP S4 HANA技术交流) 群内免费提供SAP练习系统(在群公告中)我有一些非常相似的CDS视图(即...

         点击此处--->   EasySAP.com群内免费提供SAP练习系统(在群公告中)

加入QQ群:457200227(SAP S4 HANA技术交流) 群内免费提供SAP练习系统(在群公告中)


我有一些非常相似的CDS视图(即,在层次结构的不同级别上,大多数是相同的数据)。 为了开发这些视图(和元数据扩展),我根据需要复制/粘贴和调整了这些视图。 有时,"公共"字段只会显示在一个对象页面上。 有时,我在孩子的对象页面上从上到下获得"额外"字段。 使FIELDGROUP_REFERENCE的targetQualifier唯一似乎可以解决此问题,但是我找不到有关它的文档。

付费偷看设置
发送
2条回答
樱桃小丸子0093
1楼 · 2020-08-23 04:06.采纳回答

保罗,

您的问题似乎与ABAP堆栈中的CDS有关。

从OData批注的角度(CDS定义产生的XML)的角度来看,您要么指向没有限定符的字段组,要么指向引用构面中带有限定符的字段组。 目标或参考构面实际上是完整的注释路径(链接)。 这意味着,由于该字段组,它将指向实体类型的字段组;或者,如果添加导航属性,它将指向该导航属性后面的实体类型的字段组。 如果您检查生成的XML(例如在浏览器网络跟踪中),则会找到各个字段组的确切定义。

因此,您所描述的歧义似乎来自cds视图的组成及其后端的元数据扩展。 abap开发工具中有一个很棒的功能,称为"活动注释"(文档链接),它将针对特定视图准确地告诉您采用了哪些注释。 右键单击CDS视图(数据定义),然后选择"打开方式"->"活动注释"。 在它旁边,您可以找到"注释传播",它为您提供了另一个视角(文档链接)。

因此,如果您还没有这样做,我鼓励您使用这些工具来分析批注的依赖性和传播。

FIELDGROUP_REFERENCES应该用于向具有特定实体类型的特定标签的特定字段组添加属性(基于定义该类型的CDS视图)。

如果您具有商品实体集,则可能需要3个字段组:

不带限定符的FieldGroup,标签为"仓库",用于包装Property1,Property2,Property3

带有限定符'Supplier'的FieldGroup包装供应商/属性1,供应商/属性2

带有限定符"字段"的FieldGroup,用于包装Property4(例如高度),Property5(例如宽度)

我希望这些信息对您有所帮助。

关于,
Thorsten

昵称总是被占用
2楼-- · 2020-08-23 03:57

我将举一个例子。 在这种情况下,我有3个CDS视图。 合同[1 .. *]-> CLIN [1 .. *]-> ELIN

我有一个标记为" Currency TEST"的字段,该字段在Contract ...的元数据扩展中定义。它显示在ELIN对象页面中。

使用您提到的"活动注释"工具。 我确实确实看到它"继承"了ELIN注释中来自Contract的注释...

我不明白为什么...我可以直接将所有targetQualifiers的名称更改为唯一,并且可以按预期运行,我只是想了解为什么会这样。

经过一番思考之后。 我相信我了解发生了什么事。 我的要求是用户在"合同"级别设置货币,所有子节点都将使用该货币(我们不希望使用混合货币的文档)。 因此,在每个金额字段的每个视图中,参考货币都是合约货币。 我相信,通过参考合同货币,该框架将在合同级别上定义的所有注释都带进去,并且由于ELIN视图也具有"基本"的targetQualifer,因此将其放置在该字段组中。

即 在ELIN的消费视图中,这是批注

 ...
       @ Semantics.currencyCode:是
       @ ObjectModel.readOnly:正确
       _zcontract.currency,
       @ Semantics.amount.currencyCode:'货币'
       每单位价格,
 ... 

我认为"消失"的共同领域是另外一回事(我目前无法复制)。

一周热门 更多>