3

我们正在实施扩展的 My Quotations Fiori 应用程序。基本上,我们在 UI 中添加了一个新字段 Sales Order。该字段从后端获取数据,因此我们还扩展了 OData 服务。在第一个视图上,我们可以成功调用数据。但是每当我们通过单击编辑按钮导航到下一个视图时,我们都会收到此错误

属性“SalesOrder”无效。选择“刷新”以更新定价信息。

任何人都知道如何解决这个问题?

这是我们为 S3 视图控制器定制的代码。我们使用 WEB IDE 创建扩展 btw。第二个功能是在报价单没有关联的 SO 时创建销售订单。

manageSalesOrderFields: function() {
    alert("manageSalesOrderFields");
    var salesOrderId = "";

    // hide all fields
    view.byId("salesOrderLabel").setVisible(false);
    view.byId("salesOrderText").setVisible(false);
    view.byId("triggerSalesOrderLabel").setVisible(false);
    view.byId("triggerSalesOrderButton").setVisible(false);

    $.getJSON("/sap/opu/odata/sap/zlord_my_quotation_srv/QuotationHeaderSet('" + quotationId + "')",
        function(data) {
            alert("enterHere");
            salesOrderId = data.d.SalesOrder;
            alert(salesOrderId);
            if (salesOrderId !== "" ){
                view.byId("salesOrderLabel").setVisible(true);
                view.byId("salesOrderText").setVisible(true);
            }else{
                view.byId("triggerSalesOrderLabel").setVisible(true);
                view.byId("triggerSalesOrderButton").setVisible(true);
                view.byId("triggerSalesOrderButton").detachPress(sap.ui.controller("...").createSalesOrder);
                view.byId("triggerSalesOrderButton").attachPress(sap.ui.controller("...").createSalesOrder);
            }
        });
},
createSalesOrder: function () {
    var createSalesOrderDialog = new sap.m.Dialog("createSoDialog", {
        title: "Create Sales Order",
        icon: "sap-icon://sales-order",
        content: [
            new sap.ui.core.HTML({content:"<p style='margin:0;padding: 16px;'>Do want to create a sales order?</p>"})
        ],
        buttons:[
            new sap.m.Button({
                text: "Yes",
                press : function() {
                    var oModel = new sap.ui.model.odata.ODataModel('/sap/opu/odata/sap/zlord_my_quotation_srv/');
                    var oParameter = {
                        "QuotationID" : quotationId
                    };
                    oModel.callFunction('/CreateSalesOrder', 'GET', oParameter, 'null',
                        function (oData, oResponse) {
                            var responseMessage = JSON.stringify(oResponse.body);
                            var responseMessageStart = responseMessage.search('<d:Message>');
                            var responseMessageEnd = responseMessage.search('</d:Message>');
                            responseMessage = responseMessage.substring(responseMessageStart + 11, responseMessageEnd);

                            //show MessageToast
                            sap.m.MessageToast.show(responseMessage);
                            view.byId("triggerSalesOrderLabel").setVisible(false);
                            view.byId("triggerSalesOrderButton").setVisible(false);

                            console.log(responseMessage);
                        },
                        function (oError) {
                            sap.m.MessageToast.show('Error - see log');
                            console.log(oError);
                        }
                    );
                    createSalesOrderDialog.close();
                    createSalesOrderDialog.destroy();
                }
            }),
            new sap.m.Button({
                text: "No",
                press : function() {
                    createSalesOrderDialog.close();
                    createSalesOrderDialog.destroy();
                }
            })
        ]
    });
    createSalesOrderDialog.open();
}

我们没有在下一个视图控制器 (CreateQuotations.view.controller.js) 上编辑任何内容,因为在该视图上显示 SO 编号与我们无关。

4

1 回答 1

0

错误是因为这一行:

salesOrderId = data.d.SalesOrder;

怎么修?

第 1 步:首先在网络选项卡中检查呼叫结果:

/sap/opu/odata/sap/zlord_my_quotation_srv/QuotationHeaderSet('quotationIdId');

样本:

在此处输入图像描述

第 2 步:检查结果层次结构。如何?

console.log(data); //in success call

第 3 步:然后将您的陈述重组为这样的内容

salesOrderId = data.d.results[0].SalesOrder;

希望这可以帮助!

于 2015-07-13T11:20:32.907 回答