Suite

La valeur par défaut du champ de la table attributaire n'est pas transférée vers les nouvelles entités modifiées


En utilisant ESRI ArcMap 10.0, dans un environnement versionné, nous sommes dans une géo-base de données et avons une classe d'entités avec une valeur par défaut renseignée dans les propriétés de champ. Lorsque nous créons une nouvelle fonctionnalité à l'aide d'outils d'édition, la valeur par défaut ne remplit pas le champ correspondant comme il se doit. Quelqu'un a-t-il déjà rencontré ce problème et des idées de solutions ?


Je ne sais pas si c'est la cause, mais voici quelques points à vérifier ; sans plus de détails sur l'ensemble de données et l'environnement, il ne s'agit en réalité que de prises de vue dans le noir. Mon premier serait de vérifier si l'ensemble de données en question a des sous-types. S'il y a des sous-types, vous pouvez définir des valeurs de champ par défaut dans l'onglet champs des propriétés FC toute la journée et cela ne fera malheureusement pas grand bien (cela m'a déjà causé pas mal de frustration, alors ne pensez pas Tu es seul). S'il existe des sous-types, vous devez accéder aux propriétés de chaque sous-type et définir les valeurs de champ par défaut que vous souhaitez pour chaque champ pour chaque sous-type.

Deuxièmement, je retournerais dans les propriétés des ensembles de données et vérifierais simplement que les valeurs par défaut ont été enregistrées correctement (je sais que l'attribution manuelle de domaines après qu'un champ a déjà été créé par exemple ne fonctionne souvent pas et vous devez le faire avec l'outil GP au lieu de via la boîte de propriétés FC/table).

Ensuite, aussi basique que cela puisse paraître, je vérifierais que les valeurs par défaut attribuées correspondent au type de champ pour chaque champ avec une valeur par défaut attribuée. De toute évidence, une valeur par défaut de "ABC" aurait un problème d'être stockée dans un champ entier court (si cela vous permettait même d'enregistrer les propriétés comme ça, pas sûr…).

Ensuite, j'ouvrirais un tout nouveau MXD et j'apporterais l'ensemble de données en question, puis je commencerais à l'éditer et à le tester là-bas. Si cela fonctionne correctement avec les valeurs par défaut là-bas mais pas ailleurs, il est probable que vous ayez déjà importé le jeu de données dans le MXD avant d'attribuer les valeurs par défaut et qu'il avait déjà configuré automatiquement la création de modèles d'entités pour vous avec les valeurs par défaut (ou l'absence des valeurs par défaut) qui ont été attribuées à l'époque. Si tel est le cas, vous pouvez soit supprimer le jeu de données du MXD et le rajouter (cela perdra les propriétés de couche telles que l'étiquetage et la symbologie), ou vous pouvez modifier les modèles d'entités créés dans le MXD pour utiliser les valeurs par défaut définies par l'utilisateur. Plus d'informations à ce sujet sur http://help.arcgis.com/en/arcgisdesktop/10.0/help/index.html#//001t000003w2000000.htm

Si rien de tout cela ne fonctionne, je l'essayerais avec une classe d'entités différente ou la même classe d'entités copiée dans une base de données différente, comme un FileGDB nouveau/vide (glissez-déposez depuis ArcCatalog et il devrait transférer les domaines, les valeurs par défaut, etc. … ) et voyez s'il y a quelque chose dans la classe d'entités ou la base de données en question qui est corrompu.

Enfin, si aucune des solutions ci-dessus ne m'aide, je contacterais le support technique d'ESRI ou je posterais à nouveau votre question avec beaucoup plus de détails sur le problème exact (ex : de quelle version ou d'ArcServer s'agit-il, à quelle version de la base de données s'agit-il , avec quels types de champs et types de classes d'entités rencontrez-vous des problèmes, quelles valeurs par défaut ne fonctionnent pas, certaines valeurs par défaut sont-elles enregistrées et pas d'autres ou aucune valeur par défaut n'est-elle enregistrée, etc.).

J'espère que l'une des suggestions vous aidera.


Malheureusement, la réponse en ce moment est « Non ».

EDIT 30 mars 2015 : Il arrive dans EF7. Prise en charge des valeurs par défaut de la base de données dans Code First

EDIT 30 janv. 2017 : La prise en charge générale des valeurs de base de données par défaut fait partie d'EF Core (le nouveau nom d'EF7). Les valeurs par défaut

EDIT 17 janv. 2018: Je ne sais pas pourquoi les gens commentent que EF7 est toujours une « chimère ». EF7 (renommé EF Core) a été publié le 27 juin 2016 et prend en charge la définition de valeurs par défaut dans Code First à l'aide de FluentAPI comme ceci :


Nom et description

Utilisez le Nom et La description zones pour spécifier un nom et une description pour le champ personnalisé. Le tableau suivant décrit les champs de nom et de description.

Si vous prévoyez d'utiliser des champs personnalisés dans vos cubes OLAP, évitez d'utiliser des caractères non alphanumériques dans le nom.

Attributs de nom et de description pour les champs personnalisés dans Project Web App

Attribut La description
Nom
Le nom du champ personnalisé.
La description
Une description du champ personnalisé.


5 réponses 5

Selon les documents de tri de table, vous pouvez le faire en utilisant l'option de commande :

Le 0 indique de trier sur la première colonne, tandis que asc le fait dans l'ordre croissant. Vous pouvez choisir n'importe quelle autre colonne et utiliser desc aussi.

Pour les versions de DataTables antérieures à 1.10, vous devez utiliser aaSorting à la place

Pour l'ordre décroissant sur la première colonne :

FIXER LA COMMANDE INITIALE (Tableaux de données 1.10)

Utilisez order pour définir l'ordre initial de la table.

Par exemple, pour trier par deuxième colonne dans l'ordre décroissant :

Voir ce jsFiddle pour le code et la démonstration.

DÉSACTIVER LE TRI POUR UNE COLONNE (Tableaux de données 1.10)

Utilisez columnDefs et orderable pour désactiver le tri sur certaines colonnes.

Par exemple, pour désactiver le tri sur les troisième et quatrième colonnes :

Voir ce jsFiddle pour le code et la démonstration.

DÉFINIR L'ORDRE INITIAL ET DÉSACTIVER LE TRI POUR LA MÊME COLONNE (Tableaux de données 1.10)

Vous pouvez combiner l'option d'ordre pour définir l'ordre initial de la table et commandable pour désactiver le tri sur la même colonne.


22 réponses 22

Vous ne pouvez pas le faire avec un attribut car ce ne sont que des méta-informations générées au moment de la compilation. Ajoutez simplement du code au constructeur pour initialiser la date si nécessaire, créez un déclencheur et gérez les valeurs manquantes dans la base de données, ou implémentez le getter de manière à renvoyer DateTime.Now si le champ de sauvegarde n'est pas initialisé.

Ajouter ci-dessous à la propriété DateTime

Il n'y a aucune raison pour que je puisse trouver que cela ne devrait pas être possible à travers un attribut. C'est peut-être dans l'arriéré de Microsoft. Qui sait.

La meilleure solution que j'ai trouvée consiste à utiliser le paramètre defaultValueSql dans la première migration du code.

Je n'aime pas la solution souvent de référence consistant à le définir dans le constructeur de la classe d'entité, car si quelque chose d'autre qu'Entity Framework colle un enregistrement dans cette table, le champ de date n'obtiendra pas de valeur par défaut. Et l'idée d'utiliser un déclencheur pour gérer ce cas me semble tout simplement fausse.

j'ai testé ça sur EF noyau 2.1

Ici, vous ne pouvez utiliser ni les conventions ni les annotations de données. Vous devez utiliser le API fluide.

C'est possible et assez simple :

pour toute autre valeur comme dernier argument de DefaultValueAttribute, spécifiez la chaîne qui représente la valeur DateTime souhaitée.

Cette valeur doit être une expression constante et est requise pour créer un objet ( DateTime ) à l'aide de TypeConverter .

Une solution simple si vous utilisez Entity Framework consiste à ajouter une classe partical et à définir un constructeur pour l'entité car le framework n'en définit pas. Par exemple, si vous avez une entité nommée Exemple, vous placeriez le code suivant dans un fichier séparé.

Je pense que la solution la plus simple est de définir

dans la déclaration de colonne et dans le concepteur d'EntityModel VS2010, définissez la propriété de colonne correspondante StoreGeneratedPattern = Calculé.

Je viens de trouver ceci à la recherche de quelque chose de différent, mais dans la nouvelle version C#, vous pouvez utiliser une version encore plus courte pour cela :

La création d'une nouvelle classe d'attributs est une bonne suggestion. Dans mon cas, je voulais spécifier 'default(DateTime)' ou 'DateTime.MinValue' afin que le sérialiseur Newtonsoft.Json ignore les membres DateTime sans valeurs réelles.

Sans l'attribut DefaultValue, le sérialiseur JSON afficherait "1/1/0001 12:00:00 AM" même si l'option DefaultValueHandling.Ignore était définie.

Pensez simplement à définir sa valeur dans le constructeur de votre classe d'entité

J'avais besoin d'un horodatage UTC comme valeur par défaut et j'ai donc modifié la solution de Daniel comme ceci :

Pour le didacticiel DateRangeAttribute, consultez cet article de blog génial

J'ai rencontré le même problème, mais celui qui fonctionne le mieux pour moi est ci-dessous:

Il y a un moyen. Ajoutez ces classes :

Et utilisez DefaultDateTimeValue comme attribut de vos propriétés. Les valeurs à saisir dans votre attribut de validation sont des choses comme "Now", qui seront rendues au moment de l'exécution à partir d'une instance DateTime créée avec un activateur. Le code source est inspiré de ce fil : https://code.msdn.microsoft.com/A-flexible-Default-Value-11c2db19. Je l'ai modifié pour que ma classe hérite de DefaultValueAttribute au lieu d'un ValidationAttribute.

Dans C# Version 6, il est possible de fournir une valeur par défaut

La façon dont vous gérez cela pour le moment dépend du modèle que vous utilisez Linq to SQL ou EntityFramework ?

EF est un peu plus compliqué, voir http://msdn.microsoft.com/en-us/library/cc716714.aspx pour plus d'informations sur la logique d'entreprise EF.

Je sais que ce post est un peu vieux, mais j'ai une suggestion qui peut aider certains.

J'ai utilisé un Enum pour déterminer ce qu'il faut définir dans le constructeur d'attributs.

je pense vous pouvez le faire en utilisant StoreGeneratedPattern = Identity (défini dans la fenêtre des propriétés du concepteur de modèles).

