【问题标题】:How to copy data from OData v4 to JSON with SAP UI5?如何使用 SAP UI5 将数据从 OData v4 复制到 JSON?
【发布时间】:2017-03-15 14:00:20
【问题描述】:

我正在使用 OData v4 将数据从后端加载到前端(使用 SAP UI5 开发),并且我正在使用表单来显示详细信息页面。当我单击“编辑”按钮时,我可以编辑数据。我的实现类似于这个例子:https://sapui5.hana.ondemand.com/explored.html#/sample/sap.ui.layout.sample.Form354/code/Page.controller.js

在编辑某些内容时,数据会直接在模型中编辑,因此会在后端进行更新。但是,我希望能够选择是要保存更改还是要在后端更新之前取消编辑。

我读到其他问题,可以将 ODataModel 复制到 JSONModel 并改用该副本,方法是:

        var oModel = this.getView().getModel();
        var oModelJson = new sap.ui.model.json.JSONModel();
        oModel.read("/Data", {
        success: function(oData, response) {
            oModelJson.setData(oData);
            sap.ui.getCore().setModel(oModelJson, "oJSONModel");
            alert("Success!");
        },
        error: function(response) {
            alert("Error");
        }
    });

但是,读取方法似乎不适用于 OData v4。加载数据的控制器的代码如下所示:

onInit: function() {
    this.oModel = new ODataModel({
        groupId : "$direct",
        synchronizationMode : "None",
        serviceUrl : '/odata/'
    });

    this.getView().setModel(this.oModel, 'oModel');

    var oRouter = sap.ui.core.UIComponent.getRouterFor(this);
    oRouter.getRoute("details").attachPatternMatched(this._onObjectMatched, this);

    this._showFormFragment("display");

},

_onObjectMatched: function (oEvent) {
    this.getView().bindElement({
        path: "/Data(" + oEvent.getParameter("arguments").dataPath + ")",
        model: "oModel"
    });
    //I want to copy the data from the ODataModel to the JSONModel here
},

完成此任务的最佳方法是什么?以及如何使用 OData v4 做到这一点?

【问题讨论】:

    标签: javascript json odata sapui5


    【解决方案1】:

    我想您想在用户取消保存的情况下重置更改。

    对于 V2 ODataModel,有 deferedGroup 概念,您可以使用它来重置更改或提交更改。

    我对 V4 没有太多经验。尽管从文档来看,这是可能的。

    请尝试在constructor 中传递一个updateGroupId。然后您可以按组 ID 选择 resetChangessubmitBatch

    mParameters.updateGroupId?用于更新请求的组 ID。如果未指定更新组 ID,则使用 mParameters.groupId。有效的更新组 ID 是未定义的“$auto”、“$direct”或应用程序组 ID,它是由基本拉丁字母表中的字母数字字符组成的非空字符串,包括下划线。

    谢谢!

    【讨论】:

    • 感谢您的建议。如果我尝试使用 groupID "$direct" 运行 resetChanges,我会收到一条错误消息。而且我似乎无法找到如何使用 V4 设置 deferedGroup。
    • 您不能使用 $ 前缀组。请使用匹配 /^\w+$/ 的字符串。请参阅sapui5.netweaver.ondemand.com/resources/sap/ui/model/odata/v4/… 处的 isValidGroupId 方法
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-04-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多