Здравствуйте. Стоит задача проитерировать базу геоданных и просчитать определённое поле по определённому выражению. Если поле не существует в классе объектов, который берётся в процессе итерации - скипнуть его (в смысле класс объектов). Попробовал построить модель:
В блоке "Calculate Value" составил выражение:
#Expression:
hasField(r"%Name%")
#Code Block:
import arcpy,os
def hasField(fc):
arcpy.env.workspace = os.path.dirname(fc)
fieldList = [field.name for field in arcpy.ListFields(fc)]
if "GLOBALID" in fieldList:
b = False
else:
b = True
return b
#Data type:
Boolean
GLOBALID - желаемое поле.
В блоке "Calculate Field" прописано выражение:
#Expression:
ID()
#Code Block:
def ID():
import uuid
return '{' + str(uuid.uuid4()) + '}'
Иными словами нужно посчитать поле GLOBALID значением UUID (ИДЕНТИФИКАТОР) в каждом классе объектов, где это поле встречается.
Если запустить модель как есть, то выдаст 539 ошибку (класса не существует). Если в окне "Expression" прописать путь к первому по списку итерируемому feature dataset (hasField(r"C:\Users\Vadim\Downloads\GML\esri\test.gdb\Adme\%Name%")), в окне после запуска модели появляется ошибка "The process did not execute because the precondition is false" и "A column was specified that does not exist. Failed to execute (Calculate Field)" - т.е. наткнулся на класс объектов, не содержащий запрашиваемое поле. Все классы объектов расположены в нескольких датасетах в БГД.
Подскажите, пожалуйста, как я должен изменить код в блоке "Calculate value" , и каким образом нужно соединить блоки в этой модели между собой.
ПО: ArcGIS 10.3.1, Basic