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