Geoprocessing service failing in web app builder

107
2
02-27-2019 11:22 AM
Occasional Contributor

I have Python toolbox that I have published a geoprocessing service. It works great in arcmap, and it works great after publishing when I access it from arcmap. However when I try to use it in web app builder it fails, the error reads:

  • Traceback (most recent call last): File "", line 113, in execute File "c:\program files\arcgis\server\arcpy\arcpy\management.py", line 17147, in GetCellValue raise e ExecuteError: ERROR 000622: Failed to execute (Get Cell Value). Parameters are not valid. ERROR 000628: Cannot set input into parameter location_point.

. I have no clue why this is failing earlier versions of this script published as gp services have worked perfectly in the past. If anyone here can figure this out I would be grateful.

# Top Comments

















# Start script
#-----------------------------------------------------------------------------
import arcpy
import os

# Tool initialization
#-----------------------------------------------------------------------------
class Toolbox(object):
def __init__(self):
"""Define the toolbox (the name of the toolbox is the name of the
.pyt file)."""

self.label = "Value_Extraction_Tool"
self.alias = "Value Extraction Tool"

# List of tool classes associated with this toolbox
self.tools = [Tool]

class Tool(object):
def __init__(self):
"""Define the tool (tool name is the name of the class)."""
self.label = "Value Extraction Tool"
self.description = ""
self.canRunInBackground = False

def getParameterInfo(self):
DataSource = arcpy.Parameter(
displayName="DataSource",
name="DataSource",
datatype="DEWorkspace",
parameterType="Required",
direction="Input")

InputPoint = arcpy.Parameter(
displayName="InputPoint",
name="InputPoint",
datatype="DEFeatureClass",
parameterType="Required",
direction="Input")

OutputFC = arcpy.Parameter(
displayName="OutputFC",
name="OutputFC",
datatype="DEFeatureClass",
parameterType="Required",
direction="Output")

params = [DataSource, InputPoint, OutputFC]
return params

def isLicensed(self):
# Set whether tool is licensed to execute.
return True

def updateParameters(self, parameters):
# Modify the values and properties of parameters before internal
# validation is performed. This method is called whenever a parameter
# has been changed.
return

def updateMessages(self, parameters):
#Modify the messages created by internal validation for each tool
#parameter. This method is called after internal validation."""
return

def execute(self, parameters, messages):

# User input arguments
DataSource = parameters[0].valueAsText
InputPoint = parameters[1].valueAsText
OutputFC = parameters[2].valueAsText

# Handle all input point procesing
arcpy.CopyFeatures_management(InputPoint, OutputFC)
arcpy.AddXY_management(InputPoint)

# Add fields to hold temporal data
arcpy.AddField_management(OutputFC, "LABEL", "TEXT")
arcpy.AddField_management(OutputFC, "VALUE", "DOUBLE")

# Loop through geometry attributes and get the x and y
with arcpy.da.SearchCursor(InputPoint,"*") as cursor:
PointIndex = 1
for row in cursor:
X = row[3]
Y = row[4]
arcpy.AddMessage(str(X) + " " + str(Y))

# Get rasters and extract data at an X and Y
index = 0
for (path, dirs, files) in os.walk(DataSource):
for ThisFile in files:
fName,fExt = os.path.splitext(ThisFile)
if fExt.upper() == ".IMG" or fExt.upper() == ".TIF":
RasterPath = path + "\\" + ThisFile
data = (arcpy.GetCellValue_management(RasterPath, str(X) + " " + str(Y), ""))
aquisition_date = arcpy.GetRasterProperties_management(in_raster = RasterPath, property_type = "ACQUISITIONDATE")

if str(aquisition_date).upper() == "UNKNOWN":
insertcursor = arcpy.InsertCursor(OutputFC)
row = insertcursor.newRow()
row.setValue("POINTID", PointIndex)
row.setValue("LABEL", "{}, Point: {}".format(index, PointIndex))
row.setValue("VALUE", data)
insertcursor.insertRow(row)
del insertcursor
index += 1

PointIndex += 1
return‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍
Reply
0 Kudos
2 Replies
Esri Contributor

Are you able to run this service directly from REST using the input parameters provided from WAB? If you open up the web developer tools when running this task in WAB, you should see a submitjob or execute call. Within the headers there will be form data which you can input directly into the REST endpoint for the service to see if maybe this is a client side issue. 

-Lynsey

Reply
0 Kudos
Esri Contributor

Also, within your configuration of the script tool, what are your input data types set to? could you send a screenshot?

Reply
0 Kudos