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

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

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

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

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

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

// настраиваем контейнер Unity для работы с карточками await TessaPlatform.InitializeFromConfigurationAsync();

IUnityContainer container = await new UnityContainer() .RegisterServerForPluginAsync();

ICardRepository cardRepository = container.Resolve<ICardRepository>(); ICardFileManager manager = container.Resolve<ICardFileManager>(); IKrTypesCache typesCache = container.Resolve<IKrTypesCache>();

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

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

// для создания карточки из типового решения должны быть права создания для заданного типа у скрытого пользователя System CardNewResponse newResponse = await cardRepository.NewAsync(newRequest); ValidationResult newResult = newResponse.ValidationResult.Build(); // логируем сообщения при создании, если они есть logger.LogResult(newResult); // если не удалось создать карточку - выходим if (!newResult.IsSuccessful) { return; }

// теперь у нас есть карточка card, в ней можно заполнить нужные поля и добавить файл Card card = newResponse.Card; await using (var fileContainer = await manager.CreateContainerAsync(card)) { string contentText = "..."; byte[] contentBytes = Encoding.UTF8.GetBytes(contentText); await fileContainer .FileContainer .BuildFile("...") .SetContent(contentBytes) //тут можно использовать SetContentText, однако предположим, что вместо текста некий объект .AddWithNotificationAsync(); var storeResponse = await fileContainer.StoreAsync(); if (!storeResponse.ValidationResult.IsSuccessful()) { ValidationResult result = storeResponse.ValidationResult.Build(); logger.LogResult(result); // пишем ошибку или другие сообщения в лог } }

Back to top