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