如何使用SAP UI5将数据从OData v4复制到JSON?

时间:2017-03-15 14:00:21

标签: javascript json odata sapui5

我使用OData v4将数据从我的后端加载到我的前端(使用SAP UI5开发),我使用表单来显示详细信息页面。当我点击"编辑"按钮我能够编辑数据。我的实现与此示例类似:this discussion

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

我读过其他问题,可以将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进行操作?

1 个答案:

答案 0 :(得分:1)

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

对于V2 ODataModel,有deferedGroup概念可用于resetChanges或submitChanges。

我对V4的经验不多。虽然从文档中可以得出结论。

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

  

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

谢谢!