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

问题描述 投票:1回答:4

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

如果我实例化IOrganizationService并创建联系人记录以编程方式,则除了货币字段外,所有其他方法都有效。我看不到任何错误。创建记录后,将填充所有其他字段,但货币字段保留为空白。

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

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

为什么这在CRM中有效,但在C#中无效?我需要做什么才能使其正常工作?

c# dynamics-crm-2011 dynamics-crm crm currency
4个回答
2
投票

设置货币

获取:-

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

Post:-

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

0
投票

根据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));

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

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


-1
投票

C#代码可能看起来像这样。

myEntity.Attributes["abc_transactionamount"] = new Money((decimal)obj.TotalAmountToPay);
© www.soinside.com 2019 - 2024. All rights reserved.