如何恢复MSCRM实体中数据库留存的已删除字段
恢复软删除的实体字段(解决字段名称重复无法新建的问题)
嘿,我之前在Dynamics 365里也碰到过一模一样的情况!当你从实体删除字段时,系统其实只是做了软删除——数据库里会保留这个字段的记录,只是标记为已删除状态,这就是为啥你想新建同名字段时会提示重复,但在解决方案的实体字段列表里又看不到它。下面是几个可行的恢复方法:
方法1:通过Power Platform管理中心恢复(最简便)
- 登录Power Platform管理中心,找到你对应的环境
- 进入「环境 > 资源 > Dynamics 365数据库」,点击「管理」按钮
- 在弹出的页面里选择「恢复已删除的记录」,从下拉菜单中选中「实体字段」
- 在搜索框输入你要恢复的字段逻辑名,找到对应的记录后勾选,点击「恢复」
- 等待操作完成后,回到解决方案里刷新实体,就能看到这个字段重新出现在字段列表中了
方法2:使用Web API恢复(适合自动化或批量操作)
如果你习惯用API操作,可以调用Dynamics 365的Web API来恢复软删除字段:
- 构造POST请求:
POST [你的组织URI]/api/data/v9.2/EntityDefinitions(LogicalName='abc_salespersonname')/Attributes/Microsoft.Dynamics.CRM.RecoverDeletedAttribute
- 请求头需要包含:
Content-Type: application/json Accept: application/json OData-MaxVersion: 4.0 OData-Version: 4.0
- 请求体替换为你的字段逻辑名:
{ "LogicalName": "你的字段逻辑名" }
- 发送请求后,刷新实体元数据就能看到字段恢复了
方法3:直接操作数据库(仅限内部部署/有数据库权限的场景)
如果是内部部署环境且你有数据库操作权限,可以直接修改元数据:
- 先查询找到软删除的字段记录:
SELECT * FROM MetadataSchema.Attribute WHERE EntityId = (SELECT EntityId FROM MetadataSchema.Entity WHERE LogicalName = 'abc_salespersonname') AND IsDeleted = 1 AND LogicalName = '你的字段逻辑名'
- 拿到对应的
AttributeId后,执行更新语句:
UPDATE MetadataSchema.Attribute SET IsDeleted = 0 WHERE AttributeId = '查询到的字段GUID'
- 最后刷新系统元数据(比如重启Dynamics 365服务,或在Power Apps里刷新解决方案),字段就会回到实体列表
注意事项
- 恢复字段后,原来关联的表单、视图、业务规则等配置可能需要重新验证,因为软删除过程中这些关联可能被标记为无效
- 生产环境操作前一定要做好数据备份,避免误操作影响业务数据
- 所有操作都需要拥有系统管理员或系统定制员的权限才能执行
内容的提问来源于stack exchange,提问作者Tom Hanson
相关产品推荐
相关产品推荐

