¡Caminando hacia el éxito!

Aprende en Comunidad

Avalados por :

Cómo obtener la longitud de una tabla cargada a través de modelos JSON/oData

  • Creado 01/03/2024
  • Modificado 01/03/2024
  • 2 Vistas
0
Cargando...

Hola a todos,

Tengo datos de un modelo JSON local cargados en una tabla sap.m.Table como se muestra a continuación en la función onBeforeRendering:

var oModel = new sap.ui.model.json.JSONModel();
oModel.loadData("model/model.json", null, true);
this.getView().setModel(oModel);

Y en mi función onAfterRendering, tengo el siguiente código:

alert("dentro de onAfterRendering");
oModel = this.getView().getModel();
var mLength = oModel.getProperty("/data/items/length");
alert(mLength);

Y la alerta me da 'indefinido', ¿cómo obtengo el número total de filas añadidas a la tabla? Correcto, es JSON... pero después tendré que pasar al modelo oData.

Informe JsDoc - Conjunto de herramientas de desarrollo de SAP UI para HTML5 - Referencia de API - sap.ui.model.json.JSONModel

Según la API anterior, he establecido bAync como verdadero. A pesar de eso, obtengo 'indefinido'.

¿Hay alguna manera rápida de obtener la longitud de la tabla cargada a través de modelos JSON/oData?

Pedro Pascal
Se unió el 07/03/2018
Pinterest
Telegram
Linkedin
Whatsapp

4 Respuestas

0
Cargando...

Ninguno de ellos. Los eventos se disparan en el enlace (en realidad, se llaman cambio y dataReceived, mi publicación anterior no era correcta aquí).

Entonces tendrías que hacer algo como:

oBinding = oTable.getBinding("items");

oBinding.attachDataReceived(function() {

var iLength = oBinding.getLength();

// Actualizar elementos de la interfaz de usuario basados en iLength

});

- Max

Respondido el 15/04/2024
LUCIANO RIOJA GHIOTTO
Se unió el 13/07/2019
0
Cargando...

Gracias Max.

He utilizado oTable.getBinding("items").getLength().

tanto en las funciones de renderización antes como después... lo obtuve como '0'. Y mi carga de JSON se realiza en la función onBeforeRendering, no en onInit().

Requisito: tengo un ícono en la barra de herramientas de la tabla, que muestra el número total de registros cargados en la tabla.

¿Y dónde debo usar dataReceived o dataChange? ¿oModel o oTable?

Respondido el 15/04/2024
LUCIANO RIOJA GHIOTTO
Se unió el 13/07/2019
0
Cargando...

¡El único enfoque que funciona tanto para JSON como para el Modelo OData es pasar por el enlace:

oTable.getBinding("items").getLength()

Si tienes un Modelo JSON, esto devolverá lo mismo que oModel.getProperty("/data/items").length (asumiendo que ese es el camino de enlace para tu agregación de elementos). Si tienes un Modelo OData, devolverá el número de registros que potencialmente están disponibles. Recuerda que el Modelo OData solo gestiona un fragmento de los datos reales en el cliente y carga cualquier otro dato a demanda. Así que si hay 300 Órdenes de Venta en el Backend y el cliente actualmente solo tiene los primeros 100 registros, el enfoque anterior seguirá devolviendo 300.

En una nota al margen: Es muy probable (y deberías) trabajar con solicitudes asíncronas. Eso significa que los datos pueden no estar necesariamente allí en onAfterRendering. A mí me parece que quieres activar una acción cuando los datos han sido recibidos por el cliente. Para eso, investiga los eventos dataChange o dataReceived de la clase Binding. También puedes adjuntarte a estos eventos a través de oTable.getBinding("items").

- Max

Respondido el 15/04/2024
LUCIANO RIOJA GHIOTTO
Se unió el 13/07/2019
0
Cargando...

Hola,

¿Has probado el método sencillo?


var objData = oController.getView().getModel("Invoices").getData();
var length = objData.length

Funciona para mis modelos JSON / OData de mi aplicación web, siempre y cuando llegues al contenedor del modelo. Puedes empezar desde el objeto que tiene los datos vinculados, o desde la página/pantalla en sí.


sap.ui.getCore().byId("App--invoicesView").getModel("Invoices").getData().length

o


sap.ui.getCore().byId("idIvoicesList").getModel("Invoices").getData().length

Marius

Respondido el 15/04/2024
LUCIANO RIOJA GHIOTTO
Se unió el 13/07/2019

contacto@primeinstitute.com

(+51) 1641 9379
(+57) 1489 6964

© 2024 Copyright. Todos los derechos reservados.

Desarrollado por Prime Institute

¡Hola! Soy Diana, asesora académica de Prime Institute, indícame en que curso estas interesado, saludos!
Hola ¿Puedo ayudarte?