Quintiq file version 2.0
|
#parent: #root
|
Method RegisterTask (LibOpt_Task task) as Boolean
|
{
|
Description:
|
[*
|
This method links a `LibOpt_Task` to a `LibOpt_CurrentTransaction`. This only happens when either the `LibOpt_Task` or the `LibOpt_CurrentTransaction` is new.
|
Registering a task sets the (procedurally sorted) `LibOpt_CurrentTransaction.Task` relation. This has multiple purposes, for example:
|
The `LibOpt_Task.PreviousTaskOnCurrentTransaction` relation is used in the `HandleQuillError` method to gracefully handle errors for transactions that have multple tasks.
|
The `LibOpt_CurrentTransaction.LastTask` relation (= `LibOpt_CurrentTransaction.GetTask` method) is used to connect `LibOpt_Snapshots` to the `LibOpt_Task`.
|
*]
|
TextBody:
|
[*
|
// This task is about to be used in a 'dangerous' method. This dangerous method will execute some user code. An error might occur in this method.
|
// To properly handle an error like this, we need to know which tasks are used in the current transaction.
|
// Therefore, we link the task to the transaction if the two weren't linked already.
|
// After the dangerous method is finished, no errors should occur, because we are only executing code from the Optimizer Components library.
|
// Therefore, we can then safely delete the task.CurrentTransaction relation in UnregisterTask.
|
// We use the 'hastoregistertask' variable in UnregisterTask to check if we can delete the task.CurrentTransaction relation.
|
|
hastoregistertask := guard( isnull( task.CurrentTransaction() ), false );
|
|
if( hastoregistertask )
|
{
|
this.Task( relinsert, task );
|
}
|
|
return hastoregistertask;
|
*]
|
}
|