ToolValidator-Klasse für "Feld hinzufügen"
In diesem Beispiel wird die Feld hinzufügen-Werkzeugvalidierung emuliert. Da Feld hinzufügen ein integriertes Werkzeug ist, verfügt es nicht über eine ToolValidator-Klasse. Wäre dies der Fall, würde sie jedoch in etwa so aussehen.
Dies die Parameter für Feld hinzufügen und die Datentypen:
- 0 - Eingabe-Tabelle: Zusammengesetzter Datentyp schließt alle Tabellen ein
- 1 - Feldname: Zeichenfolge
- 2 - Feldtyp: Zeichenfolge (LONG, SHORT, DOUBLE usw.)
- 3 - Feldgenauigkeit: Long
- 4 - Felddezimalstellen: Long
- 5 - Feldlänge: Long
- 6 - Feld-Alias: Zeichenfolge
- 7 - Feld erlaubt NULL-Werte: Boolesch
- 8 - Erforderliches Feld: Boolesch
- 9 - Felddomäne: Zeichenfolge
- 0 - Ausgabe-Tabelle: Abgeleitete Ausgabe, aus Parameter 0 erhalten
In diesem Beispiel wird die "Feld hinzufügen"-Werkzeugvalidierung emuliert
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
5/10/2014