IBatchHook
, la cual contiene todos los métodos disponibles.A continuación se listan los principales métodos definidos en la interfaz IBatchHook
, cada uno de los cuales puede activarse o ignorarse según necesidad:
BatchInit:
Se ejecuta al inicializar un nuevo batch.
BatchPrepare:
Se llama antes de ejecutar un batch.
BatchComplete:
Se ejecuta al finalizar un batch.
UnitProcedurePrepare
/ UnitProcedureComplete:
Eventos relacionados con el inicio y finalización de un Unit Procedure.
PhasePrepare
/ PhaseComplete:
Se ejecutan al inicio y tras la finalización de cada fase.
OperationPrepare
/ OperationComplete
: Se ejecutan al inicio y tras la finalización de las operaciones de la receta.
EquipAllocChange
: Detecta cambios en la asignación de equipos.
EvalUnitAllocation
/ EvalConnAllocation
: Permiten intervenir en la lógica de selección de unidades o conexiones.
LogEquipStatus
: Captura estados de los equipos definidos en el modelo.
RoutineStates
: Método especial que permite declarar qué hooks están activos y si deben ejecutarse también al finalizar el entorno.
Mediante una implementación controlada de estos métodos, es posible extender las capacidades del sistema para registrar eventos, validar condiciones de ejecución, automatizar tareas externas o interactuar con otros sistemas industriales.
El ensamblado debe estar firmado con un nombre fuerte (strong name) para poder ser registrado como servidor COM con la opción /codebase
. Esto se configura desde las propiedades del proyecto, generando una clave (.snk
) o utilizando una existente.
La clase que implementa los hooks debe estar marcada como visible para COM y tener un identificador único:
El proyecto debe compilarse en configuración Release
(o Debug
durante desarrollo) y con plataforma de destino x86
. Esto garantiza la compatibilidad con el entorno Batch, que no admite DLLs de 64 bits.
La clase principal del proyecto debe implementar la interfaz IBatchHook
, que define todos los métodos que pueden ser interceptados durante el ciclo de vida de un batch en AVEVA Batch Management. Cada uno de estos métodos representa un punto de extensión donde es posible insertar lógica personalizada.
La clase debe estar marcada con los atributos que permiten su registro como objeto COM:
Aunque no se utilicen todos, la interfaz IBatchHook
exige que se implementen todos sus métodos. En los casos donde no se requiera lógica específica, los métodos pueden estar vacíos o retornar un valor por defecto según corresponda.
El método RoutineStates
permite declarar qué eventos se desean interceptar. Esto evita llamadas innecesarias al resto de los métodos.
RoutineState
se pueden combinar para activar únicamente los hooks necesarios, o utilizar wwAllCOMInterfaces
para activarlos todos.Una vez compilado el proyecto, el ensamblado debe registrarse en el sistema operativo para que AVEVA Batch Management pueda instanciar la clase Hooks
como servidor COM. Este proceso se realiza mediante la herramienta regasm.exe
incluida en el .NET Framework.
regasm.exe
Debe utilizarse la versión de 32 bits de regasm
, ubicada en:
C:\Windows\Microsoft.NET\Framework\v4.0.30319\regasm.exe
No debe utilizarse la versión de 64 bits (Framework64
) ni la incluida en .NET Core.
El comando a ejecutar, con privilegios de administrador, es:
regasm "RutaCompleta\NombreDelProyecto.dll" /codebase
Por ejemplo:
regasm "C:\Batch\Hooks\bin\x86\Release\BatchHooks.dll" /codebase
El modificador /codebase
permite que el sistema localice la DLL sin necesidad de instalarla en el GAC. Para su uso, el ensamblado debe estar firmado con un nombre fuerte (strong name).
Si el registro es exitoso, se mostrará el mensaje:
Types registered successfully
En caso de que no se registren tipos, verificar:
Que la clase tenga los atributos [ComVisible(true)]
, [Guid(...)]
, y ClassInterfaceType.None
.
Que el ensamblado esté correctamente firmado.
Que se haya compilado como x86
.
Una vez registrada la DLL en el sistema, es necesario indicar al entorno de AVEVA Batch Management qué clase COM debe utilizar para ejecutar los hooks implementados.
COM Interface
La referencia al servidor COM se configura desde el Environment Editor de Batch Management, dentro del entorno en uso.
Abrir el entorno en el Environment Editor.
Buscar el parámetro COM Interface
dentro del objeto de entorno.
Establecer como valor el nombre completo de la clase implementada, en el siguiente formato
<Namespace>.<NombreClase>
Por ejemplo:
Este nombre debe coincidir exactamente con el namespace y el nombre de la clase pública definida en la DLL. El sistema es sensible a mayúsculas y minúsculas.Además, el número de caracteres total no debe superar 20 ya que es el límite que tiene el parámetro COM Interface para configurar en el Environment Editor.
Para verificar que el entorno está reconociendo la clase COM correctamente, se recomienda:
Ejecutar un batch de prueba que dispare alguno de los eventos implementados.
Confirmar que la lógica definida en los métodos de hook se ejecuta correctamente (por ejemplo, escritura en log o generación de mensaje temporal).
En caso de error o de que no se registre actividad, revisar:
Que el nombre en el parámetro COM Interface
sea exacto.
Que la DLL esté registrada correctamente y disponible en la ruta indicada.
Que el servicio de Batch tenga permisos para acceder al archivo y ejecutar la clase.
BatchInit
, BatchPrepare
y BatchComplete
, dejando el resto deshabilitado desde RoutineStates
. Como demostración, se registra información básica en un archivo de log cuando se activan los eventos relevantes.