for myLyr in arcpy.mapping.ListLayers(mxd): print ("Is this service layer ? : " + str(myLyr.isServiceLayer)) print ("Does it support service properties ? : " + str(myLyr.supports("SERVICEPROPERTIES")))
import arcpy import os import uuid # Input WebMap json Web_Map_as_JSON = arcpy.GetParameterAsText(0) # The template location in the server data store templateMxd = '//MyComputer/MyDataStore/BasicTutorial/LG_062912_10.1/LG_062912_10.1/LGIM_World_Topo_Map_v1.5.mxd' # Convert the WebMap to a map document result = arcpy.mapping.ConvertWebMapToMapDocument(Web_Map_as_JSON, templateMxd) mxd = result.mapDocument # Reference the data frame that contains the webmap # Note: ConvertWebMapToMapDocument renames the active dataframe in the template_mxd to "Webmap" df = arcpy.mapping.ListDataFrames(mxd, 'Webmap')[0] # Remove the service layer # This will just leave the vector layers from the template for lyr in arcpy.mapping.ListLayers(mxd, data_frame=df): if lyr.isServiceLayer: arcpy.mapping.RemoveLayer(df, lyr) # Use the uuid module to generate a GUID as part of the output name # This will ensure a unique output name output = 'WebMap_{}.pdf'.format(str(uuid.uuid1())) Output_File = os.path.join(arcpy.env.scratchFolder, output) # Export the WebMap arcpy.mapping.ExportToPDF(mxd, Output_File) # Set the output parameter to be the output file of the server job arcpy.SetParameterAsText(1, Output_File) # Clean up - delete the map document reference filePath = mxd.filePath del mxd, result os.remove(filePath)
I'm looking for a workaround for this, too. Given the MXD that was created from the webmap json, how can I get the URL for a service layer? It seems so simple, but I'm so stuck.
We used the following workaround:
1) in the webapplication, extend the printtask and set layername or id = service-URL.
2) in the pythonscript: take the serviceurl from the name attribute