Script
| DescriptionThe Script transform allows you to write code in any language supported by the JSR-223 standard. By default, the Hop project ships with the following language support: 
 | 
Options
| Option | Description | 
|---|---|
| Transform name | Name of the transform this name has to be unique in a single pipeline. | 
| Script engine | You can choose any of the discovered JSR-223 scripting engines from the drop-down list. | 
| Script | You can add one or more scripts. There are different types of scripts which you can change by right-clicking on the script tab. 
 | 
| Fields | Here you can specify the fields to retrieve from the context of the transform script after every row. | 
Variable bindings
To allow you to work with the input field values or the surrounding Java ecosystem Hop exposes a bunch of variable bindings.
| Variable | Description | 
|---|---|
| input | All the input fields under their own name. Please note that certain scripting languages have restrictions on the allowed names of variables. Make sure to rename inappropriate field names with a "Select Values" transform. | 
| 
 | This is a reference to the parent transform class Script. You can use this to log certain important events or write extra output rows | 
| 
 | This special variable can be set to any of the following values: 
 | 
| 
 | This is the current row number, starting from 1. | 
| 
 | The input row metadata. It’s a list of value metadata. | 
| 
 | An object array containing the current set of field values. Make sure to address these values using  For example, use  | 
| 
 | The previous row or null if  | 
| 
 | The name of the transform | 
| 
 | The name of the pipeline | 
Generating rows
Below are scripts that generate 10 output rows using a simple loop in 3 different scripting engines. This happens 3 times with identical output. For the 3 examples you need to define 2 output fields:
-  id: an Integer
-  name: a String
ECMAScript
var Long = Packages.java.lang.Long;
var RowDataUtil = Packages.org.apache.hop.core.row.RowDataUtil;
var START=100000;
var COUNT=10;
var END=START+COUNT;
var id=START;
for (var id=START;id<END;id++) {
  var outputRow = RowDataUtil.allocateRowData(rowMeta.size());
  outputRow[0] = new Long(id);
  outputRow[1] = "Apache Hop "+id;
  transform.putRow(outputRowMeta, outputRow);
}
pipeline_status=SKIP_PIPELINE;Groovy
def COUNT=10;
id = 100000L;
(1..COUNT).each {
 outputRow = RowDataUtil.allocateRowData(rowMeta.size());
 outputRow[0] = id;
 outputRow[1] = "Apache Hop "+id
 transform.putRow(outputRowMeta, outputRow);
 id++;
}
pipeline_status=SKIP_PIPELINE;Python
import java.lang.Long as Long
START=100000
COUNT=10
END=START+COUNT
id=START
for id in range(START,END):
	outputRow = RowDataUtil.allocateRowData(rowMeta.size())
	outputRow[0] = Long(id)
	outputRow[1] = "Apache Hop "+str(id)
	transform.putRow(outputRowMeta, outputRow)
pipeline_status=SKIP_PIPELINEAggregating rows
Below are scripts that aggregate rows over different groups. The data is sorted by the field group and contains a value field which is summed up into field sum. In the start scripts we define variables sum=0 and previousGroup="".
For the 3 examples you need to define 1 output field:
-  sum: an Integer
ECMAScript
if (group!==previousGroup) {
  sum=value;
  previousGroup=group;
} else {
  sum+=value;
}
if (nextGroup==null) {
  pipeline_status=CONTINUE_PIPELINE;
} else {
  pipeline_status=SKIP_PIPELINE;
}Adding scripting languages
You can add additional scripting languages by adding the required libraries to the plugins/transforms/script/lib folder.
For example, to add support for the Ruby scripting language you need to add the following JRuby libraries:
-  jruby-stdlib-<version>.jar
-  jruby-core-<version>.jar
To add Javascript support, download the Nashorn Core jar
-  nashorn-core-15.4.jar
After restarting the Apache Hop GUI you’ll notice that there’s a ruby or Javascript entry in the Scripting Engine dropdown box.