Workflow builder error for Custom Action (Error: Send Expects Scriptable Object)I added the JSL below as Custom Action in the Workflow builder.
The error happened at the For loop (Error: Send Expects Scriptable Object).
While running this script in Script window, it works properly to rename columns header that contain "%, ".
Any idea on how to solve this to make the workflow more smooth? else, need to stop at this step to run Column Renaming script outside the WorkFlow Builder.
dt = Current Data Table();
searchWords = "%, ";
columnName = dt << Get Column Names;
N = N Items( columnName );
For(j=1, j<= N, j++,
x = contains(columnName[j], searchWords);
name = Substr(columnName[j] << Get Name(), x+3);
If(x > 0,
columnName[j] << Set Name(Left(name, Length(name)-1));
);
);
Automation and ScriptingRe: Workflow builder error for Custom Action (Error: Send Expects Scriptable Object)You could ask Get Column Names with the Option "String".
Then you don't need to ask again for the column name:
dt = Current Data Table();
searchWords = "%, ";
columnName = dt << Get Column Names("String");
N = N Items( columnName );
For(j=1, j<= N, j++,
x = contains(columnName[j], searchWords);
If(x > 0,
name = Substr(columnName[j], x+3);
Column(columnName[j]) << Set Name(Left(name, Length(name)-1));
);
);Re: Workflow builder error for Custom Action (Error: Send Expects Scriptable Object)PS: don't use variable names from this list:
{name, age, sex, height, weight}

Re: Workflow builder error for Custom Action (Error: Send Expects Scriptable Object)Add-on (slightly related) question:
Why does calling a list entry alter the list entry?
Running the first part of
dt = Open( "$SAMPLE_DATA/Big Class.jmp" );
searchWords = "%, ";
:sex << set name ("test%, SEX#");
columnName = dt << Get Column Names;
show(columnName);
columnName[1] << Get Name();
columnName[2] << Get Name();
columnName[3] << Get Name();
columnName[4] << Get Name();
columnName[5] << Get Name();
show(columnName);
N = N Items( columnName );
For(j=1, j<= N, j++,
x = contains(columnName[j], searchWords);
myName = Substr(columnName[j] << Get Name(), x+3);
If(x > 0,
columnName[j] << Set Name(Left(myName, Length(myName)-1));
);
);adds colons in front of the column names:

and then the for loop runs as expected *) 
*) hm a bit surprising that it works - esp.
contains(columnName[j], searchWords);
Re: Workflow builder error for Custom Action (Error: Send Expects Scriptable Object)Hi hogi
Thanks for the tip.
I added your code into the Workflow Builder step. It was executed without error code, but nothing has changed in the data table.
Noted that both of our code (with&without "String") work properly when running with Script window, but somehow it does not work in the WorkFlow Builder.
I figure out that we need to use this instead.
Column(dt, columnName[j])
Here is the code that works with Workflow Builder.
searchWords = ", ";
columnName = dt << Get Column Names("String");
N = N Items( columnName );
For(j=1, j<= N, j++,
x = contains(columnName[j], searchWords);
colName = Substr(columnName[j], x+length(searchWords));
If(x > 0,
Column(dt, columnName[j]) << Set Name(Left(colName, Length(colName)-1));
);
);
Re: Workflow builder error for Custom Action (Error: Send Expects Scriptable Object)Hi hogi
Thanks for the tip.
I added your code into the Workflow Builder step. It was executed without error code, but nothing has changed in the data table.
Noted that both of our code (with&without "String") work properly when running with Script window, but somehow it does not work in the WorkFlow Builder.
I figure out that we need to use this instead.
Column(dt, columnName[j])
Here is the code that works with Workflow Builder.
searchWords = ", ";
columnName = dt << Get Column Names("String");
N = N Items( columnName );
For(j=1, j<= N, j++,
x = contains(columnName[j], searchWords);
colName = Substr(columnName[j], x+length(searchWords));
If(x > 0,
Column(dt, columnName[j]) << Set Name(Left(colName, Length(colName)-1));
);
);Re: Workflow builder error for Custom Action (Error: Send Expects Scriptable Object)Use
dt << get column reference(cols);
to get stable column references.
I just found it in Session 6: Data Tables from JSL Scripters Club Webinars.
(highly recommended!!)
Names Default to Here(1);
dt = Open( "$SAMPLE_DATA/Big Class.jmp" );
cols= dt << get column names();
colRefs = dt << get column reference(cols);
// {Column( "name" ), Column( "age" ), Column( "sex" ), Column( "height" ),Column( "weight" )}
// load another table
Open( "$SAMPLE_DATA/Big Class Families.jmp" );
//Column(cols[1]) << get name // doesn't work
colRefs[1] << get name; // still works