SAPUI5 OData v4-如何更改模型(属性值)

2020-09-08 00:13发布

         点击此处--->   EasySAP.com群内免费提供SAP练习系统(在群公告中)

加入QQ群:457200227(SAP S4 HANA技术交流) 群内免费提供SAP练习系统(在群公告中)


大家好,

我是SAPUI5入门者,我有一个希望可以轻松解决的问题,但现在我不知道如何解决。

我的要求:
我正在显示项目列表,该列表来自OData V4模型。 假设这些是实体字段名称/属性:FieldID,SomeText,Status

该表提供单个选择,下面是一个按钮,该按钮应触发所选行的操作。 用户单击该按钮后,我想更改"状态"-属性并将其发送到后端。 我已经知道当我使用输入字段时如何通过Odata V4将更新发送到后端。 我只是不知道如何在JavaScript函数中以编程方式更改模型属性,而无需将属性链接到输入字段控件。

单击按钮后,我将调用" Press"事件:

 onButtonPressed:函数(oEvent){
   var oBinding = this.byId(" myTableID")。getBinding(" rows"),
       aContext = oBinding.getContexts(),
       oContext = aContext [0],//目前已硬编码(返回第一行)
       sStatus ="已接受"; //状态属性的新值
      
       oContext。?????
 }
 

我必须编写什么代码才能更改模型中的"状态"-属性? 上下文对象可以帮助我实现这一目标是否正确?

亲切问候
马克·安德烈

P.S .:我在API参考中看到,类 sap.ui.model.odata.v4.Context 提供了" requestProperty "方法。 听起来很有趣,但我不知道如何使用该方法访问该属性,因为它仅返回Promise。 我对Promises不熟悉。 我认为我可以为其附加"成功"方法和"错误"方法,但是我仍然不知道该如何获取和操纵该属性。

         点击此处--->   EasySAP.com群内免费提供SAP练习系统(在群公告中)

加入QQ群:457200227(SAP S4 HANA技术交流) 群内免费提供SAP练习系统(在群公告中)


大家好,

我是SAPUI5入门者,我有一个希望可以轻松解决的问题,但现在我不知道如何解决。

我的要求:
我正在显示项目列表,该列表来自OData V4模型。 假设这些是实体字段名称/属性:FieldID,SomeText,Status

该表提供单个选择,下面是一个按钮,该按钮应触发所选行的操作。 用户单击该按钮后,我想更改"状态"-属性并将其发送到后端。 我已经知道当我使用输入字段时如何通过Odata V4将更新发送到后端。 我只是不知道如何在JavaScript函数中以编程方式更改模型属性,而无需将属性链接到输入字段控件。

单击按钮后,我将调用" Press"事件:

 onButtonPressed:函数(oEvent){
   var oBinding = this.byId(" myTableID")。getBinding(" rows"),
       aContext = oBinding.getContexts(),
       oContext = aContext [0],//目前已硬编码(返回第一行)
       sStatus ="已接受"; //状态属性的新值
      
       oContext。?????
 }
 

我必须编写什么代码才能更改模型中的"状态"-属性? 上下文对象可以帮助我实现这一目标是否正确?

亲切问候
马克·安德烈

P.S .:我在API参考中看到,类 sap.ui.model.odata.v4.Context 提供了" requestProperty "方法。 听起来很有趣,但我不知道如何使用该方法访问该属性,因为它仅返回Promise。 我对Promises不熟悉。 我认为我可以为其附加"成功"方法和"错误"方法,但是我仍然不知道该如何获取和操纵该属性。

付费偷看设置
发送
6条回答
路亽曱_Ryan
1楼-- · 2020-09-08 00:37

你们已经有了答案吗? 我也有类似的情况

me_for_i
2楼-- · 2020-09-08 00:31

找到解决方案后,我将发布解决方法。 现在我仍然不知道该怎么做。

土豆飞人
3楼-- · 2020-09-08 00:28

嗨,马克,

在新闻发布会内部,您只需尝试以下代码:

oEvent.getSource()。getBindingContext("您的型号名称").setProperty("/img/property-name"," property-value");

希望这会有所帮助,

谢谢

此致

Rajvardhan Thakare

clasier
4楼-- · 2020-09-08 00:28

嗨Rajvardhan,

感谢您的快速响应,但不幸的是,这没有用。 方法getBindingContext返回未定义。

我已经可以访问OData模型,绑定和上下文对象,并且可以对数据本身进行"读取"访问。 问题在于,在OData v2中,模型(sap.ui.model.odata.v2。 ODataModel )具有setProperty方法,但该方法在OData v4模型类(sap.ui.model.odata.v4.sap.ui.model.odata.v4中不存在。 ODataModel )。


SAP帮助说:" OData V4模型仅支持使用绑定进行数据访问,不提供对数据的任何直接访问。"

因此,我认为必须使用这些类之一来更改模型中的属性:

-sap.ui.model.odata.v4。 ODataListBinding

-sap.ui.model.odata.v4。上下文

我是否完全朝错误的方向前进? 看不到任何会改变属性的方法。

亲切问候
MarkAndré

昵称总是被占用
5楼-- · 2020-09-08 00:28

下面尝试,应该可以。

 onButtonPressed:function(oEvent){
   var oBinding = this.byId(" myTableID")。getBinding(" rows"),
       aContext = oBinding.getContexts(),
       oContext = aContext [0],//目前已硬编码(返回第一行)
       sStatus ="已接受"; //状态属性的新值
      
       var bindingPath = oContext.getPath();

      //现在获取模型
      //如果清单中有模型,则oModel = this.getOwnerComponent()。getModel()
      //如果您已为表分配了模型,则oModel = oTable.getModel()
      //通过模型名称(如果已命名模型),即.getModel(" modelName")

       oModel.setProperty(bindingPath +"/img/Status",sStatus);
 } 
CPLASF-自律
6楼-- · 2020-09-08 00:48

不幸的是,这不起作用。 OData V4模型类中没有" setProperty"方法。

一周热门 更多>