Получение свойств понятия
Пример показывает, как получить список понятий, их свойства и подробную информацию о выбранном
свойстве средствами клиентской библиотеки Ascon.Polynom.Web.Api.Client.
Проект — Samples.WebApi.GetConceptPropertySource.
Требования
- .NET 8.
- Запущенный web-сервер ПОЛИНОМ:MDM с доступным хранилищем.
- Пакет
Ascon.Polynom.Web.Api.Clientиз локального фида (подключается автоматически).
Алгоритм
- Авторизоваться в web-API.
- Получить список понятий.
- Выбрать понятие.
- Получить список свойств понятия.
- Выбрать свойство и получить подробную информацию о нём.
- Обработать и сохранить результат.
- Выйти из сессии.
Авторизация
Авторизация выполняется хелпером 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.