Quintiq file version 2.0 
 | 
#parent: #root 
 | 
StaticMethod CopyDataset (LibOpt_Task task, String componentpositionname, Boolean hastocreaterobustcopy) as LibOpt_SnapshotReplannableCopyDataset 
 | 
{ 
 | 
  Description: 
 | 
  [* 
 | 
    Create a copy of the current dataset. 
 | 
    If `hastocreaterobustcopy` is `true`, then a memory only copy of the current dataset is created by using the `MDSObject.Copy` method.  
 | 
    If an error or rollback can occur in the same transaction as the current transaction, then it is required to use `hastocreaterobustcopy = true`, otherwise the dataset copy will fail. 
 | 
    If `hastocreaterobustcopy` is `false`, then a standalone storage copy is created by using the `MDSObject::Create` method. 
 | 
  *] 
 | 
  TextBody: 
 | 
  [* 
 | 
    // evr3 Feb-27-2020 (created) 
 | 
    snapshot := null( LibOpt_SnapshotReplannableCopyDataset ); 
 | 
    component := task.Component(); 
 | 
      
 | 
    mdsid := component.MDSID(); 
 | 
    datasetinfo := MDSEditor::Editor().LoadedObjectInfo( mdsid ); 
 | 
     
 | 
    namenewdataset := LibOpt_DatasetCopyConditional::GetNameCopyDataset( component,  
 | 
                                                                         datasetinfo.Name(), 
 | 
                                                                         componentpositionname 
 | 
                                                                         ); 
 | 
    // namenewdataset cannot contain most special characters, because this breaks mdsobject.Copy(). We therefore remove the special characters. 
 | 
    namenewdataset := LibOpt_Utility::RemoveSpecialCharacters( namenewdataset );                  
 | 
    // Check if the new dataset name already exists. 
 | 
    // If another dataset was created very recently, then MDSEditor::Editor().ObjectInfos() might not yet know about this dataset. 
 | 
    // However, we did create a SnapshotReplannableCopyDataset snapshot for this dataset.  
 | 
    // We use this snapshot to check if our new dataset name is not already being used by that dataset.   
 | 
    objectinfos := MDSEditor::Editor().ObjectInfos(); 
 | 
    suffix := 1;     
 | 
    namewithoutsuffix := namenewdataset; 
 | 
    while( exists( component.Run(), Snapshot.Children.astype( LibOpt_SnapshotReplannableCopyDataset ), replannablesnapshot, replannablesnapshot.DatasetName() = namenewdataset ) 
 | 
           or exists( objectinfos, Elements, objectinfo, objectinfo.Name() = namenewdataset ) ) 
 | 
    {     
 | 
      namenewdataset := namewithoutsuffix + "_" + [String] suffix; 
 | 
      suffix++; 
 | 
    } 
 | 
     
 | 
    if( hastocreaterobustcopy ) 
 | 
    { 
 | 
      snapshot := LibOpt_DatasetCopyConditional::CopyDatasetRobust( task, 
 | 
                                                                    namenewdataset, 
 | 
                                                                    componentpositionname, 
 | 
                                                                    mdsid ); 
 | 
    } 
 | 
    else 
 | 
    { 
 | 
      snapshot := LibOpt_DatasetCopyConditional::CopyDatasetQuick( task, 
 | 
                                                                   datasetinfo.Kind(), 
 | 
                                                                   namenewdataset, 
 | 
                                                                   componentpositionname, 
 | 
                                                                   mdsid ); 
 | 
    } 
 | 
     
 | 
    return snapshot; 
 | 
  *] 
 | 
} 
 |