2014-02-17 48 views
2

在我SAPUI5的應用程序,我有這應該在等待的OData模型.create()服務的響應(因爲它需要一段時間才能得到響應回到UI)運行進度指示器作出了動畫。如何製作異步OData .create()請求?

的問題是,.create()請求發送動畫後停止。

有誰知道如何使一個異步.create() OData的要求嗎?

我的代碼如下所示:

oODModel = new sap.ui.model.odata.ODataModel(myUrl); 
oEntry = myNewDataEntry; 
myAnimationIndicator.start();   //animation starts to run 
var onSuccess = function(){myAnimationIndicator.stop();}; 
var onError = function(){myAnimationIndicator.stop();}; 
oODModel.create('myDataSet',oEntry, null, onSuccess, onError); //From here the animation stops 
+0

不應該路徑是'/ myDataSet'? –

+0

創建異步使用批而不是創建(),請參閱https://openui5.hana.ondemand.com/docs/api/symbols/sap.ui.model.odata.ODataModel.html#createBatchOperation –

回答

1

請問ODataModel .read(?SPATH,oContext?oUrlParams?bAsync,fnSuccess?fnError)方法就足夠了?

相反的是.create()方法,它執行,而不是一個POST GET請求,但允許異步請求(默認爲異步)

0

沒有,.read()不能做的工作我想要。我需要在後端進行更改。

順便說一句,這裏是一些信息,我從別人了,我想與大家分享:

解決方案1:我用SAPUI5 1.14.6,我剛剛得到的信息,關於sapui5 1.19.1 ,新的.create()API是:

oODModel.create('myDataSet',oEntry,null,onSuccess,onError,bAsyn);

顯然,最後一個參數提供了我一直在尋找的可能性。

解決方案2:一種可以重寫由他自己喜歡的方法:

sap.ui.model.odata.ODataModel.prototype.create =函數(SPATH,ODATA,oContext,fnSuccess,fnError,bAsync){.. 。}

但是。它需要一些額外的編碼,並且不容易維護。如果框架能夠完成這項工作,這不是一個好的解決方案如果無法獲得正確版本的sapui5,並且急於完成任務,它只能是一種選擇。

3

的SAPUI5 ODataModel改變前一段時間,現在你必須使用絕對路徑與ODataModel如「/ myDataSet」而不是「myDataset」你不停地顯示。我認爲這可能是你的問題的根源,以及爲什麼你的電話在顯示進度指示之前出錯。

由於@Qualiture凸顯OData的調用都是異步,你不需要改變任何paramater。有趣的是,你使用的是版本1.19.1,而我們其他人可以使用的OpenUI5快照目前是1.16.8,不管它的版本是否向後兼容,所以你不需要改變。應該!!

它爲什麼被添加。我的猜測是,大多數情況下您希望使用異步調用,這就是爲什麼它是默認設置的原因,有些用例可能需要使用POST執行同步調用,例如調用實體功能或發送一個更新onBeforeUnload,你不能等待回調,在這些場景中,我選擇將這個調用包裝在一個具有boolean異步參數的BATCH操作中,如果它在Create方法中可用,將很容易。你可能會考慮使用oDModel.createEntry(sPath,property)與oDModel.submitChanges(...)而不是oDModel.create(...)這是一個相對較新的功能,它會在發送之前根據實體元數據驗證您的數據,併爲您創建可綁定的上下文。

你也可能要使用的模型事件controling進度動畫,你可以對所有的操作,一旦設置這些,而不是依靠個人的回調

oDModel.attachRequestSent(function (oEvent) { 
    myAnimationIndicator.stop(); 
}); 

oDModel.attachRequestCompleted(function (oEvent) { 
    myAnimationIndicator.stop(); 
}); 

oDModel.attachRequestFailed(function (oEvent) { 
    myAnimationIndicator.stop(); 
}); 

看到JSBIN: RowRepeater with Stackoverflow data爲例

+0

嗨Jasper_07,FYI ,myUrl就像「.._ SRV /」,所以當它添加「myDataSet」字符串時,路徑是「.._ SRV/myDataSet」。我在其他情況下看到根URL是「.._ SRV」,那麼路徑應該像「/ myDataSet」一樣添加。否則,該服務將無法工作。正如你所提到的,嘗試其他方法是一個好主意。謝謝。 –