| Quintiq file version 2.0 | 
| #parent: #root | 
| Method StartAfterPreprocessing (Boolean canstart, LibOpt_SnapshotOptimizerRunController snapshotruncontroller) as stream[JSON] | 
| { | 
|   Description: | 
|   [* | 
|     If the `LibOpt_OptimizerRunController` gives approval to start the run, then this method calls `StartAfterPreprocessing` to start the `LibOpt_Run`. | 
|      | 
|     This method creates a snapshot if the `LibOpt_Run` was aborted while it was waiting for approval from the `LibOpt_OptimizerRunController`. | 
|   *] | 
|   TextBody: | 
|   [* | 
|     result := null( stream[JSON] ); | 
|      | 
|     // While unlikely, a run can be aborted after the optimizer gave approval to start the run, but before this method is called.  | 
|     // So we include not this.IsAborted() to ensure that the run isn't accidentially started anyway. | 
|     if( canstart and not this.IsAborted() ) | 
|     { | 
|       snapshotruncontroller.StartedOn( DateTime::Now() ); | 
|       result := this.StartAfterPreprocessing(); | 
|     } | 
|     else | 
|     { | 
|       this.Stop(); | 
|       LibOpt_SnapshotWarning::Throw( this,  | 
|                                      snapshotruncontroller, | 
|                                      Translations::LibOpt_OptimizerRunController_WarningAbortedWhileRequested(),  | 
|                                      LibOpt_Issue::Severity_2_Low() ); | 
|     } | 
|      | 
|     return result; | 
|   *] | 
|   InterfaceProperties { Accessibility: 'Module' } | 
| } |