Exemple #1
0
        private static void SetupErrorHandlers(Action <ImportProgressInfo> progressCallback,
                                               CsvConfiguration configuration,
                                               ImportErrorsContext errorsContext, ImportProgressInfo importProgress,
                                               ICsvPriceImportReporter importReporter)
        {
            configuration.ReadingExceptionOccurred = args =>
            {
                var context = args.Exception.Context;

                if (!errorsContext.ErrorsRows.Contains(context.Parser.Row))
                {
                    var fieldSourceValue = context.Reader[context.Reader.CurrentIndex];

                    if (context.Reader.HeaderRecord.Length != context.Parser.Record.Length)
                    {
                        HandleNotClosedQuoteError(progressCallback, importProgress, importReporter, context, errorsContext);
                    }
                    else if (fieldSourceValue == "")
                    {
                        HandleRequiredValueError(progressCallback, importProgress, importReporter, context, errorsContext);
                    }
                    else
                    {
                        HandleWrongValueError(progressCallback, importProgress, importReporter, context, errorsContext);
                    }
                }

                return(false);
            };

            configuration.BadDataFound = args =>
            {
                HandleBadDataError(progressCallback, importProgress, importReporter, args.Context, errorsContext);
            };

            configuration.MissingFieldFound = args => HandleMissedColumnError(progressCallback, importProgress, importReporter, args.Context, errorsContext);
        }
Exemple #2
0
        private static void HandleMissedColumnError(Action <ImportProgressInfo> progressCallback, ImportProgressInfo importProgress, ICsvPriceImportReporter reporter, CsvContext context, ImportErrorsContext errorsContext)
        {
            var headerColumns = context.Reader.HeaderRecord;
            var recordFields  = context.Parser.Record;
            var missedColumns = headerColumns.Skip(recordFields.Length).ToArray();
            var error         = $"This row has next missing columns: {string.Join(", ", missedColumns)}.";
            var importError   = new ImportError {
                Error = error, RawRow = context.Parser.RawRecord
            };

            reporter.Write(importError);

            errorsContext.ErrorsRows.Add(context.Parser.Row);
            HandleError(progressCallback, importProgress);
        }
Exemple #3
0
        private static void HandleRequiredValueError(Action <ImportProgressInfo> progressCallback, ImportProgressInfo importProgress, ICsvPriceImportReporter reporter, CsvContext context, ImportErrorsContext errorsContext)
        {
            var fieldName          = context.Reader.HeaderRecord[context.Reader.CurrentIndex];
            var requiredFields     = CsvPriceImportHelper.GetImportPriceRequiredValueColumns();
            var missedValueColumns = new List <string>();

            for (var i = 0; i < context.Reader.HeaderRecord.Length; i++)
            {
                if (requiredFields.Contains(context.Reader.HeaderRecord[i], StringComparer.InvariantCultureIgnoreCase) && context.Parser.Record[i].IsNullOrEmpty())
                {
                    missedValueColumns.Add(context.Reader.HeaderRecord[i]);
                }
            }

            var importError = new ImportError {
                Error = $"The required value in column {fieldName} is missing.", RawRow = context.Parser.RawRecord
            };

            if (missedValueColumns.Count > 1)
            {
                importError.Error = $"The required values in columns: {string.Join(", ", missedValueColumns)} - are missing.";
            }

            reporter.Write(importError);

            errorsContext.ErrorsRows.Add(context.Parser.Row);
            HandleError(progressCallback, importProgress);
        }
Exemple #4
0
        private static void HandleWrongValueError(Action <ImportProgressInfo> progressCallback, ImportProgressInfo importProgress, ICsvPriceImportReporter reporter, CsvContext context, ImportErrorsContext errorsContext)
        {
            var invalidFieldName = context.Reader.HeaderRecord[context.Reader.CurrentIndex];
            var importError      = new ImportError {
                Error = $"This row has invalid value in the column {invalidFieldName}.", RawRow = context.Parser.RawRecord
            };

            reporter.Write(importError);

            errorsContext.ErrorsRows.Add(context.Parser.Row);
            HandleError(progressCallback, importProgress);
        }
Exemple #5
0
        private static void HandleNotClosedQuoteError(Action <ImportProgressInfo> progressCallback, ImportProgressInfo importProgress, ICsvPriceImportReporter reporter, CsvContext context, ImportErrorsContext errorsContext)
        {
            var importError = new ImportError {
                Error = "This row has invalid data. Quotes should be closed.", RawRow = context.Parser.RawRecord
            };

            reporter.Write(importError);

            errorsContext.ErrorsRows.Add(context.Parser.Row);
            HandleError(progressCallback, importProgress);
        }
Exemple #6
0
        private static void HandleBadDataError(Action <ImportProgressInfo> progressCallback, ImportProgressInfo importProgress, ICsvPriceImportReporter reporter, CsvContext context, ImportErrorsContext errorsContext)
        {
            var importError = new ImportError {
                Error = "This row has invalid data. The data after field with not escaped quote was lost.", RawRow = context.Parser.RawRecord
            };

            reporter.Write(importError);

            if (context.Reader is VcCsvReader vcCsvReader)
            {
                vcCsvReader.IsFieldBadData = true;
            }

            errorsContext.ErrorsRows.Add(context.Parser.Row);
            HandleError(progressCallback, importProgress);
        }