private string FormatFieldValue(DataRow article, string value, Field field, IReadOnlyDictionary <string, Dictionary <int, string> > valuesWithRelation) { if (value.Contains("\"")) { value = value.Replace("\"", "\"\""); } if (field != null && !string.IsNullOrEmpty(value)) { if (field.Type.DbType == DbType.String || field.Type.DbType == DbType.StringFixedLength) { value = $"\"{value}\""; } else if (field.ExactType == FieldExactTypes.Boolean) { value = MultistepActionHelper.BoolFormat(value); } else if (field.Type.DbType == DbType.Date || field.Type.DbType == DbType.DateTime || field.Type.DbType == DbType.DateTime2) { value = MultistepActionHelper.DateCultureFormat(value, CultureInfo.CurrentCulture.Name, _settings.Culture); } else if ((field.Type.DbType == DbType.Double || field.Type.DbType == DbType.Decimal) && field.RelationType != RelationType.ManyToMany) { value = MultistepActionHelper.NumericCultureFormat(value, CultureInfo.CurrentCulture.Name, _settings.Culture); if (value.Contains(_settings.Delimiter)) { value = $"\"{value}\""; } } } if (field != null && (field.RelationType == RelationType.ManyToMany || field.RelationType == RelationType.ManyToOne)) { value = string.Empty; var mapValue = field.RelationType == RelationType.ManyToMany ? field.LinkId.Value.ToString() : article["content_Item_id"] + "_" + field.Id; if (valuesWithRelation.TryGetValue(mapValue, out var mappings) && mappings.Any()) { var key = field.ContentId == _contentId ? IdentifierFieldName : string.Format(FieldNameHeaderTemplate, field.Content.Name, IdentifierFieldName); if (int.TryParse(article[key].ToString(), out var id)) { if (mappings.TryGetValue(id, out var items)) { value = items.Replace(",", ";"); } } } value = $"\"{value}\""; } if (string.IsNullOrEmpty(value) || value == "\"\"") { value = "NULL"; } return(value); }