[UI5] ODATA V4中的CRUD

文章目录


前言

ODATA V4在CRUD方面与V2截然不同。

这篇文章简单介绍V4中是如何进行CRUD操作


一、Read

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

需要在Context中调用requestObject方法才能实现数据的读取

oModel.bindContext方法需要绑定对应的Entity或者路径

  • 代码:
javascript 复制代码
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方法创建。

javascript 复制代码
// 创建需要的数据
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创建时不需要刷新也会自动更新数据。

javascript 复制代码
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
javascript 复制代码
 var oTable = this.byId("itemTable")
 var selectedItems = oTable.getSelectedItems()

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

四、Delete

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

  • 在Table中删除所选行
javascript 复制代码
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进行删除
javascript 复制代码
var oModel = this.getView().getModel()
oModel.delete("/Mara('ZZZ')").then(
    function (res) {
        // oModel.refresh()
        // alert("ok")
    },
    function (res) {
        // alert("error")
    })
相关推荐
lu_rong_qq4 天前
SAP B1 登陆报错解决方案 - 系统架构目录服务器选择
sap
LilySesy6 天前
SAP+Internet主题HTML样式选择
前端·html·sap·abap·internet服务·its·扫码枪
SAP学习成长之路7 天前
如何在SM30生成的维护表中增加选择框 CheckBox
开发语言·数据库·sap·健康医疗·abap·代码规范
SAPABAP东芝10 天前
【SAP-ABAP】MIRO--界面增强增加数据导出导入按钮
sap·abap·fico
SAP学习成长之路10 天前
【翻译】伯明翰市议会因 Oracle 系统崩溃而面临 £216.5M 的损失
数据库·oracle·sap
向上的车轮13 天前
ODOO学习笔记(4):Odoo与SAP的主要区别是什么?
笔记·学习·sap·odoo
哲讯智能科技14 天前
SAP Business One市场价格解析
运维·sap·erp
小九不懂SAP18 天前
SAP(PP生产制造)拆解工单业务处理
sap·制造·s4·pp
冰魄禾20 天前
SAP ABAP开发学习——BAPI
运维·开发语言·笔记·运维开发·sap·abap
syounger23 天前
是我们“辜负”了IBM、SAP么?
sap