ArcPy ListLayers用作FME参数
我不太确定这个问题是关于Python、FME还是Esri的……
情况是这样的:有个用户打开了一个MXD文档,并且连接到了一个有版本的ArcSDE数据库。我创建了一个FME工作台来写入这个数据库,但用户不想手动输入ArcSDE版本名称作为用户参数(现在是这样设置的)。相反,他们希望在MXD中当前连接的版本能够直接在工作台中使用。
我找了一些Python代码,想创建一个文本文件,里面写着当前打开的MXD的版本名称,但我想把这个值(或者返回的值)作为一个新的脚本(Python)私有参数,用在FME工作台中。
现在有两个问题:
- 它列出了所有图层的版本名称(我只想要一个记录,这样我就可以把一个值传给FME)
- 它写入了一个文本文件。难道不应该直接返回版本名称,这样FME就可以把它当作参数使用吗?如果是这样,我该怎么做呢?
这是我目前写的代码(我还是个Python新手,请多多包涵!)
import arcpy, os
mxd = arcpy.mapping.MapDocument(r'CURRENT')
text_file = open("C:\\temp\\VersionName.txt","w")
for lyr in arcpy.mapping.ListLayers(mxd):
if lyr.supports("SERVICEPROPERTIES"):
servProp = lyr.serviceProperties
if lyr.serviceProperties["ServiceType"] != "SDE":
print "Service Type: " + servProp.get('ServiceType', 'N/A')
else:
text_file.write (servProp.get('Version'))
text_file.close()
del mxd
1 个回答
1
假设所有的层都使用相同的版本,你可以这样做:
import arcpy
mxd = arcpy.mapping.MapDocument(r'CURRENT')
layer_list = arcpy.mapping.ListLayers(mxd)
first_layer = layer_list[0] #The first item in layer_list
servProp = first_layer.serviceProperties #Get properties for the first layer
version = servProp.get('Version') #Get the version
如果你想在FME中使用版本名称作为参数,可以使用一个叫做PythonCaller的工具,并把“version”设置为需要显示的属性。想了解更多,可以查看这个链接:https://knowledge.safe.com/articles/How_To/Python-and-FME-Basics。
祝你好运!
汤姆