Quintiq file version 2.0 
 | 
#parent: #root 
 | 
StaticMethod CreateCsvFromSnapshot (KpiSnapshotSetData snapshotSetData, KpiTracker kpiTracker) as String 
 | 
{ 
 | 
  Description: 'Creates a CSV string out of the specified KpiSnapshotDatas' 
 | 
  TextBody: 
 | 
  [* 
 | 
    // Render header line. 
 | 
    output := ""; 
 | 
     
 | 
    conversion := ConversionOptions::System(); 
 | 
     
 | 
    if ( snapshotSetData.SnapshotData( relsize ) > 0 ) 
 | 
    { 
 | 
      output := "PlanDateTime; ServerDateTime; RetentionPolicyID; "; 
 | 
      first  := snapshotSetData.SnapshotData( relget ).Element( 0 ); 
 | 
     
 | 
      // -- Label headers 
 | 
      sortedLabels := selectsortedset( kpiTracker, Label, label, true, label.Name() ); 
 | 
      output := output + selectuniquevalues( sortedLabels, Elements, label,  
 | 
                                             true, "label_" + label.Name() ).ToString( "; "); 
 | 
      if ( first.Label( relsize ) > 0 )  
 | 
      { 
 | 
        output := output + "; " 
 | 
      } 
 | 
      // -- KPI headers 
 | 
      sortedKpis    := selectsortedset( kpiTracker, MetaData, metadata, true, metadata.Name() );  
 | 
      output := output + selectuniquevalues( sortedKpis, Elements, kpi,  
 | 
                                             true, "kpi_" + kpi.Name() ).ToString( "; " ); 
 | 
       
 | 
      // -- Finish header row with a newline. 
 | 
      output := output + String::NewLine(); 
 | 
                                        
 | 
                                        
 | 
      // Render rows 
 | 
      traverse( snapshotSetData, SnapshotData, snapshot )  
 | 
      { 
 | 
        // Timestamps and stuff 
 | 
        output := output  
 | 
                + snapshot.PlanDateTime().Format( 'Y-M2-D2TH2:m:sZ', conversion ) + "; " 
 | 
                + snapshot.ServerDateTime().Format( 'Y-M2-D2TH2:m:sZ', conversion ) + "; " 
 | 
                + snapshot.RetentionPolicyIdentification() + "; " 
 | 
                 
 | 
        sortedLabels := selectsortedset( kpiTracker, Label, label, true, label.Name() ); 
 | 
        traverse( sortedLabels, Elements, labelValue ) 
 | 
        { 
 | 
          kpiObj := selectsortedset( snapshot, Label, label, true, label.Name() ); 
 | 
          lab := select( kpiObj, Elements, label, labelValue.Name() = label.Name() ); 
 | 
          output := output + guard ( lab.Value(), "" ) + "; "; 
 | 
        } 
 | 
        if ( snapshot.Label( relsize ) < 0 )  
 | 
        { 
 | 
          output := output + "; " 
 | 
        } 
 | 
        sortedKpis    := selectsortedset( kpiTracker, MetaData, metadata, true, metadata.Name() );  
 | 
        traverse( sortedKpis, Elements, metadata ) 
 | 
        { 
 | 
          kpiObj := selectsortedset( snapshot, Value, value, true, value.Name() ); 
 | 
          val := select( kpiObj, Elements, value, metadata.Name() = value.Name() ); 
 | 
          output := output + guard( [String]val.Value(), "" ) + "; "; 
 | 
        } 
 | 
        if ( snapshot.Value( relsize ) < 0 ) 
 | 
        { 
 | 
          output := output + "; "; 
 | 
        } 
 | 
     
 | 
        // -- Finish content row with a newline. 
 | 
        output := output + String::NewLine(); 
 | 
      } 
 | 
       
 | 
    } 
 | 
     
 | 
    // send result. 
 | 
    return output; 
 | 
  *] 
 | 
} 
 |