Quintiq file version 2.0 
 | 
#parent: #root 
 | 
StaticMethod Deserialize (JSON json, LibOpt_Optimizer owner) as LibOpt_Run 
 | 
{ 
 | 
  TextBody: 
 | 
  [* 
 | 
    key := [Key]json.Get( attribute( LibOpt_Run, Key ).Name() + owner.Name() ).GetString(); 
 | 
    identifier := [Key]json.Get( attribute( LibOpt_Run, InternalIdentifier ).Name() + owner.Name() ).GetString(); 
 | 
     
 | 
    run := LibOpt_Run::FindInstance( owner.MDSID(), key ); 
 | 
     
 | 
    if( not isnull( run  ) ) 
 | 
    { 
 | 
      run.Delete(); 
 | 
    } 
 | 
     
 | 
    result := null( LibOpt_Run ); 
 | 
     
 | 
    if( exists( owner, Run, r, r.InternalIdentifier() = identifier, r.StartedOn() <> DateTime::MinDateTime() ) ) 
 | 
    { 
 | 
      error( Translations::LibOpt_Run_NothingToRecover() ); 
 | 
    } 
 | 
    else 
 | 
    { 
 | 
      result := null( LibOpt_Run ); 
 | 
      importedrun := LibOpt_Message::ReadObject( json, typeof( LibOpt_Run ) ).astype( LibOpt_Run ); 
 | 
     
 | 
      if( not isnull( importedrun ) ) 
 | 
      { 
 | 
        result := owner.Run( relinsert, &importedrun ); 
 | 
       
 | 
        // Link the scope elements to the scope 
 | 
        json_scopes := json.Get( typeof( LibOpt_Scope ).Name() ); 
 | 
        traverse( result, Scope.astype( LibOpt_ScopeFat ), scope ) 
 | 
        { 
 | 
          json_scope := json_scopes.Get( [String] scope.InternalIdentifier() ); 
 | 
          scope.DeserializeScopeElements( json_scope ); 
 | 
        } 
 | 
         
 | 
        result.HasIterations( true ); 
 | 
         
 | 
        Transaction::Transaction().Propagate( method( LibOpt_Run, CreateStatisticsAndIssuesPrecondition, Boolean ) ); 
 | 
        if( result.CreateStatisticsAndIssuesPrecondition( true /*is fail-fast check*/ ) ) 
 | 
        { 
 | 
          result.CreateStatisticsAndIssues(); 
 | 
        } 
 | 
      } 
 | 
    } 
 | 
     
 | 
    return result; 
 | 
  *] 
 | 
  InterfaceProperties { Accessibility: 'Module' } 
 | 
} 
 |