动态替换默认的OData模型

2020-09-28 07:07发布

         点击此处--->   EasySAP.com群内免费提供SAP练习系统(在群公告中)

加入QQ群:457200227(SAP S4 HANA技术交流) 群内免费提供SAP练习系统(在群公告中)


SAP UI UI5专家,

我有一个SAPUI5应用程序,该应用程序在manifest.json中定义了默认的OData模型

"":{
 " dataSource":" mainService",
 "设置":{
 " metadataUrlParams":{
 " sap-documentation":"标题"
 },
 " defaultBindingMode":" TwoWay"
 }
 }
 

现在,我们要针对实现不同授权的不同OData服务使用同一应用程序。 服务的接口始终相同。 为此,我在应用程序的Component.js中实现了以下功能:

 _setDefaultModelForUser:function(){
 var that = this;
 var _odata1 ="/group1/service.xsodata";
 var _odata2 ="/group2/service.xsodata";
 var serviceUrl ="";
 var oManifest = this.getManifestObject();
 var oCurrentUser = this.getModel(" currentUser");
 oCurrentUser.attachRequestCompleted(function(){
 var username = oCurrentUser.getProperty("/img/name");

 开关(用户名){
 案例" P598692":
 serviceUrl = _odata1;
 打破;
 案例" S0001142741":
 serviceUrl = _odata2;
 打破;
 默认:
 }

 if(serviceUrl!==""){
 oManifest._oManifest [" sap.app"]。dataSources.mainService.uri = serviceUrl;
 var oDefaultModel = that.getModel("");
 var defaultModelSettings = oManifest._oManifest [" sap.ui5"]。models [""]。settings;
 oDefaultModel =新的sap.ui.model.odata.v2.ODataModel(serviceUrl,defaultModelSettings);
 that.setModel(oDefaultModel,"");
 }
 });
 }


 

我在init函数的开始处调用此方法:

 init:function(){
 this._setDefaultModelForGroup();
 

不幸的是,这对默认模型没有影响。 仅加载元数据,但默认模型不会替代。

希望有人可以在一些帮助下跳入这里。

最诚挚的问候
格雷戈尔

         点击此处--->   EasySAP.com群内免费提供SAP练习系统(在群公告中)

加入QQ群:457200227(SAP S4 HANA技术交流) 群内免费提供SAP练习系统(在群公告中)


SAP UI UI5专家,

我有一个SAPUI5应用程序,该应用程序在manifest.json中定义了默认的OData模型

"":{
 " dataSource":" mainService",
 "设置":{
 " metadataUrlParams":{
 " sap-documentation":"标题"
 },
 " defaultBindingMode":" TwoWay"
 }
 }
 

现在,我们要针对实现不同授权的不同OData服务使用同一应用程序。 服务的接口始终相同。 为此,我在应用程序的Component.js中实现了以下功能:

 _setDefaultModelForUser:function(){
 var that = this;
 var _odata1 ="/group1/service.xsodata";
 var _odata2 ="/group2/service.xsodata";
 var serviceUrl ="";
 var oManifest = this.getManifestObject();
 var oCurrentUser = this.getModel(" currentUser");
 oCurrentUser.attachRequestCompleted(function(){
 var username = oCurrentUser.getProperty("/img/name");

 开关(用户名){
 案例" P598692":
 serviceUrl = _odata1;
 打破;
 案例" S0001142741":
 serviceUrl = _odata2;
 打破;
 默认:
 }

 if(serviceUrl!==""){
 oManifest._oManifest [" sap.app"]。dataSources.mainService.uri = serviceUrl;
 var oDefaultModel = that.getModel("");
 var defaultModelSettings = oManifest._oManifest [" sap.ui5"]。models [""]。settings;
 oDefaultModel =新的sap.ui.model.odata.v2.ODataModel(serviceUrl,defaultModelSettings);
 that.setModel(oDefaultModel,"");
 }
 });
 }


 

我在init函数的开始处调用此方法:

 init:function(){
 this._setDefaultModelForGroup();
 

不幸的是,这对默认模型没有影响。 仅加载元数据,但默认模型不会替代。

希望有人可以在一些帮助下跳入这里。

最诚挚的问候
格雷戈尔

付费偷看设置
发送
10条回答
SAP小黑
1楼-- · 2020-09-28 07:37

只是想想-您是否足够早地附加了事件处理程序以进行触发(对于requestCompleted事件)?

My梦
2楼-- · 2020-09-28 07:55

嗨,格雷格,

我认为您对清单和默认OData模型的更改为时已晚。 在您的请求完成之前,组件已经初始化了所有内容。

我建议尝试删除manifest.json中的OData模型定义,以免初始化默认模型。 保持" _setDefaultModelForUser"功能不变,但删除处理manifest.json的代码。

我仍然会使用目的地来定义您的不同服务。

希望有帮助。

最诚挚的问候,

Wouter

我是小鹏鹏啊
3楼-- · 2020-09-28 07:39

Gregor,

我已经成功使用了Wouter建议的相同方法。

就我而言,我有一个供在线使用的模型,另一个供离线使用的模型,它设置在onInit事件上。

最诚挚的问候,

道格拉斯

粗暴的香蕉
4楼-- · 2020-09-28 07:38

我将扩展该应用程序,并通过配置替换OData服务,就像处理任何Fiori应用程序一样。

 Component.extend(" blablabla.Component",{
 元数据:{
 版本:" 1.0",
 配置:{
 " sap.ca.serviceConfigs":[{
 "名称": "",
 " serviceUrl":"/Northwind/V2/Northwind/Northwind.svc/",
 " isDefault":true,
 " mockedDataSource":" ./localService/metadata.xml"
 }]
 }
 }
 });
 

一周热门 更多>