| Quintiq file version 2.0 | 
| #parent: #root | 
| StaticMethod CopyDatasetQuick (LibOpt_Task task, String MDSKind, String namenewdataset,  | 
|   String componentpositionname, Key mdsid) as LibOpt_SnapshotReplannableCopyDataset | 
| { | 
|   Description: | 
|   [* | 
|     Copy the dataset in a Quick (reactive) way. Creating a dataset copy with this method is not robust against rollbacks and errors.  | 
|     By using this method, the dataset will be copied in its own transaction. This transaction is executed in parallel with the transactions of an optimizer run. | 
|     The copying will start after the current transaction finishes. | 
|   *] | 
|   TextBody: | 
|   [* | 
|     // evr3 Mar-19-2020 (created) | 
|          | 
|     options := DatasetCreateOptions::Construct( namenewdataset ) | 
|                                                 .AsCopy( mdsid ) | 
|                                                 .State( DatasetState::StandAloneStorage() ); | 
|      | 
|     dataset := DatasetController::Create( MDSKind, options ); // Don't use the 'dataset' stream. This puts a RW lock on 'dataset' and the currently active dataset.  | 
|      | 
|     run := task.Component().Run(); | 
|     snapshot := LibOpt_SnapshotReplannableCopyDataset::Create( run, | 
|                                                                task,  | 
|                                                                namenewdataset,  | 
|                                                                componentpositionname, | 
|                                                                false // IsMemoryOnly  | 
|                                                                ); | 
|     // Don't reactively pass the snapshot to any method. During a rollback or error the snapshot is destroyed and recreated. | 
|     // This means that the snapshot that was passed to the method might not exist anymore when the reactive method is called. | 
|     // Use LibOpt_SnapshotReplannableCopyDataset::GetSnapshotReplannableCopyDataset instead. | 
|      | 
|     dataset  | 
|     ->| run  | 
|     // Annotate this stream to 'medium' priority. This will ensure that both the dataset copy is unloaded and the snapshot is updated as soon a possible. | 
|     -> Annotate( ReactiveAnnotation::Priority( 1 ) )  | 
|     // Handle the created dataset copy. This method can conditionally delete the dataset if we find out during the optimizer run that it was not required to create a dataset here.  | 
|     -> LibOpt_DatasetCopyConditional::HandleSuccessfulDatasetCopy( namenewdataset ); | 
|      | 
|     // Copying a dataset can fail (for example, if the dataset name is too long). The failure will be shown on the snapshot form. | 
|     dataset -> Exception() -> Annotate( ReactiveAnnotation::Priority( 1 ) ) -> LibOpt_DatasetCopyConditional::HandleFailedDatasetCopy( run, namenewdataset ); | 
|      | 
|     return snapshot; | 
|   *] | 
|   InterfaceProperties { Accessibility: 'Module' } | 
| } |