如果在CRM 2011中创建新的联系记录手动,则正确创建了货币字段,“ $”可见,并且我可以填充这些字段并保存记录。
如果我实例化IOrganizationService并创建联系人记录以编程方式,则除了货币字段外,所有其他方法都有效。我看不到任何错误。创建记录后,将填充所有其他字段,但货币字段保留为空白。
如果我以编程方式创建记录后尝试手动更新这些货币字段,则会收到此错误:如果货币字段中存在值,则需要货币。选择一种货币,然后重试。
我的用户记录设置为货币=美元。
为什么这在CRM中有效,但在C#中无效?我需要做什么才能使其正常工作?
设置货币
获取:-
var totalValue = ((Money)item.Attributes[attributeName]).Value;
Post:-
newSalesOrder[attributeName] = new Money((decimal)totalValue);
根据http://msdn.microsoft.com/en-us/library/gg328530.aspx上的联系人实体元数据,交易币种类型为'查找'。因为它是查找类型,所以您需要不同地传递值。通过Web服务创建记录时,必须在调用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));
由于支持多币种,因此在使用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。
对于已经创建的旧记录(当未使用默认货币或您的情况设置用户设置时,您必须从表单编辑器中将该查询添加到表单中,进行自定义和发布。然后在查找中为这些记录分配货币(可以批量编辑)。
C#代码可能看起来像这样。
myEntity.Attributes["abc_transactionamount"] = new Money((decimal)obj.TotalAmountToPay);