Programmieren einer ToolValidator-Klasse

Eine Übersicht über die ToolValidator-Klasse und die Verwendung von Parametermethoden finden Sie unter Anpassen des Verhaltens von Skriptwerkzeugen.

Parameterobjekt

Zugreifen auf Werkzeugparameter

Jeder Werkzeugparameter verfügt über ein zugehöriges Parameterobjekt mit Eigenschaften und Methoden, die für die Werkzeugvalidierung nützlich sind. Parameter sind in einer Python-Liste enthalten. Normalerweise wird die Parameterliste, wie im folgenden Code zu sehen, in der Methode __init__ der ToolValidator-Klasse erstellt.

def __init__(self):
  import arcpy 
  self.params = arcpy.GetParameterInfo()

Sie können auf die Parameter auch wie nachfolgend dargestellt in Ihrem Skript (anstatt in der ToolValidator-Klasse) zugreifen. Der einzige Grund, über ein Skript auf die Parameterliste zuzugreifen, ist, wenn Sie die Eigenschaft symbology festlegen möchten.

  import arcpy
  params = arcpy.GetParameterInfo()

Weitere Informationen zum Festlegen der Symbologie in Skripten

Reihenfolge der Parameter

Die Parameter eines Werkzeugs und ihre Reihenfolge werden, wie unten dargestellt, auf der Registerkarte Parameters im Eigenschaftendialogfeld des Werkzeugs definiert.

Parameter und ihre Reihenfolge
HinweisHinweis:

Die Parameterliste beginnt mit dem Wert 0, das heißt, der erste Parameter befindet sich an Position null in der Liste. Für den Zugriff auf den dritten Parameter würden Sie also p3 = self.params[2] eingeben.

Methoden

Methodenname

Verwendung

setErrorMessage(message:string)

Kennzeichnet den Parameter als fehlerhaft (rotes X) und gibt die entsprechende Meldung aus. Werkzeuge werden nicht ausgeführt, wenn ein Parameter einen Fehler aufweist.

setWarningMessage(message:string)

Gibt an, dass für den Parameter eine Warnung vorliegt (gelbes Dreieck), und gibt die entsprechende Meldung aus. Anders als bei Fehlern werden Werkzeuge bei Warnmeldungen ausgeführt.

setIDMessage(messageType: string, messageID: string, {AddArgument1}, {AddArgument2})

Ermöglicht Ihnen das Festlegen einer Systemmeldung. Die Argumente entsprechen denen der AddIDMessage-Funktion.

clearMessage()

Löscht alle Meldungstexte und setzt den Status auf "Information" (kein Fehler und keine Warnung).

hasError()

Gibt "true" zurück, wenn der Parameter einen Fehler enthält.

hasWarning()

Gibt "true" zurück, wenn für den Parameter eine Warnung vorliegt.

isInputValueDerived()

Gibt "true" zurück, wenn das Werkzeug in einem Modell überprüft wird und der Eingabewert der Ausgabe eines anderen Werkzeugs im Modell entspricht.

Parameterobjektmethoden

"Eigenschaften"

Eigenschaftenname

Lesen/Schreiben

Werte

Beschreibung

name

Nur Lesen

Zeichenfolge

Name des Parameters, wie auf der Registerkarte Parameter in den Werkzeugeigenschaften definiert

direction

Nur Lesen

Zeichenfolge: "Input", "Output"

Eingabe-/Ausgaberichtung des Parameters, wie auf der Registerkarte Parameter in den Werkzeugeigenschaften definiert

datatype

Nur Lesen

Zeichenfolge

Datentyp, wie auf der Registerkarte Parameter in den Werkzeugeigenschaften definiert

parameterType

Nur Lesen

Zeichenfolge: "Required", "Optional", "Derived"

Typ, wie auf der Registerkarte Parameter in den Werkzeugeigenschaften definiert

parameterDependencies

Lesen/Schreiben

Python-Liste

Eine Liste der Indexwerte für jeden abhängigen Parameter

value

Lesen/Schreiben

Wertobjekt

Der Wert des Parameters

defaultEnvironmentName

Nur Lesen

Zeichenfolge

Standardeinstellung für die Umgebung, wie auf der Registerkarte Parameter in den Werkzeugeigenschaften definiert

enabled

Lesen/Schreiben

Boolesch

"False", wenn der Parameter nicht verfügbar (ausgegraut) ist.

altered

Nur Lesen

Boolesch

"True", wenn der Wert geändert wurde.

hasBeenValidated

Nur Lesen

Boolesch

"True", wenn der Parameter von der internen Prüfroutine geprüft wurde.

category

Lesen/Schreiben

Zeichenfolge

Die Kategorie des Parameters

schema

Nur Lesen

Geoverarbeitungs-Schema-Objekt

Das Schema des Ausgabe-Datasets

filter

Nur Lesen

Geoverarbeitungs-Filterobjekt

Der auf die Werte im Parameter angewendete Filter

symbology

Lesen/Schreiben

Zeichenfolge

Der Pfadname zur Layer-Datei (.lyr), die zum Darstellen der Ausgabe verwendet wird

message

Nur Lesen

Zeichenfolge

Die angezeigte Meldung. Siehe oben: SetErrorMessage und SetWarningMessage

Parameterobjekteigenschaften

Im Folgenden sind einige Codebeispiele aufgeführt. Weitere Codebeispiele finden Sie unter Anpassen des Verhaltens von Skriptwerkzeugen.

ToolValidator-Eigenschaften und Skriptwerkzeugeigenschaften

Der Standardwert eines Parameters sowie Filter, Symbologie und Abhängigkeiten können sowohl auf der Registerkarte Parameter im Eigenschaftendialogfeld des Skriptwerkzeugs oder in der ToolValidator-Klasse festgelegt werden.

Die in der ToolValidator-Klasse festgelegten Eigenschaften haben stets Vorrang vor den im Eigenschaftendialogfeld des Skriptwerkzeugs festgelegten Eigenschaften. Wenn Sie beispielsweise im Eigenschaftendialogfeld des Skriptwerkzeugs als Standardwert eines Parameters "BLAU" festlegen, in initializeParameters() jedoch "ROT" als Standardwert definieren, lautet der Standardwert "ROT". Nachdem initializeParameters() aufgerufen wurde, wird im Eigenschaftendialogfeld des Skriptwerkzeugs der Standardwert "ROT" angezeigt. Falls also bei Ihren Benutzern oder Ihnen selbst der Fall auftritt, dass Änderungen, die Sie an einer dieser vier Parametereigenschaften im Eigenschaftendialogfeld des Skriptes vorgenommen haben, nicht gespeichert werden, so liegt dies vermutlich daran, dass die Eigenschaft in der ToolValidator-Klasse außer Kraft gesetzt wird.

parameterDependencies

