You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Dataverse活动记录迁移:如何保留statecode、statuscode及历史数据?

解决Dataverse活动记录迁移中状态码设置的问题

核心原因

Dataverse创建活动记录时,默认初始状态为Open(statecode=0),若在创建阶段直接设置已完成状态(statecode=1),会触发系统状态验证——此时记录仍处于Open状态上下文,不允许直接绑定对应已完成状态的statuscode,这就是你收到报错的根源。

正确迁移步骤

1. 先创建基础记录,暂不设置状态码

创建活动记录时,只赋值createdby、modifiedby、modifiedon、ownerid及其他业务字段,保留系统默认的Open状态完成创建。

2. 记录创建后立即更新状态

创建成功后,单独执行更新操作,设置与源记录一致的statecode和statuscode:

  • 邮件:设置statecode=1(已完成)、statuscode=3(已发送)
  • 任务/信函/电话呼叫:按源记录的状态码组合对应更新即可

3. C#代码实现示例

将创建与更新操作放在同一逻辑中,保证流程原子性:

// 1. 创建邮件记录,不设置状态码
Entity email = new Entity("email");
email["subject"] = sourceEmail["subject"];
email["createdby"] = sourceEmail["createdby"];
email["modifiedby"] = sourceEmail["modifiedby"];
email["modifiedon"] = sourceEmail["modifiedon"];
email["ownerid"] = sourceEmail["ownerid"];
// 其他业务字段赋值...

Guid emailId = service.Create(email);

// 2. 更新状态码至目标值
Entity updateEmail = new Entity("email", emailId);
updateEmail["statecode"] = new OptionSetValue(1); // 已完成
updateEmail["statuscode"] = new OptionSetValue(3); // 已发送

service.Update(updateEmail);

4. 预操作插件调整

如果用预操作插件处理历史字段,确保插件仅负责createdby、modifiedby等字段的赋值,不要涉及状态码逻辑,避免与系统默认状态验证冲突。

额外注意事项

  • 不同活动类型的状态码组合存在差异,迁移前需确认源环境中各活动的statecode与statuscode对应关系,若目标环境有自定义状态,需先迁移状态元数据
  • 已取消、已拒绝等特殊状态的设置,同样遵循“先创建再更新”的规则,符合Dataverse的状态流转逻辑

内容的提问来源于stack exchange,提问作者Frode Magnussen

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.16 15:57:08