Пример: Регистрация папки с данными во время публикации
В этом примере показывается, как можно запрограммировать регистрацию папки с данными в ArcGIS Server. Регистрация папок и баз данных возможна посредством ArcGIS REST API, но обычно для этой цели проще использовать функции arcpy.
В этом примере папка (в переменной с именем wrkspc) должна содержать и MXD, и исходные данные. Перед запуском этого скрипта вы должны убедиться в том, что учетная запись ArcGIS Server обладает правами доступа к этой папке. Скрипт вызовет arcpy.ListDataStoreItems, чтобы проверить, имеют ли какие-либо из зарегистрированных в ArcGIS Server папок одинаковый путь с этой папкой. Если совпадений обнаружено не будет, скрипт зарегистрирует папку с помощью arcpy.AddDataStoreItem.
В дальнейшем скрипт использует функции arcpy для анализа карты и публикации сервиса.
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()