被抽调学习CRM两个礼拜,要回java组了,以后接触机会应该不多了。记录下这段时间的学习总结,以备不时之需。

通过微软提供的视频教程,基本上你想了解的一些很基础的问题,都能找到入口处,剩下的就是通过sdk和在各个论坛寻找解决方法了。

http://www.microsoft.com/china/msdn/events/webcasts/shared/webcast/Series/CRM.aspx

这个里面包含了的视频虽然不多,但老师都讲得很详细,对开发方面也有了相当篇幅的介绍。如plugin、ReportingService、workflow这些自定义开发都做了入门的基础介绍和例子。

学习圈子:

微软的CRM的圈子,目前我去得比较多的是google论坛上的Microsoft Dynamics CRM 3.0/4.0 微软客户管理系统。(:)因为会把所有我讨论关心的话题都发到邮箱中。)还有当然就是微软的官方论坛了。

这里面不得不提的几个人,刀客、darren liu 人都很不错呢,技术很牛,而且很热心,基本上都是有问必答。

好了,剩下的就是自己在学习过程中遇到的一些怪问题了

1.工作流突然不能使用。不知是不是与虚拟机迁移服务器有关,工作流不管设置如何的启动条件都无法运行。后来到了服务器上,查看日志发现,MSSQLSERVER审核失败。发现Microsoft CRM 异步处理服务的服务怪异的停止了。重新启动完后流程正常。在后面的3.0到4.0升级也发现了这个问题,把自己觉得相关的服务启动了后,也可以了。没有一个具体的说法,就是觉得很奇怪。

2.视图排序问题。看了Darren Liu的视图隐藏方式后,稍加修改,变成了现在的视图排序。目前自己还没有找到更好的对系统视图排序的方法,使用了一种很笨的方式来实现客户要求的视图排序顺序(通常客户提出的是按照他们的使用习惯来分类的,所以没有办法按照name来order)。

以下是实现方式。

public class ViewSort : IPlugin
    {
        #region IPlugin 成员
        public void Execute(IPluginExecutionContext context)
        {
            if (context.InputParameters != null && context.InputParameters.Contains(ParameterName.Query))
            {
                QueryExpression qe = (QueryExpression)context.InputParameters.Properties[ParameterName.Query];
                if (qe.EntityName == "savedquery")
                {
                    if (qe.Criteria != null)
                    {
                        if (qe.Criteria.Conditions != null)
                        {
                            OrderExpression order = new OrderExpression("modifiedon", OrderType.Descending);
                            qe.Orders.Clear();
                            qe.Orders.Add(order);
                            context.InputParameters.Properties[ParameterName.Query] = qe;
                        }
                    }
                }
            }
        }
        #endregion

}

呵呵,看完代码,大家大概明白我是用了什么方式来实现自定义排序的吧。在 savedquerybase表中提供了修改时间的字段(modifiedon),大家如果要将视图位置往前排的话,只要让视图modify一下就可以了。主要是为了使当前的修改时间靠前而已。这个方法很笨,如果知道的朋友,希望能提出更简单的方式。

3.在之前的crm实践中说到,owner字段在更新后是无法捕捉onchange事件的。其实认真观察一下,在对商机选择完负责人后,系统直接对数据库进行更改,更新负责人。然后刷新页面重新加载商机。页面重新加载了,当然就没有什么onchange事件了。

在google论坛上,刀客提过可以通过assign message plugin来实现,但是我在做测试的时候发现,context.InputParameters.Properties["Target"]是Moniker。所以通过了TargetRetrieveDynamic来获得DynamicEntity对象。底下只是代码只是进行了update操作的测试。具体要实现选择更新,可以根据需要进行更改。

public class AssignUpdatePlugin: IPlugin
    {
        #region IPlugin 成员

public void Execute(IPluginExecutionContext context)
        {
            Moniker m = (Moniker)context.InputParameters.Properties["Target"];
            if (m.Name == EntityName.opportunity.ToString())
            {
                ICrmService service = context.CreateCrmService(true);
                TargetRetrieveDynamic targetRetrieve = new TargetRetrieveDynamic();
                targetRetrieve.EntityName = m.Name;
                targetRetrieve.EntityId = m.Id;

RetrieveRequest request = new RetrieveRequest();
                request.ColumnSet = new AllColumns();
                request.Target = targetRetrieve;
                request.ReturnDynamicEntities = true;

RetrieveResponse response = (RetrieveResponse)service.Execute(request);
                DynamicEntity entity = (DynamicEntity)response.BusinessEntity;
                entity.Properties["description"] = "ss";
                service.Update(entity);
            }
        }
        #endregion

}

4.工作流实践:

待填充

5.报表实践:

待填充

转载于:https://www.cnblogs.com/monya/archive/2008/10/06/1304701.html