Parameterabhängigkeiten werden normalerweise für die Verwendung durch das Schema-Objekt definiert. Es gibt zwei Fälle, in denen die Abhängigkeiten unter Umständen bereits auf der Registerkarte Parameters im Eigenschaftendialogfeld des Werkzeugs festgelegt sind.

  • Bei einem Ausgabe-Dataset-Parameter mit dem Typ "Derived" ist die Abhängigkeit der Indexwert des Parameters, von dem die Ausgabe abgeleitet wird.
  • Bei bestimmten Eingabedatentypen ist die Abhängigkeit der Indexwert des Parameters, der die vom Steuerelement verwendeten Informationen enthält (siehe folgende Tabelle).

Eingabedatentyp

Abhängiger Datentyp

Beschreibung

Feld oder SQL-Ausdruck

Tabelle

Die Tabelle mit den Feldern

INFO-Feld oder INFO-Ausdruck

INFO-Tabelle

Die INFO-Tabelle mit den Feldern

Coverage-Feature-Class

Coverage

Das Coverage mit den Features

Flächeneinheiten oder lineare Einheiten

GeoDataset

Geographisches Dataset, das zum Ermitteln der Standardeinheiten verwendet wird

Koordinatensystem

Workspace

Workspace, der zum Ermitteln des Standardkoordinatensystems verwendet wird

Hierarchie-Einstellungen für Network Analyst

Netzwerk-Dataset

Netzwerk-Dataset mit den Informationen zur Hierarchie

Geostatistische Wertetabelle

Geostatistischer Layer

Der Analyse-Layer mit den Tabellen

"Abgerufen von"-Datentypen

Abhängigkeiten werden normalerweise in der Methode initializeParameters() festgelegt:

def initializeParameters(self):
  # Set the dependencies for the output and its schema properties
  #
  self.params[2].parameterDependencies = [0, 1]

value

Dies ist der vom Benutzer eingegebene oder von Ihnen durch Programmierung festgelegte Wert des Parameters. Sie können den Wert in initializeParameters() festlegen. In diesem Fall wird der Wert als anfänglicher Standardwert für den Parameter verwendet. Sie können auch Werte in updateParameters() festlegen, als Reaktion auf Benutzereingaben (Beispiel anzeigen).

Legen Sie keine Parameterwerte in updateMessages() fest, da diese Werte nicht von der internen Prüfroutine geprüft werden.

Ein Wert ist ein Objekt mit einer Zeichenfolgendarstellung. Mit dem folgenden Codeausschnitt wird überprüft, ob der Wert der Zeichenfolge "Get Spatial Weights From File" entspricht. Die Überprüfung funktioniert, weil es sich beim Datentyp des Parameters um eine Zeichenfolge handelt.

  # If the option to use a weights file is selected, enable the 
  #   parameter for specifying the file, otherwise disable it
  #
  if self.params[3].value == "Get Spatial Weights From File":
      self.params[8].enabled = True
  else:
      self.params[8].enabled = False

Die Überprüfung im obigen Code funktioniert nicht, wenn es sich beim Datentyp des Parameters um eine Feature-Class oder um einen Wert, der für ein Dataset steht, handelt. Werte, die für Daten auf einem Datenträger stehen wie Feature-Classes und Raster, müssen zuerst in eine Zeichenfolge konvertiert werden, bevor sie für Zeichenfolgenvorgänge verwendet werden können. Mit der integrierten Python-Funktion str werden Wertobjekte (value) folgendermaßen in Zeichenfolgen konvertiert:

  if str(self.params[0].value) == "E:/data/example.gdb/roads":

Die Funktion str muss nur bei Werten mit Datentypen, die für Datasets stehen, verwendet werden. Bei diesen Werten gibt die str-Funktion den Katalogpfad zum Dataset zurück. Bei anderen Datentypen wie "long" oder linearen Einheiten muss diese Funktion nicht verwendet werden, da diese Datentypen keine Datasets repräsentieren und automatisch in Zeichenfolgen umgewandelt werden.

VorsichtVorsicht:

Geben Sie beim Arbeiten mit der Geoverarbeitungsmethode Describe() in ToolValidator unter keinen Umständen die Zeichenfolgendarstellung des jeweiligen Wertes.

Falsch (Verwendung der str-Funktion):

  desc = arcpy.Describe(str(self.params[0].value))

Richtig: (str nicht verwendet)

  desc = arcpy.Describe(self.params[0].value)

Verwenden Sie nicht die Zeichenfolgendarstellung für Datasets (die den Katalogpfad zum Dataset liefert), da das Dataset möglicherweise nicht vorhanden ist. Es könnte sich um eine von einem Modell abgeleitete Variable handeln, und das Modell muss ausgeführt werden, bevor das Dataset auf dem Datenträger vorhanden ist. Wenn Sie die Zeichenfolgendarstellung für das Dataset verwenden, schlägt die Describe-Methode u. U. fehl, da das Dataset möglicherweise noch nicht auf dem Datenträger vorhanden ist.

VorsichtVorsicht:

Verwenden Sie in ToolValidator keine Geoverarbeitungsobjektmethoden, für die ein Katalogpfad erforderlich ist, etwa ListFields. Eventuell ist das Dataset bei der Validierung des Werkzeugs in ModelBuilder nicht vorhanden, was zu einem Fehler in der Methode führt. (Bei ListFields können Sie stattdessen die fields-Eigenschaft des Describe-Objekts verwenden.)

Wenn Sie Zeichenfolgen auf Äquivalenz überprüfen, sollten Sie möglichst Vergleiche verwenden, bei denen die Groß-/Kleinschreibung ignoriert wird. Im folgenden Beispiel wird der Shape-Typ einer Feature-Class mit der Python-Funktion lower in Kleinbuchstaben konvertiert, und die kleingeschriebenen Zeichenfolgen werden miteinander verglichen. (Alternativ können Sie mit der Funktion upper großgeschriebene Zeichenfolgen vergleichen.)

  fc = self.params[0].value
  shapetype = arcpy.Describe(fc).shapeType.lower()
    if shapetype == "point" or shapetype == "multipoint":

altered

altered ist "true", wenn der Wert eines Parameters geändert wurde, zum Beispiel durch Eingabe eines Ausgabepfades. Nachdem der Parameter geändert wurde, bleibt er geändert, bis der Benutzer den Wert leert (ausblendet). Dann kehrt er zu seinem nicht geänderten Zustand zurück. Eine programmatische Änderung eines Wertes durch Validierungscode hat keine Auswirkung auf den geänderten Zustand. Wenn Sie also einen Wert für einen Parameter festlegen, bleibt der geänderte Zustand (altered) des Parameters unverändert.

Mit altered können Sie ermitteln, ob der Wert eines Parameters geändert werden kann. Beispiel: Ein Werkzeug verfügt über einen Feature-Class-Parameter und einen Schlüsselwortparameter. Wenn die Feature-Class Punkte oder Polygone enthält, lauten die Schlüsselwörter ROT, GRÜN und BLAU. Bei Linien lauten sie ORANGE, GELB, LILA und WEISS.

Der Benutzer gibt eine Point-Feature-Class ein. Wird der Schlüsselwortparameter nicht geändert, setzen Sie den Wert auf ROT, da dies der Standardwert ist.

