Краткая информация
Класс FeatureSharingDraft позволяет вам создать файл черновика определения сервиса (.sddraft) для векторного веб-слоя, который копирует все данные либо в ArcGIS Enterprise, либо в ArcGIS Online. Чтобы настроить свойства векторного веб-слоя, который ссылается на зарегистрированные данные, измените класс MapImageSharingDraft для включения векторного слоя.
Обсуждение
Чтобы создать объект класса FeatureSharingDraft, используйте функцию класса карты getWebLayerSharingDraft и установите для параметра service_type значение FEATURE. Объект класса FeatureSharingDraft можно настроить, задав свойства уровня сервиса и свойства метаданных.
Примечание:
Если свойства метаданных (credits, description, summary, tags и useLimitations) не заданы или состоят из пустых строк, элемент веб-слоя будет получать метаданные с карты или слоя, в зависимости от того, что опубликовано. Дополнительные сведения о том, как веб-слои являются источником метаданных, см. в разделе Метаданные веб-слоя.
После настройки объекта класса FeatureSharingDraft он может быть сохранен в файле черновика определения сервиса (.sddraft) с помощью функции exportToSDDraft. Затем он может быть применен и опубликован либо в ArcGIS Enterprise, либо в ArcGIS Online, используя инструменты Промежуточный сервис и Выгрузить определение сервиса. Дополнительные сведения см. в разделе Введение в arcpy.sharing.
Примеры кода доступны для следующего:
- Публикация векторного веб-слоя в папке портала
- Перезапись векторного веб-слоя
- Настройка возможностей создания и синхронизации
- Публикация слоя и таблицы
- Создание и публикация определения автономнго сервиса
- Анализируйте, чтобы убедиться, что карта настроена так, чтобы разрешить присвоение уникальных числовых ID
Свойства
Свойство | Описание | Тип данных |
allowExporting (чтение и запись) | Булево значение, определяющее, могут ли пользователи экспортировать веб-слой в другие форматы. | Boolean |
checkUniqueIDAssignment (чтение и запись) | Логическое значение, которое указывает, анализируется ли ваша карта, чтобы подтвердить, что опция Разрешить назначения уникальных числовых ID для опубликованных веб слоёв в Свойствах карты включена. Более подробно см. в Назначение ID слою. | Boolean |
credits (чтение и запись) | Строка со сведениями об авторах. | String |
description (чтение и запись) | Строка с описанием. | String |
offline (чтение и запись) | Булево значение, определяющее использование подключения к порталу. Если для offline задано False, необходимо войти на портал, чтобы создать файл черновика определения сервиса (.sddraft), используя функцию exportToSDDraft. Если для offline задано True, файл черновика определения сервиса можно создать без входа на портал. | Boolean |
overwriteExistingService (чтение и запись) | Логическая переменная, которая определяет, перезаписывать ли существующий веб-слой или нет. | Boolean |
portalFolder (чтение и запись) | Строка, содержащая имя папки портала, в который вы желаете опубликовать веб-слой. Папкой по умолчанию является корневая папка в Моих ресурсах. | String |
serverType (только чтение) | Возвращает строку, предоставляющую данные о типе сервера, как указано при создании публикуемого черновика с помощью функции getWebLayerSharingDraft из класса map. Единственно возможное значение, которое возвращается из serverType для FeatureSharingDraft – HOSTING_SERVER. serverType HOSTING_SERVER указывает на поддержку публикации в ArcGIS Enterprise или ArcGIS Online. | String |
serviceName (чтение и запись) | Строка, представляющая имя веб-слоя. Это имя будут видеть пользователи и идентифицировать по нему веб-слой. Имя может содержать только буквы, цифры и знак подчеркивания. В имени нельзя использовать пробелы и специальные символы. Длина имени не должна превышать 120 символов. | String |
summary (чтение и запись) | Строка со сводной информацией. | String |
tags (чтение и запись) | Строка, с тегами. Можно добавить несколько тегов с разделением запятой или точкой с запятой. | String |
useLimitations (чтение и запись) | Строка с ограничениями использования. | String |
Обзор метода
Метод | Описание |
exportToSDDraft (out_sddraft) | Конвертирует FeatureSharingDraft в файл черновика определения сервиса (.sddraft). |
Методы
exportToSDDraft (out_sddraft)
Параметр | Описание | Тип данных |
out_sddraft | Строка, представляющая путь и имя файла для выходного файла черновика определения сервиса (.sddraft). | String |
После настройки FeatureSharingDraft, он может быть сохранен как файл черновика определения сервиса (.sddraft). Затем он может быть размещен и опубликован на ArcGIS Enterprise или ArcGIS Online с помощью инструментов Разместить сервис и Загрузить определение сервиса.
Пример кода
Следующий скрипт создает файл черновика (.sddraft) определения сервиса векторного веб-слоя для карты и устанавливает метаданные и свойства данных экспорта. Веб-векторный слой публикуется в папке в любом из ArcGIS Online или ArcGIS Enterprise. Информация о портале извлекается функцией SignInToPortal.
import arcpy
import os
# Sign in to portal
arcpy.SignInToPortal("https://www.arcgis.com", "MyUserName", "MyPassword")
# Set output file names
outdir = r"C:\Project\Output"
service_name = "FeatureSharingDraftExample"
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 FeatureSharingDraft and set metadata, portal folder, and export data properties
server_type = "HOSTING_SERVER"
sddraft = m.getWebLayerSharingDraft(server_type, "FEATURE", service_name)
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.allowExporting = True
# Create Service Definition Draft file
sddraft.exportToSDDraft(sddraft_output_filename)
# Stage Service
print("Start Staging")
arcpy.StageService_server(sddraft_output_filename, sd_output_filename)
# Share to portal
print("Start Uploading")
arcpy.UploadServiceDefinition_server(sd_output_filename, server_type)
print("Finish Publishing")
Следующий скрипт перезаписывает векторный веб-слой. Если имя сервиса уже существует, сервис будет перезаписан. В противном случае будет создан новый сервис.
import arcpy
import os
# Sign in to portal
arcpy.SignInToPortal("https://www.arcgis.com", "MyUserName", "MyPassword")
# Set output file names
outdir = r"C:\Project\Output"
service_name = "FeatureSharingDraftExample"
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 FeatureSharingDraft and set overwrite property
server_type = "HOSTING_SERVER"
sddraft = m.getWebLayerSharingDraft(server_type, "FEATURE", service_name)
sddraft.overwriteExistingService = True
# Create Service Definition Draft file
sddraft.exportToSDDraft(sddraft_output_filename)
# Stage Service
print("Start Staging")
arcpy.StageService_server(sddraft_output_filename, sd_output_filename)
# Share to portal
print("Start Uploading")
arcpy.UploadServiceDefinition_server(sd_output_filename, server_type)
print("Finish Publishing")
Следующий скрипт создаст файл черновика определения сервиса векторного веб-слоя (.sddraft). Затем он настроит возможности создания и синхронизации на векторном веб-слое, изменив файл черновика определения сервиса с помощью стандартной библиотеки Python xml.dom.minidom. Затем измененный файл черновика определения сервиса размещается и публикуется на портале.
import arcpy
import os
import xml.dom.minidom as DOM
# Sign in to portal
arcpy.SignInToPortal("https://www.portal.domain.com/webadaptor",
"MyUserName", "MyPassword")
# Set output file names
outdir = r"C:\Project\Output"
service_name = "FeatureSharingDraftExample"
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 FeatureSharingDraft
server_type = "HOSTING_SERVER"
sddraft = m.getWebLayerSharingDraft(server_type, "FEATURE", service_name)
# Create Service Definition Draft file
sddraft.exportToSDDraft(sddraft_output_filename)
"""Modify the .sddraft file to enable create and sync"""
# Read the .sddraft file
doc = DOM.parse(sddraft_output_filename)
# Find all elements named TypeName
# This is where the additional layers and capabilities are defined
typeNames = doc.getElementsByTagName('TypeName')
for typeName in typeNames:
# Get the TypeName to enable
if typeName.firstChild.data == "FeatureServer":
extension = typeName.parentNode
for extElement in extension.childNodes:
if extElement.tagName == 'Definition':
for propArray in extElement.childNodes:
if propArray.tagName == 'Info':
for propSet in propArray.childNodes:
for prop in propSet.childNodes:
for prop1 in prop.childNodes:
if prop1.tagName == "Key":
if prop1.firstChild.data == 'webCapabilities':
if prop1.nextSibling.hasChildNodes():
prop1.nextSibling.firstChild.data = "Create,Sync,Query"
else:
txt = doc.createTextNode("Create,Sync,Query")
prop1.nextSibling.appendChild(txt)
# Write to the .sddraft file
f = open(sddraft_output_filename, 'w')
doc.writexml(f)
f.close()
# Stage Service
print("Start Staging")
arcpy.StageService_server(sddraft_output_filename, sd_output_filename)
# Share to portal
print("Start Uploading")
arcpy.UploadServiceDefinition_server(sd_output_filename, server_type)
print("Finish Publishing")
Следующий скрипт публикует слой и таблицу на карте как векторный веб-слой на портале.
import arcpy
import os
# Sign in to portal
arcpy.SignInToPortal("https://www.arcgis.com", "MyUserName", "MyPassword")
# Set output file names
outdir = r"C:\Project\Output"
service_name = "FeatureSharingDraftExample"
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()[0]
selected_table = m.listTables()[0]
# Create FeatureSharingDraft
server_type = "HOSTING_SERVER"
sddraft = m.getWebLayerSharingDraft(server_type, "FEATURE", service_name, [selected_layer, selected_table])
# Create Service Definition Draft file
sddraft.exportToSDDraft(sddraft_output_filename)
# Stage Service
print("Start Staging")
arcpy.StageService_server(sddraft_output_filename, sd_output_filename)
# Share to portal
print("Start Uploading")
arcpy.UploadServiceDefinition_server(sd_output_filename, server_type)
print("Finish Publishing")
Следующий скрипт создает определение автономного сервиса и публикует его как векторный веб-слой.
import arcpy
import os
# Set output file names
outdir = r"C:\Project\Output"
service_name = "FeatureSharingDraftExample"
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 FeatureSharingDraft and set offline property
server_type = "HOSTING_SERVER"
sddraft = m.getWebLayerSharingDraft(server_type, "FEATURE", service_name)
sddraft.offline = True
# Create Service Definition Draft file
sddraft.exportToSDDraft(sddraft_output_filename)
# Sign in to portal to upload and publish
arcpy.SignInToPortal("https://www.portal.domain.com/webadaptor",
"MyUserName", "MyPassword")
# Stage Service
print("Start Staging")
arcpy.StageService_server(sddraft_output_filename, sd_output_filename)
# Share to portal
print("Start Uploading")
arcpy.UploadServiceDefinition_server(sd_output_filename, server_type)
print("Finish Publishing")
Следующий скрипт создает файл черновика определения сервиса векторного веб-слоя (.sddraft), который включает свойство checkUniqueIDAssignment. Файл определения черновика сервиса анализируется во время промежуточного хранения. Если карта не настроена на назначение уникальных числовых ID для публикации веб-слоев, возвращается ошибка анализатора 00374 и печатается сообщение. Более подробно см. в Назначение ID слою.
import arcpy
import os
# Sign in to portal
arcpy.SignInToPortal("https://www.arcgis.com", "MyUserName", "MyPassword")
# Set output file names
outdir = r"C:\Project\Output"
service_name = "FeatureSharingDraftExample"
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 FeatureSharingDraft and set the check unique ID assignment property
server_type = "HOSTING_SERVER"
sddraft = m.getWebLayerSharingDraft(server_type, "FEATURE", service_name)
sddraft.checkUniqueIDAssignment = True
# Create Service Definition Draft file
sddraft.exportToSDDraft(sddraft_output_filename)
try:
# Stage Service
print("Start Staging")
arcpy.StageService_server(sddraft_output_filename, sd_output_filename)
# Share to portal
print("Start Uploading")
arcpy.UploadServiceDefinition_server(sd_output_filename, server_type)
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))