摘要
MapImageSharingDraft 类允许您为地图图像图层创建服务定义草稿文件 (.sddraft),该文件将向 ArcGIS Enterprise 复制所有数据或引用注册数据。
说明
要创建 MapImageSharingDraft 对象,需使用 Map 对象的 getWebLayerSharingDraft 方法并将 service_type 参数设置为 MAP_IMAGE。 随后即可通过设置服务级别属性和元数据属性来配置 MapImageSharingDraft 对象。 可以使用 federatedServerUrl 属性以指定将 web 图层发布到的联合服务器。
您也可以通过修改 .sddraft 文件设置 Web 图层属性。 如果没有为属性指定值,则会设置默认值。 因此,即使要覆盖具有已配置属性的 Web 图层,也必须设置所需的属性值。
注:
如果未设置元数据属性(credits、description、summary、tags 和 useLimitations)或其具有空字符串,则 Web 图层项目将从地图或图层中获取元数据,具体取决于共享的内容。 有关 Web 图层如何获取元数据的详细信息,请参阅 Web 图层元数据。
配置 MapImageSharingDraft 对象后,可以使用 exportToSDDraft 方法将其保存到服务定义草稿文件 (.sddraft)。 然后,可以使用过渡服务和上传服务定义工具将其过渡并共享到 ArcGIS Enterprise。 有关详细信息,请参阅 arcpy.sharing 简介。
代码示例可用于以下用途:
属性
属性 | 说明 | 数据类型 |
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 (可读写) | 指定是否分析地图以确认地图属性中的允许向共享 web 图层分配唯一数字 ID 选项是否已启用。 有关详细信息,请参阅分配图层 ID。 | Boolean |
copyDataToServer (可读写) | 指定是否将地图中的数据复制到服务器。 值为 True 时,将复制地图中的所有数据,包括在联合服务器中注册的数据。 值为 False 时,将仅复制未在联合服务器中注册的数据。 服务将引用已在联合服务器中注册的数据。 默认值为 False。 | Boolean |
credits (可读写) | web 图层制作者名单。 | String |
description (可读写) | web 图层的描述。 | String |
enableCache (可读写) | 指定 Web 图层是否动态绘制或从缓存绘制。 默认值为 False。 | Boolean |
enableDynamicWorkspaces (可读写) | 指定是否允许用户更改 Web 图层的外观或绘制行为。 默认值为 True。 | Boolean |
extension.feature.allowTrueCurvesUpdates (可读写) | 指定是否允许 Web 客户端使用增密几何更新要素的真曲线几何。 仅当启用编辑时才支持此属性。 默认值为 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 (可读写) | 指定是否启用 WFS 服务。 默认值为 False。 | Boolean |
extension.wms.isEnabled (可读写) | 指定是否启用 WMS 服务。 默认值为 False。 | Boolean |
federatedServerUrl (可读写) | ArcGIS Enterprise 门户联合服务器的 URL。 提示:联合服务器 URL 也可以用于上传服务定义工具中的 in_server 参数。 | String |
mapOperations (可读写) | 已启用的操作,以逗号分隔。 支持以下操作:
| String |
maxRecordCount (可读写) | 服务器在查询期间返回的最大记录数。 默认值为 2000。 | Integer |
offline (可读写) | 指定是否需要门户连接。 如果设置为 False,则您必须登录门户,同时提供 federatedServerUrl属性的 ArcGIS Enterprise 门户联合服务器 URL,从而使用 exportToSDDraft 函数创建服务定义草稿文件 (.sddraft)。 如果设置为 True,则可以在不登录门户、不填充 federatedServerUrl 属性的情况下创建服务定义草稿文件。 | Boolean |
offlineTarget (可读写) | 将发布服务定义的目标服务器版本。 指定一个版本可确保服务定义包含与服务器兼容的内容。 仅在属性 offline 设置为 True 时支持此属性。
| String |
overwriteExistingService (可读写) | 指定是否覆盖现有的 Web 图层。 | Boolean |
pooling.maxInstances (可读写) | 每台计算机的最大实例数 仅在属性 pooling.type 设置为 DEDICATED 时支持此属性。 | Integer |
pooling.minInstances (可读写) | 每台计算机的最小实例数: 仅在属性 pooling.type 设置为 DEDICATED 时支持此属性。 | Integer |
pooling.type (可读写) | 将使用的实例池化的类型。
| String |
portalFolder (可读写) | 将发布 Web 图层的现有门户文件夹的名称。 默认文件夹是“我的内容”中的根文件夹。 | String |
serverFolder (可读写) | 服务将发布到的服务器文件夹的名称。 默认文件夹是联合服务器的根文件夹。 | String |
serverType (只读) | 根据 map 类中的 getWebLayerSharingDraft 函数创建共享草稿时指定的服务器类型。 从 MapImageSharingDraft 的 serverType 中返回的唯一可能的值为 FEDERATED_SERVER。 FEDERATED_SERVER 的 serverType 值表示支持共享至 ArcGIS Enterprise 门户联合服务器。 | String |
serviceName (可读写) | web 图层名称。 用户可以看到该名称并使用该名称来识别服务。 名称只能包含字母数字字符和下划线。 不允许使用空格或特殊字符。 名称不能超过 120 个字符。 | String |
sharing.groups (可读写) | 以逗号分隔的组名称。 | String |
sharing.sharingLevel (可读写) | Web 图层的共享级别。
| String |
summary (可读写) | Web 图层的摘要。 | String |
tags (可读写) | Web 图层的标签。 可以添加多个标签,或用逗号分隔。 | String |
useLimitations (可读写) | Web 图层的使用限制。 | String |
timezone.DaylightSavingTime (可读写) | 指定时区是否考虑夏令时。 默认值为 False。 | Boolean |
timezone.ID (可读写) | 存储日期值的时区。 字符串值必须与 Windows 操作系统识别的官方时区 ID 之一匹配。 有关时区的列表,请参阅 Microsoft 文档中的时区。 | String |
timezone.preferredTimezoneID (可读写) | 显示来自 web 要素图层的查询时要使用的 ArcGIS Pro 时区。 字符串值必须与 Windows 操作系统识别的官方时区 ID 之一匹配。 有关时区的列表,请参阅 Microsoft 文档中的时区。 | String |
timezone.preferredTimezoneIDDaylightSavingTime (可读写) | 指定首选时区是否考虑夏令时。 默认值为 False。 | Boolean |
useCIMSymbols (可读写) | 指定是否将使用 Esri 制图信息模型 (CIM) 符号(也称为 ArcGIS Pro 符号)。 设置为 False 时,将使用所有客户端都能渲染的符号。 设置为 True 时,将使用新客户端(例如 ArcGIS API for JavaScript 4.x)支持的 CIM 符号。 此属性仅在关联的要素图层被包含,且服务定义发布到 ArcGIS Enterprise 11.3 或更高版本时有效。 | Boolean |
方法概述
方法 | 说明 |
exportToSDDraft (out_sddraft) | 将 MapImageSharingDraft 转换为服务定义草稿 (.sddraft) 文件。 |
方法
代码示例
以下脚本将为地图创建地图图像图层服务定义草稿文件 (.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")
以下脚本将覆盖地图图像图层。 如果服务名称已存在,将覆盖该服务;否则,将创建新服务。 如果希望 Web 图层具有特定的属性,则必须设置属性值,即使要覆盖的 Web 图层已配置了属性。 否则,现有属性将被默认设置覆盖。
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 API for Python 中的 arcgis.gis 模块注册数据存储。
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")
以下脚本将创建启用了 checkUniqueIDAssignment 属性的地图图像图层服务定义草案文件 (.sddraft)。 在过渡期间,将对 .sddraft 文件进行分析。 如果地图未设置为允许分配用于共享 web 图层的唯一数字 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))