С помощью атрибута @type
можно задавать не только типы представлений (форма/таблица/канбан-доска), но и реализовать редирект на другое представление.
Чтобы переслать пользователя с /views/user/uv_hub
на /views/base/cool_user_view
нужно указать ссылку на base.cool_user_view
в коде представления user.uv_hub
следующим образом:
SELECT
@type = &base.cool_user_view
Этот функционал может быть полезен
В системе реализованы 3 пользовательские роли:
id | name |
---|---|
2 | Boss |
3 | Manager |
4 | Sales_Manager |
Мы хотим, чтобы при заходе в систему пользователи разных ролей видели разные меню.
Мы создали 3 представления для каждой из ролей (user.boss_menu
, user.manager_menu
, user.sales_menu
) и еще одно общее (user.main_menu
), которое будет отображаться в случае, если роль пользователя другая.
Для этого в коде представления user.main
пишем CASE c выбором вью в зависимости от роли:
SELECT
@type = {
link: CASE
-- Role: Boss
WHEN $$user_id=>role_id = 2
THEN &user.boss_menu
-- Role: Manager
WHEN $$user_id=>role_id = 3
THEN &user.manager_menu
-- Role: Sales Manager
WHEN $$user_id=>role_id = 4
THEN &user.sales_menu
-- Other roles
ELSE &user.main_menu
END
}
При заходе в систему или переходе на представление /views/user/main
пользователю будет показываться меню, соответствующее его роли
Мы храним данные о клиентах-людях, об их контактных лицах и о сотрудниках нашей компании в одной таблице base.people
.
Отличить клиентов от остальных людей можно по булевому полю is_client
, отличить сотрудников - по булевому полю is_employee
. Остальных людей считаем обычными контактами клиентов.
У нас есть три формы с разными данными и разной логикой использования для каждого из этих случаев - crm.person_client_form
, crm.person_form
, hrm.employee_form
. И в каждом представлении, где необходимы ссылки на человека, приходится прописывать определенную логику, чтобы при просмотре формы клиента пользователь видел именно набор полей, характерных для клиента, а не для, например, сотрудника.
Проблема решается созданием общей формы base.person_form
, которая будет пересылать пользователя на нужную ему форму, основываясь на данных в записи.
Код представления base.person_form
:
{
$id reference(base.people)
}:
SELECT
@type = {
link: CASE
-- Client
WHEN $id=>is_client
THEN &crm.person_client_form
-- Employee
WHEN $id=>is_employee
THEN &hrm.employee_form
-- Other people
ELSE &crm.person_form
END,
args: {
id: $id
}
}
Теперь во всех link-ах можно указать "общую" форму, а система сама откроет нужную по условию.
(Указать "общую" форму в качестве формы создания не выйдет, так как при создании неизвестно чем заполнены is_client
и is_employee
)