Selettore di colonne applicato a tutti i report apertiCiao ragazzi,
Sto cercando di scrivere uno script per applicare il commutatore di colonne a tutti i report aperti. Per favore guidami
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",
<Si prega di indicare come eseguire questa azione. grazie in anticipoAutomazione e scripting
Ri: Commutatore di colonna applicato a tutti i report apertiCome desideri utilizzare Col List Box? Il commutatore di colonne richiede che tu abbia una singola colonna che viene poi modificata in un'altra colonna (in base all'elenco di colonne nel commutatore di colonne) e questa colonna dovrebbe essere la stessa in tutti i report all'inizio.
Ri: Commutatore di colonna applicato a tutti i report aperti@jthi , colpa mia, mi dispiace.. Immagino che invece del commutatore di colonna sia più facile avere 2 colList Box in cui l'utente seleziona la colonna da sostituire nella prima e la colonna con cui sostituire nella seconda.. Questo approccio è più adatto
Ri: Commutatore di colonna applicato a tutti i report apertiPenso che potrebbe essere un po' più semplice. Non ho tempo per scrivere la soluzione adeguata, ma di seguito c'è un'idea di come mi avvicinerei a questo (usa il commutatore di colonne per cambiare le colonne che crei sulla chiamata di funzione + "Chiedi perdono, non permesso"). Contiene ancora elementi codificati, ma ci tornerò più tardi oggi o domani e lo renderò più robusto poiché si tratta di un problema interessante.
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");
Ri: Commutatore di colonna applicato a tutti i report apertiSembra che ci siano diversi bug/interazioni strane che rendono il tutto più difficile di quanto pensassi e per questo motivo il codice è molto confuso, ma sembra funzionare a un certo livello
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();