在SAPUI5应用中使用Odata服务在GeoMAP上显示路线

2020-08-25 01:10发布

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

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


嗨,

我正在开发一个SAPUI5应用程序,该应用程序可在geoMAP上显示路线。

我遵循了本教程' https://embed.plnkr.co/kEzGKiJtuyPKGru5XdL0/' 采用本地JSON数据模型。

在我的应用程序中,我建立了一个odata服务:它由两个实体集组成,分别称为" Trips"和" Trip Details"。 "旅行"由旅行ID组成,并与"旅行详细信息"相关联,该"旅行详细信息"包含该旅行的纬度和经度值。 odata服务的JSON看起来像这样:

 {
   " d":{
     "结果":[
       {
         " __metadata":{
           " type":" public。*******。trip_idsType",
           " uri":" https://*****services/data.xsodata/trip_ids('00000')"
         },
         " TRIP_ID":" 00000",
         " TRIP_DETAILS":{
           " __deferred":{
             " uri":" https:/******/services/data.xsodata/trip_ids('00000')/TRIP_DETAILS"
           }
         }
       },.....

 }
 

对于我的应用程序,我正在使用主详细信息模板,并且我想在详细信息视图中显示所选行程的相应地图。 详细视图控制器中提供了地图配置。

以下是根据本教程从本地json数据模型绘制路线所需的地图配置。

我遇到的问题是在'oSpotsCollection'和'oRouteCollection'中指定'path'值,因为我现在使用的是oData服务,而不是教程中显示的本地JSON模型。

有人可以根据我的用例帮助我指定路径值吗?

//每个教程的MAP配置
 var oMapConfig = {...}

 var oSpotTemplate = new sap.ui.vbm.Spot({
 职位:{
 部分: [{
 路径:" d/results/LATITUDE"
 },{
 路径:" d/results/LONGITUDE"
 }],
 格式化程序:function(lat,lon){
 return(lon +";" + lat);
 }
 },
 类型:sap.ui.vbm.SemanticType.Default,
 文字:" {SPEED}"
 });


 var oSpotsCollection = new sap.ui.vbm.Spots({
 项目:{
 ----->路径:"/img/d/results",
 模板:oSpotTemplate
 }
 });



 var oRouteTemplate = new sap.ui.vbm.Route({
 职位:{
 路径:" d",
 格式化程序:function(arrayOfPoints){
 var route = [];
 var context = this.getBindingContext();
 var list = context.oModel.aBindings [0] .oList.d.results;
 for(var i = 0; i 路径:"/",
 模板:oRouteTemplate
 }
 });


//取消注释以将数据绘制为斑点
//oGeoMap.addVo(oSpotsCollection);
 oGeoMap.addVo(oRouteCollection);


 

这是详细视图控制器,就像模板中一样:

 onInit:函数(){
//用于操纵控制状态的模型。 选择的值可确保
//详细信息页面会立即显示繁忙状态,因此不会中断
//在繁忙指示之间加载视图的元数据
 var oViewModel = new JSONModel({
 忙:错误,
 延迟:0
 lineItemListTitle:this.getResourceBundle()。getText(" detailLineItemTableHeading")
 });
 this.getRouter()。getRoute(" object")。attachPatternMatched(this._onObjectMatched,this);
 this.setModel(oViewModel," detailView");
 this.getOwnerComponent()。getModel()。metadataLoaded()。then(this._onMetadataLoaded.bind(this));



 },


 _onObjectMatched:函数(oEvent){
 var sObjectId = oEvent.getParameter(" arguments")。objectId;
 this.getModel(" appView")。setProperty("/img/layout"," TwoColumnsMidExpanded");
 this.getModel()。metadataLoaded()。then(function(){
 var sObjectPath = this.getModel()。createKey(" trip_ids",{
 TRIP_ID:sObjectId
 });
 this._bindView("/" + sObjectPath);
 } .bind(this));
 },

 _bindView:函数(sObjectPath){
//在视图绑定期间设置忙碌指示器
 var oViewModel = this.getModel(" detailView");


//如果未绑定视图,但视图不忙,则只有在绑定请求数据后,视图才再次设置为忙
 oViewModel.setProperty("/img/busy",false);


 this.getView()。bindElement({
 路径:sObjectPath,
 参数:{
 扩展:"段"
 },
 事件:{
 更改:this._onBindingChange.bind(this),
 dataRequested:function(){
 oViewModel.setProperty("/img/busy",true);
 },
 dataReceived:function(){
 oViewModel.setProperty("/img/busy",false);
 }
 }
 });
 },


 _onBindingChange:函数(){
 var oView = this.getView(),
 oElementBinding = oView.getElementBinding();


//没有用于绑定的数据
 如果(!oElementBinding.getBoundContext()){
 this.getRouter()。getTargets()。display(" detailObjectNotFound");
//如果找不到对象,则在主列表中进行选择
//不再有意义。
 this.getOwnerComponent()。oListSelector.clearMasterListSelection();
 返回;
 }


 var sPath = oElementBinding.getPath(),
 oResourceBundle = this.getResourceBundle(),
 oObject = oView.getModel()。getObject(sPath),
 sObjectId = oObject.TRIP_ID,
 sObjectName = oObject.TRIP_ID,
 oViewModel = this.getModel(" detailView");


 this.getOwnerComponent()。oListSelector.selectAListItem(sPath);


 oViewModel.setProperty("/img/shareSendEmailSubject",
 oResourceBundle.getText(" shareSendEmailObjectSubject",[sObjectId]));
 oViewModel.setProperty("/img/shareSendEmailMessage",
 oResourceBundle.getText(" shareSendEmailObjectMessage",[sObjectName,sObjectId,location.href])));

 },

 

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

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


嗨,

我正在开发一个SAPUI5应用程序,该应用程序可在geoMAP上显示路线。

我遵循了本教程' https://embed.plnkr.co/kEzGKiJtuyPKGru5XdL0/' 采用本地JSON数据模型。

在我的应用程序中,我建立了一个odata服务:它由两个实体集组成,分别称为" Trips"和" Trip Details"。 "旅行"由旅行ID组成,并与"旅行详细信息"相关联,该"旅行详细信息"包含该旅行的纬度和经度值。 odata服务的JSON看起来像这样:

 {
   " d":{
     "结果":[
       {
         " __metadata":{
           " type":" public。*******。trip_idsType",
           " uri":" https://*****services/data.xsodata/trip_ids('00000')"
         },
         " TRIP_ID":" 00000",
         " TRIP_DETAILS":{
           " __deferred":{
             " uri":" https:/******/services/data.xsodata/trip_ids('00000')/TRIP_DETAILS"
           }
         }
       },.....

 }
 

对于我的应用程序,我正在使用主详细信息模板,并且我想在详细信息视图中显示所选行程的相应地图。 详细视图控制器中提供了地图配置。

以下是根据本教程从本地json数据模型绘制路线所需的地图配置。

我遇到的问题是在'oSpotsCollection'和'oRouteCollection'中指定'path'值,因为我现在使用的是oData服务,而不是教程中显示的本地JSON模型。

有人可以根据我的用例帮助我指定路径值吗?

//每个教程的MAP配置
 var oMapConfig = {...}

 var oSpotTemplate = new sap.ui.vbm.Spot({
 职位:{
 部分: [{
 路径:" d/results/LATITUDE"
 },{
 路径:" d/results/LONGITUDE"
 }],
 格式化程序:function(lat,lon){
 return(lon +";" + lat);
 }
 },
 类型:sap.ui.vbm.SemanticType.Default,
 文字:" {SPEED}"
 });


 var oSpotsCollection = new sap.ui.vbm.Spots({
 项目:{
 ----->路径:"/img/d/results",
 模板:oSpotTemplate
 }
 });



 var oRouteTemplate = new sap.ui.vbm.Route({
 职位:{
 路径:" d",
 格式化程序:function(arrayOfPoints){
 var route = [];
 var context = this.getBindingContext();
 var list = context.oModel.aBindings [0] .oList.d.results;
 for(var i = 0; i 路径:"/",
 模板:oRouteTemplate
 }
 });


//取消注释以将数据绘制为斑点
//oGeoMap.addVo(oSpotsCollection);
 oGeoMap.addVo(oRouteCollection);


 

这是详细视图控制器,就像模板中一样:

 onInit:函数(){
//用于操纵控制状态的模型。 选择的值可确保
//详细信息页面会立即显示繁忙状态,因此不会中断
//在繁忙指示之间加载视图的元数据
 var oViewModel = new JSONModel({
 忙:错误,
 延迟:0
 lineItemListTitle:this.getResourceBundle()。getText(" detailLineItemTableHeading")
 });
 this.getRouter()。getRoute(" object")。attachPatternMatched(this._onObjectMatched,this);
 this.setModel(oViewModel," detailView");
 this.getOwnerComponent()。getModel()。metadataLoaded()。then(this._onMetadataLoaded.bind(this));



 },


 _onObjectMatched:函数(oEvent){
 var sObjectId = oEvent.getParameter(" arguments")。objectId;
 this.getModel(" appView")。setProperty("/img/layout"," TwoColumnsMidExpanded");
 this.getModel()。metadataLoaded()。then(function(){
 var sObjectPath = this.getModel()。createKey(" trip_ids",{
 TRIP_ID:sObjectId
 });
 this._bindView("/" + sObjectPath);
 } .bind(this));
 },

 _bindView:函数(sObjectPath){
//在视图绑定期间设置忙碌指示器
 var oViewModel = this.getModel(" detailView");


//如果未绑定视图,但视图不忙,则只有在绑定请求数据后,视图才再次设置为忙
 oViewModel.setProperty("/img/busy",false);


 this.getView()。bindElement({
 路径:sObjectPath,
 参数:{
 扩展:"段"
 },
 事件:{
 更改:this._onBindingChange.bind(this),
 dataRequested:function(){
 oViewModel.setProperty("/img/busy",true);
 },
 dataReceived:function(){
 oViewModel.setProperty("/img/busy",false);
 }
 }
 });
 },


 _onBindingChange:函数(){
 var oView = this.getView(),
 oElementBinding = oView.getElementBinding();


//没有用于绑定的数据
 如果(!oElementBinding.getBoundContext()){
 this.getRouter()。getTargets()。display(" detailObjectNotFound");
//如果找不到对象,则在主列表中进行选择
//不再有意义。
 this.getOwnerComponent()。oListSelector.clearMasterListSelection();
 返回;
 }


 var sPath = oElementBinding.getPath(),
 oResourceBundle = this.getResourceBundle(),
 oObject = oView.getModel()。getObject(sPath),
 sObjectId = oObject.TRIP_ID,
 sObjectName = oObject.TRIP_ID,
 oViewModel = this.getModel(" detailView");


 this.getOwnerComponent()。oListSelector.selectAListItem(sPath);


 oViewModel.setProperty("/img/shareSendEmailSubject",
 oResourceBundle.getText(" shareSendEmailObjectSubject",[sObjectId]));
 oViewModel.setProperty("/img/shareSendEmailMessage",
 oResourceBundle.getText(" shareSendEmailObjectMessage",[sObjectName,sObjectId,location.href])));

 },

 
付费偷看设置
发送
2条回答
软件心理学工程师
1楼-- · 2020-08-25 01:26

您好 bhawna saini

您似乎错过了

var oSpotsCollection = newsap.ui.vbm.Spots({ 项目:{----->路径:"/img/d/结果", 模板:oSpotTemplate }});

对我来说,相对于发布的json文件而言,它看起来还不错。

现在,oSpotTemplate应该是path:'d/results/',因为它已经在 它是父项

 var oSpotTemplate = newsap.ui.vbm.Spot({position:{
 部分:[{
 路径:"纬度"},{
 路径:" LONGITUDE"}],
 formatter:function(lat,lon){return(lon +";" + lat);}},类型:sap.ui.vbm.SemanticType.Default,文本:'{SPEED}'}); 
< p>只需检查...

还要检查其他聚集的类似问题。

奄奄一息的小鱼
2楼-- · 2020-08-25 01:31

感谢您的回复。 我对SAPUI5相当陌生,这就是为什么让它工作起来有些困惑。 就像我说的那样,使用简单的本地JSON文件不会遇到任何问题。 问题在于oData服务。 我不明白如何在" oSpotsCollection"和" oRouteCollection"中指定路径值。

对于本地json文件,路径值很简单(路径:"/img/d/results"和路径:"/")。 现在,此odata服务具有" _deferred URI",该URL带有为特定的TRIP_ID关联的"旅行详细信息"实体集。 问题是我不知道如何为有界的" Trip_Details"实体集指定路径,以便我可以访问纬度和经度值。

(很抱歉,如果该问题与我的要求重复,我只想获得与本地json数据模型相同的结果)

oData服务的外观如下:

https: //******/data.xsodata/trip_ids/?$format=json

 {
   " d":{
     "结果":[
       {
         " __metadata":{
           " type":" public。*******。trip_idsType",
           " uri":" https://*****services/data.xsodata/trip_ids('00000')"
         },
         " TRIP_ID":" 00000",
         " TRIP_DETAILS":{
           " __deferred":{
             " uri":" https:/******/services/data.xsodata/trip_ids('00000')/TRIP_DETAILS"
           }
         }
       },.....

 } 

https:/************/data.xsodata/trip_ids('00000')/TRIP_DETAILS/?$ format = json

 {
   " d":{
     "结果":[
       {
         " __metadata":{
           " type":" public。******",
           " uri":" https:/*******/data.xsodata/trip_ids('00000')"
         },
         " ID":" 00 ***",
         " TRIP_ID":" 00000",
         " SEGMENT_ID":" 0 *****",
         "纬度":" 44.8527717590332",
         " LONGITUDE":" 20.38993072509765",
         " TIMESTAMP":"/img/Date(1562947105000)/",
         " SPEED":" 21.6"
       },
 

一周热门 更多>