[GIS] Calling ArcGIS 10 geoprocessing method in FME 2011

arcgis-10.0fme

I am trying to create an attribute index in a feature class in FME 2011. I couldn't find any trasnformer that does it. So I'm thinking may be I can use "PythonCaller" transformer to call "Add Attribute Index" geoprocessing method from ArcGIS. Is it possible?

Here's the syntax I copied from ArcGIS Help menu:

arcpy.AddIndex_management ("counties.shp", "NAME;STATE_FIPS;CNTY_FIPS", "#", "NON_UNIQUE", "NON_ASCENDING")

Thank you in advance.

Sam

Thank you Mark and blah238. So, I intalled FME2012 on my machine and used python26.dll as my custon python interpreter and copied Mark's code. For Entry point, I entered the name of the class "MyIndexingScript". I'm getting the following error:

Python Exception : Object: Error in executing tool
Error encountered while calling method `input'
PythonFactory failed to process feature

import fmeobjects
import arcpy

class MyIndexingScript(object):
   def __init__(self):  
       self.featureList = []
   def input(self,feature):
       self.featureList.append(feature)
       arcpy.AddIndex_management (self, "YORK_PARCEL_ID;PARCEL_GIS_ID", "PIndex", "UNIQUE", "ASCENDING")
   def close(self):        
       self.pyoutput(feature)

Best Answer

If you can use the File Geodatabase API writer in FME2012-SP2, then there will be a setting in the feature type/writer to enable setting an attribute index.

Unfortunately, for the moment, it's limited to only that writer (not the ArcObjects Geodatabase writer) which has a number of other limitations.

In the meantime you are correct, a call using the PythonCaller should work.

I am no Python expert, but you will need to make sure you call it as a Class and not a Function - because a function will execute once per feature, and you only need it to run once in total.

So I would think something like:

import arcpy
import fmeobjects

class MyIndexingScript(object):
def __init__(self):  
def input(self,feature):
def close(self):

arcpy.AddIndex_management ("counties.shp", "NAME;STATE_FIPS;CNTY_FIPS", "#", "NON_UNIQUE", "NON_ASCENDING")

...but you will want to check the help doc for the PythonCaller and probably take a look on fmepedia.com for examples. Also check out fmeevangelist.com and search for Python content. There are some examples I created that might be of use.

Related Question