jueves, 29 de mayo de 2008

Ejecución de Meta4Objects planificados en el Job Scheduler

Un truco que quizás ya sepais pero que viene bien tenerlo en cuenta. Se trata de poder ejecutar un método de un Meta4Object usando el Job Scheduler.


1er Caso: Ejecución de un método a través de una tarea


Este es el sencillo, creamos una tarea con código LN4 y le añadimos el código:


'Proceso:
Code = ""
MsT3 = "MI_M4OBJ"
MsNodo = "MI_NODO de MI_M4OBJ"
MsMetodo = "MI_METODO de MI_NODO de MI_M4OBJ"
DefineInstance(MsT3,MsT3,0,1)
Code=MsT3 + "!" + MsNodo + "." + MsMetodo + "()"
X=clcExecuteLN4JIT(Code)
Return(X)


De esta forma se ejecuta el método ID_ITEM del nodo ID_NODE del Meta4Object ID_CHANNEL. Planificamos luego con el Job Scheduler la ejecución de esta tarea como necesitemos.


Como podeis ver el método de este ejemplo no tiene parámetros.

Para añadir parámetros:
'Parámetros:
MsIDHR = MsDQ + STD_ID_HR + MsDQ
'Proceso:
MsDQ = CHR(Double_quote)
Code = ""
MsT3 = "MI_M4OBJ"
MsNodo = "MI_NODO de MI_M4OBJ"
MsMetodo ="MI_METODO de MI_NODO de MI_M4OBJ"
DefineInstance(MsT3,MsT3,0,1)
Code= MsT3 + "!" + MsNodo + "." + MsMetodo + "("+ MsIDHR + ")"
X=clcExecuteLN4JIT(Code)
Return(X)

Nota: Puedes consultar el post "Planificación de ejecución de Meta4Objects" para ver cómo se puede planificar este tipo de tareas en el Job Scheduler.

2º Caso: Ejecución de un método introducciendo valores desde un Meta4Object


Este caso me encanta y lo uso mucho... se trata de meter código en un Meta4Object y que se ejecute mediante el Job Scheduler. Por ejemplo lo uso para la generación de informes a texto muy grandes (contabilidad, nómina) y que los envíe a una dirección de correo electrónico que le indico (podría valer para Excel pero el servidor debe disponer de Ms Officce instalado):

'Parámetros:

MsMaildondeEnviar = "oscar.lopezgrandmontagne@gmail.com"
MsFechaCalculo = ToString(DT_PAYMENT,0)

'Proceso:
MsT3 = "MI_M4OBJ"
MsNodo = "MI_NODO de MI_M4OBJ"
MsMetodo = "MI_METODO de MI_NODO de MI_M4OBJ"

MsAlias = "NEW_" + MsT3
MsDQ = CHR(Double_quote)
MsCodeJS = "DefineInstance(" + MsDQ + MsAlias + MsDQ + "," + MsDQ + MsT3 + MsDQ + ", 0, 1):"
MsCodeJS = MsCodeJS + "MsDate = " + MsDQ + MsFechaCalculo + MsDQ + ":"
MsCodeJS = MsCodeJS + "MsMail = " + MsDQ + MsMaildondeEnviar + MsDQ + ":"
MsCodeJS = MsCodeJS + "MsCode = " + MsDQ + MsAlias + "!" + MsNodo + "." + MsMetodo + "(MvDate,MvMail)"+ MsDQ +":"
MsCodeJS = MsCodeJS + "MsReturn = clcExecuteLN4JIT(MsCode," + MsDQ + "MvDate" + MsDQ + ",MsDate," + MsDQ + "MvMail" + MsDQ + ",MsMail):"
MsCodeJS = MsCodeJS + "Return(MsReturn)"
MsTarea = JOB_SCHEDULER!N_JOB_GROUP_DEFS.SUBMIT_JOB("EJECUCION MI INFORME", MsCodeJS ,"ASAP")
SetLog(0,16,110,11,ToString(Format(MsTarea ,0)))
Return (M4_SUCCESS)


Hay que definir un Alias de Meta4object "JOB_SCHEDULER", para poder planificar la tarea.
Espero que os sirva de ayuda


4 comentarios:

Oscar López dijo...

El Meta4Object que hay que poner destrás del Alias JOB_SCHEDULER es:

CH_JS_DEFINITIONS

Se me había pasado...

Un saludo!
Oscar L.

Oscar López dijo...

Nuevo post sobre Job Scheduler y planificación realizada por el usuario:

Ejecución de Meta4Objects planificados en el Job Scheduler II

Ricardo Quiñones dijo...

Hola, Oscar.
Muy buena tu publicación!
Tengo una duda con respecto al parametro ASAP, ¿este especifica la regla de tiempo, verdad? existe otro parametro similar? porque la tarea planificada se genera con horario "(GMT) Monrovia, Casablanca" y se me ejecuta una horas después. Me serviría se se usara "(GMT) System Time"

Oscar López dijo...

Ricardo, perdona por tardar en contestar pero otros "deberes" me han tenido apartado del blog un tiempo...

Paso a contestarte: La forma de invicar al Job Scheduler puede ser tan "compleja" com quieras indicando la/s fecha/s en las que quieres que se ejecute, la ejecución ciclica,...

El principal problema es que Meta4, creo, gestiona todo en base al GMT dado que está pensado para ejecuciones globales a nivel mundial y su referencia es dicha "hora".

Se me ocurre que lo gestiones lanzando tu la hora en la que necesitas segun tu "horario".

Un saludo!
Oscar L.