Hello. I find that when I run a python command from my project notebook, the script runs and does what I expect it to. When I run the same code from a toolbox script that I just created, it runs without error but doesn't do anything.
This is the notebook command:
arcpy.cartography.ConvertLabelsToGraphics(
'Map', 20000, 'SINGLE_LAYER', 'XBA/New LTC-SUP/PofC', 'Graphics', 'DISPLAY',
'GRAPHICS_LAYER_PER_FEATURE_LAYER', 'ONLY_PLACED', 'GroupGraphics')
This is the tool script:
import arcpy
def pofctographic():
tenure_type=arcpy.GetParameterAsText(0)
if tenure_type == "LTC-SUP":
arcpy.AddMessage("LTC-SUP selected")
arcpy.cartography.ConvertLabelsToGraphics(
'Map', 20000, 'SINGLE_LAYER', 'XBA/New LTC-SUP/PofC', 'Graphics', 'DISPLAY',
'GRAPHICS_LAYER_PER_FEATURE_LAYER', 'ONLY_PLACED', 'GroupGraphics')
if tenure_type == "CP":
arcpy.AddMessage("CP selected")
arcpy.cartography.ConvertLabelsToGraphics(
'Map', 20000, 'SINGLE_LAYER', 'XBA/New CP/PofC', 'Graphics', 'DISPLAY',
'GRAPHICS_LAYER_PER_FEATURE_LAYER', 'ONLY_PLACED', 'GroupGraphics')
pofctographic()
Solved! Go to Solution.
Dylan from ESRI Canada has provided this solution:
As a workaround, you can assign the result of the arcpy.cartography.ConvertLabelsToGraphics function to a variable, then add the first element of this variable (which will be the group layer) to the map object as follows:
import arcpy
arpx = arcpy.mp.ArcGISProject("CURRENT")
map_obj = arpx.listMaps("Map")[0]
glayer = arcpy.cartography.ConvertLabelsToGraphics(map_obj, 2000, 'SINGLE_LAYER', 'XBA/PofC')
map_obj.addLayer(glayer[0])
Thank-you Dylan!
Hey @DanCrawford
I think in the Notebook, it's setting all the project parameters automatically, but in the Toolbox, you may need to explicitly specify where everything's going, something like this:
import arcpy
def pofctographic():
aprx = arcpy.mp.ArcGISProject("CURRENT") # If in Pro, "CURRENT" if a .aprx file, use the path to that file
map_obj = aprx.listMaps("Map")[0] # Make sure 'Map' matches the name of your map
tenure_type = arcpy.GetParameterAsText(0)
if tenure_type == "LTC-SUP":
arcpy.AddMessage("LTC-SUP selected")
arcpy.cartography.ConvertLabelsToGraphics(
map_obj, 20000, 'SINGLE_LAYER', 'XBA/New LTC-SUP/PofC', 'Graphics', 'DISPLAY',
'GRAPHICS_LAYER_PER_FEATURE_LAYER', 'ONLY_PLACED', 'GroupGraphics')
elif tenure_type == "CP":
arcpy.AddMessage("CP selected")
arcpy.cartography.ConvertLabelsToGraphics(
map_obj, 20000, 'SINGLE_LAYER', 'XBA/New CP/PofC', 'Graphics', 'DISPLAY',
'GRAPHICS_LAYER_PER_FEATURE_LAYER', 'ONLY_PLACED', 'GroupGraphics')
pofctographic()
Let me know if that works!
Cody
Thanks! I'm off work until Tuesday but will let you know.
Sadly, adding those parameters has no effect.
Same thing happens if I run it as a model. Manual model works fine, run from the toolbox does nothing.
I don't have much constructive to add except for I'm currently wrapping up a support case where notebooks/python window work for the code but an ATBX or a PYT also run and do nothing with the exact same code while calling a Geoprocessing Service.
All this to say, it isn't unheard of.
I swapped out the toolbox parameter for a feature layer input and got it down to this 2-line reproduction:
import arcpy
arcpy.cartography.ConvertLabelsToGraphics(
arcpy.mp.ArcGISProject("CURRENT").activeMap,
20000,
'SINGLE_LAYER',
arcpy.GetParameterAsText(0),
'Graphics',
'MAXOF',
'GRAPHICS_LAYER_PER_FEATURE_LAYER',
'ONLY_PLACED',
'GroupGraphics'
)
I get the same issue as you in Pro 3.4.0, no changes are made to the map. I think the next move is to contact your support team to see if they can replicate it, hopefully this leads to a bug fix or a workaround.
Thanks. I have opened a ticket with ESRI. I'll update this post if/when a solution is provided.
Dylan from ESRI Canada has provided this solution:
As a workaround, you can assign the result of the arcpy.cartography.ConvertLabelsToGraphics function to a variable, then add the first element of this variable (which will be the group layer) to the map object as follows:
import arcpy
arpx = arcpy.mp.ArcGISProject("CURRENT")
map_obj = arpx.listMaps("Map")[0]
glayer = arcpy.cartography.ConvertLabelsToGraphics(map_obj, 2000, 'SINGLE_LAYER', 'XBA/PofC')
map_obj.addLayer(glayer[0])
Thank-you Dylan!