自定义操作的工作流构建器错误(错误:发送需要脚本化对象)我在工作流构建器中添加了下面的 JSL 作为自定义操作。
错误发生在 For 循环中(错误:发送期望可编写脚本的对象)。
在脚本窗口中运行此脚本时,它可以正常重命名包含“%”的列标题。
关于如何解决这个问题以使工作流程更顺畅的任何想法?否则,需要在此步骤停止以在 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));
);
);
自动化和脚本回复:自定义操作的工作流构建器错误(错误:发送需要脚本对象)你可以问获取列名与选项“字符串”。
然后你不需要再次询问列名:
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));
);
);回复:自定义操作的工作流构建器错误(错误:发送需要脚本对象)附言:不要使用此列表中的变量名:
{姓名, 年龄, 性别, 身高, 体重}

回复:自定义操作的工作流构建器错误(错误:发送需要脚本对象)附加(稍微相关)问题:
为什么调用列表条目改变列表条目?
运行第一部分
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));
);
);在列名前添加冒号:

然后是为了循环按预期运行 *) 
*) 嗯有点令人惊讶,它的工作原理 - 特别是。
contains(columnName[j], searchWords);
回复:自定义操作的工作流构建器错误(错误:发送需要脚本对象)嗨hogi
谢谢你的提示。
我将您的代码添加到 Workflow Builder 步骤中。 它执行时没有错误代码,但数据表中没有任何变化。
请注意,我们的两个代码(带和不带“String”)在使用脚本窗口运行时都能正常工作,但不知何故它在 WorkFlow Builder 中不起作用。
我发现我们需要改用它。
Column(dt, columnName[j])
以下是与 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));
);
);
回复:自定义操作的工作流构建器错误(错误:发送需要脚本对象)嗨hogi
谢谢你的提示。
我将您的代码添加到 Workflow Builder 步骤中。 它执行时没有错误代码,但数据表中没有任何变化。
请注意,我们的两个代码(带和不带“String”)在使用脚本窗口运行时都能正常工作,但不知何故它在 WorkFlow Builder 中不起作用。
我发现我们需要改用它。
Column(dt, columnName[j])
以下是与 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));
);
);回复:自定义操作的工作流程构建器错误(错误:发送期望可编写脚本的对象)使用
dt << get column reference(cols);
以获得稳定的列参考。
我刚刚发现它在第六节:数据表来自 JSL 脚本编写者俱乐部网络研讨会。
(强烈推荐!!)
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