ArcPy ListLayers用作FME参数

时间:2014-04-25 03:34:31

标签: python arcpy

我不确定这是否更像是Python,FME或Esri问题......

所以情况就是这样 - 用户打开一个MXD文档,连接到带有版本的ArcSDE数据库。我创建了一个FME工作台来写入此数据库,但用户并不想手动输入ArcSDE版本名称作为用户参数(当前如何设置)。相反,他们想要在MXD中当前连接的版本,以便在工作台中使用。

我已经找到了一些Python代码,我发现这些代码可以为打开的MXD创建当前版本名称的文本文件但是我想使用这个值(或者可能是返回的value)作为在FME工作台中使用的新Scripted(Python)私有参数。

现在有两个问题:

  1. 它列出了所有图层的版本名称(我只想要一条记录,所以我可以将一个值传递给FME)
  2. 它写入文本文件。它应该只返回版本名称,以便FME可以将其用作参数吗?如果是这样,我该怎么做?
  3. 这是我到目前为止的代码(我是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 个答案:

答案 0 :(得分: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

祝你好运!

汤姆