博客园  :: 首页  :: 新随笔  :: 联系 :: 订阅 订阅  :: 管理

Microsoft Dynamics CRM2011 必备知识点

Posted on 2014-04-17 22:21  Hamilton Tan  阅读(2383)  评论(6编辑  收藏  举报

一、CRM基本知识

1.CRM2001 有几个服务端点?

答:对外公开的服务,如Web服务,WCF,Restful API

2.一个ERP系统,要访问CRM的数据,CRM2011有哪些现有的服务入口提供给我

答:从JS访问CRM数据,用的是REST。

CRM2011并不提供现成的数据库方式的访问服务。

端口就两个:rest    soap

一共3个:
a.发现服务。b.组织服务。c.组织数据服务。

CRM设置—>自定义—>自定义项—>开发人员资源

三个各提供啥服务,有啥区别?

从JS访问CRM数据,用的是REST。 这个rest的原理是什么?   

1).HTTP
2).TCP/IP 
3).Socket编程
4).相关知识 OData的微软的REST自定标准
 
TCP/IP
TCP/IPTransmission Control Protocol/Internet Protocol)即传输控制协议/网间协议,是一个工业标准的协议集,它是为广域网(WANs)设计的。
         UDPUser Data Protocol,用户数据报协议)是与TCP相对应的协议。它是属于TCP/IP协议族中的一种。
        这里有一张图,表明了这些协议的关系。
 
TCP/IP协议族包括运输层、网络层、链路层。现在你知道TCP/IPUDP的关系了吧。
 

3.常见的两个错误:

1) 未将对象引用到对象实例
2) 关键字不在字典中

声明字符串变量时未赋空值就应用变量。
未用new初始化对象。

4.MSCRM_CONFIG库有啥用?

   答:存储的组织信息;MSCRM_CONFIG是安装CRM时,第一个生成的库。

        保存服务器配置、服务器角色、组织信息、组织配置、用户信息、用户配置等。

5.组织发现服务是干什么用的?

答:发现组织的

6.http 和https(Hypertext Transfer Protocol over Secure Socket Layer) 对比:

  1) https协议需要到ca申请证书,一般免费证书很少,需要交费。
  2) http是超文本传输协议,信息是明文传输,https 则是具有安全性的ssl加密传输协议。
  3) http和https使用的是完全不同的连接方式,用的端口也不一样,前者是80,后者是443。
  4) http的连接很简单,是无状态的;HTTPS协议是由SSL+HTTP协议构建的可进行加密传输、身份认证的网络协议,比http协议安全。
   5) https是http的安全版。

7.内部(默认)和ADFS 对比:

1).配置成ADFS(IFD)后,初始化WebService时的方式如下:

IFD 的服务前面的段必须是https,不分内部和外部。

Uri orgServiceUri = new Uri("https://192.168.1.101/MicrosoftDynamicCRM/XRMServices/2011/Organization.svc");
ClientCredentials credentials = new ClientCredentials();
credentials.UserName.UserName = CRMUserName;
credentials.UserName.Password = CRMUserPassword;
OrganizationServiceProxy crmServiceProxy = new OrganizationServiceProxy(orgServiceUri, null, credentials, null);
crmService = (IOrganizationService)crmServiceProxy;

2). on-premise 内部部署(AD认证),初始化WebService时的方式如下: 

服务前面的段可以是https,也是可以http

如果没有路由映射 外网是访问不了   只能内网访问

Uri organizationUri = new Uri("http://192.168.1.101/MicrosoftDynamicCRM/XRMServices/2011/Organization.svc");
IServiceConfiguration<IOrganizationService> orgConfigInfo = ServiceConfigurationFactory.CreateConfiguration<IOrganizationService>(organizationUri);
var Orgcreds = new ClientCredentials();
Orgcreds.Windows.ClientCredential = new System.Net.NetworkCredential("administrator", "admiN123", "DynamicCRM.com");
OrganizationServiceProxy _serviceproxy = new OrganizationServiceProxy(orgConfigInfo, Orgcreds);
return (IOrganizationService)_serviceproxy;

这样也可以:

Uri orgServiceUri = new Uri(Config.CrmWebServiceUrl);
var credentials = new ClientCredentials();
credentials.Windows.ClientCredential = new System.Net.NetworkCredential(Config.CrmServerAccount, Config.CrmServerPSW, Config.CrmServerDomain);
OrganizationServiceProxy _serviceproxy = new OrganizationServiceProxy(orgServiceUri, null, credentials, null);
return (IOrganizationService)_serviceproxy;

8.防火墙要开起来,不要关了,关了服务安全有问题。

9.权限最大的部门业务部门是根部门。

10.怎么添加示例数据?如下图:

