Получение единиц измерения
Алгоритм
- Выбор хранилища для подключения;
- Выбор измеряемой величины;
- Получение списка единиц измерения измеряемой величины;
- Запись ответа в файл.
Реализация получения свойств объекта в коде
Пример обращения к 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);