Forum Discussion

abjoe's avatar
abjoe
New Contributor II
8 years ago

Create array using script snap

Hi Everyone,

I have written a simple javascript code in Script snap. Please find the code below:

script = {
execute : function()
{
while (input.hasNext())
{
var test = [“a”, “b”];

                 try
                  {
                        output.write(test);
                  }
                catch(err)
                  {
                        new_data.errMsg = err.message;
                        new_data.tryBlock = "failed";
                        error.write(new_data);
                  }
                  
            }
        }   
    };

var hook = new com.snaplogic.scripting.language.ScriptHook(script)

I am basically just creating an array with values [“a”, “b”] and printing it. Please find the output below:

But in the output, you can see that it has become an object {0:a, 1:b} with keys as “0” and “1”. Please help me with this. How can I get an array [“a”, “b”] as the output?

3 Replies

  • I think you are making TWO mistakes! I had this same problem only about a week ago, and solved it with the following python code:

    PYTHON SCRIPT
    in_doc[‘KEYS’]= json.loads( ln )
    output.write(in_doc)

    ln is the array

    HEADER CHANGE to the python script:

    Import the interface required by the Script snap.

    from com.snaplogic.scripting.language import ScriptHook
    import java.util
    import json
    from pprint import pprint

    So I can hook a json spliter snap onto the script snap, and process each line coming from the snap. The intent was to reprocess data from a reltio load error in snaplogic, and it gets the detail from the payload in the error. The payload could have dozens of entities represented in the one payload.

    There is probably a similar problem with jscript.

    Steve

  • jaybodra's avatar
    jaybodra
    New Contributor III

    You need to define arraylist.
    I often get confused between datatypes when using python on SnapLogic which is jython.
    I am assuming javascript is also using JSR engine which is different than traditional javascript.
    If it is possible I would highly recommend using python script instead of JavaScript.

    // Ensure compatibility with both JDK 7 and 8 JSR-223 Script Engines
    try { load(“nashorn:mozilla_compat.js”); } catch(e) { }

    // Import the interface required by the Script snap.
    importPackage(com.snaplogic.scripting.language);

    // Import the Java utility classes.
    importPackage(java.util);

    /**

    • Create an object that implements the methods defined by the “ScriptHook”

    • interface. We’ll be passing this object to the constructor for the

    • ScriptHook interface.
      /
      var impl = {
      /

      • These variables (input, output, error, log) are defined by the
      • ExecuteScript snap when evaluating this script.
        */
        input : input,
        output : output,
        error : error,
        log : log,

      /**

      • The “execute()” method is called once when the pipeline is started

      • and allowed to process its inputs or just send data to its outputs.

      • Exceptions are automatically caught and sent to the error view.
        */
        execute : function () {
        this.log.info(“Executing Transform Script”);
        while (this.input.hasNext()) {
        try{
        // Read the next document, wrap it in a map and write out the wrapper
        var doc = this.input.next();
        var wrapper = new java.util.HashMap();
        var out = new java.util.ArrayList();
        out.add(‘a’)
        out.add(‘b’)
        this.output.write(doc, out);
        this.log.info(“Transform Script finished”);

         }
         catch(err) {
             var wrapper = new java.util.HashMap();
             wrapper.put("errorMsg", err);
             this.log.error(err);
             this.error.write(wrapper);
         }
        

        }
        }
        };

    /**

    • The Script Snap will look for a ScriptHook object in the “hook”
    • variable. The snap will then call the hook’s “execute” method.
      */
      var hook = new com.snaplogic.scripting.language.ScriptHook(impl);

    Happy coding!

    • abjoe's avatar
      abjoe
      New Contributor II

      Thank You so much. It helped. 🙂