如果您使用的是 Fiori Elements List Report Object Page 模板,我认为您只能使用 1:1 关联。这是平面图的预期设计(列表→详细信息)。Fiori Elements 应该如何知道应该将“许多”人员项中的哪些绑定到一个详细信息视图。
但是,您可以并且可能想要做的是将详细视图绑定到选定的公司项目并创建一个字段组。在那里您可以显示一个引用不同实体的表。所以,你保持schema.cds
现在的状态,但改变你的annotation.cds
:
annotate Admin.Company with @(
UI: {
// columns of the list view
LineItem:[
{$Type: 'UI.DataField', Value: cName},
],
// title (singular/plural) of the list view and description of the detail view
HeaderInfo:{
TypeName: 'Company',
TypeNamePlural: 'Companies',
Description: {Value: ID}
},
// facet for the person table
HeaderFacets: [
{$Type: 'UI.ReferenceFacet', Target: 'Person/@UI.LineItem'}
]
);
annotate Admin.Person with @(
// person table (only displayed in detail view) with columns
UI.LineItem: [
{$Type: 'UI.DataField', Value: 'comp/cName'},
{$Type: 'UI.DataField', Value: 'pName'}
]);
可能是上面的代码不能马上工作,因为我没有测试它。但是我使用 Northwind OData V2 服务创建了一个工作示例,使用列表视图的客户实体和详细视图的表中的订单实体。您可以通过使用 OData 服务 URLhttps://services.odata.org/Northwind/Northwind.svc/
和主实体运行 Fiori List Report Object Page 向导来重新创建示例Customer
。项目生成完成后,您可以将 的内容替换为annotation.xml
以下内容:
<edmx:Edmx xmlns:edmx="http://docs.oasis-open.org/odata/ns/edmx" Version="4.0">
<edmx:Reference Uri="https://sap.github.io/odata-vocabularies/vocabularies/Common.xml">
<edmx:Include Namespace="com.sap.vocabularies.Common.v1" Alias="Common" />
</edmx:Reference>
<edmx:Reference Uri="https://sap.github.io/odata-vocabularies/vocabularies/UI.xml">
<edmx:Include Namespace="com.sap.vocabularies.UI.v1" Alias="UI" />
</edmx:Reference>
<edmx:Reference Uri="https://sap.github.io/odata-vocabularies/vocabularies/Communication.xml">
<edmx:Include Namespace="com.sap.vocabularies.Communication.v1" Alias="Communication" />
</edmx:Reference>
<edmx:Reference Uri="/Northwind/Northwind.svc/$metadata">
<edmx:Include Namespace="NorthwindModel" />
<edmx:Include Namespace="ODataWebV3.Northwind.Model" />
</edmx:Reference>
<edmx:DataServices>
<Schema xmlns="http://docs.oasis-open.org/odata/ns/edm" Namespace="local">
<Annotations Target="NorthwindModel.Customer">
<Annotation Term="UI.LineItem">
<Collection>
<Record Type="UI.DataField">
<PropertyValue Property="Value" Path="CompanyName" />
</Record>
</Collection>
</Annotation>
<Annotation Term="UI.Facets">
<Collection>
<Record Type="UI.ReferenceFacet">
<PropertyValue Property="Target" AnnotationPath="Orders/@UI.LineItem" />
</Record>
</Collection>
</Annotation>
</Annotations>
<Annotations Target="NorthwindModel.Order">
<Annotation Term="UI.LineItem">
<Collection>
<Record Type="UI.DataField">
<PropertyValue Property="Value" Path="OrderID" />
</Record>
<Record Type="UI.DataField">
<PropertyValue Property="Value" Path="Customer/CompanyName" />
</Record>
</Collection>
</Annotation>
</Annotations>
</Schema>
</edmx:DataServices>
</edmx:Edmx>
我希望这能解决你的问题。如果您有任何问题随时问。