Quintiq file version 2.0 
 | 
#parent: #root 
 | 
Method ContinueWithoutFinalize (LibOpt_Task task, LibOpt_Link link, LibOpt_Scope scope) as stream[JSON] 
 | 
{ 
 | 
  TextBody: 
 | 
  [* 
 | 
    //Check to add iterationthread 
 | 
    snapshot := task.SnapshotComponent(); 
 | 
    if( this.CheckAddIterationThreads( task, link ) ) 
 | 
    { 
 | 
      iterThread := LibOpt_IterationThread::FindCreateAvailableThread( task.Run(), snapshot.GetIterationPartOwner().PrecisionTimeStampStartComponent() ); 
 | 
      snapshot.ExecutingIterationThread( relset, iterThread ); 
 | 
    } 
 | 
     
 | 
    breakpoint_string := LibOpt_Component::ComponentPosition_Continue(); 
 | 
     
 | 
    // Conditionally create a dataset copy. 
 | 
    // If InOneTransaction() is true, then a dataset copy that is robust against errors and rollbacks will be created 
 | 
    // If InOneTransaction() is false then no errors or rollbacks will occur before the end of the transaction so a quick dataset copy will be created.    
 | 
    isrobustdatasetcopy := guard( link.TaskTransporter().InOneTransaction(), false ); 
 | 
    LibOpt_DatasetCopyConditional::CopyDatasetConditionally( breakpoint_string, task, isrobustdatasetcopy );  
 | 
     
 | 
    result := stream[JSON]::Success(); 
 | 
    breakpoint_stream := null( stream[Void] ); 
 | 
     
 | 
    if( this.HasBreakpoint( breakpoint_string, task, breakpoint_stream ) ) 
 | 
    { 
 | 
      // Execute with breakpoint 
 | 
      if( isnull( link ) ) 
 | 
      { 
 | 
        result := result->After( breakpoint_stream ); 
 | 
      } 
 | 
      else 
 | 
      { 
 | 
        result := breakpoint_stream->| 
 | 
                  link->Execute( task, scope ); 
 | 
      } 
 | 
    } 
 | 
    else if( not isnull( link ) ) 
 | 
    { 
 | 
      // Execute without breakpoint 
 | 
      transaction := LibOpt_CurrentTransaction::GetCurrentTransaction( this ); 
 | 
      if( transaction.IsSafe() ) 
 | 
      { 
 | 
        istaskregistered := transaction.BeforeMethodCall_ExistingSafeTransaction( task ); 
 | 
        // A user error might occur in Execute or in other methods called by Execute.  
 | 
        // However, transaction.IsSafe() is true, so we are inside a try{...} block. We have also called BeforeMethodCall_ExistingSafeTransaction. The error is therefore handled gracefully.  
 | 
        result := link.Execute( task, scope ); 
 | 
        transaction.AfterMethodCall_ExistingSafeTransaction( task, istaskregistered ); 
 | 
      } 
 | 
      else 
 | 
      { 
 | 
        try 
 | 
        { 
 | 
          istaskregistered := transaction.BeforeMethodCall_TryBlock( task ); 
 | 
          // A user error might occur in Execute or in other methods called by Execute.  
 | 
          // However, we are inside a try{...} block. We have also called BeforeMethodCall_TryBlock. The error is therefore handled gracefully.  
 | 
          result := link.Execute( task, scope ); 
 | 
          transaction.AfterMethodCall_TryBlock( task, task.Run(), istaskregistered );       
 | 
        } 
 | 
        onerror 
 | 
        { 
 | 
          transaction.OnError( e ); 
 | 
        } 
 | 
        onfailure 
 | 
        { 
 | 
          transaction.OnFailure( e ); 
 | 
        } 
 | 
      } 
 | 
    } 
 | 
     
 | 
    return result; 
 | 
  *] 
 | 
} 
 |