Column Switcher Appled to All Open reportsHi guys,
I am trying to write a script to apply column switcher to all open reports. Please guide me
dt = Current data Table();
//Get all Open reports
wList = Get Window List( Type( "Reports" ) );
//Get Column to replace and column to replace with
win = New Window( "Set a Value",
<Please guide how to do this action. Thanks in advanceAutomation and Scripting
Re: Column Switcher Appled to All Open reportsHow do you wish to use Col List Box? Column Switcher requires you to have a single column which is then changed to other column (based on the column list on Column Switcher) and this column should be the same in all of the reports at the start.
Re: Column Switcher Appled to All Open reports@jthi , My bad im sorry.. I guess instead of column switcher its more esay to have 2 colList Box where user selects column to replace in 1st and column to replace with in 2nd.. Is this approach more suitable
Re: Column Switcher Appled to All Open reportsI think that might be a bit easier. I don't have time to write proper solution, but below is an idea how I would approach this (use column switcher to change columns which you create on function call + "Ask forgiveness, not permission"). It still has hard-coded things in it, but I will get back to it later today or tomorrow and make it more robust as this is interesting problem.
Names Default To Here(1);
dt = Open("$SAMPLE_DATA/Probe.jmp");
dt << Clear Row States;
New Window("",
Lineup box(N Col(2),
dist = dt << Distribution(Continuous Distribution(Column(:DELL_RPNBR))),
dist2 = dt << Distribution(Continuous Distribution(Column(:DELW_M1))),
gb1 = dt << Graph Builder(
Size(528, 448),
Show Control Panel(0),
Variables(X(:Site), Y(:Lot ID)),
Elements(Points(X, Y, Legend(3)))
),
gb2 = dt << Graph Builder(
Size(523, 454),
Show Control Panel(0),
Variables(X(:DELW_M1), Y(:DELL_RPNBR)),
Elements(Points(X, Y, Legend(3)))
)
)
);
nw = New Window("",
H List Box(
Lineup Box(N Col(2),
Panel Box("Select Column to Change",
fcs1 = Filter Col Selector(dt, << Set Max Selected(1))
),
Panel Box("Select New Column",
fcs2 = Filter Col Selector(dt, << Set Max Selected(1))
)
),
Panel Box("Action",
Button Box("Change Columns"),
Button Box("Cancel"),
)
)
);
update_reports = function({dt, report_list, old_col, new_col}, {Default Local},
nw_switcher = New Window("", << Window View("Invisible"),
ref_colswitcher = dt << Column Switcher(:DELL_RPNBR, {:DELW_SICR, :DELL_RPNBR});
);
wait(0);
For Each({report}, report_list,
Try(ref_colswitcher << Link Platform(report));
);
wait(0);
nw_switcher[ListBoxBox(1)] << Set Selected(1);
nw_switcher << Close Window;
);
reports = Eval List({dist, dist2, gb1, gb2});
update_reports(dt, reports, "a", "b");
Re: Column Switcher Appled to All Open reportsThere seems to be few different bugs/weird interactions which are making this more difficult than I thought and because of that the code is very messy, but it seems to work on some level
Names Default To Here(1);
get_reports_for_datatable = function({dt}, {Default Local},
valid_reports = {};
// This might need improvements
report_windows = Get Window List(Type("Reports"));
For Each({report_window}, report_windows,
Try(
cur_analytic_layer = report_window[OutlineBox(1)] << Get Scriptable Object;
cur_dt = cur_analytic_layer << Get Data Table;
If(cur_dt == dt,
Insert Into(valid_reports, cur_analytic_layer);
);
,
show(exception_msg);
);
);
return(valid_reports);
);
// I would use function, but there seem to be some bugs
swap_report_columns = Expr(
Eval(EvalExpr(
nw_switcher = New Window("Switcher", << Window View("Invisible"),
vlb2 = V List Box(
ref_colswitcher2 = dt << Column Switcher(Expr(NameExpr(AsColumn(dt, old_col))),
{Expr(NameExpr(AsColumn(dt, old_col))), Expr(NameExpr(AsColumn(dt, new_col)))}
)
)
);
));
Batch Interactive(1);
For Each({report, idx}, report_list,
//report = report_list[2]
nw1 = New Window("", << Window View("Invisible"),
ref_colswitcher1 = dt << Column Switcher(Expr(NameExpr(AsColumn(dt, old_col))),
{Expr(NameExpr(AsColumn(dt, old_col))), Expr(NameExpr(AsColumn(dt, new_col)))}
)
);
lc = Log Capture(ref_colswitcher1 << Link Platform(report));
ref_colswitcher1 << Remove Column Switcher;
nw1 << Close Window;
If(Is Missing(lc),
Log Capture(
Try(ref_colswitcher2 << Link Platform(report));
);
);
wait(0);
);
Batch Interactive(0);
Try(vlb2[ListBoxBox(1)] << Set Selected(2));
wait(0);
ref_colswitcher2 << Remove Column Switcher;
Caption(remove);
nw_switcher << Close Window;
);
swap_columns = Expr(
nw = New Window("Swap report columns", << Type("Launcher"),
window:dt = Current Data Table(),
H List Box(
Lineup Box(N Col(2),
Panel Box("Select Column to Change",
fcs1 = Filter Col Selector(dt, << Set Max Selected(1))
),
Panel Box("Select New Column",
fcs2 = Filter Col Selector(dt, << Set Max Selected(1))
)
),
Panel Box("Action",
Button Box("Change Columns",
report_list = get_reports_for_datatable(dt);
old_col = (fcs1 << get selected)[1];
new_col = (fcs2 << get selected)[1];
Try(swap_report_columns);
),
Button Box("Cancel",
fcs1 << close window;
),
)
)
);
);
dt = Open("$SAMPLE_DATA/Probe.jmp");
dt << Clear Row States;
dist = dt << Distribution(Continuous Distribution(Column(:DELL_RPNBR)));
dist2 = dt << Distribution(Continuous Distribution(Column(:DELW_M1)));
gb1 = dt << Graph Builder(
Size(528, 448),
Show Control Panel(0),
Variables(X(:Site), Y(:Lot ID)),
Elements(Points(X, Y, Legend(3)))
);
gb2 = dt << Graph Builder(
Size(523, 454),
Show Control Panel(0),
Variables(X(:DELW_M1), Y(:DELL_RPNBR)),
Elements(Points(X, Y, Legend(3)))
);
swap_columns;
Write();