The script below runs fine when all the feature classes are in the same geodatabase (TestCases_Geodatabase.gdb). But for production, one of the features, Parcel, is in a SDE geodatabase. This fails, however. Not sure if problem is in the workspace setting, feature class name, if I need a connection string to the SDE, or what. The actual feature class name is in a feature dataset in the db and is named CitySDE.GIS.Parcel. If I use the name CitySDE.GIS.Parcel in the line parcel =, I get error 1; if I change the line to parcel = "Parcel" (the name in the TOC), I get error 2.Any help greatly appreciated. Thanks.Error 1 - parcel = "CitySDE.GIS.Parcel"
Executing: CreateCaseFeature del1
Start Time: Wed Jul 18 10:52:30 2012
Running script CreateCaseFeature...
Case number: del1
Checking for previous layer
<class 'arcgisscripting.ExecuteError'>: Failed to execute. Parameters are not valid.
ERROR 000732: Input Rows: Dataset TempleSDE.GIS.Parcel does not exist or is not supported
Failed to execute (GetCount).
...
Error 2 - parcel = "Parcel"
Dissolve complete...Appending to Cases
Error adding parcels to Cases in SelectCases().
Failed to execute. Parameters are not valid.
The value cannot be a feature class
ERROR 000840: The value is not a Raster Catalog Layer.
ERROR 000840: The value is not a Mosaic Layer.
Failed to execute (SelectLayerByLocation).
Adding Case number...
Case number del1 added.
Setting definition query to: "Case_" = 'del1'
<type 'exceptions.UnboundLocalError'>: local variable 'layer' referenced before assignment
Failed to execute (CreateCaseFeature).
Failed at Wed Jul 18 11:03:02 2012 (Elapsed Time: 43.00 seconds)
import arcpy, sys
from arcpy import env
env.workspace = r"\\ServerA\Planning\Cases_Geodatabase.gdb"
#env.workspace = r"\\ServerA\Planning\TestCases_Geodatabase.gdb"
env.overwriteOutput = True
case_number = arcpy.GetParameterAsText(0)
arcpy.AddMessage("Case number: " + case_number)
lyr = r"\\ServerA\Planning\Cases_Geodatabase.gdb\temp_parcel_lyr"
#lyr = r"\\ServerA\Planning\TestCases_Geodatabase.gdb\temp_parcel_lyr"
parcel = "CitySDE.GIS.Parcel"
mxd = arcpy.mapping.MapDocument("CURRENT")
#-------------------------------------------------------------------------------
def MakeCaseFeature():
''' Dissolve selected parcel features into one temporary lyr file.
Append it to the Cases feature class.
Delete the temporary lyr file.
Clear the parcel selection. '''
clear = "CLEAR_SELECTION"
target = "Cases"
schemaType = "NO_TEST"
fld = "CENTRACT" # no data is stored in this field
selectType = "HAVE_THEIR_CENTER_IN"
try:
arcpy.AddMessage("Starting Dissolve...")
# make temporary parcel lyr file from selected parcels, dissolving them
# into one feature
arcpy.Dissolve_management(parcel, lyr, fld)
arcpy.AddMessage("Dissolve complete...Appending to Cases")
# add case feature in temporary layer to Cases
arcpy.Append_management(lyr, target, schemaType, "", "")
# select new case feature
arcpy.SelectLayerByLocation_management(target, selectType, lyr)
# delete temporary layer
arcpy.Delete_management(lyr)
arcpy.AddMessage("Append complete...")
# clear selection on parcels
arcpy.SelectLayerByAttribute_management(parcel, clear)
except Exception as e:
arcpy.AddError("Error adding parcels to Cases in SelectCases(). \n" + e.message)
#-------------------------------------------------------------------------------
# Add case number to case_ field in Cases
#
def AddCaseNumber():
fc = "Cases"
fld = "Case_"
arcpy.AddMessage("Adding Case number...")
try:
arcpy.CalculateField_management(fc, fld, '"%s"' % case_number)
arcpy.AddMessage("Case number " + case_number + " added.")
except Exception as e:
arcpy.AddError("Error setting Case_ field value to case number: " + case_number + "\n" + e.message)
#-------------------------------------------------------------------------------
# Set the definition query to display only the new case
#
def SetDefinitionQuery():
clear = "CLEAR_SELECTION"
fc = "Cases"
fld = "Case_"
query = "\"Case_\" = '%s'" % case_number
# alternate formatting methods for query
# query = "\"%s\" = '%s'" % (fld, case_number)
# query = '"%s"' % fld + " = " + "'%s'" % case_number
mxd = arcpy.mapping.MapDocument("CURRENT")
arcpy.AddMessage("Setting definition query to: " + query)
try:
arcpy.RefreshActiveView()
for layer in arcpy.mapping.ListLayers(mxd, fc):
layer.definitionQuery = query
# clear selection on parcels
arcpy.SelectLayerByAttribute_management(fc, clear)
except Exception as e:
arcpy.AddError("Error setting definition query. \n" + layer.definitionQuery + "/n" + e.message)
arcpy.RefreshActiveView()
arcpy.RefreshTOC()
mxd.save()
del mxd
#-------------------------------------------------------------------------------
# Start 'er up!
#
def main():
arcpy.AddMessage("Checking for previous layer")
if arcpy.Exists(lyr):
arcpy.Delete_management(lyr)
# Check how many parcels are selected. Count returns all parcels if none are
# selected, or only selected ones if there are any. Check returns a list of
# selected parcels, or 0 if none are selected.
count = int(arcpy.GetCount_management(parcel).getOutput(0))
desc = arcpy.Describe(parcel)
check = desc.FIDSet
# make sure parcels are selected before running rest of script, otherwise exit
if len(check) != 0:
arcpy.AddMessage("There are " + str(count) + " parcels selected \n" )
for layer in arcpy.mapping.ListLayers(mxd, "Cases"):
layer.definitionQuery = ""
MakeCaseFeature() # create the case feature
AddCaseNumber() # add case number to the case field
SetDefinitionQuery() # only display current case
arcpy.RefreshActiveView()
arcpy.RefreshTOC()
else:
arcpy.AddError("No features selected! \n Please select at least one parcel feature. \n")
arcpy.AddError("Quitting the Create Case tool \n")
if __name__ == '__main__':
main()