这是关于如何构建您自己的SAP Fiori Approve Purchase Orders应用程序的教程系列的第九部分。
本教程的目的是逐步向您展示如何构建您自己的SAP Fiori Approve Purchase Orders应用程序,并提供有关为什么某些方面已按原样开发的其他见解。
请参阅介绍性内容发布(教程:构建您自己的SAP Fiori Approve Purchase Order应用程序)了解本教程的背景信息。
之前发布的章节可在此处找到:
第2部分:(教程:构建您自己的SAP Fiori Approve Purchase Order应用程序-第2部分)
在本章中,我们使用SAP Web IDE设置应用程序,并使用模拟数据运行应用程序。
第3部分:(教程:构建您自己的SAP Fiori Approve Purchase Order应用程序–第3部分)
在本章中,我们调整了应用程序的列表屏幕。
第4部分:(教程:构建您自己的SAP Fiori Approve Purchase Order应用程序–第4部分)
在本章中,我们调整了详细屏幕应用程序的第5部分:
第5部分:(教程:构建您自己的SAP Fiori Approve Purchase Order应用程序–第5部分)
在本章中,我们启用了Approve和reject按钮。
第6部分:(教程:构建您自己的SAP Fiori Approve Purchase Order应用程序–第6部分)
在第6章中,我们设置了一个存储全局应用程序状态的新模型。
第7部分:(教程:构建您自己的SAP Fiori Approve Purchase Order应用程序–第7部分)
在第7章中,我们封装了Approve/reject service calls。
第8部分:(教程:构建您自己的SAP Fiori Approve Purchase Order应用程序–第8部分)
在第8章中,我们模拟了后端逻辑。
在第9章中,我们将刷新master和detail屏幕
刷新主屏幕和详细屏幕现在,我们将定义采购订单的订单,以便在采购订单成功批准/拒绝后显示在详细信息屏幕上。在决定下一步选择哪个采购订单时,需要考虑几个因素和场景。在列表和详细信息同时显示在同一屏幕上的设备上,我们需要确保列表的选择与详细信息视图中显示的顺序相对应。一个非常直接的解决方案是刷新主列表并选择第一个可用条目。暴力方法将始终刷新列表,与用户是否取消审批对话框或业务逻辑是否成功执行无关。当然,如果我们只在业务逻辑成功执行的情况下刷新列表,那么这可以很容易地得到优化。但是,如果用户批准列表中的第十个条目,则他/她已经决定不批准条目1到条目9。例如,选择第十一个条目是有意义的。我们将实现一个默认机制来选择给定订单中的下一个采购订单。当批准或拒绝成功时,选择下一个采购订单。如果操作不成功或用户取消了操作,选择将保持稳定。至于审批逻辑,我们将为批量选择准备编码。
该逻辑影响主列表和详细屏幕,公众号返利系统,因此需要是"全局"的。我们已经在中的全局模型中为此定义了两个属性(preferredIDs和currentPOId)模型.js无需详细使用/解释。
文件:型号/模型.js
var oModel=new JSONModel({
isBusyApproving:false,免费云服务器,
isSwipeRunning:false,
preferredIds:[],
currentPOId:null
});
数组preferredIds[]存储id列表当前选择审批。这是必需的,因为我们不知道前期的采购订单操作是否会在后端成功。属性currentPOId存储当前显示在详细信息屏幕中的ID。
由于我们需要存储当前的采购订单ID,因此详细信息控制器中的onObjectMatched函数是一个很好的位置。_onObjectMatched是一个在onInit()中注册的函数,每当URL参数请求新的购买项目时,路由器就会调用它。
文件:控制器/详细信息.controller.js
对象匹配:函数(oEvent){
var sobjectd=oEvent.getParameter参数("参数").objectId;
此.getModel().metadataLoaded()。然后(function(){
var sObjectPath=此.getModel().createKey("ZïCïu Purchaseorder",信息大数据,{
POId:sObjectId
});
此.getModel("globalProperties").setProperty("/currentPOId",sObjectId);this.\u bindView("/"+sObjectPath);
}.bind(this));
},
一旦项目成功完成,我们需要刷新主列表。这是通过函数refreshList()完成的。
文件:控制器/列表选择器.js
clearMasterListSelection:function(){
[…]
},
/***
*触发主列表刷新,而不更改滚动位置
*/
刷新列表:function(){
this_附件("updateFinished",这个_奥利斯特聚焦,这个。\列表);
这个_列表.getBinding("items").refresh();
}
});
RefreshList触发绑定的更新。刷新完成后,服务器 云服务器,关于大数据,将触发updateFinished事件。我们不希望每次列表刷新时都调用focus函数,而只希望通过该函数触发刷新。所以我们用附件。这确保了一旦调用eventhandler,它就会被删除。
现在我们可以将refresh函数连接到approval逻辑。每次采购订单审批/驳回成功时调用此函数
文件:型号/审批人.js
|调用:函数(bSuccess,oGlobalModel){
this.\u iopencallscont–
this.\u bOneWaitingSuccess=bSuccess | | this.\u bOneWaitingSuccess;
如果(this.\u iopencallscont===0){//当我们不在等待另一个呼叫时
this.\u mRunningSwipes={};//开始新一轮
oGlobalModel.setProperty属性("/isSwipeRunning",false);
oGlobalModel.setProperty属性("/isBusyApproving",false);
if(this.\u bOneWaitingSuccess){
this.\u bOneWaitingSuccess=false;
这个_oListSelector.refreshList文件();
}
}
}