Quintiq file version 2.0 
 | 
#parent: #root 
 | 
StaticMethod GetCopies ( 
 | 
  Number nrcopies, 
 | 
  Routings routings 
 | 
) as owning Routings 
 | 
{ 
 | 
  TextBody: 
 | 
  [* 
 | 
    //return Routing::GetCopies_Slow( nrcopies, routings );  
 | 
     
 | 
    copies := construct( RoutingPairs );  
 | 
    returnset := construct(  Routings );  
 | 
    if ( routings.Size() > 0 )  
 | 
    { 
 | 
      routings.Element( 0 ).MacroPlan().RoutingPair( relflush );  
 | 
    } 
 | 
     
 | 
     
 | 
    traverse( routings, Elements, routing )  
 | 
    { 
 | 
      for ( i := 1; i <= nrcopies; i++ )  
 | 
      { 
 | 
        routingname := routing.MacroPlan().GetUniqueRoutingName( routing.Name() + GlobalParameters_MP::GetCopyString() ); 
 | 
         
 | 
        newrouting := Routing::Create( routing.MacroPlan(), 
 | 
                                       routingname, 
 | 
                                       routingname, 
 | 
                                       routing.Start(), 
 | 
                                       routing.End(), 
 | 
                                       routing.AllowWIPInventory(), 
 | 
                                       false  
 | 
                                       ); 
 | 
        newrouting.CopyHelper( i );  
 | 
        routingpair := routing.MacroPlan().RoutingPair( relnew, FirstRouting := routing, SecondRouting := newrouting );                                    
 | 
        copies.Add(  routingpair );  
 | 
        returnset.Add( newrouting );   
 | 
        // Copy rouitng step with operations 
 | 
        traverse( routing, RoutingStep, rs ) 
 | 
        { 
 | 
          rs.Copy( newrouting ); 
 | 
        } 
 | 
      } 
 | 
    } 
 | 
     
 | 
    debuginfo( 'Step 1 created copies size = ', copies.Size() );  
 | 
      
 | 
    // Propagated all Operation-Step-Routing relation before copy operation link 
 | 
    Transaction::Transaction().Propagate(); 
 | 
     
 | 
    debuginfo(  'propagated' ); 
 | 
    traverse( copies, Elements, routingpair )  
 | 
    { 
 | 
      routing := routingpair.FirstRouting();  
 | 
      newrouting := routingpair.SecondRouting();  
 | 
      traverse( routing, RoutingStep.Operation.SourceOperationLink, ol ) 
 | 
      { 
 | 
        ol.Copy( newrouting ); 
 | 
      } 
 | 
    } 
 | 
    debuginfo(  'Step 2 done' );  
 | 
    if ( routings.Size() > 0 )  
 | 
    { 
 | 
      routings.Element( 0 ).MacroPlan().RoutingPair( relflush );  
 | 
    } 
 | 
     
 | 
    return &returnset; 
 | 
  *] 
 | 
  InterfaceProperties { Accessibility: 'Module' } 
 | 
} 
 |