The goal is to publish a geoprocessing tool that:
- Opens predefined Pro project
- Sets definition queries on hosted feature service layers (date ranges)
- Turns ON the hosted feat. service layers
- Zooms to a predefined bookmark
- Exports to JPG
Pretty simple, right? Not so much. No matter what we do, the hosted feature service layer(s) aren't drawing. Sometimes they do draw, sometimes they don't; most often not.
Can anyone spot an issue?
import arcpy, os, time
from datetime import datetime
start_date = arcpy.GetParameterAsText(0) #1761486465000
end_date = arcpy.GetParameterAsText(1) #1762004877000
report_type = arcpy.GetParameterAsText(2) #"Cultural Resources"
project_area = arcpy.GetParameterAsText(3) #"Project 1"
output_map_filename = arcpy.GetParameterAsText(4) #"aTest"
output_map_file = arcpy.GetParameterAsText(5)
lyr_wildcard = "CR*" if report_type == "Cultural Resources" else "NR*"
start_date_str = datetime.fromtimestamp(start_date / 1000).strftime("%m/%d/%Y") if str(start_date).isdigit() else start_date
end_date_str = datetime.fromtimestamp(end_date / 1000).strftime("%m/%d/%Y") if str(end_date).isdigit() else end_date
arcpy.env.overwriteOutput = True
def find_dt_field(lyr_datasrc):
flds_to_ignore = ["created_date","last_edited_date"]
for fld in arcpy.ListFields(lyr_datasrc,"*_date","DateOnly"):
if not fld.name in flds_to_ignore:
return fld.name
break
aprx = arcpy.mp.ArcGISProject(r"\\nafiles-our.domain.com\Weekly Report Map GP Tool dev.aprx")
m = aprx.listMaps("weekrep")[0]
lyrs = [l for l in m.listLayers(lyr_wildcard) if not l.isGroupLayer]
for lyr in lyrs:
if lyr.supports("DEFINITIONQUERY"):
dt_fld = find_dt_field(lyr.dataSource)
sql_query = dt_fld + " >= date '" + start_date_str + "' AND " + dt_fld + " <= date '" + end_date_str + "'"
lyr.definitionQuery = sql_query
lyr.visible = True
lyt = aprx.listLayouts("Weekly")[0]
mf = lyt.listElements("MAPFRAME_ELEMENT", "LAYERS Map Frame")[0]
bookmark = m.listBookmarks(project_area)[0]
mf.zoomToBookmark(bookmark)
time.sleep(15) #let all the complex labels draw
output_file = os.path.join(arcpy.env.scratchFolder,output_map_filename)
pdf_export_format = arcpy.mp.CreateExportFormat("PDF",output_file)
pdf_export_format.georefInfo = False
pdf_export_format.resolution = 300
pdf_export_format.imageCompressionQuality = 100
arcpy.SetParameterAsText(5, lyt.export(pdf_export_format))