Microsoft Dynamics CRM2011 必備知識點


一、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開發必須要知道的知識,如有不正確的地方,希望各位大俠指出來,謝謝。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM