当添加新行时自动更新字段?

214
6.
跳转到解决方案
2个星期前
mikemacrae.
经过
常规贡献者

大家好,我想知道是否有一种方法可以在添加新行时自动更新宿主特性层中的字段。

例如,假设我在我的托管特性层中有一个表,它包含5个字段。为了简单起见,我们假设其中一个字段是字符串字段,并通过连接其他两个字段来填充。目前,我必须在每次添加新行时手动运行字段计算器来更新该字段。我希望有一种方法来存储字段计算器公式在字段和每一次新的行添加,它只是自动更新字段或任何其他方法,自动更新字段。这是可行的吗?

谢谢

0.荣誉
1解决方案

接受的解决方案
jcarlson
经过 MVP常规贡献者
MVP常规贡献者

作为@Davidpike.建议,您可以在“经典”映射中显示为弹出窗口中的表达式。有没有理由需要将派生值作为自己的列?

不管怎样,如果您熟悉一点Python,有一种方法可以自动更新它。

简单的版本:频繁的间隔

所以,你可以在AGOL笔记本中写一个像这样的脚本:

来自ArcGIS Import GIS#连接到门户网站,获取图层GIS = GIS('您的org-url','用户','password')lyr = gis.content.get('hosted-tallay-itemid')#callatulateThe Field Lyr.Layers [0] .calculate(calc_expression = {'field':'concat-fieldname','值':'concat(firstfield,secondfield)'})

然后使用任务在笔记本中的标签安排它运行经常能让事情跟上时代。预定的运行确实会花费您的学分,但是这样一个简短、简单的脚本可能花费很少,即使经常运行它。

花式版本:注入参数和Webhooks

这可能会更复杂(可能比价值更麻烦),但只会触发创建新功能的时候。让工作确实要求您的图层设置某种方式,因此也许此选项已无法访问。但它值得一提。

首先,准备一个像上面一样的笔记本,但要包括一个在哪里您的实地计算中的条款。设置变量在哪里到“1=1”的前面的笔记本,然后使用注入参数允许这种情况被覆盖。

创建一个定期运行的任务,但暂时禁用它。

