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

126
Views
EnableRule en la cinta no puede obtener un valor booleano de la función asíncrona

Quiero devolver true o false desde la función showHideAddNewButton . Tengo un EnableRule en un botón de cinta, que llama a una regla personalizada que llama a esta función showHideAddNewButton . Al pasar true , que mostrará el botón, o false , que ocultará el botón.

Tengo que acceder a los statuscode de código de estado (motivo del estado) y statecode estado (estado) en la entidad. Creé una consulta usando Xrm.WebApi.retrieveMultipleRecords , pero no puedo hacer que devuelva una bandera. Quiero que el método retrieveMultipleRecords solo se ejecute y nunca se vuelva a llamar, pero 'devolver verdadero' a continuación se ejecuta configurando mi botón en verdadero siempre.

 function showHideAddNewCsrsRecalculation(primaryControl){ var fileNumber = primaryControl.getAttribute("ssg_filenumber").getValue(); Xrm.WebApi.retrieveMultipleRecords("rrg_csrsfile", "?$select=statuscode,statecode,rr_filenumber&$filter=rr_filenumber eq '" + fileNumber + "'").then( function success(result) { for (var i = 0; i < result.entities.length; i++) { var statusCode = result.entities[i].statecode; var statusReasonCode = result.entities[i].statuscode; //if draft make button invisible if (statusReasonCode == 8676725) return false; //if submitted make button invisible if (statusReasonCode == 8676726) return false; //if inactive make button invisible if (statusCode == 1) return false; } }, function (error) { console.log(error.message); // handle error conditions } ); //if draft make button invisible //if (primaryControl.getAttribute("statuscode").getValue() == 867670025) // return false; //if submitted make button invisible //if (primaryControl.getAttribute("statuscode").getValue() == 867670026) // return false; //if inactive make button invisible //if (primaryControl.getAttribute("statecode") != 'undefined' && primaryControl.getAttribute("statecode").getValue() == 1) // return false; //other options make button visible return true; --> This keeps getting called as a result my button is always visible }
about 4 years ago · Juan Pablo Isaza
1 answers
Answer question

0

La función Xrm.WebApi.retrieveMultipleRecords devuelve una promesa , no un valor booleano real. La función se ejecuta de forma asíncrona, por lo que inmediatamente después de la llamada a esta función, se ejecuta la siguiente línea y esa línea siempre devuelve true .

De hecho, no es posible hacer que una llamada asíncrona sea síncrona. En su lugar, podemos seguir otro enfoque siguiendo estos pasos:

  1. Realice la consulta en la función onload del formulario y almacene el resultado en una variable.
  2. Actualizar la cinta.
  3. Cree un controlador de botón de cinta que devuelva el valor de la variable.
 let isRecalculationButtonVisible = false; function onLoad(context) { const formContext = context.getFormContext(); const filter = "$filter=rr_filenumber eq '" + formContext.getAttribute("ssg_filenumber").getValue() + "' and (statecode eq 1 or statuscode eq 8676725 or statuscode eq 8676726)"; Xrm.WebApi.retrieveMultipleRecords("rrg_csrsfile", "?$select=rrg_csrsfileid&$top=1&" + filter) .then(function (result) { isRecalculationButtonVisible = result.entities.length === 0; }) .catch(function (error) { console.log(error.message); }) .finally(() => { formContext.ui.refreshRibbon(false); }); } function showHideAddNewCsrsRecalculation() { return isRecalculationButtonVisible; }

Como probablemente ya notó, agregué algunas mejoras.

  1. Todo lo que su botón necesita saber es si hay registros que cumplan con condiciones específicas, por lo que no es necesario recuperarlos. Por lo tanto, estas condiciones simplemente se pueden colocar en el filtro de la consulta. También agregué $top=1 porque la cantidad de registros que cumplen las condiciones no es relevante aquí. Como consecuencia, la única verificación que debe realizarse es si se devuelve un registro o no.
  2. Como se explicó, retrieveMultipleRecords devuelve una promesa. El manejo de errores recomendado para las promesas es agregar una función de catch al final de la cadena.
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!