SugarTalk - ресурс для администраторов и разработчиков системы SugarCRM.

Расширение логики модулей или Logic Hooks. Часть 1

Обдумывая, что бы написать для следующей статьи, я подумал, что ничего еще не было ничего написано про расширение логики стандартных модулей в SugarCRM. Так, сама собой возникла следующая тема: Logic Hooks (на русском языке не звучит дословный перевод «логический хук/крюк», поэтому в дальнейшем ограничимся коротким русским вариантом: хук).

В платных версиях SugarCRM есть так называемый workflow, модуль, через который можно производить уведомления о достижении какого-то события (например: отказ от сделки). Так как бесплатная CRM не имеет данного модуля, то и уведомления придется тоже осуществлять через данные «хуки».

Logic Hooks позволяет добавлять функционал к основным функциям класса Bean (таким, например, как перед сохранением, перед удалением и т.д) в upgrade safe стиле. Напомним, что upgrade safe — это неизменяемый при обновлении CRM системы кастомный код. То есть, написав такую логику, вам не надо заботиться о том, что же случится с вашими логическими связями после обновления SugarCRM до какой-нибудь новой версии. Достигается это тем, что ваш «хук» код отделяется от основного CRM кода.

Код объявления Logic Hook должен находиться по пути custom/modules/Название_модуля/logic_hooks.php. Если отсутствует какая-либо из папок по данному пути, создайте ее, как и сам файл.

Например: custom/modules/Opportunities/logic_hooks.php -определение хуков для модуля сделок.

Пример содержимого файла:

01
02
03
04
05
06
07
08
09
10
<?php
$hook_version = 1;
$hook_array = Array();
$hook_array['before_save'] = Array();
$hook_array['before_save'][] = Array(10, 'Проверяем статус заказа, и если надо завершаем выполнение на бирже', 'custom/Extension/modules/Opportunities/Ext/CustomLogicHook.php','OpportunityCustomLogicHook', 'checkOpportunityClosedFailed');
$hook_array['after_save'] = Array();
$hook_array['after_save'][] = Array(101, 'Проверка и добавление авто связи с контактом', 'custom/Extension/modules/Opportunities/Ext/CustomLogicHook.php','OpportunityCustomLogicHook', 'afterSaveRelationshipToContact');
$hook_array['after_delete'] = Array();
$hook_array['after_delete'][] = Array(98, 'Удаляем запись из финансов', 'custom/Extension/modules/Opportunities/Ext/CustomLogicHook.php','OpportunityCustomLogicHook', 'afterDeleteFinanceDelete');
?>

Теперь объясним содержание данного файла.

Переменная $hook_version = 1; — Версия хука, пока доступна только первая.

Двумерный массив $hook_array, где ключом является название события на которое «вешается» наш logic hook, а значение – массив, содержащий необходимые для запуска хука параметры в следующем порядке:

1. Приоритет выполнения хука. Хук с наименьшим значением выполняется первее.

2. Имя / Описание хука. Нигде не используется, так что называйте как вам угодно, лишь бы вы потом позже могли вспомнить, что делает этот хук.

3. Путь к файлу с вашим хуком. Желательно располагать данный файл тоже в папке custom того же модуля, чтобы вам было ясно, к какому модулю этот хук относится. Мне удобнее располагать данные файлы в папке
custom/Extension/modules/<Название_модуля>.

4. Имя класса вашего logic hook.

5. Имя функции в классе logic hook.

Мы еще не разобрали возможные ключи массива хуков, которые соответствуют событиям Bean класса в CRM, к которым мы «цепляем» наш функционал. А их довольно много и делятся они на 3 типа:

1) Application hooks (Хуки приложения).
Особенность этих хуков в том, что они не используют bean класс в качестве аргумента. Проще говоря, не работают с текущим bean классом, а позволяют прицепить общий для всей CRM системы функционал. Например, вам необходимо добавить javascript на все страницы — это самый простой пример использования таких хуков.

Варианты application hooks:

  • after_ui_frame

Вызывается после того, как сформировался основной фрейм страницы, до того, как отобразился footer страницы.

  • after_ui_footer

После формирования основного фрейма страницы и после того как сформировался footer.

  • server_round_trip

Вызывается в конце каждой страницы.

2) Module hooks (Хуки модулей).
Самые распространенные хуки. Связаны с текущим bean классом SugarCRM. И в качестве аргумента в функцию передается ссылка на bean класс. В результате чего можно легко изменить текущий класс, проверить текущие значения, изменить эти значения, вызвать оповещение и т. д.

Варианты module hooks:

  • before_delete

Вызывается перед удалением записи

  • after_delete

Вызывается после удаления записи

  • before_restore

Вызывается перед восстановлением ранее удаленной записи

  • after_restore

Вызывается после восстановления удаленной записи

  • after_retrieve

Вызывается после извлечения записи из БД. Не вызывается при создании новой записи

  • before_save

Вызывается перед сохранением записи

  • after_save

После сохранения записи в БД

  • process_record

Вызывается после составления запроса к БД на извлечение записи. Это дает возможность разработчику посмотреть и протестировать автоматически составленный запрос. Это также хороший хук для установки значений полей в форме списка и просмотра, он не вызывается при формировании формы редактирования.

3) Hooks for Users module (Хуки для модуля пользователей)
Варианты данных хуков:

  • before_logout

Вызывается перед логаутом пользователя

  • after_logout

Вызывается после логаута пользователя

  • after_login

Вызывается после успешной авторизации пользователя и входа в систему

  • login_failed

Вызывается после неудачной попытки авторизации, когда введен неверный логин или пароль. Этот хук можно использовать для оповещения администратора о попытке подбора пароля.

Сегодня мы рассмотрели теорию logic hook в SugarCRM. В следующей части мы изучим несколько практических примеров использования, после которых, я думаю, у вас уже не останется каких либо вопросов или неясностей.

Высказать своё мнение о статье Вы можете в комментариях, если Вас интересуют какие либо вопросы или дополнения, то обсуждение по данной теме доступно на нашем форуме.

Последнее изменениеПонедельник, 10 июля 2017 18:08
  • Оцените материал
    (0 голосов)
  • Опубликовано в SugarCRM
  • Прочитано 22326 раз

7947 комментарии

Оставить комментарий

Убедитесь, что вы вводите (*) необходимую информацию, где нужно
HTML-коды запрещены

Наверх

Последние новости

  • 1
  • 2
  • 3
  • 4

Популярные новости

  • 1
  • 2
  • 3
  • 4