Hi,
I have a hosted feature service in AGOL that requires a unique id (more user friendly than a GlobalID) for each feature in the service.
How can I accomplish that?
I have tried attribute rules, but they disappear once the service is published.
Arcade can only change field values in the field calculator on the data tab of the item details.
I can only consider AGOL-only solutions, i.e. a script that runs on a schedule on a server and updates the service is not an option.
I will appreciate any ideas.
Thanks
Hanlie
Solved! Go to Solution.
Actually, now that AGOL Notebooks have introduced notebook scheduling, a script that runs schedule is totally an option, even for AGOL-only users! And a simple field calculate would cost you next to nothing in terms of credits, even if the script ran fairly often.
But to your question, the simple answer is "you can't". I recall hearing at some point that Attribute Rules are part of AGOL's long term plan, but for the time being, you just can't have a field that updates itself. There needs to be some human (or scripted) interaction to update a field.
If you do decide to take the Python approach, we had a script running via an AGOL notebook that did just this sort of thing, making use of the calculate method. Here's a simplified version of it:
from arcgis import GIS
from arcgis.features import FeatureLayer
gis = GIS('https://arcgis.com', 'username', 'pw')
fl = FeatureLayer('url to your layer', gis=gis)
id_sql = "some SQL expression to derive your unique ID"
fl.calculate(
where = 'uniqueIDfield IS NULL',
calc_expression = {'field': 'uniqueIDfield', 'sqlExpression': id_sql}
)
And that's it! By specifically targeting rows that have no unique ID calculated yet, each run of the script only has to calculate values for a handful of rows, if any, and the entire process only takes a few seconds. At the current rate of 1.5 credits per hour, you're probably looking at a cost of 0.005 credits per execution.
Actually, now that AGOL Notebooks have introduced notebook scheduling, a script that runs schedule is totally an option, even for AGOL-only users! And a simple field calculate would cost you next to nothing in terms of credits, even if the script ran fairly often.
But to your question, the simple answer is "you can't". I recall hearing at some point that Attribute Rules are part of AGOL's long term plan, but for the time being, you just can't have a field that updates itself. There needs to be some human (or scripted) interaction to update a field.
If you do decide to take the Python approach, we had a script running via an AGOL notebook that did just this sort of thing, making use of the calculate method. Here's a simplified version of it:
from arcgis import GIS
from arcgis.features import FeatureLayer
gis = GIS('https://arcgis.com', 'username', 'pw')
fl = FeatureLayer('url to your layer', gis=gis)
id_sql = "some SQL expression to derive your unique ID"
fl.calculate(
where = 'uniqueIDfield IS NULL',
calc_expression = {'field': 'uniqueIDfield', 'sqlExpression': id_sql}
)
And that's it! By specifically targeting rows that have no unique ID calculated yet, each run of the script only has to calculate values for a handful of rows, if any, and the entire process only takes a few seconds. At the current rate of 1.5 credits per hour, you're probably looking at a cost of 0.005 credits per execution.
Hi Josh,
This sounds like a great solution, thank you very much!
Regards
Hanlie
Thank you, Josh! This is what I've been looking for. Just have to use the right search words because I've been looking for a solution for a while. Kristal