使用SharePoint REST API复制列表后视图不显示字段与列表显示名的问题排查
核心问题分析
你的操作存在三个关键错误,导致视图无法正确显示字段和列表显示名:
1. 字段创建时属性混淆
步骤4中错误地将字段的InternalName赋值给了Title属性(Title是字段的显示名),后续通过MERGE更新Title虽然能修正API返回的DisplayName,但视图可能缓存了初始字段信息,导致显示异常。
2. 添加字段到视图后未保存视图更改
步骤6调用AddViewField仅将字段加入视图的字段集合,但未执行视图的保存操作,导致视图修改无法在界面生效。
3. 列表名称更新的冗余操作(可选优化)
先以InternalName创建列表再更新Title为显示名的流程,可能引发缓存同步问题,可通过创建时直接指定显示名和InternalName简化流程。
修正后的操作步骤
1. 从现有列表获取字段信息(保持不变)
GET let requestUrl = "/_api/web/lists/getbytitle('<ListTitle>')/Fields?$filter=Hidden eq false and ReadOnlyField eq false and InternalName ne 'Attachments' and InternalName ne 'ContentType'"
2. 创建列表(直接指定显示名和InternalName,省略后续MERGE)
POST let requestUrl = "/_api/web/lists" let body: [String: Any] = [ "__metadata": ["type": "SP.List"], "BaseTemplate": 100, "Title": "<ListDisplayName>", // 直接设置列表显示名 "StaticName": "<ListInternalName>" // 指定列表的InternalName(可选,若不需要自定义可省略) ]
3. 向新列表添加字段(直接设置显示名和InternalName,省略后续MERGE)
POST let requestUrl = "/_api/web/lists(guid'\(listInfo.listsId)')/Fields" let body: [String: Any] = [ "__metadata": ["type": "SP.Field"], "Title": "<FieldDisplayName>", // 字段显示名 "StaticName": "<FieldInternalName>", // 字段InternalName "FieldTypeKind": <FieldTypeKind>, ]
4. 将字段添加至默认视图并保存更改
// 第一步:添加字段到视图字段集合 POST let requestUrl = "/_api/web/lists(guid'<NewListId>')/views(guid'<ViewId>')/ViewFields/AddViewField('<NewFieldInternalName>')" // 第二步:保存视图修改 POST let requestUrl = "/_api/web/lists(guid'<NewListId>')/views(guid'<ViewId>')/Update()"
关键说明
StaticName属性才是用于指定列表/字段的InternalName,Title对应显示名,两者不可混淆。- 视图的任何修改(包括添加字段)都需要调用
Update()方法才能持久化并在界面显示。 - 若坚持保留原有的“创建后更新名称”流程,需确保更新后等待SharePoint缓存刷新(通常数分钟),但直接创建时指定正确属性是更可靠的方案。
内容的提问来源于stack exchange,提问作者Gura
相关产品推荐
相关产品推荐

