How to register a listener to a specific entity during runtime?
0
I want to be able to select an entity and make it log any changes that a user makes to it. Designtime we can add a event for Before- or After- Create, Change or Delete. But how can we do this runtime? Got as far a creating this java-snippet, calling "Core.getListenersRegistry().registerBeforeDeleteListener": public class AuditedEntity_GenericEntityListener extends CustomJavaAction<java.lang.Void> { public AuditedEntity_GenericEntityListener(IContext context) { super(context); } @java.lang.Override public java.lang.Void executeAction() throws Exception { // BEGIN USER CODE com.mendix.core.Core.getLogger("AuditedEntity_GenericEntityListener") .info("Started adding AuditedEntities listeners"); List<IMendixObject> objects = new ArrayList<>(); // Create an instance of Audit.LayoutSettings IMendixObject systemUser = Core.instantiate(getContext(), "Administration.Account"); objects.add(systemUser); GenericEntityListener.registerListener(objects); return null; // END USER CODE } /** * Returns a string representation of this action * @return a string representation of this action */ @java.lang.Override public java.lang.String toString() { return "AuditedEntity_GenericEntityListener"; } // BEGIN EXTRA CODE public class GenericEntityListener { public static void registerListener(List<IMendixObject> AuditedEntities) { Core.getListenersRegistry().registerBeforeDeleteListener(ListDeletedObject -> { //Anytime any object gets deleted, this Listener-function gets triggered... for (IMendixObject DeletedObj : ListDeletedObject) { String DeletedObjectentityName = DeletedObj.getType(); for (IMendixObject AuditedEntity : AuditedEntities) { if (DeletedObjectentityName == AuditedEntity.getType()) {//getType() returns the fully qualified entity name, like "MyModule.MyEntity". Core.getLogger("AuditedEntities").info(DeletedObjectentityName + "-object " + DeletedObj.getId() + " has been deleted."); } } } }); } } // END EXTRA CODE This makes it trigger the function at any object-deletion, not just the entities we selected. Is there during runtime, a way to register a listener, per specific entity? And including the context at the time of triggering the event, so we know the user and their information.