コード例 #1
0
        private string GetFieldError(ApiRowErrors rowErrors, string field)
        {
            if (rowErrors == null)
            {
                return(null);
            }

            StringBuilder sb = null;

            foreach (var error in rowErrors.Errors)
            {
                if (
                    (field == "$id" && String.IsNullOrEmpty(error.Field)) ||
                    String.Equals(field, error.Field, StringComparison.OrdinalIgnoreCase)
                    )
                {
                    if (sb == null)
                    {
                        sb = new StringBuilder();
                    }
                    else
                    {
                        sb.AppendLine();
                    }

                    sb.Append(error.Error);
                }
            }

            return(sb?.ToString());
        }
コード例 #2
0
        public void Export(Stream stream, EntitySchema entity, RecordSet recordSet, ApiRowErrorsCollection errors)
        {
            if (stream == null)
            {
                throw new ArgumentNullException(nameof(stream));
            }
            if (entity == null)
            {
                throw new ArgumentNullException(nameof(entity));
            }
            if (recordSet == null)
            {
                throw new ArgumentNullException(nameof(recordSet));
            }

            var workbook = new XSSFWorkbook();

            var sheet = workbook.CreateSheet(PrettifyName(entity.Name));

            sheet.DefaultRowHeightInPoints = 15;

            var errorColor = new XSSFColor(Color.Orange);
            var errorStyle = (XSSFCellStyle)workbook.CreateCellStyle();

            errorStyle.FillForegroundColorColor = errorColor;
            errorStyle.FillPattern = FillPattern.SolidForeground;
            var headerStyle        = CreateHeaderStyle(workbook);
            var dateStyle          = CreateDateStyle(workbook, null, false);
            var dateErrorStyle     = CreateDateStyle(workbook, errorColor, false);
            var dateTimeStyle      = CreateDateStyle(workbook, null, true);
            var dateTimeErrorStyle = CreateDateStyle(workbook, errorColor, true);

            // Create the headers.

            var row = sheet.CreateRow(0);

            var fieldNames = recordSet[0].FieldNames.OrderBy(p => p.ToLower()).ToList();

            for (int i = 0; i < fieldNames.Count; i++)
            {
                var member = entity.Members[fieldNames[i]];
                AddHeader(row, i, HumanText.GetMemberName(member), member.Comments, headerStyle);
            }

            bool haveAutosized = false;
            Dictionary <int, ApiRowErrors> errorMap = null;

            if (errors != null)
            {
                errorMap = errors.ToDictionary(p => p.Row, p => p);
            }

            for (int i = 0; i < recordSet.Count; i++)
            {
                var record = recordSet[i];
                row = sheet.CreateRow(i + 1);
                ApiRowErrors rowErrors = null;
                if (errorMap != null)
                {
                    errorMap.TryGetValue(i, out rowErrors);
                }

                for (int j = 0; j < fieldNames.Count; j++)
                {
                    ICellStyle cellStyle = null;
                    if (rowErrors != null)
                    {
                        cellStyle = errorStyle;
                    }
                    var field = fieldNames[j];

                    switch (((EntityTypedField)entity.Members[field]).DataType)
                    {
                    case EntityDataType.Date:
                        cellStyle = rowErrors == null ? dateStyle : dateErrorStyle;
                        break;

                    case EntityDataType.DateTime:
                    case EntityDataType.DateTimeTz:
                        cellStyle = rowErrors == null ? dateTimeStyle : dateTimeErrorStyle;
                        break;
                    }

                    string fieldError = GetFieldError(rowErrors, field);

                    object value = record.ContainsField(field) ? record[field] : null;
                    AddCell(row, j, value, cellStyle, fieldError);
                }

                // We only auto size the top 20 rows for performance reasons.

                if (i == 20)
                {
                    haveAutosized = true;
                    AutoSizeColumns(fieldNames.Count, sheet);
                }
            }

            if (!haveAutosized)
            {
                AutoSizeColumns(fieldNames.Count, sheet);
            }

            workbook.Write(stream);
        }