关于sap:SAP-CRM-Fiori-应用的-Deep-Create-行为和实现分析

32次阅读

共计 1957 个字符,预计需要花费 5 分钟才能阅读完成。

什么是 OData 的 Deep Create 行为?咱们通过一个具体的例子来理解。

下图是 SAP CRM Fiori 利用之一的 My Opportunities 界面。

咱们点击 + 按钮,能够创立新的 Opportunity 实例。

在 Opportunity 创立页面里,能够保护 Opportunity 低头区域的字段值。所谓低头区域,能够了解成 Opportunity OData 模型的根节点:

低头区域的字段值保护结束之后,往下滑动屏幕,看到 Product 区域。点击 + 按钮,增加 Product 数据:

下图高亮区域就是 Product 数据,而从建模的层面来说,这些字段值,都是 Opportunity OData 模型的子节点,即 Product 子节点上的字段值。

因而,所谓 OData 的 Deep Create 操作,就是 OData 消费者在一个 HTTP 申请里,同时提供了待创立的根节点和子节点字段值,这样 OData 服务提供者在接管到这个 HTTP 申请后,可能同时创立蕴含根节点和子节点的业务数据实例。

咱们在 Chrome 开发者工具的 Network 页面里,察看到上述场景所触发的 OData 申请,其 HTTP Payload 明细如下:

{"Description":"deep create","ProcessType":"OPPT","StartDate":"2022-8-28T00:00:00","ClosingDate":"2022-8-28T00:00:00","ExpectedSalesVolume":"0","SalesStageCode":"1","UserStatusCode":"E0001","UserStatusText":"Open","PriorityCode":"","PriorityText":"","ProspectName":"4221711","ProspectNumber":"4221711","MainContactName":"","ChanceOfSuccess":"0","ForecastRelevance":true,"CurrencyCode":"","Guid":"00000000-0000-0000-0000-000000000000","Statuses":[{"HeaderGuid":"00000000-0000-0000-0000-000000000000","StatusProfile":"CRMOPPOR","UserStatusCode":"E0001","UserStatusText":"Open","StatusOrderNumber":"01"}],"Products":[{"HeaderGuid":"00000000-0000-0000-0000-000000000000","ProcessingMode":"A","ProductGuid":"00163EA7-1FFC-1EE1-A7E6-1543AD7395C1","ProductId":"AWEHFOIQF","ProductName":"blabla","Quantity":"1","TotalExpectedNetValue":"11","Unit":""}],"SalesTeam":[{"HeaderGuid":"00000000-0000-0000-0000-000000000000","PartnerFunctionCode":"00000004","PartnerNumber":"4221711","PartnerName":"","PartnerFunctionText":"Payer"}],"EmployeeResponsibleNumber":"4031140","PredecessorGUID":null}

上图的 Products,是一个 navigation property,定义在 SEGW 事物码里这个地位:

SAP ABAP OData 服务器端的解决,当接管到上述的 HTTP 申请 payload 之后,框架会调用 OData DPC_EXT 类的 CREATE_DEEP_ENTITY 办法,其调用栈如下图所示:

框架解析出的 lv_expand_string, 蕴含了 navigation property Products:

首先应用 io_data_provider, 读取 header 区域的数据:

读取进去的 header 数据里,OData 框架曾经帮咱们解析好了通过 navigation property 保护的 products 数据:

最初 products 指向的数据,通过输出参数 it_product_i, 传入 One Order API CRM_ORDER_MAINTAIN:

该 HTTP Post 申请胜利执行后,返回 201 Created 状态码:

正文完
 0