11.VMware vSphere Client 要学会怎么使用,这个工具很强大,可以和Hyper-V,Oracle VM VirtualBox对比下。安装服务器的时候选windows Server 2008 R2 Enterprise(完全安装) ,选自定义。如图:

 

12.CRM 2011 中的早期绑定 和晚期绑定 怎么理解? 

  早期绑定 指实体类型直接由类确定。
  晚期绑定 指实体类型到实例化时通过参数确定。
  或强类型与弱类型的理解。 

  早期和晚期绑定之间的关键区别涉及类型转换。早期绑定提供所有类型的编译时检查,以便不会发生隐式转换,而晚期绑定仅在创建对象或对类型执行操作时检查类型。Entity 类需要明确指定类型以防止隐式转换。

  使用早期绑定实体类的优点是在编译时检查所有类型引用。已编译的可执行文件包含调用类型的属性、方法和事件所需的代码。

  目前我们主要使用晚期绑定,和PLUGIN没关系,体现在实体,也就是数据上。
  客户在系统里是一个实体,一条实体记录就是一条数据。
  早期绑定,晚期绑定指的是实体类的实现方式。实体类是干什么的?就是保存实体数据的

13.CRM中的元数据?

   元数据是数据的定义。一个实体有哪些字段,哪个字段是主属性,哪个字段是ID,哪个字段什么类型,实体有什么关系等,这些定义就是元数据。

14.plugin 的异步和同步?

原则:能用同步的就不要用异步。

同步就是立即执行 异步就是不立即执行。
如果不是实时验证就用异步,大多时候是同步的。

如果我们要同步一个表单的状态给另外一个表单 那么就可以设置为异步
因为同步的是需要占用资源的,异步可以排队的执行,这样就可以节省很多资源了。

同步也是排队的 根据注册插件的顺序。

二、基本问题:

1. explain in details about the event execution pipeline.
事件执行管道可以通过同步或异步方式处理事件。
平台核心操作和为同步执行注册的所有插件都会立即执行。为事件注册的同步插件按明确定义的顺序执行。
为异步执行注册的插件由异步队,列代理放入队列中并在稍后由异步服务执行。
具体可以看SDK。Request,Reponse 请求和响应,然后执行(Excute)

2. when do we register a plugin in child pipeline. give examples
CRM 2011中没有,不区分父管道和子管道,就是父管道。
CRM 4.0里面有,就是plugin中触发plugin,子管道。

3. What are images. Why are they used.
前期镜像,后期镜像,就是操作之前的值和操作之后的值。
比如执行Delete操作的时候,只能获取当前记录的ID,而不能获取当前实体的其他属性的值。用iamges就可以。

4. What is early binding and late binding. How is it used in CRM
早期绑定 指实体类型直接由类确定。
晚期绑定 指实体类型到实例化时通过参数确定。
目前我们主要使用晚期绑定,和PLUGIN没关系,体现在实体,也就是数据上。
客户在系统里是一个实体,一条实体记录就是一条数据。早期绑定,晚期绑定指的是实体类的实现方式,实体类是保存实体数据的

5.How do you debug a plugin
利用Plugin注册工具 参考:Microsoft Dynamics CRM 2011 Plugin 插件开发和调试

6. What is PrinciplalObjectAccess table, why is it used.
主要对象访问,设计到权限,配置权限。

7. What is the use of stringmap(字符串映射) table.
字符串映射就是实体的选项集(OptionSetVaue),每个int类型会对应一个字符串(中文)
比如:状态,草稿(10000),已提交(10001),已审批(10002)
1).select case pd.new_status when 10000 then '草稿' when 10001 then '已提交' when 10002 then '已审批' end as状态 
from new_test as pd
2).select (select Value from stringmap S where attributename='new_status' 
and objecttypecode =(select objecttypecode from metadataschema.entity 
where logicalname='new_test')
and langid='2052' and AttributeValue=pd.new_status) as 状态
from new_test as pd

8.How do you set a recurrening activity in CRM
可以通过新建实体,下面勾选定义为活动实体。

9. when can infinite loop occur in a plugin. How do you avoid infinite loops in plugin code.
发生在一个插件时,可以无限循环。如何避免在插件代码无限循环。
1).自己尽量写好,可以使用preOperate和验证前,localContext.PluginExecutionContext.InputParameters["Target"]= target_entity;
2).注册plugin的时候,选择你要触发的具体哪个字段(Filtering),一般很多人这里都全选了,最好不要这样。

10. How do you avoid sql deadlock.
可以再sql的查询语句中加,with nolock.数据库要设计好。尽量避免使用触发器,用plugin处理。

11. How many types of relationships are available in crm
4种(1:n,m:n,n:1,自引用)

12. What is the difference when the ownership is user vs organizaion for a custom entity.
用户或团队和组织,一般用web服务创建一个记录,用户为8,给这个用户有权限只有这个用户才可以看,团队为9,给这个团队附加权限,该团队下的所有用户都可以看到。a.用户 按用户区分权限,比如控制A的东西不能让用户B看到。
b.组织 按组织区分权限,要么可以看到,要么不可以看到,不区分用户,只按角色区分。
用户和团队:角色权限有:空心圆(无权限)、1/4分圆(用户级别),1/2分圆(部门级别)、3/4分圆(上下级部门:只能看本级和下级,不能看上级) 全心圆(组织级别)。
组织:角色权限有空心圆(无权限)和全心圆(组织级别)。
像客户实体,是按用户级别,我的客户可以不让你看到。
像省份、城市之类的基础数据,一般按组织级别,把一个省份分给一个用户是没有意义的。
这个建实体时要想好,因为实体建完之后不可以改这个属性的。

13. what are filtered views?
筛选视图,一般在reporting service中,有select * from A as CRMAF_FilteredA,考虑到权限的问题,就需要加Filtered

14. if you delete a record from UI, what happens in database. can you bring the record back?
在数据库中会执行deleg from A where AId='{11}',删除操作,删除了,不能bring the record bakck。

15. what is deletion service? can you change its schedule(运行)?
就是一个deleteRequest,deleteReponse,传递给 Execute 方法,不能。

三、CRM必备知识:

1.你如何对CRM的数据库进行优化? 

  答:建索引,优化SQL语句,通过SQL Server Profiler来调试。

2.怎么做报表开发?报表开发工具有哪些?SSIS、SSRS是什么?

 答:1) CRM的报表一般是.rdl,也就是sql reporting service 报表。可以参考: 【Reporting Services 报表开发】— 总结

      2) 利用Visual Studio或ReportBuilder3工具,比如安装SQL Server 200 R2之后,有对应的Visual Studio 2008。

      3) SSIS是Microsoft SQL Server Integration Services的简称,是生成高性能数据集成解决方案(包括数据仓库的提取、转换和加载 (ETL) 包)的平台。

         SSRS是Microsoft SQL Server Reporting Services (SSRS),是一个实用的开发、发布报表的工具。这个用的

3.如何时在CRM中嵌入web页面,如Asp.net。

    将写好的.aspx文件,放在CRM安装目录的ISV文件下,然后IFrame嵌入。

4.如何限制视图的记录数?如何让视图记录条数不显示? 参考:MSCRM 2011 修改显示记录数

 1)这个记录数是指 lookup 弹出来是视图的记录以及Homepage页面的记录

 a.每页的记录数。

  use 组织名_MSCRM

  update UserSettings
  set PagingLimit = 60 --默认为50

 b.数据库修改的是一共可以查询的记录数(针对全局的显示记录数最大值设置),

MSCRM_Config数据库中表名为DeploymentProperties的系统级的参数设定表,找到ColumnName为PagingLimt的记录,修改IntColumn的值,修改完成后重启IIS(iisreset)生效.如下:

 use MSCRM_CONFIG

update DeploymentProperties
set IntColumn = 600 --默认为500
where ColumnName='PagingLimit'

2)不显示记录数是用第三方。

5.银行账号的部分显示(即 **** **** **** 9331)如何做?

  1).可以在crm的客户实体上新建两个字段银行账号(new_bankaccount),文本型,和账号(new_account),通过配置new_bankaccount的字段安全性配置可以达到这样的效果,然后拼接new_bankaccount和account字符串。

  具体如下图:

    a.设置->管理->字段安全性配置文件

    

   b.字段安全性配置

下面的用户必须不是拥有系统管理员权限的用户,比如为ang。

配置读取为否

然后以ang登陆,查询查看客户记录,发现银行账号都为......和(****差不多),然后拼接两个字段,就达到效果了。

  2).可以用插件监控实体的Retrieve,对OutputParameter进行修改。具体怎么做,我还不知道。

   retrieve的plugin很影响性能 每次打开都得触发 我们不到万不得已都避免用。

6.怎么按角色显示不同的窗体?

  权限配置。
