Краткая информация
Класс 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.
Примеры кода доступны для следующего:
- Публикация слоя изображений карты в папку портала
- Перезапись слоя изображений карты
- Публикация слоя изображений карты со связанным векторным слоем
- Публикация кэшированного слоя изображения карты
- Публикация слоя изображения карты, отображающегося на основе имеющегося кэша
- Анализ и регистрация хранилища данных
- Задание часового пояса и настройка слияния сервисов
- Публикация слоя и таблицы
- Создание и публикация определения автономнго сервиса
- Анализируйте, чтобы убедиться, что карта настроена так, чтобы разрешить присвоение уникальных числовых ID
Свойства
Свойство | Описание | Тип данных |
cache.cacheOnDemand (чтение и запись) | Указывает, будут ли листы, которые не кэшируются, созданы по запросу, когда клиентское приложение запрашивает их. Значение по умолчанию равно False. | Boolean |
cache.configuration (чтение и запись) | Путь и имя файла предварительно определенного файла схемы листов .xml, созданного с помощью инструмента Создать схему листов кэша картографического сервиса. | String |
cache.exportTiles (чтение и запись) | Указывает, будет ли клиентам разрешено загружать листы кэша для автономного использования. Значение по умолчанию равно False. | Boolean |
cache.exportTilesCount (чтение и запись) | Максимальное количество листов, которые можно загрузить за один запрос. Это свойство поддерживается, только если для свойства cache.exportTiles задано True. Значение по умолчанию равно 100000. | Integer |
cache.useExistingCache (чтение и запись) | Указывает, будут ли данные извлекаться из существующего кэша. Это свойство поддерживается, только если для свойства enableCache задано True. Значение по умолчанию равно False. | Boolean |
checkUniqueIDAssignment (чтение и запись) | Указывает, будет ли проводиться анализ карты для того, чтобы определить, включена ли опция Разрешить назначение уникальных числовых ID для публикуемых веб-слоев в Свойствах карты. Более подробно см. в Назначение ID слою. | Boolean |
copyDataToServer (чтение и запись) | Устанавливает, будут ли данные карты скопированы на сервер. Значение True позволяет копировать все данные в карте, включая данные, которые зарегистрированы на интегрированном сервере. Значение False скопирует только данные, которые не зарегистрированы на интегрированном сервере. Сервис будет использовать данные, которые зарегистрированы на вашем интегрированном сервере. Значение по умолчанию равно False. | Boolean |
credits (чтение и запись) | Кредиты веб-слоя. | String |
description (чтение и запись) | Описание веб-слоя. | String |
enableCache (чтение и запись) | Указывает, будет ли веб-слой динамически отрисовываться из кэша. Значение по умолчанию равно False. | Boolean |
enableDynamicWorkspaces (чтение и запись) | Указывает, будет ли пользователям разрешено изменять оформление или поведение веб-слоя при отрисовке. Значение по умолчанию равно True. | Boolean |
extension.feature.allowTrueCurvesUpdates (чтение и запись) | Указывает, будет ли разрешено веб-клиентам заменять геометрию истинных кривых объекта уплотненной геометрией. Это свойство поддерживается, только если включено редактирование. Значение по умолчанию равно True. | Boolean |
extension.feature.allowUpdateWithoutMValues (чтение и запись) | Указывает, будет ли разрешено обновление геометрии до объектов с m-значениями без указания этого m-значения. Значение по умолчанию равно False. | Boolean |
extension.feature.featureCapabilities (чтение и запись) | Включенные возможности, разделенные запятыми. Поддерживаются следующие возможности:
| String |
extension.feature.isEnabled (чтение и запись) | Указывает, будет ли включен связанный векторный слой. Значение по умолчанию равно False. | Boolean |
extension.feature.onlyAllowTrueCurveUpdatesByTrueCurveClients (чтение и запись) | Указывает, будет ли доступ к обновлению геометрии истинной кривой только у клиентов, которые поддерживают истинные кривые, таких как ArcGIS Pro. Это свойство поддерживается, только если включено редактирование. Значение по умолчанию равно True. | Boolean |
extension.feature.zDefault.enable (чтение и запись) | Указывает, будет ли разрешено редакторам добавлять или обновлять объекты через клиентов, которые не разрешают ввод z-значений. Значение по умолчанию равно False. | Boolean |
extension.feature.zDefault.value (чтение и запись) | Z-значение по умолчанию, которое будет использоваться для заполнения при добавлении или обновлении объектов. Это свойство поддерживается, только если для свойства zDefault.enable задано True. По умолчанию значение равно 0. | Double |
extension.kml.isEnabled (чтение и запись) | Указывает, будут ли включены возможности KML. Значение по умолчанию равно False. | Boolean |
extension.linearReferencing.isEnabled (чтение и запись) | Указывает, будет ли включена возможность системы линейных координат. Значение по умолчанию равно False. | Boolean |
extension.networkAnalysis.isEnabled (чтение и запись) | Указывает, будет ли включен сервис Сетевой анализ. Значение по умолчанию равно False. | Boolean |
extension.ogcFeature.isEnabled (чтение и запись) | Указывает, будет ли включен Сервис объектов OGC. Значение по умолчанию равно False. | Boolean |
extension.topographicProduction.isEnabled (чтение и запись) | Указывает, будет ли включена возможность использования инструментов топографии. Значение по умолчанию равно False. | Boolean |
extension.validation.isEnabled (чтение и запись) | Указывает, будет ли включена возможность проверки. Значение по умолчанию равно False. | Boolean |
extension.versionManagement.isEnabled (чтение и запись) | Указывает, будет ли включена возможность управления версиями. Значение по умолчанию равно False. | Boolean |
extension.wcs.isEnabled (чтение и запись) | Указывает, будут ли включены возможности WCS. Значение по умолчанию равно False. | Boolean |
extension.wfs.isEnabled (чтение и запись) | Указывает, будет ли включен cервис WFS. Значение по умолчанию равно False. | Boolean |
extension.wms.isEnabled (чтение и запись) | Указывает, будет ли включен cервис WMS. Значение по умолчанию равно False. | Boolean |
federatedServerUrl (чтение и запись) | URL-адрес интегрированного сервера портала ArcGIS Enterprise. Подсказка:URL интегрированного сервера также может использоваться в параметре in_server для инструмента Выгрузить определение сервиса. | String |
mapOperations (чтение и запись) | Включенные операции, разделенные запятыми. Поддерживаются следующие операции:
| String |
maxRecordCount (чтение и запись) | Максимальное количество записей, возвращаемых сервером во время запроса. Значением по умолчанию является 2000. | Integer |
offline (чтение и запись) | Указывает, требуется ли подключение к порталу. Если установлено значение False, вы должны войти на портал, а также указать URL-адрес интегрированного сервера портала ArcGIS Enterprise для свойства federatedServerUrl, чтобы создать черновик файла определения сервиса (.sddraft) с помощью функции exportToSDDraft. Если задано значение True, файл черновика определения сервиса может быть создан без выполнения входа в портал и без указания свойства federatedServerUrl. | Boolean |
offlineTarget (чтение и запись) | Версия целевого сервиса, для которой будет опубликовано определение сервиса. Задание версии позволяет быть уверенным в том, что в определении сервиса содержится контент, совместимый с вашим сервером. Это свойство поддерживается, только если для свойства offline задано True.
| String |
overwriteExistingService (чтение и запись) | Указывает, будет ли перезаписан существующий веб-слой. | Boolean |
pooling.maxInstances (чтение и запись) | Максимальное число экземпляров на компьютер. Это свойство поддерживается, только если для свойства pooling.type задано DEDICATED. | Integer |
pooling.minInstances (чтение и запись) | Минимальное число экземпляров на компьютер. Это свойство поддерживается, только если для свойства pooling.type задано DEDICATED. | Integer |
pooling.type (чтение и запись) | Тип слияния сервиса, который будет использоваться.
| String |
portalFolder (чтение и запись) | Имя папки существующего портала, в которой будет опубликован веб-слой. Папкой по умолчанию является корневая папка в Моих ресурсах. | String |
serverFolder (чтение и запись) | Имя папки сервера, в которой будет опубликован сервис. По умолчанию будет использоваться корневой каталог интегрированного сервера. | String |
serverType (только чтение) | Тип сервера, который был указан при создании проекта публикации с помощью функции getWebLayerSharingDraft из класса map. Единственно возможное значение, которое возвращается из serverType для MapImageSharingDraft – FEDERATED_SERVER. Значение serverType FEDERATED_SERVER указывает на поддержку публикации на интегрированный сервер портала ArcGIS Enterprise. | String |
serviceName (чтение и запись) | Имя веб-слоя. Это имя будут видеть пользователи и идентифицировать по нему сервис. Имя может содержать только буквы, цифры и знак подчеркивания. В имени нельзя использовать пробелы и специальные символы. Длина имени не должна превышать 120 символов. | String |
sharing.groups (чтение и запись) | Имена групп, разделенные запятыми. | String |
sharing.sharingLevel (чтение и запись) | Уровень доступа веб-слоя.
| String |
summary (чтение и запись) | Краткая информация веб-слоя. | String |
tags (чтение и запись) | Теги веб-слоя. Можно добавить несколько тегов с разделителем запятой. | String |
useLimitations (чтение и запись) | Ограничения по использованию веб-слоя. | String |
timezone.DaylightSavingTime (чтение и запись) | Указывает, учитывается ли в данном часовом поясе летнее время. Значение по умолчанию равно False. | Boolean |
timezone.ID (чтение и запись) | Часовой пояс, в котором хранятся значения дат. Строковое значение должно соответствовать одному из официальных ID часовых поясов, распознаваемых операционной системой Windows. Список часовых поясов приведен в разделе Часовые пояса в документации Microsoft. | String |
timezone.preferredTimezoneID (чтение и запись) | Часовой пояс для ArcGIS Pro, который будет использоваться при отображении запросов из векторного веб-слоя. Строковое значение должно соответствовать одному из официальных ID часовых поясов, распознаваемых операционной системой Windows. Список часовых поясов приведен в разделе Часовые пояса в документации Microsoft. | String |
timezone.preferredTimezoneIDDaylightSavingTime (чтение и запись) | Указывает, учитывается ли в предпочтительном часовом поясе летнее время. Значение по умолчанию равно False. | Boolean |
useCIMSymbols (чтение и запись) | Указывает, будут ли использоваться символы Картографической информационной модели Esri (CIM), иначе называемые символами ArcGIS Pro. Установите на False, чтобы использовать символы, которые могут отображаться всеми клиентами. Установите на True, чтобы использовать символы CIM, которые поддерживаются в более новых клиентах, таких как ArcGIS API for JavaScript 4.x. Это свойство работает только в том случае, если включен соответствующий векторный слой, а определение сервиса опубликовано в ArcGIS Enterprise 11.3 или более поздней версии. | Boolean |
Обзор метода
Метод | Описание |
exportToSDDraft (out_sddraft) | Конвертирует MapImageSharingDraft в файл черновика определения сервиса (.sddraft). |
Методы
exportToSDDraft (out_sddraft)
Параметр | Описание | Тип данных |
out_sddraft | A string that represents the path and file name for the output service definition draft (.sddraft) file. | String |
После настройки MapImageSharingDraft, его можно сохранить как файл определения сервиса (.sddraft). Затем он может быть опубликован на интегрированном сервере портала ArcGIS Enterprise с помощью инструментов Промежуточный сервис и Загрузить определение сервиса.
Пример кода
Следующий скрипт создает файл черновика определения сервиса слоя изображений карты (.sddraft) для карты и задает свойства метаданных. Слой изображений карты публикуется в папку ArcGIS Enterprise и попадает в общий доступ (для всех). Информация о портале извлекается из функции SignInToPortal.
import arcpy
import os
# Sign in to portal
arcpy.SignInToPortal("https://portal.domain.com/webadaptor",
"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://MyFederatedServer.domain.com/serverWebadaptor"
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")
arcpy.server.UploadServiceDefinition(sd_output_filename, federated_server_url)
print("Finish Publishing")
Следующий скрипт перезаписывает слой изображений карты. Если имя сервиса уже существует, сервис будет заменен; если нет, то будет создан новый сервис. Если вы хотите, чтобы у вашего веб-слоя были определенные свойства, вам необходимо задать значения свойств, даже если у перезаписываемого веб-слоя уже настроены свойства. В противном случае существующие свойства будут перезаписаны настройками по умолчанию.
import arcpy
import os
# Sign in to portal
arcpy.SignInToPortal("https://portal.domain.com/webadaptor",
"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://MyFederatedServer.domain.com/serverWebadaptor"
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. Хранилище данных должно быть зарегистрировано на сервере, прежде чем на него можно будет ссылаться.
import arcpy
import os
# Sign in to portal
arcpy.SignInToPortal("https://portal.domain.com/webadaptor",
"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://MyFederatedServer.esri.com/serverWebadaptor"
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)
# Share to portal
print("Start Uploading")
arcpy.server.UploadServiceDefinition(sd_output_filename, federated_server_url)
print("Finish Publishing")
Следующий скрипт публикует кэшированный слой изображения карты, вызывая инструмент Управление листами кэша картографического сервера для построения листов кэша слоя изображения карты. В процессе обработки файл .sddraft анализируется на предмет наличия ошибок и предупреждений.
import arcpy
import os
# Sign in to portal
arcpy.SignInToPortal("https://portal.domain.com/webadaptor",
"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://MyFederatedServer.domain.com/serverWebadaptor"
sddraft = m.getWebLayerSharingDraft(server_type, "MAP_IMAGE", service_name)
sddraft.federatedServerUrl = federated_server_url
sddraft.enableCache = True
sddraft.cache.configuration = "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://portal.domain.com/webadaptor",
"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://MyFederatedServer.domain.com/serverWebadaptor"
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://portal.domain.com/webadaptor"
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://MyFederatedServer.domain.com/serverWebadaptor"
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://portal.domain.com/webadaptor",
"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://portal.domain.com/webadaptor",
"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://MyFederatedServer.domain.com/serverWebadaptor"
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.UploadServiceDefinition_server(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://portal.domain.com/webadaptor",
"MyUserName", "MyPassword")
# Share to portal
print("Start Uploading")
arcpy.server.UploadServiceDefinition(sd_output_filename, "https://MyFederatedServer.domain.com/serverWebadaptor")
print("Finish Publishing")
Следующий скрипт создает файл черновика определения сервиса слоя изображений карты (.sddraft), который активирует свойство checkUniqueIDAssignment. В процессе обработки файл .sddraft анализируется. Если карта не настроена на назначение уникальных числовых ID для публикации веб-слоев, возвращается ошибка анализатора 00374 и печатается сообщение. Более подробно см. в Назначение ID слою.
import arcpy
import os
# Sign in to portal
arcpy.SignInToPortal("https://portal.domain.com/webadaptor",
"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://MyFederatedServer.domain.com/serverWebadaptor"
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))