Using the Validator in the ArcGIS 10.1 tool GUI, can I loop through and List feature classes from a workspace type parameter (ie a file geodatabase) and then go on and list the values of a field in a feature class from that list? I'm trying to do this:
if self.params[0].value and arcpy.Exists(self.params[0].value):
for fc in arcpy.ListFeatureClasses(self.params[0].value):
if fc == "TestFC":
value_set = set(row.getValue("SITE")
for row in arcpy.SearchCursor(str(self.params[0].value)))
self.params[1].filter.list = sorted(value_set)
where param[0]
is a workspace type parameter where the user chooses a geodatabase. param[1]
will be a string type parameter set as a value list. I want to read in a setted value list from all the values in the 'SITE' field so the user can choose which site the tool will further process on.
Maybe in other words:
- User opens tool
- User chooses a file geodatabase as the first parameter
- User will then choose a SITE from the list derived from the first parameters testfc feature class, 'SITE' field
Best Answer
This should be possible but your usage of
ListFeatureClasses
andSearchCursor
is incorrect:ListFeatureClasses
requires you to setarcpy.env.workspace
first. Its arguments are optional, but the first is a wildcard, not a workspace.SearchCursor
's first argument is a table or feature class, not a workspace.That being said, I wouldn't really recommend using tool validation for this if you can avoid it. It will be slow, and really doesn't add much value compared to simply exposing a SQL Expression parameter obtained from another parameter (this doesn't require any tool validation code). See How to populate SQL options for parameter in ArcGIS 10 tool?