上一篇文章介紹了Microsoft Dynamics CRM 2011的組織服務OrganizationService的Create、Update、Delete方法,本文介紹Associate、Disassociate和Retrieve方法。
Associate方法的簽名如下:
1 public virtual void Associate (
2 string entityName,
3 Guid entityId,
4 Relationship relationship,
5 EntityReferenceCollection relatedEntities
6 )
從簽名可以看出,Associate方法完成的功能是依據輸入參數relationship指定的關聯,將主要實體(entityName指定)的某個實例(entityId指定)與一組相關實體(relatedEntities)進行連接。
下面是Associate方法的樣例代碼,該樣例代碼完成的功能是依據關聯“account_primary_contact”,連接兩個客戶實例與聯系人實例。從數據庫角度講,就是設置客戶實例的primarycontactid字段值為聯系人的主鍵值,對於多對多關系而言,系統會自動向交叉表插入數據。該方法的樣例代碼如下:
1 //創建聯系人記錄
2
3 Entity setupContact = new Entity("contact");
4 setupContact["firstname"] = "John";
5 setupContact["lastname"] = "Doe";
6 _contactId = _service.Create(setupContact);
7
8 // 創建客戶記錄1
9 Entity setupAccount1 = new Entity("account");
10 setupAccount1["name"] = "Example Account 1";
11
12 _account1Id = _service.Create(setupAccount1);
13
14 //創建客戶記錄2
15
16 Entity setupAccount2 = new Entity("account");
17 setupAccount2["name"] = "Example Account 2";
18
19 _account2Id = _service.Create(setupAccount2);
20
21 //創建客戶記錄3
22
23 Entity setupAccount3 = new Entity("account");
24 setupAccount3["name"] = "Example Account 3";
25
26 _account3Id = _service.Create(setupAccount3);
27
28
29
30 //創建關聯實例,指定當前使用的關聯是account_primary_contact
31 Relationship relationship = new Relationship("account_primary_contact");
32
33 //創建EntityReference集合,將關聯信息中的相關實體引用添加到集合中
34
35 EntityReferenceCollection relatedEntities = new EntityReferenceCollection();
36 relatedEntities.Add(new EntityReference("account", _account1Id));
37 relatedEntities.Add(new EntityReference("account", _account2Id));
38 relatedEntities.Add(new EntityReference("account", _account3Id));
39
40 //調用Associate方法,指定主要實體的邏輯名稱,主要實體的主鍵值,Associate方法使用的關聯,以及相關實體的引用集合
41
42 _service.Associate("contact", _contactId, relationship, relatedEntities);
Disassociate方法,從該方法的命名就可以知道,Disassociate方法和Associate方法是互逆的兩個操作,Disassociate方法的簽名如下:
1 public virtual void Disassociate (
2 string entityName,
3 Guid entityId,
4 Relationship relationship,
5 EntityReferenceCollection relatedEntities
6 )
可見,Disassociate方法和Associate方法的輸入參數是一樣的。在調用本方法時,系統會根據relationship關聯,找到相關實體的外鍵字段,而后,將relatedEntities集合中的記錄的該外鍵值置為null。對於多對多關系而言,系統會根據根據entityId以及relatedEntities集合中的每個元素的主鍵值,從中間表中刪除該數據。
樣例代碼如下:
_service.Disassociate("contact", _contactId, relationship, relatedEntities);
這條語句是基於本文前面的樣例代碼而來,放置於_service.Associate("contact", _contactId, relationship, relatedEntities);之后,即可完成解除連接的操作。
Retrieve方法,用於獲取某個實體的單挑數據,簽名如下:
1 public virtual Entity Retrieve (
2 string entityName,
3 Guid id,
4 ColumnSet columnSet
5 )
該方法的輸入參數有三個,分別是帶查詢實體的邏輯名稱entityName,帶查詢實體實例的主鍵值id,以及返回列columnSet。返回值是Entity對象,Entity對象的包含的字段信息由columnSet指定。樣例代碼如下:
1 //首先,創建一條樣例數據——一條客戶記錄,以便后續Retrieve方法使用
2
3 Entity account = new Entity("account");
4
5 account["name"] = "Fourth Coffee";
6
7 _accountId = _service.Create(account);
8
9
10
11 //實例化ColumnSet,以設定返回列的信息,本樣例中,設定返回列是”name”以及”ownerid”
12 ColumnSet attributes = new ColumnSet(new string[] { "name", "ownerid" });
13
14 //調用Retrieve方法,設定查詢的實體的邏輯名稱”account“,設定帶查詢的客戶實例的主鍵值_accountId
15
16 //返回值是一個Entity對象。
17 account = _service.Retrieve(“account”, _accountId, attributes);以上,介紹了微軟CRM 2011中組織服務提供的三個方法Associate、Disassociate以及Reteive方法。
