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

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

我已经收集了一些Python代码,发现它们为打开的MXD创建了当前版本名称的文本文件,但我想将此值(或返回的值)用作新的Scripted(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

最佳答案

假设所有层都使用相同的版本,则可以执行以下操作:



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转换器并将“版本”设置为要公开的属性。有关文档,请参见https://knowledge.safe.com/articles/How_To/Python-and-FME-Basics

祝好运!

汤姆

09-27 02:17