Quintiq file version 2.0 
 | 
#parent: #root 
 | 
Method Execute ( 
 | 
  AlgorithmRun algorithmrun, 
 | 
  Period_MPs periods, 
 | 
  Units units, 
 | 
  OptimizerPuzzle optimizerpuzzle 
 | 
) as stream[JSON] 
 | 
{ 
 | 
  TextBody: 
 | 
  [* 
 | 
    mp := this.Optimization().astype( Optimization ).MacroPlan();  
 | 
     
 | 
    periodstart := minselect(  periods, Elements, p, true, p.Start() );  
 | 
    periodend := maxselect(  periods, Elements, p, true, p.Start() );  
 | 
     
 | 
    run := LibOpt_Run::Create( this );  
 | 
     
 | 
    this.CreateRunWithContexts( algorithmrun, run, units, periodstart, periodend );  
 | 
     
 | 
    outscope := LibOpt_Scope::Create( run );  
 | 
    this.SubscribeRunToKPIs( run ); 
 | 
    traverse( this.DefaultScope(), Elements, se, not se.istype( OptimizerPuzzleInOptimizerRun ) and not se.istype( PeriodInOptimizerRun ) )  
 | 
    { 
 | 
      outscope.Add( se );  
 | 
    } 
 | 
    traverse( periods, Elements, p )  
 | 
    { 
 | 
      outscope.Add( p );  
 | 
    } 
 | 
     
 | 
    outscope.Add( optimizerpuzzle );  
 | 
     
 | 
    run.SetStartScope( outscope );  
 | 
     
 | 
    rcm := select( run, RunContext.astype( RunContextMeta ), rc, true, true );  
 | 
     
 | 
    // save used settings to active settings, so we save the last used when the user kicks off a run  
 | 
    this.ActiveSettings().astype( OptimizerMetaSettings ).SaveLastUsedSettings( rcm, optimizerpuzzle.Name(), mp.StrategyMacroPlan().Name(), periodstart.StartDate(), periodend.StartDate() );  
 | 
     
 | 
    this.CreateComponents( run );  
 | 
    strm := run.Start(); 
 | 
    strm->| this->MyFinalize(); 
 | 
    return strm; 
 | 
  *] 
 | 
  InterfaceProperties { Accessibility: 'Module' } 
 | 
} 
 |