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:

  1. 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).
  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.

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

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
#
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.

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
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
Beispiel 2: Festlegen von Regeln auf "FirstDependency" mit clone und anschließendes Außerkraftsetzen der Ausdehnungsregel:
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.

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 Annotations-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.

"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)
#
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.

Beispiel
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.

fieldsRule-Werte

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.

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:

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.

Mitgliederlisten für additionalChildren

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

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 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.

Modell zur Anzeige der Prüfergebnisse

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

Verwandte Themen

9/11/2013