从ArcGIS Enterprise迁移至AGOL:FME插入无法自定义ObjectID
核心结论:无法自定义ArcGIS Online托管要素图层的ObjectID值
ArcGIS Online(AGOL)的esriFieldTypeOID是系统强制维护的只读字段,不管通过图层定义JSON修改editable属性还是其他方式,后台都会自动重置为false。这是AGOL托管图层的底层机制,和ArcGIS Enterprise直接对接数据库的模式不同——后者可以复用数据库主键作为OID,但AGOL的OID由平台自动分配、唯一且不可干预。
推荐替代方案(结合FME同步场景)
1. 新增自定义源ID字段
在AGOL要素图层中添加一个独立字段,比如命名为Source_ObjectID,字段类型设置为esriFieldTypeInteger(或esriFieldTypeString,如果源ID是字符串),并设置为可编辑。同步数据时,将源数据库的自定义标识值写入这个字段,而非试图修改AGOL的ObjectID。
2. 配置FME工作空间实现映射
在FME工作流中做以下配置:
- 读取源数据库时,提取自定义标识字段(比如源库的
id) - 写入AGOL图层时,将该字段映射到新增的
Source_ObjectID字段 - 保留AGOL自动生成的ObjectID字段,无需做任何干预
后续需要匹配源数据与AGOL记录时,直接用Source_ObjectID作为关联键:
- 更新源数据后,通过
Source_ObjectID定位AGOL中对应的记录进行更新 - 删除操作同理,基于
Source_ObjectID匹配目标记录
3. 优化图层使用体验(可选)
- 如果需要在AGOL中频繁基于源ID操作,可以创建图层视图,将
Source_ObjectID设为默认显示字段,方便筛选、查询 - 给
Source_ObjectID添加唯一约束,避免重复写入,确保关联的准确性
关于你尝试的操作说明
你之前修改图层定义的editable属性无效,本质是AGOL对esriFieldTypeOID字段有严格管控:
你尝试的修改代码:
"fields": [ { "name": "id", "type": "esriFieldTypeOID", "alias": "id", "editable": true, ... } ]保存后
editable自动恢复为false,是因为AGOL会强制重置OID字段的属性,该字段仅用于平台内部的要素唯一标识,不支持用户自定义赋值。
内容的提问来源于stack exchange,提问作者DHend
相关产品推荐
相关产品推荐