CRM学习笔记(一)相关推荐

  1. CRM 学习笔记(一)

    一.插件 1.插件 (1)Fetch查找如果查找条件有int类型,其值也需要加上单引号'',不过对于ID来说,大括号倒是不影响. (2)当有的插件逻辑涉及到了不让用户执行但是其他插件触发可以执行,那么 ...

  2. Dynamic CRM 2013学习笔记(十八)根据主表状态用JS控制子表自定义按钮

    有时要根据主表的审批状态来控制子表上的按钮要不要显示,比如我们有一个需求审批通过后就不能再上传文件了. 首先打开Visual Ribbon Editor, 如下图,我们可以利用Enable Rules ...

  3. Dynamic CRM 2013学习笔记(一)插件输入实体参数解析

    1. 问题描述 最近新建了一个post事件的插件,传入的参数处理如下: 1: if (context.InputParameters.Contains("Target") & ...

  4. Dynamic CRM 2013学习笔记(四十三)流程6 - 自定义流程活动

    当我们在流程里添加步骤时,有一些默认的步骤,像创建.更新.发邮件等,但如果你想加一个里面没有的步骤,比如发SMS消息,或者调用一个外部的web service,怎么办?这时就只能自定义一个流程活动了. ...

  5. Dynamic CRM 2013学习笔记(四十二)流程5 - 实时/同步工作流(Workflow)用法图解...

    实时工作流跟插件一样,也是用事件执行管道来执行,能在pre,post或核心操作中执行.跟插件一样,不能在创建之前和删除之后执行.如果执行过程中有异常发生,会取消并回滚整个操作.实时工作流里所有的活动和 ...

  6. Dynamic CRM 2013学习笔记(三十三)自定义审批流4 - 规则节点 -有分支的流程处理...

    上次介绍过节点的基本配置<Dynamic CRM 2013学习笔记(三十二)自定义审批流3 - 节点及实体配置>,这次介绍下规则节点,因为有时流程里会有一些分支.合并,这时就要用到规则节点 ...

  7. fetchxml 汇总_Dynamic CRM 2013学习笔记(十七)JS读写各种类型字段方法及技巧

    我们经常要对表单里各种类型的字段进行读取或赋值,下面列出各种类型的读写方法及注意事项: 1. lookup 类型 清空值 var state = Xrm.Page.getAttribute(" ...

  8. Dynamic CRM 2013学习笔记(二十二)插件里调用WCF服务

    1. 添加service: 2.调用WCF BasicHttpBinding myBinding = new BasicHttpBinding(); myBinding.Name = "Ba ...

  9. BizTalk学习笔记系列之二:实例说明如何使用BizTalk

    BizTalk学习笔记系列之二:实例说明如何使用BizTalk --.BizTalk学习笔记系列之二<?XML:NAMESPACE PREFIX = O /> Aaron.Gao,2006 ...

最新文章

  1. VMware试验问题总结
  2. Windows上搭建Nginx RTMP服务器并使用FFmpeg实现本地视频推流
  3. java编程最新图书_清华大学出版社-图书详情-《Java程序设计》
  4. 迅速步入jQuery的殿堂
  5. Session保存到Memcache
  6. 专家教你如何设置无线路由器 享受无线乐趣
  7. Netcore 读取body数据
  8. 面试字节跳动社招,我工资涨了60%,附带面经
  9. undefined reference to `crypto_get_random'
  10. java开源项目-六个经典的 SpringBoot 练手项目
  11. CCF 201903-1 小中大
  12. 学习狂神mybatis
  13. 《PyQt5 开发技巧与实践》学习笔记
  14. Android O 收音机学习研究(基于Car)
  15. numpy.triu、numpy.triu_indices、np.triu_indices_from函数使用
  16. git代码使用空格缩进
  17. 2017年最后两个工作日的年终总结
  18. WTL CCheckListViewCtrl详解及示例
  19. 女性患上胆囊炎的几率大吗?
  20. Mongodb使用之Aggregation聚合查询:.group()/.project()/.and().previousOperation()等api的使用

热门文章

  1. Spring Boot 项目瘦身指南,非常实用!
  2. 个人信息管理系统代码_学生信息管理系统(springboot + vue)
  3. csv文件 内容转义_CSV文件如何同时转义逗号和双引号?
  4. 算法【二分查找】(数组)
  5. Android Studio 环境搭建参考,jdk10javac命令提示不是内部或外部命令
  6. 作为程序猿,一定要知道的电脑快捷键和Eclipse快捷键
  7. 纽约大街上的免费WiFi,终于铺起来了
  8. Linux Redis 安装
  9. skynet源码阅读5--协程调度模型
  10. 仿照支付宝账单界面--listview分组显示 用来做!发!财树充值交易明细