1

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

如果我实例化一个 IOrganizationService 并以编程方式创建一个联系人记录,那么除了货币字段之外,一切正常。没有产生我可以看到的错误;记录已创建,所有其他字段都已填充,但货币字段留空。

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

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

为什么这在 CRM 中有效,但在 C# 中无效?我需要做什么才能让它工作?

4

4 回答 4

2

设置货币

得到: -

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

帖子: -

newSalesOrder[attributeName] = new Money((decimal)totalValue);
于 2018-02-20T05:31:33.680 回答
1

Because of multi-currency support, you have to Explicitly set the currency for that particular record while creating using SDK.

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

entity.Attributes.Add(“transactioncurrencyid”,currencyType);

From CRM UI while creating, the lookup field transactioncurrencyid will be populated from user settings.

For the old records which got created already (when user settings was not set with default currency or in your case), you have to add that lookup into the form from Form editor, customize & publish. Then assign the currency in lookup for those records (may be bulk edit).

于 2017-06-20T17:48:41.977 回答
0

交易 currencyid 类型是根据http://msdn.microsoft.com/en-us/library/gg328530.aspx上的联系人实体元数据进行的“查找” 。因为它是一种查找类型,所以您需要以不同的方式传递值。当您通过 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));
于 2013-10-24T13:34:38.217 回答
-3

C# 代码可能如下所示。

myEntity.Attributes["abc_transactionamount"] = new Money((decimal)obj.TotalAmountToPay);
于 2014-04-23T10:36:00.960 回答