繁体   English   中英

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

[英]How to Create Entity Path Dynamically in UI5?

我想更新一个用OData svc填充的表。 我正在使用这种方法:

oModel.update("/Products(999)", oData, {
  success: mySuccessHandler,
  error: myErrorHandler
});

我在变量中有选定的索引,我需要传递该变量。 问题是Products(999) -这适用于硬编码行,但是如何用变量替换?

通过ODataModel中的API createKey动态创建路径:

const path = myODataModel.createKey("/Products", {
  ProductID: 999, // your dynamic key value
  AnotherKeyProperty: "...",
});
myODataModel.update(path /*,...*/);

与手动串联路径的字符串相比, createKey具有以下优点:

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

注意

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

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

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

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

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM