ipr.ipr.update
Scope:
iprКто может вызывать: Пользователь с
canEditна карточке (обычно владелец/руководитель) либо привилегированный (admin/hr). Сменаstatusдоступна только привилегированным;startFact/finishFact— только администратору портала. Подробнее: Роли и права доступа
Изменяет поля существующей карточки ИПР/ПИС. Передаются только те поля, которые нужно изменить.
HTTP: POST
Побочные эффекты: Изменяет элемент инфоблока ИПР; при competenceIds — привязывает новые компетенции каталога к карточке (существующие привязки не удаляются); при startFact / finishFact — записывает фактические даты (последним шагом, только свойствами элемента, без записи в историю и без перезапуска бизнес-процесса). Смена status (только admin/hr) на FINISHED останавливает бизнес-процесс (БП) карточки после записи статуса и до записи дат; смена на любой другой статус БП не затрагивает (кнопки БП в интерфейсе могут разойтись со статусом). Остановка БП выполняется при каждой записи статуса FINISHED, в том числе когда карточка уже в FINISHED: если первая остановка не удалась (INTERNAL_ERROR, статус к этому моменту уже изменён), повтор update(status=FINISHED) её довершает. Повторный ipr.ipr.complete остановку не чинит и возвращает VALIDATION_ERROR.
Параметры метода
| Параметр | Тип | Обяз. | Описание |
|---|---|---|---|
id |
int |
да | ID карточки |
title |
string |
нет | Название, 1..255 символов |
deadline |
string |
нет | Дедлайн YYYY-MM-DD; пустая строка снимает дедлайн |
managerId |
int |
нет | Новый руководитель. Должен отличаться от владельца карточки. Менять могут только привилегированные и пользователи с правом редактирования наблюдателей/руководителя карточки |
status |
string |
нет | Новый статус (только для привилегированных — см. ниже) |
nextTemplateId |
int |
нет | Шаблон следующей программы |
observers |
int[] |
нет | Полный новый список наблюдателей (заменяет текущий). Менять могут только привилегированные и пользователи с правом редактирования наблюдателей карточки |
competenceIds |
int[] |
нет | ID компетенций каталога, которые нужно добавить в карточку. Уже привязанные компетенции пропускаются, остальные привязки не трогаются |
startFact |
string |
нет | Фактическая дата начала, YYYY-MM-DD или YYYY-MM-DD HH:MM:SS (время сервера); пустая строка очищает. Только администратор, в любом статусе карточки |
finishFact |
string |
нет | Фактическая дата завершения, формат как у startFact; пустая строка очищает. Только администратор, в любом статусе карточки |
Про параметр status
Свободная смена status через update разрешена только admin/hr — для сотрудников и руководителей переходы статуса идут через отдельные методы: ipr.ipr.complete, ipr.ipr.approve, ipr.ipr.reject, ipr.ipr.reopen. Допустимые значения — XML_ID из ipr.ipr.status.list: NEW, SOGL, WORK, SOGL_RES, FINISHED.
Про startFact / finishFact
Это единственный путь записи фактических дат; в complete и approve такие параметры не добавлены. Вызов идемпотентен — повторы (ретраи) безопасны. Проверяется порядок startFact <= finishFact с учётом уже сохранённого значения другой даты. Значение сохраняется в формате Y-m-d H:i:s и перечитывается; если запись не сохранилась, метод вернёт INTERNAL_ERROR с error.details.reason = fact_date_not_saved. В ответе даты приходят в формате YYYY-MM-DD (как в ipr.ipr.get).
Если ни одно поле, ни competenceIds не переданы — метод возвращает текущую карточку без изменений.
Возвращаемые данные
Полная карточка — та же форма, что у ipr.ipr.get.
Обработка ошибок
Справочник кодов: error-codes.md.
| Код | Описание |
|---|---|
UNAUTHORIZED |
Пользователь не авторизован |
VALIDATION_ERROR |
Некорректные значения полей (title, deadline, managerId, status, startFact, finishFact); startFact позже finishFact; managerId совпадает с владельцем карточки |
NOT_FOUND |
Карточка не найдена, либо (при competenceIds) компетенция каталога не найдена |
PERMISSION_DENIED |
Карточка недоступна для редактирования, либо смена status вызвана не привилегированным пользователем, либо startFact / finishFact переданы не администраторо; нет прав менять managerId или observers (details.field) |
INTERNAL_ERROR |
Внутренняя ошибка сервера; даты не сохранились (details.reason = fact_date_not_saved) |
Пример запроса (POST)
curl -X POST "https://{портал}/rest/{user_id}/{webhook_code}/ipr.ipr.update.json"
-H "Content-Type: application/json"
-H "Accept: application/json"
--data '{
"id": 4201,
"deadline": "2027-01-15",
"observers": [8, 14]
}'
Пример ответа
{
"result": {
"result": {
"id": 4201,
"deadline": "2027-01-15",
"observers": [8, 14],
"status": "WORK"
},
"total": null,
"next": null,
"error": null
}
}