Quintiq file version 2.0 
 | 
#parent: #root 
 | 
StaticMethod LoadOrCreateDataset ( 
 | 
  String datasetName_i, 
 | 
  Boolean loadIfOffline_i, 
 | 
  Boolean createIfNotExists_i, 
 | 
  String storageState_i, 
 | 
  Key planningDatasetKey_i, 
 | 
  Key integrationInstanceKey_i 
 | 
) as Stream 
 | 
{ 
 | 
  Description: 'Make sure that a dataset is available by loading it or creating a new one if necessary.' 
 | 
  TextBody: 
 | 
  [* 
 | 
    fullName     := LibDIF_IntegrationDataset::GetFullName( datasetName_i ); 
 | 
    returnStream := Stream::Success(); 
 | 
     
 | 
    // First see if the dataset is already loaded. 
 | 
    // Use datasetName_i, method FindDatasetKey() will get the fullname itself. 
 | 
    includeOffline := false; 
 | 
    datasetKey     := LibDIF_IntegrationDataset::FindDatasetKey( datasetName_i, includeOffline ); 
 | 
     
 | 
    if( datasetKey = Key::ZeroKey() ) 
 | 
    { 
 | 
      // See if the dataset exists but is offline. 
 | 
      includeOffline := true; 
 | 
      datasetKey     := LibDIF_IntegrationDataset::FindDatasetKey( datasetName_i, includeOffline ); 
 | 
     
 | 
      if( datasetKey = Key::ZeroKey() ) 
 | 
      { 
 | 
        // Does not exist. If required, create a new dataset with the applicable storage state. 
 | 
        if( createIfNotExists_i ) 
 | 
        { 
 | 
          createOptions := DatasetCreateOptions::Construct( fullName ) 
 | 
                                                .State( DatasetState::FromString( storageState_i ) ) 
 | 
                                                .Path( LibDIF_IntegrationDataset::DATASETFOLDER() ); 
 | 
                                                 
 | 
          // Let the returnStream react to the creation of the dataset. 
 | 
          returnStream := LibDIF_IntegrationDataset::CreateDataset( createOptions )->( dataset ) 
 | 
          { 
 | 
            // Register information that can be used to retrieve the Integration-instance of the planning-dataset. 
 | 
            dataset.PlanningDatasetKey( planningDatasetKey_i ); 
 | 
            dataset.IntegrationInstanceKey( integrationInstanceKey_i ); 
 | 
             
 | 
            LibDIF_Util::DebugInfo( storageState_i + "-dataset '" + fullName + "' created in folder '" + LibDIF_IntegrationDataset::DATASETFOLDER() + "'" ); 
 | 
             
 | 
            return Stream::Success();  // Not required, but lets be explicit. 
 | 
          }       
 | 
        } 
 | 
      } 
 | 
      else 
 | 
      { 
 | 
        // Does exist but is offline. If required, load it. 
 | 
        if( loadIfOffline_i ) 
 | 
        { 
 | 
          // Let the returnStream react to the loading of the dataset. 
 | 
          returnStream := DatasetController::Load( datasetKey )->( dataset ) 
 | 
          { 
 | 
            LibDIF_Util::DebugInfo( "Dataset '" + fullName + "' loaded" ); 
 | 
             
 | 
            return Stream::Success();  // Not required, but lets be explicit. 
 | 
          } 
 | 
        } 
 | 
      } 
 | 
    } 
 | 
     
 | 
    // Return a stream that can be used as a trigger for the next action. 
 | 
    return returnStream; 
 | 
  *] 
 | 
  InterfaceProperties { Accessibility: 'Module' } 
 | 
} 
 |