Tags

Tags function as customizable metadata that you assign to folders, workflows, and tasks. These tags identify the specific source of an event and provide custom context about that specific entity. You can assign multiple tags to a single entity.

When an entity triggers an internal event, the system populates that event with the attached tags. These tags propagate through the triggered JSONata context entity, which then forwards them into the context of a notification workflow. This allows the notification workflow to read the tags as variables and customize its actions accordingly. In short, tags act as custom data that the source injects into an event, rather than being a result of the event itself.

When an event occurs, these tags travel with it. You use them as variables, such as ${js.trigger.completed.tags.email}, within your universal notification workflow. By reading these tags, the workflow dynamically customizes its operations.

For example:
  • Dynamic notifications: Sends emails to different users based on the specific tag values passed by the event source.
  • Tasks suppression: Triggers emails or actions only when specific workflow statuses are met.

This feature helps you to use one centralized workflow to handle notifications from various sources. Instead of creating separate workflows for every internal event, you use tags to route information. This solves the challenge of notifying different users based on where a specific event originates.

Tags as custom variables

When you attach a tag to a folder, workflow, or task, you are effectively creating a custom metadata point. You can reference this information directly within your workflows or tasks using the ${var.tag_name} syntax. At runtime, the system automatically replaces this placeholder with your assigned value, treating it exactly like a standard variable.

When multiple variables share the exact same name, the system uses a specific hierarchy to determine which value takes precedence. Variables are evaluated from the most specific (highest priority) to the most broad (lowest priority):
  • Submission values
  • Task tags
  • Workflow tags
  • Variable table tags
  • Folder tags
Folder tags have the lowest priority. The system checks the folder hierarchy starting from the specific subfolder where the item resides and moves upward to the root folder.

Practical application

The company mailroom

Imagine a company with three departments: IT, HR, and Security. Every time a process related to a specific department finishes, the system sends an alert to the manager of the department. In the old system, building a custom mail delivery system for each department created a massive amount of extra work.

Figure 1. Flow diagram_Tags
The New Way: Tags

The tag feature enables you to build one single, smart mailroom - a universal notification workflow- that handles alerts for the entire company. To route these alerts, you apply tags function like metadata sticky notes.

The Renewal of software licenses workflow contains a tag with the value Email: IT-Manager. Similarly, the Monthly payroll and Security drill workflows contain tags with their respective email addresses as tag values. These workflows act as event sources. When a workflow finishes, the system packages the tags from that source and sends them as a data payload to the universal notification workflow.

The alert arrives at the notification workflow, where the system reads the tag, identifies the value (such as Email: IT-Manager), and forwards the message to that specific department. Similarly, when the Monthly payroll or Security drill workflow finishes, the alert reaches the same universal notification workflow, which then routes the email to the concerned department based on its unique tag. This eliminates the need to build separate mail delivery systems; you simply use one universal workflow and apply different tags to your tasks to direct the actions of the system.

The system propagates only tags from the task, workflow, and folder hierarchy into these events. When a workflow runs, you might introduce temporary variables via manual submission values or predefined variable tables. Although submission values have the absolute highest priority when the system resolves variable names locally, the system ignores them entirely when generating the event payload.

