Integration Builder: Sub-Flow Example
In this article, let's look at a sub-flow example and see how to use it.
Join the DZone community and get the full member experience.Join For Free
Sub-flows are an Axway Integration Builder step type. Sub-flows are useful to encapsulate functionality in a reusable component (flow) and help you create DRY flows (Don't Repeat Yourself). They are basically flows that are called from another flow and can be viewed as a function.
In this post, we'll review the steps to create and use a sub-flow in another flow as well as how to pass in variables and arguments and access the sub-flow response.
The basic steps are as follows:
- Create your sub-flow as you would any flow and set the trigger type to manual; you don't need to create a flow instance
- The sub-flow can access any passed in arguments using trigger.args and config.varName
- Create your parent flow and use the sub-flow step to incorporate your sub-flow into your parent step
- The parent step should prepare the arguments and any variables to pass into the sub-flow in a step prior to the sub-flow step
- The parent flow can access the response of the sub-flow
You might also enjoy: API Builder: A Simple CI/CD Implementation – Part 1
A simple flow, which we'll use as a sub-flow, is shown below:
The JS Step, consoleLog simply prints some info to the console and also computes a response as follows:
We'll look at the console for a sample execution later but for now, what's important is the following:
- We are printing the trigger, which will contain arguments passed in from the parent flow
We are printing the config, which will contain variables passed in from the parent flow AND any parent flow variables
We are accessing a variable, parentFlowVariable, that is NOT passed in from the parent flow as follows:
Note that this is to show that the sub-flow has access to any parent flow variables whether they are passed in or not. This is not best practice since the sub-flow shouldn't know anything about the parent flow scope.
We are accessing an argument,
inputVal, passed in from the parent flow a follows:
We are computing a response (doubling the
inputVal) for the parent flow:
Use the Sub-Flow
Let's create a flow and use the Sub-flow. My simple test flow is shown below:
You can find the sub-flow step at the bottom of the step list when you add a step:
The first thing we can look at is how we prepared to call the sub-flow in the prepareSubflow JS Script step:
inputStr: "Hello World"
You can see we are creating an object with two properties: args and subFormulaConfigs. We construct our arguments in the args object and the variables in the subFormulaConfigs object.
The sub-flow step is shown below:
It has a step name, SubFlowStep and the ID of the sub-flow created above, 30810. It also contains the arguments and variables computed in the prepareSubflow JS Script step above it:
The last step in the test flow is a consoleLog JS Script step to print the results of the sub-flow, value:
View the Results
Let's look at the execution log to see how arguments and variables were passed and results computed and accessed.
Here is the log for the prepareSubflow step.
You can see the arguments and variables being created.
Here is the log for the SubFlowStep step:
You can see 3 items in the console:
trigger that contains the arguments:
"inputStr": "Hello World"
config which contains the variables passed in as well as parent flow variables:
parentFlowVariable value accessed directly:
We can also see the value that was computed and returned (20).
This same value is printed in the final parent flow step shown below:
In this post, we looked at the mechanics of creating and using an Integration Builder Sub-flow step to help create cleaner, more maintainable flows.
Configuring the Ground: How to Install and Configure an API Builder Data Connector
Create an API Builder Multi-Container App Using Docker (Part 1)
Published at DZone with permission of Leor Brenman, DZone MVB. See the original article here.
Opinions expressed by DZone contributors are their own.
Microservices With Apache Camel and Quarkus
Competing Consumers With Spring Boot and Hazelcast
Microservices With Apache Camel and Quarkus (Part 3)