2

私の SAPUI5 アプリでは、OData モデル.create()サービスの応答を待っている間 (UI に応答を返すのに時間がかかるため)、進行状況インジケーターによって作成されたアニメーションを実行する必要があります。

.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
4

4 に答える 4

3

SAPUI5 ODataModel は少し前に変更されましたが、ODataModel で絶対パスを使用する必要があります。これがおそらく問題の根源であり、進行状況インジケーターを表示する前に呼び出しがエラーになる理由だと思います。

@Qualiture が強調しているように、OData 呼び出しはデフォルトで非同期であるため、パラメーターを変更する必要はありません。興味深いことに、あなたはバージョン 1.19.1 を使用しており、他のユーザーが利用できる OpenUI5 スナップショットは現在 1.16.8 です。バージョンに関係なく、下位互換性があるため、変更する必要はありません。するべきです!

追加された理由。私の推測では、ほとんどの場合、非同期呼び出しを使用する必要があるため、非同期呼び出しがデフォルト設定になっています。たとえば、Entities 関数の呼び出しや送信など、POST で同期呼び出しを実行したい場合があります。更新 onBeforeUnload では、コールバックを待つことができません。これらのシナリオでは、ブール型の非同期パラメーターを持つ BATCH 操作で呼び出しをラップすることを選択しましたが、Create メソッドで使用できる場合は簡単です。

知らないかもしれないことがさらにいくつか追加されました。oDModel.create(...) の代わりに oDModel.createEntry(sPath,property) を oDModel.submitChanges(...) とともに使用することを検討してください。これは比較的新しい機能です。送信前にエンティティ メタデータに対してデータを検証し、バインド可能なコンテキストも作成します。

また、個々のコールバックに依存するのではなく、すべての操作に対してこれらを一度設定できるため、プログレス アニメーションを制御するためにモデル イベントを使用することもできます。

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

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

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

例については、 JSBIN: Stackoverflow データを含む RowRepeater を参照してください。

于 2014-02-19T04:29:46.463 に答える
1

ODataModel .read(sPath, oContext?, oUrlParams?, bAsync? , fnSuccess?, fnError?)メソッドで十分でしょうか?

.create() メソッドとは対照的に、POST ではなく GET 要求を実行しますが、非同期要求を許可します (デフォルトは非同期です)。

于 2014-02-17T14:23:42.030 に答える
0

いいえ、 .read() は私が望む仕事をすることができません。バックエンドで変更を加える必要があります。

ところで、ここに私が他の人から得たいくつかの情報があります。共有したいと思います。

解決策 1: SAPUI5 1.14.6 を使用していましたが、sapui5 1.19.1 で新しい .create() API が次のようになっているという情報を入手しました。

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

明らかに、最後のパラメーターは、私が探していた可能性を提供します。

解決策 2: 次のように、メソッドを自分でオーバーライドできます。

sap.ui.model.odata.ODataModel.prototype.create = function(sPath, oData, oContext, fnSuccess, fnError, bAsync) { ...}

でも。追加のコーディングが必要であり、保守が容易ではありません。フレームワークが仕事をすることができるなら、良い解決策ではありません。適切なバージョンの sapui5 を入手できず、急いでタスクを完了したい場合にのみ、オプションになります。

于 2014-02-18T15:02:09.963 に答える
0

非同期で作成するには、create() の代わりにBatch を使用します。

createBatchOperation    
addBatchChangeOperations
submitBatch

ドキュメント: sap.ui.model.odata.ODataModel

于 2015-03-11T15:51:19.747 に答える