| Quintiq file version 2.0 | 
| #parent: #root | 
| StaticMethod CreateExcelFromSnapshot (KpiSnapshotSetData snapshotSetData, KpiTracker kpitracker) as BinaryValue | 
| { | 
|   Description: 'Creates a Excel string out of the specified KpiSnapshotDatas' | 
|   TextBody: | 
|   [* | 
|     // Render header line. | 
|     lines := construct( Strings ); | 
|      | 
|     conversion := ConversionOptions::System(); | 
|      | 
|     lines.Add( '<?xml version="1.0" encoding="UTF-16"?>' ); | 
|     lines.Add( '<table>' ); | 
|     lines.Add( '<name>KpiValue</name>' ); | 
|      | 
|     lines.Add( '<column>' ); | 
|     lines.Add( '<name>PlanDateTime</name>' ); | 
|     lines.Add( '<type>String</type>' ); | 
|     traverse( snapshotSetData, SnapshotData, snapshot )  | 
|     { | 
|       lines.Add( '<cell value="' + snapshot.PlanDateTime().Format( 'Y-M2-D2TH2:m:sZ', conversion ) + '" />' ); | 
|     } | 
|     lines.Add( '</column>' ); | 
|      | 
|     lines.Add( '<column>' ); | 
|     lines.Add( '<name>ServerDateTime</name>' ); | 
|     lines.Add( '<type>String</type>' ); | 
|     traverse( snapshotSetData, SnapshotData, snapshot )  | 
|     { | 
|       lines.Add( '<cell value="' + snapshot.ServerDateTime().Format( 'Y-M2-D2TH2:m:sZ', conversion ) + '" />' ); | 
|     } | 
|     lines.Add( '</column>' ); | 
|      | 
|     lines.Add( '<column>' ); | 
|     lines.Add( '<name>RetentionPolicyID</name>' ); | 
|     lines.Add( '<type>String</type>' ); | 
|     traverse( snapshotSetData, SnapshotData, snapshot )  | 
|     { | 
|       lines.Add( '<cell value="' + snapshot.RetentionPolicyIdentification() + '" />' ); | 
|     } | 
|     lines.Add( '</column>' ); | 
|      | 
|     // -- Label  | 
|     sortedLabels := selectsortedset( kpitracker, Label, label, true, label.Name() ); | 
|     traverse( sortedLabels, Elements, label ) | 
|     { | 
|       lines.Add( '<column>' ); | 
|       lines.Add( '<name>' + "label_" + label.Name() + '</name>' ); | 
|       lines.Add( '<type>String</type>' ); | 
|       traverse( snapshotSetData, SnapshotData, snapshot )  | 
|       { | 
|         labelValue := select( snapshot, Label, labelV, label.Name() = labelV.Name() ); | 
|         lines.Add( '<cell value="' + guard( labelValue.Value(), "" ) + '" />' ); | 
|       } | 
|       lines.Add( '</column>' ); | 
|     } | 
|      | 
|      | 
|     // -- Value  | 
|     sortedKpis   := selectsortedset( kpitracker, MetaData, kpi, true, kpi.Name() ); | 
|     traverse( sortedKpis, Elements, kpi ) | 
|     { | 
|       lines.Add( '<column>' ); | 
|       lines.Add( '<name>' + "kpi_" + kpi.Name() + '</name>' ); | 
|       lines.Add( '<type>String</type>' ); | 
|       traverse( snapshotSetData, SnapshotData, snapshot ) | 
|       { | 
|         kpiValue := select( snapshot, Value, value, kpi.Name() = value.Name() ); | 
|         lines.Add( '<cell value="' + guard( [String]kpiValue.Value(), "" ) + '" />' ); | 
|       } | 
|       lines.Add( '</column>' ); | 
|     } | 
|      | 
|     // Send result. | 
|     lines.Add( '</table>' ); | 
|     binary := BinaryValue::Construct( lines.Concatenate( String::NewLine() ) ); | 
|     return binary; | 
|   *] | 
|   InterfaceProperties { Accessibility: 'Module' } | 
| } |