admin
2025-01-22 7e31442f0e9b07764e9c6a9680d3d4aeba5fe1de
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
Quintiq file version 2.0
#parent: #root
Method PostHandleResult (
  LibOpt_Task task,
  RealVector kpi_pre
)
{
  TextBody:
  [*
    snapshot := this.LogKPI( task, Translations::LibOpt_SnapshotKPI_CommentPostHandleResult() );
    
    if( isnull( this.RollbackKPI() ) )
    {
      // Throw a warning if it has not been thrown before in this snapshot.
      if( not isnull( kpi_pre ) )
      {
        LibOpt_SnapshotWarning::Throw( task, Translations::LibOpt_Suboptimizer_NoRollbackKPI(), LibOpt_Issue::Severity_4_High() );
      }
    }
    else
    {
      kpi_post := this.RollbackKPI().GetKPI( task );
      should_rollback := this.ShouldRollback( kpi_pre, kpi_post );
        
      if( should_rollback )
      {
        // We copy the dataset after creating the post handle result snapshot, but before setting the snapshot.IsRolledBack() attribute to true. 
        // This is to clearly indicate in the client that the data in the copied dataset is not rolled back.
        LibOpt_DatasetCopyConditional::CopyDatasetConditionally( LibOpt_Suboptimizer::ComponentPosition_Rollback(), task, true );  
      }
      
      // Store rollback KPI difference
      if( task.Run().HasSnapshots() )
      {
        LibOpt_SnapshotSuboptimizer::Create( task.Run(), kpi_pre, kpi_post, this.RollbackKPI(), should_rollback );
      }
      
      if( should_rollback )
      {
        if( not isnull( snapshot ) )
        {
          snapshot.IsRolledBack( true );
        }
        this.Rollback( kpi_pre, kpi_post, task );
      }
    }
  *]
}