Business
Jobs
  • About Us
  • Solutions
    • Job Postings
      Post your job and receive qualified candidates in 48h.
    • Candidate Assessments
      500+ technical and psychological tests, plus anti-fraud.
    • Headhunting
      Tailor-made executive search from start to finish.
    • Payroll + EOR
      Payroll dispersal and EOR across 15+ LATAM countries.
  • Pricing
  • Jobs

0

171
Views
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 answers
Answer question

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 Report
Answer question
Find remote jobs

Discover the new way to find a job!

Top jobs
Top job categories
Business
Post vacancy Pricing Sales
Legal
Terms and conditions Privacy policy
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Show me some job opportunities
There's an error!