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:

  1. Make sure your entity (e.g., Participant) implements the ProcessEntity interface. Example:

    @Entity
    @Table(name = "participant")
    public class Participant extends AbstractAuditable<UUID> implements ProcessEntity {
        // additional fields and methods
    }
  2. Create a controller class extending the abstract class AbstractProfileTab<T>, where T is your entity type.

    @RequestMapping("/profile")
    @Controller
    @Order(3000)
    public class ParticipantProfileTab extends AbstractProfileTab<Participant> {
        // Empty marker class — no additional logic required
    }
  3. 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?