Este ejemplo simula la validación de la herramienta Agregar campo. Dado que Agregar campo es una herramienta incorporada, no tiene una clase ToolValidator. Pero si la tuviera, sería algo parecido a esto.
A modo de revisión, a continuación presentamos los parámetros para Agregar campo y sus tipos de datos:
- 0 - Tabla de entrada: tipo de datos compuesto, incluye todas las tablas
- 1 - Nombre del campo: Cadena de caracteres
- 2 - Tipo del campo: cadena de texto (LONG, SHORT, DOUBLE y así sucesivamente)
- 3 - Precisión del campo: largo
- 4 - Escala del campo: largo
- 5 - Longitud del campo: largo
- 6 - Alias del campo: Cadena de caracteres
- 7 - Permitir campos nulos: Booleano
- 8 - Campo necesario en la tabla: Booleano
- 9 - Dominio del campo: Cadena de caracteres
- 0 - Tabla de salida: salida derivada, obtenida del parámetro 0
Este ejemplo simula la validación de la herramienta Agregar campo
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