覆盖托管功能层在ArcGIS企业

124
5
4星期前
标签(1)
DerekRichards
通过
新贡献者II

你好,

我正在尝试使用ArcGIS API for Python在我的组织企业门户网站上自动更新托管功能层。中概述的步骤文档生成成功消息,为特征层修改的日期也会更新,但是记录的数量和几何图形在应该改变的时候保持不变。这就好像没有发生更新一样。任何建议将不胜感激,以下是我使用的路径省略的代码示例:

从arcgis。gis导入gis
从arcgis导入特性

从arcgis。feature导入FeatureLayerCollection

local_layer_for_overwriting =我想用来更新托管特性层的特性类的位置(实际位置省略)
portal_layer_itemid = '企业门户上托管功能层的itemid(省略)'
portal_layer_itemid = gis.content.get(portal_layer_itemid)
flayercol = FeatureLayerCollection.fromitem(portal_layer_dataitem)
flayercol.manager.overwrite (local_layer_for_overwriting)

0荣誉
5回复
JakeSkinner
通过 Esri尊敬的贡献者
Esri尊敬的贡献者

@DerekRichards

我建议使用截断/追加而不是覆盖。参见以下内容文档

0荣誉
DerekRichards
通过
新贡献者II

你好,

请问为什么要截断/追加而不是覆盖?是否有一些关于覆盖的东西会导致覆盖不能正常工作?

0荣誉
JakeSkinner
通过 Esri尊敬的贡献者
Esri尊敬的贡献者

@DerekRichards我个人尽量避免重写。如果您在Visualization选项卡中为特性服务设置了任何配置,那么当您覆盖特性服务时,这些配置将被覆盖。此外,通常你有一个ArcGIS Pro项目,用于覆盖一个功能服务,其中包含一些设置(即符号,弹出窗口,标签)。截断/追加不需要使用Pro项目。

DerekRichards
通过
新贡献者II

我认为这种方法可以工作,但似乎我需要升级到企业版,因为附件只适用于企业版10.8.1+,当我尝试使用它时,我目前遇到附加错误。也许重写也需要10.8.1+企业版?

0荣誉
KetanDoshi
通过
新贡献者III

你好,

我用一种不同的方法覆盖门户中的托管服务。

我在ArcGIS Pro中有一个项目,并在同一台机器上通过任务调度程序有自动化的python脚本(创建了通用的python函数,可以通过传递所需的值来更新门户中的任何托管服务),这将做以下工作

  • 获取ArcGIS Pro项目路径
  • 从该项目创建一个sddraft(服务文件)
  • 提供服务
  • 连接到门户和搜索服务将被覆盖
  • 发布新的服务文件(覆盖选项为true)

这是函数,希望对大家有帮助

进口操作系统
导入系统
导入日志
进口arcpy
进口pprint
从datetime导入datetime
从arcgis。gis导入gis

defoverwritehostedfeatureservice (portal_url, user_name, pwd, prj_path, prj_name, mp_name, sd_fs_name, logfile_name):
日志记录。basicConfig(filename=logfile_name, format='%(asctime)s %(message)s', datefmt='%m/%d/%Y %I:% m:% s %p', level=logging.DEBUG)
logging.info (' ')
logging.info('服务名- ' + sd_fs_name)
logging.info (' ')

Portal = portal_url
User = user_name
密码= PWD
fullPrjPath = os.path。加入(prj_path prj_name)
Sddraft = os.path。Join (prj_path, sd_fs_name + ".sddraft")
Sd = os.path。Join (prj_path, sd_fs_name + ".sd")

#创建一个新的SDDraft文件,并将草稿转移到SD文件。
logging.info("创建SD文件- " + SD)
logging.info("创建SDDraft文件- " + SDDraft)
arcpy.env.overwriteOutput = True

prj = arcpy.mp.ArcGISProject(fullPrjPath)
maps = prj.listMaps()
对于地图中的地图:
如果map.name == mp_name:
Mp = map
logging.info("地图名称- " + mp.name)

arcpy.mp。CreateWebLayerSDDraft(mp, sddraft, sd_fs_name, ' my_hostd_services ', 'FEATURE_ACCESS')

arcpy。StageService_server (sddraft sd)
logging.info("暂存SD文件完成")

#连接到指定门户
gis = gis(门户,用户,密码)

#定位SD文件,更新并覆盖指定门户上的服务
sdItem = gis.content。搜索(“{}AND owner:{}”。[0] . format(sd_fs_name, user), item_type="服务定义"
#仅用于调试目的
#logging.info("发现SD: {}, ID: {} n上传和覆盖…".format(sdItem. info)标题、sdItem.id))
sdItem.update(数据= sd)
fs = ssditem .publish(覆盖=True)
logging.info("覆盖现有功能服务完成")

#设置所需的共享选项。下面的代码将服务设置为与Everyone和组织共享。
shrOrg = True
shrEveryone = ""
shrGroups = ""

如果shrOrg或shrEveryone或shrGroups:
fs。共享(org=shrOrg, everyone=shrEveryone, groups=shrGroups)

logging.info("已完成更新:{}- ID: {}".format(fs. log .info)标题、fs.id))
logging.info ("-------------------------------------------------------")

0荣誉