2011-10-16 41 views
1

這是我的問題: 我想要做的就是使用web服務更新Crm 4中的「聯繫人」實體。CrmService.Update方法不適用於某些屬性

這是我的代碼:

CrmService eatupCrmService = CrmInteraction.InitializeCrmService(); 
contact updatedDelegate = new contact(); 
CeatupCrmService.Key contactPrimaryKey = new CeatupCrmService.Key(); 
contactPrimaryKey.Value = delegateId; 
updatedDelegate.contactid = contactPrimaryKey; 
updatedDelegate.address2_postalcode = delegateDetails.ContactDetailsPhysicalAddressCode; 
eatupCrmService.Update(updatedDelegate); 

我用InitializeCrmService()也檢索和它的作品。 當更新address2_postalcode屬性,我得到以下錯誤:

"Server was unable to process request."

與異常詳細信息\的innerText:

"0x80040216 An unexpected error occurred. Platform".

如果我更改代碼更新另一個屬性,說我嘗試更新mobilephone屬性 而不是address2_postalcode它的工作原理沒有任何異常拋出。

只要我嘗試更新address2_postalcode那麼我就會得到那個錯誤。 Crm中的address2_postalcode數據類型爲nvarchar,並且它正在分配的值(delegateDetails.ContactDetailsPhysicalAddressCode)屬於c#的string類型。

任何人都知道爲什麼會發生這種情況?

回答

1

經過多次試圖瞭解爲何發生此錯誤的嘗試後,我終於成功了。

當我開始研究這個項目時,客戶指示我只使用特定的聯繫人進行測試,因爲我們直接在生產環境中工作。 (客戶端還沒有開發環境)

做了一些數據庫查詢後,將此聯繫人與其他人進行比較(更新失敗的只是測試聯繫人),我注意到我的聯繫人的address2_addressid屬性爲NULL。

然後我去了CRM根據定製\定製實體並打開聯繫實體。在屬性下,我按類型排序並看到該聯繫人具有3 primarykey屬性:contactid,address1_addressidaddress2_addressid

測試聯繫人的address1_addressidaddress2_addressid字段爲空,這導致CRM Web服務拋出0x80040216發生意外錯誤。嘗試更新任何地址字段時,平臺錯誤。

我不知道爲什麼這個聯繫人將這些ID設置爲NULL,我問,創建該聯繫人的人沒有解釋如何發生這種情況。我想這仍然是一個謎,但至少我現在有一個答案,我得到的錯誤,我可以在我的代碼迎合這一點。

0

我不知道浩它可以工作... 我認爲你必須做CrmService.Create(接觸),然後用返回的Guid,您可以執行更新...

更新不會因爲有你在你的聯繫人實體設置的分貝doesn't存在標識備案工作...

contact updatedDelegate = new contact(); 

CeatupCrmService.Key contactPrimaryKey =新CeatupCrmService.Key();

你可以這樣做:

crmService eatupCrmService = CrmInteraction.InitializeCrmService(); 
     contact updatedDelegate = new contact(); 
     updatedDelegate.address2_postalcode = delegateDetails.ContactDetailsPhysicalAddressCode; 
     Guid cId = eatupCrmService.Create(updatedDelegate); 
     updatedDelegate.contactid = new Key(cId); 
     //set more fields if you want 
     eatupCrmService.Update(updatedDelegate);//update record 

希望我幫助你。

+0

感謝您的答覆。我已經嘗試在更新其「address2_postalcode」屬性之前獲取聯繫人實體,並且我不幸遇到了同樣的錯誤。我做了一個RetrieveMultiple請求來獲取聯繫人(作爲一個動態實體),它也沒有工作。 – Matei

+0

呃......你可以嘗試啓動SQL Profiler來查看當你執行操作時到底發生了什麼。我不能想到其他任何東西...... –

+0

我運行了SQL Profiler,並且在更新SQL語句中找不到字段(address2_postalcode)。如果我嘗試使用「mobilephone」屬性,那麼我可以在profiler中看到它。也許這是某種與Crm web服務有關的序列化問題,我不知道......昨晚嘗試了不同的解決方法,直到23:00,仍然無法正確解決問題。我想可能使用舊的Web服務(「http://crmserver/mscrmservices/2006/CrmServiceWsdl.aspx」),並嘗試以舊的方式更新它:( – Matei

2

這同樣的錯誤和情況發生在我身上,因爲我做了一個SSIS dts從平面文件中加載聯繫人的方式不正確,我忘記填充CustomerAddressBase表。在「正確」填充此表後(每個聯繫人有兩行),View CustomerAddress(address1_addressid和address2_addressid)的屬性變爲非空值。如果您不知道如何填寫此表(CustomerAddressBase),只需使用填充在CRM中的地址字段直接創建一個新聯繫人,然後轉到SQL Server管理工作室並通過查詢您可以查看並瞭解這些字段是如何填充的。

希望它可以幫助別人,

亞歷

相關問題