Odata 如何在UI5中动态创建实体路径?
我想更新用OData svc填充的表。我正在使用这种方法: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
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
,UI5会在与OData规范对齐的字段中添加字符Edm.Int64
:“l”
→ <代码>“999l”“999”
- 它确保所有密钥都按照URI标准进行编码(内部使用
)例如:encodeURIComponent
→ <代码>ProductID='sp%20ace'ProductID='sp ace'
- 无论哪个后端系统为元数据提供服务,它总是以正确的顺序输出键值s。给定相同的元数据定义,可能有一个系统使用与其他系统不同的键来提供元数据。在这种情况下,如果只是手动连接密钥,应用程序在传输到为不同密钥顺序服务的系统时会出现严重的错误
注 由于
createKey
依赖于来自服务元数据的信息,因此应在加载$metadata
后执行API。为此,可以使用
myODataModel.metadataLoaded()。然后(/*createKey*/);