Attribuer un domaine à un champ (Gestion des données)
Récapitulatif
Définit le domaine d'un champ particulier et éventuellement d'un sous-type. Si aucun sous-type n'est précisé, le domaine est attribué uniquement au champ spécifié.
Utilisation
-
La gestion de domaine comprend les étapes suivantes :
- Créer le domaine à l'aide de l'outil Créer un domaine.
- Ajouter des valeurs ou définir la plage de valeurs pour le domaine à l'aide de l'outil Ajouter une valeur codée à un domaine ou de l'outil Définir les valeurs d'un domaine par plage.
- Associer le domaine à une classe d'entités à l'aide de cet outil.
-
Lorsqu'un domaine attributaire est associé à une table ou une classe d'entités, une règle de validation attributaire est créée dans la base de données. Cette règle de validation attributaire décrit et impose les valeurs valides d'un type de champ.
-
Un domaine attributaire peut être associé à plusieurs champs dans la même table, classe d'entités ou dans le même sous-type, ainsi que dans plusieurs tables et classes d'entités.
-
Le paramètre Table en entrée accepte des couches d'entités ou des vues tabulaires.
-
Les domaines d'espace de travail peuvent également être gérés dans ArcCatalog ou la fenêtre Catalogue. Les domaines peuvent être créés et modifiés dans l'onglet Domaines de la boîte de dialogue Propriétés de la base de données.
-
Le bouton Ajouter une valeur du paramètre Sous-type est utilisé uniquement dans ModelBuilder. Dans ModelBuilder, si l'outil précédent n'a pas été exécuté ou si ses données dérivées n'existent pas, il se peut qu'aucune valeur ne soit renseignée dans le paramètre Sous-type. Le bouton Ajouter une valeur vous permet d'ajouter les valeurs prévues pour la saisie dans la boîte de dialogue Attribuer un domaine à un champ et poursuivre la création du modèle.
Syntaxe
Paramètre | Explication | Type de données |
in_table |
Nom de la table ou classe d'entités contenant le champ auquel un domaine sera attribué. | Table View |
field_name |
Nom du champ auquel un domaine sera attribué. | Field |
domain_name |
Nom d'un domaine de géodatabase à attribuer au nom du champ. Les domaines disponibles sont chargés automatiquement. | String |
subtype_code [subtype_code,...] (Facultatif) | Code de sous-type à attribuer à un domaine. | String |
Exemple de code
Le script de fenêtre Python suivant illustre l'utilisation de l'outil AssignDomainToField en mode immédiat.
import arcpy
from arcpy import env
env.workspace = "C:/data"
arcpy.AssignDomainToField_management("montgomery.gdb/Landbase/Parcels", "ZONING_S", "ZoningFields", "1: government")
Le script suivant utilise la fonction AssignDomainToField dans le cadre d'un workflow pour créer un domaine attributaire, affecter des valeurs au domaine et affecter le domaine à un champ.
# Name: MakeDomain.py
# Description: Create an attribute domain to constrain pipe material values
# Author: ESRI
#Import system modules
import arcpy
from arcpy import env
try:
# Set the workspace (to avoid having to type in the full path to the data every time)
env.workspace = "C:/data"
# Set local parameters
domName = "Material4"
gdb = "montgomery.gdb"
inFeatures = "Montgomery.gdb/Water/Distribmains"
inField = "Material"
# Process: Create the coded value domain
arcpy.CreateDomain_management("montgomery.gdb", domName, "Valid pipe materials", "TEXT", "CODED")
#Store all the domain values in a dictionary with the domain code as the "key" and the
#domain description as the "value" (domDict[code])
domDict = {"CI":"Cast iron", "DI": "Ductile iron", "PVC": "PVC", \
"ACP": "Asbestos concrete", "COP": "Copper"}
# Process: Add valid material types to the domain
#use a for loop to cycle through all the domain codes in the dictionary
for code in domDict:
arcpy.AddCodedValueToDomain_management(gdb, domName, code, domDict[code])
# Process: Constrain the material value of distribution mains
arcpy.AssignDomainToField_management(inFeatures, inField, domName)
except Exception, e:
# If an error occurred, print line number and error message
import traceback, sys
tb = sys.exc_info()[2]
print "Line %i" % tb.tb_lineno
print e.message