我想更新一个填充有 OData 服务的表。我正在使用这种方法:
oModel.update("/Products(999)", data, {/*...*/});
我将选定的索引存储在变量 ( myVar1) 中,我需要将该变量传递给路径字符串。问题是Products(999)- 这是使用硬编码行,但如何999用变量替换?
我想更新一个填充有 OData 服务的表。我正在使用这种方法:
oModel.update("/Products(999)", data, {/*...*/});
我将选定的索引存储在变量 ( myVar1) 中,我需要将该变量传递给路径字符串。问题是Products(999)- 这是使用硬编码行,但如何999用变量替换?
通过V2 ODataModel 中的APIcreateKey动态创建路径:
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/*, ...*/);
与手动连接路径的字符串相比,createKey具有以下优点:
ODataUtils.formatValue内部使用)。例如:如果ProductID有 type Edm.Int64,UI5"l"在输出字符串中附加与OData 规范对齐的字符:"999"→"999l"encodeURIComponentapi)。例如: ProductID='sp ace' →ProductID='sp%20ace'由于createKey依赖于来自服务元数据的信息,因此应在$metadata加载后执行 API 。为此,可以使用基于Promise的 APImetadataLoaded。
myODataV2Model.metadataLoaded().then(/*createKey*/);
使用 javascript 连接运算符+将变量的值合并到 url 字符串中:
var sIndex = "123";
oModel.update("/Products(" + sIndex + ")", oData, {success: mySuccessHandler, error: myErrorHandler});
顺便说一下:数字类型在此自动转换为字符串。