Je n'aurais pas deviné que ce serait comment le faire, mais en essayant de le comprendre, j'ai remarqué que certaines de mes colonnes de date étaient déjà par défaut CURRENT_TIMESTAMP () et d'autres non. En vérifiant le modèle, je vois que la seule différence entre les deux colonnes en plus du nom est que celle qui obtient la valeur par défaut a StoreGeneratedPattern défini sur Identity .

Je ne m'attendais pas à ce que ce soit le cas, mais en lisant la description, cela a du sens:

Détermine si la colonne correspondante dans la base de données sera générée automatiquement lors des opérations d'insertion et de mise à jour.

De plus, bien que cela donne à la colonne de la base de données une valeur par défaut de "maintenant", je suppose que cela ne définit pas réellement la propriété sur DateTime.Now dans le POCO. Cela n'a pas été un problème pour moi car j'ai un fichier .tt personnalisé qui définit déjà toutes mes colonnes de date sur DateTime.Now automatiquement (il n'est en fait pas difficile de modifier le fichier .tt vous-même, surtout si vous avez ReSharper et obtenez un plugin de coloration syntaxique (les versions plus récentes de VS peuvent déjà mettre en évidence les fichiers .tt, je ne suis pas sûr.))

Le problème pour moi était le suivant : comment puis-je obtenir une valeur par défaut pour la colonne de base de données afin que les requêtes existantes qui omettent cette colonne fonctionnent toujours ? Et le paramètre ci-dessus a fonctionné pour cela.

Je ne l'ai pas encore testé, mais il est également possible que cette définition interfère avec la définition de votre propre valeur explicite. (Je ne suis tombé sur cela que parce que EF6 Database First a écrit le modèle pour moi de cette façon.)


2.6 Attributs de fichier

Les attributs suivants sont définis pour les fichiers et les répertoires. Ils peuvent être utilisés dans n'importe quelle combinaison, sauf indication contraire dans la description de la signification de l'attribut. Il n'y a pas d'attribut de fichier avec la valeur 0x00000000 car une valeur de 0x00000000 dans le Attributs de fichier signifie que les attributs de fichier pour ce fichier NE DOIVENT PAS être modifiés lors de la définition des informations de base pour le fichier.

Noter: les systèmes de fichiers ignorent silencieusement tout attribut qui n'est pas pris en charge par ce système de fichiers. Les attributs non pris en charge NE DOIVENT PAS être persistants sur le support. Il est recommandé de masquer les attributs non pris en charge lorsqu'ils sont rencontrés.

Un fichier ou un répertoire en lecture seule. Pour un fichier, les applications peuvent lire le fichier mais ne peuvent pas y écrire ou le supprimer. Pour un répertoire, les applications ne peuvent pas le supprimer, mais les applications peuvent créer et supprimer des fichiers de ce répertoire.

Un fichier ou un répertoire qui est caché. Les fichiers et répertoires marqués de cet attribut n'apparaissent pas dans une liste de répertoires ordinaire.

Un fichier ou un répertoire dont le système d'exploitation utilise une partie ou utilise exclusivement.

Un fichier ou un répertoire qui doit être archivé. Les applications utilisent cet attribut pour marquer les fichiers à sauvegarder ou à supprimer.

Un fichier qui n'a pas d'autres attributs définis. Cet indicateur est utilisé pour effacer tous les autres indicateurs en le spécifiant sans aucun autre indicateur défini.

Ce fanion DOIT être ignoré si d'autres fanions sont définis. <161>

Un fichier qui est utilisé pour le stockage temporaire. Le système d'exploitation peut choisir de stocker les données de ce fichier en mémoire plutôt que sur le stockage de masse, en écrivant les données dans le stockage de masse uniquement si les données restent dans le fichier lorsque le fichier est fermé.

Un fichier ou un répertoire auquel est associé un point d'analyse.

Un fichier ou un répertoire qui est compressé. Pour un fichier, toutes les données du fichier sont compressées. Pour un répertoire, la compression est la valeur par défaut pour les fichiers et sous-répertoires nouvellement créés.

Les données de ce fichier ne sont pas disponibles immédiatement. Cet attribut indique que les données du fichier sont physiquement déplacées vers le stockage hors ligne. Cet attribut est utilisé par le stockage distant, qui est un logiciel de gestion de stockage hiérarchique.

Un fichier ou un répertoire qui n'est pas indexé par le service d'indexation de contenu.

Un fichier ou un répertoire crypté. Pour un fichier, tous les flux de données du fichier sont chiffrés. Pour un répertoire, le cryptage est la valeur par défaut pour les fichiers et sous-répertoires nouvellement créés.

Un fichier ou un répertoire configuré avec la prise en charge de l'intégrité. Pour un fichier, tous les flux de données du fichier prennent en charge l'intégrité. Pour un répertoire, la prise en charge de l'intégrité est la valeur par défaut pour les fichiers et sous-répertoires nouvellement créés, sauf indication contraire de l'appelant. <162>

Fichier ou répertoire configuré pour être exclu de l'analyse d'intégrité des données. Pour un répertoire configuré avec FILE_ATTRIBUTE_NO_SCRUB_DATA, la valeur par défaut pour les fichiers et sous-répertoires nouvellement créés est d'hériter du FILE_ATTRIBUTE_NO_SCRUB_DATA attribut. <163>

Cet attribut apparaît uniquement dans les classes d'énumération de répertoire (FILE_DIRECTORY_INFORMATION, FILE_BOTH_DIR_INFORMATION, etc.). Lorsque cet attribut est défini, cela signifie que le fichier ou le répertoire n'a aucune représentation physique sur le système local, l'élément est virtuel. L'ouverture de l'élément coûtera plus cher que d'habitude car cela entraînera la récupération d'au moins une partie du contenu du fichier ou du répertoire à partir d'un magasin distant. Cet attribut ne peut être défini que par les composants en mode noyau. Cet attribut est destiné à être utilisé avec un logiciel de gestion de stockage hiérarchique. <164>

Cet attribut indique l'intention de l'utilisateur que le fichier ou le répertoire doit être entièrement présent localement même lorsqu'il n'est pas activement accédé. Cet attribut est destiné à être utilisé avec un logiciel de gestion de stockage hiérarchique. <165>

Cet attribut indique que le fichier ou le répertoire ne doit pas rester entièrement présent localement, sauf lors d'un accès actif. Cet attribut est destiné à être utilisé avec un logiciel de gestion de stockage hiérarchique. <166>

Lorsque cet attribut est défini, cela signifie que le fichier ou le répertoire n'est pas entièrement présent localement. Pour un fichier, cela signifie que toutes ses données ne se trouvent pas sur le stockage local (par exemple, elles peuvent être rares avec certaines données encore dans le stockage distant). Pour un répertoire, cela signifie qu'une partie du contenu du répertoire est virtualisée à partir d'un autre emplacement. La lecture du fichier ou l'énumération du répertoire coûtera plus cher que d'habitude car cela entraînera la récupération d'au moins une partie du contenu du fichier ou du répertoire à partir d'un magasin distant. Seuls les appelants en mode noyau peuvent définir cet attribut. Cet attribut est destiné à être utilisé avec un logiciel de gestion de stockage hiérarchique. <167>


J'ai eu le même problème hier, mais je l'ai fait d'une manière très propre qui fonctionne à la fois pour la validation côté client et côté serveur.

État: en fonction de la valeur d'une autre propriété dans le modèle, vous souhaitez qu'une autre propriété soit requise. Voici le code :

Nom de la propriété est la propriété sur laquelle vous voulez faire votre condition
Valeur souhaitée est la valeur particulière du PropertyName (propriété) pour laquelle votre autre propriété doit être validée pour requis

Supposons que vous ayez les éléments suivants :

Enfin, mais non des moindres, enregistrez l'adaptateur pour votre attribut afin qu'il puisse effectuer une validation côté client (je l'ai mis dans global.asax, Application_Start)

Certaines personnes se plaignaient que le côté client tire quoi qu'il en soit ou que cela ne fonctionne pas. J'ai donc modifié le code ci-dessus pour effectuer également une validation conditionnelle côté client avec Javascript. Dans ce cas, vous n'avez pas besoin d'enregistrer l'adaptateur

Et enfin le javascript ( le regrouper et le rendre. le mettre dans son propre fichier de script)

Vous avez évidemment besoin du jQuery de validation discret pour être inclus comme exigence


Types de contenu de site foiré. Comment restaurer par défaut ?

Je dois rétablir les valeurs par défaut des paramètres de type de contenu d'élément d'un site racine. Je dois également le faire pour tous les autres types de contenu qui héritent de l'élément. Quelqu'un peut-il recommander une méthode sûre et efficace pour le faire? Il est important que nous restaurons les définitions du type de contenu du site uniquement, nous ne voulons pas perdre les personnalisations.

Quelqu'un est allé au niveau racine d'un site SharePoint 2010 et a modifié les paramètres de colonne pour le champ Titre du type de contenu de l'élément en le rendant masqué au lieu d'obligatoire. Lorsqu'ils ont fait cela, ils ont mis à jour tous les types de contenu qui héritent de l'élément. Cela a été fait via root/_layouts/ManageContentTypeField.aspx sous : Paramètres du site > Types de contenu du site > Élément > Colonne Modifier le type de contenu

Une fois que des problèmes sont survenus, une autre personne est allée le redéfinir sur Obligatoire (mettant également à jour tous les types de contenu hérités). Ce n'était pas la bonne solution car certains des types de contenu descendants ont des valeurs par défaut différentes. Par exemple : le champ Titre du type de contenu de document est facultatif par défaut.

En plus de parcourir manuellement tout ce qui est répertorié sur /_layouts/mngctype.aspx, quel est un moyen efficace et sûr de restaurer les valeurs par défaut des types de contenu de site « intégrés » ?

Merci beaucoup!
-- Mise à jour du 2/8 --
MISE À JOUR: Je n'ai pas encore eu le temps de m'en occuper, mais je voulais remercier tout le monde pour leurs réponses. Un collègue a écrit un script powershell pour moi qui itère tous les types de contenu et génère les paramètres du champ Titre pour chacun. Je suis presque sûr que je peux le modifier pour réinitialiser les valeurs par défaut (après avoir comparé la sortie du script à partir d'une nouvelle installation SP). Au cas où cela pourrait aider quelqu'un, voici le script dans sa forme actuelle :


La valeur par défaut du champ de la table attributaire n'est pas transférée vers les nouvelles entités modifiées - Systèmes d'information géographique

NJeu de données hydrographiques national

Modèle de données version 2.1

Démarrage rapide du dictionnaire de données NHD

Ce document accompagne le Schéma NHD v 2.1 .    Il fournit des descriptions pour toutes les classes d'entités et tables attributaires trouvées dans le NHD, y compris le jeu de données d'entités WBD qui remplace l'ensemble de dates d'entités hydrologiques dans la version 2.1.    Ce format est facile à utiliser pour les activités quotidiennes.    Cependant, le schéma du modèle de données NHD comprend les domaines de valeur complète et tous les liens et relations entre les classes d'entités et les tables qui sont nécessaires pour bien comprendre le NHD.    Les documents associés incluent :

Ce dictionnaire de données contient des tableaux pour les éléments suivants.  

Classes d'entités hydrographiques

Classes d'entités événementielles hydrographiques

NHDVerticalRelation

NHDReachCodeMaintenance

NHDRachCrossReference

Paramètres de traitement NHD

Fonctionnalité NHD aux métadonnées

NHDMetadata a une citation de source

Classes d'entités hydrographiques

NHDPoint, NHDLine, NHDFlowline, NHDWaterbody, NHDArea

Valeur GUID de 40 caractères qui identifie de manière unique l'occurrence de chaque entité dans La carte nationale. Clé primaire de la base de données nationale.

Attribué localement lors de la création de nouvelles données (les fonctionnalités déjà attribuées à un ComID conservent cette valeur en tant qu'identifiant_permanent)

Date de la dernière modification de fonctionnalité.

Actuellement, la NHD est disponible sous forme de résolutions distinctes.    Les plans consistent à développer une base de données à résolution unique avec   les données de résolution la plus élevée pouvant être généralisées.

Identifiant unique attribué par GNIS, valeur de 10 caractères.

GNIS_ID = « null » si aucun nom n'est associé à la fonctionnalité

Nom propre, terme spécifique ou expression par laquelle une entité géographique particulière est connue, longueur 65.

GNIS_Name = « null » si aucun nom n'est associé à la fonctionnalité

Longueur de l'entité linéaire basée sur l'aire égale d'Albers, longueur 8.

Aire de l'entité surfacique basée sur l'aire égale d'Albers, longueur 8.

La distance verticale à partir d'une référence donnée.

L'étape de l'élévation de l'eau est codée dans le FCode.

Identifiant unique.    Les huit premiers chiffres sont le WBD_HUC8.    Les six chiffres suivants sont des numéros séquentiels attribués au hasard et uniques dans un HUC8, longueur 14.  

Obligatoire pour NHDFlowlines.

Les classes d'entités NHDWaterbody et NHDPoint autorisent les codes d'accès, mais ils ne sont pas obligatoires.

Direction du flux par rapport à l'ordre des coordonnées, longueur 4.

Permanent_Identifiant du plan d'eau

À travers lequel la ligne d'écoulement s'écoule

S'applique uniquement au type d'entité Chemin artificiel

Identificateur unique de valeur entière à trois chiffres d'un type d'entité.

Cliquez ici pour le catalogue de fonctionnalités

Valeur entière à cinq chiffres composée du type de caractéristique et de combinaisons de caractéristiques et de valeurs.

Cliquez ici pour le catalogue de fonctionnalités

Classes d'entités événementielles hydrographiques

NHDPointEvent, NHDLineEvent, NHDAreaEvent

Valeur GUID de 40 caractères qui identifie de manière unique l'occurrence de chaque entité dans La carte nationale.

Attribué localement lors de la création des données (les fonctionnalités déjà attribuées à un ComID conservent cette valeur en tant qu'identifiant_permanent)

Date à laquelle un événement a été créé.

Code d'accès sur lequel se situe l'événement.

La date de version suit la dernière fois que la portée représentée par ReachCode a subi un changement de géométrie.    Lorsque le ReachSMDate dans l'enregistrement d'événement et le ReachSMDate dans la table NHDReachCode_ComID ne sont pas d'accord, la position de l'événement le long du réseau peut devoir être mise à jour.

Feature_Permanent_IIdentifier

Permanent_Identifier de la fonction NHD référencée en tant qu'événement.

Les fonctionnalités de NHDPoint et NHDLine peuvent être référencées sur le réseau via une fonctionnalité d'événement.

Classe d'entités NHD contenant FeatureComID

Description de l'entité

Identifiant de l'entité utilisée dans les données source    .

URL où les données détaillées de l'entité d'événement peuvent être trouvées

Mesurez le long du tronçon, en pourcentage à partir de l'extrémité en aval, où se trouve un événement ponctuel.

Classe d'entités Point Event

Mesurez le long du bief, en pourcentage à partir de l'extrémité en aval, où commence un événement linéaire (à partir de).

Mesurez le long du bief, en pourcentage à partir de l'extrémité aval, où se termine un événement linéaire (à).

Type d'entité dans un événement

Distance du réseau à utiliser pour afficher l'événement

Classes d'entités d'événements ponctuels et linéaires

Les décalages négatifs affichent l'événement à gauche du réseau et les décalages positifs affichent l'événement à droite de la ligne.     Les décalages sont utiles pour afficher des événements qui se chevauchent.


N'utilisez pas l'attribut d'espace réservé

Introduit dans le cadre de la spécification HTML5, l'attribut placeholder "représente un bref indice (un mot ou une phrase courte) destiné à aider l'utilisateur à saisir des données lorsque le contrôle n'a aucune valeur. Un indice peut être un exemple de valeur ou une brève description du format attendu.

Cet attribut apparemment simple contient une quantité surprenante de problèmes qui l'empêchent de tenir ses promesses. J'espère pouvoir vous convaincre d'arrêter de l'utiliser.

Techniquement correct

Les intrants sont les portes par lesquelles presque tout le commerce électronique doit passer. Quels que soient vos sentiments sur la place de l'empathie dans le design, les intrants inutilisables laissent de l'argent sur la table.

La présence d'un attribut d'espace réservé ne sera pas signalée par un logiciel de vérification d'accessibilité automatisé. Cependant, cela ne signifie pas nécessairement qu'il est utilisable. En fin de compte, l'accessibilité concerne les personnes, pas les normes, il est donc important de penser à votre interface en termes autres que de parcourir une liste de contrôle.

Appelez cela assainissement, conception inclusive, accès universel, peu importe. L'esprit de toutes ces philosophies se résume à faire des choses que les gens – tous les gens – peuvent utiliser. Vu à travers cet objectif, l'espace réservé ne tient tout simplement pas le coup.

Les problèmes

Traduction

Les navigateurs dotés de fonctionnalités de traduction automatique telles que Chrome ignorent les attributs lorsqu'une demande de traduction de la page actuelle est lancée. Pour de nombreux attributs, il s'agit d'un comportement souhaité, car une valeur mise à jour peut rompre la logique ou la structure de la page sous-jacente.

L'un des attributs ignorés par les navigateurs est l'espace réservé . Pour cette raison, le contenu de l'espace réservé ne sera pas traduit et restera dans la langue d'origine.

Rencontrer Ateliers en ligne fracassants sur front-end & UX, avec des plats à emporter, des sessions en direct, enregistrements vidéo et un Q&A amical. Sur les systèmes de conception, CSS/JS et UX. Avec Brad Frost, Stephanie Eckles, Carie Fisher et tant d'autres.

Si une personne demande qu'une page soit traduite, on s'attend à ce que tout le contenu de la page visible soit mis à jour. Les espaces réservés sont fréquemment utilisés pour fournir des instructions de formatage d'entrée importantes ou sont utilisés à la place d'un élément d'étiquette plus approprié (plus de détails dans un instant). Si ce contenu n'est pas mis à jour avec le reste de la page traduite, il est fort possible qu'une personne non familière avec la langue ne soit pas en mesure de comprendre et d'utiliser correctement la saisie.

Cela devrait être une raison suffisante pour ne pas utiliser l'attribut.

Pendant que nous parlons de traduction, il convient également de souligner que l'emplacement n'est pas la même chose que la préférence linguistique. De nombreuses personnes configurent leurs appareils pour qu'ils utilisent une langue qui n'est pas la langue officielle du pays indiquée par l'adresse IP de leur navigateur (sans parler des VPN), et nous devons respecter cela. Assurez-vous de conserver une description sémantique de votre contenu : vos voisins vous remercieront !

Interopérabilité

L'interopérabilité est la pratique consistant à faire en sorte que différents systèmes échangent et comprennent des informations. C'est un élément fondamental d'Internet et des technologies d'assistance.

La description sémantique de votre contenu le rend interopérable. Une entrée interopérable est créée en lui associant par programme un élément label. Les étiquettes décrivent l'objectif d'un champ de saisie, fournissant à la personne qui remplit le formulaire une invite sur laquelle elle peut agir. Une façon d'associer une étiquette à une entrée consiste à utiliser l'attribut for avec une valeur qui correspond à l'id de l'entrée.

Sans cet appariement for / id, la technologie d'assistance sera incapable de déterminer à quoi sert l'entrée. L'association programmatique fournit un crochet API que les logiciels tels que les lecteurs d'écran ou la reconnaissance vocale peuvent utiliser. Sans cela, les personnes qui s'appuient sur ce logiciel spécialisé ne seront pas en mesure de lire ou d'utiliser les entrées.

Comment le balisage sémantique est utilisé à la fois pour la présentation visuelle et le contenu accessible. (Grand aperçu)

La raison pour laquelle je mentionne cela est que l'espace réservé est souvent utilisé à la place d'un élément d'étiquette. Bien que je sois personnellement déconcerté par la pratique, elle semble avoir gagné du terrain dans la communauté du design. Ma meilleure estimation pour sa popularité est l'effet de grille géométriquement précis qu'il crée lorsqu'il est placé à côté d'autres champs de saisie sans étiquette agit comme une herbe à chat de concepteur.

Un exemple de fétichisation de la grille d'entrée d'un certain site Web bleu tristement célèbre. (Grand aperçu)

L'effet d'étiquette flottante, un proche cousin de ce phénomène, utilise souvent aussi l'attribut placeholder à la place d'une étiquette .

Une chose intéressante à souligner est que si une étiquette est associée par programme à une entrée, cliquer ou appuyer sur le texte de l'étiquette mettra l'accent sur l'entrée. Cette petite astuce fournit une zone supplémentaire pour interagir avec l'entrée, ce qui peut être bénéfique pour les personnes ayant des problèmes de contrôle moteur. Les espaces réservés agissant comme des étiquettes, ainsi que les étiquettes flottantes, ne peuvent pas le faire.

Cognition

Le recensement des États-Unis de 2016 répertorie près de 15 millions de personnes qui déclarent avoir des difficultés cognitives et cela ne compte que les personnes qui choisissent de s'autodéclarer. En extrapolant à partir de cela, nous pouvons supposer que les problèmes d'accessibilité cognitive affectent une partie importante de la population mondiale.

L'auto-déclaration vaut la peine d'être signalée, dans la mesure où une personne peut ne pas savoir ou se sentir à l'aise de partager qu'elle a une condition d'accessibilité cognitive. Malheureusement, il y a encore beaucoup de stigmates liés à la divulgation de ce type d'informations, car cela affecte souvent des choses comme les perspectives d'emploi et de logement.

La cognition peut être inhibée en fonction de la situation, ce qui signifie que cela peut très bien vous arriver. Il peut être affecté par des choses comme le multitâche, la privation de sommeil, le stress, la toxicomanie et la dépression. Je suis peut-être un peu blasé ici, mais cela ressemble beaucoup aux conditions que vous trouverez dans la plupart des emplois de bureau.

Rappeler

Le parapluie des problèmes cognitifs couvre des conditions telles que la perte de mémoire à court terme, les lésions cérébrales traumatiques et le trouble d'hyperactivité avec déficit de l'attention. Ils peuvent tous affecter la capacité d'une personne à se souvenir d'informations.

Lorsqu'une personne saisit des informations dans une entrée, son contenu fictif disparaît. Le seul moyen de le restaurer est de supprimer les informations saisies. Cela crée une expérience où le langage de guidage est supprimé dès que la personne qui tente de remplir l'entrée interagit avec lui. Pas génial!

Voulaient-ils MM/JJ/AA ou MM/JJ/AAAA ? (Grand aperçu)

Lorsque votre capacité à vous rappeler des informations est inhibée, il devient ennuyeux de suivre ces règles de disparition. Pour les entrées avec des exigences compliquées à satisfaire, par exemple la création d'un nouveau mot de passe, cela transcende la gêne et devient une barrière difficile à surmonter.

Attendez, quelle est la longueur minimale ? Combien de numéros veulent-ils encore ? (Grand aperçu)

Alors que les personnes plus sophistiquées sur le plan technologique peuvent avoir appris des astuces astucieuses telles que couper les informations saisies, réviser le contenu de l'espace réservé pour rafraîchir leur mémoire, puis les recoller pour le modifier, les personnes qui sont moins compétentes en technologie peuvent ne pas comprendre pourquoi le contenu de l'aide est disparaître ou comment le faire revenir.

Alphabétisation numérique

Étant donné que de plus en plus de la population mondiale se connecte, il nous incombe, en tant que concepteurs et développeurs responsables, de faire en sorte que ces personnes se sentent les bienvenues. Votre petit coin d'Internet (ou d'intranet!)

Pour les lecteurs basés aux États-Unis, un doux rappel que nouveau peut ne pas signifier étranger. L'accès est à la hausse pour les Américains plus âgés. Alors que la littératie numérique deviendra plus courante parmi les populations âgées à mesure que le temps passe, les problèmes d'accessibilité le seront également.

Pour quelqu'un qui ne l'a jamais rencontré auparavant, le texte de l'espace réservé peut ressembler à du contenu saisi, ce qui l'oblige à sauter l'entrée. S'il s'agit d'un champ obligatoire, la soumission du formulaire créera une expérience frustrante où ils peuvent ne pas comprendre quelle est l'erreur, ou comment la corriger. S'il ne s'agit pas d'un champ obligatoire, votre formulaire court toujours le risque inutile de ne pas collecter d'informations secondaires potentiellement précieuses.

Utilitaire

Le contenu d'aide de l'espace réservé est limité à une simple chaîne de texte statique, et cela peut ne pas toujours être suffisant pour communiquer le message. Il peut être nécessaire de lui appliquer un style supplémentaire ou de contenir un balisage descriptif, des attributs, des images et une iconographie.

Ceci est particulièrement pratique dans les systèmes de conception matures. Les options de style supplémentaires créées en déplaçant la chaîne de texte hors de l'élément d'entrée signifient qu'il peut tirer parti des jetons de conception du système et de tous les avantages qui en découlent.

La longueur du texte de l'espace réservé est également limitée à la largeur de l'entrée dans laquelle il est contenu. Dans notre monde réactif et axé sur les mobiles, il y a de fortes chances que des informations importantes soient tronquées :

Je suppose que je ne saurai jamais où est ce code. (Grand aperçu)

Vision

Contraste de couleur

Les styles par défaut des principaux navigateurs pour le contenu des espaces réservés utilisent une couleur gris clair pour communiquer visuellement qu'il s'agit d'une suggestion. De nombreuses conceptions d'entrée personnalisées suivent cette convention en prenant la couleur du contenu d'entrée et en l'éclaircissant.

Malheureusement, cette technique risque de se heurter à des problèmes de contraste des couleurs. Color contrast is a ratio determined by comparing the luminosity of the text and background color values in this case, it’s the color of the placeholder text over the input’s background.

If the placeholder content has a contrast ratio that is too low to be perceived, it means that information critical to filling out a form successfully may not be able to be seen by people experiencing low vision conditions. For most common input font sizing, the ratio is 4.5:1.

Like all accessibility concerns, low vision conditions can be permanent or temporary, biological or environmental, or a combination. Biological disabilities include conditions like farsightedness, color blindness, dilated pupils, and cataracts. Environmental conditions include circumstances such as the glare of the mid-day sun, a battery-saving low brightness setting, privacy screens, grease and makeup left on your screen by your last phone call, and so on.

This ratio isn’t some personal aesthetic preference that I’m trying to force onto others arbitrarily. It’s part of a set of painstakingly-developed rules that help ensure that the largest possible swath of people can operate digital technology, regardless of their ability or circumstance. Consciously ignoring these rules is to be complicit in practicing exclusion.

And here’s the rub: In trying to make placeholder attributes inclusive, the updated higher contrast placeholder content color may become dark enough to be interpreted as entered input, even by more digitally literate people. This swings the issue back into cognitive concerns land.

The placeholder text color on GoFundMe’s password reset page makes it appear like entered input. Additionally, the checkmark icon on the Request New Password button makes it seem like the request has already been processed. (Large preview)

High Contrast Mode

The Windows operating system contains a feature called High Contrast Mode. When activated, it assigns new colors to interface elements from a special high contrast palette that uses a limited number of color options. Here’s an example of what it may look like:

Windows 10 set to use the High Contrast Mode 1 theme running Internet Explorer 11. (Large preview)

In High Contrast Mode, placeholder content is assigned one of those high contrast colors, making it look like pre-filled information. As discussed earlier, this could prevent people from understanding that the input may need information entered into it.

You may be wondering if it’s possible to update the styling in High Contrast Mode to make a placeholder more understandable. While it is possible to target High Contrast Mode in a media query, I implore you not to do so. Front-end developer Hugo Giraudel said it best:

The people that rely on High Contrast Mode use it because of how predictable it is. Unduly altering how it presents content may interfere with the only way they can reliably use a computer. In the case of lightening the color of placeholder content to make it appear like its non-High Contrast Mode treatment, you run a very real risk of making it impossible for them to perceive.

A Solution

To recap, the placeholder attribute:

  • Can’t be automatically translated
  • Is oftentimes used in place of a label, locking out assistive technology
  • Can hide important information when content is entered
  • Can be too light-colored to be legible
  • Has limited styling options
  • May look like pre-filled information and be skipped over.

Eesh. That’s not great. So what can we do about it?

Concevoir

Move the placeholder content above the input, but below the label:

  • Communicates a visual and structural hierarchy:
    • What this input is for,
    • Things you need to know to use the input successfully, and
    • the input itself.

    Additionally, the help content will be kept in view when the input is activated on a device with a software keyboard. If placed below the input, the content may be obscured when an on-screen keyboard appears at the bottom of the device viewport:

    Content hidden by an on-screen keyboard. 3rd party keyboards with larger heights may have a greater risk of blocking important content. (Large preview)

    Développement

    Here’s how to translate our designed example to code:

    This isn’t too much of a departure from a traditional accessible for / id attribute pairing: The label element is programmatically associated with the input via its id declaration of “employee-id”. The p element placed between the label and input elements acts as a replacement for a placeholder attribute.

    “So,” you may be wondering. “Why don’t we just put all that placeholder replacement content in the label element? It seems like it’d be a lot less work!” The answer is that developer convenience shouldn’t take priority over user experience.

    By using aria-describedby to programmatically associate the input with the p element, we are creating a priority of information for screen readers that has parity with what a person browsing without a screen reader would experience. aria-describedby ensures that the p content will be described last, after the label ’s content and the kind of input it is associated with.

    In other words, it’s what content the input is asking for, what type of input it is, then additional help if you need it &mdash exactly what someone would experience if they look at form input.

    User experience encompasses all users, including those who navigate with the aid of screen readers. The help content is self-contained and easy to navigate to and from, should the person using a screen reader need to re-reference it. As it is a self-contained node, it can also be silenced (typically with the Control key) without risking muting other important information.

    Including the help content as part of the label makes it unnecessarily verbose. label s should be meaningful, but also concise. Adding too much information to a label may have the opposite of the desired effect, making it too long to recall or simply too frustrating to listen to all the way through. In fact, the Web Content Accessibility Guidelines has rules that specifically address this: Success Criteria 2.4.6 and 3.3.2.

    Exemple

    Here is the solution implemented in live code:

    And here’s a video demonstrating how popular screen readers handle it:

    A Better Solution

    “The less an interface requires of its users, the more accessible it is.”

    A final thought: Do you even need that additional placeholder information?

    Good front-end solutions take advantage of special input attributes and accommodating validation practices to prevent offloading the extra work onto the person who simply just wants to use your site or app with as little complication as possible.

    Good copywriting creates labels that clearly and succinctly describe the input’s purpose. Do a good enough job here and the label cuts through the ambiguity, especially if you test it beforehand.

    Good user experience is all about creating intelligent flows that preempt people’s needs, wants, and desires by capitalizing on existing information to remove as many unnecessary questions as possible.

    Accommodating the people who use your website or web app means taking a critical eye at what you take for granted when you browse the Internet. By not making assumptions about other people’s circumstances &mdash including the technology they use &mdash you can do your part to help prevent exclusion.

    Take some time to review your design and code and see what doesn’t stand up to scrutiny &mdash checking to see if you use the placeholder attribute might be a good place to start.

    Standing on the shoulders of giants. Thanks to Roger Johansson, Adam Silver, Scott O’Hara, and Katie Sherwin for their writing on the subject.


    Voir la vidéo: 412 Modification structurelle dune table (Octobre 2021).