| 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; | 
|   *] | 
| } |