exportToSDDraft
Краткая информация
Класс MapImageSharingDraft позволяет создавать файл черновика определения сервиса (.sddraft) для слоя изображений карты, который копирует все данные или ссылается на зарегистрированные в ArcGIS Enterprise данные.
Обсуждение
Чтобы создать объект MapImageSharingDraft, используйте метод getWebLayerSharingDraft объекта Map и установите параметр service_type на значение MAP_IMAGE. Объект MapImageSharingDraft можно настроить, задав свойства уровня сервиса и свойства метаданных. Используйте параметр federatedServerUrl, чтобы указать, на каком интегрированном сервере будет опубликован данный веб-слой.
Вы также можете задать свойства веб-слоя, изменив файл .sddraft. Если для свойства не указано значение, используется значение по умолчанию. Поэтому вам необходимо задать нужные значения свойств, даже если вы перезаписываете веб-слой, имеющий существующие настроенные свойства.
Примечание:
Если свойства метаданных (credits, description, summary, tags и useLimitations) не заданы или состоят из пустых строк, элемент веб-слоя будет получать метаданные с карты или слоя, в зависимости от того, что опубликовано. Дополнительные сведения о том, как веб-слои являются источником метаданных, см. в разделе Метаданные веб-слоя.
После настройки объекта MapImageSharingDraft он может быть сохранен в файле черновика определения сервиса (.sddraft) с помощью метода exportToSDDraft. Затем он может быть опубликован в ArcGIS Enterprise с помощью инструментов Промежуточный сервис и Загрузить определение сервиса. Дополнительные сведения см. в разделе Что такое модуль arcpy.sharing.
Примеры кода доступны ниже для следующих задач:
Публикация слоя изображений карты со связанным векторным слоем
Публикация слоя изображения карты, отображающегося на основе имеющегося кэша
Синтаксис
exportToSDDraft()
Свойства
| Имя | Объяснение | Тип данных |
|---|---|---|
|
cache.cacheOnDemand (Чтение / Запись) |
Указывает, будут ли листы, которые не кэшируются, созданы по запросу, когда клиентское приложение запрашивает их. Значение по умолчанию равно |
Boolean |
|
cache.configuration (Чтение / Запись) |
Путь и имя файла предварительно определенного файла схемы листов |
String |
|
cache.exportTiles (Чтение / Запись) |
Указывает, будет ли клиентам разрешено загружать листы кэша для автономного использования. Значение по умолчанию равно |
Boolean |
|
cache.exportTilesCount (Чтение / Запись) |
Максимальное количество листов, которые можно загрузить за один запрос. Это свойство поддерживается, только если для свойства |
Integer |
|
cache.useExistingCache (Чтение / Запись) |
Указывает, будут ли данные извлекаться из существующего кэша. Это свойство поддерживается, только если для свойства |
Boolean |
|
checkUniqueIDAssignment (Чтение / Запись) |
Указывает, будет ли проводиться анализ карты для того, чтобы определить, включена ли опция Разрешить назначение уникальных числовых ID для публикуемых веб-слоев в Свойствах карты. Более подробно см. в Назначение ID слою. |
Boolean |
|
copyDataToServer (Чтение / Запись) |
Устанавливает, будут ли данные карты скопированы на сервер. Значение |
Boolean |
|
credits (Чтение / Запись) |
Кредиты веб-слоя. |
String |
|
description (Чтение / Запись) |
Описание веб-слоя. |
String |
|
enableCache (Чтение / Запись) |
Указывает, будет ли веб-слой динамически отрисовываться из кэша. Значение по умолчанию равно |
Boolean |
|
enableDynamicWorkspaces (Чтение / Запись) |
Указывает, будет ли пользователям разрешено изменять оформление или поведение веб-слоя при отрисовке. Значение по умолчанию равно |
Boolean |
|
extension.feature.allowTrueCurvesUpdates (Чтение / Запись) |
Указывает, будет ли разрешено веб-клиентам заменять геометрию истинных кривых объекта уплотненной геометрией. Это свойство поддерживается, только если включено редактирование. Значение по умолчанию равно |
Boolean |
|
extension.feature.allowUpdateWithoutMValues (Чтение / Запись) |
Указывает, будет ли разрешено обновление геометрии до объектов с m-значениями без указания этого m-значения. Значение по умолчанию равно |
Boolean |
|
extension.feature.featureCapabilities (Чтение / Запись) |
Включенные возможности, разделенные запятыми. Поддерживаются следующие возможности:
|
String |
|
extension.feature.isEnabled (Чтение / Запись) |
Указывает, будет ли включен связанный векторный слой. Значение по умолчанию равно |
Boolean |
|
extension.feature.onlyAllowTrueCurveUpdatesByTrueCurveClients (Чтение / Запись) |
Указывает, будет ли доступ к обновлению геометрии истинной кривой только у клиентов, которые поддерживают истинные кривые, таких как ArcGIS Pro. Это свойство поддерживается, только если включено редактирование. Значение по умолчанию равно |
Boolean |
|
extension.feature.zDefault.enable (Чтение / Запись) |
Указывает, будет ли разрешено редакторам добавлять или обновлять объекты через клиентов, которые не разрешают ввод z-значений. Значение по умолчанию равно |
Boolean |
|
extension.feature.zDefault.value (Чтение / Запись) |
Z-значение по умолчанию, которое будет использоваться для заполнения при добавлении или обновлении объектов. Это свойство поддерживается, только если для свойства |
Double |
|
extension.kml.isEnabled (Чтение / Запись) |
Указывает, будут ли включены возможности KML. Значение по умолчанию равно |
Boolean |
|
extension.linearReferencing.isEnabled (Чтение / Запись) |
Указывает, будет ли включена возможность системы линейных координат. Значение по умолчанию равно |
Boolean |
|
extension.networkAnalysis.isEnabled (Чтение / Запись) |
Указывает, будет ли включен сервис Сетевой анализ. Значение по умолчанию равно |
Boolean |
|
extension.ogcFeature.isEnabled (Чтение / Запись) |
Указывает, будет ли включен Сервис объектов OGC. Значение по умолчанию равно |
Boolean |
|
extension.topographicProduction.isEnabled (Чтение / Запись) |
Указывает, будет ли включена возможность использования инструментов топографии. Значение по умолчанию равно |
Boolean |
|
extension.validation.isEnabled (Чтение / Запись) |
Указывает, будет ли включена возможность проверки. Значение по умолчанию равно |
Boolean |
|
extension.versionManagement.isEnabled (Чтение / Запись) |
Указывает, будет ли включена возможность управления версиями. Значение по умолчанию равно |
Boolean |
|
extension.wcs.isEnabled (Чтение / Запись) |
Указывает, будут ли включены возможности WCS. Значение по умолчанию равно |
Boolean |
|
extension.wfs.isEnabled (Чтение / Запись) |
Указывает, будет ли включен cервис WFS. Значение по умолчанию равно |
Boolean |
|
extension.wms.isEnabled (Чтение / Запись) |
Указывает, будет ли включен cервис WMS. Значение по умолчанию равно |
Boolean |
|
federatedServerUrl (Чтение / Запись) |
URL-адрес интегрированного сервера портала ArcGIS Enterprise. Подсказка:URL интегрированного сервера также может использоваться в параметре |
String |
|
mapOperations (Чтение / Запись) |
Включенные операции, разделенные запятыми. Поддерживаются следующие операции:
|
String |
|
maxRecordCount (Чтение / Запись) |
Максимальное количество записей, возвращаемых сервером во время запроса. Значением по умолчанию является 2000. |
Integer |
|
offline (Чтение / Запись) |
Указывает, требуется ли подключение к порталу. Если установлено значение |
Boolean |
|
offlineTarget (Чтение / Запись) |
Версия целевого сервиса, для которой будет опубликовано определение сервиса. Задание версии позволяет быть уверенным в том, что в определении сервиса содержится контент, совместимый с вашим сервером. Это свойство поддерживается, только если для свойства
|
String |
|
overwriteExistingService (Чтение / Запись) |
Указывает, будет ли перезаписан существующий веб-слой. |
Boolean |
|
pooling.maxInstances (Чтение / Запись) |
Максимальное число экземпляров на компьютер. Это свойство поддерживается, только если для свойства |
Integer |
|
pooling.minInstances (Чтение / Запись) |
Минимальное число экземпляров на компьютер. Это свойство поддерживается, только если для свойства |
Integer |
|
pooling.type (Чтение / Запись) |
Тип слияния сервиса, который будет использоваться.
|
String |
|
portalFolder (Чтение / Запись) |
Имя папки существующего портала, в которой будет опубликован веб-слой. Папкой по умолчанию является корневая папка в Моих ресурсах. |
String |
|
serverFolder (Чтение / Запись) |
Имя папки сервера, в которой будет опубликован сервис. По умолчанию будет использоваться корневой каталог интегрированного сервера. |
String |
|
serverType (Только для чтения) |
Тип сервера, который был указан при создании проекта публикации с помощью функции |
String |
|
serviceName (Чтение / Запись) |
Имя веб-слоя. Это имя будут видеть пользователи и идентифицировать по нему сервис. Имя может содержать только буквы, цифры и знак подчеркивания. В имени нельзя использовать пробелы и специальные символы. Длина имени не должна превышать 120 символов. |
String |
|
sharing.groups (Чтение / Запись) |
Имена групп, разделенные запятыми. |
String |
|
sharing.sharingLevel (Чтение / Запись) |
Уровень доступа веб-слоя.
|
String |
|
summary (Чтение / Запись) |
Краткая информация веб-слоя. |
String |
|
tags (Чтение / Запись) |
Теги веб-слоя. Можно добавить несколько тегов, разделенных запятыми. |
String |
|
useLimitations (Чтение / Запись) |
Ограничения по использованию веб-слоя. |
String |
|
timezone.DaylightSavingTime (Чтение / Запись) |
Указывает, учитывается ли в данном часовом поясе летнее время. Значение по умолчанию равно |
Boolean |
|
timezone.ID (Чтение / Запись) |
Часовой пояс, в котором будут храниться значения дат. Строковое значение должно соответствовать одному из официальных ID часовых поясов, распознаваемых операционной системой Windows. Список часовых поясов приведен в разделе Часовые пояса в документации Microsoft. Примечание:Эта настройка применяется в следующем сценарии:
|
String |
|
timezone.preferredTimezoneID (Чтение / Запись) |
Часовой пояс, который будет использовать ArcGIS Pro при отображении запросов из векторного веб-слоя. Строковое значение должно соответствовать одному из официальных ID часовых поясов, распознаваемых операционной системой Windows. Список часовых поясов приведен в разделе Часовые пояса в документации Microsoft. |
String |
|
timezone.preferredTimezoneIDDaylightSavingTime (Чтение / Запись) |
Указывает, учитывается ли в предпочтительном часовом поясе летнее время. Значение по умолчанию равно |
Boolean |
|
useCIMSymbols (Чтение / Запись) |
Указывает, будут ли использоваться символы Картографической информационной модели Esri (CIM), иначе называемые символами ArcGIS Pro. Установите на Это свойство работает только в том случае, если включен соответствующий векторный слой, а определение сервиса опубликовано в ArcGIS Enterprise 11.3 или более поздней версии. |
Boolean |
Методы
exportToSDDraft(out_sddraft)
Конвертирует MapImageSharingDraft в файл черновика определения сервиса (.sddraft).
| Имя | Объяснение | Тип данных |
|---|---|---|
|
out_sddraft |
A string that represents the path and file name for the output service definition draft ( |
String |
Пример кода
Следующий скрипт создает файл черновика определения сервиса слоя изображений карты (.sddraft) для карты и задает свойства метаданных. Слой изображений карты публикуется в папку ArcGIS Enterprise и попадает в общий доступ (для всех). Информация о портале извлекается из функции SignInToPortal.
import arcpy
import os
# Sign in to portal
arcpy.SignInToPortal("https://organization.example.com/webadaptorname",
"MyUserName", "MyPassword")
# Set output file names
outdir = r"C:\Project\Output"
service_name = "MapImageSharingDraftExample"
sddraft_filename = service_name + ".sddraft"
sddraft_output_filename = os.path.join(outdir, sddraft_filename)
sd_filename = service_name + ".sd"
sd_output_filename = os.path.join(outdir, sd_filename)
# Reference map to publish
aprx = arcpy.mp.ArcGISProject(r"C:\Project\World.aprx")
m = aprx.listMaps('World')[0]
# Create MapImageSharingDraft and set metadata, portal folder, and server folder properties
server_type = "FEDERATED_SERVER"
federated_server_url = "https://gisserver.example.com/webadaptor"
sddraft = m.getWebLayerSharingDraft(server_type, "MAP_IMAGE", service_name)
sddraft.federatedServerUrl = federated_server_url
sddraft.credits = "These are credits"
sddraft.description = "This is description"
sddraft.summary = "This is summary"
sddraft.tags = "tag1, tag2"
sddraft.useLimitations = "These are use limitations"
sddraft.portalFolder = "my folder name"
sddraft.serverFolder = "MyServerFolder"
sddraft.sharing.sharingLevel = "EVERYONE"
sddraft.sharing.groups = "" # Group names = "group1,group2"
# Create Service Definition Draft file
sddraft.exportToSDDraft(sddraft_output_filename)
# Stage Service
print("Start Staging")
arcpy.server.StageService(sddraft_output_filename, sd_output_filename)
# Share to portal
print("Start Uploading")
result = arcpy.server.UploadServiceDefinition(sd_output_filename, federated_server_url)
value_table_op = arcpy.ValueTable(2)
value_table_op.loadFromString(result[11])
for i in range(0, value_table_op.rowCount):
print(value_table_op.getRow(i))
print("Finish Publishing")
Следующий скрипт перезаписывает слой изображений карты. Если имя сервиса уже существует, сервис будет заменен; если нет, то будет создан новый сервис. Если вы хотите, чтобы у веб-слоя были определенные свойства, вам необходимо задать значения свойств, даже если у перезаписываемого веб-слоя уже настроены свойства. В противном случае существующие свойства будут перезаписаны настройками по умолчанию.
import arcpy
import os
# Sign in to portal
arcpy.SignInToPortal("https://organization.example.com/webadaptorname",
"MyUserName", "MyPassword")
# Set output file names
outdir = r"C:\Project\Output"
service_name = "MapImageSharingDraftExample"
sddraft_filename = service_name + ".sddraft"
sddraft_output_filename = os.path.join(outdir, sddraft_filename)
sd_filename = service_name + ".sd"
sd_output_filename = os.path.join(outdir, sd_filename)
# Reference map to publish
aprx = arcpy.mp.ArcGISProject(r"C:\Project\World.aprx")
m = aprx.listMaps('World')[0]
# Create MapImageSharingDraft and set overwrite property
server_type = "FEDERATED_SERVER"
federated_server_url = "https://gisserver.example.com/webadaptor"
sddraft = m.getWebLayerSharingDraft(server_type, "MAP_IMAGE", service_name)
sddraft.federatedServerUrl = federated_server_url
sddraft.overwriteExistingService = True
# Create Service Definition Draft file
sddraft.exportToSDDraft(sddraft_output_filename)
# Stage Service
print("Start Staging")
arcpy.server.StageService(sddraft_output_filename, sd_output_filename)
# Share to portal
print("Start Uploading")
arcpy.server.UploadServiceDefinition(sd_output_filename, federated_server_url)
print("Finish Publishing")
Следующий скрипт создаст черновик файла определения сервиса слоя изображений карты (.sddraft). Он включает в себя векторный слой, задает свойства векторного слоя и слоя изображения карты, а также подготавливает файл .sddraft. Веб-слои публикуются на интегрированном сервере портала ArcGIS Enterprise с использованием дополнительно заданных ID элементов. Хранилище данных должно быть зарегистрировано на сервере, прежде чем на него можно будет ссылаться.
import arcpy
import os
# Sign in to portal
arcpy.SignInToPortal("https://organization.example.com/webadaptorname",
"MyUserName", "MyPassword")
# Set output file names
outdir = r"C:\Project\Output"
service_name = "MapImageSharingDraftExample"
sddraft_filename = service_name + ".sddraft"
sddraft_output_filename = os.path.join(outdir, sddraft_filename)
sd_filename = service_name + ".sd"
sd_output_filename = os.path.join(outdir, sd_filename)
# Reference map to publish
aprx = arcpy.mp.ArcGISProject(r"C:\Project\World.aprx")
m = aprx.listMaps('World')[0]
# Create MapImageSharingDraft, set copyDataToServer property to False to reference registered data, set CIM symbols, and map operations. Include feature layer and enable capabilities.
server_type = "FEDERATED_SERVER"
federated_server_url = "https://gisserver.example.com/webadaptor"
sddraft = m.getWebLayerSharingDraft(server_type, "MAP_IMAGE", service_name)
sddraft.federatedServerUrl = federated_server_url
sddraft.copyDataToServer = False
sddraft.useCIMSymbols = True
sddraft.mapOperations = "Map,Data"
sddraft.extension.feature.isEnabled = True
sddraft.extension.feature.featureCapabilities = "Create,Sync,Query"
# Create Service Definition Draft file
sddraft.exportToSDDraft(sddraft_output_filename)
# Stage Service
print("Start Staging")
arcpy.server.StageService(sddraft_output_filename, sd_output_filename)
# Replace "itemid1" and "itemid2" with desired item IDs.
item_id = "map_image_layer_id itemid1; web_feature_layer_id itemid2"
# Share to portal
print("Start Uploading")
arcpy.server.UploadServiceDefinition(sd_output_filename, federated_server_url, in_item_id=item_id)
print("Finish Publishing")
Следующий скрипт публикует кэшированный слой изображения карты, вызывая инструмент Управление листами кэша картографического сервера для построения листов кэша слоя изображения карты. В процессе обработки файл .sddraft анализируется на предмет наличия ошибок и предупреждений.
import arcpy
import os
# Sign in to portal
arcpy.SignInToPortal("https://organization.example.com/webadaptorname",
"MyUserName", "MyPassword")
# Set output file names
outdir = r"C:\Project\Output"
service_name = "MapImageSharingDraftExample"
sddraft_filename = service_name + ".sddraft"
sddraft_output_filename = os.path.join(outdir, sddraft_filename)
sd_filename = service_name + ".sd"
sd_output_filename = os.path.join(outdir, sd_filename)
# Reference map to publish
aprx = arcpy.mp.ArcGISProject(r"C:\Project\World.aprx")
m = aprx.listMaps('World')[0]
# Create MapImageSharingDraft
server_type = "FEDERATED_SERVER"
federated_server_url = "https://gisserver.example.com/webadaptor"
sddraft = m.getWebLayerSharingDraft(server_type, "MAP_IMAGE", service_name)
sddraft.federatedServerUrl = federated_server_url
sddraft.enableCache = True
sddraft.cache.configuration = r"C:\Program Files\ArcGIS\Pro\Resources\TilingSchemes\WGS84_Geographic_Coordinate_System_V2.xml"
# Create Service Definition Draft file
sddraft.exportToSDDraft(sddraft_output_filename)
try:
# Stage Service
print("Start Staging")
arcpy.server.StageService(sddraft_output_filename, sd_output_filename)
warnings = arcpy.GetMessages(1)
print(warnings)
# Share to portal
print("Start Uploading")
arcpy.server.UploadServiceDefinition(sd_output_filename, federated_server_url)
print("Finish Publishing")
# Manage Map Server Cache Tiles
# For cache, use multiple scales separated by semicolon (;)
# For example, "591657527.591555;295828763.795855"
arcpy.server.ManageMapServerCacheTiles(federated_server_url + "/" + "rest/services" + "/" + service_name + "/" + "MapServer", "295828763.795855", "RECREATE_ALL_TILES")
except Exception as stage_exception:
print("Analyzer errors encountered - {}".format(str(stage_exception)))
except arcpy.ExecuteError:
print(arcpy.GetMessages(2))
Следующий скрипт создаст черновик файла определения сервиса слоя изображений карты (.sddraft). Затем он использует существующий кэш для отрисовки сервиса. После этого файл .sddraft будет обработан и опубликован на интегрированном сервере портала ArcGIS Enterprise.
import arcpy
import os
# Sign in to portal
arcpy.SignInToPortal("https://organization.example.com/webadaptorname",
"MyUserName", "MyPassword")
# Set output file names
outdir = r"C:\Project\Output"
service_name = "MapImageSharingDraftExample"
sddraft_filename = service_name + ".sddraft"
sddraft_output_filename = os.path.join(outdir, sddraft_filename)
sd_filename = service_name + ".sd"
sd_output_filename = os.path.join(outdir, sd_filename)
# Reference map to publish
aprx = arcpy.mp.ArcGISProject(r"C:\Project\World.aprx")
m = aprx.listMaps('World')[0]
# Create MapImageSharingDraft
server_type = "FEDERATED_SERVER"
federated_server_url = "https://gisserver.example.com/webadaptor"
sddraft = m.getWebLayerSharingDraft(server_type, "MAP_IMAGE", service_name)
sddraft.federatedServerUrl = federated_server_url
sddraft.enableCache = True
sddraft.cache.useExistingCache = True
# Create Service Definition Draft file
sddraft.exportToSDDraft(sddraft_output_filename)
# Stage Service
print("Start Staging")
arcpy.server.StageService(sddraft_output_filename, sd_output_filename)
# Share to portal
print("Start Uploading")
arcpy.server.UploadServiceDefinition(sd_output_filename, federated_server_url)
print("Finish Publishing")
Следующий скрипт создает черновик файла определения сервиса (.sddraft) для слоя изображений карты. В процессе обработки файл .sddraft анализируется. Если появится ошибка 24011, предупреждающая о том, что источник данных не зарегистрирован на сервере, хранилище данных будет зарегистрировано с помощью модуля arcgis.gis в ArcGIS API for Python.
import arcpy
import os
# Add a data store item on the portal and register it with a federated server
def register_datastore_item(portal_url, username, password, sde_conn_file, data_store_name, federated_server_url):
from arcgis.gis import GIS
tags = "tag1, tag2"
description = "Data Store Item created from ArcGIS API for Python"
federated_server_url = federated_server_url.rstrip('/')
federated_server_adminurl = federated_server_url + "/admin"
# Connect to your portal using ArcGIS API for Python
gis = GIS(url=portal_url, username=username, password=password)
# Get federated server ID
server_list = gis.servers["servers"]
fedserver_dict = [srvr for srvr in server_list if srvr["url"] == federated_server_url][0]
fedserver_id = fedserver_dict["id"]
print("Server id: " + fedserver_id)
# Get federated server's DatastoreManager object
fedserver = [srvr for srvr in gis.admin.servers.list() if srvr.url == federated_server_adminurl][0]
fedserver_dsmgr = fedserver.datastores
# Create a connection string from .sde file connection
conn_file = sde_conn_file
conn_string = fedserver_dsmgr.generate_connection_string(conn_file)
print("Connection string generated")
# Create a dictionary for data store configuration
ds_config = {"type": "egdb",
"path": "/enterpriseDatabases/" + data_store_name,
"info": {"isManaged": "false",
"dataStoreConnectionType": "shared",
"connectionString": conn_string}
}
# Create a dictionary for the item properties
item_properties = {"title": data_store_name,
"type": "Data Store",
"tags": tags,
"snippet": description}
# Add the data store item to the portal
ds_item = gis.content.add(item_properties=item_properties,
text=ds_config)
print("Data store item added")
# Get portal data store
portal_ds = gis.datastore
# Validate the data store item can be connected to before registering
validation_state = portal_ds.validate(server_id=fedserver_id,
item=ds_item)
print("Data store item validated")
# Register the database with the federated server
portal_ds.register(item=ds_item,
server_id=fedserver_id,
bind=False)
print("Data store item registered to server")
return True
if __name__ == "__main__":
arcpy.env.overwriteOutput = True
portal_url = "https://organization.example.com/webadaptorname"
username = "MyUserName"
password = "MyPassword"
# Sign in to portal
arcpy.SignInToPortal(portal_url, username, password)
# Set output file names
outdir = r"C:\Project\Output"
service_name = "registerdatastore_example"
sddraft_filename = service_name + ".sddraft"
sddraft_output_filename = os.path.join(outdir, sddraft_filename)
sd_filename = service_name + ".sd"
sd_output_filename = os.path.join(outdir, sd_filename)
sde_conn_file = r"C:\Project\db_conn.sde"
data_store_name = "PortalDSItem"
# Reference map to publish
aprx = arcpy.mp.ArcGISProject(r"C:\Project\World.aprx")
m = aprx.listMaps('Map')[0]
# Create MapImageSharingDraft and set copyDataToServer property to False to reference registered data
server_type = "FEDERATED_SERVER"
federated_server_url = "https://gisserver.example.com/webadaptor"
sddraft = m.getWebLayerSharingDraft(server_type, "MAP_IMAGE", service_name)
sddraft.federatedServerUrl = federated_server_url
sddraft.copyDataToServer = False
# Create Service Definition Draft file
sddraft.exportToSDDraft(sddraft_output_filename)
# Stage the service and analyze the .sddraft file for registered data store
# Continue publishing only if data store is registered
print("Start Staging")
stage_service = True
while stage_service:
arcpy.server.StageService(sddraft_output_filename, sd_output_filename)
# Get analyzer warnings to check if data store is registered
warnings = arcpy.GetMessages(1)
print(warnings)
# If data store is not registered
if "24011" in warnings:
# Register data store
register_res = register_datastore_item(portal_url, username, password, sde_conn_file, data_store_name,
federated_server_url)
if not register_res:
print("Unable to register the data store, skipping upload")
exit()
# Stage the service again
stage_service = True
else:
stage_service = False
# Share to portal
print("Start Uploading")
arcpy.server.UploadServiceDefinition(sd_output_filename, federated_server_url)
print("Finish Publishing")
Следующий скрипт создаст черновик файла определения сервиса слоя изображений карты (.sddraft). Затем он задаст часовой пояс слоев с полями дат и настроит параметры экземпляра сервиса. После этого файл .sddraft будет обработан и опубликован на интегрированном сервере портала ArcGIS Enterprise. Хранилище данных должно быть зарегистрировано на сервере, прежде чем на него можно будет ссылаться.
import arcpy
import os
# Sign in to portal
arcpy.SignInToPortal("https://organization.example.com/webadaptorname",
"MyUserName", "MyPassword")
# Set output file names
outdir = r"C:\Project\Output"
service_name = "MapImageSharingDraftExample"
sddraft_filename = service_name + ".sddraft"
sddraft_output_filename = os.path.join(outdir, sddraft_filename)
sd_filename = service_name + ".sd"
sd_output_filename = os.path.join(outdir, sd_filename)
# Reference map to publish
aprx = arcpy.mp.ArcGISProject(r"C:\Project\World.aprx")
m = aprx.listMaps('World')[0]
# Create MapImageSharingDraft and set time zone, enable version management, and configure pooling options
server_type = "FEDERATED_SERVER"
federated_server_url = "https://MyFederatedServer.esri.com/serverWebadaptor"
sddraft = m.getWebLayerSharingDraft(server_type, "MAP_IMAGE", service_name)
sddraft.federatedServerUrl = federated_server_url
sddraft.copyDataToServer = False
sddraft.pooling.type = "DEDICATED"
sddraft.pooling.minInstances = 0
sddraft.pooling.maxInstances = 2
sddraft.timezone.ID = "Pacific Standard Time"
sddraft.timezone.DaylightSavingTime = True
sddraft.extension.versionManagement.isEnabled = True
# Create Service Definition Draft file
sddraft.exportToSDDraft(sddraft_output_filename)
# Stage Service
print("Start Staging")
arcpy.server.StageService(sddraft_output_filename, sd_output_filename)
# Share to portal
print("Start Uploading")
arcpy.server.UploadServiceDefinition(sd_output_filename, federated_server_url)
print("Finish Publishing")
Следующий скрипт публикует слой и таблицу как слой изображений карты на портале ArcGIS Enterprise.
import arcpy
import os
# Sign in to portal
arcpy.SignInToPortal("https://organization.example.com/webadaptorname",
"MyUserName", "MyPassword")
# Set output file names
outdir = r"C:\Project\Output"
service_name = "MapImageSharingDraftExample"
sddraft_filename = service_name + ".sddraft"
sddraft_output_filename = os.path.join(outdir, sddraft_filename)
sd_filename = service_name + ".sd"
sd_output_filename = os.path.join(outdir, sd_filename)
# Reference layers to publish
aprx = arcpy.mp.ArcGISProject(r"C:\Project\World.aprx")
m = aprx.listMaps('World')[0]
selected_layer = m.listLayers('States')[0]
selected_table = m.listTables('Cities')[0]
# Create MapImageSharingDraft
server_type = "FEDERATED_SERVER"
federated_server_url = "https://gisserver.example.com/webadaptor"
sddraft = m.getWebLayerSharingDraft(server_type, "MAP_IMAGE", service_name, [selected_layer, selected_table])
sddraft.federatedServerUrl = federated_server_url
# Create Service Definition Draft file
sddraft.exportToSDDraft(sddraft_output_filename)
# Stage Service
print("Start Staging")
arcpy.server.StageService(sddraft_output_filename, sd_output_filename)
# Share to portal
print("Start Uploading")
arcpy.server.UploadServiceDefinition(sd_output_filename, federated_server_url)
print("Finish Publishing")
Следующий скрипт создает определение автономного сервиса для версии целевого сервера и публикует его как слой изображений карты.
import arcpy
import os
# Set output file names
outdir = r"C:\Project\Output"
service_name = "MapImageSharingDraftExample"
sddraft_filename = service_name + ".sddraft"
sddraft_output_filename = os.path.join(outdir, sddraft_filename)
sd_filename = service_name + ".sd"
sd_output_filename = os.path.join(outdir, sd_filename)
# Reference map to publish
aprx = arcpy.mp.ArcGISProject(r"C:\Project\World.aprx")
m = aprx.listMaps('World')[0]
# Create MapImageSharingDraft and set offline and offlineTarget properties
server_type = "FEDERATED_SERVER"
sddraft = m.getWebLayerSharingDraft(server_type, "MAP_IMAGE", service_name)
sddraft.offline = True
# Set offlineTarget property to "ENTERPRISE_11" for ArcGIS Enterprise 11.0 or later
# The default is ArcGIS Enterprise 10.9.1 or earlier
sddraft.offlineTarget = "ENTERPRISE_10x"
# Create Service Definition Draft file
sddraft.exportToSDDraft(sddraft_output_filename)
# Stage Service
print("Start Staging")
arcpy.server.StageService(sddraft_output_filename, sd_output_filename)
# Sign in to portal to upload and publish
arcpy.SignInToPortal("https://organization.example.com/webadaptorname",
"MyUserName", "MyPassword")
# Share to portal
print("Start Uploading")
arcpy.server.UploadServiceDefinition(sd_output_filename, "https://gisserver.example.com/webadaptor")
print("Finish Publishing")
Следующий скрипт создает файл черновика определения сервиса слоя изображений карты (.sddraft), который активирует свойство checkUniqueIDAssignment. В процессе обработки файл .sddraft анализируется. Если карта не настроена на назначение уникальных числовых ID для публикации веб-слоев, возвращается ошибка анализатора 00374 и печатается сообщение. Более подробно см. в Назначение ID слою.
import arcpy
import os
# Sign in to portal
arcpy.SignInToPortal("https://organization.example.com/webadaptorname",
"MyUserName", "MyPassword")
# Set output file names
outdir = r"C:\Project\Output"
service_name = "MapImageSharingDraftExample"
sddraft_filename = service_name + ".sddraft"
sddraft_output_filename = os.path.join(outdir, sddraft_filename)
sd_filename = service_name + ".sd"
sd_output_filename = os.path.join(outdir, sd_filename)
# Reference map to publish
aprx = arcpy.mp.ArcGISProject(r"C:\Project\World.aprx")
m = aprx.listMaps('World')[0]
# Create MapImageSharingDraft and set the check unique ID assignment property
server_type = "FEDERATED_SERVER"
federated_server_url = "https://gisserver.example.com/webadaptor"
sddraft = m.getWebLayerSharingDraft(server_type, "MAP_IMAGE", service_name)
sddraft.federatedServerUrl = federated_server_url
sddraft.checkUniqueIDAssignment = True
# Create Service Definition Draft file
sddraft.exportToSDDraft(sddraft_output_filename)
try:
# Stage Service
print("Start Staging")
arcpy.server.StageService(sddraft_output_filename, sd_output_filename)
# Share to portal
print("Start Uploading")
arcpy.server.UploadServiceDefinition(sd_output_filename, federated_server_url)
print("Finish Publishing")
except Exception as stage_exception:
if "00374" in str(stage_exception):
print("The map is not set to allow assignment of unique IDs")
print("Analyzer errors encountered - {}".format(str(stage_exception)))
except arcpy.ExecuteError:
print(arcpy.GetMessages(2))