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

Odata 如何在UI5中动态创建实体路径?,odata,sapui5,Odata,Sapui5,我想更新用OData svc填充的表。我正在使用这种方法: oModel.update("/Products(999)", oData, { success: mySuccessHandler, error: myErrorHandler }); 我在变量中有所选的索引,我需要传递该变量。问题是Products(999)-这适用于硬编码行,但如何替换为变量?使用javascript连接运算符+将变量的值合并到url字符串中: var sIndex = "123"; oModel.upd

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

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

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

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

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

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

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

const path=myODataModel.createKey(“/Products”{
ProductID:999,//您的动态键值
另一个KeyProperty:“…”,
});
myODataModel.update(路径/*,…*/);
与手动连接路径字符串相比,
createKey
具有以下优点:

  • 它总是以与给定属性对应的正确格式输出键值(内部使用)例如:如果
    ProductID
    的类型为
    Edm.Int64
    ,UI5会在与OData规范对齐的字段中添加字符
    “l”
    “999”
    → <代码>“999l”
  • 它确保所有密钥都按照URI标准进行编码(内部使用
    encodeURIComponent
    例如:
    ProductID='sp ace'
    → <代码>ProductID='sp%20ace'
  • 无论哪个后端系统为元数据提供服务,它总是以正确的顺序输出键值s。给定相同的元数据定义,可能有一个系统使用与其他系统不同的键来提供元数据。在这种情况下,如果只是手动连接密钥,应用程序在传输到为不同密钥顺序服务的系统时会出现严重的错误

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

myODataModel.metadataLoaded()。然后(/*createKey*/);