Examples

  1. Define the definition as follows to add a tag to a folder:
    ---
    kind: Folder
    def:
      folder: /FOLDER_1/
      description: This is folder 1
      tags:
      - name: IT_DEP
        value: itdep@hcl.com
  2. Define the definition as follows to add tags to a workflow and task:
    ---
    kind: JobStream
    def:
      folder: /
      name: WKF01
      workstation: /CLOUD
      tags:
      - name: FRUITS
        value: Mango
      - name: WEATHER
        value: Cloudy
      saturdayIsFree: true
      sundayIsFree: true
      priority: 10
      asap: false
      perJobLatestStart: false
      lateStartAction: doNotRun
      matchingCriteria:
        type: previous
      resourceDependencies: []
      jobs:
      - name: EXECUTABLE_HIERARCHY
        workstation: /HCL_K8S_AGT_0
        tags:
        - name: FRUITS
          value: Peach
        - name: AGENCY
          value: Sales
        jobDefinition:
          type: executable
          task:
            executable:
              interactive: false
              suffix: ""
              script: |-
                echo "Those are the Workflow tags"
                echo ${var.FRUITS}
                echo ${var.WEATHER}
    
                echo "Those are the Task tags"
                echo ${var.AGENCY}
                echo ${var.FRUITS}
              credential: {}
          recovery:
            action: STOP
            repeatAffinity: false
        priority: 10
        asap: false
        lateStartAction: doNotRun
        lateAction: continue
        resourceDependencies: []
        minDurationAction: continue
        maxDurationAction: continue
        skipLateAction: overlap
      - name: EXECUTABLE_NO_HIERARCHY
        workstation: /HCL_K8S_AGT_0
        jobDefinition:
          type: executable
          task:
            executable:
              interactive: false
              suffix: ""
              script: |-
                echo "Those are the Workflow tags"
                echo ${var.FRUITS}
                echo ${var.WEATHER}
    
                echo "This Task has no tags"
              credential: {}
          recovery:
            action: STOP
            repeatAffinity: false
        priority: 10
        asap: false
        lateStartAction: doNotRun
        lateAction: continue
        resourceDependencies: []
        minDurationAction: continue
        maxDurationAction: continue
        skipLateAction: overlap
    The workflow generates the following output for both tasks:
    Task log details
    
    ===============================================================
    = JOB            : /CLOUD#WKF01[(1357 04/02/2026)].EXECUTABLE_NO_HIERARCHY
    = JOB STREAM ID  : xyfgrb4658-8591-460e-b511-fbghtyunsja
    = JOB ID         : ghbfyrhd-d78b-47fa-8c3d-9fbgythdjd
    = TASK           :
    ---
    executable:
      interactive: false
      suffix: ""
      script: |-
        echo "Those are the Workflow tags"
        echo Mango
        echo Cloudy
    
        echo "This Task has no tags"
      credential: {}
    
    = AGENT          : /HCtg_hjtbf_gtyf_0
    = Job Number     : 604442
    = Thu 04/02/2026 13:57:49 Z: 
    ===============================================================
    Those are the Workflow tags
    Mango
    Cloudy
    This Task has no tags
    
    ===============================================================
    = Exit Status:  0
    ===============================================================
    = Output Properties: 
    =   processId    : rfdtyhu
    =   returnValue  : 0
    ===============================================================
    = Elapsed Time (hh:mm:ss) : 00:00:00
    = Thu 04/02/2026 13:57:49 Z
    ===============================================================
    Task log details
    
    ===============================================================
    = JOB            : /CLOUD#WKF01[(1357 04/02/2026)].EXECUTABLE_HIERARCHY
    = JOB STREAM ID  : drftgyu-8591-erdft-b511-ghbyuj
    = JOB ID         : dfrcftg-ef56-rft5-8d11-frgtyhv
    = TASK           :
    ---
    executable:
      interactive: false
      suffix: ""
      script: |-
        echo "Those are the Workflow tags"
        echo Peach
        echo Cloudy
    
        echo "Those are the Task tags"
        echo Sales
        echo Peach
      credential: {}
    
    = AGENT          : /HfL_edfrt_tgy_0
    = Job Number     : 661635
    = Thu 04/02/2026 13:57:49 Z: 
    ===============================================================
    Those are the Workflow tags
    Peach
    Cloudy
    Those are the Task tags
    Sales
    Peach
    
    ===============================================================
    = Exit Status:  0
    ===============================================================
    = Output Properties: 
    =   processId    : ftgyu
    =   returnValue  : 0
    ===============================================================
    = Elapsed Time (hh:mm:ss) : 00:00:00
    = Thu 04/02/2026 13:57:49 Z
    ===============================================================