Table of Contents

Получение единиц измерения

Алгоритм

  • Выбор хранилища для подключения;
  • Выбор измеряемой величины;
  • Получение списка единиц измерения измеряемой величины;
  • Запись ответа в файл.

Реализация получения свойств объекта в коде

Пример обращения к web-серверу, получения и обработки результата реализован в проекте GetMeasureUnit, написанном на языке C# в среде .NET версии 8.0.11.

Взаимодействие с сервером осуществляется через объект класса HttpClient.

Выбор хранилища для подключения

Получение списка хранилища web-сервера осуществляется через GET-запрос по адресу "/login/storage-definitions".

var response = await httpClient.GetAsync("api/v1/login/storage-definitions", cancellationToken);
response.EnsureSuccessStatusCode();

await response.Content.ReadFromJsonAsync<IEnumerable<StorageResponse>>();
Определение StorageResponse
/// <summary>
/// Представляет ответ на запрос хранилищ web-сервера.
/// </summary>
public record StorageResponse
{
    /// <summary>
    /// Идентификатор хранилища.
    /// </summary>
    public Guid StorageId { get; set; } = default!;

    /// <summary>
    /// Отображаемое имя хранилища.
    /// </summary>
    public string DisplayName { get; set; } = default!;
}

Выбор хранилища из полученного списка осуществляется по имени, которое пользователь передает программе. В примере имя нужно ввести в консоли.

foreach (var storage in storages!)
{
    Console.WriteLine(storage.DisplayName);
}
Console.WriteLine();

var storageName = Console.ReadLine();
Console.WriteLine();

var storageId = storages.FirstOrDefault(c => c.DisplayName == storageName)!.StorageId;

Выбор измеряемой величины

Получение списка измеряемых величин хранилища осуществляется через GET-запрос по адресу "/measure-entity". В запрос передается идентификатор хранилища storageId для выполнения запроса без авторизации.

var measureEntityUriBuilder = new UriBuilder(client.BaseAddress!)
{
    Path = "api/v1/measure-entity",
    Query = $"storageId={storageId}"
};
var measureEntitiesResponse = await client.GetAsync(measureEntityUriBuilder.ToString());

var meausureEntities = await measureEntitiesResponse.Content.ReadFromJsonAsync<IEnumerable<MeasureEntity>>();

Выбор измеряемой величины осуществляется по имени, которое пользователь передает программе. В примере имя нужно ввести в консоли.

Console.WriteLine(string.Join("\n", meausureEntities!.Select(e => e.Name)));

var measureEntityName = Console.ReadLine();

var measureEntity = meausureEntities!.FirstOrDefault(c => c.Name == measureEntityName);

Получение списка единиц измерения измеряемой величины

Получение списка единиц измерения осуществляется через GET-запрос по адресу "/measure-unit/units-by-entity-id". В запрос передаются идентификатор хранилища storageId для выполнения запроса без авторизации и идентификатор измеряемой величины entityId.

var measureUnitUriBuilder = new UriBuilder(client.BaseAddress!)
{
    Path = ApiRoutes.MeasureUnitsUnitsByEntityId,
    Query = $"entityId={measureEntity.ObjectId}&storageId={storageId}"
};

var measureUnitsResponse = await client.GetAsync(measureUnitUriBuilder.ToString());

var measureUnits = await measureUnitsResponse.Content.ReadFromJsonAsync<IEnumerable<MeasureUnit>>();

Запись ответа в файл

Полученная информация записывается в файл стандартными средствами C#. По умолчанию файл имеет название web-sdkget-measure-unit<current-date-and-time>.json.

var filePath = Console.ReadLine();
if (string.IsNullOrEmpty(filePath))
    filePath = $"web-sdk_get-measure-unit_{DateTime.Now:dd-MM-yyyy-hh-mm-ss}.json";
filePath = Path.GetFullPath(filePath);
var dir = Path.GetDirectoryName(filePath);
if (!Directory.Exists(dir))
{
    Directory.CreateDirectory(dir!);
}

var content = System.Text.Json.JsonSerializer.Serialize(measureUnits,
    new System.Text.Json.JsonSerializerOptions()
    {
        WriteIndented = true,
        Encoder = System.Text.Encodings.Web.JavaScriptEncoder.UnsafeRelaxedJsonEscaping
    });
System.IO.File.WriteAllText(filePath, content);