Cet exemple émule la validation de l'outil Ajouter un champ. L'outil Ajouter un champ étant un outil intégré, il ne possède pas de classe ToolValidator. S'il en possédait une, elle aurait l'aspect ci-dessous.
Pour information, voici les paramètres de l'outil Ajouter un champ et leurs types de données :
- 0 – Table en entrée : Type de données composite, inclut toutes les tables
- 1 – Nom du champ : Chaîne
- 2 – Type de champ : Chaîne (LONG, SHORT, DOUBLE, etc.)
- 3 – Précision du champ : Long
- 4 – Echelle de champ : Long
- 5 – Longueur du champ : Long
- 6 – Alias du champ : Chaîne
- 7 – Champ acceptant les valeurs nulles : Booléen
- 8 – Champs requis : Booléen
- 9 – Domaine du champ : Chaîne
- 0 – Table en sortie : sortie dérivée obtenue à partir du paramètre 0
Cet exemple émule la validation de l'outil Ajouter un champ.
class ToolValidator:
def __init__(self):
import arcpy
self.params = arcpy.GetParameterInfo()
def initializeParameters(self):
# The derived output is a clone (copy) of the input
#
self.params[10].parameterDependencies = [0]
self.params[10].schema.clone = True
# Set up the field type list
#
self.params[2].filter.list = ["TEXT", "FLOAT", "DOUBLE",
"SHORT", "LONG", "DATE",
"BLOB", "RASTER"]
# The default field type is LONG
#
self.params[2].value = "LONG"
# Field scale & Length are disabled for LONG types
#
self.params[4].enabled = False
self.params[5].enabled = False
# Set the Boolean filters for IsNullable and IsRequired and
# their default values
#
self.params[7].filter.list = ["NULLABLE", "NON_NULLABLE"]
self.params[7].value = "NULLABLE"
self.params[8].filter.list = ["REQUIRED", "NON_REQUIRED"]
self.params[8].value = "NON_REQUIRED"
return
def updateParameters(self):
# Set the default field type value unless the user altered it
#
if not self.params[2].altered:
self.params[2].value = "LONG"
# Enable/Disable parameters based on field type
#
fieldType = self.params[2].value.upper()
if fieldType in ["TEXT", "BLOB"]:
self.params[3].enabled = False
self.params[4].enabled = False
self.params[5].enabled = True
elif fieldType in ["FLOAT", "DOUBLE"]:
self.params[3].enabled = True
self.params[4].enabled = True
self.params[5].enabled = False
elif fieldType in ["SHORT", "LONG"]:
self.params[3].enabled = True
self.params[4].enabled = False
self.params[5].enabled = False
elif fieldType in ["DATE", "RASTER"]:
self.params[3].enabled = False
self.params[4].enabled = False
self.params[5].enabled = False
else:
# Unknown field type. Internal validation will catch this
# and show an error. We might as well return here and let
# internal validation do its work.
#
return
# Update the output schema with the new field. Don't do anything
# unless we have an input value and a field name
#
if self.params[0].value and self.params[1].value:
newField = arcpy.Field()
newField.name = self.params[1].value
newField.type = self.params[2].value
# Set up the field properties based on type of field
#
if self.params[3].value and self.params[3].enabled:
newField.precision = self.params[3].value
if self.params[4].value and self.params[4].enabled:
newField.scale = self.params[4].value
if self.params[5].value and self.params[5].enabled:
newField.length = self.params[5].value
if self.params[6].value:
newField.aliasName = self.params[6].value
newField.isNullable = self.params[7].value
# Note: IsRequired is not a property on a field object -- it's
# handled internally by the Add Field system tool.
#
if self.params[9].value:
newField.domain = self.params[9].value
# Set the additional field on the output schema
#
self.params[10].schema.additionalFields = [newField]
def updateMessages(self):
return