Quintiq file version 2.0
|
#parent: #root
|
StaticMethod DoFinalizeDataset (stream[JSON] streamsuccess, LibOpt_Task task, output Boolean hascreatedstream_o) as stream[JSON]
|
{
|
Description:
|
[*
|
Finalize the dataset copies that were created on this component.
|
In `DoFinalizeDatasetCopyDelete` the `DeleteCondition` of each dataset copy is checked and the dataset is deleted if needed.
|
In `DoFinalizeDatasetCopyChangeToStandAlone` all the remaining (memory only) dataset copies are converted to stand-alone datasets.
|
*]
|
TextBody:
|
[*
|
// evr3 Jun-30-2020 (created)
|
// If component X is linked to a previous component by using a TaskTransporterOneTransaction, then DoFinalize is not called when an error occurs during the execution of component X.
|
// Therefore, when an error is thrown, all dataset copies that were created before this error are handled in LibOpt_CurrentTransaction::HandleQuillError.
|
// If component X is linked to a previous component by using a TaskTransporterReactive, then the DoFinalize method of this component is still executed.
|
// In this case, a dataset that is created on the 'Finalize' component position still needs to be handled.
|
// In DoFinalizeDatasetCopyDelete and DoFinalizeDatasetCopyChangeToStandAlone we ensure that we do not double check the dataset copies that were already checked in HandleQuillError.
|
|
// For performance reasons, we only want to start a reactive call (and hence a new transaction)
|
// if any LibOpt_SnapshotReplannableCopyDataset (for which HasExecutedDoFinalizeDatasetCopyDelete is still false) exists on this task.
|
if( exists( task,
|
SnapshotComponent.Children.astype( LibOpt_SnapshotReplannableCopyDataset ),
|
snapshot,
|
not snapshot.IsDatasetDeletedByOptimizer()
|
and not snapshot.HasFailedToCreateDataset()
|
and not snapshot.HasExecutedDoFinalizeDatasetCopyDelete()
|
)
|
)
|
{
|
if( not task.Run().InOneTransaction() )
|
{
|
streamsuccess := streamsuccess
|
->|task->LibOpt_DatasetCopyConditional::DoFinalizeDatasetCopyDelete( false )
|
->|task->LibOpt_DatasetCopyConditional::DoFinalizeDatasetCopyChangeToStandAlone()
|
->|streamsuccess;
|
hascreatedstream_o := true;
|
}
|
else
|
{
|
LibOpt_DatasetCopyConditional::DoFinalizeDatasetCopyDelete( task, false );
|
// Convert all memory-only datasets that are not deleted to standalone datasets.
|
LibOpt_DatasetCopyConditional::DoFinalizeDatasetCopyChangeToStandAlone( task );
|
}
|
}
|
|
return streamsuccess;
|
*]
|
InterfaceProperties { Accessibility: 'Module' }
|
}
|