ToolValidator-Klasse für "Feld hinzufügen"
In diesem Beispiel wird die "Feld hinzufügen"-Werkzeugvalidierung emuliert. Da "Feld hinzufügen" ein Systemwerkzeug 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
7/10/2012