|
POST
|
Great thanks for looking into it. We got a ton of people out for the holiday so it may be next week before I get back to you with more. We are at Portal 11.5. I did have verbose on but will test again next week. Thanks a lot!
... View more
Wednesday
|
2
|
0
|
88
|
|
POST
|
I suggest you copy the form and publish it as a all new test service. Download the GDB from AGOL and get familiar with the structure. You can add fields to a existing service but not a table for a repeat that I know of. Typically for this you make a new service and port your old data over via Pro. Hope that helps
... View more
Wednesday
|
1
|
0
|
219
|
|
POST
|
What I do is have the original 123 relationships keys and then a second key I manage myself. I have a write up for this here. https://community.esri.com/t5/arcgis-survey123-questions/mapping-with-survey123-within-a-polygon-or-admin/td-p/836112 I connect 11-15 forms to a master point that way. We have the master point pre populated in field maps since we know where we have to go but we also have a project where we make them on the fly. It is like 4,000 fields total. One advantage is our crews can use multiple tablets onsite. Hope that helps
... View more
Wednesday
|
0
|
0
|
141
|
|
POST
|
We are still seeing this all the time in AGOL. Has become an extra workload. This year we moved to Portal and there were are seeing replicas are never getting removed regardless of Field Maps offline or online status. When I turn on Verbose logging and remove an offline area I see nothing at all happen in the log. Like it does not even try. It just keeps creating more and more Feature Service replicas every time I create an area. Check in with some users and its widespread and they are adding up "50 users, 60 versions, and 1358 replicas". @ColinLawrence Any idea what is up here? We have thousands of users so this gets out of hand pretty quick. Is something up in the new version? Thanks a lot
... View more
a week ago
|
2
|
2
|
115
|
|
IDEA
|
Big upvote! The fact you cannot expand windows is pretty baffling really. Esp in the Analysis widget where some tools are longer than others. We just have to pick one. Then if someone has a different display resolution they get stuck.
... View more
2 weeks ago
|
0
|
0
|
148
|
|
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
4 weeks ago
|
0
|
1
|
281
|
|
POST
|
Have you tried string-length(question, expression, or value)? https://doc.arcgis.com/en/survey123/desktop/create-surveys/xlsformformulas.htm
... View more
a month ago
|
0
|
4
|
588
|
|
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
04-16-2026
06:27 AM
|
0
|
0
|
391
|
|
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
04-15-2026
01:42 PM
|
0
|
0
|
746
|
|
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
04-14-2026
08:07 AM
|
0
|
0
|
361
|
|
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
04-13-2026
03:34 PM
|
0
|
4
|
608
|
|
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
04-13-2026
01:36 PM
|
0
|
0
|
522
|
|
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
04-13-2026
01:34 PM
|
1
|
0
|
522
|
| Title | Kudos | Posted |
|---|---|---|
| 2 | Wednesday | |
| 1 | Wednesday | |
| 2 | a week ago | |
| 1 | 04-13-2026 01:34 PM | |
| 2 | 04-10-2026 11:25 AM |
| Online Status |
Offline
|
| Date Last Visited |
Thursday
|