Gibt der Benutzer dann eine Line-Feature-Class ein, legen Sie den Standardwert als ORANGE fest, solange der Schlüsselwortparameter nicht geändert wird.

Wenn der Schlüsselwortparameter allerdings vom Benutzer geändert wird (das heißt, das Schlüsselwort wird auf GRÜN festgelegt), sollten Sie das Schlüsselwort nicht zurücksetzen, da der Benutzer eine Wahl getroffen hat (GRÜN) und Sie die zugrunde liegende Absicht nicht kennen. Eventuell ändert der Benutzer die Feature-Class, sodass GRÜN ein gültiger Wert ist, oder er ändert das Schlüsselwort (etwa in LILA). Da GRÜN nicht zur Gruppe der Schlüsselwörter gehört, die Sie für Linien definiert haben, wird der Parameter von der internen Prüfung als fehlerhaft gekennzeichnet. Der Benutzer hat dann zwei Möglichkeiten: Änderung der Eingabe-Feature-Class oder Änderung des Schlüsselwortes

  if not self.params[2].altered:
      self.params[2].value = "POINT"

hasBeenValidated

hasBeenValidated ist "false", wenn der Wert eines Parameters seit dem letzten Aufruf von updateParameters() und der letzten internen Prüfung geändert wurde. Nach dem Aufruf der internen Prüfung wird hasBeenValidated für jeden Parameter von der Geoverarbeitung automatisch auf "true" festgelegt.

Mit hasBeenValidated wird ermittelt, ob ein Wert seit dem letzten Aufruf von updateParameters() geändert wurde. Sie können diese Information bei der Entscheidung heranziehen, ob Sie Ihre eigene Überprüfung des Parameters vornehmen möchten.

# 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 if the input features have already been validated,
#  or the user has set a specific distance (Altered is true).
# 
import string
if self.params[0].value and not self.params[0].hasBeenValidated:
  if not self.params[6].altered: 
    extent = arcpy.Describe(self.params[0].value).extent
    width = extent.width
    height = extent.height
    if width > height:
      self.params[6].value = width / 100
    else:
      self.params[6].value = height / 100

category

Parameter können in verschiedene Kategorien unterteilt werden. So kann die Größe des Werkzeugdialogfeldes möglichst klein gehalten werden. Bei den Network Analyst-Werkzeugen werden Kategorien verwendet, wie unten dargestellt.

Parameterkategorien

Legen Sie die Kategorie in initializeParameters() fest, da sie nur einmal definiert werden kann. In updateParameters() festgelegte Kategorien werden ignoriert. Mit dem folgenden Code werden die Parameter 4 und 5 in die Kategorie "Options" und die Parameter 6 und 7 in die Kategorie "Advanced" eingeordnet.

  def initializeParameters(self):
    self.params[4].category = "Options"
    self.params[5].category = "Options"
    self.params[6].category = "Advanced"
    self.params[7].category = "Advanced"

Kategorien werden immer nach den Parametern ohne Kategorie angezeigt. Ordnen Sie erforderliche Parameter keiner Kategorie zu, da sie sonst möglicherweise im Werkzeugdialogfeld übersehen werden.

symbology

Durch die Symbologieeigenschaft (symbology) wird eine Layer-Datei (.lyr) mit einem Ausgabeparameter verknüpft.

params[2].symbology = "E:/tools/extraction/ToolData/ClassByDist.lyr"

Weitere Informationen zur Ausgabesymbologie

schema-Objekt

Jeder Ausgabeparameter des Typs Feature-Class, Tabelle, Raster oder Workspace verfügt über ein Schema-Objekt. Nur Ausgabe-Feature-Classes, Tabellen, Raster und Workspaces verfügen über ein Schema. Das Schema-Objekt wird von der Geoverarbeitung erstellt. Sie greifen über das Parameterobjekt auf das Schema zu und legen die Regeln für die Beschreibung der Werkzeugausgabe fest. Nachdem Sie die Schema-Regeln festgelegt haben (und nach der Rückkehr aus der ToolValidator-Klasse), überprüft der Geoverarbeitungscode der internen Prüfung die festgelegten Regeln und aktualisiert die Ausgabebeschreibung.

Der Ablauf des Vorgangs ist also wie folgt:

  1. Beim ersten Öffnen des Werkzeugdialogfeldes wird initializeParameters() aufgerufen. Sie legen die feststehenden Regeln (die von der Benutzereingabe unbeeinflusst bleiben) für die Ausgabebeschreibung fest. Zu diesem Zeitpunkt wird keine Ausgabebeschreibung erstellt, da noch keine Werte für die Parameter angegeben wurden (außer Sie haben Standardwerte bereitgestellt).
  2. Sobald ein Benutzer mit dem Werkzeugdialogfeld interagiert, wird updateParameters() aufgerufen.
  3. updateParameters() kann das Schema-Objekt ändern, um dynamischem Verhalten Rechnung zu tragen, das nicht anhand der Parameterabhängigkeiten bestimmt werden kann (etwa das Hinzufügen eines neuen Feldes wie "Feld hinzufügen").
  4. Im Anschluss an updateParameters() werden die internen Prüfroutinen aufgerufen, und die Beschreibung der Ausgabedaten wird anhand der im Schema-Objekt enthaltenen Regeln aktualisiert.
  5. Anschließend wird updateMessages() aufgerufen. Sie können die von der internen Prüfung ausgegebenen Warnungen und Fehlermeldungen überprüfen und ggf. ändern bzw. Ihre eigenen Warnungen und Fehlermeldungen hinzufügen.

Bei sämtlichen schema-Eigenschaften sind Lesen und Schreiben zulässig, mit Ausnahme von type; diese Eigenschaft ist schreibgeschützt.

Eigenschaftenname

Werte

type

Zeichenfolge: "Feature", "Table", "Raster", "Container" (für Workspaces und Feature-Datasets) (schreibgeschützte Eigenschaft)

clone

Boolesch

featureTypeRule

Zeichenfolge: "AsSpecified", "FirstDependency"

featureType

Zeichenfolge: "Simple", "Annotation", "Dimension"

geometryTypeRule

Zeichenfolge: "Unknown", "FirstDependency", "Min", "Max", "AsSpecified"

geometryType

Zeichenfolge: "Point", "Multipoint", "Polyline", "Polygon"

extentRule

Zeichenfolge: "AsSpecified", "FirstDependency", "Intersection", "Union", "Environment"

extent

Ausdehnungsobjekt

fieldsRule

Zeichenfolge: "None", "FirstDependency", "FirstDependencyFIDsOnly", "All", "AllNoFIDs", "AllFIDsOnly"

additionalFields

Python-Liste mit Feldobjekten

cellSizeRule

Zeichenfolge: "AsSpecified", "FirstDependency", "Min", "Max", "Environment"

cellsize

double

rasterRule

Zeichenfolge: "FirstDependency", "Min", "Max", "Integer", "Float"

