2008-10-15 80 views
1

我正嘗試使用動態實體創建新聯繫人。我在CRM SDK中找到的示例具有此代碼。在MS CRM 4.0中創建動態實體

// Set the properties of the contact using property objects. 
     StringProperty firstname = new StringProperty(); 
     firstname.Name = "firstname"; 
     firstname.Value = "Jesper"; 
     StringProperty lastname = new StringProperty(); 
     lastname.Name = "lastname"; 
     lastname.Value = "Aaberg"; 

     // Create the DynamicEntity object. 
     DynamicEntity contactEntity = new DynamicEntity(); 

     // Set the name of the entity type. 
     contactEntity.Name = EntityName.contact.ToString(); 

     // Set the properties of the contact. 
     contactEntity.Properties = new Property[] {firstname, lastname}; 

在我的代碼中,我有以下實現。

 StringProperty sp_Field1 = new StringProperty("Field1","Value1"); 
     StringProperty sp_Field2 = new StringProperty("Field2","Value1"); 

     CrmService service = new CrmService(); 
     service.Credentials = System.Net.CredentialCache.DefaultCredentials; 
     // Create the DynamicEntity object. 
     DynamicEntity contactEntity = new DynamicEntity(); 
     // Set the name of the entity type. 
     contactEntity.Name = EntityName.contact.ToString(); 
     // Set the properties of the contact. 
     contactEntity.Properties = new Property[] {sp_Field1,sp_Field2}; 

我在代碼中看不到很多差異。在我在互聯網上找到的例子中,我有和SDK一樣的實現。但是,如果我運行相同的我碰到下面的錯誤

CS0029:無法隱式轉換類型「Microsoft.Crm.Sdk.StringProperty」到「Microsoft.Crm.Sdk.PropertyCollection」

我試着創建了一個類型爲PropertyCollection的新變量(屬於mscrm名稱空間的一個變量),並將stringpropertys添加到該變量中並將其傳遞給實體。

Microsoft.Crm.Sdk.PropertyCollection propTest = new Microsoft.Crm.Sdk.PropertyCollection(); 
     propTest.Add(sp_SSNNo); 
     propTest.Add(sp_FirstName); 
     contactEntity.Properties = new Property[] {propTest}; 

這給了我下面的錯誤

CS0029:無法隱式轉換類型 'Microsoft.Crm.Sdk.PropertyCollection' 到 'Microsoft.Crm.Sdk.Property'

我相信它有一個小的類型轉換錯誤,但我無法找出錯誤的位置。而且,即使這是一個類型錯誤,爲什麼它在因特網上給出的所有樣本都適用,而不適合我。我試圖讓代碼示例運行,但我遇到了相同的轉換錯誤。請讓我知道,如果你需要更多的信息,對此,任何幫助將不勝感激。

回答

3

下面是來自微軟的文章,讓試圖討論這個話題:

http://community.dynamics.com/blogs/cscrmblog/archive/2008/06/23/web-services-amp-dlls-or-what-s-up-with-all-the-duplicate-classes.aspx

這不是你的兩個方法之間運行到,但更多的是差的在設計上的bug裝配工作以及他們設計要做的事情。

如果你想繼續使用Microsoft.Crm.Sdk.dll你應該能夠使用以下來實現自己的目標......

StringProperty sp_Field1 = new StringProperty("Field1","Value1"); 
    StringProperty sp_Field2 = new StringProperty("Field2","Value1"); 

    CrmService service = new CrmService(); 
    service.Credentials = System.Net.CredentialCache.DefaultCredentials; 
    // Create the DynamicEntity object. 
    DynamicEntity contactEntity = new DynamicEntity(); 
    // Set the name of the entity type. 
    contactEntity.Name = EntityName.contact.ToString(); 

    // Set the properties of the contact. 
    PropertyCollection properties = new PropertyCollection(); 
    properties.Add(sp_Field1); 
    contactEntity.Properties = properties; 
0

我相信問題是您正在引用Microsoft.Crm.Sdk程序集中的動態實體類。 SDK中的示例使用對CRM Web服務的引用。這可能會令人困惑,因爲兩個程序集都包含許多相同的類型,但它們是不同的。

1

由於SaaS的開發,該代碼現在工作正常。另外一種方法是直接將StringProperty添加到實體屬性集合中。

contactEntity.Properties.Add(sp_SSNNo); 

再次感謝您的答覆:)