|
POST
|
Goepoint goes to the shape field so I think you can change it fine. It probably just defaulted to the layer name. I would just try it and see.
... View more
Thursday
|
0
|
1
|
134
|
|
POST
|
Have you tried string-length(question, expression, or value)? https://doc.arcgis.com/en/survey123/desktop/create-surveys/xlsformformulas.htm
... View more
Wednesday
|
0
|
4
|
291
|
|
IDEA
|
Yes forms only block forms from editing. You can get around it in the table or Pro or even a new map. You have to set at the service level as posted to be safe. Or if its just for this app make a Hosted View then config editing and use that view for your app then you can still edit the original on the backend if needed.
... View more
3 weeks ago
|
0
|
0
|
200
|
|
POST
|
I am getting this error but I doubled checked and I do not have any special fields at all. Never used them. What else could it be? I got about 300 fields per layer but thats not that many.
... View more
3 weeks ago
|
0
|
0
|
342
|
|
IDEA
|
Changing these editable settings in a Form does not block them from simply editing in the attribute table or in Pro. Or open the service in a new map and edit. Only safe way now is a database view. More info here plus a script to turn them off https://community.esri.com/t5/arcgis-online-questions/turning-off-editing-field-by-field/m-p/1695946#M68404
... View more
3 weeks ago
|
0
|
0
|
198
|
|
POST
|
When opening a form for editing most calcs will not refire. Esp if no changes. If you tried Calculation modes yet? I am not sure there on editing still but maybe. https://community.esri.com/t5/arcgis-survey123-blog/survey123-tricks-of-the-trade-calculation-modes/ba-p/1206967 May have to set to always on the time calc and maybe even pulldata to get it to go. Test date first. You could also look at hiding all the questions in a big group but my guess is users will think it is broke. Hope that is it.
... View more
3 weeks ago
|
0
|
4
|
445
|
|
POST
|
Note this does not stop them from just using the attribute table in the map (which is what most of our users do). They can get around all of it in Pro also. Safest way is a view as listed below.
... View more
3 weeks ago
|
0
|
0
|
353
|
|
POST
|
I also updated your script to have it turn whole layers off in one config line and a list per layer telling only which fields to turn ON. That was my use case. Does it in a single call also. Works slick! Did 37 layers 4,000 fields in a few mins. Thanks! # --- Configuration ------------------------------------------------------------
VIEW_ITEM_ID = "View Item ID" # your view item id
# Turn OFF editing for ALL fields for these layer/table IDs (one call per layer/table).
FULLY_DISABLE_LAYER_IDS = [2,3,4]
# For these layer/table IDs, leave editing ON only for the listed fields.
# All other currently-editable fields will be turned OFF in a single call.
# 0 is Points and 1 is Field Visits
ALLOW_EDIT_FIELDS_BY_LAYER = {
# Example:
0: ["StreamName", "OfficeEvaluator"],
1: ["ReasonNotSampled", "PDFgenerate"],
}
# Optional: For layers in this list, leave *only* GLOBAL_ALLOWED_FIELDS editable.
# (This preserves your original behavior where some layers keep a short allowlist.)
EDIT_DATASET_IDX_LIST = [] # e.g., layer 0 uses the global allowlist
GLOBAL_ALLOWED_FIELDS = []
# Behavior controls
CASE_SENSITIVE_FIELD_MATCH = False # False means case-insensitive matching by field name
DRY_RUN = False # True = print intended changes, do NOT call update_definition
# --- Script -------------------------------------------------------------------
from arcgis.gis import GIS
from arcgis.features import FeatureLayerCollection
def norm(name: str) -> str:
return name if CASE_SENSITIVE_FIELD_MATCH else name.lower()
# Connect to the view item and get the layer collection
gis = GIS("Pro")
view_item = gis.content.get(VIEW_ITEM_ID)
if view_item is None:
raise Exception(f"View item not found: {VIEW_ITEM_ID}")
view_flc = FeatureLayerCollection.fromitem(view_item)
# Iterate through layers and tables
view_datasets = (view_flc.layers or []) + (view_flc.tables or [])
for ds in view_datasets:
ds_props = ds.properties
ds_id = ds_props.get("id")
ds_name = ds_props.get("name", f"id:{ds_id}")
fields = ds_props.get("fields", [])
mgr = ds.manager
# Decide the mode for this dataset
# 1) Full disable list wins
if ds_id in FULLY_DISABLE_LAYER_IDS:
updates = []
for f in fields:
# Only touch fields that are currently editable
if f.get("editable", False):
updates.append({"name": f["name"], "editable": False})
if updates:
payload = {"fields": updates}
if DRY_RUN:
print(f"[DRY RUN] {ds_name} (id={ds_id}) -> disable ALL editable fields ({len(updates)}).")
else:
mgr.update_definition(payload)
print(f"{ds_name} (id={ds_id}) -> disabled {len(updates)} editable fields in one call.")
else:
print(f"{ds_name} (id={ds_id}) -> no changes (no fields marked editable).")
continue # Done with this dataset
# 2) Allow-only list per layer
allow_only = None
if ds_id in ALLOW_EDIT_FIELDS_BY_LAYER:
allow_only = set(norm(n) for n in ALLOW_EDIT_FIELDS_BY_LAYER[ds_id])
# 3) If not per-layer allowlist, check if this dataset is in your classic list
# that should keep only GLOBAL_ALLOWED_FIELDS editable.
elif ds_id in EDIT_DATASET_IDX_LIST:
allow_only = set(norm(n) for n in GLOBAL_ALLOWED_FIELDS)
updates = []
if allow_only is not None:
# Turn OFF any editable field that is NOT in the allowlist.
for f in fields:
if not f.get("editable", False):
continue
if norm(f["name"]) in allow_only:
# Leave it editable; no change required.
continue
updates.append({"name": f["name"], "editable": False})
else:
# Default behavior: if the dataset is not in any configured list,
# do NOT change anything. If you prefer the old behavior (disable all),
# uncomment the following to disable all editable fields by default:
#
# for f in fields:
# if f.get("editable", False):
# updates.append({"name": f["name"], "editable": False})
pass
# Apply (in one call) if there are updates
if updates:
payload = {"fields": updates}
if DRY_RUN:
print(f"[DRY RUN] {ds_name} (id={ds_id}) -> disable {len(updates)} fields not in allowlist.")
else:
mgr.update_definition(payload)
print(f"{ds_name} (id={ds_id}) -> disabled {len(updates)} fields in one call.")
else:
print(f"{ds_name} (id={ds_id}) -> no changes required.")
print("Finished.")
... View more
3 weeks ago
|
1
|
0
|
353
|
|
POST
|
@MobiusSnake This is great was just looking at this today thinking how am I going to turn off 4,000+ fields. I wish we could turn off whole layers like you can for geometry. Right here I can turn off all geo why can't I also turn off all editing using a layer list vs forcing me to do each and every field. Not very scalable here. Is there any setting at the layer level or is it field only? thanks
... View more
3 weeks ago
|
0
|
1
|
358
|
|
POST
|
Is this Portal? We have been seeing this setting here getting turned on by default now in Portal and we have to turn it off. Not sure why its suddenly doing that. It caused what you are seeing can edit online but not offline. Hope that is it
... View more
3 weeks ago
|
2
|
0
|
319
|
|
POST
|
Upvoted! We are a massive company and we can get stuck if a single person is out. Simply cannot have that. Thanks a lot
... View more
3 weeks ago
|
0
|
0
|
147
|
|
IDEA
|
Ran into this today with Views. We need collab members to be able to update pretty much anything. Basically if one person is out we are totally stuck. We cannot have one point of failure at a multi-billion dollar company. I would not consider this restriction enterprise class. We run into these blocks a lot. Thank you
... View more
3 weeks ago
|
0
|
0
|
113
|
|
POST
|
Sounds like they will have internet access? I would make a Dashboard and it could be slick. You could color code, etc and use launch links to open the forms into 123 app. Dashboard works decent on a tablet browser. Could do experience builder also but its a learning curve there.
... View more
4 weeks ago
|
1
|
0
|
194
|
| Title | Kudos | Posted |
|---|---|---|
| 1 | 3 weeks ago | |
| 2 | 3 weeks ago | |
| 1 | 4 weeks ago | |
| 1 | 4 weeks ago | |
| 2 | 03-23-2026 03:44 PM |
| Online Status |
Online
|
| Date Last Visited |
44m ago
|