Создание карточки по шаблону на сервере
Создание карточки по шаблону на сервере¶
Создать карточку по шаблону с учетом приложенных файлов можно следующим образом:
var validationResult = new ValidationResultBuilder();
var dbScope = this.UnityContainer.Resolve<IDbScope>();
var cardRepository = this.UnityContainer.Resolve<ICardRepository>();
var tokenProvider = this.UnityContainer.Resolve<IKrTokenProvider>();
var fileManager = this.UnityContainer.Resolve<ICardFileManager>();
var newRequest = new CardNewRequest
{
CardTypeID = CardHelper.TemplateTypeID
};
newRequest.SetTemplateCardID(templateID);
// Получение типа карточки или типа документа, если данная опция включена.
// Необходимо для явного создания токена.
// Если явно создавать токен не нужно, шаг можно опустить.
var typeID = KrProcessHelper.GetTemplateDocType(templateID.Value, dbScope);
if (!typeID.HasValue)
{
validationResult.AddError(this, "Не удалось найти тип документа в шаблоне.");
return;
}
// Явное добавление токена в запрос. Необходимо только в том случае, когда
// карточку нужно создать, не учитывая правила доступа.
// IKrTokenProvider является unity-зависимостью
tokenProvider.CreateToken(typeID.Value).Set(newRequest.Info);
var newResponse = await cardRepository.NewAsync(newRequest);
if (!newResponse.ValidationResult.IsSuccessful())
{
return;
}
var card = newResponse.Card;
card.ID = Guid.NewGuid();
// IFileManager fileManager является unity-зависимостью
await using (var container = await fileManager.CreateContainerAsync(card))
{
var storeResponse = await container.StoreAsync((c, request) =>
{
tokenProvider.CreateToken(request.Card.ID).Set(request.Card.Info);
});
if (!storeResponse.ValidationResult.IsSuccessful())
{
return;
}
}