Tengo la siguiente función, que es una parte del diálogo (de donde supuestamente se unen con los datos de la tabla):

handleChangeRow : function() {

        var oTable = sap.ui.getCore().getElementById('WorkOrder');

        var oModel2 = oTable.getModel("test");

        //var oModel2 = oTable.getModel();

        console.log("oModel2 : " + oModel2);

        var odata = oModel2.getProperty("/workorderdata");

        console.log("odata : " + odata);
        var selIndex = oTable.getSelectedIndex();
        var selectedDataObject = odata[selIndex];

        var oDialog = new sap.ui.commons.Dialog("Dialog", {
            modal : true,
            closed : function(oControlEvent) {
                sap.ui.getCore().getElementById('Dialog').destroy();
            }
        });

        oDialog.setTitle("Change Work Order");
        var oLayout = new sap.ui.commons.layout.MatrixLayout( {
            columns : 3,
            width : "100%"
        });

        var oTF = new sap.ui.commons.TextField("scopeITRequestCode", {
            tooltip : 'ScopeIT Request Code',
            editable : true,
            width : '200px',
            value: "{test>/workorderdata/0/scopeITRequestCode}"
        });

        var oLabel = new sap.ui.commons.Label("lbscopeITRequestCode", {
            text : 'ScopeIT Request Code',
            labelFor : oTF
        });

        oLayout.createRow(oLabel, oTF);
}

con value: "{test>/workorderdata/0/scopeITRequestCode}" utilizando "test" id del modelo estoy tratando de conseguir en el modelo de datos:

success : function(data) {          
                this.model = new sap.ui.model.json.JSONModel();

                this.model.setData({

                    workorderdata: data

                });
                sap.ui.getCore().setModel(this.model, "test");
}

que funciona bien, pero sólo para un solo campo de texto. ¿cómo puedo cambiar la referencia "test>/workorderdata/0/scopeITRequestCode" por lo que los cambios serán dinámicos, y el usuario puede cambiar todos los campos de texto? con otras palabras, cómo enlazar el valor de la celda seleccionada de la fila en la tabla con el valor del campo de texto en el cuadro de diálogo?

InformationsquelleAutor user3189516 | 2014-01-15

1 Comentario

  1. 6

    Usted puede encontrar los parámetros pasados a la rowSelectionChange evento aquí:
    https://openui5.hana.ondemand.com/#docs/api/symbols/sap.ui.table.Table.html#event:rowSelectionChange

    Habiendo dicho eso, y suponiendo que el diálogo se une a el mismo modelo de la tabla que hace el código, probablemente se vería como esto:

    handleChangeRow : function(oEv) {
            var oBindingContext = oEv.getParameter("rowContext");
            var oPath = oBindingContext.getPath();
    
            var oDialog = new sap.ui.commons.Dialog("Dialog", {
                title : "Change Work Order",
                modal : true,
                closed : function(oControlEvent) {
                    sap.ui.getCore().getElementById('Dialog').destroy();
                }
            });
            var oLayout = new sap.ui.commons.layout.MatrixLayout( {
                columns : 3,
                width : "100%"
            });
    
            var oTF = new sap.ui.commons.TextField("scopeITRequestCode", {
                tooltip : 'ScopeIT Request Code',
                editable : true,
                width : '200px',
                value: "{test>"+ oPath +"/scopeITRequestCode}"
            });
            var oLabel = new sap.ui.commons.Label("lbscopeITRequestCode", {
                text : 'ScopeIT Request Code',
                labelFor : oTF
            });
            oLayout.createRow(oLabel, oTF);
    }
    

    Por desgracia no estoy seguro sobre cómo obtener el nombre del modelo, pero probablemente también a estar bien si se omite el nombre del modelo en la unión y el uso de setModel en lugar de ser un poco más dinámico:

    oDialog.setModel(oBindingContext.getModel());
    

    Desde el campo de texto y la Tabla está enlazado con el mismo modelo de una actualización en el campo de actualización de ambos controles. Lo que usted está tratando de lograr con el campo de texto es un llamado TwoWayBinding (obtener un valor de la modelo (OneWay) y escribir de nuevo cuando se cambia (Bilateral)) que, por ejemplo, un ODataModel no admite. Usted puede comprobar como este:

    myModel.isBindingModeSupported(sap.ui.model.BindingMode.TwoWay);
    

    Más detalles aquí sobre la Unión y la Unión Modos aquí:
    https://openui5.hana.ondemand.com/#docs/guide/Introduction.1.html
    https://openui5.hana.ondemand.com/#docs/api/symbols/sap.ui.model.BindingMode.html
    https://openui5.hana.ondemand.com/#docs/api/symbols/sap.ui.model.Model.html#isBindingModeSupported

    GL
    Chris

    • Solucionado! Gracias !
    • bien, usted podría marcar la respuesta pregunte a corregir si me sirvió 🙂

Dejar respuesta

Please enter your comment!
Please enter your name here