The difference between undefined and null is minimal, and they are often used interchangeably to represent non-value. As a result, users often need clarification and help, especially when designing workflows or debugging errors related to how (and where) these two values are used. This article will go through how each of these values act in a particular way with various tasks.
Null vs. Undefined Data Types
Within the framework of Itential Platform, there are some scenarios where null and undefined behave differently than expected when they are used with various task types. To demonstrate this, please refer to the illustrative examples in the next section followed by a matrix that summarizes how each value behaves between Itential Platform versions.
Merge Task Example
The workflow built in Figure 1 shows a newVariable task named test and an evaluation (eval) task to control the job execution path. In this case, it will pass through a success transition.
Figure 1

In the sections that follow, we will use the example workflow to demonstrate how the merge task returns an object as specified by three distinct scenarios:
- An
undefinedtask input. - An
undefinedkey in a task with multiple outputs (e.g., JST task). - An
undefinedjob variable.
Essentially, the task type determines which key values are returned in the output. If a key value does not appear, the input used in the outgoing task will be null or undefined, depending on the release version you are using.
Undefined Task Input
Figure 2 shows a newVariable task input named fluke2 with its assigned value in Figure 3.
Figure 2

Figure 3

The task dialog for this merge task at the top of the workflow is shown in Figure 4. Notice how the merge task uses data from the newVariable.fluke2 job variable in key yo2.
Figure 4

After a successful workflow run, notice the key/values for the Incoming data to merge (Figure 5).
Figure 5

The merged object in the task output that returns shows a null value for the yo2 key (Figure 6).
Figure 6

Undefined Key in Task with Multiple Outputs (JST Task)
Using the same built workflow, this example shows a JST task input named george2 (Figure 7).
Figure 7

The schema settings for the george2 JST task are depicted in Figure 8.
Figure 8

In the workflow, the Incoming Schema named yo is assigned the value hello (Figure 9).
Figure 9

The merge task uses data from the george2 transformation task in key yo2 (Figure 10).
Figure 10

The incoming data_to_merge (object) that displays is shown in Figure 11.
Figure 11

Once the workflow run is complete, we see the following merged_object specific to the Itential Platform release version.
Merged Object - Itential Platform 2021.2 & 2022.1
The merged object in the task output for 2021.2 and 2022.1 shows a null value for the yo2 key; however, it is stored as undefined (Figure 12).
Figure 12 (2021.2, 2022.1)

Merged Object - Itential Platform 2023.1 & 2023.2
The merged object in the task output for 2023.1 and 2023.2 shows no value for the yo2 key (Figure 13).
Figure 13 (2023.1, 2023.2)

Undefined Job Variable
This example scenario is a newVariable task input named fluke (Figure 14). The assigned value is somethingfluke (Figure 15).
Figure 14

Figure 15

The merge task uses job task data from the fluke variable in key yo2 (Figure 16).
Figure 16

The incoming data_to_merge (object) that displays is shown in Figure 17.
Figure 17

Once the workflow run is complete, we see the following merged_object specific to the Itential Platform release version.
Merged Object - Itential Platform 2021.2 & 2022.1
The merged object in the task output for 2021.2 and 2022.1 shows a null value for the yo2 key; however, it is stored as undefined (Figure 18).
Figure 18 (2021.2, 2022.1)

Merged Object - Itential Platform 2023.1 & 2023.2
The merged object in the task output for 2023.1 and 2023.2 shows no value for the yo2 key (Figure 19).
Figure 19 (2023.1, 2023.2)

Task Matrix (Null vs. Undefined)
When trying to compare two values and one of them is null or undefined, it is obvious from the preceding example that you might get unexpected results. For task types other than merge, use the same workflow example (shown in Figure 1) but substitute each merge task with a different target task type and follow the same example exercise. The matrix (table) below outlines the expected result for each target task.
In the left-most (first) column, three undefined scenarios are listed. Each outgoing task is named in the top-most header row. Depending on the task type, if a key value does not appear, the input used for the outgoing task will be either null or undefined.
- Step 1: Choose the
undefinedscenario listed in the first column and the outgoing task type from the top-most row. - Step 2: Move along the row of the
undefinedscenario and down the column of the task. - Step 3: The entry where the two meet is how it resolves the input for the task. For example, Transformation Task × Undefined Job Variable =
undefined.
| 2023.2.0+ | Merge Task | Eval Task | Transformation Task | Child Job Task | Workflow Engine (WFE) Automated Task | Non-WFE Automated Task |
|---|---|---|---|---|---|---|
| Undefined Task Input | null | null | null | null | null | null |
| Undefined Key in Task with Multiple Outputs (JST Task) | null | null | null | null | null | null |
| Undefined Job Variable | undefined | undefined | undefined | undefined | undefined | null |
| 2023.1.4 – 2023.2 | Merge Task | Eval Task | Transformation Task | Child Job Task | Workflow Engine (WFE) Automated Task | Non-WFE Automated Task |
|---|---|---|---|---|---|---|
| Undefined Task Input | null | null | null | null | null | null |
| Undefined Key in Task with Multiple Outputs (JST Task) | undefined | null | null | null | null | null |
| Undefined Job Variable | undefined | undefined | undefined | null | undefined | null |
| 2023.1.0 – 2023.1.3 | Merge Task | Eval Task | Transformation Task | Child Job Task | Workflow Engine (WFE) Automated Task | Non-WFE Automated Task |
|---|---|---|---|---|---|---|
| Undefined Task Input | null | null | null | null | null | null |
| Undefined Key in Task with Multiple Outputs (JST Task) | null | null | null | null | null | null |
| Undefined Job Variable | null | undefined | undefined | null | undefined | null |
| 2022.1 | Merge Task | Eval Task | Transformation Task | Child Job Task | Workflow Engine (WFE) Automated Task | Non-WFE Automated Task |
|---|---|---|---|---|---|---|
| Undefined Task Input | null | null | null | null | null | null |
| Undefined Key in Task with Multiple Outputs (JST Task) | undefined | null | null | null | null | null |
| Undefined Job Variable | undefined | undefined | undefined | undefined | undefined | null |
| 2021.2 | Merge Task | Eval Task | Transformation Task | Child Job Task | Workflow Engine (WFE) Automated Task | Non-WFE Automated Task |
|---|---|---|---|---|---|---|
| Undefined Task Input | null | null | null | null | null | null |
| Undefined Key in Task with Multiple Outputs (JST Task) | null | null | null | null | null | null |
| Undefined Job Variable | null | undefined | undefined | null | undefined | null |