Dynamics CRM 2011,以编程方式设置货币字段

时间:2012-05-17 18:27:14

标签: c# dynamics-crm-2011 dynamics-crm crm currency

如果我在CRM 2011中手动创建新的联系人记录 ,则会正确创建货币字段,“$”可见,我可以填充这些字段并保存记录。

如果我实例化IOrganizationService并以编程方式创建联系人记录,除货币字段外,一切都有效。我没有看到错误;创建记录,填充所有其他字段,但货币字段留空。

如果我在以编程方式创建记录后尝试手动更新这些货币字段,则会收到以下错误: 如果货币字段中存在值,则需要货币。选择一种货币,然后重试。

我的用户记录设置为货币=美元。

为什么这在CRM中工作而在C#中不起作用?我需要做些什么才能让它发挥作用?

谢谢。

4 个答案:

答案 0 :(得分:2)

设置货币

获取: -

var totalValue = ((Money)item.Attributes[attributeName]).Value;

发布: -

newSalesOrder[attributeName] = new Money((decimal)totalValue);

答案 1 :(得分:0)

根据http://msdn.microsoft.com/en-us/library/gg328530.aspx上的联系人实体元数据,交易currencyid类型是“查找”。因为它是查找类型,所以您需要以不同方式传递值。通过Web服务创建记录时,您必须在CRM Web服务上调用.create命令之前为货币构建EntityReference以传递给联系人实体的属性。如果您尝试将其作为字符串传递,它将不会执行任何错误,并且不会像您所描述的那样接受它。我仍然是CRM网络服务的新手,但试一试,看看它是否有效。

它可能是这样的:(参考资料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));

答案 2 :(得分: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

对于已经创建的旧记录(当用户设置未设置为默认货币或在您的情况下)时,您必须将该查找添加到表单编辑器的表单中,自定义&amp;发布。然后在查找这些记录时分配货币(可以是批量修改)。

答案 3 :(得分:-1)

C#代码可能如下所示。

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