[UI5] ODATA V4中的CRUD


前言

ODATA V4在CRUD方面与V2截然不同。
这篇文章简单介绍V4中是如何进行CRUD操作


一、Read

Model不再有read方法, 一般是把Path绑定到View中进行读取, 如果需要额外的读取数据,可使用如下方法

需要在Context中调用requestObject方法才能实现数据的读取
oModel.bindContext方法需要绑定对应的Entity或者路径

  • 代码:
var oModel = this.getView().getModel()
var oContext = oModel.bindContext("/Mara")
oContext.requestObject().then(function (oData) {
   
    // 处理成功的回调
    console.log("Data read successfully:", oData);
}).catch(function (oError) {
   
    // 处理失败的回调
    console.error("Error reading data:", oError);
});

  • 结果:
    在这里插入图片描述

二、Create

Model不再有create方法

创建和Read不一样,需要调用bindList方法创建Binding,然后使用Binding.create方法创建。

// 创建需要的数据
var json = {
   
   "Matnr": 'GOOD',
   "Maktx": 'JOB',
   "Meins": '',
}


var oModel = this.getView().getModel();
var oBinding = oModel.bindList("/Mara")
//创建action
var oContext = oBinding.create(json)
//创建回调
oContext.created().then(
   function (res) {
   
       oModel.refresh()

   },
   function (res) {
   
       alert(res)
   }
)

如果已经绑定了一个Table,则可以直接拿到Bidning
通过Table Binding创建时不需要刷新也会自动更新数据。

var json = {
   
    "Matnr": 'GOOD',
    "Maktx": 'JOB',
    "Meins": '',
}

var oTable = this.byId("itemTable");
var oBinding = oTable.getBinding("items"); //get binding

// var oModel = this.getView().getModel();
// var oBinding = oModel.bindList("/Mara")

var oContext = oBinding.create(json)
oContext.created().then(
    function (res) {
   
        // oModel.refresh()  不需要refresh
    },
    function (res) {
   
        alert(res)
    }
)

三、Update

Model不再有update方法,通过setProperty方法设置字段属性,即可自动发送PUT请求并修改后端数据

  • 如果是绑定在Table
 var oTable = this.byId("itemTable")
 var selectedItems = oTable.getSelectedItems()

 selectedItems.forEach(item => {
   
     var oContext = item.getBindingContext()
     oContext.setProperty("Maktx", '测试'); // 方法结束时,自动执行batch,如果是多个字段,则只会提交一次
 });
  • 或者额外绑定Context,然后再进行字段属性变更
 const contextBinding = oModel.bindContext("/Mara('ZZZ')");
 const targetContext = contextBinding.getBoundContext();
 targetContext.setProperty("Maktx", '测试');
  • 当然,也可以绑定到一个组件之后,再进行属性变更
 this.byId("saveBox").bindElement("/Mara('ZZZ')")
 var oContext3 = this.byId("saveBox").getBindingContext()
 oContext3.setProperty("Maktx", '测试');

四、Delete

删除可以通过context进行,也可以通过model进行, 删除操作不需要调用refresh方法,删除后会自动刷新

  • 在Table中删除所选行
onDeleteButtonPress: function () {
   
    var that = this
    var oTable = this.byId("itemTable")
    var selectedItems = oTable.getSelectedItems()

    selectedItems.forEach(item => {
   
        var oContext = item.getBindingContext()
        oContext.delete().then(
            function (res) {
   
                // oModel.refresh()
                alert("ok")
            },
            function (res) {
   
                alert("error")
            })
    });
},
  • 使用Model进行删除
var oModel = this.getView().getModel()
oModel.delete("/Mara('ZZZ')").then(
    function (res) {
   
        // oModel.refresh()
        // alert("ok")
    },
    function (res) {
   
        // alert("error")
    })

相关推荐

  1. HBaseCRUD

    2024-01-13 14:58:02       11 阅读
  2. PHP常见CRUD函数

    2024-01-13 14:58:02       18 阅读
  3. 手写 UE4 TArray

    2024-01-13 14:58:02       17 阅读

最近更新

  1. TCP协议是安全的吗?

    2024-01-13 14:58:02       16 阅读
  2. 阿里云服务器执行yum,一直下载docker-ce-stable失败

    2024-01-13 14:58:02       16 阅读
  3. 【Python教程】压缩PDF文件大小

    2024-01-13 14:58:02       15 阅读
  4. 通过文章id递归查询所有评论(xml)

    2024-01-13 14:58:02       18 阅读

热门阅读

  1. uniapp搜索附近蓝牙信标(iBeacon)

    2024-01-13 14:58:02       38 阅读
  2. SQL常用时间处理函数总结

    2024-01-13 14:58:02       38 阅读
  3. RNN和LSTM的区别是什么?

    2024-01-13 14:58:02       33 阅读
  4. 利用PowerShell和Mkvtoolnix批量去除视频封面

    2024-01-13 14:58:02       41 阅读
  5. 深入理解虚拟DOM:原理、优势与实践

    2024-01-13 14:58:02       28 阅读
  6. 一文读懂Qt信号与槽的机制

    2024-01-13 14:58:02       31 阅读
  7. 传统的背包问题~3479:【例86.4】 混合背包

    2024-01-13 14:58:02       35 阅读