Notification - set a notification when an extended attribute changes
FormValueBeforeChangeNotifyProcessor
This processor sets the value of original source before overwriting its value. In IdmFormInstance is this feature not available yet. It is needed for purpose of the next processor - will be removed, when original source is set by default in service.
FormValueChangedNotifyProcessor
The processor sends a notification about the change in the extended attribute to all who hold the role sets in the configuration. The configuration is handled by configuration properties.
Configuration
Set all these properties in Settings → Configuration
idm.sec.core.event.notification.<Entity Type>.attributesNames=attr idm.sec.core.event.notification.<Entity Type>.roles=testNot
Entity Type here means a type of owner of the form definition. So when you need notification for an extended attribute of identity, then just put IdmIdentity there. See the picture below for example.
Data preparation
Next, we need some role and extended attribute. You can prepare those according to these tutorials. Role: https://wiki.czechidm.com/tutorial/adm/new_role Eav: https://wiki.czechidm.com/tutorial/adm/eav
Configuration of notification
Template
It is up to you what will be in the message. Here is an example of a notification template for our usage. Put entity,eavValues in parameters and chose some name (we use testTemplateName) and subject.
<html> <body> <h3>Dobrý den,<br /> <br /> Na entitě <b>$entity.getUsername()</b> byly změněny monitorované extended attributy:<br /></h3> <br /> #if( !$eavValues.isEmpty() ) #foreach( $field in $eavValues ) Položka: <b>$field.getName()</b> <li>Původní hodnota: <b>$field.getOldValue().getValue().toString()</b></li> <li>Nová hodnota: <b>$field.getNewValue().getValue().toString()</b></li> <br /> #end #end S pozdravem CzechIdM. <br /> <br /> -------------------------------------------------------------------------------------<br /> <h3>Hello,<br /> <br /> On entity <b>$entity.getUsername()</b> were changed monitored extended attributes:<br /></h3> <br /> #if( !$eavValues.isEmpty() ) #foreach( $field in $eavValues ) Property: <b>$field.getName()</b> <li>Original value: <b>$field.getOldValue().getValue().toString()</b></li> <li>New value: <b>$field.getNewValue().getValue().toString()</b></li> #end #end <br /> Regards CzechIdM. </body> </html>
Configuration
* Notification → Configuration * Add - green button * Choose template with name: testTemplateName * Topic of notification is: core:<Entity Type>EavMonitoredFieldsChanged - for example core:IdmIdentityEavMonitoredFieldsChanged * Add other properties
Notification is sent only when something changes.
EavValue entity
For the purpose of the message template, there is created a helpful entity. In this entity, you can get old value and new value. See the example template.