b3dee2047c
Tests / frontend-test (pull_request) Successful in 1m15s
navigateToRequestLink (shared/routing): если абсолютная ссылка ведёт на ЭТУ ЖЕ страницу портала и на просмотр заявки — открываем её через navigate(), то есть сменой rp-параметров, а не перезагрузкой SPFx-страницы (она грузится секунды, а показать нужно ту же страницу с другими параметрами). Раздел бокового меню берётся текущий: заявка показывается в панели поверх раздела, и переход по ссылке не должен переключать раздел под ней. LinkField перехватывает только «обычный» клик: с Ctrl/⌘/Shift/Alt и не левой кнопкой отдаёт браузеру, href настоящий — ссылку по-прежнему можно скопировать или открыть в отдельной вкладке. Чужой сайт, другая страница и ссылка не на заявку возвращают false и обрабатываются браузером как раньше. Тесты на requestLinkUrl/navigateToRequestLink в routing.test.ts; heft test — 179 успешных, 0 падений. В docs/routing.md добавлены hr-dismissal и clearance-form. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
95 lines
5.5 KiB
Markdown
95 lines
5.5 KiB
Markdown
# Маршрутизация портала заявок (для интеграций)
|
|
|
|
Портал — **один web part на одной странице**. Что показать, он решает по **параметрам URL**.
|
|
Этот документ — контракт ссылок для тех, кто их формирует (Power Automate, кнопки, уведомления).
|
|
|
|
> Страница портала: `https://<тенант>.sharepoint.com/sites/requests/SitePages/<Страница>.aspx`
|
|
> (точный адрес страницы уточнить у владельца портала).
|
|
|
|
---
|
|
|
|
## Важно: префикс `rp`
|
|
|
|
Имена `id`, `mode`, `type` **зарезервированы SharePoint** и ломают страницу (`?id=` →
|
|
«Элемент не существует»). Поэтому все наши параметры — с префиксом **`rp`**: `rpmode`, `rptype`, `rpid`, `rpsource`.
|
|
|
|
---
|
|
|
|
## Режимы
|
|
|
|
| Режим | Когда | Параметры | Что открывается |
|
|
| --- | --- | --- | --- |
|
|
| **Подача** (по умолчанию) | нет наших параметров | — | Категории → плитки → форма |
|
|
| **Согласование** | согласующему пришла заявка | `rpmode=approve` + `rptype` + `rpid` | Заявка только для чтения + кнопки решения |
|
|
| **Создание на основе** | производная заявка с предзаполнением | `rptype` + `rpsource` | Форма, предзаполненная из исходной заявки |
|
|
|
|
---
|
|
|
|
## Параметры
|
|
|
|
| Параметр | Значение | Пример |
|
|
| --- | --- | --- |
|
|
| `rpmode` | `approve` — режим согласующего (иначе не указывать) | `rpmode=approve` |
|
|
| `rptype` | ключ формы (см. таблицу ниже) | `rptype=recruiting-hire` |
|
|
| `rpid` | **Id элемента списка ДАННЫХ** заявки (колонка ИД) — для `approve` | `rpid=42` |
|
|
| `rpsource` | **Id исходной заявки** для предзаполнения — для «создания на основе» | `rpsource=42` |
|
|
|
|
---
|
|
|
|
## Ключи форм (`rptype`)
|
|
|
|
| `rptype` | Заявка | Категория | Согласование | Режим согласующего | Создание на основе |
|
|
| --- | --- | --- | --- | --- | --- |
|
|
| `recruiting-selection` | Заявка на подбор | Рекрутинг | нет | нет | — |
|
|
| `recruiting-hire` | Заявка на прием | Рекрутинг | да | да | — |
|
|
| `it-workplace-setup` | Организация рабочего места | IT | да | да | из `recruiting-hire` |
|
|
| `it-1c-ticket` | Заявка в отдел 1С | IT | да | да | — |
|
|
| `hr-dismissal` | Заявление на увольнение | Отдел кадров | да | да | — |
|
|
| `clearance-form` | Обходной лист | Отдел кадров | да | да | создаётся сам по согласованному `hr-dismissal` |
|
|
| `hr-transfer` | На перемещение сотрудников | Отдел кадров | (в разработке) | — | — |
|
|
|
|
---
|
|
|
|
## Готовые примеры ссылок
|
|
|
|
Пусть страница портала = `…/sites/requests/SitePages/Портал-Заявок.aspx`.
|
|
|
|
**Согласующему открыть заявку на прием №42:**
|
|
```
|
|
…/Портал-Заявок.aspx?rpmode=approve&rptype=recruiting-hire&rpid=42
|
|
```
|
|
|
|
**Согласующему открыть заявку «орг. рабочего места» №7:**
|
|
```
|
|
…/Портал-Заявок.aspx?rpmode=approve&rptype=it-workplace-setup&rpid=7
|
|
```
|
|
|
|
**Создать «орг. рабочего места» на основе заявки на прием №42 (предзаполнение):**
|
|
```
|
|
…/Портал-Заявок.aspx?rptype=it-workplace-setup&rpsource=42
|
|
```
|
|
|
|
**Согласующему открыть заявку в отдел 1С №12:**
|
|
```
|
|
…/Портал-Заявок.aspx?rpmode=approve&rptype=it-1c-ticket&rpid=12
|
|
```
|
|
|
|
---
|
|
|
|
## Кто формирует ссылки
|
|
|
|
- **Согласование** (`rpmode=approve…`) — поток Power Automate, который уведомляет согласующего
|
|
(аналог `ct-notify-kps`). Поток знает `rpid` (Id элемента списка данных) и подставляет `rptype`
|
|
константой под свою форму.
|
|
- **Создание на основе** (`rptype…&rpsource…`) — кнопка на заявке-источнике (напр. «Создать заявку
|
|
на организацию рабочего места на основе текущей»). Кнопка подставляет `rpsource` = Id текущей заявки.
|
|
|
|
---
|
|
|
|
## Примечания
|
|
|
|
- `rpid` и `rpsource` — это **Id элемента списка ДАННЫХ** (не строки согласования).
|
|
- «Создание на основе» — **снимок**: значения копируются на момент создания; дальнейшие изменения
|
|
исходной заявки в производную не переносятся. У производной сохраняется колонка-источник (Lookup).
|
|
- Если нужного набора параметров нет/они неполные — портал открывается в обычном режиме подачи.
|