自定義操作的工作流構建器錯誤(錯誤:發送需要腳本化對象)我在工作流構建器中添加了下面的 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