rasterFormatRule

Zeichenfolge: "Img", "Grid"

additionalChildren

Python-Liste mit Datasets, die einem Workspace-Schema hinzugefügt werden sollen

Schemaobjekteigenschaften

Verwenden von "FirstDependency"

Mehrere Regeln können auf "FirstDependency" festgelegt werden. Dies bedeutet, dass der Wert des ersten Parameters verwendet wird, der im mit parameter.parameterDependencies festgelegten Array für die Parameterabhängigkeiten gefunden wird. Im folgenden Codebeispiel verfügt Parameter 2 über die beiden abhängigen Parameter 0 und 1 und die erste Abhängigkeit ist Parameter 0.

  # Set the dependencies for the output and its schema properties
  #
  self.params[2].parameterDependencies = [0, 1]

Falls ein abhängiger Parameter mehrwertig ist (eine Liste mit Werten aufweist), wird der erste Wert in der Werteliste verwendet.

type

Die Eigenschaft type ist schreibgeschützt und wird von der Geoverarbeitung festgelegt.

clone

Wenn diese Eigenschaft auf "true" gesetzt wird, weisen Sie die Geoverarbeitung an, eine exakte Kopie (einen Klon) der Beschreibung im ersten abhängigen Parameter zu erstellen. Der Standardwert ist "false". Normalerweise wird clone in der Methode initializeParameters() auf "true" festgelegt. Falls der erste abhängige Parameter mehrwertig ist (eine Liste mit Werten aufweist), wird der erste Wert in der Werteliste geklont.

  • Wenn parameter.parameterType auf "Derived" festgelegt ist, wird eine exakte Kopie angefertigt. Dieses Verhalten findet man beim Werkzeug "Feld hinzufügen".
  • Wenn parameter.parameterType auf "Required" festgelegt ist, wird ebenfalls eine exakte Kopie angefertigt, der Katalogpfad zum Dataset wird jedoch geändert. Katalogpfade bestehen aus zwei Teilen: dem Workspace- und dem Basisnamen. Beispiele:

    E:/Data/TestData/netcity.gdb/infrastructure/roads

    • Workspace = E:/Data/TestData/netcity.gdb/infrastructure
    • Basisname = roads
    Es gelten folgende Regeln für die Zusammensetzung neuer Ausgabenamen:
    • Der Basisname entspricht dem Basisnamen des ersten Eingabeparameters mit einem Dataset (nicht der ersten Abhängigkeit, sondern des ersten Parameters), gefolgt vom Namen des Skriptwerkzeugs (z. B. "roads_MyTool).
    • Der Workspace wird auf die Umgebungseinstellung des Scratch-Workspaces festgelegt. Falls diese leer ist, wird die Umgebungseinstellung des aktuellen Workspaces verwendet. Falls diese ebenfalls leer ist, wird der Workspace des ersten Eingabeparameters mit einem Dataset verwendet. Falls dieser Workspace schreibgeschützt ist, wird das TEMP-Verzeichnis des Systems verwendet.

Nachdem clone auf "true" festgelegt wurde, werden alle regelbasierten Methoden, etwa featureTypeRule, geometryTypeRule und extentRule, auf "FirstDependency" festgelegt.

Die folgenden Codebeispiele haben beide die gleiche Funktion. Beide Beispiele basieren darauf, wie das Werkzeug Ausschneiden das Ausgabeschema erstellt.

Beispiel 1: Explizites Festlegen aller Regeln

  def initializeParameters(self):
    # Set the dependencies for the output and its schema properties
    #  The two input parameters are feature classes.
    #
    self.params[2].parameterDependencies = [0, 1]

    # Feature type, geometry type, and fields all come from the first 
    #  dependency (parameter 0), the input features
    #
    self.params[2].schema.featureTypeRule = "FirstDependency"
    self.params[2].schema.geometryTypeRule = "FirstDependency"
    self.params[2].schema.fieldsRule = "FirstDependency"

    # The extent of the output is the intersection of the input features 
    #  and the clip features (parameter 1)
    #
    self.params[2].schema.extentRule = "Intersection"

    return

Beispiel 2: Festlegen von Regeln auf "FirstDependency" mit clone und anschließendes Außerkraftsetzen der Ausdehnungsregel:

  def initializeParameters(self):
    # Set the dependencies for the output and its schema properties
    #  The two input parameters are feature classes.
    #
    self.params[2].parameterDependencies = [0, 1]
    self.params[2].schema.clone = True
    return
    
  def updateParameters(self):
    # The only property of the clone that changes is that the extent 
    #  of the output is the intersection of the input features 
    #  and the clip features (parameter 1)
    #
    self.params[2].schema.extentRule = "Intersection"
    return

featureTypeRule

Diese Einstellung bestimmt den Feature-Typ der Ausgabe-Feature-Class. Diese Regel hat keine Auswirkung auf Ausgabe-Raster oder Ausgabe-Tabellen.

Wert

Beschreibung

"AsSpecified"

Der Feature-Typ wird durch die Eigenschaft featureType vorgegeben.

"FirstDependency"

Der Feature-Typ entspricht dem des ersten Parameters in den Abhängigkeiten. Falls der erste abhängige Parameter mehrwertig ist (eine Liste mit Werten aufweist), wird der erste Wert in der Werteliste verwendet.

featureTypeRule-Werte

featureType

Wenn für "featureTypeRule der Wert "AsSpecified" festgelegt ist, wird mit dem Wert von featureType der Feature-Typ der Ausgabe angegeben.

Wert

Beschreibung

"Simple"

Die Ausgabe enthält Simple Features. Der Geometrietyp der Features wird mit geometryTypeRule angegeben.

"Annotation"

Die Ausgabe enthält Annotation-Features.

"Dimension"

Die Ausgabe enthält Bemaßungs-Features.

featureType-Werte

geometryTypeRule

Diese Einstellung bestimmt den Geometrietyp (zum Beispiel Punkt oder Polygon) der Ausgabe-Feature-Class.

Wert

Beschreibung

"Unknown"

Dies ist die Standardeinstellung. Normalerweise sollten Sie den Geometrietyp in updateParameters() anhand der Werte anderer Parameter ermitteln können. Sie legen diese Regel nur dann auf "Unknown" fest, wenn Ihnen nicht genügend Informationen zur Bestimmung des Geometrietyps zur Verfügung stehen, zum Beispiel bei initializeParameters().

"FirstDependency"

Der Geometrietyp entspricht dem des ersten abhängigen Parameters. Falls der erste abhängige Parameter mehrwertig ist (eine Liste mit Werten aufweist), wird der erste Wert in der Werteliste verwendet.

"Min", "Max"

Überprüft die Geometrien aller abhängigen Parameter und legt als Ausgabegeometrietyp den angetroffenen minimalen und maximalen Typ fest. "Min" und "Max" werden wie folgt definiert:

  • Point and Multipoint = 0
  • Polyline = 1
  • Polygon = 2
Wenn es sich bei den abhängigen Parametern also um eine Point- und eine Polygon-Feature-Class handelt, wäre "Point" das Minimum und "Polygon" das Maximum.

"AsSpecified"

Der Geometrietyp wird durch den Wert der Eigenschaft geometryType vorgegeben.

geometryTypeRule-Werte

geometryType

Legen Sie hier den zu verwendenden Geometrietyp ("Point", "Multipoint", "Polyline" oder "Polygon") fest, wenn geometryTypeRule auf den Wert "AsSpecified" festgelegt ist.

extentRule

Wert

Beschreibung

"AsSpecified"

Die Ausgabeausdehnung wird in der Eigenschaft extent angegeben.

"FirstDependency"

Die Ausgabeausdehnung entspricht der des ersten abhängigen Parameters. Falls der erste abhängige Parameter mehrwertig ist (eine Liste mit Werten aufweist), wird der erste Wert in der Werteliste verwendet.

"Intersection"

Die Ausgabeausdehnung entspricht dem geometrischen Schnittpunkt aller abhängigen Parameter. (Dieser Wert wird, wie unten gezeigt, vom Werkzeug Ausschneiden verwendet.)

"Union"

Die Ausgabeausdehnung entspricht der geometrischen Vereinigung aller abhängigen Parameter.

"Environment"

Die Ausdehnung der Ausgabe wird anhand der Umgebungseinstellung für die Ausgabeausdehnung berechnet.

extentRule-Werte

Beispiel

    # The extent of the output is the intersection of the input features 
    #  and the clip features (the dependent parameters)
    #
    self.params[2].schema.extentRule = "Intersection"

extent

Legen Sie hier die Ausdehnung fest, die verwendet werden soll, wenn extentRule auf den Wert "AsSpecified" festgelegt ist. Sie können dabei entweder eine durch Leerzeichen getrennte Zeichenfolge oder ein Python-Listenobjekt mit vier Werten verwenden. Die Abfolge lautet: xmin, ymin, xmax, ymax.

Beispiel

self.params[2].schema.extentRule = "AsSpecified"
self.params[2].schema.extent = "123.32 435.8 987.3 567.9"

oder bei Verwendung einer Python-Liste

xmin = 123.32
ymin = 435.8
xmax = 987.3
ext = [xmin, ymin, xmax, 567.9]
self.params[2].schema.extent = ext

fieldsRule

fieldsRule bestimmt, welche Felder in der Ausgabe-Feature-Class bzw. in der Ausgabe-Tabelle vorhanden sind.

In der folgenden Tabelle steht FID für "Feature-ID", bezieht sich jedoch genau genommen auf das ObjectID-Feld in allen Feature-Classes und Tabellen.

Wert

Beschreibung

"None"

Es werden keine Felder außer der Objekt-ID ausgegeben.

"FirstDependency"

Die Ausgabefelder entsprechen denen des ersten abhängigen Parameters. Falls der erste abhängige Parameter mehrwertig ist (eine Liste mit Werten aufweist), wird der erste Wert in der Werteliste verwendet.

"FirstDependencyFIDsOnly"

Nur die ObjectID der ersten abhängigen Eingabe wird in die Ausgabe geschrieben.

"All"

Alle Felder in der Liste der abhängigen Parameter werden ausgegeben.

"AllNoFIDs"

Alle Felder mit Ausnahme der ObjectIDs werden in die Ausgabe geschrieben.

"AllFIDsOnly"

Alle ObjectID-Felder werden in die Ausgabe geschrieben, aber keine anderen Felder der Eingaben.

fieldsRule-Werte

Beispiel für das Werkzeug Ausschneiden mit dem Wert "FirstDependency" für die Einstellung fieldsRule

  def initializeParameters(self):
    # Set the dependencies for the output and its schema properties
    #  The two input parameters are feature classes.
    #
    self.params[2].parameterDependencies = [0, 1]

    # Feature type, geometry type, and fields all come from the first 
    #  dependency (parameter 0), the input features
    #
    self.params[2].schema.featureTypeRule = "FirstDependency"
    self.params[2].schema.geometryTypeRule = "FirstDependency"
    self.params[2].schema.fieldsRule = "FirstDependency"

    # The extent of the output is the intersection of the input features 
    #  and the clip features (parameter 1)
    #
    self.params[2].schema.extentRule = "Intersection"

    return

additionalFields

Neben den Feldern, die durch fieldsRule-Anwendung hinzugefügt werden, können Sie der Ausgabe weitere Felder hinzufügen. für additionalFields ist eine Python-Liste mit Feldobjekten erforderlich.

Beispiel für die Verwendung von "AdditionalFields"

cellSizeRule

Hierdurch wird die Zellengröße für Ausgabe-Raster oder Ausgabe-Grids bestimmt.

Wert

Beschreibung

"AsSpecified"

Die Zellengröße der Ausgabe wird in der Eigenschaft cellSize angegeben.

"FirstDependency"

Die Zellengröße wird anhand des ersten abhängigen Parameters berechnet. Falls es sich bei dem abhängigen Parameter um ein Raster handelt, wird dessen Zellengröße verwendet. Bei anderen Arten von abhängigen Parametern wie Feature-Classes oder Feature-Datasets wird die Zellengröße anhand der Ausdehnung der Daten berechnet. Falls der erste abhängige Parameter mehrwertig ist (eine Liste mit Werten aufweist), wird der erste Wert in der Werteliste verwendet.

"Min", "Max"

"Min" bedeutet, dass die Zellengröße der Ausgabe der kleinsten Zellengröße der abhängigen Parameter entspricht. "Max" bedeutet, dass sie der größten Zellengröße der abhängigen Parameter entspricht.

"Environment"

Die Zellengröße der Ausgabe wird anhand der Umgebungseinstellung cellsize berechnet.

cellSizeRule-Werte

cellSize

Legen Sie hier die Zellengröße fest, die verwendet werden soll, wenn cellSizeRule auf den Wert "AsSpecified" festgelegt ist.

rasterRule

Diese Regel gibt den im Ausgabe-Raster enthaltenen Datentyp (Ganzzahl oder Gleitkommazahl) vor.

Wert

Beschreibung

"FirstDependency"

Der Datentyp (Ganzzahl oder Gleitkommazahl) entspricht dem des ersten abhängigen Parameters. Falls der erste abhängige Parameter mehrwertig ist (eine Liste mit Werten aufweist), wird der erste Wert in der Werteliste verwendet.

"Min", "Max"

Ganzzahl wird kleiner als Gleitkommazahl angesehen. Beispiel: Es gibt zwei abhängige Parameter, einen mit Ganzzahlen und einen mit Gleitkommazahlen. In diesem Fall erstellt "Min" eine ganzzahlige Ausgabe und "Max" eine Gleitkommaausgabe.

"Integer"

Das Ausgabe-Raster enthält Ganzzahlen.

"Float"

Das Ausgabe-Raster enthält Gleitkommazahlen (Bruchzahlen).

rasterRule-Werte

rasterFormatRule

Hierdurch wird das Format des Ausgabe-Rasters ("Grid" oder "Img") bestimmt. Das Standardformat ist "Img" (ERDAS-IMAGINE-Format). "Grid" ist das Format von Esri.

Weitere Informationen zu Raster-Datenformaten

additionalChildren

Ein Workspace ist ein Container für Datasets (Features, Tabellen und Raster). Die Datasets sind dem Workspace untergeordnete Elemente. Falls Ihr Werkzeug einem neuen oder bestehenden Workspace Datasets hinzufügt, können Sie die Beschreibung des Workspace aktualisieren, indem Sie Beschreibungen der untergeordneten Elemente hinzufügen. Beispiel: Ihr Werkzeug nimmt eine Liste mit Feature-Classes an (das heißt, es ist mehrwertig), ändert diese und schreibt dann die geänderten Feature-Classes in einen bestehenden Workspace. Wenn das Werkzeug in ModelBuilder verwendet wird, ist der Workspace die abgeleitete Ausgabe des Werkzeugs, und Sie können diesen Workspace als Eingabe für das Werkzeug Daten auswählen verwenden. Mit Daten auswählen können Sie ein untergeordnetes Dataset in einem Container auswählen und als Eingabe für ein anderes Werkzeug verwenden.

Bei der Eingabe für additionalChildren handelt es sich um eine oder mehrere Beschreibungen untergeordneter Elemente. Es gibt zwei Arten von untergeordneten Beschreibungen:

Formular

Beschreibung

value-Objekt

Der Wert einer Feature-Class, eines Rasters, einer Bemaßung oder einer Annotation, wie von der value-Eigenschaft zurückgegeben. Beispiel:

inFeatures = self.params[0].value

Python-Listenobjekt des Formulars [Typ, Name, Felder, Ausdehnung, Raumbezug]

Python-Liste mit einer Beschreibung der hinzuzufügenden untergeordneten Elemente. Nur die beiden ersten Einträge in der Liste ("Typ" und "Name") sind erforderlich. Die anderen Argumente sind optional.

Mitgliederlisten für additionalChildren

Stellen Sie eine Liste mit untergeordneten Beschreibungen zur Verfügung, wenn Sie mehrere untergeordnete Elemente hinzufügen. Wenn Sie die untergeordneten Elemente mit dem Formular für Python-Listenobjekte hinzufügen, erstellen Sie eine Listenauflistung für additionalChildren.

Das Python-Listenformular hat fünf Argumente, die in der folgenden Tabelle beschrieben werden.

Argument

Typ

Beschreibung

type

erforderlich

Eine der folgenden: "Point", "Multipoint", "Polyline", "Polygon", "Table", "Raster", "Annotation", "Dimension"

name

erforderlich

Der Name des Datasets. Sie können lediglich den Basisnamen des Datasets ((streets) oder den vollständigen Katalogpfad ("E:\mydata\test.gdb\infrastructure\streets") angeben. Bei Angabe des vollständigen Katalogpfades wird nur der Basisname (streets) berücksichtigt.

Felder

optional

Eine Python-Liste mit Feldobjekten. Sie enthält die Felder im untergeordneten Element (sofern bekannt).

extent

optional

Eine Zeichenfolge oder Python-Liste mit der räumlichen Ausdehnung des untergeordneten Elements.

spatial reference

optional

Ein Raumbezugsobjekt

Inhalt der Liste untergeordneter Elemente

Die Argumente müssen in der angegebenen Reihenfolge bereitgestellt werden. Wenn Sie ein optionales Argument überspringen möchten, verwenden Sie das Python-Schlüsselwort None oder das Rautenzeichen #.

Nachfolgend sind einige Beispiele zum Festlegen eines Workspace-Schemas aufgeführt. Die Beispiele basieren auf einem Skriptwerkzeug mit den folgenden Argumenten:

Parametername

"Eigenschaften"

0

Input feature class

Feature-Class – Eingabe

1

Input table

Tabelle – Eingabe

2

Input workspace

Workspace – Eingabe (ein bestehender Workspace, der die Ergebnisse des Werkzeugs enthält)

3

Derived workspace

Workspace – Abgeleitete Ausgabe, abgerufen von "Input_workspace" Das Schema des Workspace wird so geändert, dass es weitere untergeordnete Elemente enthält.

Werkzeugparameter – Beispiel

Das Werkzeug nimmt die Eingabe-Feature-Class und die Eingabe-Tabelle an, kopiert beide in den Workspace, fügt der Feature-Class ein neues Feld hinzu und erstellt dann im Workspace eine neue Polygon-Feature-Class. (Die eigentliche Funktion des Werkzeugs ist dabei unerheblich, da es nur dazu dient, die Einstellung des Workspace-Schemas darzustellen.) Die nachfolgenden Codebeispiele bauen aufeinander auf und beginnen mit der einfachsten Verwendungsweise von additionalChildren. Falls Sie diese Codebeispiele implementieren und testen möchten, können Sie den Code mit dem unten dargestellten Modell testen.

Modell zur Anzeige der Prüfergebnisse

In initializeParameters() wird der Ausgabe-Workspace anhand seines abhängigen Parameters (Parameter 2) geklont. Die Abhängigkeit wird normalerweise in den Werkzeugeigenschaften festgelegt, kann jedoch auch in initializeParameters() definiert werden, um zu verhindern, dass die Abhängigkeit in den Werkzeugeigenschaften entfernt wird.

class ToolValidator:
  def __init__(self):
     import arcpy 
     self.params = arcpy.GetParameterInfo()

  def initializeParameters(self):
    self.params[3].parameterDependencies = [2]  # input workspace
    self.params[3].schema.clone = True  # Copy all existing contents to output
    return

Beispiel: Die beiden Eingaben werden (ohne Änderung) in den Ausgabe-Workspace kopiert:

  def updateParameters(self):
    inFC = self.params[0].value     # input feature class
    inTable = self.params[1].value  # input table
    inWS = self.params[2].value     # input workspace
    if inFC and inTable and inWS:
      self.params[3].schema.additionalChildren = [inFC, inTable]
    return

Beispiel: Das Werkzeug erstellt eine neue Polygon-Feature-Class. Die einzigen bekannten Eigenschaften dieser neuen Feature-Class (bei der Validierung) sind der Name ("SummaryPoly") und der Typ ("polygon").

  children = []    # New empty list
  children.append(inFC)
  children.append(inTable)
  children.append(["polygon", "SummaryPolygon"])
  self.params[3].schema.additionalChildren = children

Beispiel: Der Eingabe-Feature-Class wird ein Feld hinzugefügt.

  # Create a field object with the name "Category" and type "Long"
  #
  newField = arcpy.Field()
  newField.name = "Category"
  newField.type = "Long"

  # Describe the input feature class in order to get its list of fields. The 9.3
  #  version of the geoprocessing object returns fields in a Python list, unlike
  #  previous versions, which returned fields in an enumerator.
  #
  desc = arcpy.Describe(inFC)
  fieldList = desc.fields

  # Add the new field to the list
  #
  fieldList.append(newField)

  # Create a new child based on the input feature class, but with the 
  #  additional field added
  #
   newChild = [desc.shapeType, desc.catalogPath, fieldList, 
               desc.extent, desc.spatialReference]

  # Now create our list of children and add to the schema
  #
  children = []
  children.append(newChild)
  children.append(inTable)
  children.append(["polygon", "SummaryPolygon"])
  self.params[3].schema.additionalChildren = children

Um Felder für SummaryPolygon (die neue Polygon-Feature-Class) zu erstellen, erstellen Sie eine Liste mit Feldobjekten in Anlehnung an das oben gezeigte Muster.

Beispiel: Mehrwertige Eingabe

In diesem Beispiel ist der erste Parameter ein mehrwertiger Parameter mit Feature-Classes. Jede Feature-Class im mehrwertigen Parameter wird in den abgeleiteten Workspace kopiert. Jeder der kopierten Feature-Classes wird das neue Feld "ProjectID" hinzugefügt.

# 0 - input features (multivalue)
# 1 - input workspace
# 2 - derived workspace

class ToolValidator:
  def __init__(self):
     import arcpy 
     self.params = arcpy.GetParameterInfo()

  def initializeParameters(self):
    self.params[2].parameterDependencies = [1]
    self.params[2].schema.clone = True
    return

  def updateParameters(self):
    inVT = self.params[0].value   # multivalue ValueTable
    inWS = self.params[1].value   # WorkSpace

    # Add each feature class to the output workspace. In addition,
    #  add a new field "ProjectID" to each feature class
    #
    if inVT and inWS:
        rowCount = inVT.rowCount  # Number of rows in the MultiValue table
        children = []
        newField = arcpy.Field()
        newField.name = "ProjectID"
        newField.type = "Long"
        for row in range(0, rowCount):
            value = inVT.getValue(row, 0)
            if value:
                d = arcpy.Describe(value)
                fieldList = d.fields

                # Note -- not checking if field already exists
                #
                fieldList.append(newField)

                # Create new child with additional ProjectID field and
                #  add child to list of children
                #
                child = [d.shapeType, d.catalogPath, fieldList]
                children.append(child)            
                      
        self.params[2].schema.additionalChildren = children
    return

  def updateMessages(self):
    return

filter-Objekt

Mit dem filter-Objekt können Sie die Auswahlmöglichkeiten festlegen, die Benutzern bei einem Parameter zur Verfügung stehen. Sie haben zum Beispiel die Möglichkeit, einen Feldfilter einzurichten, der die Auswahl auf Textfelder begrenzt. Ein Filter übernimmt drei Aufgaben:

Sie haben zwei Möglichkeiten, Filter festzulegen:

In der folgenden Tabelle werden die sechs möglichen Filterarten vorgestellt:

Filtertyp

Werte

ValueList

Eine Liste mit Zeichenfolgen oder numerischen Werten. Wird mit den Datentypen "String", "Long", "Double" und "Boolean" verwendet.

Range

Ein Bereich zwischen Minimal- und Maximalwert. Wird mit den Datentypen "Long" und "Double" verwendet.

FeatureClass

Liste der zulässigen Feature-Class-Typen, angegeben mit den Werten "Point", "Multipoint", "Polyline", "Polygon", "MultiPatch", "Sphere", "Annotation", "Dimension". Es können mehrere Werte für den Filter bereitgestellt werden.

File

Liste mit Dateisuffixen, etwa ".txt", ".e00", ".ditamap".

Field

Liste der zulässigen Feldtypen, angegeben durch die Werte "Short", "Long", "Single", "Double", "Text", "Date", "OID", "Geometry", "Blob", "Raster", "GUID", "GlobalID", "XML". Es können mehrere Werte für den Filter bereitgestellt werden.

Workspace

Liste der zulässigen Workspace-Typen, angegeben durch die Werte "FileSystem", "LocalDatabase" und "RemoteDatabase". Es können mehrere Werte bereitgestellt werden.

Filtertyp und Werte

Eigenschaften

Eigenschaft

Beschreibung

type

Der Filtertyp (ValueList, Range, FeatureClass, File, Field oder Workspace). Sie können den Filtertyp festlegen, wenn Sie mit "Long"- und "Double"-Parametern arbeiten (siehe Hinweis weiter unten). Bei anderen Parametertypen gibt es nur einen Filtertyp. Wenn Sie bei diesen Parametern den Filtertyp festlegen, wird er ignoriert. Falls Sie nicht möchten, dass Werte gefiltert werden, legen Sie bei der list-Eigenschaft eine leere Liste fest.

list

Eine Python-Liste mit Werten für den Filter. Falls Sie nicht möchten, dass Werte gefiltert werden, legen Sie bei der list-Eigenschaft eine leere Liste fest.

filter-Eigenschaften

ValueList

ValueList bei "String"-Parametern

Bei "String"-Parametern kann die Liste eine beliebige Anzahl von Zeichenfolgen enthalten. Unten sehen Sie ein Beispiel, wie Sie die Liste mit Zeichenfolgenwerten in initializeParameters() festlegen können. Der Parameter bietet die beiden Optionen "NEW_FORMAT" und "OLD_FORMAT".

  def initializeParameters(self):
    # Set the fixed list of "file format type" parameter choices and its
    #  default value
    #
    self.params[1].filter.list = ["OLD_FORMAT", "NEW_FORMAT"]
    self.params[1].value = "OLD_FORMAT"
    return

Im obigen Beispiel könnten Sie die Werteliste auch im Eigenschaftendialogfeld des Werkzeugs auf der Registerkarte "Parameter" festlegen. Selbst wenn Sie in den Werkzeugeigenschaften für die Werteliste etwas anderes angeben, zum Beispiel "OLD" und "NEW", werden diese Werte beim Aufruf von initializeParameters() durch "OLD_FORMAT" und "NEW_FORMAT" ersetzt. Das Gleiche gilt für den Standardwert: Sie können diesen Wert im Eigenschaftendialogfeld des Werkzeugs festlegen und dann in ToolValidator zurücksetzen.

HinweisHinweis:

Die in ToolValidator bereitgestellte Werteliste ersetzt immer die im Eigenschaftendialogfeld des Werkzeugs angegebenen Werte. Daher haben Sie die Möglichkeit, Werte auf Grundlage von anderen Parametern zu aktualisieren.

Aufbauend auf dieses Beispiel zeigt der folgende Code, wie eine Liste von Werten in einem anderen Parameter von updateParameters() geändert wird, je nachdem, ob "OLD_FORMAT" oder "NEW_FORMAT" ausgewählt wird:

  def updateParameters(self):
    # Update the value list filter of the "feature type in file" parameter 
    #   depending on the "file format type" parameter.
    #
    if self.params[1].value.upper() == "OLD_FORMAT":
      self.params[2].filter.list = ["POINT", "LINE", "POLYGON"]
    elif self.params[1].value.upper() == "NEW_FORMAT":
      self.params[2].filter.list = ["POINT", "LINE", "POLYGON", 
                                    "POINT_WITH_ANNO", 
                                    "LINE_WITH_ANNO", 
                                    "POLYGON_WITH_ANNO"]

    # Provide default value for "feature type in file" parameter
    #
    if not self.params[2].altered:
      self.params[2].value = "POINT"

ValueList bei "Long"- und "Double"-Parametern

Parameter mit dem Typ "Long" oder "Double" können über eine Liste mit numerischen Werten verfügen. Benutzer können nur Werte auswählen oder eingeben, die in der Liste enthalten sind.

  # Set filter for a Long parameter
  #
  self.params[7].filter.list = [10, 20, 30, 40, 50]

  # Set filter for a Double parameter
  #
  self.params[8].filter.list = [10.0, 12.5, 15.0]

ValueList bei "Boolean"-Parametern

Für Parameter mit dem Typ "Boolean" gibt es zwei Werte: "true" und "false". Der Wert "true" ist immer der erste Wert in der Liste.

  def initializeParameters(self):
    # Set the Boolean choice for including or excluding angles
    #
    self.params[6].filter.list = ["ANGLE", "NO_ANGLE"]
    
    # Set the default value to false (no angle)
    #
    self.params[6].value = "NO_ANGLE"
    return

  def updateParameters(self):
    # Enable angle format parameter if user wants angles
    #
    if self.params[6].value.upper() == "ANGLE":
      self.params[7].enabled = True

Bereich

Parameter des Typs "Long" und "Double" können einen Bereichsfilter aufweisen. Bereichsfilter haben zwei Werte: den Minimal- und den Maximalwert. Der erste Wert in der Liste ist der Minimalwert. Der Bereich ist einschließend, das heißt, Minimalwert und Maximalwert gehören zur gültigen Auswahl.

  def initializeParameters(self)
    # Utility values must be between -10 and 10.
    #
    self.params[7].filter.list = [-10, 10]

Festlegen des Filtertyps bei "Long"- und "Double"-Parametern

Bei "Long"- und "Double"-Parametern ist der Standardfiltertyp "ValueList". Falls Sie einen Bereichsfilter verwenden möchten, legen Sie den Filtertyp in initializeParameters() wie folgt fest:

  def initializeParameters(self)
    # Set the 'score' value parameters to a range filter
    #
    self.params[7].filter.type = "Range"
    self.params[7].filter.list = [-10, 10]

Der Filtertyp kann nur bei "Long"- und "Double"-Parametern festgelegt werden.

FeatureClass

Das folgende Beispiel zeigt, wie der Feature-Typ eines Eingabeparameters anhand des Feature-Typs eines anderen Eingabeparameters festgelegt wird.

  def updateParameters(self):
    # Set the input feature type of the second parameter based
    #  on the feature type of the first parameter.
    #
    if self.params[0].value:
      desc = arcpy.Describe(self.params[0].value)
      feature_type = desc.shapeType.lower()

      if feature_type == "polygon":
        self.params[1].filter.list = ["point", "multipoint"]

      elif feature_type == "polyline":
        self.params[1].filter.list = ["polygon"]
      
      elif feature_type == "point" or \
           feature_type == "multipoint":
        self.params[1].filter.list = ["polyline"]

      else:
        self.params[1].filter.list = []
      
    return

File

Der Dateifilter enthält eine Liste mit Dateisuffixen, die eine Datei aufweisen darf, etwa ".txt" (einfache Textdatei) oder ".csv" (kommagetrennte Werte). Sie können einen beliebigen Text für ein Suffix eingeben, es muss kein in ArcGIS bekanntes Suffix sein. Die Länge des Suffix ist nicht begrenzt. Der Punkt gehört nicht zum Suffix. Das folgende Beispiel zeigt, wie Sie den Filter für einen Eingabedateiparameter festlegen können.

  def initializeParameters(self)
    # Set the input file type to our recognized options file suffixes
    #
    self.params[0].filter.list = ["opt56", "opt57", "globalopt"]
    return

Feld

Der Feldfilter bestimmt die zulässigen Feldtypen. Mögliche Werte sind "Short", "Long", "Single", "Double", "Text", "Date", "OID", "Geometry", "Blob", "Raster", "GUID", "GlobalID" und "XML".

Angezeigter Name und interner Name

Es gibt vier Feldtypen, die über einen internen Namen wie in der folgenden Tabelle dargestellt verfügen.

Angezeigter Name

Interner Name

Short

SmallInteger

Long

Integer

Float

Single

Text

String

Feldfilter-Aliasnamen

Beim Festlegen eines Feldfilters können Sie den angezeigten Namen oder den internen Namen verwenden. Die folgenden beiden Codezeilen sind also gleichwertig:

  self.params[1].filter.list = ["short", "long", "float", "text"]
  self.params[1].filter.list = ["smallinteger", "integer", "single", "string"]

Falls Sie den angezeigten Namen bereitstellen, etwa "short", wird dieser konvertiert und im Filter als "SmallInteger" gespeichert. Im Allgemeinen müssen Sie nicht auf Werte im Feldfilter zugreifen. Sollte dies jedoch erforderlich sein, denken Sie daran, dass dort der interne Name gespeichert ist. Der folgende Codeausschnitt zeigt, wie Sie dieser Tatsache Rechnung tragen können:

  self.params[1].filter.list = ["short", "long"]
  # 
  if self.params[1].filter.list[0].lower() == "smallinteger":
    # do something

Festlegen eines Standardfeldwertes

Eventuell möchten Sie für einen Feldparameter einen Standardwert bereitstellen. Hierfür durchlaufen Sie wie folgt die Felder in der Eingabe-Tabelle in einer Schleife und wählen das erste Feld aus, das dem Filter entspricht:

  def initializeParameters(self):
    self.params[1].filter.list = ["short", "long", "float", "double"]
    return

  def updateParameters(self):
    if self.params[0].value and not self.params[1].altered:
        self.params[1].value = ""
        desc = arcpy.Describe(self.params[0].value)
        fields = desc.fields

        # Set default to the first field that matches our filter
        #
        for field in fields:
            fType = field.type.lower()
            if fType == "smallinteger" or \
               fType == "integer" or \
               fType == "single" or \
               fType == "double":
                self.params[1].value = field.name
                break
    return
VorsichtVorsicht:

Verwenden Sie in ToolValidator nicht die Geoverarbeitungsfunktion ListFields. Verwenden Sie stattdessen wie oben erläutert die Funktion Describe.

Workspace

Der Workspace-Filter legt die zulässigen Typen für Eingabe-Workspaces fest. Es gibt drei mögliche Werte:

  • " FileSystem"

    Ein Systemordner zum Speichern von Shapefiles, ArcInfo-Coverages, INFO-Tabellen und Grids

  • " LocalDatabase"

    Eine Personal- oder File-Geodatabase

  • " RemoteDatabase"

    Eine ArcSDE-Datenbankverbindung


7/10/2012