I have a geoprocessing service on my standalone ArcGIS Server v10.6.1 to perform advanced printing for web maps using arcpy.mp.ConvertWebMapToArcGISProject from ArcGIS Pro v2.3.1. Our application accesses secure services so I need to include the arcpy.ImportCredentials function. When I run the script I get the following error:
Error executing tool. ConvertPdf : Traceback (most recent call last): File "D:\arcgisserver\directories\arcgissystem\arcgisinput\GP\ConvertPdf.GPServer\extracted\p20\arcgis_project\WebMapToArcGISProject.py", line 36, in importedConnections = arcpy.ImportCredentials(secure_server_connections) AttributeError: module 'arcpy' has no attribute 'ImportCredentials' Failed to execute (ConvertPdf). Failed to execute (ConvertPdf). |
If I remove the ImportCredentials function, the script works and generates an image (if my web map json doesn't include a secure service).
We are not using Portal and therefore this is not a federated server. So I am not able publish this service as a web tool. I had to write a script to create a service draft using arcpy.CreateGPSDDraft and used UploadServiceDefinition to publish to our server. The service appears to be using the propy python environment because it successfully uses the arcpy.mp module, but I don't know why it fails on ImportCredentials.
Here is the code published to the server:
import arcpy
import os
import uuid
# The template location in the server data store
scriptPath = sys.path[0]
templatePath = os.path.join(scriptPath, 'Templates')
# Input WebMap JSON
Web_Map_as_JSON = arcpy.GetParameterAsText(0)
# Input layout template
Layout_Template = arcpy.GetParameterAsText(1)
# Get the requested layout template pagx file
templatePagx = os.path.join(templatePath, Layout_Template + '.pagx')
# Specify credentials for secured services in the WebMap JSON
secure_server_connections = [
os.path.join(scriptPath, 'creds.ags'),
]
# Import credentials
importedConnections = arcpy.ImportCredentials(secure_server_connections)
# Convert the WebMap to an ArcGISProject
result = arcpy.mp.ConvertWebMapToArcGISProject(Web_Map_as_JSON, templatePagx, 'LetterLandscape')
aprx = result.ArcGISProject
layout = aprx.listLayouts()[0]
# Set scale
scale = arcpy.GetParameterAsText(3)
layout = aprx.listLayouts('LetterLandscape')[0]
mapframe = layout.listElements('MapFrame_Element')[0]
mapframe.camera.scale = scale
# Set rotation
rotate = arcpy.GetParameterAsText(4)
mapframe.camera.heading = rotate
# Use the uuid module to generate a GUID as part of the output name
# This will ensure a unique output name
output = 'WebMap_{}.png'.format(str(uuid.uuid1()))
Output_File = os.path.join(arcpy.env.scratchFolder, output)
# Export the WebMap
dpi = arcpy.GetParameterAsText(5)
layout.exportToPNG(Output_File, int(dpi))
# Set the output parameter to be the output file of the server job
arcpy.SetParameterAsText(2, Output_File)
# Clear credentials
arcpy.ClearCredentials(importedConnections)
# Clean up
del layout, aprx, result
Any ideas on how I can get this to work on our server?
Thanks