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

2022-03-03 00:00:00 javascript sapui5 odata

我想更新用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/*, ...*/);

与手动连接路径字符串相比,createKey具有以下优势:

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

注意:

由于createKey依赖于服务元数据中的信息,因此接口需要在$metadata加载后执行。为此,可以使用promise based API metadataLoaded

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

相关文章