CalcFieldsErrors: IDtCalcFieldErrors;
CalcFieldsErrors: Prognoz.Platform.Interop.Dt.IDtCalcFieldErrors;
The CalcFieldsErrors property returns a collection of errors appeared on calculated fields calculation.
Errors can be received only after calling one of the following mwthods: IDtConsumer.Put, IDtConsumer.PutProvider, IDtConsumer.PutRow.
Executing the example requires the c:\Import Text.txt file with data in the file system.
Add links to the Dal, Dt, Metabase system assemblies.
Contents of the c:\Import Text.txt file
Sub UserProc;
Var
mb: Imetabase;
DTConsumer: IDtTextConsumer;
DTProviderWithData: IDtTextProvider;
Errors: IDtCalcFieldErrors;
Error: IDtCalcFieldError;
FieldsIn, FieldsOut: IDtFieldDefinitions;
FieldIn, FieldOut: IDtFieldDefinition;
i: Integer;
Begin
// Get current repository
mb := MetabaseClass.Active;
// Create text data consumer
DTConsumer := New DtTextConsumer.Create;
// Set consumer basic parameters
DTConsumer.FormatType := DtTextFormatType.Delimited;
DTConsumer.RowDelimiter := #13 + #10;
DTConsumer.DelimitedColumnDelimiter := ";";
DTConsumer.Encoding := "WIN";
DTConsumer.DelimitedTextQualifier := """";
DTConsumer.WriteHeader := True;
DTConsumer.Metabase := mb;
// Set file to which data will be loaded
DTConsumer.File := "c:\Export Text.txt";
// Create text data source
DTProviderWithData := New DtTextProvider.Create;
// Set source basic parameters
DTProviderWithData.FormatType := DtTextFormatType.Delimited;
DTProviderWithData.RowDelimiter := #13 + #10;
DTProviderWithData.DelimitedColumnDelimiter := ";";
DTProviderWithData.Encoding := "WIN";
DTProviderWithData.DelimitedTextQualifier := """";
DTProviderWithData.RangeHasHeader := True;
DTProviderWithData.Metabase := mb;
// Determine file from which data will be loaded
DTProviderWithData.File := "c:\Import Text.txt";
// Load source fields from file
DTProviderWithData.FieldsFromFile;
// Get source and consumer fields
FieldsIn := DTConsumer.Fields;
FieldsOut := DTProviderWithData.Fields;
// Process each from obtained fields
For Each FieldOut In FieldsOut Do
// Specify data source field type
FieldOut.DataType := DbDataType.Integer;
// Add field to data consumer
FieldIn := FieldsIn.Add;
// Specify that basic parameters of added field in consumer
// match with the corresponding field in data source
FieldIn.DataDomain := FieldOut.DataDomain;
FieldIn.DataType := FieldOut.DataType;
FieldIn.Name := FieldOut.Name;
FieldIn.Precision := FieldOut.Precision;
FieldIn.Size := FieldOut.Size;
// If field in data source is calculated, identical expression will be
// used in data consumer
If FieldOut.IsCalculated Then
FieldIn.Expression.AsString := FieldOut.Expression.AsString;
End If;
End For;
// Set expression to calculate field with the 1 index in data consumer
FieldIn := FieldsIn.Item(1);
// The field will be based on value of the field with the 1 index from data source
FieldOut := FieldsOut.Item(1);
FieldIn.Expression.AsString := FieldOut.Name + " + 2";
// Open and clear data consumer
DTConsumer.Open;
DTConsumer.Clear;
// Export values from the source to the consumer
DTConsumer.PutProvider(DTProviderWithData);
// Get errors occured on calculated fields calculation
Errors := DTConsumer.CalcFieldsErrors;
// Display errors to the console
If Errors.Count > 0 Then
For i := 0 To Errors.Count Do
Error := Errors.Item(i);
Debug.WriteLine("In the row №" + Error.Row.ToString + " in field " + Error.Field + " the error occured");
Debug.WriteLine("Error text: " + Error.Message);
End For;
End If;
// Close data consumer
DTConsumer.Close;
End Sub UserProc;
After executing the example data from the c:\Import Text.txt file will be loaded to the Export Text file. For source data the following formula will be applied: the filed value with the 1 index will be increased by two. If on formula calculation there are any errors, it will be displayed to the console.
The requirements and result of the Fore.NET example execution match with those in the Fore example.
Imports Prognoz.Platform.Interop.Dal;
Imports Prognoz.Platform.Interop.Dt;
…
Public Shared Sub Main(Params: StartParams);
Var
mb: Imetabase;
DTConsumer: IDtTextConsumer;
DTProviderWithData: IDtTextProvider;
Errors: IDtCalcFieldErrors;
Error: IDtCalcFieldError;
FieldsIn, FieldsOut: IDtFieldDefinitions;
FieldIn, FieldOut: IDtFieldDefinition;
i: Integer;
Begin
// Get current repository
mb := Params.Metabase;
// Create text data consumer
DTConsumer := New DtTextConsumer.Create();
// Set consumer basic parameters
DTConsumer.FormatType := DtTextFormatType.tftDelimited;
DTConsumer.RowDelimiter := char.ConvertFromUtf32(13) + char.ConvertFromUtf32(10);
DTConsumer.DelimitedColumnDelimiter := ";";
DTConsumer.Encoding := "WIN";
DTConsumer.DelimitedTextQualifier := """";
DTConsumer.WriteHeader := True;
DTConsumer.Metabase := mb;
// Set file in which data will be uploaded
DTConsumer.File := "c:\Export Text.txt";
// Create text data source
DTProviderWithData := New DtTextProvider.Create();
// Set source basic parameters
DTProviderWithData.FormatType := DtTextFormatType.tftDelimited;
DTProviderWithData.RowDelimiter := char.ConvertFromUtf32(13) + char.ConvertFromUtf32(10);
DTProviderWithData.DelimitedColumnDelimiter := ";";
DTProviderWithData.Encoding := "WIN";
DTProviderWithData.DelimitedTextQualifier := """";
DTProviderWithData.RangeHasHeader := True;
DTProviderWithData.Metabase := mb;
// Determine file from which data will be loaded
DTProviderWithData.File := "c:\Import Text.txt";
// Load source fields from the file
DTProviderWithData.FieldsFromFile();
// Get fields of the source and of the consumer
FieldsIn := DTConsumer.Fields;
FieldsOut := DTProviderWithData.Fields;
// Process each obtained field
For Each FieldOut In FieldsOut Do
// Specify data source field type
FieldOut.DataType := DbDataType.ddtInteger;
// Add field to data consumer
FieldIn := FieldsIn.Add();
// Specify that basic parameters of added field in data consumer
// match with the corresponding field in data source
FieldIn.DataDomain := FieldOut.DataDomain;
FieldIn.DataType := FieldOut.DataType;
FieldIn.Name := FieldOut.Name;
FieldIn.Precision := FieldOut.Precision;
FieldIn.Size := FieldOut.Size;
// If the field is calculated in the source, the similar expression
// will be used in the consumer
If FieldOut.IsCalculated Then
FieldIn.Expression.AsString := FieldOut.Expression.AsString;
End If;
End For;
// Set expression to calculate field with the 1 index in the data consumer
FieldIn := FieldsIn.Item[1];
// The expression will be based on the value of the field with the 1 index from data source
FieldOut := FieldsOut.Item[1];
FieldIn.Expression.AsString := FieldOut.Name + " + 2";
// Open and clear data consumer
DTConsumer.Open();
DTConsumer.Clear();
// Export values from the source to the consumer
DTConsumer.PutProvider(DTProviderWithData);
// Get errors occurred on calculated fields calculation
Errors := DTConsumer.CalcFieldsErrors;
// Display errors to the console
If Errors.Count > 0 Then
For i := 0 To Errors.Count Do
Error := Errors.Item[i];
System.Diagnostics.Debug.WriteLine("In the row №" + Error.Row.ToString() + " in the field " + Error.Field + " the error occurred");
System.Diagnostics.Debug.WriteLine("The error text: " + Error.Message);
End For;
End If;
// Close data consumer
DTConsumer.Close();
End Sub;
See also: