2012-05-17 82 views
1

如果我在CRM 2011中手動創建新的聯繫人記錄,貨幣字段被正確創建,「$」可見,我可以填充這些字段並保存記錄。Dynamics CRM 2011,以編程方式設置貨幣字段

如果我實例化IOrganizationService並編程創建聯繫人記錄,除貨幣字段外,所有內容都可以使用。沒有錯誤產生,我可以看到;記錄被創建,所有其他字段都被填充,但貨幣字段留空。

如果我嘗試通過編程方式創建記錄後手動更新這些貨幣字段,則會出現此錯誤: 如果貨幣字段中存在值,則需要貨幣。選擇一種貨幣,然後重試。

我的用戶記錄設置爲貨幣=美元。

爲什麼這在CRM中工作,但不在C#中?我需要做些什麼才能使它起作用?

謝謝。

回答

0

交易currencyid類型是根據http://msdn.microsoft.com/en-us/library/gg328530.aspx上的聯繫人實體元數據進行的「查找」。因爲它是查找類型,所以需要以不同的方式傳遞值。當您通過webservice創建記錄時,您必須在CRM Web服務上調用.create命令之前,爲貨幣構建一個EntityReference以傳遞給聯繫人實體的屬性。如果您嘗試將其作爲字符串傳遞,它將不會執行任何操作,也不會像您所描述的那樣接受它。我仍然對CRM Web服務不熟悉,但試試看看它是否可行。

它可能會是這樣的:(元數據僅供參考http://msdn.microsoft.com/en-us/library/gg327883.aspx

EntityReference currencyType = new EntityReference(); 
currencyType.Id = "(The Guid Of The Currency Type Goes Here)"; 
currencyType.LogicalName = "transactioncurrency"; 

contactGoingToCrm.Attributes.Add(new keyvaluepair<string,object>("currencyid",currencyType)); 
-1

的C#代碼可能看起來像這樣。

myEntity.Attributes["abc_transactionamount"] = new Money((decimal)obj.TotalAmountToPay); 
+1

您無法將貨幣字段轉換爲小數。 – Chirag

0

由於支持多幣種,您必須在創建使用SDK時明確設置該特定記錄的貨幣。

EntityReference currencyType = new EntityReference(); 
currencyType.Id = 「(The Guid Of The Currency Type Goes Here)」; 
currencyType.LogicalName = 「transactioncurrency」; 

entity.Attributes.Add(「transactioncurrencyid」,currencyType); 

從CRM UI在創建中,查找字段transactioncurrencyid將用戶設置進行填充。

對於已經創建的舊記錄(當用戶設置未使用默認貨幣設置或者您的情況下)時,必須將該查找添加到表單編輯器中的表單中,自定義&發佈。然後在查找這些記錄時分配貨幣(可能是批量編輯)。

0

設置貨幣

獲取: -

VAR總價值=((金錢)item.Attributes [的attributeName])。值;

: -

newSalesOrder [的attributeName] =新獎金((十進制)總價值);