References to elements are implicitly inserted into the JavaScript context when calling eval(), execute(), or call(). Examples of implicit variables include, for instance, $Class, $UseCase, $sorter, etc.

For example:

A "functions.js"

importPackage(java.util)
// variable $Dependency and $sorter can be accessed directly inside
function getSupplier()
{
   var supplierList = new ArrayList();
	var sortedDependencyList = $sorter.sort($Dependency);
   for (var i=0; i<sortedDependencyList.size(); i++)
   {
      var dependency = sortedDependencyList.get(i);
      supplierList.addAll(dependency.getSupplier());
   }
   return supplierList;
}

A template code

#import ('js', 'com.nomagic.reportwizard.tools.script.JavaScriptTool')
$js.execute("functions.js")
#set ($supplierList = $js.eval("getSupplier()"))
#foreach ($supplier in $supplierList)
$supplier.name
#end

Example:

A "functions.js"

var qualifiedName = "";
function packageQualifiedName(element)
{
   qualifiedName = "";
	packageName(element);
	return qualifiedName==""?"Default":qualifiedName;
}
function packageName(element)
{
	var parent = element.owner;
   if (parent.classType.simpleName == 'Package') {
	   if (qualifiedName == "")
		   qualifiedName = parent.name;
		else
	      qualifiedName = parent.name + '.' + qualifiedName;
		packageName(parent);
	}
}

A template code

#import ('js', 'com.nomagic.reportwizard.tools.script.JavaScriptTool')
$js.execute("functions.js")
#foreach ($c in $Class)
   Package: $js.eval('packageQualifiedName($c)')
	Name: $c.name
#end

 

Reference Documents