Формулировка проблемы: необходим метод 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": "Во время импорта конфигурации произошла ошибка. Изменения не применены."
}
действие не выполняется.