...
Field Name | Field Type | Description | ||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
Label* Default Value: Script | String | Specify a unique name for the Snap. You can modify this to be more specific, especially if you have more than one of the same Snap in your pipeline. | ||||||||||||
Scripting Language* Default value: Javascript | Dropdown list | Choose a language for the script. The available options are:
| ||||||||||||
Script file Default value: None | String/Expression | Specify or select a script file that implements the ScriptHook interface. This field can be used if the script file is present in the SLDB. Click on the Upload icon to upload the required script file from the SLDB. This field accepts pipeline parameters as well as upstream parameters provided the script file is present in the SLDB. | ||||||||||||
Edit Script Default Value: A skeleton for the chosen scripting language. You can click the Generate Template link to regenerate the skeleton. | Button | Click the Edit Script button to edit a script within the Snap instead of through an external file. From this page, you can export the script to a file in a project, import a script, or generate a template for the selected Scripting Language.
| ||||||||||||
Default Value: Execute only | Dropdown list |
|
ScriptHook Interface
This example requires that an input view be defined for it to work.
...
Note |
---|
|
Additional Information
The document data can be converted to and from the JSON data interchange language. By convention, the root of every document is conceptually a JSON object—a collection of name-value pairs, where each name is a string, and each value is an object, an array, a string, a number, a boolean, or a null. Every modern programming language has a corresponding type for this concept:
...
To write an output document, your script must create a new object. In Python or Ruby, you can create an instance of the required language’s native object type, a Python dictionary, or a Ruby hash. The values you add to these objects must be one of the JSON-compatible types, including objects, arrays, strings, numbers, and booleans. You can use the corresponding array or list type of the language for an array. Objects written to the output view should be of Java types. Some downstream Snaps require this, for example, the Join Snap. To write a Python map to the output view in a Python script, convert the map to a Java HashMap.
General Instructions for all Scripting Languages
The script author should declare a global variable named 'hook' (note that this variable name is case-sensitive). The Script engine makes the following four global variables available to the script as defined in the Script#ScriptHook Interface section:
...
The following is a snapshot of the input for the Script Snap:
...
Python Script
Script Snap uses the Jython engine to execute the scripts written in Python.
Paste code macro | ||
---|---|---|
| ||
from com.snaplogic.scripting.language import ScriptHook from random import randint from time import sleep class TransformScript(ScriptHook): def __init__(self, input, output, error, log): self.input = input self.output = output self.error = error self.log = log def execute(self): self.log.info("Executing Transform script") i = 1 while self.input.hasNext(): data = self.input.next() sleep(randint(1,10)) map = {"out": data} self.output.write(map) self.log.info("Finished executing the Transform script") hook = TransformScript(input, output, error, log) |
Java Script
The Script Snap uses the Nashorn engine to execute the scripts written in JavaScript.
Paste code macro | ||
---|---|---|
| ||
// Ensure compatibility with both JDK 7 and 8 JSR-223 Script Engines try { load("nashorn:mozilla_compat.js"); } catch(e) { } script = { execute : function() { while (input.hasNext()) { var in_data = input.next() var new_data = {} var keyArray = in_data.keySet().toArray() for (var index in keyArray) { var key = keyArray[index] new_data[key] = in_data.get(key) } new_data.firstLast = new_data.first + "-" + new_data.last new_data.firstLast2 = new_data.first + in_data.get("last") new_data.numberMath = (new_data.counter + 22) | 0 new_data.numberMath2 = new_data.counter + 23 new_data.dateMath = new_data.birthday.plusMonths(1).toString() new_data.mathType = typeof(new_data.counter) new_data.dateType = typeof(new_data.birthday) output.write(new_data) } } }; var hook = new com.snaplogic.scripting.language.ScriptHook(script) |
Ruby Script
Script Snap uses the JRuby engine to execute the scripts written in Ruby.
...
Attachments | ||
---|---|---|
|
Related Content:
SnapLogic Community Article: Configuring the Script Snap to use a configured HTTP proxy environment variable
...