La validación es todo lo que ocurre antes de hacer clic en el botón Aceptar de una herramienta. Cuando cree sus propias herramientas personalizadas, la validación le permitirá personalizar el modo en que los parámetros responden e interaccionan con los valores y entre ellos. La validación se efectúa con un bloque de código de Python que se usa para controlar el comportamiento de la herramienta.
Para obtener más información sobre la validación, consulte Comprender la validación en las herramientas de script.
En una caja de herramientas de Python, cada parámetro de la herramienta tiene un objeto de Parameter asociado con propiedades y métodos que resultan útiles en la validación de la herramienta. En una caja de herramientas de Python, los parámetros se definen en el método getParameterInfo de la clase de herramienta. El comportamiento de esos parámetros y cómo interactúan entre ellos y con las entradas son aspectos que se validan según el método updateParameters de la clase de herramienta.
- Actualizar el esquema de una caja de herramientas de Python
- Comportamiento de licencia en una caja de herramientas de Python
Acceder a los parámetros de la herramienta
Los objetos de Parameter forman la base de cómo se definen los parámetros e interactúan en una caja de herramientas de Python. La práctica estándar es crear la lista de parámetros en el método getParameterInfo de la clase de herramienta, según se muestra en el siguiente código.
def getParameterInfo(self):
#Define parameter definitions
# First parameter
param0 = arcpy.Parameter(
displayName="Input Features",
name="in_features",
datatype="GPFeatureLayer",
parameterType="Required",
direction="Input")
return [param0]
Para obtener más información sobre la definición de parámetros en una caja de herramientas de Python, consulte Definición de parámetros en una caja de herramientas Python.
Objeto de parámetro
Métodos
Nombre del método | Descripción de uso |
---|---|
setErrorMessage(message:string) | Marca un error (una X roja) en el parámetro con el mensaje proporcionado. Las herramientas no se ejecutan si alguno de los parámetros tiene un error. |
setWarningMessage(message:string) | Marca una advertencia (un triángulo amarillo) en el parámetro con el mensaje proporcionado. A diferencia de los errores, las herramientas se ejecutan cuando hay mensajes de advertencia. |
setIDMessage(messageType: string, messageID: string, {AddArgument1}, {AddArgument2}) | Le permite configurar un mensaje del sistema. Los argumentos son los mismos que en la función AddIDMessage. |
clearMessage() | Borra todo el texto del mensaje y configura el estado como informativo (sin errores ni advertencias). |
hasError() | Devuelve verdadero si el parámetro contiene un error. |
hasWarning() | Devuelve verdadero si el parámetro contiene una advertencia. |
isInputValueDerived() | Devuelve verdadero si la herramienta se está validando dentro de un modelo y el valor de entrada es la salida de otra herramienta en el modelo. |
Propiedades
Nombre de propiedad | Lectura/escritura | Valores | Descripción |
---|---|---|---|
name | Solo lectura | Cadena | El nombre del parámetro. |
direction | Solo lectura | Cadena de caracteres: "Input", "Output" | Dirección de entrada/salida del parámetro. |
datatype | Solo lectura | Cadena | Para obtener una lista de tipos de datos de parámetros, consulte Definir los tipos de datos de parámetros en una caja de herramientas de Python. |
parameterType | Solo lectura | Cadena de caracteres: "Required", "Optional", "Derived" | El tipo de parámetro. |
parameterDependencies | Lectura/escritura | Lista de Python | Una lista de índices de cada parámetro dependiente. |
value | Lectura/escritura | Objeto de valor | El valor del parámetro. |
defaultEnvironmentName | Solo lectura | Cadena | La configuración del entorno predeterminada. |
enabled | Lectura/escritura | Booleano | Falso si el parámetro no está disponible. |
altered | Solo lectura | Booleano | Verdadero si el usuario modificó el valor. |
hasBeenValidated | Solo lectura | Booleano | Verdadero si la rutina de validación interna verificó el parámetro. |
category | Lectura/escritura | Cadena | La categoría del parámetro. |
schema | Solo lectura | Objeto Schema | El esquema del dataset de salida. |
filter | Solo lectura | Objeto Filter | El filtro que se aplicará a los valores en el parámetro. |
symbology | Lectura/escritura | Cadena | La ruta al archivo de capa (.lyr) que se utiliza para dibujar la salida. |
message | Solo lectura | Cadena | El mensaje que se mostrará al usuario. Vea SetErrorMessage y SetWarningMessage arriba. |
parameterDependencies
Por lo general, configura las dependencias del parámetro para que las utilice el objeto de Schema. Existen dos casos en los que las dependencias ya pueden estar configuradas en el método getParameterInfo de la herramienta.
- Para un parámetro de dataset de salida cuyo tipo es Derivado, la dependencia es el índice del parámetro desde el cual se deriva la salida.
- Para determinados tipos de datos de entrada, la dependencia es el índice del parámetro que contiene la información utilizada por el control, según se muestra en la tabla a continuación.
Tipo de datos de entrada | Tipo de datos dependientes | Descripción |
---|---|---|
Campo o expresión de SQL | Tabla | La tabla que contiene los campos. |
Elemento de INFO o expresión de INFO | Tabla INFO | La tabla INFO que contiene los elementos. |
Clase de entidad de cobertura | Cobertura | La cobertura que contiene las entidades. |
Unidades de área o unidades lineales | GeoDataset | Un dataset geográfico utilizado para determinar las unidades por defecto. |
Sistema de coordenadas | Espacio de trabajo | Un espacio de trabajo utilizado para determinar el sistema de coordenadas predeterminado. |
Configuración de jerarquía de Network Analyst | Dataset de red | El dataset de red que contiene la información de jerarquía. |
Tabla de valores geoestadística | Capa de geoestadística | La capa de análisis que contiene las tablas. |
Por lo general, las dependencias se establecen en el método getParameterInfo:
def getParameterInfo(self):
#Define parameter definitions
# First parameter
param0 = arcpy.Parameter(
displayName="Input Features",
name="in_features",
datatype="GPFeatureLayer",
parameterType="Required",
direction="Input")
# Second parameter
param1 = arcpy.Parameter(
displayName="Sinuosity Field",
name="sinuosity_field",
datatype="Field",
parameterType="Optional",
direction="Input")
param1.value = "sinuosity"
# Third parameter
param2 = arcpy.Parameter(
displayName="Output Features",
name="out_features",
datatype="GPFeatureLayer",
parameterType="Derived",
direction="Output")
param2.parameterDependencies = [param0.name]
param2.schema.clone = True
params = [param0, param1, param2]
return params
value
Este valor es del parámetro que el usuario introdujo o usted configuró de forma programada. Puede configurar el valor en el método getParameterInfo, en cuyo caso sirve como el valor predeterminado inicial del parámetro. También puede configurar el valor en updateParameters como respuesta a una entrada de usuario, como se muestra a continuación.
def updateParameters(self, parameters):
# Set the default distance threshold to 1/100 of the larger of the width
# or height of the extent of the input features. Do not set if there is no
# input dataset yet, or the user has set a specific distance (Altered is true).
#
if parameters[0].value:
if not parameters[6].altered:
extent = arcpy.Describe(parameters[0].value).extent
if extent.width > extent.height:
parameters[6].value = extent.width / 100
else:
parameters[6].value = extent.height / 100
return
La propiedad value de un parámetro devuelve un objeto a menos que no se haya asignado ningún valor al parámetro, en cuyo caso value devuelve None. Para protegerse frente a la posibilidad de que un parámetro esté vacío, utilice una comprobación con if antes de utilizar su valor.
El fragmento de código a continuación evalúa si el valor es igual a la cadena de texto "Get Spatial Weights From File". Esta prueba funciona porque el tipo de datos del parámetro es una cadena de texto.
# If the option to use a weights file is selected, enable the
# parameter for specifying the file, otherwise disable it
if parameters[3].value: # check that parameter has a value
if parameters[3].value == "Get Spatial Weights From File":
parameters[8].enabled = True
else:
parameters[8].enabled = False
Puesto que un objeto Value no admite la manipulación de la cadena de caracteres, utilice la propiedad value del objeto Value cuando necesite manipular o analizar una cadena de caracteres. La muestra de código utiliza el método os.path.dirname para devolver el directorio de un dataset.
if parameters[0].value:
workspace = os.path.dirname(parameters[0].value.value)
altered
altered es true si se cambia el valor de un parámetro, por ejemplo, introduciendo una ruta de salida. Una vez que el parámetro se ha alterado, permanece así hasta que el usuario vacía (borra) el valor, en cuyo caso vuelve a estar no alterado. Al cambiar un valor mediante programación con un código de validación, se cambia el estado alterado. Es decir, si se configura un valor para un parámetro, el estado alterado del parámetro se actualiza.
altered se utiliza para determinar si se puede cambiar el valor de un parámetro. A modo de ejemplo, suponga que una herramienta tiene un parámetro de clase de entidad y un parámetro de palabra clave. Si la clase de entidad contiene puntos o polígonos, las palabras clave son ROJO, VERDE y AZUL, y si contiene líneas, NARANJA, AMARILLO, PÚRPURA y BLANCO.
Suponga que el usuario introduce una clase de entidad de punto. Si el parámetro de palabra clave no está alterado, configura el valor como ROJO, dado que es el valor por defecto.
Si se introduce una clase de entidad de línea, configura el valor predeterminado como NARANJA siempre que el parámetro de palabra clave esté no alterado.
No obstante, si el usuario ha alterado el parámetro de palabra clave (es decir, la palabra clave se configura como VERDE), no debe restablecer la palabra clave; el usuario ha realizado su elección (VERDE) y no conoce la intención; es posible que cambien la clase de entidad para que VERDE sea válido o pueden cambiar la palabra clave (por ejemplo, a PÚRPURA). Puesto que VERDE no es un miembro del conjunto que creó para las líneas, la validación interna indica un error del parámetro. El usuario tiene dos opciones en este punto: cambiar la clase de entidad de entrada o cambiar la palabra clave.
if not parameters[2].altered:
parameters[2].value = "POINT"
hasBeenValidated
hasBeenValidated es falso si el usuario ha modificado un valor de un parámetro desde la última vez que se llamó a updateParameters y a la validación interna. Una vez que se invoca la validación interna, el geoprocesamiento establece automáticamente hasBeenValidated como verdadero para cada parámetro.
hasBeenValidated se utiliza para determinar si el usuario ha cambiado un valor desde la última invocación de updateParameters. Puede utilizar esta información al decidir si hará su verificación propia del parámetro.
def updateParameters(self, parameters):
# Set the default distance threshold to 1/100 of the larger of the width
# or height of the extent of the input features. Do not set if there is no
# input dataset yet, or the user has set a specific distance (Altered is true).
#
if parameters[0].value:
if not parameters[6].altered:
extent = arcpy.Describe(parameters[0].value).extent
if extent.width > extent.height:
parameters[6].value = extent.width / 100
else:
parameters[6].value = extent.height / 100
return