如何在UI5中动态创建OData V2实体路径?
我想更新用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
具有以下优势:
- 它总是以与给定属性的EDM type相对应的正确格式输出键值(在内部使用
ODataUtils.formatValue
)。例如:如果ProductID
的类型为Edm.Int64
,则UI5在output string中追加字符"l"
,以对齐OData规范:"999"
→"999l"
- 它确保所有键都按照URI标准编码(内部使用
encodeURIComponent
api)。例如:ProductID='sp ace'
→ProductID='sp%20ace'
- 无论哪个后台系统提供元数据,都会按顺序输出键值s。在给定相同的元数据定义的情况下,一个系统可能以与其他系统不同的顺序提供具有键的元数据。在这种情况下,如果只是手动连接密钥,应用程序在传输到服务于不同按键订单的系统时会出现可怕的故障,并抛出模糊的错误。
注意:
由于createKey
依赖于服务元数据中的信息,因此接口需要在$metadata
加载后执行。为此,可以使用promise based API metadataLoaded
。
myODataV2Model.metadataLoaded().then(/*createKey*/);
相关文章