français

Procédure : écraser les services d’entités hébergés depuis ArcGIS Pro sur ArcGIS Online à l’aide de Python

Résumé

Il est possible d’écraser un service d’entités hébergé à l’aide de la solution de contournement arcgis.gis.module. Le module permet de surmonter la limitation connue du module ArcPy, avec les identifiants de connexion ArcGIS Online dans un script Python. Le script Python permet d’automatiser le traitement. Toutefois, Python 3, qui est inclus dans les installations ArcGIS Pro, est requis.

Cet article contient les instructions indiquant comment spécifier les modules et les identifiants de connexion, créer le fichier de définition de service (SD) et procéder à la publication.

Procédure

  1. Importez les modules nécessaires.
import arcpy import os, sys from arcgis.gis import GIS
  1. Spécifie l’emplacement du fichier de projet (.aprx).
prjPath = r"C:\Users\SampleFolder\Project_Name.aprx"
  1. Spécifiez le nom du service d’entités dans ArcGIS Online, en indiquant les identifiants de connexion du propriétaire.
sd_fs_name = "HOSTED_FEATURE_SERVICE_NAME" portal = "http://www.arcgis.com" user = "USERNAME" password = "PASSWORD"
  1. Définissez les options de partage souhaitées. L’exemple de code suivant définit le service à partager uniquement avec l’organisation.
shrOrg = True shrEveryone = False shrGroups = ""
  1. Spécifiez un chemin local pour le stockage du contenu temporaire à utiliser pour la publication du brouillon de la définition de service et du fichier de définition de service.
relPath = r'C:\Users\SampleFolder_1' sddraft = os.path.join(relPath, "HOSTED_FEATURE_SERVICE_NAME.sddraft") sd = os.path.join(relPath, "HOSTED_FEATURE_SERVICE_NAME.sd")
  1. Créez un nouveau fichier SDDraft et organisez le brouillon en fichier SD.
print("Creating SD file") arcpy.env.overwriteOutput = True prj = arcpy.mp.ArcGISProject(prjPath) mp = prj.listMaps()[0] arcpy.sharing.CreateSharingDraft(mp, sddraft, sd_fs_name,'MY_HOSTED_SERVICES', 'FEATURE_ACCESS') arcpy.StageService_server(sddraft, sd)
  1. Connectez-vous au portail spécifié.
print("Connecting to {}".format(portal)) gis = GIS(portal, user, password)
  1. Localisez le fichier SD, mettez à jour et écrasez le service sur le portail spécifié.
print("Search 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("Finished updating: {} – ID: {}".format(fs.title, fs.id))

Voici le script complet :

import arcpy import os, sys from arcgis.gis import GIS prjPath = r"C:\Users\SampleFolder\Project_Name.aprx" sd_fs_name = "HOSTED_FEATURE_SERVICE_NAME" portal = "http://www.arcgis.com" # Can also reference a local portal user = "USERNAME" password = "PASSWORD" shrOrg = True shrEveryone = False shrGroups = "" relPath = r'C:\Users\SampleFolder_1' sddraft = os.path.join(relPath, "HOSTED_FEATURE_SERVICE_NAME.sddraft") sd = os.path.join(relPath, "HOSTED_FEATURE_SERVICE_NAME.sd") print("Creating SD file") arcpy.env.overwriteOutput = True prj = arcpy.mp.ArcGISProject(prjPath) mp = prj.listMaps()[0] arcpy.sharing.CreateSharingDraft(mp, sddraft, sd_fs_name,'MY_HOSTED_SERVICES', 'FEATURE_ACCESS') arcpy.StageService_server(sddraft, sd) print("Connecting to {}".format(portal)) gis = GIS(portal, user, password) # Find the SD, update it, publish /w overwrite and set sharing and metadata print("Search 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("Finished updating: {} – ID: {}".format(fs.title, fs.id))

Informations associées

Dernière modification: 11/10/2021

ID d’article: 000023164

Logiciel: ArcGIS Pro 2.4.3, 2.4.2, 2.4.1, 2.4, 2.3.3, 2.3.2, 2.3.1, 2.3, 2.2.4, 2.2.3, 2.2.2, 2.2.1, 2.2, 2.1.3, 2.1.2, 2.1.1, 2.1, 2.0.1, 2.0