Application avec plusieurs tables de données et ne créera pas correctement les filtres de données locauxBonjour à tous, j'essaie de créer une application qui fait référence à plusieurs tables de données, et dans cette application, il existe des filtres de données qui s'appliquent aux graphiques de chaque table de données. Lorsque j'insère le filtre de données local, les options de colonne sont correctes. Cependant, lorsque j'exécute l'application, tous les filtres de données locaux référenceront la table de données que j'ai ouverte en dernier. Les deux disent qu'ils font référence à la table de données correcte dans le générateur d'applications, mais cela change d'une manière ou d'une autre lors du lancement de l'application.
Par exemple, en utilisant deux exemples d'ensembles de données :
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( ., . );
)
) << EditRe : Application avec plusieurs tables de données et ne créera pas correctement les filtres de données locauxJe peux confirmer que ce problème sera résolu avec JMP 15.2 et au-delà. Plusieurs filtres de données locaux dans une application maintiendront leur connexion à la table de données appropriée.
Re : Application avec plusieurs tables de données et ne créera pas correctement les filtres de données locauxCela a fonctionné !! Merci beaucoup! J'étais dans l'impasse pour trouver une solution de contournement, principalement parce que je pensais que je ne pouvais plus voir le script qui créait l'application. Lorsque mon application est devenue suffisamment grande (plus de 60 plates-formes avec plus de 28 filtres de données locaux et les éléments d'affichage pour les contenir tous), l'option "enregistrer le script" semblait simplement me donner la partie script personnalisé de mon application. Il s'avère qu'il s'agissait simplement de mettre toute la fonction Allocate sur une seule ligne. Lorsque j'ai cliqué sur le script de reformatage, des centaines de lignes supplémentaires ont été révélées. Ce n'est pas nécessairement un bug, je suppose, mais j'ai pensé que vous voudriez peut-être en être conscient.
Lorsque j'ai suivi les étapes que vous avez suggérées, tout fonctionne correctement. J'espère que cela sera corrigé dans les futures itérations, car je devrai créer l'ensemble de l'application avant de revenir au script pour modifier les filtres afin qu'ils soient corrects.
Re : Application avec plusieurs tables de données et ne créera pas correctement les filtres de données locauxBonjour Cameron, merci pour votre réponse. C'est en fait comme ça que je l'avais à l'origine, mais cela crée son propre ensemble de problèmes. Ailleurs dans l'application, j'ai des paramètres de script à appliquer à ces filtres (dont il y en a plus d'une douzaine dans mon application actuelle). Je n'arrivais pas à comprendre comment accéder au filtre avec des scripts lorsqu'il était inclus dans la plate-forme. Fondamentalement, je ne pouvais pas comprendre comment scripter des commandes sur mes plates-formes, uniquement les éléments d'affichage correspondants. Il s'agit d'un problème distinct, mais si vous savez comment résoudre ce problème, cela serait également utile !
Re : Application avec plusieurs tables de données et ne créera pas correctement les filtres de données locauxBonjour,
Je pourrais reproduire ce que vous voyiez. Bien que ce ne soit qu'une solution de contournement, essayez ceci :
1. À partir de votre script que vous avez fourni. Modifiez la toute dernière ligne pour dire Exécuter plutôt que Modifier, et essayez d'exécuter le script. Entre mes mains, votre script fait ce que j'attendais de lui.
2. Lorsque vous générez l'application, modifiez l'emplacement de la table de données sur Nom, plutôt que sur la table de données actuelle.
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 )
)
),
L'option Emplacement est en bas.
Parfois, le pointeur "allocation" n'est pas comme prévu. Ainsi, dans le script, vérifiez que le filtre 1 pointe vers la table 1 et que le filtre 2 pointe vers la table 2.
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)" ) )
)
);Re : Application avec plusieurs tables de données et ne créera pas correctement les filtres de données locauxSalut @DopeAgoniste ,
C'est un comportement assez étrange, et il mérite probablement l'attention d'un développeur.J'ai vérifié ce que vous avez décrit en créant l'application à partir de zéro et en modifiant également l'association de filtre de données local dans le script vers la table appropriée.J'ai pu faire apparaître les filtres de données appropriés en les ajoutant manuellement dans le script à l'aide de
Splitter1 << Prepend(DataTable1 << Data Filter("Local"));
Splitter2 << Prepend(DataTable2 << Data Filter("Local"));Mais cela ne fonctionne toujours pas.Quelle que soit la manière dont vous le faites, les filtres de données locaux ne sont pas correctement connectés à la table pour une raison quelconque.La modification des valeurs des filtres n'a aucun effet sur la sélection des lignes dans les tableaux.
Si vous créez les filtres de données à partir des plates-formes d'analyse que vous importez dans votre application, les filtres fonctionnent.Par exemple:
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( ., . );
)
) << EditCertes, cela ne ressemble pas exactement à ce que vous aviez, mais peut-être que cela fonctionnera assez bien pour vous.