He desarrollado una pequeña caja de herramientas de python que las listas de valores de una tabla en la tabla de valores del parámetro. El usuario puede clasificar cada fila utilizando el Rango de campo desplegable de valores.Todo está bien hasta el valor seleccionado por el usuario. Ahora quiero actualizar a la mesa basado en los valores de clasificación.Mi solución es la búsqueda de valores de rango en la tabla de valores (params3) y la actualización de params4 partir de estos valores.El principal problema en la búsqueda de cursor es el acceso a la categoría de campo ( búsqueda cursor está en ejecutar la función de mi código). Yo creo que si me pueden buscar estos valores, entonces puedo usar updatecursor para actualizar los valores en la tabla.
import arcpy
class Toolbox(object):
def __init__(self):
"""Define the toolbox (the name of the toolbox is the name of the
.pyt file)."""
self.label = "Toolbox"
self.alias = ""
# List of tool classes associated with this toolbox
self.tools = [Tool]
class Tool(object):
def __init__(self):
"""Define the tool (tool name is the name of the class)."""
self.label = ""
self.description = ""
self.canRunInBackground = False
def getParameterInfo(self):
"""Define parameter definitions"""
# line station parameter
params0 = arcpy.Parameter(
displayName="Line Station",
name="line_station",
datatype="GPFeatureLayer",
parameterType="Required",
direction="Input")
params0.filter.list = ["Polyline"]
# station parameter
params1 = arcpy.Parameter(
displayName="Station",
name="point_station",
datatype="GPFeatureLayer",
parameterType="Required",
direction="Input")
params1.filter.list = ["POINT"]
# Table
params2 = arcpy.Parameter(
displayName="Table",
name="table",
datatype="GPTableView",
parameterType="Required",
direction="Input")
# value table
params3 = arcpy.Parameter(
displayName='Values',
name='values',
datatype='GPValueTable',
parameterType='Required',
direction='Input')
# Table output
params4 = arcpy.Parameter(
displayName="Tableoutput",
name="tableoutput",
datatype="GPTableView",
parameterType="Derived",
direction="Output")
params4.parameterDependencies = [params2.name]
params3.columns = [['Long', 'Station Code'],['GPString','Station Name'],['GPString','Rank']]
params3.filters[2].type="ValueList"
params = [params0,params1,params2,params3,params4]
return params
def isLicensed(self):
"""Set whether tool is licensed to execute."""
return True
def updateParameters(self, parameters):
if parameters[2].altered:
if not parameters[3].altered:
result = arcpy.GetCount_management(parameters[2].value)
count = int(result.getOutput(0))
with arcpy.da.SearchCursor(parameters[2].value,["Station","Line","Row"]) as cur:
vtab = []
for row in cur:
vtab.append([row[0],row[1],row[2]])
parameters[3].value = vtab
parameters[3].filters[2].list = range(1,count+1)
return
def updateMessages(self, parameters):
"""Modify the messages created by internal validation for each tool
parameter. This method is called after internal validation."""
return
def execute(self, parameters, messages):
"""The source code of the tool."""
if parameters[3].altered:
with arcpy.da.SearchCursor(parameters[3].valueAsText,parameters[3].columns[2][1]) as curs:
vtab = []
for rows in curs:
vtab.append(rows[0])
# The code rised an error and can not find the Rank field.
return