Формулировка проблемы:
Создаются следующие должности:
Водитель, в карточке должности указывается категория - 2
Водитель, в карточке должности указывается категория - 3
Создается приказ по форме с компонентом объект Synergy "Должность".
В окне выбора должности отображаются следующим образом:
Водитель
Водитель
Нет возможности выбрать водителя необходимого в соответствии с его категорией.
Требуется возможность отображать в объекте Synergy (Тип данных - Должность) рядом с названием должности дополнительные поля из карточек должностей.
Решение: необходимо реализовать API метод, который позволит получить должности вместе с информацией, находящейся в карточке должностей.
URL метода: /rest/api/positions/getPositionsWithCards
Тип метода: GET
.
Метод принимает следующие входные параметры:
departmentID
- идентификатор подразделения,
должности которого необходимо вернуть (обяз.);
recursive
- принимает следующие значения (по
умолчанию false):
true
- поиск производится по всему дереву
подразделения;
false
- поиск производится
непосредственно в указанном подразделении;
cmpIsNeeded
- флаг необходимости возврата
полей карточки (по умолчанию true). Принимает следующие
значения:
true
- возврат полей карточки требуется;
false
- возврат полей карточки не
требуется;
positionFormID
- идентификатор карточки
должностей, данные которой необходимо вернуть. В зависимости от
параметра cmpIsNeeded
бывает обязательным или
необязательным. Если параметру cmpIsNeeded
присвоено значение true
, данный параметр
обязателен. Если параметру cmpIsNeeded
присвоено значение false
, данный параметр
необязателен. Может быть передано несколько значений;
cmpID
- идентификатор элемента формы,
информацию из которого необходимо вернуть. В зависимости от
параметра cmpIsNeeded
бывает обязательным или
необязательным. Если параметру cmpIsNeeded
присвоено значение true
, данный параметр
обязателен. Если параметру cmpIsNeeded
присвоено значение false
, данный параметр
необязателен. Может быть передано несколько значений;
startRecord
- номер записи результатов,
начиная с которой будут возвращены записи (по умолчанию 0);
recordsCount
- количество результатов,
которые необходимо вернуть (по умолчанию 30). Максимальное
значение параметра 50;
locale
(не обяз.) - код локали (при
отсутствии параметра используется
язык
системы по умолчанию).
При указании одновременно разных параметров результат запроса будет связан логическим И. Пример запроса:
/rest/api/positions/getPositionsWithCards?departmentID=a060a200-dc75-11e5-9336-1e88d1bc0767
&positionFormID=305fa7a9-6497-4cdf-a14a-6fb344199538&cmpID=status
При указании одновременно нескольких наборов параметров необходимо дополнительно передать параметры поиска, прибавив к названиям параметров порядковый номер набора параметров. Количество наборов параметров, которые можно добавить неограничено. Главное соблюдать правильную нумерацию названий параметров: 1, 2, 3 и т.д. Первый набор не имеет порядкового номера. Таким образом, метод получит дополнительный набор параметров positionFormID1, cmpID1, positionFormID2, cmpID2 и т.д.
В случае успешного выполнения метод возвращает JSON в виде объектов
с ключами по positionFormID
и
cmpID
:
positionID
- идентификатор должности;
positionName
- наименование должности;
positionType
- тип должности, один из
следующих вариантов:
1 - Руководитель;
2 - Специалист;
32 - Исполняющий обязанности;
256 - Заместитель;
formUUID
- идентификатор данных по форме
карточек должностей;
cmpData
- данные из поля в карточке
должностей.
Пример запроса:
/rest/api/positions/getPositionsWithCards?departmentID=4df92af0-da1d-11e5-9c63-1e88d1bc0767
&positionFormID=373c3270-cf0b-11e5-a154-1e88d1bc0767&cmpID=category&cmpID=rang
&positionFormID1=23727710-cf22-11e5-a154-1e88d1bc0767&cmpID1=group &positionFormID2=13727710-cf22-11e5-a154-1e88d1bc0767&cmpID2=text&cmpID2=date
Пример возвращаемого массива:
[ { "positionID": "81ac53f0-c351-11e5-ab17-1e88d1bc0767", "positionName": "Водитель", "positionType": "256", "forms":[ { "formUUID":"373c3270-cf0b-11e5-a154-1e88d1bc0767", "asfDataUUID":"41fd8240-b822-11e5-8630-525400bb7fc6", "values":[ { "category":"2" }, { "rang":"5" } ] }, { "formUUID":"23727710-cf22-11e5-a154-1e88d1bc0767", "asfDataUUID":"182eeca0-d98e-11e5-8c91-525400bb7fc6", "values":[ { "group":"основная" } ] }, { "formUUID":"13727710-cf22-11e5-a154-1e88d1bc0767", "asfDataUUID":"45dg8240-b822-11e5-8630-525400bb7fc6", "values":[ { "text":"Добавить в штатное расписание" }, { "date":"2016-05-02" } ] } ] }, { "positionID": "693616c0-d49b-11e5-a5fb-1e88d1bc0767", "positionName": "Водитель", "positionType": "2", "forms":[ { "formUUID":"373c3270-cf0b-11e5-a154-1e88d1bc0767", "asfDataUUID":"c952f930-cfd5-11e5-bae8-525400bb7fc6", "values":[ { "category":"3" }, { "rang":"7" } ] }, { "formUUID":"23727710-cf22-11e5-a154-1e88d1bc0767", "asfDataUUID":"1d8b0c40-91dd-11e5-9fa7-525400bb7fc6", "values":[ { "group":"вспомогательная" } ] }, { "formUUID":"13727710-cf22-11e5-a154-1e88d1bc0767", "asfDataUUID":"26lg8240-25jz-11e5-8630-525400bb7fc6", "values":[ { "text":"Есть в штатном расписании" }, { "date":"2015-06-02" } ] } ] }, { "positionID": "ccee5340-c991-11e5-afba-1e88d1bc0767", "positionName": "Водитель", "positionType": "2", "forms":[ { "formUUID":"373c3270-cf0b-11e5-a154-1e88d1bc0767", "asfDataUUID":"822ac240-b428-11e5-8630-525400bb7fc6", "values":[ { "category":"2" }, { "rang":"6" } ] }, { "formUUID":"23727710-cf22-11e5-a154-1e88d1bc0767", "asfDataUUID":"39877130-9f17-11e5-9ae6-525400bb7fc6", "values":[ { "group":"обслуживающая" } ] }, { "formUUID":"13727710-cf22-11e5-a154-1e88d1bc0767", "asfDataUUID":"d66dd140-b822-11e5-8630-525400bb7fc6", "values":[ { "text":"Добавить в штатное расписание" }, { "date":"2016-02-15" } ] } ] } ]
Альтернативные потоки событий:
Альтернативный поток №1. Передан некорректный параметр
cmpIsNeeded
. Сервер возвращает ошибку HTTP 400 с
сообщением:
{ "errorCode": 13, "errorMessage": "Передан некорректный параметр cmpIsNeeded" }
действие не выполняется.
Альтернативный поток №2. Параметру cmpIsNeeded
присвоено значение true
, не переданы параметры
positionFormID
, cmpID
. Сервер
возвращает ошибку HTTP 400 с сообщением:
{ "errorCode": 13, "errorMessage": "Не переданы параметры positionFormID, cmpID" }
действие не выполняется.
Альтернативный поток №3. Параметру cmpIsNeeded
присвоено значение true
, не передан параметр
cmpID
. Сервер возвращает ошибку HTTP 400 с
сообщением:
{ "errorCode": 13, "errorMessage": "Не передан параметр cmpID" }
действие не выполняется.
Альтернативный поток №4. Параметру cmpIsNeeded
присвоено значение true
, не передан параметр
positionFormID
. Сервер возвращает ошибку HTTP 400
с сообщением:
{ "errorCode": 13, "errorMessage": "Не передан параметр positionFormID" }
действие не выполняется.
Альтернативный поток №5. Значение переданного параметра
recordsCount
превышает максимальное значение.
Сервер возвращает ошибку HTTP 400 с сообщением:
{ "errorCode":13, "errorMessage":"Значение параметра recordsCount превышает максимальное значение равное 50. Для просмотра дальнейших результатов воспользуйтесь параметром startRecord" }
действие не выполняется.
Альтернативный поток №6. Не передан параметр
departmentID
. Сервер возвращает ошибку HTTP 400 с
сообщением:
{ "errorCode": 13, "errorMessage": "Не передан параметр departmentID" }
действие не выполняется.
Альтернативный поток №7. Передан некорректный параметр
recursive
. Сервер возвращает ошибку HTTP 400 с
сообщением:
{ "errorCode": 13, "errorMessage": "Передан некорректный параметр recursive" }
действие не выполняется.
Альтернативный поток №8. Параметру cmpIsNeeded
присвоено значение true
, передан некорректный
параметр positionFormID
. Сервер возвращает ошибку
HTTP 400 с сообщением:
{ "errorCode": 13, "errorMessage": "Передан некорректный параметр positionFormID" }
действие не выполняется.
Альтернативный поток №9. Параметру cmpIsNeeded
присвоено значение true
, передан некорректный
параметр cmpID
. Сервер возвращает ошибку HTTP 400
с сообщением:
{ "errorCode": 13, "errorMessage": "Передан некорректный параметр cmpID" }
действие не выполняется.
Альтернативный поток №10. На стороне сервера произошла ошибка. Сервер возвращает ошибку HTTP 500 с сообщением:
{ "errorCode": 13, "errorMessage": "Произошла внутренняя ошибка сервера" }
действие не выполняется.