你好,
我正在尝试使用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)
@DerekRichards我个人尽量避免重写。如果您在Visualization选项卡中为特性服务设置了任何配置,那么当您覆盖特性服务时,这些配置将被覆盖。此外,通常你有一个ArcGIS Pro项目,用于覆盖一个功能服务,其中包含一些设置(即符号,弹出窗口,标签)。截断/追加不需要使用Pro项目。
你好,
我用一种不同的方法覆盖门户中的托管服务。
我在ArcGIS Pro中有一个项目,并在同一台机器上通过任务调度程序有自动化的python脚本(创建了通用的python函数,可以通过传递所需的值来更新门户中的任何托管服务),这将做以下工作
这是函数,希望对大家有帮助
进口操作系统
导入系统
导入日志
进口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 ("-------------------------------------------------------")