如果我在CRM 2011中手动创建新的联系人记录 ,则会正确创建货币字段,“$”可见,我可以填充这些字段并保存记录。
如果我实例化IOrganizationService并以编程方式创建联系人记录,除货币字段外,一切都有效。我没有看到错误;创建记录,填充所有其他字段,但货币字段留空。
如果我在以编程方式创建记录后尝试手动更新这些货币字段,则会收到以下错误: 如果货币字段中存在值,则需要货币。选择一种货币,然后重试。
我的用户记录设置为货币=美元。
为什么这在CRM中工作而在C#中不起作用?我需要做些什么才能让它发挥作用?
谢谢。
答案 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);