ฉันสร้างเครื่องมือ Python Toolbox เพื่อจัดลำดับฟิลด์ใหม่และสร้างคลาสฟีเจอร์ใหม่ด้วยฟิลด์ที่เรียงลำดับใหม่ เครื่องมือทำงานได้เป็นอย่างดีและฉันสามารถใช้ตารางค่าเพื่อให้ผู้ใช้จัดเรียงเขตข้อมูลตามลำดับที่พวกเขาเลือกหรือพวกเขาสามารถกรอกค่าอันดับสำหรับแต่ละเขตข้อมูล อย่างไรก็ตามส่วนที่น่ารำคาญของเครื่องมือนี้คือต้องเพิ่มเขตข้อมูลทั้งหมดในตารางค่าทีละครั้งก่อนที่จะจัดลำดับใหม่
ฉันกำลังพยายามตั้งค่านี้เพื่อนำฟิลด์ทั้งหมดไปยังตารางค่าโดยค่าเริ่มต้นและสามารถลบฟิลด์ที่ไม่ต้องการใด ๆ ก่อนที่จะจัดลำดับใหม่ มีใครเคยประสบความสำเร็จทำอะไรแบบนี้มาก่อนหรือไม่ ฉันพยายามทำสิ่งนี้ให้สำเร็จในวิธี UpdateParameters นี่คือรหัสที่ฉันพยายาม:
import arcpy
import os
class Toolbox(object):
def __init__(self):
"""Define the toolbox (the name of the toolbox is the name of the
.pyt file)."""
self.label = "Reorder Fields"
self.alias = "Reorder Fields"
# List of tool classes associated with this toolbox
self.tools = [ReorderFields]
class ReorderFields(object):
def __init__(self):
"""Define the tool (tool name is the name of the class)."""
self.label = "Reorder Fields"
self.description = ""
self.canRunInBackground = False
def getParameterInfo(self):
"""Define parameter definitions"""
fc = arcpy.Parameter(displayName='Features',
name='features',
datatype='Feature Layer',
parameterType='Required',
direction='Input')
vt = arcpy.Parameter(
displayName='Fields',
name='Fields',
datatype='Value Table',
parameterType='Required',
direction='Input')
output = arcpy.Parameter(
displayName='Output Features',
name='output_features',
datatype='Feature Class',
parameterType='Required',
direction='Output')
vt.columns = [['Field', 'Fields'], ['Long', 'Ranks']]
vt.parameterDependencies = [fc.name]
params = [fc, vt, output]
return params
def isLicensed(self):
"""Set whether tool is licensed to execute."""
return True
def updateParameters(self, parameters):
"""Modify the values and properties of parameters before internal
validation is performed. This method is called whenever a parameter
has been changed."""
if parameters[0].value:
if not parameters[1].altered:
fields = [f for f in arcpy.Describe(str(parameters[0].value)).fields
if f.type not in ('OID', 'Geometry')]
vtab = arcpy.ValueTable(2)
for field in fields:
vtab.addRow("{0} {1}".format(field.name, ''))
parameters[1].value = vtab
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."""
fc = parameters[0].valueAsText
vt = parameters[1].valueAsText
output = parameters[2].valueAsText
ฉันต้องการนำฟิลด์ทั้งหมดตามที่แสดงในตารางค่าด้านบนเป็นค่าเริ่มต้น ฉันพยายามใช้parameters[1].value
เพื่อเพิ่มแถวในตารางค่าเฉพาะจาก GUI แต่นั่นทำให้ฉันมีข้อผิดพลาด ฉันใช้ ArcGIS 10.2.2