Создаём карточку с приложенным файлом из плагина 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); // пишем ошибку или другие сообщения в лог
}
}