动态替换默认的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条回答
野沐沐
1楼-- · 2020-09-28 07:39

或者您可以在清单中定义不同的数据源,然后在组件的init中设置数据源?

"数据源":{
      " service1":{
          " uri":"/group1/service.xsodata",
          " type":" OData",
          "设置":{
       " odataVersion":" 2.0",
       " localUri":" localService/metadata.xml"
        }
      },
      " service2":{
          " uri":"/group2/service.xsodata",
          " type":" OData",
          "设置":{
       " odataVersion":" 2.0",
       " localUri":" localService/metadata.xml"
        }
      }
   }
 
 var oManifestEntry = this.getMetadata()。getManifestEntry(" sap.ui5");
 oManifestEntry.models [""]。dataSource =" service1";
 
CJones
2楼-- · 2020-09-28 07:38

嗨乔瓦尼,

感谢您提供有关扩展程序的提示。 现在,我已经创建了主应用程序的两个扩展,然后在其中进行了服务替换。 现在,只需将启动板配置为根据用户的组分配使用不同的应用程序。

最诚挚的问候
格雷戈尔

落灬小鱼
3楼-- · 2020-09-28 07:51

不能只使用应用程序组件扩展并执行类似的操作吗?

元数据:{
         配置:{
             " sap.ca.serviceConfigs":[{
                 名称:"在元数据中定义的服务名称",
                 serviceUrl:"/img/sap/opu/odata/sap/NEW_SERVICE_URL/",
                 isDefault:true,
                 useBatch:正确
             }]
         }
     } 
一只江湖小虾
4楼-- · 2020-09-28 07:48

是的,这也是我早些时候在答案中建议的内容……

clasier
5楼-- · 2020-09-28 07:56

为什么需要使用默认模型? 也许定义两个模型并将您使用的模型设置在其他位置会更容易?

蓋茨
6楼-- · 2020-09-28 07:52

如何将这些代码移到以后的位置?

component ---> app

应用程序控制器怎么样?

一周热门 更多>