Tôi đã tạo một công cụ Python Toolbox để sắp xếp lại các trường và tạo một lớp tính năng mới với các trường được sắp xếp lại. Công cụ này hoạt động độc đáo và tôi có thể sử dụng bảng giá trị để cho phép người dùng sắp xếp các trường theo thứ tự họ chọn hoặc họ có thể điền giá trị xếp hạng cho từng trường. Tuy nhiên, phần khó chịu của công cụ này là tất cả các trường cần được thêm vào bảng giá trị một lần trước khi sắp xếp lại.
Tôi đang cố gắng thiết lập điều này để đưa tất cả các trường vào bảng giá trị theo mặc định và mọi trường không mong muốn có thể được xóa trước khi sắp xếp lại chúng. Có ai đã thành công khi làm một cái gì đó như thế này trước đây? Tôi đang cố gắng để đạt được điều này trong phương pháp UpdateParameter. Đây là mã tôi đang thử:
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
Tôi muốn mang tất cả các trường như được hiển thị trong bảng giá trị ở trên theo mặc định. Tôi cũng đã thử sử dụng parameters[1].value
để thêm các hàng vào bảng giá trị cụ thể từ GUI, nhưng điều đó đã gây ra lỗi cho tôi. Tôi đang sử dụng ArcGIS 10.2.2.