New field event rules plugin available

51 views
Skip to first unread message

Diego Ruiz

unread,
Jun 22, 2026, 7:46:45 AM (6 days ago) Jun 22
to iDempiere
Hi community, 

New plugin available for testing: [Field Event Rules](https://docs.idempiere.org/docs/available-plugins/field-event-rules).

We've added a new plugin to the documentation: **Field Event Rules**, sponsored by **Energy Kinetics, Inc.**

Field Event Rules let you define **basic callouts and before save events**, things like "when this field changes, do that" logic directly in the Application Dictionary no Java, no IDE, no plugin required. You can auto-fill fields, recalculate values, copy data between fields, and validate data on field change or on save, all through a configuration window.

The plugin is currently in **Beta** and has not been tested in production. We'd love to hear from anyone willing to give it a try.

Documentation: https://docs.idempiere.org/docs/available-plugins/field-event-rules

As always, any feedback on this one would be appreciated!

Sources are on GitHub: [https://github.com/bxservice/de.bxservice.fieldEventRules](https://github.com/bxservice/de.bxservice.fieldEventRules)

Thanks to Energy Kinetics for sponsoring this one!

Best regards,
Diego

Crew Techno

unread,
Jun 26, 2026, 9:59:54 AM (2 days ago) Jun 26
to idem...@googlegroups.com
Hi Diego,

My name is Fauzan, a developer from Indonesia. I've been using the Field Event Rules plugin you built for our internal iDempiere setup — it's been a fantastic tool, thank you for building it!

I wanted to share a feature I developed on top of it, driven by a specific business need we had.

The Need:
When a user creates a new record (e.g., AD_User), I needed the system to automatically create a related record in a different table (e.g., AD_User_OrgAccess) — without writing additional Java code.

What I Implemented:
I added a single new field AD_Target_Table_ID ("Target Table") to BXS_FieldEventAction. For the existing Target Column field (AD_Column_ID), I added a Dynamic Validation with this formula:

AD_Column.AD_Table_ID = COALESCE(NULLIF(@AD_Target_Table_ID@, 0), @AD_Table_ID@)

The logic is simple:

If Target Table is filled → the Target Column dropdown shows columns from the target table
If Target Table is empty → the Target Column dropdown shows columns from the source table (original behavior, unchanged)
This avoids adding a separate "target column" field — the existing AD_Column_ID field serves both purposes through dynamic validation.

Engine Changes (FieldEventRuleEngine.java):
I added two methods:

collectCrossTableAction() — collects all actions that have a Target Table set. Each action maps to one column + one value in the target table.
applyCrossTableRecords() — after all actions are collected, creates a new PO in the target table, sets all column values at once, and calls saveEx() wrapped in a savepoint to prevent transaction poisoning if the cross-table insert fails.
This feature only fires on PO_AFTER_NEW, since the source record's ID is only available after the INSERT is committed.

My Question:
Does this approach fit the architecture you had in mind for the plugin? I'd love to hear your feedback before polishing it further. If it's useful for the broader iDempiere community, I'd be happy to submit it as a contribution.

Thank you again for the great work on this plugin!

Best regards,
Fauzan

--
You received this message because you are subscribed to the Google Groups "iDempiere" group.
To unsubscribe from this group and stop receiving emails from it, send an email to idempiere+...@googlegroups.com.
To view this discussion visit https://groups.google.com/d/msgid/idempiere/d10ad554-79ab-4f55-b2a7-36d9bdb66474n%40googlegroups.com.
03.png
01.png
02.png

Diego Ruiz

unread,
Jun 26, 2026, 10:18:59 AM (2 days ago) Jun 26
to iDempiere
Hi Fauzan, 

Thanks for sharing your feedback and use cases. 

Sounds very interesting what you've done. I would appreciate if you could create a pull request with the changes to add the functionality you just described. 

On a side note, If you use PO_AFTER_SAVE instead of PO_AFTER_NEW, you could capture updates as well in case that's useful.

Looking forward to your contribution. 

Best regards,
Diego

Crew Techno

unread,
Jun 26, 2026, 11:29:47 AM (2 days ago) Jun 26
to idem...@googlegroups.com
Hi Diego,

I've submitted the pull request here:
https://github.com/bxservice/de.bxservice.fieldEventRules/pull/1

Regarding your suggestion about PO_AFTER_SAVE — I noted it in the PR description as a planned follow-up. Happy to implement it as a separate PR once this one is reviewed.

Thanks again for your quick response!

Best regards,
Fauzan

Grtfhdr Getut

unread,
Jun 26, 2026, 1:04:16 PM (2 days ago) Jun 26
to iDempiere

Nasleem Madrojie

unread,
Jun 27, 2026, 6:15:08 AM (yesterday) Jun 27
to idem...@googlegroups.com
Hi..
It seems like a lot can be done with this plugin, especially with the additional feature from Fauzan.
Thanks all

Reply all
Reply to author
Forward
0 new messages