Table of Contents

Установка значения бинарного свойства

Пример показывает, как загрузить файл и установить его значением бинарного свойства элемента средствами клиентской библиотеки Ascon.Polynom.Web.Api.Client. Проект — Samples.WebApi.SetBinaryPropertyValue.

Требования

  • .NET 8.
  • Запущенный web-сервер ПОЛИНОМ:MDM с доступным хранилищем.
  • Пакет Ascon.Polynom.Web.Api.Client из локального фида (подключается автоматически).

Алгоритм

  1. Авторизоваться в web-API.
  2. Загрузить файл во временное хранилище web-сервера.
  3. Задать элемент-владелец свойств.
  4. Задать бинарное свойство.
  5. Сформировать и отправить запрос на установку значения.
  6. Выйти из сессии.

Авторизация

Авторизация выполняется хелпером PolynomClientSession поверх AuthorizationService. Подробно — в разделе Авторизация в C# через клиентскую библиотеку.

Реализация

Файл загружается методом UploadBinaryPropertyValue сервиса PropertyOwnerApiClient. Значение устанавливается методом SetPropertyValues с моделью SetPropertyValuesRequest.

using Ascon.Polynom.Web.Api.Client.Enums;

using Samples.WebApi.Common.Services;

// Клиентский временный идентификатор значения, связывающий значение и его описание.
const int newPropertyValueId = 170;

using var session = await PolynomClientSession.CreateAsync(cancellationToken);

// Путь к загружаемому файлу и идентификаторы владельца и определения свойства.
var filePath = "C:\\Docs\\specification.pdf";
var propertyOwnerId = 5;
var propertyDefinitionId = 42;

string? temporaryFileName;
await using (FileStream fileStream = File.OpenRead(filePath))
{
    temporaryFileName = await session.Factory.CreatePropertyOwnerApiClient()
        .UploadBinaryPropertyValue(fileStream, cancellationToken);
}

var request = new SetPropertyValuesRequest
{
    Owner = new IdentifiableObject
    {
        ObjectId = propertyOwnerId,
        TypeId = IdentifiableObjectType.Element
    },
    Values = new AblePropertyValuesRequest
    {
        BinaryProperties = new List<IBinaryPropertyValueRequest>
        {
            new BinaryPropertyValueRequest
            {
                Value = temporaryFileName ?? string.Empty,
                ObjectId = newPropertyValueId,
                TypeId = IdentifiableObjectType.BinaryPropertyValue
            }
        }
    },
    Properties = new List<IPropertyValueItem>
    {
        new PropertyValueItem
        {
            Value = new IdentifiableObject
            {
                ObjectId = newPropertyValueId,
                TypeId = IdentifiableObjectType.BinaryPropertyValue
            },
            Definition = new IdentifiableObject
            {
                ObjectId = propertyDefinitionId,
                TypeId = IdentifiableObjectType.BinaryPropertyDefinition
            },
            EvaluationMode = EvaluationMode.None
        }
    }
};

await session.Factory.CreatePropertyOwnerApiClient().SetPropertyValues(request, cancellationToken);

await session.SignOutAsync(cancellationToken);

Используемые методы библиотеки

Сервис Метод Назначение
PropertyOwnerApiClient UploadBinaryPropertyValue(Stream, CancellationToken) Загрузка файла во временное хранилище
PropertyOwnerApiClient SetPropertyValues(SetPropertyValuesRequest, CancellationToken) Установка значения бинарного свойства

Результат

Указанное значение присваивается бинарному свойству элемента-владельца свойств.

Возможные ошибки

  • Файл не найден — проверьте путь к загружаемому файлу.
  • Определение не найдено — проверьте идентификатор определения бинарного свойства.
  • Сессия истекла — библиотека обновит токен и повторит запрос; при неудаче требуется повторный вход.

Ссылки

Пример-приложение в составе SDK: SDK/Web/Samples/Server/Samples.WebApi.SetBinaryPropertyValue.