Subprocess variable mapping issues causing data loss in multi-level workflows

I’m experiencing data loss when passing variables through multiple subprocess levels in Appian 22.3. Our main process calls a subprocess, which then calls another subprocess. Data passed to the first subprocess maps correctly, but when that subprocess calls the second one, some complex data types (CDTs) are arriving as null.

Here’s how I’m mapping the subprocess node:


ri!parentRequest,
ri!approvalChain,
ri!documentList

The first two variables work fine, but documentList (a CDT array) becomes null in the second subprocess. Variable type consistency seems correct across all three process models - they all use the same CDT definition. I’ve verified the subprocess input/output parameters are configured identically.

Is there something specific about passing CDT arrays through multiple subprocess levels? The workflow debugging is difficult because the data exists in the first subprocess but disappears in the second.

This is a common issue with CDT arrays in nested subprocesses. The problem usually stems from the middle subprocess not properly preserving the variable in its output. Even if you have it defined as an input, you need to explicitly map it in the subprocess’s output tab. Go to your first subprocess, click on the subprocess node that calls the second subprocess, and verify that documentList is mapped in both the Input and Output variable sections of that node configuration.

Let me provide a complete solution addressing all three focus areas of your issue.

Subprocess Input/Output Mapping: The core problem is in how your intermediate subprocess handles the CDT array. Here’s the correct configuration approach:


// First subprocess node configuration:
Inputs: ri!documentList
Outputs: pv!documentList (preserve for next level)

// Within first subprocess, second subprocess node:
Inputs: pv!documentList
Outputs: pv!finalDocumentList

The critical mistake is not preserving the variable through the chain. Each subprocess must explicitly define the variable as both input AND output if it needs to pass through to subsequent levels. In your intermediate subprocess, add documentList to the process variables, then in the subprocess node that calls the third level, map it in both Input and Output tabs.

Variable Type Consistency: Verify CDT version alignment across all three process models. Go to each process model → Properties → Data Types and check the version number next to your Document CDT. If they differ, you need to refresh the CDT reference. Right-click the process model → Refresh Data Types. This ensures all models use the same CDT structure. Also check for any intermediate transformations - if your first subprocess filters or modifies documentList before passing it, ensure the output type matches the expected input type of the second subprocess exactly.

Workflow Debugging Strategy: Implement systematic logging to trace data flow. Add script tasks after each subprocess call that capture variable state. Use this logging pattern to identify the exact point of data loss. Additionally, use the Process Model Testing feature in Appian 22.3 to test each subprocess independently with mock data. This isolates whether the issue is in the mapping configuration or in the subprocess logic itself.

The most likely cause in your case is the intermediate subprocess not having documentList configured as an output variable. Even though it receives the data as input, if it’s not explicitly set as an output, it won’t be available to pass to the next subprocess level. Fix this by adding documentList to your intermediate subprocess’s output variables and mapping it in the subprocess node configuration.

I checked the middle subprocess and you’re right - documentList was defined as an input but not properly configured in the outputs. However, even after adding it to the output variables, I’m still seeing null values. Could this be related to the CDT version or structure? All three process models reference the same CDT, but they were created at different times.

I want to add that variable type consistency extends beyond just using the same CDT name. Check if any of your subprocesses are doing transformations or manipulations on the documentList before passing it forward. Sometimes developers accidentally reassign the variable to a query result or filtered version that changes its structure slightly, breaking the type consistency.