Przejdź do głównej zawartości
Wersja: 7.x

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
  • 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