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

Создаём карточку с приложенным файлом из плагина Chronos

Создаём карточку с приложенным файлом из плагина Chronos

Требуется создать карточку и приложить к ней файл с заданным контентом. Мы будем использовать для этого серверный API TESSA.

using System.Text; using Chronos.Plugins; using NLog; using Tessa.Cards; using Tessa.Extensions.Default.Shared; using Tessa.Files; using Tessa.Platform; using Tessa.Platform.Validation;

private static readonly Logger logger = LogManager.GetCurrentClassLogger(); // ниже содержимое метода EntryPointAsync у плагина

await using var companion = new UnityContainerCompanion { UseConfiguration = true }; await companion.ProcessAsync( static (c, ct) => c.Container.RegisterServerForPluginAsync(cancellationToken: ct), static async (c, ct) => { var cardRepository = c.Container.Resolve<ICardRepository>(); var manager = c.Container.Resolve<ICardFileManager>(); var typesCache = c.Container.Resolve<IKrTypesCache>();

// создаём карточку контрагента var typeID = DefaultCardTypes.PartnerTypeID; var newRequest = new CardNewRequest();

// проверяем используется ли тип документа в типовом решении if (typesCache.DocTypes.FirstOrDefault(x => x.ID == typeID) is { } docType) { newRequest.CardTypeID = docType.CardTypeID; newRequest.Info[KrConstants.Keys.DocTypeID] = typeID; newRequest.Info[KrConstants.Keys.DocTypeTitle] = docType.Caption; } else { newRequest.CardTypeID = typeID; }

// для создания карточки из типового решения должны быть права создания для заданного типа у скрытого пользователя System var newResponse = await cardRepository.NewAsync(newRequest, ct);

// логируем сообщения при создании, если они есть logger.LogResult(newResponse.ValidationResult);

// если не удалось создать карточку - выходим if (!newResponse.ValidationResult.IsSuccessful()) { return; }

// теперь у нас есть карточка card, в ней можно заполнить нужные поля и добавить файл var card = newResponse.Card; card.ID = Guid.NewGuid();

await using (var fileContainer = await manager.CreateContainerAsync(card, cancellationToken: ct)) { var contentText = "..."; var contentBytes = Encoding.UTF8.GetBytes(contentText);

await fileContainer .FileContainer .BuildFile("fileName.txt") // можно использовать SetContentText, однако предположим, что здесь абстрактный массив байт .SetContent(contentBytes) .AddWithNotificationAsync(cancellationToken: ct);

var storeResponse = await fileContainer.StoreAsync(cancellationToken: ct); if (!storeResponse.ValidationResult.IsSuccessful()) { // пишем ошибку или другие сообщения в лог logger.LogResult(storeResponse.ValidationResult); } } }, cancellationToken);

Back to top