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?

1 Like

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

1 Like

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);

image

Happy coding!

1 Like

Thank You so much. It helped. :slight_smile: