The consultant's engagement ended. The developer who built the integration moved to another team. The partner firm rotated staff. Whatever the reason, you now own a Workday Studio integration you did not write, and the documentation — if it exists — is a one-paragraph description in the Integration System's comment field.
This is one of the most common situations in Workday integration work, and one of the least documented. Here is a structured approach to getting an inherited integration under control without breaking what already runs.
Phase 1: Get the Integration into Your Environment
Before you can understand an integration, you need its source. If the original Studio project files were not handed over, you can retrieve the deployed integration directly from the tenant.
In Workday Studio, open Cloud Explorer and connect to the tenant where the integration runs. Navigate to the integration's collection, right-click, and select Download. This pulls the deployed CLAR (cloud archive) and imports it as a Studio project.
Once imported, the project structure tells you what you are working with:
WSAR-INF/assembly.xml— the assembly definition, describing every component and how they connect.xslfiles — XSLT transformations, usually the bulk of the integration's logic- MVEL expressions — inline code in Eval steps, often handling conditional logic, variable assignment, or data enrichment
- Subassemblies — reusable fragments the integration may call
Open the assembly in Studio's visual editor. The graph view shows the full data flow: which transports bring data in, how the mediation pipeline processes it, and where the output goes. This is your map.
Phase 2: Trace the Data Flow
Read the integration from left to right, the way data moves through it:
Start at the transport. Identify the trigger — is this a scheduled launch (Workday-In with a schedule), an event-driven trigger, or an externally initiated call (HTTP/REST, SOAP)? The trigger tells you when and why this integration runs.
Walk the mediation. Follow the pipeline step by step. For each component, answer three questions:
- What data does this step receive?
- What does it do to that data?
- What does the next step expect?
Pay particular attention to:
- XSLT transformations — open each
.xslfile and read the<xsl:template match>entries. These define what the transformation expects as input and what it produces. If the XSLT uses<xsl:param>elements, those are runtime parameters passed from the assembly. - Choice Routers — these are conditional branches. Read the routing expressions (usually MVEL or XPath) to understand which conditions send data down which path.
- Splitter / Aggregator pairs — these break a document into parts for parallel or sequential processing, then reassemble the results. Missing or mismatched pairs are a common source of failures.
- Web-service calls — SOAP or REST steps that call back into Workday or reach external systems. Note the endpoints, authentication method (ISU credentials, X.509, OAuth), and what data they return.
Check the error path. Look for a global error handler in the assembly. If one exists, trace where errors are routed — common patterns include writing to a log file, sending an email notification, or posting to a monitoring endpoint. If no error handler exists, that is your first red flag: any failure will produce a generic Integration Event error with minimal detail.
Phase 3: Identify Fragile Points
With the data flow mapped, look for the patterns that cause inherited integrations to fail:
Hardcoded values. Search XSLT files and MVEL expressions for literal strings that look like tenant-specific data: URLs, endpoint addresses, worker IDs, organization reference IDs, or file paths. These break when the integration is moved between tenants (sandbox to production) or when the referenced data changes.
Undocumented dependencies. Check whether the integration calls Workday web services that rely on specific security-group permissions, custom reports that may have been modified, or Integration System Users (ISUs) whose credentials could expire. Each of these is a potential point of failure that will not surface until the dependency changes.
Version-sensitive XSLT. Workday's XML schema changes with each biannual release. XSLT that uses <xsl:template match> on specific element paths may break if Workday renames or restructures those elements. Look for templates that match deeply nested paths — these are the most vulnerable.
Missing validation. Check whether the integration validates incoming data before processing it. A Splitter that iterates over a document without checking for empty nodes will fail silently or produce corrupt output. Validation steps (validate, validate-exp, validate-xpath) should appear before any transformation that assumes a specific data shape.
Memory-risky patterns. If the integration processes large documents (payroll runs, full worker exports), check whether the XSLT uses streaming. Standard DOM-based XSLT loads the entire document into memory — roughly 10x the file size. For documents over 100 MB, this risks hitting Workday's 1.5 GB memory limit per integration. XSLT 3.0 streaming processes only the current node, keeping memory usage proportional to the output rather than the input.
Phase 4: Build a Safety Net
Before changing anything, establish a baseline:
Review recent Integration Events. In the Workday tenant, pull up the integration's run history. Look at the last 10–20 runs: how long each took, whether any failed, and what the step-by-step event log shows. This tells you what "normal" looks like.
Set up AUnit tests. Studio includes AUnit, a JUnit 3-based testing framework that runs locally. Create test cases for the integration's critical paths — the transformations that produce the output the downstream system consumes. AUnit lets you supply test input, run the assembly (or individual subassemblies), and assert on the output. Even basic tests that verify "this input produces this expected output" will catch regressions before they reach production.
Add log steps at decision points. If the integration lacks logging, add Log steps before and after Choice Routers, Splitters, and web-service calls. These write to the Integration Event's step log, giving you visibility into what happened during a run without changing the integration's behavior.
Phase 5: Make It Yours
With a safety net in place, you can start making targeted improvements:
- Replace hardcoded values with integration attributes or launch parameters
- Add a global error handler if one is missing
- Extract repeated logic into subassemblies
- Add validation steps before transformations that assume specific input shapes
- Document what the integration does in Studio's description fields and in your team's knowledge base
Each change should be deployed to a sandbox tenant and tested through a full run before moving to production. Compare the output and run duration against your baseline to verify nothing changed unexpectedly.
Accelerating the Process
Tools like kiweely can significantly compress the time this process takes. kiweely's assistant can download an integration from a tenant, walk through the assembly logic in conversation, explain what each step does, identify hardcoded values and missing error handling, and help you write AUnit tests — all without requiring you to read raw XSLT or trace assembly graphs manually. For teams inheriting multiple integrations at once, this turns a weeks-long discovery process into focused sessions per integration.
The goal is not to rewrite the integration. It is to understand it well enough to maintain it confidently, catch problems before they reach production, and make changes without fear of breaking what works.