2014-04-25 48 views
1

我不知道這是否是更一個Python,FME,或ESRI的問題...ArcPy中ListLayers爲FME參數使用

因此,這裏的情況 - 用戶有一個MXD文檔打開連接到ArcSDE數據庫與一個版本。我創建了一個FME工作臺來寫入這個數據庫,但用戶不想手動輸入ArcSDE版本名稱作爲用戶參數(它是如何設置的)。相反,他們想要在工作臺中使用MXD中當前連接的任何版本。

我已經將一些Python代碼拼湊在一起我發現爲當前版本名稱創建了一個打開的MXD文本文件,但我想使用這個值(或者也許是返回的值)作爲一個新的腳本化(Python)私有參數在FME工作臺中使用。現在

兩個問題:

  1. 它列出了所有層的版本名稱(我只想一個記錄,所以我可以傳遞一個值到FME)
  2. 它寫入到一個文本文件中。它是否應該返回版本名稱,以便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

假設所有層使用相同的版本,你可以這樣做:

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參數,你可以使用一個PythonCalle r變換器並設置「版本」作爲要顯示的屬性。有關文檔,請參見https://knowledge.safe.com/articles/How_To/Python-and-FME-Basics

祝你好運!

Tom