我正在从ArcMap中的arcpy运行“计算字段GP”工具。更新行值后,直到我使用“重新加载缓存”工具(“表选项”>“重新加载缓存”)后,它才会显示。如何在不使用ArcObjects的情况下自动刷新属性表?
我已尝试按照@ blah238建议使用python更新定义查询,您如何“重新加载”打开的属性表,但这无济于事。重置数据源不是一种选择,因为要素类可能正在编辑会话中,并且我不想失去与源数据的连接。
我正在从ArcMap中的arcpy运行“计算字段GP”工具。更新行值后,直到我使用“重新加载缓存”工具(“表选项”>“重新加载缓存”)后,它才会显示。如何在不使用ArcObjects的情况下自动刷新属性表?
我已尝试按照@ blah238建议使用python更新定义查询,您如何“重新加载”打开的属性表,但这无济于事。重置数据源不是一种选择,因为要素类可能正在编辑会话中,并且我不想失去与源数据的连接。
Answers:
在没有ArcObjects的情况下,您似乎遇到了ArcPy的限制。
ArcPy.mapping的局限性在这里被广泛地描述为:
Arcpy.mapping不是ArcObjects的替代品,而是它支持的不同方案的替代品。对于更细粒度的开发和应用程序自定义,ArcObjects仍然是必需的,而arcpy.mapping则用于自动化现有地图文档和图层文件的内容。
如果@ blah238关于使用ArcPy中的ArcObjects的其他建议不是您的选择,那么您最好提交一个ArcGIS Idea以便将此功能公开给ArcPy。如果您在此处发布指向此类ArcGIS Idea的链接,那么我将很乐意为其投票。
你有没有尝试过:
arcpy.RefreshCatalog(target) # Set the target to your layers data source
要么
arcpy.RefreshActiveView() # Refreshes the map
要么
arcpy.RefreshTOC() # I highly doubt this will do anything, but you never know
我认为其中之一会起作用,但是我知道有时候在ArcMap中,我必须手动关闭属性表,然后重新打开它才能看到一些编辑。我不确定用ArcPy是否可以关闭和打开表,但这也是一种选择。
这有效:
import arcpy
definition_query = layer.definitionQuery
# Change the Definition Query into something different
if definition_query == '':
oid = arcpy.ListFields(dataset = layer, field_type = 'OID')[0]
layer.definitionQuery = '{} > 0'.format(oid.name)
else:
layer.definitionQuery = ''
arcpy.RefreshActiveView()
# Restore the Definition Query
layer.definitionQuery = definition_query
arcpy.RefreshActiveView()