| Quintiq file version 2.0 | 
| #parent: #root | 
| MethodOverride SyncSubsetEntity ( | 
|   OptimizerPuzzleBase target | 
| ) | 
| { | 
|   TextBody: | 
|   [* | 
|     // Copy subset entity from WIP to OP | 
|     optimizerpuzzle := target.astype( OptimizerPuzzle ); | 
|     isfromdb := false; | 
|      | 
|     currentList := selectset( optimizerpuzzle, SubsetEntityInOptimizerPuzzle, sub , true ); | 
|     newList := construct( SubsetEntityInOptimizerPuzzles ); | 
|      | 
|     // Copy or update isuserAction subsets | 
|     // Not taking into consideration Entity without Parent if Include because of default behaviour | 
|     traverse( this, SubsetEntityInOptimizerPuzzleWip, subsource, subsource.IsUserAction() ) | 
|     { | 
|       targetSubset := SubsetEntityInOptimizerPuzzle::FindSubsetEntityOptimizerPuzzleTypeIndices( optimizerpuzzle.Name(), subsource.EntityID(), subsource.EntityType() ); | 
|       // Case create a new OptimizerPuzzle | 
|       if( isnull( targetSubset ) ) | 
|       { | 
|         // Create a SubsetEntity for OptimizerPuzzle.  | 
|         targetSubset := SubsetEntityInOptimizerPuzzle::Create( optimizerpuzzle, subsource.Entity(), isfromdb );  | 
|       } | 
|       // Case edit | 
|       else | 
|       { | 
|         if( targetSubset.OptimizerPuzzleName() <> this.Name() ) | 
|         { | 
|           // Update OptimizerPuzzleID, EntityID and EntityType | 
|           SubsetEntityInOptimizerPuzzle::ChangeKeySubsetEntityOptimizerPuzzleTypeIndices( targetSubset, this.Name(), targetSubset.EntityID(), targetSubset.EntityType() ); | 
|         } | 
|       } | 
|        | 
|       // Update IsInclude and IsUserAction | 
|       targetSubset.IsIncluded( subsource.IsIncluded() ); | 
|       targetSubset.IsUserAction( subsource.IsUserAction() ); | 
|       newList.Add( targetSubset ); | 
|     } | 
|      | 
|     toBeDeleted := currentList.Difference( newList );  | 
|     SubsetEntityInOptimizerPuzzle::Delete( toBeDeleted ); | 
|   *] | 
| } |