¡Caminando hacia el éxito!

Aprende en Comunidad

Avalados por :

Como obter o comprimento de uma tabela carregada através de modelos JSON/oData

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

Olá a todos,

Tenho dados de um modelo JSON local carregados em uma tabela sap.m.Table como mostrado abaixo na função onBeforeRendering:

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

E na minha função onAfterRendering, tenho o seguinte código:

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

E o alerta me dá 'indefinido', como obtenho o número total de linhas adicionadas à tabela? Correto, é JSON... mas depois terei que mudar para o modelo oData.

Informe JsDoc - Conjunto de ferramentas de desenvolvimento da SAP UI para HTML5 - Referência de API - sap.ui.model.json.JSONModel

De acordo com a API acima, defini bAync como verdadeiro. Mesmo assim, obtenho 'indefinido'.

Existe alguma maneira rápida de obter o comprimento da tabela carregada através de modelos JSON/oData?

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

4 Respuestas

0
Cargando...

Nenhum deles. Os eventos são acionados no link (na verdade, são chamados de change e dataReceived, minha postagem anterior estava incorreta aqui).

Então você teria que fazer algo como:

oBinding = oTable.getBinding("items");

oBinding.attachDataReceived(function() {

var iLength = oBinding.getLength();

// Atualizar elementos da interface do usuário com base em iLength

});

- Max

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

Obrigado Max.

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

tanto nas funções de renderização antes quanto depois... obtive como '0'. E meu carregamento de JSON é feito na função onBeforeRendering, não em onInit().

Requisito: tenho um ícone na barra de ferramentas da tabela, que mostra o número total de registros carregados na tabela.

E onde devo usar dataReceived ou dataChange? oModel ou oTable?

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

O único enfoque que funciona tanto para JSON quanto para o Modelo OData é passar pelo link:

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

Se você tem um Modelo JSON, isso retornará o mesmo que oModel.getProperty("/data/items").length (assumindo que este é o caminho de link para sua agregação de elementos). Se você tem um Modelo OData, retornará o número de registros potencialmente disponíveis. Lembre-se de que o Modelo OData gerencia apenas um fragmento dos dados reais no cliente e carrega qualquer outro dado sob demanda. Portanto, se houver 300 pedidos de venda no Backend e o cliente atualmente tiver apenas os primeiros 100 registros, a abordagem anterior continuará retornando 300.

Em uma nota lateral: É altamente provável (e você deve) trabalhar com solicitações assíncronas. Isso significa que os dados podem não estar necessariamente lá em onAfterRendering. Parece que você deseja acionar uma ação quando os dados forem recebidos pelo cliente. Para isso, investigue os eventos dataChange ou dataReceived da classe Binding. Você também pode se apegar a esses eventos através de oTable.getBinding("items").

- Max

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

Olá,

Já experimentaste o método simples?


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

Funciona para os meus modelos JSON / OData da minha aplicação web, desde que chegues ao contentor do modelo. Podes começar a partir do objeto que tem os dados ligados, ou a partir da página/tela em si.


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

ou


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?