Попробуем парсить обращения из Intraservice при помощи Powershell. Пригодится, когда надо регулярно и быстро доставать инфу, имея на руках только номер обращения. Опишу основные действия, хотя это всё есть в официальной документации. Мне пригодилось в части автоматизации составления документов на печать из данных, полученных из обращения.
Сперва посмотрим, какие данные можем получить из заявки через API в формате json через веб-браузер. Для этого переходим по адресу сервера/api/task/номер_заявки
Здесь и далее часть данных удалена |
На скриншоте только часть данных, на самом деле их гораздо больше, и это здорово.
Теперь попробуем авторизоваться и получить данные из заявки через Powershell. Из документации мы знаем, что в API использует базовая авторизация
"Базовая авторизация представляет собой отправку заголовка «Authorization» со значением вида «Basic <base64UserLoginPass>», где <base64UserLoginPass> - закодированная в base64 строка вида «<login>:<password>»."
# Данные для авторизации
$username = "username"
$password = "password"
$userpass = $username + ":" + $password
$bytes= [System.Text.Encoding]::UTF8.GetBytes($userpass)
$encodedlogin=[Convert]::ToBase64String($bytes)
$authheader = "Basic " + $encodedlogin
$headers = New-Object "System.Collections.Generic.Dictionary[[String],[String]]"
$headers.Add("Authorization",$authheader)
$headers.Add("Accept","application/json")
$headers.Add("Content-Type","application/json")
Попробуем получить информацию из заявки по её номеру при помощи командлета Invoke-RestMethod (он же curl)
# Получаем информацию из заявки
$servername = 'https://servername.ru/api/task'
$taskid = '5774'
$uriTask = "$serername/$taskid"
$response = Invoke-RestMethod -Uri $uriTask -Headers $headers -Method Get -ContentType "application/json"
Можно вывести список всех заявок измененных за определенный период в формате даты YYYY-MM-DD.
$range = 'ChangedMoreThan=2020-08-20&ChangedLessThan=2020-08-21'
$period = Invoke-RestMethod -Uri "$serername?$range" -Headers $headers
А затем посмотреть количество обращений за этот период
$period.Paginator.Count
$range = 'CreatedMoreThan=2020-08-20&CreatedLessThan=2020-08-21'
$period = Invoke-RestMethod -Uri "$serername?$range" -Headers $headers
$range = 'ClosedMoreThan=2020-08-20&ClosedLessThan=2020-08-21'
$period = Invoke-RestMethod -Uri "$serername?$range" -Headers $headers
$status = 'StatusIDs=56'
$status = Invoke-RestMethod -Uri "$serername?$status" -Headers $headers
$status = 'StatusIDs=56,27'
$status = Invoke-RestMethod -Uri "$serername?$status" -Headers $headers
$status = 'StatusIDs=56'
$range = 'ClosedMoreThan=2020-08-20&ClosedLessThan=2020-08-21'
$status = Invoke-RestMethod -Uri "$serername?$status&$range" -Headers $headers
Использование фильтров очень помогает в работе с заявками через веб-интерфейс Итрасервиса. Если вы уже создали фильтр, его можно использовать и в своих скриптах. Для этого нужен его FilterId.
Посмотрим список фильтров
$servername = 'https://servername.ru/api'
$filter = Invoke-RestMethod -Uri "$servername/filter?resource=task" -Headers $headers
Id Name IsCommon IsDefault
-- ---- -------- ---------
1149 Открытые True False
1150 Закрытые True False
1151 В работе True False
Собственно 1149-1151 и есть наш FilterID
Выведем список заявок по фильтру 1150 (закрытые заявки) и отформатируем вывод данных по полям Id, Name, StatusId
$fields = 'Id,Name,StatusId'
$filterId = 'FilterId=1451'
$filter = Invoke-RestMethod -Uri "$servername/task?fields=$fields&$filterId" -Headers $headers
$filter.Tasks
Data Id Name StatusId
---- -- ---- --------
5318 Ремонт МФУ Kyocera 28
На этом остановлюсь. В официальной документации описано всё гораздо подробнее и нет смысла всё переписывать сюда. Для общего представления о работе с API через Powershell будет достаточно. А ведь ещё есть метод PUT! Можно обрабатывать обращения без участия GUI, и менять статусы заявок, добавлять вложения, закрывать заявки с определенным текстом не слезая с дивана прямо с консоли, или готовыми скриптами.
Правда тут я споткнулся, и так не вышло записывать изменения в заявки на сервер по https-подключению с ошибкой
Invoke-RestMethod : {"Message":"Не удалось обновить заявку. Причина: Method not found:
'IntraService.Domain.ViewModels.UpdateTaskResult IntraService.Domain.Services.ITaskService.
UpdateTask(IntraService.Domain.Models.IntraServiceDataContext, IntraService.Domain.Models.
Task, SubmitFrom, IntraService.Domain.ViewModels.ITaskSubmitModel, IntraService.Security.
IIntraServicePrincipal, Boolean, Boolean, Boolean, Boolean)'."}
Обращение на форуме Intraservice так и осталось без ответа. Между тем, через http без SSL-сертификата PUT исполняется без проблем.
Комментариев нет :
Отправить комментарий