Espanol Foro

Expand all | Collapse all

eventArgs.getSaveMode

  • 1.  eventArgs.getSaveMode

    SILVER CONTRIBUTOR
    Posted Feb 13, 2020 07:08 PM
    Buen día, alguien por favor que me pueda colaborar porque actualmente no funciona este JS en Dynamics 365 para evitar resolver el caso antes de diligencias un campo adicional??

    en la versiones anteriores funciona, pero en Dynamics 365 Onpremise no realiza la validación

    function
     test(executionContext)
    {   
        var eventArgs = executionContext.getEventArgs();
        var formContext = executionContext.getFormContext(); 
        var valor = formContext.getAttribute("campocustom").getValue();
        
        if (eventArgs.getSaveMode() == 5// Resolve Case
        {        
            if (valor==null)
                {
                    eventArgs.preventDefault();
                    alert("Alerta: Notificacion");
                    
                               
                }       
        }
    }


    ------------------------------
    Rolando Majin

    ------------------------------


  • 2.  RE: eventArgs.getSaveMode

    Posted Feb 14, 2020 06:25 AM
    Edited by Marcelo Sepulveda Feb 14, 2020 06:28 AM

    Buenas Rolando,

    En principio no veo nada raro, mas que en JS es mejor comparar por '===' que por doble '='
    Pon un debugger al comienzo de la función, y fíjate hasta donde llega.

    Llega al eventArgs.getSaveMode() == 5?
    Con que valor viene el eventArgs.getSaveMode()?

    Si llega y viene con 5, "valor" que tipo de campo es? tiene el valor null, o undefined o es un objeto?

    Arrancaría por ahí, y me dices, no veo el close case en la documentación, aunque antes se usaba: https://docs.microsoft.com/en-us/powerapps/developer/model-driven-apps/clientapi/reference/save-event-arguments/getsavemode

    Si ves que no le encuentras la vuelta, no me volvería loco, crea un workflow sincrónico, que se dispare cuando cambie el estado del caso, ahi vez si es un estado de cierre, compruebas si el campo tiene datos y sino, informas el error, parando la ejecución como incorrecta.

    Saludos

    Marcelo



    ------------------------------
    Marcelo Sepulveda
    msepulveda@actiobp.com - Dynamics Consultant
    Actio Procesos y Tecnología S.L.
    ------------------------------



  • 3.  RE: eventArgs.getSaveMode

    SILVER CONTRIBUTOR
    Posted Feb 14, 2020 10:10 AM
    Hola Marcelo,
    hice todas las recomendaciones que me siguieres,  la que me funciona es la del workflow sincrónico, sin embargo a través del WF no puedo mostrar y volver obligatorio  un campo que se debe diligenciar antes de resolver el caso.




    ------------------------------
    Rolando Majin
    Ilumno Servicios de Colombia SAS
    Bogota D.C
    ------------------------------



  • 4.  RE: eventArgs.getSaveMode

    Posted Feb 15, 2020 09:58 AM
    Puede sonar tonto, pero no habrás olvidado pasar el context al registrar la función en el formulario? Intenta con el debugger.

    ------------------------------
    Angel Rodriguez
    Technischer Architekt
    K.Section Business Solutions GMBH
    Viena
    ------------------------------



  • 5.  RE: eventArgs.getSaveMode

    SILVER CONTRIBUTOR
    Posted Feb 15, 2020 10:24 AM
    Hola Ángel, la función está registrada correctamente, no genera ninguna acción el debbuger ni tampoco la función, al parecer para case no funciona la documentación eventArgs.getSaveMode() = 5 que es inactiva
    https://docs.microsoft.com/en-us/powerapps/developer/model-driven-apps/clientapi/reference/save-event-arguments/getsavemode

    ------------------------------
    Rolando Majin
    Ilumno Servicios de Colombia SAS
    Bogota D.C
    ------------------------------



  • 6.  RE: eventArgs.getSaveMode

    Posted Feb 18, 2020 10:38 PM
    Hola Rolando,

    Reproduje el Error y ahora entiendo un poco mejor el problema. Al parecer en el Evento OnSave no se tiene la información de que el Case está siendo Resuelto / Cancelado o Reactivado. En todos los casos se hace un Save (save mode = 1) antes que aparezca el dialogo de confirmación y para entrar los parámetros adicionales, pero no puedes diferenciarlo de un save normal, tampoco se ha cambiado el campo Status (statecode) aún. Al parecer esto pasa en backend o en una lógica adicional en JS.

    Debbuging Case Resolve
    Tienes varias alternativas creo para lograr lo que quieres, pero la más fácil y consistente creo que es ocultar el botón  de Resolve dependencia del valor del campo (campocustom).

    Saludos
    Angel A.


    ------------------------------
    Angel Rodriguez
    Technischer Architekt
    K.Section Business Solutions GMBH
    Viena
    ------------------------------



  • 7.  RE: eventArgs.getSaveMode

    SILVER CONTRIBUTOR
    Posted Feb 19, 2020 11:10 AM
    Buen dia Angel,
    Habia analizado ese escenario  (save mode = 1) en el OnSave y en cualquiere cambio que se realice en el form se presenta la notificación, sin embargo no quiero ocultar el botón Nativo (Resolve Case) porque desde ahí se quiere controlar la resolución del caso.

    que otra alternativa sugieres?

    muchas gracias


    ------------------------------
    Rolando Majin
    Ilumno Servicios de Colombia SAS
    Bogota D.C
    ------------------------------



  • 8.  RE: eventArgs.getSaveMode

    Posted Feb 20, 2020 07:10 AM

    Hola Rolando,

     Según lo que entiendo de tu JS, quieres prevenir que se resuelva el Case si el valor de customcampo es null. Cierto?

    Pues mi sugerencia es:
    si (valor es null) ocultar el botón  de "Resolve"
    en otro caso mostrar el botón  de "Resolve"
    Eso se puede hacer sin programacion usando una ValueRule: miralo https://www.magnetismsolutions.com/blog/adammurchison/2017/10/13/how-to-use-enable-rules-in-dynamics-365-with-the-ribbon-workbench" target="_blank" rel="noopener">aqui y/o aqui

    Adicionalmente puedes agregar una notificación a la form usando una 'Business Rule': "Para Resolver el caso, rellene el campo valor por favor." más o menos como se muestra en esta imagen.

    La segunda opción en sencillez es crear un Plugin sincrono que dispare una excepción, en caso que se intente cambiar el estado del Case y valor sea null. La excepción va a flotar hasta el usuario mostrar un dialogo con el texto deseado (un dialogo de error no muy bonito), y hacer un Rollback a la Transaction que se está ejecutando, impidiendo que el caso se cierre, Es un "preventDefault" un poco más duro, a nivel de Backend,

    Saludos y suerte.





    ------------------------------
    Angel Rodriguez
    Technischer Architekt
    K.Section Business Solutions GMBH
    Viena
    ------------------------------



  • 9.  RE: eventArgs.getSaveMode

    SILVER CONTRIBUTOR
    Posted Feb 20, 2020 08:07 AM
    Hola Angel,

    muchas gracias por el aporte. Sin embargo aclaro mi necesidad.

    Quiero que el campo personalizado, mas exactamente un campo que se llama "Resolución del caso" que es básicamente la respuesta del caso. Este campo debe estar bloqueado y opcional en todo momento y solo se debe habilitar y volver obligatorio cuando se presione el botón "Resolve Case" informando al usuario que debe diligenciar el campo Resolución del caso para resolver el caso.

    Espero haber sido claro, muchas gracias

    ------------------------------
    Rolando Majin
    Ilumno Servicios de Colombia SAS
    Bogota D.C
    ------------------------------



  • 10.  RE: eventArgs.getSaveMode

    Posted Feb 20, 2020 05:47 PM
    O sea si entiendo bien. Tu quieres que es usuario presione "Resolve case", rellene el campo "Resolución del caso" con algún valor que desee y vuelva a presiona el  "Resolve case", esta vez el campo estaría lleno y se aplicaría la lógica estándar. Cierto?

    Yo pondría un Custom Button, que se vea exactamente igual que el original se puede hacer con copiar y pegar en "Ribbon Workbench" con la visibilidad invertida a la del botón original o sea este es visible cuando "Resolución del caso" == null. El original "Resolución del caso" != null.

    La función de este botón seria habilitar y volver obligatorio el campo "Resolución del caso", via JS.

    Así tendrías la funcionalidad descrita arriba y el usuario no nota que son dos botones distintos.

    Saludos

    ------------------------------
    Angel Rodriguez
    Technischer Architekt
    ORBIS AG
    Viena
    ------------------------------



  • 11.  RE: eventArgs.getSaveMode

    SILVER CONTRIBUTOR
    Posted Feb 25, 2020 07:42 AM
    Hola Angel,

    Tendré muy en cuenta tus aportes
    Muchas gracias

    ------------------------------
    Rolando Majin
    Ilumno Servicios de Colombia SAS
    Bogota D.C
    ------------------------------