我想更新一个填充有 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"
encodeURIComponent
api)。例如: 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});
顺便说一下:数字类型在此自动转换为字符串。