Aktualisieren des Schemas in einer Python-Toolbox
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, überprüft der interne Validierungscode der Geoverarbeitung die festgelegten Regeln und aktualisiert die Ausgabebeschreibung.
Der Ablauf des Vorgangs ist also wie folgt:
- Beim ersten Öffnen des Werkzeugdialogfeldes wird getParameterInfo 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).
- Sobald ein Benutzer mit dem Werkzeugdialogfeld interagiert, wird updateParameters aufgerufen.
- 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").
- Im Anschluss an updateParameters werden die internen Prüfroutinen aufgerufen, und die Beschreibung der Ausgabedaten wird anhand der im Schema-Objekt enthaltenen Regeln aktualisiert.
- 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.
Name der Eigenschaft |
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", "FirstDependencyFIDs", "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 |
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
#
parameters[2].parameterDependencies = [parameters[0].name, parameters[1].name]
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 getParameterInfo-Methode auf "true" gesetzt. 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. Beispiel:
E:/Data/TestData/netcity.gdb/infrastructure/roads
- Workspace = E:/Data/TestData/netcity.gdb/infrastructure
- Basisname = roads
- 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.
class ExampleClipTool1(object):
def __init__(self):
self.label = "Example Clip tool 1"
self.description = "Explicitly setting all rules"
def getParameterInfo(self):
# Input feature class
param0 = arcpy.Parameter(
displayName="Input Features",
name="in_features",
datatype="GPFeatureLayer",
parameterType="Required",
direction="Input")
# Input table
param1 = arcpy.Parameter(
displayName="Clip Features",
name="clip_features",
datatype="GPFeatureLayer",
parameterType="Required",
direction="Input")
# Input workspace
param2 = arcpy.Parameter(
displayName="Output Feature Class",
name="out_feature_class",
datatype="DEFeatureClass",
parameterType="Required",
direction="Output")
# Set the dependencies for the output and its schema properties
# The two input parameters are feature classes.
#
param2.parameterDependencies = [param0.name, param1.name]
# Feature type, geometry type, and fields all come from the first
# dependency (parameter 0), the input features
#
param2.schema.featureTypeRule = "FirstDependency"
param2.schema.geometryTypeRule = "FirstDependency"
param2.schema.fieldsRule = "FirstDependency"
# The extent of the output is the intersection of the input features
# and the clip features (parameter 1)
#
param2.schema.extentRule = "Intersection"
params = [param0, param1, param2]
return params
class ExampleClipTool2(object):
def __init__(self):
self.label = "Example Clip tool 2"
self.description = "Using clone to set rules to FirstDependency, then overriding the extent rule"
def getParameterInfo(self):
# Input feature class
param0 = arcpy.Parameter(
displayName="Input Features",
name="in_features",
datatype="GPFeatureLayer",
parameterType="Required",
direction="Input")
# Input table
param1 = arcpy.Parameter(
displayName="Clip Features",
name="clip_features",
datatype="GPFeatureLayer",
parameterType="Required",
direction="Input")
# Input workspace
param2 = arcpy.Parameter(
displayName="Output Feature Class",
name="out_feature_class",
datatype="DEFeatureClass",
parameterType="Required",
direction="Output")
# Set the dependencies for the output and its schema properties
# The two input parameters are feature classes.
#
param2.parameterDependencies = [param0.name, param1.name]
param2.schema.clone = True
params = [param0, param1, param2]
return params
def updateParameters(self, parameters):
# 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)
#
parameters[0].schema.extentRule = "Intersection"
return
featureTypeRule
Diese Einstellung bestimmt den Feature-Typ der Ausgabe-Feature-Class. Diese Regel hat keine Auswirkung auf Ausgabe-Raster oder Ausgabetabellen.
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. |
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 Annotations-Features. |
"Dimension" |
Die Ausgabe enthält Bemaßungs-Features. |
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. |
"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:
|
"AsSpecified" |
Der Geometrietyp wird durch den Wert der Eigenschaft geometryType vorgegeben. |
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. |
Beispiel
# The extent of the output is the intersection of the input features
# and the clip features (the dependent parameters)
#
parameters[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.
parameters[2].schema.extentRule = "AsSpecified"
parameters[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]
parameters[2].schema.extent = ext
fieldsRule
fieldsRule bestimmt, welche Felder in der Ausgabe-Feature-Class bzw. in der Ausgabetabelle 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. |
"FirstDependencyFIDs" |
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. |
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.
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. |
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). |
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.
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:
Formen |
Beschreibung |
---|---|
value-Objekt |
Der Wert einer Feature-Class, eines Rasters, einer Bemaßung oder einer Annotation, wie von der value-Eigenschaft zurückgegeben. |
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. |
Stellen Sie eine Liste mit untergeordneten Beschreibungen zur Verfügung, wenn Sie mehrere untergeordnete Elemente hinzufügen. Falls 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 |
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. |
Das Werkzeug nimmt die Eingabe-Feature-Class und die Eingabetabelle 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.
In getParameterInfo wird der Ausgabe-Workspace anhand seines abhängigen Parameters (param2) geklont.
class ExampleTool(object):
def __init__(self):
self.label = "Example tool"
self.description = "Example of parameter dependencies"
def getParameterInfo(self):
#Define parameter definitions
# Input feature class
param0 = arcpy.Parameter(
displayName="Input feature class",
name="in_features",
datatype="GPFeatureLayer",
parameterType="Required",
direction="Input")
# Input table
param1 = arcpy.Parameter(
displayName="Input table",
name="in_table",
datatype="GPTableView",
parameterType="Required",
direction="Input")
# Input workspace
param2 = arcpy.Parameter(
displayName="Input workspace",
name="in_workspace",
datatype="DEWorkspace",
parameterType="Required",
direction="Input")
# Derived workspaces
param3 = arcpy.Parameter(
displayName="Derived workspace",
name="out_workspace",
datatype="DEWorkspace",
parameterType="Derived",
direction="Output")
# Set dependencies to the input workspace parameter
param3.parameterDependencies = [param0.name]
# Copy all existing contents to output
param3.schema.clone = True
params = [param0, param1, param2, param3]
return params
Beispiel: Die beiden Eingaben werden (ohne Änderung) in den Ausgabe-Workspace kopiert:
def updateParameters(self, parameters):
inFC = parameters[0].value # input feature class
inTable = parameters[1].value # input table
inWS = parameters[2].value # input workspace
if inFC and inTable and inWS:
parameters[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 ("SummaryPolygon") und der Typ ("polygon").
def updateParameters(self, parameters):
children = [] # New empty list
children.append(parameters[0].value)
children.append(parameters[1].value)
children.append(["polygon", "SummaryPolygon"])
parameters[3].schema.additionalChildren = children
return
Beispiel: Der Eingabe-Feature-Class wird ein Feld hinzugefügt.
def updateParameters(self, parameters):
# 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(parameters[0].value)
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"])
parameters[3].schema.additionalChildren = children
return
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
def updateParameters(self, parameters):
inVT = parameters[0].value # multivalue ValueTable
inWS = parameters[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 # Row count in 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)
parameters[2].schema.additionalChildren = children
return