Artículo
· 22 mar, 2024 Lectura de 4 min

Tasks & Tricks: El Fish & Chips de los Desarrolladores

 

Hola Comunidad!

 

¿Normalmente trabajas con tareas automáticas? Entonces permíteme que comparta contigo un par de consejos ;-)

 

 

Consejo 1: Como conocer cuando una tarea terminará (aproximadamente):

 

Imagina que tienes una tarea ejecutándose y te encuentras en la encrucijada de decidir si paras la tarea porque está afectando a otro proceso o la dejas terminar porque puede que le queden solo 5 o 10 minutos.

 

Aqui tienes una manera para comprobar cuando terminará tu tarea (aproximadamente).

 

Para este ejemplo he creado una tarea que ejecuta este código:

 

Ahora imagina que entras en la sección de las tareas automáticas y compruebas que la tarea tiene hora de inicio pero no tiene hora de fin (la tarea se está ejecutando) y quieres saber que está haciendo o por donde va la tarea, genial, aquí está mi consejo:

Copia el id de la tarea

 

Ahora ve a la sección de Bloqueos: Operaciones -> Bloqueos -> Gestionar bloqueos y busca el bloqueo que tenga el id de tu tarea:

 

 

 

Haz clicl sobre el id de proceso y pulsa sobre la pestaña variables:

 

Dentro podrás encontrar las variables que están cargadas en memoria:

En mi caso, podemos ver que el valor de i = 9. Podríamos refrescar la pantalla y ver cuanto le cuesta pasar de un valor a otro:

Ahora puedes tomar una decisión con un poco mas de información  😉

 

 

Consejo 2 : Como seguir las migas de pan de un error:

 

Imagina esta situación, tienes una tarea automática que se ejecuta diariamente y (por ejemplo) envía un mensaje a los clientes cuando tienen una cita próxima.

Estos son los (simples) datos del ejemplo:

 

Y este el (realmente simple) código de tu tarea automática:

 

ROUTINE Test.ExampleRoutine [Type=INT]
TestExampleRoutine ;
IterateCustomer()
    For i=1:1:100
    {
        Do ProcesCustomer(i)
    }

    Quit
ProcesCustomer(id)

    New phone, appointmentDate, result
    New today, limitDays

    Set limitDays = 3
    Set today =$H
    Set phone = $$GetCustomerPhone(id)
    Set appointmentDate = $$GetNextAppointment(id)
    If (appointmentDate - today) < (3)
    {
        Set result = $$SendMessage(appointmentDate, phone)
    }
    
    Quit
GetCustomerPhone(id) 

    New phone,notified

    Set phone=$G(^Customers(id,"phone"))
    Set notified=$$CheckNotified(id)
        

    Quit phone

GetNextAppointment(id) 

    New appointmentDate 

    Set appointmentDate=$G(^Customers(id,"appointmentDate"))

    Quit appointmentDate


CheckNotified(id)

    Set phone = ""
    Quit 0
SendMessage(date, phone)

    U 0 W "Message sended to "_phone,!

    Quit 1

 

(Si lo sé código old school)

Este es el resultado de ejecutar la tarea por Terminal:

 

(Continua hata el 555000100)

 

Ahora, imaginemos que esta es tu tarea:

Por el momento, estás muy orgulloso de tu tarea, pero un día decides mejorarla añadiendo un código para validar si ya se ha comunicado a un cliente en el día para evitar comunicarle 2 veces si por algún motivo ejecutases la tarea 2 veces y decides añadir este método:

 

Seguidamente te vas a casa realmente satisfecho de tu trabajo (Posiblemente sea viernes por la tarde). Al día siguiente los clientes te despiertan horrorizados porque no están recibiendo sus notificaciones de próxima visita.

 

Entonces enciendes el ordenador, abres la tarea y ves esto:

Pero.. que ha pasado?, tu tarea funcionaba perfectamente el día anterior... Y aquí es donde el Los de errores de Aplicación viene en tu ayuda 💪.

Navega a: Operaciones- > Logs del Sistema -> Errores de Aplicación

 

Entra en el namespace donde ha ocurrido el error (si no sabes en cual revisa todos) y selecciona la fecha en la que sucedió el error:

 

 

 

Y aquí está tu error, haz click en detalles:

Ahora si te fijas en el apartado "SIGN ON" podrás ver los valores de algunas de las variables que habían cargadas en memoria cuando el error sucedió:

En mi caso como podéis ver cuando sucedió el error el valor de "i" era 15, con esta información podría reprocesar el código de la tarea y encontrar porque fallo. En mi caso lo que pasaba es que cuando valía 15 sobreescribía una variable global.

 

 

Y estos han sido mi par de consejos. Espero que los hayáis encontrado útiles.

 

Muchas gracias por leer mi artículo!  😍

Comentarios (1)1
Inicie sesión o regístrese para continuar