Anwendung mit mehreren Datentabellen und erstellt lokale Datenfilter nicht korrektHallo zusammen, ich versuche, eine Anwendung zu erstellen, die auf mehrere Datentabellen verweist, und innerhalb dieser Anwendung gibt es Datenfilter, die auf Diagramme aus jeder Datentabelle angewendet werden. Wenn ich den lokalen Datenfilter einfüge, sind die Spaltenoptionen korrekt. Wenn ich die Anwendung jedoch ausführe, verweisen alle lokalen Datenfilter auf die Datentabelle, die ich zuletzt geöffnet hatte. Beide sagen, dass sie auf die richtige Datentabelle im Anwendungsersteller verweisen, aber dies wird irgendwie während des Starts der Anwendung geändert.
Verwenden Sie beispielsweise zwei Beispieldatensätze:
JMP App(
Set Name( "Application" ),
Set Description(
"An empty workspace for creating custom applications with one or more windows and scripts"
),
Auto Launch( 1 ),
Snap To Grid( 1 ),
Show Grid( 1 ),
Show Properties( 1 ),
Show Sources( 1 ),
Group By Category( 1 ),
Dashboard Mode( 0 ),
Parameters,
Tables(
DataTable1 = GuiTable(
Set Path( "$SAMPLE_DATA/Body Fat.jmp" ),
Set Label( "Body Fat" ),
Set Location( "Full Path" ),
Set Invisible( 0 )
),
DataTable2 = GuiTable(
Set Path( "$SAMPLE_DATA/Body Measurements.jmp" ),
Set Label( "Body Measurements" ),
Set Location( "Full Path" ),
Set Invisible( 0 )
)
),
Script(JSL Quote(// This script is executed when the application is run.
// Named objects have been created for the application modules
// (for example, "Module1") and the pre-defined object
// "thisApplication" refers to the application object itself.
// Variables and functions declared here are scoped to the
// Application namespace.
) ),
Allocate(
Module1 = Plan(
PreAllocate,
Script(JSL Quote(// This script is executed when a new module instance is
// created. The pre-defined object "thisModuleInstance" refers
// to the instance object, but other objects such as boxes and
// scripts have not yet been created. Variables declared here are
// scoped to the ModuleInstance namespace.
// This special function will receive parameters passed to CreateInstance()
OnModuleLoad({},
);
thisModuleInstance << Create Objects;
// After this point your module instance objects have been created
// and can be referred to by name (for example, "Button1").
) ),
Allocate(
List1 = V List Box();
Splitter1 = H Splitter Box();
DataFilter1 = DataTable1 << Data Filter( Local );
Report3 = Platform(
DataTable1,
Bivariate(
Y( :Name( "Height (inches)" ) ),
X( :Name( "Weight (lbs)" ) )
)
);
Splitter2 = H Splitter Box();
DataFilter2 = DataTable2 << Data Filter( Local );
Report2 = Platform(
DataTable2,
Bivariate( Y( :Head ), X( :Mass ) )
);
),
Organize(
Reparent( Splitter2( Report2 ) );
Reparent( Splitter2( DataFilter2 ) );
Reparent( List1( Splitter2 ) );
Reparent( Splitter1( Report3 ) );
Reparent( Splitter1( DataFilter1 ) );
Reparent( List1( Splitter1 ) );
Relocate( List1( 160, 160 ) );
),
Initialize(
List1 << Background Color( 2147483647 );
List1 << Border( {Left( 0 ), Top( 0 ), Right( 0 ), Bottom( 0 )} );
List1 << Enabled( 1 );
List1 << Horizontal Alignment( "Default" );
List1 << Margin( {Left( 0 ), Top( 0 ), Right( 0 ), Bottom( 0 )} );
List1 << Padding( {Left( 0 ), Top( 0 ), Right( 0 ), Bottom( 0 )} );
List1 << Text Color( 2147483647 );
List1 << Vertical Alignment( "Default" );
List1 << Visibility( "Visible" );
List1 << set horizontal( 0 );
Splitter1 << Background Color( 2147483647 );
Splitter1 << Border(
{Left( 0 ), Top( 0 ), Right( 0 ), Bottom( 0 )}
);
Splitter1 << Enabled( 1 );
Splitter1 << Horizontal Alignment( "Default" );
Splitter1 << Margin(
{Left( 0 ), Top( 0 ), Right( 0 ), Bottom( 0 )}
);
Splitter1 << Padding(
{Left( 0 ), Top( 0 ), Right( 0 ), Bottom( 0 )}
);
Splitter1 << Text Color( 2147483647 );
Splitter1 << Vertical Alignment( "Default" );
Splitter1 << Visibility( "Visible" );
Splitter1 << Dockable( 0 );
Splitter1 << Set Width( 835 );
Splitter1 << Set Height( 497 );
Splitter1 << Set Sizes( {0.5, 0.5} );
Splitter1 << set horizontal( 1 );
Splitter1 << Set Min Size( 835, 497 );
Splitter1 << Set Max Size( 835, 497 );
Splitter1 << Set Auto Stretching( 1, 1 );
Splitter2 << Background Color( 2147483647 );
Splitter2 << Border(
{Left( 0 ), Top( 0 ), Right( 0 ), Bottom( 0 )}
);
Splitter2 << Enabled( 1 );
Splitter2 << Horizontal Alignment( "Default" );
Splitter2 << Margin(
{Left( 0 ), Top( 0 ), Right( 0 ), Bottom( 0 )}
);
Splitter2 << Padding(
{Left( 0 ), Top( 0 ), Right( 0 ), Bottom( 0 )}
);
Splitter2 << Text Color( 2147483647 );
Splitter2 << Vertical Alignment( "Default" );
Splitter2 << Visibility( "Visible" );
Splitter2 << Dockable( 0 );
Splitter2 << Set Width( 648 );
Splitter2 << Set Height( 338 );
Splitter2 << Set Sizes( {0.5, 0.5} );
Splitter2 << set horizontal( 1 );
Splitter2 << Set Min Size( 648, 338 );
Splitter2 << Set Max Size( 648, 338 );
Splitter2 << Set Auto Stretching( 1, 1 );
)
)
),
Initialize(
Module1 << Auto Launch( 1 );
Module1 << Set Module Type( "Report" );
Module1 << Set Window Title( "^TABLENAME - ^APPNAME" );
Module1 << Set Min Size( 0, 0 );
Module1 << Set Max Size( 30000, 30000 );
Module1 << Set Auto Stretching( ., . );
)
) << EditBetreff: Anwendung mit mehreren Datentabellen und erstellt lokale Datenfilter nicht korrektIch kann bestätigen, dass dieses Problem mit JMP 15.2 und höher behoben wird. Mehrere lokale Datenfilter in einer Anwendung behalten ihre Verbindung zur entsprechenden Datentabelle bei.
Betreff: Anwendung mit mehreren Datentabellen und erstellt lokale Datenfilter nicht korrektDas hat funktioniert!! Vielen Dank! Ich war bei der Suche nach einer Problemumgehung in einer Sackgasse, hauptsächlich weil ich dachte, ich könnte das Skript, das die Anwendung erstellte, nicht mehr sehen. Als meine Anwendung groß genug wurde (über 60 Plattformen mit über 28 lokalen Datenfiltern und den Anzeigeelementen, um sie alle aufzunehmen), schien mir die Option „Skript speichern“ nur den benutzerdefinierten Skriptteil meiner Anwendung zu geben. Es stellte sich heraus, dass nur die gesamte Allocate-Funktion in eine Zeile gesetzt wurde. Als ich auf Skript neu formatieren klickte, wurden Hunderte von zusätzlichen Zeilen angezeigt. Dies ist nicht unbedingt ein Fehler, denke ich, aber ich dachte, Sie sollten sich dessen bewusst sein.
Wenn ich die von Ihnen vorgeschlagenen Schritte befolgt habe, funktioniert alles ordnungsgemäß. Ich hoffe jedoch, dass dies in zukünftigen Iterationen behoben wird, da ich die gesamte Anwendung erstellen muss, bevor ich zum Skript zurückkehre, um die Filter so zu bearbeiten, dass sie korrekt sind.
Betreff: Anwendung mit mehreren Datentabellen und erstellt lokale Datenfilter nicht korrektHallo Cameron, danke für deine Antwort. Eigentlich hatte ich es ursprünglich so, aber das schafft seine eigenen Probleme. An anderer Stelle in der Anwendung habe ich Skripteinstellungen für diese Filter (von denen es in meiner aktuellen Anwendung über ein Dutzend gibt). Ich konnte nicht herausfinden, wie ich mit Skripten auf den Filter zugreifen kann, wenn er Teil der Plattform war. Im Grunde konnte ich nicht herausfinden, wie ich Befehle an meine Plattformen skripte, sondern nur die Anzeigeelemente für sie. Dies ist ein separates Problem, aber wenn Sie zufällig wissen, wie Sie dieses Problem lösen können, wäre es auch hilfreich!
Betreff: Anwendung mit mehreren Datentabellen und erstellt lokale Datenfilter nicht korrektHallo,
Ich könnte wiederholen, was du gesehen hast. Obwohl dies nur eine Problemumgehung ist, versuchen Sie Folgendes:
1. Von Ihrem Skript, das Sie geliefert haben. Ändern Sie die allerletzte Zeile so, dass sie „Ausführen“ statt „Bearbeiten“ lautet, und versuchen Sie, das Skript auszuführen. In meinen Händen macht Ihr Skript das, was ich von ihm erwarte.
2. Ändern Sie beim Erstellen der Anwendung den Speicherort der Datentabelle in Name und nicht in aktuelle Datentabelle.
Tables(
DataTable1 = GuiTable(
Set Path( "$SAMPLE_DATA/Body Fat.jmp" ),
Set Label( "Body Fat" ),
Set Location( "name" ),
Set Invisible( 0 )
),
DataTable2 = GuiTable(
Set Path( "$SAMPLE_DATA/Body Measurements.jmp" ),
Set Label( "Body Measurements" ),
Set Location( "name" ),
Set Invisible( 0 )
)
),
Die Standortoption befindet sich ganz unten.
Manchmal ist der "Zuweisungs"-Zeiger nicht wie erwartet. Überprüfen Sie also im Skript, dass Filter 1 auf Tabelle 1 und Filter 2 auf Tabelle 2 zeigt.
Allocate(
List1 = V List Box();
Splitter1 = H Splitter Box();
DataFilter1 = DataTable1 << Data Filter( Local );
Report3 = Platform(
DataTable1,
Bivariate(
Y( :Name( "Height (inches)" ) ),
X( :Name( "Weight (lbs)" ) )
)
);Betreff: Anwendung mit mehreren Datentabellen und erstellt lokale Datenfilter nicht korrektHallo @DopeAgonist ,
Dies ist ein ziemlich seltsames Verhalten und verdient wahrscheinlich die Aufmerksamkeit eines Entwicklers.Ich habe überprüft, was Sie beschrieben haben, indem Sie die Anwendung von Grund auf neu erstellt und auch die lokale Datenfilterzuordnung im Skript in die richtige Tabelle geändert haben.Ich konnte die entsprechenden Datenfilter anzeigen lassen, indem ich sie manuell im Skript hinzufügte
Splitter1 << Prepend(DataTable1 << Data Filter("Local"));
Splitter2 << Prepend(DataTable2 << Data Filter("Local"));Aber das funktioniert immer noch nicht.Unabhängig davon, wie Sie es tun, sind die lokalen Datenfilter aus irgendeinem Grund nicht richtig mit der Tabelle verbunden.Das Ändern der Werte von Filtern hat keine Auswirkung auf die Zeilenauswahl in den Tabellen.
Wenn Sie die Datenfilter aus den Analyseplattformen erstellen, die Sie in Ihre Anwendung ziehen, funktionieren die Filter.Zum Beispiel:
JMP App(
Set Name( "Application" ),
Set Description(
"An empty workspace for creating custom applications with one or more windows and scripts"
),
Auto Launch( 1 ),
Snap To Grid( 1 ),
Show Grid( 1 ),
Show Properties( 1 ),
Show Sources( 1 ),
Group By Category( 1 ),
Dashboard Mode( 0 ),
Parameters,
Tables(
DataTable1 = GuiTable(
Set Path( "$SAMPLE_DATA/Body Fat.jmp" ),
Set Label( "Body Fat" ),
Set Location( "Full Path" ),
Set Invisible( 1 )
),
DataTable2 = GuiTable(
Set Path( "$SAMPLE_DATA/Body Measurements.jmp" ),
Set Label( "Body Measurements" ),
Set Location( "Full Path" ),
Set Invisible( 1 )
)
),
Script(JSL Quote(// This script is executed when the application is run.
// Named objects have been created for the application modules
// (for example, "Module1") and the pre-defined object
// "thisApplication" refers to the application object itself.
// Variables and functions declared here are scoped to the
// Application namespace.
) ),
Allocate(
Module1 = Plan(
PreAllocate,
Script(JSL Quote(// This script is executed when a new module instance is
// created. The pre-defined object "thisModuleInstance" refers
// to the instance object, but other objects such as boxes and
// scripts have not yet been created. Variables declared here are
// scoped to the ModuleInstance namespace.
// This special function will receive parameters passed to CreateInstance()
OnModuleLoad({},
);
thisModuleInstance << Create Objects;
// After this point your module instance objects have been created
// and can be referred to by name (for example, "Button1").
) ),
Allocate(
Report2 = Platform(
DataTable2,
Bivariate(
Y( :Head ),
X( :Mass ),
Automatic Recalc( 1 ),
Local Data Filter
)
);
Report1 = Platform(
DataTable1,
Bivariate(
Y( :Name( "Height (inches)" ) ),
X( :Name( "Weight (lbs)" ) ),
Automatic Recalc( 1 ),
Local Data Filter
)
);
),
Organize(
Relocate( Report1( 0, 0 ) );
Relocate( Report2( 10, 680 ) );
),
Initialize( Glue() )
)
),
Initialize(
Module1 << Auto Launch( 1 );
Module1 << Set Module Type( "Report" );
Module1 << Set Window Title( "^TABLENAME - ^APPNAME" );
Module1 << Set Min Size( 0, 0 );
Module1 << Set Max Size( 30000, 30000 );
Module1 << Set Auto Stretching( ., . );
)
) << EditZugegeben, das sieht nicht genau so aus, wie Sie es hatten, aber vielleicht funktioniert es gut genug für Sie.