背景

使用Dynamic CRM平台开发完业务插件后,不可避免的就是进行插件调试,测试插件是否正常运行,网上关于Dynamic CRM的资料比较少,但对于调试的博客还是挺多的,足可见插件调试对于Dynamic CRM平台开发的重要性,网上的调试方法大差不差,根据网上的例子在项目中实践调试后,也想将适合我的调试方法记录下来。

SRE实战 互联网时代守护先锋,助力企业售后服务体系运筹帷幄!一键直达领取阿里云限量特价优惠。

调试方法

(直接附加程序的方式 不友好且比较简单不特别介绍)

一、使用插件工具中的分析器Profiler
1.打开插件工具PluginRegistration 点击安装Install Profiler

Dynamic CRM插件调试与单元测试 随笔 第1张

 

2.选中要调试的插件Step,点击Start Profiling

Dynamic CRM插件调试与单元测试 随笔 第2张

保持默认,直接点击OK

Dynamic CRM插件调试与单元测试 随笔 第3张

3.去Dynamic CRM平台里 操作注册插件的实体,点击保存的时候,会弹出来业务流程错误的提示,点击下载日志文件(并不是真的有错误 下载的文件用来后面复现操作调试用)

Dynamic CRM插件调试与单元测试 随笔 第4张

 4.去插件工具中关掉Profiing,点击Stop Profiling

Dynamic CRM插件调试与单元测试 随笔 第5张

 5.点击Debug,重演操作

Dynamic CRM插件调试与单元测试 随笔 第6张

 6.打开VS,找到插件的代码,设置断点,附加PluginRegistration进程

 Dynamic CRM插件调试与单元测试 随笔 第7张

 

 7.回到插件工具点击Start Execution

 Dynamic CRM插件调试与单元测试 随笔 第8张

 VS中会命中断点,进行VS调试即可。

 Dynamic CRM插件调试与单元测试 随笔 第9张

 

 二、基于RhinoMocks的单元测试

单元测试调试插件也是一种常规的方法,个人更喜欢这种方式,虽然可能在模拟实体数据的时候会比较费劲。
1.VS中添加单元测试项目

 Dynamic CRM插件调试与单元测试 随笔 第10张

 2.Nuget包中添加RhinoMocks、Microsoft.CrmSdk.CoreAssemblies

 Dynamic CRM插件调试与单元测试 随笔 第11张

 

 Dynamic CRM插件调试与单元测试 随笔 第12张

 3.编写测试,除了获取和设置实体处不同外,其他的都是通用的代码

Dynamic CRM插件调试与单元测试 随笔 第13张
 1 ClientCredentials clientCredentials = new ClientCredentials();
 2             clientCredentials.Windows.ClientCredential = new System.Net.NetworkCredential("MSCRM用户名", "密码", "");
 3             IServiceProvider serviceProvider = MockRepository.GenerateMock<IServiceProvider>();
 4             IPluginExecutionContext context = MockRepository.GenerateMock<IPluginExecutionContext>();
 5             IOrganizationServiceFactory factory = MockRepository.GenerateMock<IOrganizationServiceFactory>();
 6             IOrganizationService service = MockRepository.GenerateMock<IOrganizationService>();
 7 service = new OrganizationServiceProxy(
 8                 new Uri("http://127.0.0.1:80/Devbrock/XRMServices/2011/Organization.svc"), null, clientCredentials,
 9                 null); //Url为项目地址
10 ParameterCollection paramBag = new ParameterCollection();
11             //从数据库中检索crm_marketingperson实体中一条id为  的数据
12             Entity currentent = service.Retrieve("crm_marketingperson", new Guid("59F07FCA-CF5C-E911-80D9-E2DBE4BB07CF"),
13                 new Microsoft.Xrm.Sdk.Query.ColumnSet(true));
14             //也可以直接创建 一个测试用的实体
15             paramBag.Add("Target", currentent);
16             context.Stub(x => x.InputParameters).Return(paramBag);
17             serviceProvider.Stub(x => x.GetService(typeof(IPluginExecutionContext))).Return(context);
18             serviceProvider.Stub(x => x.GetService(typeof(IOrganizationServiceFactory))).Return(factory);
19             factory.Stub(x => x.CreateOrganizationService(null)).Return(service);
20 
21 //最后调用插件,将封装好的serviceProvider传进去
22 TestPlugin testPlugin = new TestPlugin();
23  testPlugin.Execute(serviceProvider);
View Code

 

 

总结:
调试的目的是为了检测问题,不论哪种方法,定位到问题,然后解决问题就可以了。

 

参考网址:

https://www.cnblogs.com/cuig/p/9077461.html

https://blog.csdn.net/vic0228/article/details/70948816

 

扫码关注我们
微信号:SRE实战
拒绝背锅 运筹帷幄