ฉันกำลังพยายามปรับรูปแบบและชุดสคริปต์ที่พบในเว็บไซต์บล็อกของ ESRI ชื่อ 'การสร้างรายการตัวเลือกหลายค่า'
อย่างไรก็ตามฉันได้ข้อสรุปว่าส่วนหนึ่งของการตรวจสอบความถูกต้องที่ใช้ในสคริปต์ฝังตัวนั้นอาศัยเครื่องมือ 'ความถี่' เพื่อให้สามารถทำงานได้อย่างถูกต้อง แต่สามารถใช้งานได้เฉพาะกับสิทธิ์การใช้งานขั้นสูง (อ่อนแอ) โพสต์บล็อกอธิบายเวิร์กโฟลว์และสถานที่ในการดาวน์โหลดแบบจำลองและสคริปต์ (แต่ฉันจะโพสต์ไว้ที่นี่ตามคำร้องขอ) เท่าที่ฉันสามารถบอกได้ว่าเป็นหน้าที่หลักของฉันในการสร้างรายการตัวเลือกหลายค่า:
.. เป็นที่สคริปต์การตรวจสอบความถูกต้องทำงานอย่างถูกต้อง หากไม่มีการตรวจสอบความถูกต้องฉันไม่สามารถรับค่าจากฟิลด์ให้ปรากฏเป็นรายการได้ มีสิ่งใดบ้างที่ฉันสามารถลบออกจากสคริปต์ตรวจสอบนี้เพื่อรับฟังก์ชั่นที่ฉันใช้อยู่หรือมีวิธีแก้ไขชั่วคราว ฉันไม่คุ้นเคยกับกระบวนการตรวจสอบ นี่คือรหัสสำหรับการตรวจสอบความถูกต้อง (ฉันกำลังจะโพสต์เป็นตัวอย่างโค้ด แต่ดูเหมือนว่าจะติดตามได้ง่ายกว่า):
[ หมายเหตุบรรณาธิการ:นี่คือรหัสการตรวจสอบจริงภาพไม่ถูกต้อง]
import arcpy
class ToolValidator(object):
"""Class for validating a tool's parameter values and controlling
the behavior of the tool's dialog."""
def __init__(self):
"""Setup arcpy and the list of tool parameters."""
self.params = arcpy.GetParameterInfo()
def initializeParameters(self):
"""Refine the properties of a tool's parameters. This method is
called when the tool is opened."""
return
def updateParameters(self):
"""Modify the values and properties of parameters before internal
validation is performed. This method is called whenever a parmater
has been changed."""
if self.params[1].altered: #Set condition - if the input field value changes
if self.params[1].value: #if the field parameter has a value
for field in arcpy.Describe(self.params[0].value).fields: #iterate through fields in the input dataset
if field.name.lower() == self.params[1].value.value.lower(): #find the field object with the same name as field parameter
try:
if self.params[2].values: #if this parameter has seleted values
oldValues = self.params[2].values #set old values to the selected values
except Exception:
pass
values = set() #create an empty set
fieldname = self.params[1].value.value #set the value of variable fieldname equal to the input field value
FrequencyTable = arcpy.Frequency_analysis (self.params[0].value, "in_memory\Frequency", self.params[1].value.value, "") #for large tables create a frequency table
cursor = arcpy.SearchCursor(FrequencyTable, "", "", self.params[1].value.value, "{0} A".format(self.params[1].value.value)) #open a search cursor on the frequency table
for row in cursor: #loop through each value
values.add(row.getValue(fieldname)) #add the value to the set
self.params[2].filter.list = sorted(values) #set the filter list equal to the sorted values
newValues = self.params[2].filter.list
try:
if len(oldValues): # if some values are selected
self.params[2].values = [v for v in oldValues if v in newValues] # check if seleted values in new list,
# if yes, retain the seletion.
except Exception:
pass
def updateMessages(self):
"""Modify the messages created by internal validation for each tool
parameter. This method is called after internal validation."""
return
เป็นไปได้หรือไม่ที่ข้อสันนิษฐานของฉัน (ผ่านการทดสอบ) ที่การตรวจสอบความถูกต้องเป็นชิ้นส่วนที่เป็นเท็จและเป็นอย่างอื่นที่ไม่อนุญาตให้ค่าถูกเปิดเผยเป็นรายการที่เลือกได้? ขอบคุณมากล่วงหน้า การมีฟังก์ชั่นประเภทนี้จะเป็นการเริ่มต้นการใช้เวิร์กโฟลว์สำคัญ ๆ หลายอย่างที่ฉันพยายามกระจายใน บริษัท ของเรา!
arcpy.da.SearchCursor
arcpy.SearchCursor