Participant/ assets dynamic profile setup
A dynamic client profile is a flexible data model that includes calculated values, parameters, and characteristics of a participant. The system uses this model to assess the possibility or impossibility of a participant progressing through the process.
The flexibility of the profile is ensured by the fact that this data model is based on a key: value structure in the form of a Map interface.
Map - https://docs.oracle.com/javase/8/docs/api/java/util/Map.html
Saving data to the profile is easy. To do this, you need to call just one node function "Save to Profile" in the decision process execution/ workflow and pass the keys:
name - name of the node function in the workflow
expression - variable from the workflow context that should be saved into the profile
field name - name of the parameter that is about to be saved
Example:

Adding a Profile Tab for a Participant in TimveroOS
To display a profile tab for a Participant (or any other entity implementing ProcessEntity
) in the client interface, you don’t need to configure routes or UI manually — it's enough to create a special marker class.
What You Need to Do:
Make sure your entity (e.g.,
Participant
) implements theProcessEntity
interface. Example:@Entity @Table(name = "participant") public class Participant extends AbstractAuditable<UUID> implements ProcessEntity { // additional fields and methods }
Create a controller class extending the abstract class
AbstractProfileTab<T>
, whereT
is your entity type.@RequestMapping("/profile") @Controller @Order(3000) public class ParticipantProfileTab extends AbstractProfileTab<Participant> { // Empty marker class — no additional logic required }
Add localization for the tab title Define a key in your localization properties file to set the tab label in the UI. Example (in
messages.properties
or equivalent):participant.tab.profile=Profile
How It Works:
timveroOS automatically detects that the
Participant
entity should have a "Profile" tab.Thanks to inheritance from
AbstractProfileTab
, the system will automatically load the required components and data, link the tab to the proper card, and render the result without additional configuration.You can control the tab’s position using the
@Order
annotation.
Why Use an Empty Class:
This approach avoids boilerplate code and allows you to manage tabs declaratively: if the class exists — the tab appears. It’s clean, transparent, and aligned with the extensibility principles of TimveroOS.
Last updated
Was this helpful?