Table of Contents

Получение свойств понятия

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

Требования

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

Алгоритм

  1. Авторизоваться в web-API.
  2. Получить список понятий.
  3. Выбрать понятие.
  4. Получить список свойств понятия.
  5. Выбрать свойство и получить подробную информацию о нём.
  6. Обработать и сохранить результат.
  7. Выйти из сессии.

Авторизация

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

Реализация

Список понятий возвращает метод GetAll сервиса ConceptApiClient с моделью GetAllConceptsRequest. Свойства понятия и подробная информация о свойстве возвращают методы GetByConcept и GetById сервиса ConceptPropertySourceApiClient.

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

using Samples.WebApi.Common.Services;

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

// Название понятия.
var conceptName = "Понятие примера SDK";

var concepts = await session.Factory.CreateConceptApiClient().GetAll(new GetAllConceptsRequest
{
    PageNumber = 1,
    PageSize = 50
}, cancellationToken);

var concept = (concepts?.Items ?? new()).FirstOrDefault(c => c.Name == conceptName)
    ?? throw new InvalidOperationException($"Понятие «{conceptName}» не найдено.");

var conceptPropertySources = await session.Factory.CreateConceptPropertySourceApiClient()
    .GetByConcept(new IdentifierRequest
    {
        ObjectId = concept.ObjectId,
        TypeId = IdentifiableObjectType.Concept
    }, cancellationToken);

// Идентификатор первого свойства понятия.
var conceptPropertySourceId = (conceptPropertySources ?? new()).FirstOrDefault()?.ObjectId
    ?? throw new InvalidOperationException($"У понятия «{conceptName}» не найдено свойств.");

var conceptPropertySource = await session.Factory.CreateConceptPropertySourceApiClient()
    .GetById(new GetByIdRequest
    {
        ObjectId = conceptPropertySourceId,
        TypeId = IdentifiableObjectType.ConceptPropertySource
    }, cancellationToken);

// Сохранение подробной информации о свойстве в файл JSON.
var json = JsonSerializer.Serialize(conceptPropertySource,
    new JsonSerializerOptions(PolynomJsonOptions.Options) { WriteIndented = true });
await File.WriteAllTextAsync("concept-property-source.json", json, cancellationToken);

await session.SignOutAsync(cancellationToken);

Результат — объект ConceptPropertySource с флагами (IsMandatory, IsReadOnly, IsInherited и другими), пригодный для анализа конфигурации понятия.

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

Сервис Метод Назначение
ConceptApiClient GetAll(GetAllConceptsRequest, CancellationToken) Список понятий
ConceptPropertySourceApiClient GetByConcept(IdentifierRequest, CancellationToken) Свойства понятия
ConceptPropertySourceApiClient GetById(GetByIdRequest, CancellationToken) Подробная информация о свойстве

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

  • Понятие не найдено — ошибку выбросит First; проверьте список понятий.
  • Нет свойств у понятия — First по пустой коллекции выбросит исключение; обработайте пустой список.
  • Сессия истекла — библиотека обновит токен и повторит запрос; при неудаче требуется повторный вход.

Ссылки

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