摘要
可通过 GeoprocessingSharingDraft 类创建 ArcGIS Enterprise 的 Web 工具服务定义文件 (.sddraft) 或 ArcGIS Server 的地理处理服务。
说明
可使用 CreateSharingDraft 函数创建 GeoprocessingSharingDraft 对象,或使用关键字参数直接创建 GeoprocessingSharingDraft 对象。
- 要共享 Web 工具,将 serverType 参数设置为 FEDERATED_SERVER,将 serviceType 参数设置为 WEB_TOOL。
- 要共享地理处理服务,将 serverType 参数设置为 STANDALONE_SERVER,将 serviceType 参数设置为 GP_SERVICE。
配置 GeoprocessingSharingDraft 对象后,可以使用 exportToSDDraft 方法将其保存到服务定义草稿文件 (.sddraft)。 随后即可使用过渡服务和上传服务定义工具将其过渡和共享给 ArcGIS Enterprise 或 ArcGIS Server。 有关详细信息,请参阅 arcpy.sharing 简介。
语法
GeoprocessingSharingDraft (**kwargs)
参数 | 说明 | 数据类型 |
**kwargs | All properties supported by the GeoprocessingShaingDraft object can be used as keyword arguments. | String |
属性
属性 | 说明 | 数据类型 |
GPStringValues (可读写) | 发布后数据类型将变为字符串的参数名称列表。 如果 web 工具中包含多个工具,则必须使用工具名称限定参数名称,例如 ["CreateHexagons.Input_Areal_Unit", "Select_Features.New_Expression"]。 这仅适用于面积单位、SQL 表达式、空间参考、坐标系、包络矩形和范围数据类型。 对其他数据类型的参数没有影响。 如果未在此列表中指定参数,并且发布的 ArcGIS GIS Server 计算机支持这些较新的类型,则默认情况下,数据类型将转换为适用的参数名称(例如 GPArealUnit)。 | List |
capabilities (可读写) | 指定服务将支持的功能。
| String |
choiceLists (可读写) | 通过 Web 工具或地理处理服务中的选项列表输入模式,限制所有输入参数的值。 在使用此属性之前,必须先创建选项列表及其值;不能使用此属性向选项列表添加新值。 如果具有要素或栅格输入,则必须先为选项列表中的每个值创建图层,然后使用此属性限制这些值。 该属性使用一个字典,该字典以服务任务和参数名称为键,以字符串值列表为值,例如 {"ServiceTaskName.parameterName":["string1", "string2"]}。 默认值为 None。 | Dictionary |
constantValues (可读写) | 要设置为常量的参数名称列表。 如果包含多个工具,则必须使用工具名称限定参数名称,例如 ["toolX.parameterA", "toolY.parameterD"]。 默认值为 None。 | List |
convertFeatureLayerURL (可读写) | 指定要素图层 URL 是否将转换为文件地理数据库要素类。 此属性用于为工具输入、输出参数或工程数据保留要素图层或服务的 URL。 仅在发布到 ArcGIS Enterprise 或 ArcGIS Server 11.2 及更高版本时使用此参数。
| Boolean |
copyDataToServer (可读写) | 指定是否将结果中引用的数据复制到服务器。 如果值为 True,则将复制结果中的所有数据,包括注册到服务器的数据。 如果值为 False,则只会复制未在服务器上注册的数据。 服务将引用已在联合服务器中注册的数据。 默认值为 False。 | Boolean |
description (可读写) | Web 工具或地理处理服务的描述。 默认值为 None。 | String |
draftValue (可读写) | 用于创建服务定义草稿的地理处理 Result 对象列表。 如果使用关键字参数而不运行 CreateSharingDraft 函数,则它为必填项。 | List |
enableOutputFeatureService (可读写) | 指定可选的输出要素服务名称参数是否可使用名称 esri_out_feature_service_name。 默认值为 None。 要将此属性设置为 True,resultMapService 值必须为 False,executionType 值必须为 Asynchronous,且 serviceType 值必须为 WEB_TOOL。 如果未指定,则当满足以下所有条件时,此属性将自动设置为 True:
有关输出要素服务的详细信息,请参阅将 Web 工具与输出要素服务一起使用。 | Boolean |
enableOutputImageService (可读写) | 指定可选的输出影像服务参数是否可使用名称 esri_out_image_service。 默认值为 False。 要将此属性设置为 True,resultMapService 值必须为 False,executionType 值必须为 Asynchronous。 有关输出影像服务的详细信息,请参阅将 Web 工具与输出影像服务一起使用。 | Boolean |
executionType (可读写) | 指定客户端(使用任务的应用程序)如何与服务器进行交互以及如何从任务获取结果。 ArcGIS Pro 可以本地处理两种处理类型。 默认值为 Asynchronous。
| String |
maxInstances (可读写) | Web 工具或服务可以启动并可供使用的最大实例数。 对于频繁使用的 Web 工具或服务,您可以提高该值。 请确保服务器具有的硬件足以支持指明的最大实例数。 | Integer |
maxUsageTime (可读写) | 一个服务能被使用的最长时间(以秒计)。 对于长时间运行的地理处理任务,可以将默认值 600 秒(10 分钟)延长。 或者,您可以减少这一时间,以确保客户端不会错误地应用服务。 默认值为 600。 | Integer |
maxWaitTime (可读写) | 客户端在超时之前将等待连接到实例的最长时间(以秒为单位)。 当所有实例都在忙于处理请求时,随后的请求将排队。 如果在实例变为可用状态之前超时,则任务会失败。 默认值为 60。 | Integer |
maximumRecords (可读写) | Web 工具或服务可以返回给客户端的最大结果数。 将此值设置成一个较大数值意味着 GIS 服务器可以将该数量的单个记录或要素发送到客户端。 如果您不希望返回任何要素,请将此值设为 0(零)。 通常情况下,只有当您启用通过地图服务查看结果时才将此值设为零。 默认值为 1000。 | Integer |
messageLevel (可读写) | 指定将用于 Web 工具或地理处理服务的消息级别。 以下是服务返回到客户端的有效消息级别的列表:
默认值为 Error。 | String |
minInstances (可读写) | 服务将要启动并可供使用的最少实例数。 对于频繁使用的服务,您可以提高该值。 默认值为 1。 | Integer |
offline (可读写) | 指定是否保存离线服务定义。 默认值为 False。
| Boolean |
offlineTarget (可读写) | 指定将发布服务定义的目标服务器版本。 指定一个版本可确保服务定义包含与服务器兼容的内容。 仅在属性 offline 设置为 True 时支持此属性。 可通过以下方式使用该属性:
| String |
overwriteExistingService (可读写) | 指定是否覆盖现有 Web 工具或地理处理服务。 默认值为 False。 | Boolean |
portalFolder (可读写) | 将作为 Web 工具发布的门户文件夹的名称。 默认文件夹是“我的内容”中的根文件夹。 此属性仅在 serverType 是 FEDERATED_SERVER 时才可用。 | String |
removeDefaultValues (可读写) | 将在 Web 工具中删除默认值的参数名称列表。 如果 web 工具中包含多个工具,则必须使用工具名称限定参数名称,例如 ["BufferModel.Output_Feature_Class", "BufferModel.Distance_value_or_field"]。 要删除所有参数的默认值,请使用关键字 REMOVE_ALL,格式为 ["BufferModel.REMOVE_ALL"]。 | List |
resultMapService (可读写) | 指定是否可采用地图形式查看服务所有任务的结果(以及任务的其他结果)。 当使用 True,地图将使用地图服务创建在服务器上,以将其以影像形式(如 .jpeg 文件)传输回客户端。 返回地图的符号系统、标注、透明度和所有其他属性与输出图层的设置完全相同。 如果您在 Python 脚本环境(ArcGIS Pro 之外)中创建结果图层,则将使用默认符号系统。 要保留符号系统的控制权,请使用符号系统创建图层文件,然后将其用于修改任务的输出符号系统。 使用 True 时,则服务器上会自动创建一个地图服务,其名称与 Web 工具或地理处理服务相同。 默认值为 False。 | Boolean |
serverFolder (可读写) | 要发布到服务器的文件夹名称。 如果该文件夹当前不存在,则将创建该文件夹。 默认的文件夹为服务器根级别。 默认值为 None。 | String |
serverType (可读写) | 指定创建共享草稿和设置支持共享时所使用的服务器类型。
| String |
serviceName (可读写) | Web 工具或地理处理服务的名称。 用户可以看到该名称并使用该名称来识别服务。 名称只能包含字母数字字符和下划线。 对于 Web 工具,允许使用空格。 对于地理处理服务,不允许使用空格或特殊字符。 名称不能超过 120 个字符。 默认值为 None。 如果使用关键字参数而不运行 CreateSharingDraft 函数,则它为必填项。 | String |
serviceType (可读写) | 指定创建共享草稿时和共享时使用的服务类型。 | String |
summary (可读写) | Web 工具或服务摘要。 使用此属性可以覆盖用户界面摘要,如果摘要不存在,则将提供摘要。 此处提供的摘要不会保留回原始地理处理工具中。 默认值为 None。 | String |
tags (可读写) | Web 工具或服务标签。 使用此属性可以覆盖用户界面标签,如果标签不存在,则将提供标签。 此处提供的标签不会保留回原始地理处理工具中。 默认值为 None。 | String |
targetServer (可读写) | 将发布 Web 工具或地理处理服务的服务器。 如果 offline 属性设置为 False(默认设置),则此属性是必需的。 如果 serverType 属性已设置为 FEDERATED_SERVER,请提供 ArcGIS Enterprise 门户联合服务器的服务器 URL。 如果 serverType 属性已设置为 STANDALONE_SERVER,则支持以下内容:
| String |
方法概述
方法 | 说明 |
analyzeSDDraft () | analyzeSDDraft 方法会在过渡服务之前分析服务定义草稿。 该方法可以返回许多错误和警告,例如缺少元数据、将数据复制到服务器或参数不兼容。 在成功运行 exportToSDDraft 方法后使用此方法。 如果没有生成服务定义草稿文件,则尝试使用此方法时将会出错。 |
exportToSDDraft (out_sddraft) | 将 GeoprocessingSharingDraft 转换为服务定义草稿文件 (.sddraft)。 |
方法
analyzeSDDraft ()
数据类型 | 说明 |
Dictionary | 包含分析器错误和警告的字典。 字典中的错误和警告都将以元组列表的形式提供,如果存在元组,那么每个元组中都有分析器代码和分析器消息。 如果没有错误或警告,则字典中的 errors 或 warnings 键会具有空列表作为值。 |
以下是 analyzeSDDraft 函数的返回示例,显示无分析器错误,但有一个分析器警告:
{
'errors': [],
'warnings': [
(24032, 'Data source used by CustomizedModel is not registered with the server and will be copied to the server: raster_data')
],
'messages': []
}
exportToSDDraft (out_sddraft)
参数 | 说明 | 数据类型 |
out_sddraft | A string that represents the path and file name for the output service definition draft file (.sddraft). | String |
代码示例
以下脚本可使用关键字参数创建一个 GeoprocessingSharingDraft 对象。 当脚本运行完成时,会将一个 Web 工具发布到 ArcGIS Enterprise。 由于工具的输入参数是要素图层,Web 工具参数的输入模式是选项列表,因此会发出有关复制到联合 ArcGIS Server 的数据的分析器警告。
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"
service_name = "GeoprocessingSharingDraftExample"
federated_server_url = "https://server.domain.com/webadaptor"
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)
# Run the tool and set the history to a result object
arcpy.ImportToolbox(os.path.join(outdir, "MyAnalysisTools.atbx"))
result = arcpy.reports.MyCustomAnalysis(os.path.join(outdir, "parcels.gdb", "taxlots"), "40", "MyOutput.pdf")
# Create GeoprocessingSharingDraft using keyword arguments
sddraft = arcpy.sharing.GeoprocessingSharingDraft(serverType="FEDERATED_SERVER", serviceType="WEB_TOOL",
serviceName=service_name, draftValue=[result], targetServer=federated_server_url,
GPStringValues=["Input_Areal_Unit"])
# Create Service Definition Draft file
sddraft.exportToSDDraft(sddraft_output_filename)
# Get the analyzer messages
analyzer_results = sddraft.analyzeSDDraft()
if len(analyzer_results["errors"]) > 0:
# Display the analyzer error or processing error messages
for code, message in analyzer_results["errors"]:
print (message)
# Raise an exception and exit the script
raise arcpy.ExecuteError
# Display the analyzer warning messages using the analyze function
for code, message in analyzer_results["warnings"]:
print (message)
# Run Stage Service tool
arcpy.server.StageService(sddraft_output_filename, sd_output_filename)
# Share to portal
arcpy.server.UploadServiceDefinition(sd_output_filename, federated_server_url)
以下脚本可以创建 Web 工具服务定义草稿文件 (.sddraft)。 然后,系统会将服务定义草稿文件过渡并作为 Web 工具发布到 ArcGIS Enterprise。 由于工具的第一个工具输入参数是要素类,因此 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"
service_name = "GeoprocessingSharingDraftExample"
federated_server_url = "https://MyFederatedServer.domain.com/serverWebadaptor"
toolbox = os.path.join(outdir, "MyAnalysisTools.tbx")
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)
# Run the tool and set to a result object
arcpy.ImportToolbox(toolbox)
result = arcpy.reports.MyCustomAnalysis(os.path.join(outdir, "parcels.gdb", "taxlots"), "40", "MyOutput.pdf")
# Create GeoprocessingSharingDraft and set its properties
sddraft = arcpy.sharing.CreateSharingDraft("FEDERATED_SERVER", "WEB_TOOL", service_name, result)
sddraft.targetServer = federated_server_url
sddraft.description = "This is description"
sddraft.summary = "This is summary"
sddraft.tags = "tag1, tag2"
sddraft.serverFolder = "MyServerFolder"
sddraft.portalFolder = "MyPortalFolder"
# Create Service Definition Draft file
sddraft.exportToSDDraft(sddraft_output_filename)
try:
# Run Stage Service tool
arcpy.server.StageService(sddraft_output_filename, sd_output_filename)
# Display the analyzer warning messages
print(arcpy.GetMessages(1))
# Share to portal
arcpy.server.UploadServiceDefinition(sd_output_filename, federated_server_url)
except arcpy.ExecuteError:
# Display the analyzer error or processing error messages
print(arcpy.GetMessages(2))
以下脚本可以覆盖 Web 工具服务定义草稿文件 (.sddraft)。 如果服务名称已存在,则将覆盖该 web 工具。 否则,将创建新 web 工具。 由于第一个工具输入参数是图层,而 GeoprocessingSharingDraft 类的 choiceLists 参数包含两个图层,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 = "GeoprocessingSharingDraftExample"
federated_server_url = "https://MyFederatedServer.domain.com/serverWebadaptor"
toolbox = os.path.join(outdir, "MyAnalysisTools.tbx")
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)
# Run the tool and set to a result object
arcpy.management.MakeFeatureLayer(os.path.join(outdir, "parcels.gdb", "taxlots1"), "taxlotslayer1")
arcpy.management.MakeFeatureLayer(os.path.join(outdir, "parcels.gdb", "taxlots2"), "taxlotslayer2")
arcpy.ImportToolbox(toolbox)
result = arcpy.reports.MyCustomAnalysis("taxlotslayer1", "40", "MyOutput.pdf")
# Create GeoprocessingSharingDraft and set overwrite and choicelists properties
sddraft = arcpy.sharing.CreateSharingDraft("FEDERATED_SERVER", "WEB_TOOL", service_name, result)
sddraft.targetServer = federated_server_url
sddraft.description = "This is description"
sddraft.summary = "This is summary"
sddraft.tags = "tag1, tag2"
sddraft.serverFolder = "MyServerFolder"
sddraft.portalFolder = "MyPortalFolder"
sddraft.overwriteExistingService = True
sddraft.choicelists = {"mywebtooltask.parameter1": ["taxlotslayer1", "taxlotslayer2"]}
# Create Service Definition Draft file
sddraft.exportToSDDraft(sddraft_output_filename)
try:
# Run Stage Service tool
arcpy.server.StageService(sddraft_output_filename, sd_output_filename)
# Display the analyzer warning messages
print(arcpy.GetMessages(1))
# Share to portal
arcpy.server.UploadServiceDefinition(sd_output_filename, federated_server_url)
except arcpy.ExecuteError:
# Display the analyzer error or processing error messages
print(arcpy.GetMessages(2))
以下脚本将为目标门户版本创建离线服务定义,并将其发布为 Web 工具。
import arcpy
import os
# Set output file names
outdir = r"C:\Project\Output"
service_name = "GeoprocessingSharingDraftExample"
toolbox = os.path.join(outdir, "MyAnalysisTools.tbx")
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)
# Run the tool and set to a result object
arcpy.ImportToolbox(toolbox)
result = arcpy.reports.MyCustomAnalysis(os.path.join(outdir, "parcels.gdb", "taxlots"), "50", "MyOutput.pdf")
# Create GeoprocessingSharingDraft and set offline and offlineTarget properties
server_type = "FEDERATED_SERVER"
sddraft = arcpy.sharing.CreateSharingDraft("FEDERATED_SERVER", "WEB_TOOL", service_name, result)
sddraft.offline = True
# Set offlineTarget property to "11" for ArcGIS Enterprise 11.0 or later
# The default is ArcGIS Enterprise 10.9.1 or earlier
sddraft.offlineTarget = "10x"
# Create Service Definition Draft file
sddraft.exportToSDDraft(sddraft_output_filename)
# Run Stage Service tool
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, server_type)
print("Finish Publishing")
以下脚本将创建地理处理服务的服务定义草稿文件 (.sddraft)。 然后,系统会将脚本服务定义草稿文件过渡并作为地理处理服务发布到 ArcGIS Server。 由于工具的第一个工具输入参数是要素类,地理处理参数的输入模式为用户定义。
import arcpy
import os
# Set output file names
outdir = r"C:\Project\Output"
service_name = "GeoprocessingSharingDraftExample"
toolbox = os.path.join(outdir, "MyAnalysisTools.tbx")
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)
# Run the tool and set to a result object
arcpy.ImportToolbox(toolbox)
result = arcpy.reports.MyCustomAnalysis(os.path.join(outdir, "parcels.gdb", "taxlots"), "40", "MyOutput.pdf")
# Create GeoprocessingSharingDraft
target_server_connection = os.path.join(outdir, "gp_publisher_conn.ags")
sddraft = arcpy.sharing.CreateSharingDraft("STANDALONE_SERVER", "GP_SERVICE", service_name, result)
sddraft.targetServer = target_server_connection
sddraft.description = "This is description"
sddraft.summary = "This is summary"
sddraft.tags = "tag1, tag2"
sddraft.serverFolder = "MyServerFolder"
# Create Service Definition Draft file
sddraft.exportToSDDraft(sddraft_output_filename)
try:
# Run Stage Service tool
arcpy.server.StageService(sddraft_output_filename, sd_output_filename)
# Display the analyzer warning messages
print(arcpy.GetMessages(1))
# Publish to stand-alone server
arcpy.server.UploadServiceDefinition(sd_output_filename, target_server_connection)
except arcpy.ExecuteError:
# Display the analyzer error or processing error messages
print(arcpy.GetMessages(2))