exportToSDDraft
汇总
FeatureSharingDraft 类允许您为 Web 要素图层 创建服务定义草稿文件 (.sddraft),该文件将所有数据复制到 ArcGIS Enterprise 或 ArcGIS Online。 要配置引用注册数据的 Web 要素图层的属性,请修改 MapImageSharingDraft 类以 包含要素图层 。
讨论
要创建 FeatureSharingDraft 对象,使用 Map 对象的 getWebLayerSharingDraft 方法并将 service_type 参数设置为 FEATURE 。 随后即可通过设置服务级别属性和元数据属性来配置 FeatureSharingDraft 对象。
您也可以通过修改 .sddraft 文件设置 Web 图层属性。 如果没有为属性指定值,则会设置默认值。 即使要覆盖具有已配置属性的 web 图层,也必须设置相应的属性值。
注:
如果未设置元数据属性( credits 、 description 、 summary 、 tags 和 useLimitations )或其具有空字符串,则 Web 图层项目将从地图或图层中获取元数据,具体取决于共享的内容。 有关 Web 图层如何获取元数据的详细信息,请参阅 Web 图层元数据 。
配置 FeatureSharingDraft 对象后,可以使用 exportToSDDraft 方法将其保存到服务定义草稿文件 (.sddraft)。 随后即可使用 过渡服务 和 上传服务定义 工具将其过渡和共享给 ArcGIS Enterprise 或 ArcGIS Online。 有关详细信息,请参阅 什么是 arcpy.sharing 模块 。
代码示例可用于以下用途:
语法
exportToSDDraft()
属性
| 名称 | 说明 | 数据类型 |
|---|---|---|
|
allowExporting (读取和写入) |
指定 Web 图层是否可以导出为不同的格式。 |
Boolean |
|
allowUpdateWithoutMValues (读取和写入) |
指定是否允许几何在不指定 m 值的情况下更新为启用了 m 值的要素。 默认值为 |
Boolean |
|
approvePublicDataCollection (读取和写入) |
指定是否允许公开编辑 Web 要素图层。 |
Boolean |
|
checkUniqueIDAssignment (读取和写入) |
指定是否分析地图以确认 地图属性 中的 允许向共享 web 图层分配唯一数字 ID 选项是否已启用。 有关详细信息,请参阅 分配图层 ID 。 |
Boolean |
|
credits (读取和写入) |
web 图层制作者名单。 |
String |
|
description (读取和写入) |
web 图层的描述。 |
String |
|
featureCapabilities (读取和写入) |
已启用的功能,以逗号分隔。 支持以下功能:
|
String |
|
maxRecordCount (读取和写入) |
服务器在查询期间返回的最大记录数。 默认值为 2000。 |
Integer |
|
offline (读取和写入) |
指定是否需要门户连接。 如果设置为 |
Boolean |
|
offlineTarget (读取和写入) |
将发布服务定义的目标门户版本。 指定版本,确保服务定义包含与门户兼容的内容。 仅在属性
|
String |
|
overwriteExistingService (读取和写入) |
指定是否覆盖现有的 Web 图层。 |
Boolean |
|
portalFolder (读取和写入) |
将发布 Web 图层的门户文件夹的名称。 默认文件夹是“我的内容”中的根文件夹。 |
String |
|
preserveEditUsersAndTimestamps (读取和写入) |
指定是否将保留编辑者追踪信息。 默认值为 |
Boolean |
|
serviceName (读取和写入) |
web 图层名称。 用户可以看到该名称并使用该名称来识别 web 图层。 名称只能包含字母数字字符和下划线。 不允许使用空格或特殊字符。 名称不能超过 120 个字符。 |
String |
|
sharing.groups (读取和写入) |
以逗号分隔的组名称。 |
String |
|
sharing.sharingLevel (读取和写入) |
Web 图层的共享级别。
|
String |
|
summary (读取和写入) |
Web 图层的摘要。 |
String |
|
tags (读取和写入) |
Web 图层的标签。 可以添加多个标签,标签之间用逗号分隔。 |
String |
|
useLimitations (读取和写入) |
Web 图层的使用限制。 |
String |
|
serverType (只读) |
根据 |
String |
|
timezone.ID (读取和写入) |
将存储日期值的时区。 字符串值必须与 Windows 操作系统识别的官方时区 ID 之一匹配。 有关时区的列表,请参阅 Microsoft 文档中的 时区 。 注:该设置适用于以下情景:
|
String |
|
timezone.DaylightSavingTime (读取和写入) |
指定时区是否考虑夏令时。 默认值为 |
Boolean |
|
timezone.preferredTimezoneID (读取和写入) |
显示 Web 要素图层中的查询时 ArcGIS Pro 将使用的时区。 字符串值必须与 Windows 操作系统识别的官方时区 ID 之一匹配。 有关时区的列表,请参阅 Microsoft 文档中的 时区 。 |
String |
|
timezone.preferredTimezoneIDDaylightSavingTime (读取和写入) |
指定首选时区是否考虑夏令时。 默认值为 |
Boolean |
|
useCIMSymbols (读取和写入) |
指定是否将使用 Esri 制图信息模型 (CIM) 符号(也称为 ArcGIS Pro 符号)。 设置为 此属性仅在服务定义发布到 ArcGIS Online 或 ArcGIS Enterprise 11.3 或更高版本时有效。 |
Boolean |
|
zDefault.enable (读取和写入) |
指定是否允许编辑者通过不允许指定 z 值的客户端添加或更新要素。 默认值为 |
Boolean |
|
zDefault.value (读取和写入) |
插入或更新要素时将使用的默认 z 值。 仅在属性 |
Double |
方法
exportToSDDraft(out_sddraft)
将 FeatureSharingDraft 转换为服务定义草稿 (.sddraft) 文件。
| 名称 | 说明 | 数据类型 |
|---|---|---|
|
out_sddraft |
用于表示输出服务定义草稿 ( |
String |
代码示例
以下脚本为地图创建 Web 要素图层 服务定义草稿文件 (.sddraft),并设置元数据、导出数据属性和 CIM 符号。 Web 要素图层将发布到 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, export data properties, and CIM symbols
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.featureCapabilities = "Extract"
sddraft.useCIMSymbols = True
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, server_type)
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")
以下脚本将 覆盖 Web 要素图层 。 如果服务名称已存在,将覆盖该服务;否则,将创建新服务。 如果希望 Web 图层具有特定的属性,则必须设置属性值,即使要覆盖的 Web 图层已配置了属性。 否则,现有属性将被默认设置覆盖。
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.server.StageService(sddraft_output_filename, sd_output_filename)
# Share to portal
print("Start Uploading")
arcpy.server.UploadServiceDefinition(sd_output_filename, server_type)
print("Finish Publishing")
以下脚本将创建 Web 要素图层 服务定义草稿文件 (.sddraft) 并在 Web 要素图层上设置创建和同步功能。 然后,会将 .sddraft 文件过渡并发布到门户(可以选择使用指定项目 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 = "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)
sddraft.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 "itemid" with desired item ID
item_id = "web_feature_layer_id itemid"
# Share to portal
print("Start Uploading")
arcpy.server.UploadServiceDefinition(sd_output_filename, server_type, in_item_id=item_id)
print("Finish Publishing")
以下脚本将地图中的图层和表作为 Web 要素图层发布至门户。
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('States')[0]
selected_table = m.listTables('Capitals')[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.server.StageService(sddraft_output_filename, sd_output_filename)
# Share to portal
print("Start Uploading")
arcpy.server.UploadServiceDefinition(sd_output_filename, server_type)
print("Finish Publishing")
以下脚本将为目标门户版本创建 离线服务定义 ,并将其发布为 Web 要素图层。
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 and offlineTarget properties
server_type = "HOSTING_SERVER"
sddraft = m.getWebLayerSharingDraft(server_type, "FEATURE", service_name)
sddraft.offline = True
# Set offlineTarget property to "ONLINE" for ArcGIS Online or "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)
# Sign in to portal to upload and publish
arcpy.SignInToPortal("https://organization.example.com/webadaptorname",
"MyUserName", "MyPassword")
# 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, server_type)
print("Finish Publishing")
以下脚本将创建启用了 checkUniqueIDAssignment 属性的 Web 要素图层 服务定义草案文件 (.sddraft)。 在过渡期间,将对 .sddraft 文件进行分析。 如果地图未设置为允许分配用于共享 web 图层的唯一数字 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.server.StageService(sddraft_output_filename, sd_output_filename)
# Share to portal
print("Start Uploading")
arcpy.server.UploadServiceDefinition(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))
以下脚本用于设置 env 类的 useCompatibleFieldTypes 属性,将表格添加至地图,并将托管表格发布至 ArcGIS Enterprise。
import arcpy
import os
# Set useCompatibleFieldTypes property
arcpy.env.useCompatibleFieldTypes = True
data = r"C:\states.csv"
# 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)
# Open existing project, create a map with a basemap, and add data
aprx = arcpy.mp.ArcGISProject(os.path.join(outdir, r"C:\Project\World.aprx"))
m = aprx.createMap(service_name, "Map")
m.addBasemap("Topographic")
m.addDataFromPath(data)
print(f"Data added: {data}")
aprx.save()
print(f"Project saved: {aprx.filePath}")
# Sign in to portal
arcpy.SignInToPortal("https://organization.example.com/webadaptorname",
"MyUserName", "MyPassword")
# Create FeatureSharingDraft
server_type = "HOSTING_SERVER"
sddraft = m.getWebLayerSharingDraft(server_type, "FEATURE", service_name)
# 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, server_type)
print("Finish Publishing")