Формулировка проблемы:
Создаются следующие должности:
Водитель, в карточке должности указывается категория - 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": "Произошла внутренняя ошибка сервера"
}
действие не выполняется.