Quintiq file version 2.0 
 | 
#parent: #root 
 | 
Method Execute_DataMigration_NonFinancialKPI ( 
 | 
  String oldname, 
 | 
  String newname 
 | 
) 
 | 
{ 
 | 
  Description: 'Generic data migration method for NonFinancialKPI' 
 | 
  TextBody: 
 | 
  [* 
 | 
    oldkpi := KPI::FindKPITypeIndex( oldname ); 
 | 
    newkpi := KPI::FindKPITypeIndex( newname ); 
 | 
    newkpitable := NonFinancialKPITable::Table(); 
 | 
    newkpitablerow := select( newkpitable, Rows, row, row.Name() = newname ); 
 | 
    needsnewkpi := isnull( newkpi ) and not isnull( newkpitablerow ); 
 | 
    hasdatamigration := needsnewkpi and not isnull( oldkpi ); 
 | 
     
 | 
    // can't use ChangeKeyTypeIndex as KPI has subclasses, so create new, delete old 
 | 
    if( needsnewkpi ) 
 | 
    { 
 | 
      newkpi := NonFinancialKPI::Create( this, 
 | 
                                         newname, 
 | 
                                         newkpitablerow.IsShown(), 
 | 
                                         newkpitablerow.IsPercentage(), 
 | 
                                         hasdatamigration /* if migration, prevents creation of kpiweight,etc as we will re-assign from old kpi to this new KPI as owner */ 
 | 
                                       ); 
 | 
     
 | 
     
 | 
      if( hasdatamigration ) 
 | 
      {  
 | 
        oldkpi.IsMigratingData( true ); // Prevents cleanup as we want to re-assign kpiweight,etc to new KPI (owner) 
 | 
         
 | 
        traverse( oldkpi, KPIValue, kpivalue ) 
 | 
        { 
 | 
          newkpi.KPIValue( relinsert, kpivalue );  
 | 
        } 
 | 
         
 | 
        traverse( oldkpi, KPIWeight, kpiweight ) 
 | 
        { 
 | 
          KPIWeight::ChangeKeyKPIWeightTypeIndex( kpiweight, newname, kpiweight.StrategyName() ); 
 | 
        } 
 | 
         
 | 
        kpisetting := oldkpi.KPISetting(); 
 | 
        if( not( isnull( kpisetting ) ) ) 
 | 
        { 
 | 
          KPISetting::ChangeKeyKPISettingTypeIndex( kpisetting, newname );  
 | 
          newkpi.KPISetting( relmove, kpisetting ); 
 | 
        }   
 | 
         
 | 
        newkpi.IsMigratingData( false ); // Reset migration status once we done owning those objects from old KPI 
 | 
         
 | 
        oldkpi.Delete(); 
 | 
      } 
 | 
    } 
 | 
  *] 
 | 
  InterfaceProperties { Accessibility: 'Module' } 
 | 
} 
 |