2017-10-26 8 views
1

OData svcが移入されたテーブルを更新したいとします。私はこのアプローチを使用しています:UI5でエンティティパスを動的に作成する方法は?

oModel.update("/Products(999)", oData, { 
    success: mySuccessHandler, 
    error: myErrorHandler 
}); 

私は変数に選択したインデックスを持っており、その変数を渡す必要があります。問題はProducts(999)です。これはハードコードされた行で動作しますが、変数で置き換える方法はありますか?

答えて

2

あなたODataModelからAPI createKey経由で動的にパスを作成します:手動でパスの文字列を連結するに比べると

var path = oModel.createKey("/Products", { 
    ProductID: 999 // your dynamic key value 
}); 
oModel.update(path, /*...*/); 

を、createKeyは、以下の利点があります。

  • それは常にキーの値を出力指定されたプロパティのEDM type(内部でODataUtils.formatValueを使用)に対応する正しい形式で入力します。 例: のタイプがEdm.Int64の場合、UI5は出力文字列(src)に文字"l"を追加します。
  • どのバックエンドシステムがメタデータを提供しても、キー値が常に正しい順序で出力されます。同じメタデータ定義が与えられると、あるシステムが他のシステムとは異なる順序でキーを持つメタデータを提供する可能性があります。そのような場合、キーを手作業で連結すると、異なるキーオーダーを処理するシステムに転送されたときに、アプリが漠然としたエラーを投げて失敗することになります。
1

は、URL文字列に変数の値をマージするjavascriptの連結演算子+を使用します。

var sIndex = "123"; 
oModel.update("/Products(" + sIndex + ")", oData, {success: mySuccessHandler, error: myErrorHandler}); 

方法によって:数値型は文字列の中に、ここに自動的に変換されます。

関連する問題