Comment puis-je mettre en œuvre convivial logique booléenne dans un formulaire web GUI?
Actuellement, j'ai une application web où l'utilisateur peut utiliser les listes déroulantes pour générer des instructions SELECT SQL comme ceci:
Colonne, Sélectionnez Le Menu Déroulant | Opérateur De Liste Déroulante (= != > < <= >=) | Valeur sélectionnez le menu déroulant
L'utilisateur peut le faire plusieurs fois, et les "filtres" sont actuellement tous ANDed ensemble.
Je veux ajouter la possibilité de créer OU de déclarations. Je pourrais très facilement ajouter des Rup dans le cas où les colonnes sont les mêmes, mais ce que sur la complexité de la logique des déclarations comme
((A, B OU C) ET (D OU E) OU (F ET G)?
Comment puis-je laisser les utilisateurs créer de telles déclarations dans une manière conviviale?
EDIT: Pour préciser, convivial pour un public général. Actuellement, je travaille avec des développeurs que de temps en temps à la main le code SQL des requêtes pour un non-technique client qui a besoin d'informations spécifiques à partir de notre base de données. L'objectif est que cette application va supprimer la nécessité pour nous de la main-code en donnant au client un facile à utiliser l'outil pour le faire eux-mêmes.
EDIT2: Actuellement, l'application n'est pas utilisée par les utilisateurs finaux. Les seules données que j'ai quant à son utilisation sont antérieures manuscrite des requêtes SQL, et donc du type de requêtes que le client demande. Étant donné que je pourrait simplifier (par exemple, limite la capacité des utilisateurs à générer des requêtes pour les types de requêtes qu'ils ont tendance à demander), mais je veux voir si quelqu'un a une expérience de communication de la logique booléenne simplement et complètement dans les Interfaces graphiques.
Je vous remercie pour votre temps.
- Par "user-friendly" voulez-vous dire par "user-friendly pour un public général" ou "user-friendly pour les personnes qui sont au moins un peu familier avec la logique booléenne déjà"?
- Désolé, encore une question: est-ce la fin des usagers de l'aide de la version actuelle de l'application? Je me demandais si ils sont déjà formés à reconnaître et à utiliser efficacement la colonne/opérateur/valeur triade de listes déroulantes.
Vous devez vous connecter pour publier un commentaire.
Quand vous en avez besoin pour gérer
( (A or B) and C) or (D or E or F)
, vous travaillez avec un arbre comme structure de données. Dans mon expérience, il n'y a pas de moyen facile de représenter des arbres de décision pour les utilisateurs dans une "jolie" ou "intuitive" façon. Son doublement dur dans ASP.NET webforms.Cependant, on a essayé et vrai démarche est la suivante: zone de texte unique l'acceptation d'une clause where. Croyez-moi, la seule entrée de l'approche est vraiment le plus simple et interface utilisateur intuitive, et il a aussi l'avantage* de permettre une rapide entrée/modification des filtres de la requête.
** Un autre avantage, du côté technique, c'est d'être capable d'écrire votre propre lexer/parser et AST. Combien avez-vous de le faire en une base crud app :)*
Vous êtes déjà aller à la formation de vos utilisateurs comment utiliser votre requête ad hoc moteur, vous pouvez ainsi former que de taper
(account.Balance < -2000 and account.Type == 'Checking') OR (account.Number = 123456)
retourne exactement ce qu'il dit il retourne.Si vous allez avec cette approche, fournir à l'utilisateur avec la liste des colonnes disponibles, de sorte que double-cliquant sur un élément insère l'élément dans la zone de texte à l'emplacement du curseur.
;
et d'autres mauvaises choses.. mais de dire au client d'apprendre SQL je ne pense pas que c'est une bonne solutionIl y a un plugin jquery pour ce faire, appelé QueryBuilder, qui ne présente d'une manière intéressante : http://mistic100.github.io/jQuery-QueryBuilder/
Apple semble avoir trouvé un moyen de concevoir une interface graphique pour imbriquée des expressions booléennes: voir la accepté de répondre à UX.stackexchange.
Honnêtement, je ne vois pas la valeur de l'entreprise dans la rédaction de la coutume "où", "select", "de" ou toutes les autres commandes SQL procurations. En particulier, dans ce contexte particulier (DB accès et personnalisées à la volée de la requête), le client ouvre les portes de sécurité de l'enfer.
Laisser "pour les nuls" (qui je suppose ne sont pas capables d'utiliser le standard SQL outils) composent "intuitive" de la requête est un désastre. Je suppose que BJ club informations de carte de crédit buste de 2003 ou de 2004 était assez proche dans l'esprit. Je pense (et ce n'est qu'une supposition!!!) certains grands de marketing patron a dit "Nous allons enregistrer la carte de crédit à bande info afin que nous puissions tirer parti de cette information plus tard." "Voulez-vous uniquement disponibles publiquement les infos dans un tableau et PII statistiquement placées dans un compartiment" - a demandé au développeur..... "Non, nous ne savons pas encore comment nous voulons utiliser cette information, nous développer un outil pour interroger de MANIÈRE PERSONNALISÉE....." a été le premier tremplin sur le chemin de la catastrophe. 🙁
Pendant ce temps, il y a certainement sont des lieux lorsque l'INTERFACE utilisateur est nécessaire pour la rédaction/l'analyse des expressions (politique de sécurité des outils d'analyse, boolean/commutateur de l'algèbre de recherche, etc.) Je crois que la meilleure INTERFACE utilisateur doit encore être créé (toujours:)), mais si elle avait été créée, je l'avais imaginer avoir la possibilité de:
C'est difficile à représenter, même dans une application WinForms.
Ce que vous devez faire est de mettre en œuvre le concept d'un état de groupe, qui se compose d'un ou de plusieurs états, et un opérateur conditionnel.
La meilleure mise en œuvre de ce que j'ai voir était de GameSpy serveur de filtrage -- j'ai juste essayé de chercher pour trouver une capture d'écran, mais j'ai trouvé vide (ne concerne que le programme existe toujours?). À partir de ce que je me souviens, ils ont fait quelque chose comme ceci:
Quand je vois un problème de ce genre, je ne peux pas aider mais penser à mettre en œuvre comme une pile, de la même façon RPN permettrait de résoudre ce problème.
Le problème ici est qu'il ne semble pas trop intuitif
INTERFACE utilisateur de l'exemple: ([Bouton] <une zone de texte pour la saisie de l'utilisateur> {liste}
Valeur : < >
[Push] [Et] [Ou]
Pile
{
}
(HP RPN calculatrices placer la pile au-dessus de la zone d'édition)
Donc, si je voulais écrire l'expression ((A et B) ou (C et D)), je ferais ceci:
Un [push] (pile doit contenir "Une")
B [push] (pile contiendra "B", "A")
[et] (pile doit contenir "(A et B)")
C [push] (pile contiendra "C", "(A et B)")
D [push] (pile contiendra "D", "C", "(A et B)")
[et] (pile doit contenir "(C et D)", "(A et B)")
[ou] (pile doit contenir "((A et B) ou (C et D)")
si vous souhaitez ajouter d'autres opérateurs, et il n'y avait pas trop nombreux, vous pouvez simplement ajouter des boutons supplémentaires, ou de faire un autre textbox pour l'opérateur
Valeur: < >
[Push]
L'opérateur < >
[Combiner]
Si vous voulais le soutien des opérateurs unaires, vous aurez besoin de garder une trace de savoir si c'est un préfixe ou un suffixe de l'opérateur, ou tout simplement prendre préfixe (le booléen de l'opérateur unaire "non", est généralement le préfixe). Ternaire, les opérateurs ont généralement deux infix indicatifs, donc il n'y a plus de complexité si vous voulez les soutenir. Certains binaire (et n-aire)les opérateurs ont un préfixe, infixe, suffixe de la composante "CallMethod(A,B)" Donc il s'agit vraiment de la façon complexe que vous voulez en faire.
Juste une idée.
Mac OS X offre une très belle interface widgets pour faire exactement ce genre de chose. Vous pouvez le modèle de votre interface après ce type de mise en page/l'interaction.
Une autre option est quelque chose comme SQL Server Management Studio générateur de requêtes à l'interface de plusieurs lignes et de colonnes, où les lignes représente une Padn, et les colonnes Rup (ou vice-versa, je ne me souviens pas).
Vous pouvez le faire en temps réel mise à jour de la requête afin d'aider les utilisateurs (comme les mises à jour SQL Server le SQL qui en résulte).