lunes, 21 de noviembre de 2011

Ejecución de Meta4Objects planificados en el Job Scheduler II

Hace tiempo que no escribía post de desarrollo. La verdad es que he estado bastante liado con un motón de cosas y simplemente hacía referencia a noticias del mundo Meta4. Mis disculpas.

Retomo en este caso un post antiguo para ampliarlo. El post era Ejecución de Meta4Objects planificados en el Job Scheduler y trataba de como planificar la ejecución de Meta4Objects desde código LN4.

Ese post tenía la limitación de no dejar al usuario elegir el modo de planificación. Recordemos que tenemos: Inmediato, Cíclico, Plan anual o Lista de fechas.


En esta ocasión nos valdremos de un objeto de presentación, un Action_bp con una tarea específica: JSForPresentations, que nos ayudará en este propósito.

Lo que haré será primero desde un botón invocar la ejecución de un método que informa una propiedad (de ámbito nodo y tipo Long en este ejemplo) que luego se pasa a presentación y se incluye en un parámetro de la tarea JSForPresentations. Este código concatena una llamada LN4 por in-dirección a través del método clcExecuteLN4JIT

El código de este método que llamaré CXX_PLANIFICACION_PROCESO es:

MsT3 = "MI_M4OBJ"
MsNodo = "MI_NODO de MI_M4OBJ"
MsMetodo = "CXX_PROCESO"
MsAlias = "MI_ALIAS"

MsDQ = CHR(Double_quote)

PRP_LN4_CODE = "{·Execute LN4 Code·,LN4_CODE,·"
PRP_LN4_CODE = PRP_LN4_CODE + "DefineInstanceEx(" + MsDQ + MsAlias + MsDQ + "," + MsDQ + MsT3 + MsDQ + ", M4_AUTOLOAD_OFF, M4_INSTANCE_NOT_SHARED, " + MsDQ + MsDQ + ", M4_ORGANIZATION_L2_TYPE_ANY):"
PRP_LN4_CODE = PRP_LN4_CODE + "sCode = " + MsDQ + MsAlias + "!" + MsNodo + "." + MsMetodo + "()"+ MsDQ + ":"
PRP_LN4_CODE = PRP_LN4_CODE + "clcExecuteLN4JIT(sCode)·}"

Return (M4_SUCCESS)

Es importante el caracter "punto" ("·", tecla shift + 3)

Realmente estamos haciendo: MI_ALIAS!CXX_PROCESO() una vez hubiéramos declarado el Alias de Meta4Object.

Aparte de esto, en una presentación, crearé dentro de un botón y su evento click el siguiente código:

 BEGIN Button bttXXXX

  Idchannel = "CXX_XXXX"
  Idnode = "CXX_XXXX"
  Text = "Planificación desde Presentación"
  BEGIN Evclick Evclick1
    BEGIN Action_method amthdCXX_PLANIFICACION_PROCESO
      Iditem = "CXX_PLANIFICACION_PROCESO"
    END
    BEGIN Action_set asBoxName
      Set = "*C*BOXNAME := 'Planificación del proceso XXX'"
    END
    BEGIN Action_set asBoxList
      Set = "*C*BOXLIST := [PRP_LN4_CODE]

    END
    BEGIN Action_bp bpJobScheduler
      Idbp = "JSForPresentations"
      Load = False
      Localcontext = False
    END

  END
END


Al pulsarse, este botón, se ejecuta el método CXX_PLANIFICACION_PROCESO que genera el contenido de la propiedad PRP_LN4_CODE para después pasarlo al parámetro BOXLIST que hará que se incluya en la tarea JSForPresentations y así poder gestionarse la planificación sin las "ataduras" del anterior post.

Espero que os sirva!!

No hay comentarios: