Event handler-y
Informacje ogólne
Event handler-y są potężnym narzędziem dającym możliwość wykonania dodatkowych akcji podczas wykonywania systemowych operacji bez konieczności modyfikacji/ingerencji silnika systemu.
Rejestracja handler-a
Funkcją odpowiedzialną za ich rejestrację (czyli dodanie do systemu) jest metoda \App\EventHandler::registerHandler()
App\EventHandler::registerHandler('EntityAfterSave', 'OpenStreetMap_OpenStreetMapHandler_Handler', 'Accounts,Leads,Contacts', '', 3);
Metoda przyjmuje aż osiem parametrów ale tylko dwa są wymagane:
registerHandler(string $eventName, string $className, $includeModules = '', $excludeModules = '', $priority = 5, $isActive = true, $ownerId = 0, $mode = 1): bool
Wymagane parametry
$eventName
- nazwa event-u (pełna lista w punkcie Typy)$className
- klasa, której kod zostanie wywołany przy wykonaniu handler-a
Opcjonalne parametry
$includeModules
(default: '') - określa, w których modułach ma być aktywny dany EventHandler$excludeModules
(default: '') - określa, dla których modułów EventHandler ma nie działać$priority
(default: 5) - priorytet wykonania, używany podczas ustalania kolejności wykonywania$isActive
(default: true) - określa czy EventHandler jest aktywny$ownerId
(default: 0) - określa Id modułu właściciela event-u$mode
(default: 1) - określa czy jest możliwość edycji handler-a (1 - tak, 0 - nie)
Przykład
\App\EventHandler::registerHandler('EntityBeforeSave', 'Vtiger_FieldsDependency_Handler', implode(',', $modules), '', 5, true, 0, \App\EventHandler::EDITABLE);
class Vtiger_FieldsDependency_Handler
{
/ * EntityBeforeSave function.
*
* @param App\EventHandler $eventHandler
*/
public function entityBeforeSave(App\EventHandler $eventHandler): void
{
//kod handler-a
}
}
Typy
Poniżej znajduje się lista event handler-ów
Operacje na rekordach
Lista dla wersji: 6.4.180
zapis
- EntityBeforeSave
- EntityAfterSave
- EntityAfterSaveAjax
usuwanie
- EntityBeforeDelete
- EntityAfterDelete
zmiana stanu rekordu
- EntityChangeState
usuwanie powiązania
- EntityBeforeUnLink
- EntityAfterUnLink
tworzenie powiązania
- EntityBeforeLink
- EntityAfterLink
- EntityAfterLinkForSource
transfer relacji
- EntityAfterTransferLink
- EntityBeforeTransferUnLink
- EntityAfterTransferUnLink
konwersja lead-a na kontrahenta
- EntityBeforeConvertLead
- EntityAfterConvertLead
konwersja rekordów
- RecordConverterAfterSave
aktualizacja stanu magazynowego
- IStoragesAfterUpdateStock
Operacje podczas wyświetlania widoków
widok podglądu rekord
- EntityAfterShowHiddenData
- DetailViewBefore
widok edycji rekord
- EditViewBefore
- EditViewDuplicate
- InventoryRecordDetails
walidacja
- EditViewPreSave - walidacja formularza
- PreDelete - walidacja usuwania
- PreStateChange - walidacja zmiany stanu
zmiana wartości pola
- EditViewChangeValue
pobieranie informacji o rekordzie
- RecordGetData
wyświetlanie przycisków modułu powiązanego
- RelationListLinks
modal generowania PDF-a
- PdfModalBefore
- PdfModalAfter
widok wysyłki wiadomości email
- MailComposeParamBefore
- MailComposeParamAfter
Operacje na grupach
usuwanie grupy
- GroupBeforeDelete
Operacje na użytkowniku
usuwanie użytkownika
- UsersBeforeDelete
- UsersAfterDelete
zapis użytkownika
- UserBeforeSave
- UserAfterSave
logowanie użytkownika
- UsersAfterLogin
wylogowanie użytkownika
- UserLogoutBefore
reset hasła użytkownika
- UsersBeforePasswordChange
- UsersAfterPasswordChange
Operacje na polach wyboru
zmiana nazwy wartości w słowniku
- PicklistAfterRename
usuń wartość słownika
- PicklistAfterDelete
Operacje na wiadomościach email
dodanie do kolejki wiadomości do wysłania
- MailerAddToQueue
wysłanie wiadomości
- MailerBeforeSend
- MailerAfterSend
raportowanie o błędach podczas wysyłania wiadomości
- MailerAddToLogs
- MailerAfterSendError
Operacje na szablonach pdf
generowanie szablonów pdf
- PdfGenerate
- PdfGenerateInit
Wyjątki - pomijanie handler-ów i workflow
- disableHandlers - wyłącz wszystkie osoby obsługujące poza obowiązkowymi
- disableWorkflow - wyłącz tylko handler od worklfow
- disableHandlerByName - wyłącz jeden konkretny handler
$recordModel->setHandlerExceptions(['disableHandlers' => true]);
$recordModel->setHandlerExceptions(['disableWorkflow' => true]);
$recordModel->setHandlerExceptions(['disableHandler' => ['ModTracker_ModTrackerHandler_Handler']]);
Handler-y obowiązkowe
https://github.com/YetiForceCompany/YetiForceCRM/blob/2c14baaf8dbc7fd82d5c585f2fa0c23528450618/app/EventHandler.php#L23