| Quintiq file version 2.0 | 
| #parent: #root | 
| Method Capture ( | 
|   LibOpt_Task task, | 
|   String comment | 
| ) | 
| { | 
|   Description: 'Note: the given task can be null.' | 
|   TextBody: | 
|   [* | 
|     suboptimizer := guard( task.Component().astype( LibOpt_Suboptimizer ), null( LibOpt_Suboptimizer ) ); | 
|      | 
|     snapshot := this.Parent(); | 
|     while( not isnull( snapshot ) and isnull( suboptimizer ) ) | 
|     { | 
|       suboptimizer := guard( snapshot.astype( LibOpt_SnapshotComponent ).Component().astype( LibOpt_Suboptimizer ), null( LibOpt_Suboptimizer ) ); | 
|       snapshot := snapshot.Parent(); | 
|     } | 
|      | 
|     if( not isnull( suboptimizer ) and not isnull( suboptimizer.RollbackKPI() ) ) | 
|     { | 
|       this.RollbackKPI( suboptimizer.RollbackKPI().GetKPI( task ).AsBinaryValue() ); | 
|     } | 
|      | 
|     this.Comment( comment ); | 
|     this.IsPreHandleResult( comment = Translations::LibOpt_SnapshotKPI_CommentPreHandleResult() ); | 
|     if( task.Run().HasKPIParts() ) | 
|     { | 
|       this.CreateKPIParts( task.Scope() ); | 
|     } | 
|   *] | 
| } |