在另一个视图的服务URL中传递一个视图的输入值SAP UI5

时间:2018-09-21 08:00:57

标签: odata sapui5 sap sap-fiori

我创建了两个视图-view1和view2。 enter image description here

enter image description here

然后在View1Controller中将输入的值设置为Json模型,并导航到view2。

onInit: function() {

        oModel = new sap.ui.model.json.JSONModel();

    },

    onPress1: function(oEvent) {

        if (typeof(sales) != 'undefined' || sales != null) {

            oModel.setData({
                "myData":{
                "sales": sales,
                "cust": cust,
                "appl": "LEVEL1"    
                }   
            });

            sap.ui.getCore().setModel(oModel);

                var oRouter = sap.ui.core.UIComponent.getRouterFor(this);
                oRouter.navTo("header");

        } else {
            alert("Please select Sales Person..")
        }
    },

    sChange: function(oEvent) {
        sales = this.byId("salesPerson").getValue().split(",").pop();   
    },
    cChange: function(oEvent) {
        cust = this.byId("customer").getValue().split(",").pop();
    }

在view2Controller中,我收到了view1输入的数据并创建了一个Json模型,我想基于view1输入的数据在view2中创建一个表。

 function(Controller, JSONModel, History) {
"use strict";
 var level, sales, cust;
return Controller.extend("dashdashboard.controller.View2", {

    onInit: function() {

           var oModel= sap.ui.getCore().getModel(oModel);

           level = oModel.getProperty("/myData/appl");
           sales = oModel.getProperty("/myData/sales");
           cust = oModel.getProperty("/myData/cust");


    }

现在我正在使用服务URL-sap/opu/odata/sap/ZSD_DASHBOARD1_SRV/ZAPPROVALSet(APPLEVEL='LEVEL1',CUSTOMER='',SPERSON='00000009')/SO_HeaderSet

对于这个URL,我需要传递所有三个值,所以我像这样使用

ZAPPROVALSet(APPLEVEL='"+level+"',CUSTOMER='"+cust+"',SPERSON='"+sales+"')/SO_HeaderSet

请告诉我如何将这个路径绑定到我的view2表中。 它给了我错误。

<Table items="{ path: '/ZAPPROVALSet(APPLEVEL='"+level+"',CUSTOMER='"+cust+"',SPERSON='"+sales+"')/SO_HeaderSet', sorter: { path: 'vbeln' } }" inset="false" id="idProductsTable">

请帮助。

3 个答案:

答案 0 :(得分:1)

我认为您需要为此使用Expression Binding的形式。 (不要忘记在UI5引导程序中设置data-sap-ui-bindingSyntax =“ complex”!)

<Table items="{ path: '{= '/ZAPPROVALSet(APPLEVEL='$(viewModel2>level}',CUSTOMER='$(viewModel2>cust}',SPERSON='$(viewModel2>sales}')/SO_HeaderSet'}', sorter: { path: 'vbeln' } }" inset="false" id="idProductsTable">

有理由吗,为什么要通过Json Model而不是通过Routing Parameters将数据从View1传输到View2?

答案 1 :(得分:0)

我找到了解决此问题的方法。我们应该在从一个视图到另一个视图的路由中发送参数,并使用RoutePatternMatched概念。最后使用_onRoutePatternMatched函数中的.read()来解决它。

在这里,我们可以从参数中获取值,并在将这些值正确放入URL之后传递框架的URL。

您可以参考simple-exercise-on-odata-and-sap-ui5-application

 Call oDataModel.read( pass_your_framed_url_here , { 
    success: function(receivedData){
         //set the received data to local json model and bind that to the view
    } });

答案 2 :(得分:0)

您可以进行读取,但更干净的方法是在模式匹配的处理程序中使用expand进行元素绑定,并在接收到数据时进行绑定。

https://archive.sap.com/discussions/thread/3900020