Détection des changements dans un filtre de données local<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
Vous trouverez ci-dessous un script qui utilise un filtre de données qui, lorsqu'il est modifié, déclenche le gestionnaire d'état de ligne et met à jour le graphique.Je souhaite vraiment utiliser un filtre local, mais je n'ai pas réussi à comprendre comment détecter le changement dans le filtre local.Comment détecter un changement dans le filtre de données local ?
Noms par défaut ici ( 1 ) ;
dt = Ouvrir ( "$SAMPLE_DATA\capacité de semi-conducteur.jmp" ) ;
F = Fonction ( { un } ,
// Capturez le LCL et l'UCL à partir de la zone de plan des résumés de limites dans la sortie du rapport
monLCL = ( Rapport ( ccb )[ "Résumés des limites NPN1" ][ Boîte de table ( 1 )][ 2 ] << obtenir )[ 1 ] ;
monUCL = ( Rapport ( ccb )[ "Résumés des limites NPN1" ][ Boîte de table ( 1 )][ 4 ] << obtenir )[ 1 ] ;
// Réapplique à la carte de contrôle les nouveaux paramètres d'axe
Rapport ( ccb )[ Boîte d'axe ( 3 )] << Min. ( monLCL ) ;
Rapport ( ccb )[ Boîte d'axe ( 3 )] << Max. ( monUCL ) ;
) ;
rs = dt << créer un gestionnaire d'état de ligne ( F ) ;
Nouvelle fenetre ( "Exemple de travail" ,
Zone contextuelle du filtre de données (
Zone de liste H (
dt << Filtre de données ( Ajouter un filtre ( Colonnes ( : SITE ) ) , Mode ( sélectionner ( 1 ) , montrer ( 1 ) , inclure ( 1 )) ) ,
Plate-forme ( dt ,
ccb = Générateur de cartes de contrôle (
Taille ( 534 , 453 ) ,
Afficher le panneau de configuration ( 0 ) ,
Variables ( Oui ( : NPN1 ) ) ,
Graphique ( Position ( 1 ) , Limites ) ,
Graphique ( Position ( 2 ) ) ,
EnvoyerVersRapport (
Expédition (
{} ,
"NPN1" ,
Boîte à échelle ,
{ Min. ( 96.6346153846154 ) , Max. ( 131.634615384615 ) , Inc. ( 5 ) , Tiques mineures ( 0 ) ,
Ajouter une ligne de référence ( 104.412948990151 , "Solide" , "Bleu" , "LSL" , 1 ) ,
Ajouter une ligne de référence ( 131.893493064355 , "Solide" , "Bleu" , "USL" , 1 ) ,
Ajouter une ligne de référence ( 118.153221027253 , "Solide" , "Bleu" , "Cible" , 1 )}
)
)
)
)
)
)
) ;
Envoyé de Mail pour Windows 10
Re : Détection de modifications dans un filtre de données localAvec
rs = xx << Make Filter State Handler( dosomethingwithselection );
au lieu de
xx << MakeRowStateHandler( dosomethingwithselection );
ça va marcher.
Veuillez noter qu'il est essentiel de stocker le gestionnaire d'état de filtre renvoyé dans un symbole JSL : rs =
<STRIKE>rs =</STRIKE> xx << Make Filter State Handler( dosomethingwithselection );
(sans r = ) ne fonctionnera pas: Gestionnaire de changement de filtre
Re : Détection de modifications dans un filtre de données localJe ne réponds pas directement à votre question, Jim. Mais FWIW, je n'ai pas vu « MakeRowStateHandler » sur la liste des messages pour l'objet filtre de données local.
Re : Détection de modifications dans un filtre de données localIan,
Votre exemple a très bien fonctionné.Je suis retourné chercher de la documentation à ce sujet, dans l'index de script, et n'ai trouvé que la référence la plus obscure selon laquelle un "Mark Row State Handler" fonctionnerait sur un filtre de table de données.J'ai donc pensé que si je le configurais pour pouvoir pointer directement vers le filtre, plutôt que vers la zone de contour du filtre, cela devrait fonctionner et constituer un morceau de code encore plus direct.Mais ça n'a pas marché.Avez-vous une idée de pourquoi cela ne fonctionne pas ?Lorsque j'exécute le script, il sait que le handle "xx" pointe vers un filtre de données.
Noms par défaut ici ( 1 ) ;
// Certaines données
dt = Nouveau tableau ( "Des fruits" ,
Ajouter des lignes ( 3 ) ,
Nouvelle colonne ( "Fruit" ,
Personnage ,
"Nominal" ,
Définir les valeurs ( { "Poire" , "Pomme" , "Orange" } )
)
) ;
// Un rapport avec un filtre de données local
go = dt << Générateur de graphiques (
Taille( 528 , 448 ) ,
Afficher le panneau de configuration ( 0 ) ,
Afficher la légende ( 0 ) ,
Variables(X( : Fruit ) ) ,
Éléments( Barre( X , Légende( 3 ) ) )
) ;
xx = go << Filtre de données locales (Mode , Ajouter un filtre (colonnes ( : Fruit ) ) ) ;
// Fonction de gestionnaire d'état de ligne
faire quelque chose avec la sélection = Fonction ( {X} ,
{Local par défaut},
Bip () ;
Attendez ( 0,1 ) ;
Bip () ;
) ;
// Récupère une référence au rapport
gbRapport = go << Rapport;
// Voir quels messages la boîte d'affichage du filtre de données comprend (imprime dans le journal)
Afficher les propriétés ( gbReport[ Boîte de contour ( 1 )] ) ;
// Attribue le gestionnaire d'état de ligne à la boîte d'affichage du filtre de données local
xx << MakeRowStateHandler ( faire quelque chose avec sélection ) ;
//rsh = gbReport[OutlineBox(1)] << MakeRowStateHandler(dosomethingwithselection);
Re : Détection de modifications dans un filtre de données localPeut-être pourriez-vous essayer d'ajouter le gestionnaire d'état de ligne au filtre de données local ? Par exemple:
NomsDefaultToHere ( 1 ) ;
// Certaines données
dt = Nouveau tableau ( "Des fruits" ,
Ajouter des lignes ( 3 ) ,
Nouvelle colonne ( "Fruit" ,
Personnage ,
"Nominal" ,
Définir les valeurs ( { "Poire" , "Pomme" , "Orange" } )
)
) ;
// Un rapport avec un filtre de données local
go = dt << Générateur de graphiques (
Taille ( 528 , 448 ) ,
Afficher le panneau de configuration ( 0 ) ,
Afficher la légende ( 0 ) ,
Variables ( X ( : Fruit ) ) ,
Éléments ( Bar ( X , Légende ( 3 ) ) ) ,
Filtre de données locales ( Mode , Ajouter un filtre ( Colonnes ( : Fruit ) ) )
) ;
// Fonction de gestionnaire d'état de ligne
faire quelque chose avec la sélection = Fonction ({ X } , { Local par défaut } , Bip () ; Attendez ( 0,1 ) ; Bip () ) ;
// Récupère une référence au rapport
gbRapport = go << Rapport ;
// Voir quels messages la boîte d'affichage du filtre de données comprend (imprime dans le journal)
Afficher les propriétés ( gbRapport [ Boîte de contour ( 1 )]) ;
// Attribue le gestionnaire d'état de ligne à la boîte d'affichage du filtre de données local
rsh = gbRapport [ Boîte de contour ( 1 )] << MakeRowStateHandler ( faire quelque chose avec la sélection ) ;
Re : Détection de modifications dans un filtre de données localJ'espérais qu'il y aurait un moniteur plus direct d'un filtre local.Peut-être que 14.0 aura un tel moniteur . Merci pour le code.
Re : Détection de modifications dans un filtre de données localJe ne vois aucun support intégré pour surveiller un filtre de données local par script.
Vous trouverez ci-dessous un hack qui s'exécute simplement en arrière-plan pour trouver les modifications de filtrage effectuées par l'utilisateur.
Noms par défaut ici ( 1 ) ;
dt = Ouvrir ( "$SAMPLE_DATA\capacité de semi-conducteur.jmp" ) ;
F = Fonction ( { ccb } ,
// Capturez le LCL et l'UCL à partir de la zone de plan des résumés de limites dans la sortie du rapport
monLCL = ( Rapport ( ccb )[ "Résumés des limites NPN1" ][ Boîte de table ( 1 )][ 2 ] << obtenir )[ 1 ] ;
monUCL = ( Rapport ( ccb )[ "Résumés des limites NPN1" ][ Boîte de table ( 1 )][ 4 ] << obtenir )[ 1 ] ;
// Réapplique à la carte de contrôle les nouveaux paramètres d'axe
Rapport ( ccb )[ Boîte d'axe ( 3 )] << Min. ( monLCL ) ;
Rapport ( ccb )[ Boîte d'axe ( 3 )] << Max. ( monUCL ) ;
) ;
maintenant = Nouvelle fenetre ( "Exemple de travail" ,
Zone contextuelle du filtre de données (
Zone de liste H (
ldf = dt << Filtre de données ( locale , Ajouter un filtre ( Colonnes ( : SITE ) ) , Mode ( sélectionner ( 1 ) , montrer ( 1 ) , inclure ( 1 )) ) ,
Plate-forme ( dt ,
ccb = Générateur de cartes de contrôle (
Taille ( 534 , 453 ) ,
Afficher le panneau de configuration ( 1 ) ,
Variables ( Oui ( : NPN1 ) ) ,
Graphique ( Position ( 1 ) , Limites ) ,
Graphique ( Position ( 2 ) ) ,
EnvoyerVersRapport (
Expédition (
{} ,
"NPN1" ,
Boîte à échelle ,
{ Min. ( 96.6346153846154 ) , Max. ( 131.634615384615 ) , Inc. ( 5 ) , Tiques mineures ( 0 ) ,
Ajouter une ligne de référence ( 104.412948990151 , "Solide" , "Bleu" , "LSL" , 1 ) ,
Ajouter une ligne de référence ( 131.893493064355 , "Solide" , "Bleu" , "USL" , 1 ) ,
Ajouter une ligne de référence ( 118.153221027253 , "Solide" , "Bleu" , "Cible" , 1 )}
)
)
)
)
)
)
) ;
// Surveillez le filtrage des données locales en jetant un coup d'œil dans la clause Where sous la carte de contrôle
// Localisez d'abord la TextBox de la clause Where
// (le nombre varie mais il semble que ce soit toujours le dernier)
Attendez ( 0 ) ;
je = 1 ;
Alors que ( Est scriptable ( Essayer ( parent = maintenant [ Zone de texte ( je )] << parent )) ,
Alors que ( typeparent = Carboniser ( parent << nom du cours ) != "Boîte de contour" , parent = parent << parent ) ;
je ++ ;
) ;
// Rechercher les changements avec une fréquence adéquate
filtre = "aucun" ;
Alors que ( Est scriptable ( maintenant ) , // Fonctionnera jusqu'à ce que nw soit fermé
Attendez ( 0,1 ) ; // définit la fréquence de balayage ici
Si ( ! Est manquant ( nouveau filtre = Essayer ( maintenant [ Zone de texte ( je )] << obtenir du texte )) ,
Si ( filtre != nouveau filtre ,
filtre = maintenant [ Zone de texte ( je )] << obtenir du texte ;
F ( ccb ) ; // obtient les limites et définit un axe
)
) ;
) ;