其中='1 = 1'lyr.layers [0] .calculate(其中=哪里......

下一个,创建一个webhook在托管特性服务中。当你觉得有必要时,定义它来触发,也许是在添加和更新功能时。

现在,这是棘手的部分。您并不是对网络呼吁的内容进行控制有效载荷这里需要某种中介。很多ESRI示例使用Integromat,也许您有Microsoft流/电源自动化。如果你知道你在做什么,你还可以创建一个完全自定义的程序来执行此操作。

但是,您执行此操作,使中间捕获有效载荷并获取创建功能的ObjectId。然后,您可以提交帖子请求https://kendall.maps.arcgis.com/sharing/rest/community/users/ /任务/ /更新安排你的笔记本运行。

您的帖子请求的有效载荷将如下所示:

{“title”:“单次运行”,“itemId”:“您的笔记本题目”,“startdate”:“当前时间的Unix时间戳”,“类型”:“executeNotebook”,“参数”“{\'updatePortalItem \':true,\'saptinjected parameters \':false,\'notebookparameters \':\\\'其中where \\\':\\\'objectId = theObjectid \\\'} \'}“,分钟”:“*”,“小时”:“*”,“Dayofmonth”:“*”,“月”:“*”,“Dayofweek”:“?”,“Maxoccurrencts”:“1”“f”:“json“}

你可能需要弄清楚令牌部分。

值得注意的是:如果对您来说更容易的话,您也可以在Python中处理预定的笔记本任务。

无论如何,这应该让您的任务重新设置在当前时间运行一次。通过从Webhook中创建/更新的ObjectID中的管道,任务的“其中”参数将对您的计算过滤到添加或更新的功能。

我已经走了很长时间。谈谈使用大炮来擦拭蚊子!简单的选择可能是你想要的。

- 乔希卡尔森
肯德尔县GIS.

在原始帖子中查看解决方案

6个回答
戴维克斯
经过 MVP频繁的贡献者
MVP频繁的贡献者

它在网络地图上吗?您可以只添加一个Arcade属性表达式。

0.荣誉
布列塔尼布森
偶尔的贡献者二世

你好@Davidpike.- 从我们的用例透视中,arcade属性表达式很大,但我们的用户始终需要能够将数据导出到.csv或类似。由于地图属性表达式仅在飞行中计算并仅在Web地图/应用程序内实现,因此在数据中正确地具有它们是理想的。下面推荐的预定更新让我们关闭,但是在同时具有experation experse / populate的终端用户正在编辑数据将是最好的情况。

jcarlson
经过 MVP常规贡献者
MVP常规贡献者

作为@Davidpike.建议,您可以在“经典”映射中显示为弹出窗口中的表达式。有没有理由需要将派生值作为自己的列?

不管怎样,如果您熟悉一点Python,有一种方法可以自动更新它。

简单的版本:频繁的间隔

所以,你可以在AGOL笔记本中写一个像这样的脚本:

来自ArcGIS Import GIS#连接到门户网站,获取图层GIS = GIS('您的org-url','用户','password')lyr = gis.content.get('hosted-tallay-itemid')#callatulateThe Field Lyr.Layers [0] .calculate(calc_expression = {'field':'concat-fieldname','值':'concat(firstfield,secondfield)'})

然后使用任务在笔记本中的标签安排它运行经常能让事情跟上时代。预定的运行确实会花费您的学分,但是这样一个简短、简单的脚本可能花费很少,即使经常运行它。

花式版本:注入参数和Webhooks

这可能会更复杂(可能比价值更麻烦),但只会触发创建新功能的时候。让工作确实要求您的图层设置某种方式,因此也许此选项已无法访问。但它值得一提。

首先,准备一个像上面一样的笔记本,但要包括一个在哪里您的实地计算中的条款。设置变量在哪里到“1=1”的前面的笔记本,然后使用注入参数允许这种情况被覆盖。

创建一个定期运行的任务,但暂时禁用它。

其中='1 = 1'lyr.layers [0] .calculate(其中=哪里......

下一个,创建一个webhook在托管特性服务中。当你觉得有必要时,定义它来触发,也许是在添加和更新功能时。

现在,这是棘手的部分。您并不是对网络呼吁的内容进行控制有效载荷这里需要某种中介。很多ESRI示例使用Integromat,也许您有Microsoft流/电源自动化。如果你知道你在做什么,你还可以创建一个完全自定义的程序来执行此操作。

但是,您执行此操作,使中间捕获有效载荷并获取创建功能的ObjectId。然后,您可以提交帖子请求https://kendall.maps.arcgis.com/sharing/rest/community/users/ /任务/ /更新安排你的笔记本运行。

您的帖子请求的有效载荷将如下所示:

{“title”:“单次运行”,“itemId”:“您的笔记本题目”,“startdate”:“当前时间的Unix时间戳”,“类型”:“executeNotebook”,“参数”“{\'updatePortalItem \':true,\'saptinjected parameters \':false,\'notebookparameters \':\\\'其中where \\\':\\\'objectId = theObjectid \\\'} \'}“,分钟”:“*”,“小时”:“*”,“Dayofmonth”:“*”,“月”:“*”,“Dayofweek”:“?”,“Maxoccurrencts”:“1”“f”:“json“}

你可能需要弄清楚令牌部分。

值得注意的是:如果对您来说更容易的话,您也可以在Python中处理预定的笔记本任务。

无论如何,这应该让您的任务重新设置在当前时间运行一次。通过从Webhook中创建/更新的ObjectID中的管道,任务的“其中”参数将对您的计算过滤到添加或更新的功能。

我已经走了很长时间。谈谈使用大炮来擦拭蚊子!简单的选择可能是你想要的。

- 乔希卡尔森
肯德尔县GIS.

在原始帖子中查看解决方案

戴维克斯
经过 MVP频繁的贡献者
MVP频繁的贡献者

书签:sife_smiling_face:

0.荣誉
布列塔尼布森
偶尔的贡献者二世

相同!谢谢你!@jcarlson

0.荣誉
mikemacrae.
经过
常规贡献者

谢谢@jcarlson为了回应的努力!非常感激。我们正在探索预定剧本的想法,但我希望有一种更自动的方式。我们使用使用属性规则内置Pro时在表格上,但在将GeoDatabase作为托管要素层发布时,它们不会携带。谢谢@brittanyburson.谢谢你回答我的另一个问题在这里。这可能是ArcGIS Online的函数,这将是一个很棒的功能!