写点什么

在 Business Application Studio 里使用 SAP UI5 应用消费 OData 的 Create 和 Delete 操作

作者:Jerry Wang
  • 2022 年 7 月 20 日
  • 本文字数:1889 字

    阅读完需:约 6 分钟

在 Business Application Studio 里使用 SAP UI5 应用消费 OData 的 Create 和 Delete 操作

在 SAP Business Application Studio 里创建一个 SAP UI5 应用,应该具有如下的项目结构:



打开 Home.view.xml, 添加一个 Create 按钮:


<Button id="createButton" icon="sap-icon://add" tooltip="Create" visible="true" press="onOpenAddDialog">
复制代码



该按钮被点击后,我们期望弹出一个对话框,该对话框的实现源代码如下:




打开和关闭对话框的源代码:


onOpenAddDialog: function () {   this.getView().byId("OpenDialog").open();},onCancelDialog: function (oEvent) {   oEvent.getSource().getParent().close();},
复制代码


对话框里调用的 onCreate 方法代码如下:


onCreate: function () {                var oSo = this.getView().byId("idSo").getValue();                if (oSo !== "") {                    const oList = this._oTable;                        const oBinding = oList.getBinding("items");                        const oContext = oBinding.create({                            "soNumber": this.byId("idSo").getValue(),                            "customerName": this.byId("idCustName").getValue(),                            "customerNumber": this.byId("idCustomer").getValue(),                            "PoNumber": this.byId("idPo").getValue(),                            "inquiryNumber": this.byId("idInqNumber").getValue()                              });                        oContext.created()                        .then(()=>{                                // that._focusItem(oList, oContext);                                this.getView().byId("OpenDialog").close();                        });                  }else {                    MessageToast.show("So cannot be blank");                }                },
复制代码


this._oTable 的赋值,发生在 onInit 钩子函数里:


this._oTable = this.byId("table0");
复制代码



下面进行测试。点击 Create 按钮,弹出对话框:



维护了必填字段后,点击 Create:



能看到成功创建的 Sales Order:



下面进行删除操作的实现。


我们设计一个 Edit 按钮,只有再进入 Edit 模式,才允许点击删除按钮:


<Button id="deleteButton" icon="sap-icon://delete" tooltip="Delete" visible="false" press="onDelete"><Button id="editModeButton" visible="true" icon="sap-icon://edit" tooltip="Edit" press="onEditMode">
复制代码



Edit 按钮的实现逻辑:


onEditMode: function(){     this.byId("editModeButton").setVisible(false);     this.byId("saveButton").setVisible(true);     this.byId("deleteButton").setVisible(true);     this.rebindTable(this.oEditableTemplate, "Edit");}
复制代码


实现 onDelete 函数:


onDelete: function(){
var oSelected = this.byId("table0").getSelectedItem(); if(oSelected){ var oSalesOrder = oSelected.getBindingContext("mainModel").getObject().soNumber; oSelected.getBindingContext("mainModel").delete("$auto").then(function () { MessageToast.show(oSalesOrder + " SuccessFully Deleted"); }.bind(this), function (oError) { MessageToast.show("Deletion Error: ",oError); }); } else { MessageToast.show("Please Select a Row to Delete"); } },
复制代码


OData V4 模型允许开发人员指定是否将请求捆绑并作为批处理请求(Batch request)发送,以及何时发送请求。


参数 groupId 指定默认批处理组,默认为 $auto。 开发人员可以使用参数 updateGroupId 为更新请求设置批处理组。 如果不设置此参数,将使用 groupId。


以下代码实例化了一个模型,该模型将批处理组“myAppUpdateGroup”中的所有更新请求捆绑在一起; 然后可以使用 oModel.submitBatch("myAppUpdateGroup") 发送批处理请求。


sap.ui.define(["sap/ui/model/odata/v4/ODataModel"], function (ODataModel) {    var oModel = new ODataModel({        serviceUrl : "/sap/opu/odata4/IWBEP/V4_SAMPLE/default/IWBEP/V4_GW_SAMPLE_BASIC/0001/",        synchronizationMode : "None",        updateGroupId : "myAppUpdateGroup"    });});
复制代码


发布于: 刚刚阅读数: 3
用户头像

Jerry Wang

关注

🏆InfoQ写作平台-签约作者🏆 2017.12.03 加入

SAP成都研究院开发专家,SAP社区导师,SAP中国技术大使。2007 年从电子科技大学计算机专业硕士毕业后加入 SAP 成都研究院工作至今。工作中使用 ABAP, Java, JavaScript 和 TypeScript 进行开发。

评论

发布
暂无评论
在 Business Application Studio 里使用 SAP UI5 应用消费 OData 的 Create 和 Delete 操作_Cloud_Jerry Wang_InfoQ写作社区