Cómo Crear un Hook de Clonación
Introducción
Etendo permite que cualquier ventana o solapa tenga un botón Clonar. Por defecto, utilizará el método Dal.copy(), pero esto puede sobrescribirse mediante hooks, para implementar una lógica de clonación personalizada para entidades específicas.
¿Cómo crear un Hook de clonación?
Para crear un Hook de clonación, solo tiene que seguir unos pocos pasos:
- Crear una clase Java de tipo
CloneRecordHook - Usar la anotación
@Qualifierpara definir qué entidad clonará esta clase - Sobrescribir los métodos requeridos e implementar su lógica según sus necesidades
- Habilitar el botón Clonar dentro de la solapa asociada con la entidad utilizada en el hook
ExampleCloningHook.java
@ApplicationScoped
@Qualifier(Invoice.ENTITY_NAME)
public class ExampleCloningHook extends CloneRecordHook {
@Override
public boolean shouldCopyChildren(boolean uiCopyChildren) {
//Implementation
}
@Override
public BaseOBObject preCopy(BaseOBObject originalRecord) {
//Implementation
}
@Override
public BaseOBObject postCopy(BaseOBObject originalRecord, BaseOBObject newRecord) {
//Implementation
}
}
API del Hook de clonación
Para crear un Hook de clonación, solo tiene que seguir unos pocos pasos:
-
boolean shouldCopyChildren(boolean uiCopyChildren)Este método devolverá un booleano indicando si el hook utilizará
DalUtil.copy()para copiar las entidades hijas. Por ejemplo, clonar una factura y sus entidades hijas significará que las líneas, impuestos, etc. también se clonan en el nuevo documento. -
BaseOBObject preCopy(BaseOBObject originalRecord)Este método debe devolver el objeto original, que es el parámetro recibido. Aquí puede realizar validaciones especiales o lógica adicional relacionada con el registro original, antes de que sea clonado.
-
BaseOBObject postCopy(BaseOBObject originalRecord, BaseOBObject newRecord)Aquí tiene acceso al registro recién creado, resultado de
DalUtil.copy(). Este método es donde debe implementar la lógica especial después de que el registro sea clonado. Por ejemplo, si el métodoshouldCopyChildrendevuelvefalse, entonces aquí copiaría las entidades hijas con todas las consideraciones especiales necesarias. -
BaseOBObject copy(BaseOBObject bob, boolean copyChildren)Opcional: sobrescriba este método solo cuando la funcionalidad existente no sea suficiente; aquí debe implementar la funcionalidad de clonación manualmente y llamar a
postCopy()por su cuenta. -
boolean shouldResetId()Sobrescriba este método cuando no quiera que
DalUtil.copy()restablezca los IDs de los objetos copiados. Consulte la documentación deDalUtil.copy()para más información. Este método devuelvetruepor defecto. -
int getPriority()Sobrescriba este método cuando exista un hook para la entidad seleccionada (por ejemplo, ya existe un proceso de clonación implementado para facturas y pedidos) y quiera que se utilice su propio hook en su lugar. Se seleccionará y ejecutará el hook con la prioridad más baja por entidad. Devuelve
100por defecto.
¿Cómo ampliar un Hook de clonación ya existente?
La acción de clonación es una acción particular que puede ampliarse creando un nuevo hook, para implementar una lógica personalizada para una entidad específica. Esto tiene la desventaja de que solo se puede usar un hook por entidad, pero existen mecanismos para ampliar esta funcionalidad. Estos son los preActionHooks y postActionHooks. Puede encontrar más información en la siguiente página: Cómo crear trabajos y acciones
Este trabajo es una obra derivada de Guías prácticas de Openbravo Wiki, utilizada bajo CC BY-SA 2.5 ES. Esta obra está licenciada bajo CC BY-SA 2.5 por Etendo.
