Skip To Content

Beispiel: Einen Datenordner beim Veröffentlichen registrieren

In diesem Beispiel wird gezeigt, wie Sie einen Datenordner programmgesteuert bei ArcGIS for Server registrieren können. Die Registrierung von Ordnern und Datenbanken erfolgt über die ArcGIS-REST-API, es ist jedoch einfacher, die ArcPy-Funktion zu verwenden.

In diesem Beispiel muss der Ordner (gekennzeichnet durch die Variable wrkspc) sowohl die MXD als auch die Quelldaten enthalten. Stellen Sie sicher, dass das ArcGIS for Server-Konto über Berechtigungen für den Ordner verfügt, bevor Sie das Skript ausführen. Das Skript ruft "arcpy.ListDataStoreItems", um zu prüfen, ob bei ArcGIS for Server Ordner registriert sind, die den gleichen Pfad wie der Ordner haben. Wenn keine Übereinstimmungen gefunden werden, registriert das Skript den Ordner mit "arcpy.AddDataStoreItem".

Der Rest des Skripts verwendet ArcPy-Funktionen, um die Karte zu analysieren und den Service zu veröffentlichen.

import arcpy
import os
arcpy.env.overwriteOutput = True

# Path to ArcGIS Server connection file
connPath = "C:/data/connections/myserver.ags"

# Folder containing data and MXD
wrkspc = "C:/data/Tulsa/"
mapName = "Parcels.mxd"

# Service metadata
service = "TulsaParcels"
summary = "Shows cadastral data in Tulsa"
tags = "Tulsa, cadastre, parcels"

# make sure the folder is registered with the server, if not, add it to the datastore
if wrkspc 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", "Workspace for " + service, wrkspc, wrkspc)
     print "Data store : " + str(dsStatus)

# Provide other service details
mapDoc = arcpy.mapping.MapDocument(os.path.join(wrkspc, mapName))
sddraft = os.path.join(wrkspc, service + '.sddraft')
sd = os.path.join(wrkspc, service + '.sd')

# Create service definition draft
arcpy.mapping.CreateMapSDDraft(mapDoc, sddraft, service, 'ARCGIS_SERVER', connPath, True, None, summary, tags)

# Analyze the service definition draft
analysis = arcpy.mapping.AnalyzeForSD(sddraft)

# Print errors, warnings, and messages returned from the analysis
print "The following information was returned during analysis of the MXD:"
for key in ('messages', 'warnings', 'errors'):
  print '----' + key.upper() + '---'
  vars = analysis[key]
  for ((message, code), layerlist) in vars.iteritems():
    print '    ', message, ' (CODE %i)' % code
    print '       applies to:',
    for layer in layerlist:
        print layer.name,
    print

# Stage and upload the service if the sddraft analysis did not contain errors
if analysis['errors'] == {}:
    # Execute StageService. This creates the service definition.
    arcpy.StageService_server(sddraft, sd)

    # Execute UploadServiceDefinition. This uploads the service definition and publishes the service.
    arcpy.UploadServiceDefinition_server(sd, connPath)
    print "Service successfully published"
else: 
    print "Service could not be published because errors were found during analysis."

print arcpy.GetMessages()