本文档继续介绍业务应用程序的A系列编程模型。如果您还没有阅读本系列的第一部分,我建议您阅读前三部分:
业务应用程序的编程模型(1):假设、构建块,示例App
业务应用程序编程模型(2):用CDS实现实体模型
业务应用程序编程模型(3):计算元素和属性
在本部分中,我想讨论服务器端的服务适配读取服务的实现(服务适配视图和OData定义,xsodata文件),我们将在SAP UI5 UI中查看OData实现,我们想讨论两个UI的服务:
服务适配视图
现在让我们转到服务适配层中的读取服务。让我们从prospect UI服务开始(参见第1部分中的图4)。对后端服务的要求是:
同样,SPS8中的CDS限制阻止我们使用CDS实现视图。因此,top返利,我们用下面的select语句定义视图展望.hdbview.
选择
业务伙伴ID_,
业务伙伴ID,
BP."类别代码",
BP状态代码",
ST."描述文字"as"Status.DescriptionText文件",欧洲云服务器,
BPC。"个人.GivenName",
BPC."FormattedName",
ADR."DefaultEmailURI"为"EmailURI",
ADR。"DefaultPostalAddress.CityName"作为"CityName"
来自::业务伙伴业务伙伴"作为BP
内部联接::业务伙伴业务伙伴$C"作为BPC
开启业务伙伴ID\= 业务流程控制ID_
内部连接::业务伙伴客户"作为客户
在业务伙伴ID\=CUS."父项ID"
左外连接::业务伙伴生命周期状态"作为英国石油公司的ST
。"状态代码"=ST."代码"
左外联接::bo.businesspartner.address信息"作为AI
开启业务伙伴ID\=AI."Parent\u ID\u"和AI."DefaultIndicator"=1
左外连接::bo.address.地址"作为人工智能上的ADR
"地址.ID_"=ADR."ID"
其中CUS."ProspectIndicator"=1
和业务伙伴ID\在(选择)客户ID_"从::bo.salesterrymgmt.Customer客户"
"讨论:
基于这个观点,大淘客,数据中国,我们现在可以定义OData的定义(展望.sxodata)as:
服务{
::Prospect"
as"Prospect"
键("ID");
}
在浏览器中,现在可以使用以下URL使用OData服务:
://Prospect.xsodata/Prospect?$format=json
这里是一个示例{
d:
{
results:
[
{
{
元数据:
{
uri:(…)/Prospect.xsodata/前景(90006)",
型号:"(…)Prospect.Prospect类型"
},
ID:"90006",
ID:"C003",
类别代码:"1",
状态代码: "2",
Status.DescriptionText文件:"有效",
个人.GivenName:"Frieda",
格式名称:"Frieda Friday",
EmailURI:null,
CityName:null,
}
}
]
}
在UI上(第1部分的图3)可以看到一个链接,输入Ship To Address。这个链接背后的想法是,您可以选择维护一个专用的ship-to地址。下一步,我将为这个辅助服务器实现后端服务地址。As第一步,创建第二个视图,称为送货地址.hdbview,它基本上是Prospect视图的副本,但有一个例外:不是filter AI。"DefaultIndicator"=1,而是将filter定义为AI。"AddressUsage"="SHIP\u TO"。
作为第二步,我通过ShipToAddress和从Prospect到ShipToAddress的关联来扩展OData定义:
服务{
::Prospect"
作为"Prospect"
键("ID")
导航("ToShipToAddress"作为"ShipToAddress");
::ShipToAddress"作为"ShipToAddress"
键("ID");
association"ToShipToAddress"
principal"Prospect"("ID)multiplicity"1"
dependent"ShipToAddress"("ID)multiplicity"1";
}
因此,我可以通过以下OData调用读取辅助地址(如果可用):
://Prospect.xsodata/Prospect?$format=json&$expand=ShipToAddress
基于同样的原理,Sales Order OData服务的实现是直接的:它由Sales Order视图、Item视图和OData定义组成:
service{
.Sales Order"
as"Sales Order"
key("ID")
navigates("ToItem"as"Item",
"ToSalesOrder$P"作为"SalesOrder$P");
.Item"作为"Item";
.SalesOrder$P"作为"SalesOrder$P";
association"ToItem"
principal"SalesOrder"("IDƏ)multiplicity"1"
dependent"Item"("ParentƏIDƏ)multiplicity"*";
关联"ToSalesOrder$P"
主体"SalesOrder"("ID")多重性"1"
依赖"SalesOrder$P"("ID")多重性"1";
}
讨论:
最后,政务大数据,让我们看看SAP UI5 UI中的OData实现。在视图和控制器实现中由以下代码行组成。
1)设置模型(例如在视图实现中,(主视图的createContent方法)
var oModel=newsap.ui.model模型.小田.小田模型("/销售订单视图.xsodata",对);
oModel.setDefaultCountMode模式(假);
此.setModel(oModel);
讨论:将计数模式设置为false有助于避免不必要的往返(除非您确实需要)。
2)将模型附加到列表(在相应的视图实现中):
var oMain=sap.ui.getCore().byId("");
var oModel=域.getModel();
omaterlist.setModel文件(奥莫代尔);
3)执行控制器填写订单列表(如onBeforeShow方法):
omaterlist.bindItems文件("/SalesOrder",oList.\u oItemTemplate,oMasterList.\u oItemSorter);
要读取带有数据的属性,将"/SalesOrder"替换为"/SalesOrder"?$expand=销售订单$P"。此更改后,OData调用将扩展与properties视图的关联,并将其读入OData模型。
4)实现用于填充项目列表的控制器(例如在onSelectionChange方法中):
var selectedItem=omaterlist.getSelectedItem();
var bindingContext=选择Editem.getBindingContext();
var项目上下文=绑定上下文.sPath;
oItemList.destroy项目();
oItemList.bindItems文件(itemContext+"/Item",oList.\u oItemTemplate,oItemList.\u oItemSorter);
讨论:itemContext包含"/salesforder()",itemContext+"/Item"是按照服务定义中的项目关联加载项目的路径。