Перейти к содержанию

Маппинг полей карточки для выгрузки контента в отдельные файлы

Маппинг полей карточки для выгрузки контента в отдельные файлы

Реализация хэндлера, предоставляющего параметры сериализации для выгрузки контента карточек во внешние файлы.

// Должен наследоваться от IStorageMappingHandler public abstract class ExampleStorageMappingHandler : IStorageMappingHandler { // Должен реализовать метод GetContentMappings() public virtual IList<IStorageContentMapping> GetContentMappings(Card card) { // Простые способы добавления маппингов: var result = new List<IStorageContentMapping> { // Маппинг для строковой секции, задает параметры выгрузки для поля "FieldName". new StorageContentMapping( "Sections.EntrySectionName.Fields.EntryFieldName", // Путь внутри storage, по которому расположен контент для выгрузки. "EntryFieldName.txt"), // Основа имени файла выгружаемого контента, к имени файла будет добавлено хэш-зачение чтобы исключить вероятность файлов с одинаковым именем.

// Маппинг для табличной секции, задает параметры выгрузки для поля "FieldName" всех строк секции "TableSectionName". new StorageContentMapping( "Sections.TableSectionName.Rows[].TableFieldName", // здесь wildcard [] означает, что логика обработает каждую строку в данной секции "FieldName.txt", CardHelper.DefaultRowIDKey), // Наименование поля, по которому расположено значение, которое необходимо учитывать при добавлении хеша к имени внешнего ресурса с контентом (например идентификатор строки)

};

// Так же может быть использована произвольная логика для добавления маппингов: if (card.Sections.TryGetValue("SchrodingerSectionName", out var section)) { result.Add( new StorageContentMapping( "Sections.SchrodingerSectionName.Rows[].Metadata", "SchrodingerMetadata.cs", CardHelper.DefaultRowIDKey));

for (var i = 0; i < section.Rows.Count; i++) { var row = section.Rows[i];

// Например объект может не содержать определенных полей полей. var settings = row.Fields.TryGet<IDictionary<string, object>>("Settings"); if (settings is not null && settings.ContainsKey("CustomMetadata")) { result.Add( new StorageContentMapping( $"Sections.SchrodingerSectionName.Rows[{i}].Settings.CustomMetadata", // здесь индексатор [{iStr}] означает, что логика обработает только указанную строку секции. "CustomMetadata.cs", "^.RowID")); } } } return result; } }

Регистрация хэндлера, предоставляющего параметры сериализации для выгрузки контента карточек во внешние файлы

// Регистрация должна быть для сервера и для консольного клиента [Registrator(Tag = RegistratorTag.ConsoleClient | RegistratorTag.Server)] public sealed class Registrator : RegistratorBase { public override void FinalizeRegistration() { this.UnityContainer .TryResolve<IStorageMappingResolver>()? .Register<ExampleStorageMappingHandler>(ExampleCardTypeID) // Параметр: Guid - ID типа карточки .Register<AnotherStorageMappingHandler>(AnotherCardTypeID) ; } }

Back to top