| Quintiq file version 2.0 | 
| #parent: #root | 
| Method DoOperation (LibOpt_Task task) as stream[JSON] | 
| { | 
|   TextBody: | 
|   [* | 
|     result := stream[JSON]::Success(); | 
|      | 
|     if( this.Run().HasSnapshots() ) | 
|     { | 
|       task.SnapshotComponent().PrecisionTimeStampStartComponent( OS::PrecisionCounter() / OS::PrecisionCounterFrequency() ); | 
|     } | 
|      | 
|     if( task.CanContinue() ) | 
|     { | 
|       this.NrTimesCalled( this.NrTimesCalled() + 1 ); | 
|       transaction := LibOpt_CurrentTransaction::GetCurrentTransaction( this ); | 
|        | 
|       if( transaction.IsSafe() ) | 
|       { | 
|         istaskregistered := transaction.BeforeMethodCall_ExistingSafeTransaction( task ); | 
|         // A user error might occur in Operation or in other methods called by Operation.  | 
|         // 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 := this.Operation( task ); | 
|         transaction.AfterMethodCall_ExistingSafeTransaction( task, istaskregistered ); | 
|       } | 
|       else | 
|       { | 
|         try | 
|         { | 
|           istaskregistered := transaction.BeforeMethodCall_TryBlock( task ); | 
|           // A user error might occur in Operation or in other methods called by Operation.  | 
|           // However, we are inside a try{...} block. We have also called BeforeMethodCall_TryBlock. The error is therefore handled gracefully.  | 
|           result := this.Operation( task ); | 
|           transaction.AfterMethodCall_TryBlock( task, task.Run(), istaskregistered ); | 
|         } | 
|         onerror | 
|         { | 
|           transaction.OnError( e ); | 
|         } | 
|         onfailure | 
|         { | 
|           transaction.OnFailure( e ); | 
|         } | 
|       } | 
|     } | 
|      | 
|     return result; | 
|   *] | 
|   InterfaceProperties { Accessibility: 'Module' } | 
| } |