Hi everyone.
I am currently tasked with developing an automated workflow from Arc Pro to a Dashboard hosted on AGOL. In Pro, I have a symbolized map layer with about eight standalone tables. I add the map to the dashboard and use the standalone tables to create serial charts and indicators.
The issue I keep running into is that when I attempt to update my feature layer on AGOL, the layer and/or standalone tables will either duplicate or will not update entirely. I am using the cookie-cutter code provided by ESRI for updating web content, but I am not sure what I am missing.
Any thoughts?
Thanks!
import sys, os, tempfile, json, logging, arcpy, fnmatch, shutil, subprocess, arcgis
from arcgis.gis import GIS
from arcgis.mapping import WebMap
### Start setting variables
# Set the path to the project
prjPath = r"pathToProject.aprx"
# Update following variables to match
sd_fs_name = r'SERVICE DEFINITION NAME'
Map = r'WEB MAP NAME'
portal = r'http://www.arcgis.com'
user = r'USER'
password = r'PASSWORD'
# Set sharing options
shrOrg = False
shrEveryone = False
shrGroups = ""
### End setting variables
# Local paths to create temporary content
relPath = os.path.dirname(prjPath)
sddraft = os.path.join(relPath, "WebUpdate.sddraft")
sd = os.path.join(relPath, "WebUpdate.sd")
# Create a new SDDraft and stage to SD
print('Creating SD file')
arcpy.env.overwriteOutput = True
prj = arcpy.mp.ArcGISProject(prjPath)
mp = prj.listMaps()[0]
arcpy.mp.CreateWebLayerSDDraft(mp, sddraft, sd_fs_name, 'MY_HOSTED_SERVICES',
'FEATURE_ACCESS','',True, True)
arcpy.StageService_server(sddraft, sd)
print('Connecting to {}'.format(portal))
gis = GIS(portal, user, password)
# Find the SD, update it, publish with overwrite and set sharing and metadata
print('Searching for original SD on portal...')
sditem = gis.content.search('{} AND owner:{}'.format(sd_fs_name, user), item_type = 'Service Definition')[0]
print('Found SD:{}, ID:{}n Uploading and overwriting...'.format(sditem.title,sditem.id))
sditem.update(data=sd)
print('Overwriting existing feature service...')
fs = sditem.publish(overwrite=True)
if shrOrg or shrEveryone or shrGroups:
print('Setting sharing options...')
fs.share(org=shrOrg, everyone=shrEveryone, groups=shrGroups)
print('Finishing updating: {} - ID: {}'.format(fs.title, fs.id))