Empresas
Empregos
  • Sobre nós
  • Soluções
    • Publicação de vagas
      Publique sua vaga e receba candidatos qualificados em 48h.
    • Avaliações de candidatos
      Mais de 500 testes técnicos e psicológicos, mais anti-fraude.
    • Headhunting
      Busca executiva personalizada do início ao fim.
    • Folha de Pagamento + EOR
      Dispersão de folha e EOR em mais de 15 países da LATAM.
  • Preços
  • Empregos

0

169
Visualizações
la función getControl("Subgrid").addOnLoad se ejecuta dos veces cuando se crea el registro principal por primera vez

Hola, hice una función que detecta si agregué o eliminé una nueva fila en mi subcuadrícula y ejecuté algunos coce de acuerdo con eso

Normalmente funciona bien en un registro principal existente a menos que cree un nuevo registro principal, presiono guardar, luego agrego una fila en mi subcuadrícula y mi función se ejecuta dos veces por alguna razón

¿Alguien sabe por qué mi código se ejecuta dos veces solo cuando creo un nuevo registro principal, la función está en onLoad incluso?

Tomé el código principal de aquí: (la función dosomething se dispara dos veces)

 function onLoad() { var funtionName = "onLoad"; try { setTimeout(function () { if (Xrm.Page != null && Xrm.Page != undefined && Xrm.Page.getControl("contact_subgrid") != null && Xrm.Page.getControl("contact_subgrid") != undefined) { _rowCount = Xrm.Page.getControl("subgrid").getGrid().getTotalRecordCount(); Xrm.Page.getControl("subgrid").addOnLoad(onGridLoad); } }, 5000); } catch (e) { Xrm.Utility.alertDialog(functionName + "Error: " + (e.message || e.description)); } } function onGridLoad() { var functionName = " onGridLoad "; var currentRowCount = null; try { setTimeout(function () { if (Xrm.Page != null && Xrm.Page != undefined && Xrm.Page.getControl("contact_subgrid") != null && Xrm.Page.getControl("contact_subgrid") != undefined) { currentRowCount = Xrm.Page.getControl("subgrid").getGrid().getTotalRecordCount(); if (currentRowCount > _rowCount) { dosomething(); _rowCount = currentRowCount; } else if (currentRowCount < _rowCount) { dosomethingelse(); _rowCount = currentRowCount; } } }, 2000); } catch (e) { Xrm.Utility.alertDialog(functionName + "Error: " + (e.message || e.description)); } }
about 4 years ago · Juan Pablo Isaza
1 Respostas
Responde à pergunta

0

Su código usa el objeto Xrm.Page , que está obsoleto en Dynamics 365 CE Online/Dataverse. Debe usar la nueva API; consulte Referencia de la API del cliente - MS Docs .

Su función se llama dos veces, porque el sistema llama dos veces a la función onLoad : primero cuando el formulario se abre en el modo "Crear", segundo cuando se guardan los datos en el formulario. Una vez que se han guardado los datos, la página del formulario no se vuelve a cargar, pero, sin embargo, se vuelve a llamar a la función onLoad del formulario. Esto hace que su secuencia de comandos adjunte un segundo controlador onLoad.

Prueba este código. Se basa en la API de script moderna. Asegúrese de que su formulario pase el contexto del formulario a la función onLoad :

 function onLoad(c) { const formContext = c.getFormContext(); const subGrid = formContext.getControl("subgrid"); const contactSubGrid = formContext.getControl("contact_subgrid"); if (subGrid === null || contactSubGrid === null) return; try { setTimeout(() => { let rowCount = subGrid.getGrid().getTotalRecordCount(); subGrid.addOnLoad(controlContext => { setTimeout(() => { let currentRowCount = subGrid.getGrid().getTotalRecordCount(); try { if (currentRowCount > rowCount) { // do something } else if (currentRowCount < rowCount) { // do something else } rowCount = currentRowCount; } catch (e) { Xrm.Navigation.openErrorDialog({ message: e.message, errorCode: e.errorCode }); } }, 2000); }); }, 5000); } catch (e) { Xrm.Navigation.openErrorDialog({ message: e.message, errorCode: e.errorCode }); } }
about 4 years ago · Juan Pablo Isaza Relatório
Responde à pergunta
Encontrar trabalhos remotos

Descubra a nova forma de encontrar um emprego!

melhores empregos
Principais categorias de trabalho
Empresas
Postar vaga Preços Comercial
Jurídico
Termos e Condições Política de privacidade
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Recomende algumas ofertas para mim
Preciso de ajuda