Migrating BASIC routines in DataStage
Server jobs in traditional DataStage® may contain BASIC routines, which are not supported in modern DataStage.
When you migrate a server job in traditional DataStage to a pipeline flow in Cloud Pak for Data, you can rewrite the routine as a script and add it as a Run Bash script or Run Python script node in your pipeline flow. For more information, see Replacing BASIC routines in DataStage.
When you migrate a server job, the routine nodes are migrated to Run Bash script nodes. The routines are stored as .sh scripts in the mounted PVC under /mnts/ds-storage/projects/<your-project-name>/scripts/. If you are not an administrator, create a storage volume connection to access the ds-storage directory. To run migrated routines, rewrite the scripts in that directory in Bash or Python code. Every node that references a particular routine will run the script of the same name.
Getting arguments and setting return values
<routine_name>_<argument_name>
. To set the return values for a rewritten
BASIC script, write an echo statement at the end of your script to print a JSON string to the
standard output. Call ds.CommandOutput(tasks.<id>)
to get the JSON string and
pass it into ds.GetOutputArg()
as an argument along with the value you want to
retrieve. See the following example script:#!/bin/bash
IBMCP4DCallFunction() {
# Define the function with 2 arguments
# Increment the values of each argument by 1
Age=$1
Name=$2
Ans=0
echo "{\"Age\":$Age, \"Name\":\"$Name\", \"Ans\":$Ans}"
return $Ans
}
IBMCP4DCallFunction "$IBMCP4DCallFunction_Age" "$IBMCP4DCallFunction_Name"
In this example, the pipeline node is named RoutineAct1
and has an internal id
of routine1
. The values for the input arguments Name
and
Age
are stored in the environment variables
IBMCP4DCallFunction_Age
and IBMCP4DCallFunction_Name
. To get the
value of the output argument Age
in activity trigger conditions or expressions
following the routine, use the function call
ds.GetOutPutArg(ds.getCommandOutput(tasks.routine1), 'Age')
. Here the
ds.getCommandOutput
call returns the JSON string and
ds.GetOutPutArg('{"Age":30, "Name":"new name", "Ans":0}', 'Age')
returns the value
30. Similarly, to retrieve the value of Ans
, you would use
ds.GetOutPutArg(ds.getCommandOutput(tasks.routine1), 'Ans')
.