天天看點

針對SAP OData 模型Addresssable屬性的不同處理

Opportunity Odata model裡有三個entity set mark成address = true:

針對SAP OData 模型Addresssable屬性的不同處理

SAP help裡的解釋是mark成address = true的entity set能夠直接通過url通路,比如如下兩個例子:document history和maxhit.

針對SAP OData 模型Addresssable屬性的不同處理
針對SAP OData 模型Addresssable屬性的不同處理

而對于其他通過$expand通路的entity set, 比如Attachments,product等等,雖然表面上也是通過url直接通路:

針對SAP OData 模型Addresssable屬性的不同處理

但是根據SAP help裡的定義,framework在通路這些entity set時,總是先拿到root entity set,即Oppportunity,再執行expand操作。

 下面的例子是Framework處理documentHistory的讀操作:架構直接call GET_ENTITYSET method直接根據傳入的guid将history傳回:

針對SAP OData 模型Addresssable屬性的不同處理

但是對于這個expand的url而言:

https://wdciw01.wdf.sap.corp:7080/sap/opu/odata/sap/CRM_OPPORTUNITY/Opportunities(guid'3440B5B1-73AE-1ED4-9ED9-F49FBCEA5CC2')?$expand=Products,ChangeDocs,Competitors,OpportunityLogSet&sap-client=001

架構的處理是先從Opportunity出發

針對SAP OData 模型Addresssable屬性的不同處理
針對SAP OData 模型Addresssable屬性的不同處理
針對SAP OData 模型Addresssable屬性的不同處理
針對SAP OData 模型Addresssable屬性的不同處理
針對SAP OData 模型Addresssable屬性的不同處理
針對SAP OData 模型Addresssable屬性的不同處理

待expand 操作的四個entityset維護在輸入參數lo_expand_root的internal table裡:

針對SAP OData 模型Addresssable屬性的不同處理
針對SAP OData 模型Addresssable屬性的不同處理

line 28先讀取Opp header,再call line 41的read function 讀取需要expand的sub entity set資訊:

針對SAP OData 模型Addresssable屬性的不同處理

繼續閱讀