| Quintiq file version 2.0 | 
| #parent: #root | 
| Method ConvertSnapshotsLabelValue ( | 
|   Number batchsize, | 
|   DssKpiSnapshot startSnapshot, | 
|   KpiLabelValue oldLabelValue, | 
|   KpiLabelValue newLabelValue | 
| ) as stream[DssKpiSnapshotStorage] | 
| { | 
|   Description: 'CAN EXTEND | Dss-specific implementation of ConvertSnapshotsLabelValue that convert label value in batches of the specified size, starting from the specified Snapshot onwards. Returns a stream to allow waiting for the last batch to complete.' | 
|   TextBody: | 
|   [* | 
|     snapshot := startSnapshot; | 
|     entry    := 0; | 
|     while ( not isnull( snapshot ) and entry < batchsize ) | 
|     { | 
|       convertsnapshot := snapshot; | 
|       snapshot := snapshot.PreviousSnapshot();   | 
|        | 
|       labelvalue := select( convertsnapshot, LabelValueInSnapshot.LabelValue, value, value.Value() = oldLabelValue.Value() ); | 
|       if( not isnull( labelvalue ) ) | 
|       { | 
|         convertsnapshot.AddLabelValue( newLabelValue ); | 
|       } | 
|        | 
|       entry++; | 
|     } | 
|      | 
|     // Setup the call to the next batch with low priority. | 
|     returnStream := emit( this ); | 
|     if ( not isnull( snapshot ) ) | 
|     { | 
|       returnStream := this | 
|         ->Annotate( ReactiveAnnotation::Priority( 0 ) ) | 
|         ->ConvertSnapshotsLabelValue( batchsize, snapshot, oldLabelValue, newLabelValue ); | 
|     } | 
|      | 
|     return returnStream; | 
|   *] | 
|   InterfaceProperties { Accessibility: 'Extensible' } | 
| } |