Español
Continue in the app
Be The First To Get Support Updates
Want to know about the latest technical content and software updates?

Cómo: Sobrescribir servicios de entidades alojados de ArcGIS Pro a ArcGIS Online utilizando Python

Resumen

Es posible sobrescribir un servicio de entidades alojado utilizando arcgis.gis.module como alternativa. El módulo se utiliza para superar la limitación conocida del módulo ArcPy, con credenciales de ArcGIS Online en un script de Python. El script de Python permite automatizar el proceso. Sin embargo, Python 3, que se incluye en una instalación de ArcGIS Pro, es obligatorio.

Este artículo proporciona instrucciones para especificar los módulos y credenciales, crear el archivo de definición de servicio (SD) y publicar.

Nota: Este procedimiento solo funciona en servicios de entidades alojados con archivos de definición de servicio existentes.

Procedimiento

  1. Importe los módulos necesarios.
import arcpy import os, sys from arcgis.gis import GIS
  1. Especifique la ubicación del archivo de proyecto (.aprx).
prjPath = r"C:\Users\SampleFolder\Project_Name.aprx"
  1. Especifique el nombre del servicio de entidades en ArcGIS Online, incluidas las credenciales del propietario.
sd_fs_name = "hosted feature service name" portal = "http://www.arcgis.com" user = "USERNAME" password = "PASSWORD"
  1. Defina las opciones de uso compartido deseadas. La siguiente muestra de código establece el servicio que se va a compartir solo con la organización.
shrOrg = True shrEveryone = False shrGroups = ""
  1. Especifique una ruta local para almacenar contenido temporal que se utilizará para publicar el borrador de definición de servicio y el archivo de definición de servicio.
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. Cree un nuevo archivo SDDraft y prepare el borrador para el archivo SD.
Nota: En la sección sharing_draft = mp.getWebLayerSharingDraft("HOSTING_SERVER", "FEATURE", sd_fs_name), mantenga los parámetros "HOSTING_SERVER" y "FEATURE" como parámetro predeterminado. Edite únicamente el parámetro definido, sd_fs_name, con el mismo nombre de variable definido por el usuario.
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. Conéctese al portal especificado.
print("Connecting to {}".format(portal)) gis = GIS(portal, user, password)
  1. Localice el archivo SD especificado en el paso 3, actualice y sobrescriba el servicio en el portal especificado.
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))

A continuación, se muestra el script completo:

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))

Información relacionada

Última modificación: 11/10/2021

Id. de artículo: 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