我想更新用 OData 服务填充的表。我正在使用这种方法:
oModel.update("/Products(999)", data, {/*...*/});
我将选定的索引存储在变量中(
myVar1
),我需要将该变量传递给路径字符串。问题是 Products(999)
- 这是使用硬编码行,但如何用变量替换 999
?
通过 V2 ODataModel 的 API
createKey
动态创建路径:
const path = myODataV2Model.createKey("/Products", {
// Key(s) and value(s) of that entity set
"ProductID": myVar1, // with the value 999 for example
"AnotherKeyProperty": "...",
});
myODataV2Model.update(path/*, ...*/); // applies also to .remove
与手动连接路径字符串相比,
createKey
具有以下优点:
ODataUtils.formatValue
)。 例如: 如果 ProductID
具有类型 Edm.Int64
,UI5 将在 输出字符串中附加字符
"l"
,与 OData 规范 对齐: "999"
→ "999l"
encodeURIComponent
api)。 例如: ProductID='sp ace'
→ ProductID='sp%20ace'
由于
createKey
依赖于服务元数据中的信息,因此应在加载 $metadata
后执行 API。为此,可以使用基于 promise 的 API metadataLoaded
。
myODataV2Model.metadataLoaded().then(/*createKey*/);
使用 javascript 连接运算符
+
将变量的值合并到 url 字符串中:
var sIndex = "123";
oModel.update("/Products(" + sIndex + ")", oData, {success: mySuccessHandler, error: myErrorHandler});
顺便说一句:数字类型会自动转换为字符串。
使用反引号“``”内的新 JavaScript 模板字符串语法,它看起来像这样:
var sIndex = "123";
oModel.update(`/Products(${sIndex})`, oData, {success: mySuccessHandler, error: myErrorHandler});