한 기능 클래스 속성을 다른 기능 클래스 속성으로 복사하여 동료 워크 플로우 속도를 높이는 Python 추가 기능 버튼을 만들었습니다. arcpy.UpdateCursor 함수를 사용하여 대상 피처 클래스에서 행을 업데이트합니다. 현재 존재하는 것처럼이 버튼 스크립트는 편집 모드에 관계없이 실행될 수 있습니다. 분명히 편집 세션에서 실행될 때 사용자는 편집을 중지하고 변경 사항을 저장하지 않도록 선택할 수 있지만 스크립트가 편집 세션 외부에서 실행될 때는 그렇지 않습니다.
ArcMap이 현재 편집 세션에 있지 않은 경우 스크립트 실행을 중지하는 확인을 스크립트에 추가하려면 어떻게해야합니까?
이것은 ArcMap 10 & 10.1과 관련이 있습니다
또한 다른 ArcMap 사용자와 확인하여 편집 세션을 거치지 않고 테이블 업데이트가 일반적으로 허용되지 않는지 확인하고 싶습니다.
그렇다면이 스크립트는 편집 세션 밖에서 어떻게 실행됩니까?
이 스크립트는 또한 목록에서 두 번째 피처 클래스 테이블을 업데이트 할 때 나에게 도움이되는 ArcMap이 수행하는 겉보기에 우연한 선택 순서에 대한 또 다른 질문을 제기합니다. 그러나 그것은 다른 날입니다.
다음은 현재 작동하는 스크립트입니다 (10.1 편집기 구현없이).
사용자가 편집 세션에 있는지 확인하는 방법?
def onClick(self):
#Reference mxd
mxd = arcpy.mapping.MapDocument("CURRENT")
#Reference the main Data frame
mm = arcpy.mapping.ListDataFrames(mxd, "MainMap")[0]
#Reference the Water System Valve feature class
waterValves = arcpy.mapping.ListLayers(mxd, "Water System Valve", mm)[0]
#Reference the fire hydrant feature class
fireHydrants = arcpy.mapping.ListLayers(mxd, "Water Hydrant", mm)[0]
#Use the extent of the main DF to select all valves in the current view
dfAsFeature = arcpy.Polygon(arcpy.Array([mm.extent.lowerLeft, mm.extent.lowerRight, mm.extent.upperRight, mm.extent.upperLeft]), mm.spatialReference)
arcpy.SelectLayerByLocation_management(waterValves, "WITHIN", dfAsFeature,"", "NEW_SELECTION")
arcpy.SelectLayerByAttribute_management(waterValves, "SUBSET_SELECTION", "LOCATIONID IS NULL")
fields = ["LOCATIONID"]
row, rows = None, None
rows = arcpy.UpdateCursor(waterValves,fields)
row = rows.next()
valveList = []
append = valveList.append
#Loop through the valves table to update LocationID
while row:
builder = str(row.QSNO)+"-"+ str(row.VALVESEQNO)
row.setValue("LOCATIONID", builder)
append(builder)
rows.updateRow(row)
row = rows.next()
del row, rows
#New selection for fire hydrants
arcpy.SelectLayerByLocation_management(fireHydrants, "WITHIN", dfAsFeature,"", "NEW_SELECTION")
arcpy.SelectLayerByAttribute_management(fireHydrants, "SUBSET_SELECTION", "LOCATIONID IS NULL")
row, rows = None, None
rows = arcpy.UpdateCursor(fireHydrants,fields)
row = rows.next()
#Loop through fire hydrant table to update LocationID
while row:
for locID in valveList:
construct = str(locID) + "-FH"
#print construct
row.setValue("LOCATIONID", construct)
rows.updateRow(row)
row = rows.next()
del row, rows, valveList, mxd