Формулировка проблемы: необходим метод API импорта конфигурации, полученной при помощи системной функции экспорта конфигурации.
Связанные задачи:
Решение:
Необходимо реализовать следующий метод API:
URL метода: rest/api/configuration
.
Тип запроса: POST
.
Тип содержимого (Content-Type
):
multipart/form-data
.
Метод могут вызывать только пользователи, которые имеют права суперметодолога.
Метод принимает следующие параметры:
data
- XML-файл конфигурации (обязательно).
Тип содержимого (Content-Type
):
application/xml
.
locale
(не обяз.) - код локали (при
отсутствии параметра используется
язык
системы по умолчанию).
new_version
- создавать новую версию для
объектов типа «Форма». Возможные значения:
true
- создавать новую версию (по
умолчанию);
false
- заменять объекты.
Метод возвращает json-объект с полями:
errorCode
- код выполнения:
0 - успешно
иначе - ошибка
errorMessage
- сообщение о результате
выполнения (успешном либо неуспешном).
Пример передаваемого запроса:
POST Synergy/rest/api/configuration HTTP/1.1 Content-Length: 6198 Expect: 100-continue Content-Type: multipart/form-data; boundary=------------------------2cce5ebcbcb2d479 --------------------------2cce5ebcbcb2d479 Content-Disposition: form-data; name="data"; filename="configuration-2013-01-25_12-19-28.xml" Content-Type: application/xml <?xml version="1.0" encoding="utf-8"?> <configuration version="1" date="2013-01-25 12:19:19"> <objects version="1" date="2013-01-25 12:19:19"> <dictionary code="priority_items" name="priority_items" comment="Справочник приоритетов работ (руками не трогать, только через интерфейс!)"> <columns> <column code="name" name="name" order="0" comment="name" localized="true"/> <column code="color" name="color" order="1" comment="color" localized="false"/> <column code="position" name="position" order="2" comment="position" localized="true"/> <column code="number" name="number" order="3" comment="number" localized="false"/> <column code="base" name="base" order="4" comment="base" localized="false"/> <column code="deleted" name="deleted" order="5" comment="deleted" localized="true"/> </columns> <items> <item> <itemValue column="base" value="true"/> <itemValue column="deleted" value="false" _c_value="false" _c_setByUser="true" _ru_value="false" _ru_setByUser="false" _kk_value="false" _kk_setByUser="false" _en_value="false" _en_setByUser="false"/> <itemValue column="number" value="1"/> <itemValue column="position" value="2" _c_value="2" _c_setByUser="true" _ru_value="2" _ru_setByUser="false" _kk_value="2" _kk_setByUser="false" _en_value="2" _en_setByUser="false"/> <itemValue column="color" value="#f6f782"/> <itemValue column="name" value="Плановое" _c_value="Плановое" _c_setByUser="true" _ru_value="Плановое" _ru_setByUser="true" _kk_value="Жоспарлы" _kk_setByUser="true" _en_value="Routine" _en_setByUser="true"/> </item> <item> <itemValue column="base" value="false"/> <itemValue column="deleted" value="false" _c_value="false" _c_setByUser="true" _ru_value="false" _ru_setByUser="false" _kk_value="false" _kk_setByUser="false" _en_value="false" _en_setByUser="false"/> <itemValue column="number" value="0"/> <itemValue column="position" value="1" _c_value="1" _c_setByUser="true" _ru_value="1" _ru_setByUser="false" _kk_value="1" _kk_setByUser="false" _en_value="1" _en_setByUser="false"/> <itemValue column="color" value="#c0de48"/> <itemValue column="name" value="Не срочно" _c_value="Не срочно" _c_setByUser="true" _ru_value="Не срочно" _ru_setByUser="true" _kk_value="Шұғыл емес" _kk_setByUser="true" _en_value="Nonurgent" _en_setByUser="true"/> </item> <item> <itemValue column="base" value="false"/> <itemValue column="deleted" value="false" _c_value="false" _c_setByUser="true" _ru_value="false" _ru_setByUser="false" _kk_value="false" _kk_setByUser="false" _en_value="false" _en_setByUser="false"/> <itemValue column="number" value="3"/> <itemValue column="position" value="4" _c_value="4" _c_setByUser="true" _ru_value="4" _ru_setByUser="false" _kk_value="4" _kk_setByUser="false" _en_value="4" _en_setByUser="false"/> <itemValue column="color" value="#e4302f"/> <itemValue column="name" value="Критично" _c_value="Критично" _c_setByUser="true" _ru_value="Критично" _ru_setByUser="true" _kk_value="Шұғыл" _kk_setByUser="true" _en_value="Critical" _en_setByUser="true"/> </item> <item> <itemValue column="base" value="false"/> <itemValue column="deleted" value="false" _c_value="false" _c_setByUser="true" _ru_value="false" _ru_setByUser="false" _kk_value="false" _kk_setByUser="false" _en_value="false" _en_setByUser="false"/> <itemValue column="number" value="2"/> <itemValue column="position" value="3" _c_value="3" _c_setByUser="true" _ru_value="3" _ru_setByUser="false" _kk_value="3" _kk_setByUser="false" _en_value="3" _en_setByUser="false"/> <itemValue column="color" value="#ef7c77"/> <itemValue column="name" value="Срочно" _c_value="Срочно" _c_setByUser="true" _ru_value="Срочно" _ru_setByUser="true" _kk_value="Тығыз" _kk_setByUser="true" _en_value="Urgent" _en_setByUser="true"/> </item> </items> </dictionary> </objects> <dependencies/> </configuration> --------------------------2cce5ebcbcb2d479 Content-Disposition: form-data; name="locale" ru --------------------------2cce5ebcbcb2d479--
Пример возвращаемого json-объекта при успешном выполнении метода:
{ "errorCode": 0, "errorMessage": "Конфигурация импортирована успешно" }
Внимание
Если во время выполнения импорта произойдет ошибка, все изменения конфигурации, примененные в процессе импорта, должны быть отменены (т.е. метод должен выполняться в рамках одной транзакции).
Альтернативные потоки событий
Альтернативный поток №1. Не передан
обязательный параметр data
либо он имеет неверный
тип. Сервер возвращает ошибку HTTP 400 с сообщением:
{ "errorCode": 3, "errorMessage": "Не передан параметр data либо он имеет неверный тип (требуется application/xml)" }
действие не выполняется.
Альтернативный поток №2. Передано некорректное
значение параметра new_version
. Сервер возвращает
ошибку HTTP 400 с сообщением:
{ "errorCode": 3, "errorMessage": "Передано некорректное значение параметра new_version. Требуется: true или false." }
действие не выполняется.
Альтернативный поток №3. Передан некорректный файл конфигурации: невалидный XML или содержащий неизвестное содержимое. Сервер возвращает ошибку HTTP 400 с сообщением:
{ "errorCode": 3, "errorMessage": "Некорректный формат файла" }
действие не выполняется.
Альтернативный поток №4. Передана версия конфигурации, несовместимая с версией Synergy на сервере. Сервер возвращает ошибку HTTP 400 с сообщением:
{ "errorCode": 3, "errorMessage": "Импорт конфигураций из более новых версий Synergy в более старую не поддерживается" }
действие не выполняется.
Альтернативный поток №5. Пользователь, который запускает метод, не имеет прав суперметодолога. Сервер возвращает ошибку HTTP 403 с сообщением:
{ "errorCode": 2, "errorMessage": "Недостаточно прав для выполнения этого действия" }
действие не выполняется.
Альтернативный поток №6. Во время импорта конфигурации произошла ошибка. Сервер возвращает ошибку HTTP 500 с сообщением:
{ "errorCode": 13, "errorMessage": "Во время импорта конфигурации произошла ошибка. Изменения не применены." }
действие не выполняется.