| Quintiq file version 2.0 | 
| #parent: #root | 
| MethodOverride HandleRollback ( | 
|   LibOpt_Task task | 
| ) | 
| { | 
|   TextBody: | 
|   [* | 
|     task.RecoverFromRollback(); | 
|      | 
|     // recover scaling factor sugesstions, in case those were computed | 
|      | 
|     Transaction::Transaction().Propagate( relation( SnapshotMacroPlannerOptimizer, LibOpt_Run ) ); // need to have correct last snapshot ( declarative relation, used next line) | 
|     Transaction::Transaction().Propagate( relation( SnapshotMacroPlannerOptimizer, PreviousSnapshotMacroPlannerOptimizer ) ); // need the sorting | 
|     Transaction::Transaction().Propagate( attribute( SnapshotMacroPlannerOptimizer, Type ) ); // need to have type below for assert check | 
|      | 
|     snapshot := task.Run().LastSnapshotMacroPlannerOptimizer().PreviousSnapshotMacroPlannerOptimizer(); // last created is post handle result snapshot  | 
|     assert(  snapshot.Type() ~ Translations::LibOpt_SnapshotKPI_CommentPreHandleResult(),   | 
|              'Snapshot type = '+ snapshot.Type()  | 
|               + ' Snapshot used to recover scale factor suggestions is expected to be pre handle result snapshot. Snapshot.seqnr[key]='  | 
|               + [String] snapshot.SequenceNr() + [String]snapshot.Key()  | 
|               + 'run last snapshot = ' + guard([String]task.Run().LastSnapshotMacroPlannerOptimizer().Key(), 'null' ) );  | 
|      | 
|     if ( snapshot.ScaleFactorSuggestedForLevel().Size()  > 0 and this.IsAutoScalingEnabled() )  | 
|     { | 
|       debuginfo( 'Restoring suggested scale factors using snapshot (seqnr, key) = ', snapshot.SequenceNr(), snapshot.Key() );  | 
|       ScaleFactorsSuggestedForLevel::Construct( snapshot.ScaleFactorSuggestedForLevel(), task.Run().Optimization().astype( Optimization ).AlgorithmScaling() ); // recover suggested scale factors | 
|     } | 
|      | 
|     // Log the rollback | 
|     kpi := this.LogKPI( task, Translations::LibOpt_Rollback() ); | 
|     kpi.astype( SnapshotMacroPlannerOptimizer ).IsAccepted( true ); | 
|     kpi.astype( SnapshotMacroPlannerOptimizer ).Parent( relset, guard( kpi.astype( SnapshotMacroPlannerOptimizer ).PreviousOnRun().Parent(), null( LibOpt_Snapshot ) ) ); // need to set parent to get in included in the hierarchy | 
|   *] | 
| } |