SAP OData(二)Association

Entity之间用Association来表示关联关系,可以同CDS view中的Association一起理解。

我们在上次已经建好实体Item的基础上,再建一个Header,其方法的重写也参考Item即可,然后开始本篇的探索。

一,构建Association
1.1 新建Association

右键Association新建,弹出如下窗口,填入关联名称。

SAP OData(二)Association_第1张图片

上图红框:左右EntityType填入两个关联的Entity,然后是两个Entity的关联基数。

上图紫框:勾选Create Navigation Property会为EntityType生成一个NavigationProperty(如图3粉框),表示了entity之间的导航路径(详见第二节),如左紫框表示了Header到Item的导航,右紫框表示Item到Header的导航。我们可以只勾选一边,代表只建立单侧的导航。

1.2 指定关联字段

指定两个Entity关联的字段,类似两个表的join字段。注意匹配的字段其数据类型也要一致,且不能使用数量金额作为关联字段。

1.3 Association生成对象

在Association保存之后会生成一些新的对象,如下图内容:

SAP OData(二)Association_第2张图片

NavigationProperties:这个很重要,表示了entity之间是否能够导航,

Association:展示了关联名,以及关联字段

Association Set:似乎没什么要注意的

二,测试与报文分析
2.1 读取Header实体

使用Postman测试一下获取Header的实体,得到atom格式报文如下,我精简了一些element和attribute。




    
    
    
    
        
            4500000001
            XA016
        
    

我们在请求地址中指明了entity的key,所以会执行get_entity方法。

从报文可以看到有两个Link: 

HeaderSet('4500000001')" />

这是一个自连接指向Entity自身,每个Entity都会包含自连接,href是相对路径加上服务的前置路径就能得到指向Entity的完整URL

https://xxxxxx:44301/sap/opu/odata/sap/Y_TEST_ODATA4_SRV/HeaderSet('4500000001')

HeaderSet('4500000001')/Header_To_Item" />

由Association生成的连接,导航到相关的EntitySet,那么本例根据Header导航到行项目的URL就是

https://xxxxxx:44301/sap/opu/odata/sap/Y_TEST_ODATA4_SRV/HeaderSet('4500000001')/Header_To_Item

如果Header还有到其他实体的导航,比如到供应商主数据,就会有多个导航Link

2.2 使用Header到Item的导航

在上一步我们知道了Header到Item的导航地址,我们放到postman中测试一下。

在报文中我们看到返回的就是Item内容,而每个Item中又包含一个link可以导航到其Header。注意:如果图1右紫框没有勾选,那么这里就没有导航到Header的link。

由于图1中维护的关联基数是1:N,所以在导航到item时执行的是item的get_entityset方法,如果是1:1则执行的是get_entity方法

SAP OData(二)Association_第3张图片

2.3 指令$expand

https://{{host}}:{{port}}/sap/opu/odata/sap/Y_TEST_ODATA4_SRV/HeaderSet('4500000001')?$expand=Header_To_Item

如上查询指令:也是利用导航来关联entity的,与2.2小节导航不同的是该指令返回的报文同时包含了Header和Item两个实体,参考下一篇笔记的$expand

你可能感兴趣的:(SAP,sap)