javascript 如何在UI5中动态创建OData V2实体路径?

f3temu5u  于 2023-06-04  发布在  Java
关注(0)|答案(2)|浏览(275)

我想更新使用OData服务填充的表。我使用这种方法:

oModel.update("/Products(999)", data, {/*...*/});

我将选定的索引存储在一个变量(myVar1)中,我需要将该变量传递给路径字符串。问题是Products(999)-这是使用硬编码行,但如何用变量替换999

smdncfj3

smdncfj31#

通过API createKey从V2 ODataModel动态创建路径:

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具有以下优点:

  • 它总是以与给定属性的EDM类型对应的正确格式输出键值(在内部使用ODataUtils.formatValue)。**例如:**如果ProductID的类型为Edm.Int64,则UI5会在输出字符串中添加字符"l",与 *OData规范 * 对齐:"999""999l"
  • 它确保所有密钥都根据URI标准进行编码(在内部使用encodeURIComponentapi)。例如:ProductID='sp ace'ProductID='sp%20ace'
  • 它总是以正确的顺序输出键值s,无论哪个后端系统提供元数据。给定相同的元数据定义,一个系统可能以与其他系统不同的顺序提供具有键的元数据。在这种情况下,如果密钥只是手动连接,应用程序将失败,当它被传输到服务不同密钥顺序的系统时,会抛出模糊的错误。

注意事项

由于createKey依赖于来自服务元数据的信息,因此应在加载$metadata之后执行API。为此,可以使用基于promise的API metadataLoaded

myODataV2Model.metadataLoaded().then(/*createKey*/);
7lrncoxx

7lrncoxx2#

使用javascript连接运算符+将变量的值合并到url字符串中:

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

顺便说一下:数字类型因此自动转换为字符串。

相关问题