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