Deutsch

How To: Überschreiben von gehosteten Feature-Services aus ArcGIS Pro in ArcGIS Online mithilfe von Python

Zusammenfassung

Es ist möglich, mit dem Modul "arcgis.gis" als Workaround einen gehosteten Feature-Service zu überschreiben. Dieses Modul wird verwendet, um die bekannte Einschränkung des ArcPy-Moduls mit ArcGIS Online-Anmeldeinformationen in einem Python-Skript zu umgehen. Mit dem Python-Skript kann dieser Prozess automatisiert werden. Erforderlich ist dafür aber Python 3, das in einer ArcGIS Pro-Installation enthalten ist.

Dieser Artikel enthält Anweisungen zum Angeben der Module und Anmeldeinformationen, zum Erstellen der Service-Definitionsdatei (SD) und zum Veröffentlichen.

Hinweis: Dieses Verfahren funktioniert nur für gehostete Feature-Services mit vorhandenen Service-Definitionsdateien.

Vorgehensweise

  1. Importieren Sie die erforderlichen Module.
import arcpy import os, sys from arcgis.gis import GIS
  1. Geben Sie den Speicherort der Projektdatei (.aprx) an.
prjPath = r"C:\Users\SampleFolder\Project_Name.aprx"
  1. Geben Sie den Namen des Feature-Service in ArcGIS Online mit den Anmeldeinformationen des Besitzers an.
sd_fs_name = "hosted feature service name" portal = "http://www.arcgis.com" user = "USERNAME" password = "PASSWORD"
  1. Legen Sie die gewünschten Freigabeoptionen fest. Im folgenden Codebeispiel wird festgelegt, dass der Service nur für die Organisation freigegeben werden soll.
shrOrg = True shrEveryone = False shrGroups = ""
  1. Geben Sie einen lokalen Pfad zum Speichern der temporären Inhalte an, die beim Veröffentlichen der Service-Definitionsentwurfsdatei (SDDraft) und der Service-Definitionsdatei (SD) verwendet werden sollen.
relPath = r'C:\Users\SampleFolder_1' sddraft = os.path.join(relPath, "temporary service name.sddraft") sd = os.path.join(relPath, "temporary service name.sd")
  1. Erstellen Sie eine neue SDDraft-Datei, und stellen Sie den Entwurf für die SD-Datei bereit.
Hinweis: Behalten Sie im Abschnitt "sharing_draft = mp.getWebLayerSharingDraft("HOSTING_SERVER", "FEATURE", sd_fs_name)" die Parameter "HOSTING_SERVER" und "FEATURE" als Standardparameter bei. Ändern Sie nur den definierten Parameter "sd_fs_name" mit dem gleichen Variablennamen, den der Benutzer definiert hat.
print("Creating SD file") arcpy.env.overwriteOutput = True prj = arcpy.mp.ArcGISProject(prjPath) mp = prj.listMaps()[0] #define a new object to utilize the getWebLayerSharingDraft function with HOSTING_SERVER and FEATURE as the default parameters sharing_draft = mp.getWebLayerSharingDraft("HOSTING_SERVER", "FEATURE", sd_fs_name) sharing_draft.summary = "My Summary" sharing_draft.tags = "My Tags" sharing_draft.description = "My Description" sharing_draft.credits = "My Credits" sharing_draft.useLimitations = "My Use Limitations" sharing_draft.exportToSDDraft(sddraft) arcpy.StageService_server(sddraft, sd)
  1. Stellen Sie eine Verbindung zum angegebenen Portal her.
print("Connecting to {}".format(portal)) gis = GIS(portal, user, password)
  1. Suchen Sie die in Schritt 3 angegebene SD-Datei, und aktualisieren und überschreiben Sie den Service im angegebenen Portal.
print("Search for original SD on portal…") print(f"Query: {sd_fs_name}") sdItem = gis.content.search(query=sd_fs_name, item_type="Service Definition") i = 0 while sdItem[i].title != sd_fs_name:             i += 1 print('"Item Found") print(f'item[i].title = {sdItem[i].title}, sd_fs_name = {sd_fs_name}') item = sdItem[i]  item.update(data=sd) print("Overwriting existing feature service…") fs = item.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))

Nachfolgend finden Sie das vollständige Skript:

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' sddraft = os.path.join(relPath, "temporary service name.sddraft") sd = os.path.join(relPath, "temporary service name.sd") print("Creating SD file") arcpy.env.overwriteOutput = True prj = arcpy.mp.ArcGISProject(prjPath) mp = prj.listMaps()[0] sharing_draft = mp.getWebLayerSharingDraft("HOSTING_SERVER", "FEATURE", sd_fs_name) sharing_draft.summary = "My Summary" sharing_draft.tags = "My Tags" sharing_draft.description = "My Description" sharing_draft.credits = "My Credits" sharing_draft.useLimitations = "My Use Limitations" sharing_draft.exportToSDDraft(sddraft) 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…") print(f"Query: {sd_fs_name}") sdItem = gis.content.search(query=sd_fs_name, item_type="Service Definition") i=0 while sdItem[i].title != sd_fs_name:             i += 1 print('Item Found') print(f'item[i].title = {sdItem[i].title}, sd_fs_name = {sd_fs_name}') item = sdItem[i]  item.update(data=sd) print("Overwriting existing feature service…") fs = item.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))

Referenzinformationen

Zuletzt geändert: 11/10/2021

Artikel-ID: 000023164

Software: 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