Skip To Content

Exemple : publier un service de géotraitement à partir d’un résultat de modèle

Cet exemple de script Python exécute un modèle et publie le résultat sur ArcGIS Server en tant que service de géotraitement.

Le script crée d’abord des couches d’entités et exécute le modèle Extract Data Task (Tâche Exporter les données) à partir de la boîte à outils Outils de serveur. Si l’emplacement de la couche d’entités n’est pas inscrit auprès d’ArcGIS Server, le script appelle arcpy.AddDataStoreItem pour inscrire la base de données ou le dossier. Il invoque ensuite arcpy.CreateGPSDDraft pour créer un fichier brouillon de définition de service (SD) à partir du résultat du modèle.

Si l’analyse du brouillon SD ne détecte aucune erreur, le script passe au service de publication.

Si vous utilisez ArcGIS Pro pour publier sur ArcGIS Server, reportez-vous à la rubrique Publier des services de géotraitement dans un script Python de l’aide d’ArcGIS Pro pour obtenir des instructions.

import arcpy
import os

connPath = "c:/gis/conections/myServer.ags"
sddraft = "c:/gis/gp/drafts/ExtractionDraft.sddraft"
sd = "c:/gis/gp/sd/AnalysisDraft.sd"
serviceName = "DataExtractor"
arcpy.env.workspace = "c:/gis/citydata"

# create layers which will be available as input
arcpy.MakeFeatureLayer_management('Wiarton.gdb/places/Cityhall', 'CityHall')
arcpy.MakeFeatureLayer_management('Wiarton.gdb/places/Airport', 'Airport')
arcpy.MakeFeatureLayer_management('Wiarton.gdb/places/FireStations', 'FireStations')

# run the extract data task and assign it to the 'result' variable
# only the cityhall layer was used as input, but the airport and firestation layers will be used in the service creation
aoi = "c:/gis/citydata/extract.shp"
result = arcpy.ExtractDataTask_server("CityHall", aoi, "File Geodatabase - GDB - .gdb", "ESRI GRID - GRID", os.path.join(arcpy.env.scratchFolder, "output.zip"))

# make sure the folder is registered with the server, if not, add it to the datastore
if arcpy.env.workspace not in [i[2] for i in arcpy.ListDataStoreItems(connPath, 'FOLDER')]:
     # both the client and server paths are the same
     dsStatus = arcpy.AddDataStoreItem(connPath, "FOLDER", "CityData", arcpy.env.workspace, arcpy.env.workspace)
     print "Data store : " + str(dsStatus)


# create service definition draft
arcpy.CreateGPSDDraft(
    result, sddraft, serviceName, server_type="ARCGIS_SERVER",
    connection_file_path=connPath, copy_data_to_server=False, 
    folder_name=None, summary="Extraction Service", tags="extract data, clip")
   

# analyze the service definition draft
analyzeMessages = arcpy.mapping.AnalyzeForSD(sddraft)

# stage and upload the service if the sddraft analysis did not contain errors
if analyzeMessages['errors'] == {}:
    # Execute StageService
    arcpy.StageService_server(sddraft, sd)
    # Execute UploadServiceDefinition
    upStatus = arcpy.UploadServiceDefinition_server(sd, connPath)
    print "Completed upload"
else: 
    # if the sddraft analysis contained errors, display them
    print analysis['errors']