7.用户权限等级有哪些?团队与用户有什么区别,如何应用?

  1) 用户权限等级有空心圆(无权限)、1/4分圆(用户级别),1/2分圆(部门级别)、3/4分圆(上下级部门:只能看本级和下级,不能看上级) 全心圆(组织级别)。

   用户或团队和组织,一般用web服务创建一个记录,用户为8,给这个用户有权限只有这个用户才可以看,团队为9,给这个团队附加权限,该团队下的所有用户都可以看到。

  a.用户 按用户区分权限,比如控制A的东西不能让用户B看到。
  b.组织 按组织区分权限,要么可以看到,要么不可以看到,不区分用户,只按角色区分。
  用户和团队:角色权限有:空心圆(无权限)、1/4分圆(用户级别),1/2分圆(部门级别)、3/4分圆(上下级部门:只能看本级和下级,不能看上级) 全心圆(组织级别)。
  组织:角色权限有空心圆(无权限)和全心圆(组织级别)。
  像客户实体,是按用户级别,我的客户可以不让你看到。
  像省份、城市之类的基础数据,一般按组织级别,把一个省份分给一个用户是没有意义的。
  这个建实体时要想好,因为实体建完之后不可以改这个属性的。

8.说说对PreEntityImages,PostEntityImages、InputParameters、OutputParameters的了解,平时如何使用?

   1) PreEntityImages  前期实体镜像集合

      private readonly string preImageAlias = "image";  

      Entity preImageEntity = (context.PreEntityImages != null && context.PreEntityImages.Contains(this.preImageAlias)) ?                context.PreEntityImages[this.preImageAlias] : null;

   2) PostEntityImages 后期实体镜集合

      private readonly string postImageAlias = "PostImage";

      Entity postImageEntity = (context.PostEntityImages != null && context.PostEntityImages.Contains(this.postImageAlias)) ? context.PostEntityImages[this.postImageAlias] : null;

    3) InputParameters  输入参数集合

       Entity targetEntity = localContext.PluginExecutionContext.InputParameters["Target"] as Entity;

    4) OutputParameters 输出参数集合

       可以用插件监控RetrieveMultiple,和监控Create、Update一样的

       EntityCollection conn = localContext.PluginExecutionContext.OutputParameters["BusinessEntityCollection"] as EntityCollection;
       string message = Parentcontext.MessageName;
       if (Parentcontext.PrimaryEntityName == "实体名")

       比如执行Delete操作的时候,只能获取当前记录的ID,而不能获取当前实体的其他属性的值。用镜像就可以取到属性的值。

9.CRM的JS API中Xrm.Page.context、Xrm.Page.data.entity、Xrm.Page.ui、Xrm.Utility分别用于哪些开发?

   1) Xrm.Page.context

    

     2) Xrm.Page.data.entity

       用的最多的就是

       获取当前记录的GUID:   Xrm.Page.data.entity.getId();

       获取当前记录的实体名:Xrm.Page.data.entity.getEntityName();

     

     3) Xrm.Page.ui

       用的最多的是Xrm.Page.ui.getFormType()  获取当前表单的操作类型。比如:create,update

      

      4)Xrm.Utility

       
10.前期绑定和晚期绑定的区别是什么?

   答:早期绑定 指实体类型直接由类确定。
         晚期绑定 指实体类型到实例化时通过参数确定。
         目前我们主要使用晚期绑定,和PLUGIN没关系,体现在实体,也就是数据上。
         客户在系统里是一个实体,一条实体记录就是一条数据。早期绑定,晚期绑定指的是实体类的实现方式,实体类是保存实体数据的。

11.自定义工作流如何开发?和Plugin类似,基本一致。
12.Plugin调试有哪些方式?参考:Microsoft Dynamics CRM 2011 Plugin 插件开发和调试

13.解决方案(Solution)托管和非托管的区别?

   托管的是可以修改的,非托管的是不可修改的。

   二者的区别体现在再次部署,导入后的行为上面。参考:MS CRM2011中的解决方案—托管与非托管

 托管的可以修改非托管的 意思:解决方案为托管状态的时候,可以修改方案下非托管的实体。

14.高级查找将数据导成XML,查询FetchXml。

    这个直接使用高级查找,查询之后,导出来。

15.Plugin各执行阶段的差异?前期验证是否一定在事务外?

     1) 

     2) 否

    
16.一般你是否会将配置保存在web.config中?你如何保存平时开发中使用的各种配置?

    会的,比如需要使用一些连接CRM数据库的字符串,组织服务。

    可以通过xml获取它的值。

    比如:修改域用户密码,自定义页面的开发。


17.解决方案导入后如何撤消它?

    托管的解决方案是可以,非托管的解决方案是不可以的。

18.Filtered视图和视图的区别?Filtered视图的弊端?

   筛选视图,一般在reporting service中,有select * from A as CRMAF_FilteredA,考虑到权限的问题,就需要加Filtered。

   视图就是CRM中的实体英文名,在CRM2011中,它是由Base表和ExtensionBase表组成的。

   区别就是有权限设置。

   弊端就是查询Filtered视图效率很慢。

 四、这都是CRM开发必须要知道的知识,如有不正确的地方,希望各位大侠指出来,谢谢。