Dynamics 365 CRM本地双组织案例同步实现方案咨询
在本地部署Dynamics 365 CRM中跨组织同步案例的实现方案
先排查你之前插件失败的常见原因
- 跨组织连接字符串错误:本地部署CRM的连接格式有误,比如URL、域账号信息填错
- 权限不足:插件运行使用的账号在第二个组织没有案例创建权限,或者无法访问第二个组织的CRM服务
- 数据映射遗漏:未正确对应两个组织案例实体的字段,比如lookup字段(如客户)未做关联处理
- 插件注册时机错误:比如用了PreOperation阶段,此时案例数据还未完全写入数据库,导致获取的信息不全
- 隔离模式限制:沙盒插件可能无法访问外部组织的CRM服务(本地部署建议用非沙盒模式)
正确的实现步骤
1. 配置跨组织服务连接
要在插件中成功连接第二个组织,必须使用正确的CrmServiceClient初始化参数,本地部署的典型连接字符串格式如下:
string connectionString = "AuthType=AD;Url=http://[第二个CRM服务器地址]/[第二个组织名称]/XRMServices/2011/Organization.svc;Domain=你的域;Username=域账号;Password=账号密码;"; CrmServiceClient crmClient = new CrmServiceClient(connectionString); if (!crmClient.IsReady) { throw new InvalidOperationException("无法连接到目标组织:" + crmClient.LastCrmError); } IOrganizationService targetOrgService = crmClient.OrganizationServiceProxy;
注意:使用的域账号必须同时在两个组织中拥有案例创建权限和系统用户身份。
2. 编写插件核心逻辑
插件要注册在第一个组织的Case实体Create消息的PostOperation阶段(确保能获取完整的案例数据)。核心逻辑步骤:
- 从插件上下文中获取刚创建的案例实体:
Entity sourceCase = (Entity)context.InputParameters["Target"]; - 初始化第二个组织的
IOrganizationService(用上面的连接字符串) - 创建目标案例实体,映射字段:
Entity targetCase = new Entity("incident"); // 映射普通字段 targetCase["title"] = sourceCase.GetAttributeValue<string>("title"); targetCase["description"] = sourceCase.GetAttributeValue<string>("description"); targetCase["prioritycode"] = sourceCase.GetAttributeValue<OptionSetValue>("prioritycode"); // 处理Lookup字段(比如客户):需要在目标组织中找到对应的客户记录 EntityReference sourceCustomer = sourceCase.GetAttributeValue<EntityReference>("customerid"); if (sourceCustomer != null) { // 这里假设用客户名称匹配,也可以用外部ID(如果有同步) QueryExpression query = new QueryExpression("account"); query.Criteria.AddCondition("name", ConditionOperator.Equal, sourceCustomer.Name); EntityCollection customers = targetOrgService.RetrieveMultiple(query); if (customers.Entities.Count > 0) { targetCase["customerid"] = new EntityReference("account", customers.Entities[0].Id); } } // 在目标组织创建案例 Guid targetCaseId = targetOrgService.Create(targetCase); - 添加错误处理和日志:用
context.TraceService.Trace()记录关键步骤,方便排查问题
3. 插件注册配置
使用Plugin Registration Tool完成注册:
- 连接到第一个组织,注册插件程序集
- 关联到
Case实体的Create消息,选择PostOperation阶段 - 设置插件的执行用户:建议选择一个在两个组织都有足够权限的域账号,或者设置为“运行在调用用户上下文”(需确保调用用户能访问第二个组织)
- 隔离模式:本地部署下选择None(非沙盒),避免沙盒环境的网络访问限制
4. 调试与验证
- 启用插件跟踪日志:在第一个组织的设置中开启插件跟踪,创建案例后查看跟踪日志,定位报错信息
- 使用Plugin Registration Tool的调试功能:附加到CRM进程,单步调试插件代码,检查连接、数据映射是否正确
- 手动验证:在第一个组织创建案例后,登录第二个组织查看是否生成对应案例
注意事项
- 确保两个组织的
Case实体字段结构一致,避免因字段不存在导致创建失败 - 添加防循环逻辑:在第二个组织的案例实体上不要注册反向同步的插件,或者在插件中判断案例来源(比如新增一个“同步来源”字段,标识是手动创建还是同步生成,避免循环触发)
- 处理批量创建场景:如果有批量导入案例的需求,建议修改插件支持批量处理,或者用异步插件避免超时
内容的提问来源于stack exchange,提问作者basant reda
相关产品推荐
相关产品推荐

