public abstract class InstanceTrigger extends Object
The trigger must be declared under the element
xs:annotation/xs:appinfo
:
where<osd:trigger class="com.foo.MyDataSetTrigger" />
com.foo.MyDataSetTrigger
is
the fully qualified name of the class implementing this interface.
It is also possible to set additional JavaBean properties:
where<osd:trigger class="com.foo.MyDataSetTrigger"> <param1>...</param1> <param2>...</param2> </osd:trigger>
param1
and param2
are JavaBean properties of the specified class.
For more information, see the JavaBean specification.
setParam1(...)
and
setParam2(...)
);setup(TriggerSetupContext)
is called on the new instance.handle...
are called each time the associated operation is executed.
If several operations are defined for the same dataset, they are not executed in any particular order.
Dataset triggers are not invoked in the following contexts:
ProcedureContext.setTriggerActivation(false)
.
ProcedureContext.doMergeToParent(com.onwbp.adaptation.AdaptationHome)
).
ProcedureContext.doImportArchive(ArchiveImportSpec)
).
ProcedureContext.doCopy(com.onwbp.adaptation.Adaptation)
).
In the context of a method handleBefore...
, it is possible to
implement a guard by throwing an OperationException
if
some functional conditions on the data are not satisfied. This will cancel
the current transaction.
Throwing an OperationException
instead of a RuntimeException
provides the end-user with the benefit of a well-localizable and a more user-friendly error message,
when the error happens in the context of the user interface.
In all cases, the current transaction is aborted.
Note: In further detail, if a ProcedureContext
raises an exception, any
preceding updates made on the repository during nested update executions
are first cancelled before the corresponding update method
catches the exception. This additional feature is for ensuring
that the repository and cache remain consistent, even if the corresponding
update method catches the exception.
Constructor and Description |
---|
InstanceTrigger() |
Modifier and Type | Method and Description |
---|---|
void |
handleAfterCreate(AfterCreateInstanceContext aContext)
This method is called after the creation of a dataset.
|
void |
handleAfterDelete(AfterDeleteInstanceContext aContext)
This method is called after the deletion of a dataset.
|
void |
handleAfterDuplicate(AfterDuplicateInstanceContext aContext)
This method is called after the duplication of a dataset
This method is invoked even if
ProcedureContext.setTriggerActivation(boolean)
has been set to false . |
void |
handleAfterModify(AfterModifyInstanceContext aContext)
This method is called after the modification of a field outside a table.
|
void |
handleBeforeCreate(BeforeCreateInstanceContext aContext)
This method is called before the creation of a dataset.
|
void |
handleBeforeDelete(BeforeDeleteInstanceContext aContext)
This method is called before the deletion of a dataset.
|
void |
handleBeforeModify(BeforeModifyInstanceContext aContext)
This method is called before the modification of a field outside a table.
|
abstract void |
setup(TriggerSetupContext aContext)
Checks and prepares this instance when the data model is loaded.
|
public abstract void setup(TriggerSetupContext aContext)
public void handleBeforeCreate(BeforeCreateInstanceContext aContext) throws OperationException
Default implementation does nothing.
OperationException
- when an exception occurs or to prevent the execution of the
subsequent creation (guard role).
Warning: in the case of a mass update, the whole transaction is aborted.public void handleAfterCreate(AfterCreateInstanceContext aContext) throws OperationException
Default implementation does nothing.
OperationException
- when an exception occurs.
Warning: in the case of a mass update the whole transaction is aborted.public void handleBeforeDelete(BeforeDeleteInstanceContext aContext) throws OperationException
Default implementation does nothing.
OperationException
- when an exception occurs or to prevent the execution of the
subsequent deletion (guard role).
Warning: in the case of a mass update the whole transaction is aborted.public void handleAfterDelete(AfterDeleteInstanceContext aContext) throws OperationException
Default implementation does nothing.
OperationException
- when an exception occurs.
Warning: in the case of a mass update the whole transaction is aborted.public void handleBeforeModify(BeforeModifyInstanceContext aContext) throws OperationException
This method will not be called if ProcedureContext.setTriggerActivation(boolean)
has been set to false
.
The default implementation does nothing.
OperationException
- to be thrown as a functional guard, or when an
unexpected exception occurs.
As a consequence, the whole transaction is always aborted.handleAfterModify(AfterModifyInstanceContext)
public void handleAfterModify(AfterModifyInstanceContext aContext) throws OperationException
This method will not be called if ProcedureContext.setTriggerActivation(boolean)
has been set to false
.
The default implementation does nothing.
OperationException
- to be thrown only when an unexpected exception occurs.
As a consequence, the whole transaction is always aborted.
For a functional guard,
it is strongly recommended to implement it in
handleBeforeModify
.handleBeforeModify(BeforeModifyInstanceContext)
public void handleAfterDuplicate(AfterDuplicateInstanceContext aContext) throws OperationException
ProcedureContext.setTriggerActivation(boolean)
has been set to false
.
Default implementation does nothing.
OperationException
- when an exception occurs.