Quintiq file version 2.0 
 | 
#parent: #root 
 | 
Method SelectScenario ( 
 | 
  ScenarioMP scenario 
 | 
) as Boolean id:Method_ApplicationMacroPlanner_SelectScenario 
 | 
{ 
 | 
  #keys: '[137862.0.9024813]' 
 | 
  Body: 
 | 
  [* 
 | 
    // Select the active MacroPlan based on passed in scenario 
 | 
    // Set active MacroPlan to the application 
 | 
    // ComponentMDS::Create( Application ) is not available in Editor -- still finding, if exist, all this code will be moved. 
 | 
    status := false; 
 | 
     
 | 
    if( not isnull( scenario ) ) 
 | 
    { 
 | 
      editor := ExternalMDSEditor::Editor(); 
 | 
      allinfo := editor.ObjectInfos(); 
 | 
     
 | 
      mdsInfo := select ( allinfo, Elements, oinfo, 
 | 
                          oinfo.MDSID().MDSKey() = scenario.DatasetMDSID() 
 | 
                          or oinfo.Name() = scenario.DatasetName()); 
 | 
     
 | 
      if ( not isnull( mdsInfo ) ) 
 | 
      { 
 | 
       
 | 
        if( not mdsInfo.IsLoaded() ) 
 | 
        { 
 | 
          scenario.SetAvailable( '' ); 
 | 
        } 
 | 
       
 | 
        loop := true; 
 | 
        p := Progress::Level( 'Loading scenario...', 10 ); 
 | 
       
 | 
        // changed the operation in "p.Current() < p.Maximum()" from <= to < as p.Maximum will never be reached 
 | 
        // causing an infinite loop when a dataset is no longer available 
 | 
        while( loop and p.Current() < p.Maximum() ) 
 | 
        { 
 | 
          componentmds := ApplicationScope.ComponentMDS(); 
 | 
          mdsinstance := select( componentmds, ComponentMDSKinds.ComponentMDSInstances, m, m.MDSID().MDSKey() = scenario.DatasetMDSID() ); 
 | 
       
 | 
          if( not isnull( mdsinstance ) ) 
 | 
          { 
 | 
            mdsinstance.ComponentMDSKind().SelectInstance( mdsinstance ); 
 | 
            componentmds.Apply(); 
 | 
            // To set the data holder if only a scenario has changed. 
 | 
            if( DataHolderActiveScenario.Data() <> scenario ) 
 | 
            { 
 | 
              DataHolderActiveScenario.Data( scenario ); 
 | 
              /*Setting the dataholder manually so that it can trigger the ondatachange for other dataholders that depend on it. When, this  
 | 
              dataholder is bind to extractor to retrieve MacroPlan automatically, it failed to trigger other dataholder ondatachange response when the MacroPlan first created. 
 | 
              */ 
 | 
              DataHolderMacroPlanner.Data( MacroPlan ); 
 | 
            } 
 | 
            status := true; 
 | 
            loop := false; 
 | 
          } 
 | 
          p.Increment(); 
 | 
        } 
 | 
      }  
 | 
    } 
 | 
     
 | 
    return status; 
 | 
  *] 
 | 
} 
 |