我在CRM中有一个实体,上面有一些Money字段。在创建实体时,这些字段没有任何价值,因此创建并保存实体。但是,如果我有值并继续更新它们(通过UI或Web服务),我基本上会收到错误声明"货币不能为空"。
在用户界面中:
I then get a red circle with an X through it if I go to update the value.
在代码(网络服务电话)中:
var crmService = new CrmServiceReference.IFAAContext(new Uri(crmWebServicesUrl));
crmService.Credentials = System.Net.CredentialCache.DefaultCredentials;
var crmAccount = crmService.AccountSet.Where(a => a.AccountId == accountId).FirstOrDefault();
crmAccount.myitems_MoneyValueItem.Value = 10.0m;
crmService.UpdateObject(crmAccount);
crmService.SaveChanges()
然后我得到"货币不能为空"在.SaveChanges()调用。
在代码中(第二次尝试):
var crmService = new CrmServiceReference.IFAAContext(new Uri(crmWebServicesUrl));
crmService.Credentials = System.Net.CredentialCache.DefaultCredentials;
var crmAccount = crmService.AccountSet.Where(a => a.AccountId == accountId).FirstOrDefault();
var crmCurrency = crmService.TransactionCurrencySet.Where(c => c.ISOCurrencyCode == "AUD").First();
crmService.SetLink(crmAccount, "TransactionCurrency_Account", crmCurrency);
//crmService.SaveChanges() /* tried with this uncommented as well to try and "set currency" before setting value */
crmAccount.myitems_MoneyValueItem.Value = 10.0m;
crmService.UpdateObject(crmAccount);
crmService.SaveChanges()
所以这个尝试以同样的方式失败,但是如果我再次运行它(没有货币和SetLink)以便货币在之前保存它确实有效 - 因此尝试做第二次.SaveChanges()但是第一次真的需要它才能完成工作。
在代码中(第三次尝试):
var crmService = new CrmServiceReference.IFAAContext(new Uri(crmWebServicesUrl));
crmService.Credentials = System.Net.CredentialCache.DefaultCredentials;
var crmAccount = crmService.AccountSet.Where(a => a.AccountId == accountId).FirstOrDefault();
crmAccount.athos_MoneyValueItem= new CrmServiceReference.Money() { Value = 10.0m };
crmService.UpdateObject(crmAccount);
crmService.SaveChanges()
这似乎不起作用
答案 0 :(得分:2)
当您创建包含Money
字段的新记录(或更新之前未填充Money
字段的现有字段)时,您需要指定货币,要设置的正确字段为{ {1}}(逻辑名称TransactionCurrencyId
),它是对货币实体的查找(因此代码内部是transactioncurrencyid
)。
假设您的货币的Guid存储在EntityReference
变量中:
currencyId
答案 1 :(得分:0)
CRM 2013期望货币字段的Money对象。
crmAccount.myitems_MoneyValueItem = new Money(10.0m);
除非您的CRM组织没有默认货币集,否则您不必明确申报货币(因为您需要在创建组织时设置此货币,因此应始终设置它。)
答案 2 :(得分:0)
看起来我是在查找货币(羞耻作为额外的数据调用),然后使用它来设置TransactionCurrencyId然后"工作" ...似乎我不应该这样做,因为我确实有一个组织的默认设置。但这似乎有效,因为它可以更新这些字段。
var crmCurrency = crmService.TransactionCurrencySet.Where(c => c.ISOCurrencyCode == currencyCode).First();
var crmService = new CrmServiceReference.IFAAContext(new Uri(crmWebServicesUrl));
crmService.Credentials = System.Net.CredentialCache.DefaultCredentials;
var crmAccount = crmService.AccountSet.Where(a => a.AccountId == accountId).FirstOrDefault();
crmAccount.TransactionCurrencyId = new CrmServiceReference.EntityReference() { Id = crmCurrency.TransactionCurrencyId, LogicalName = "transactioncurrency", Name = crmCurrency.CurrencyName };
crmAccount.myitems_MoneyValueItem.Value = 10.0m;
crmService.UpdateObject(crmAccount);
crmService.SaveChanges();
答案 3 :(得分:0)
我正在做同样的事情,但无法在service.create.
我已经放入
entity.Attributes["transactioncurrencyid"] = currencyGuid;
entity.Attributes["new_moneyfield"] = new Money(123.45M);
但最后,记录是在填充了transactioncurrency字段的情况下创建的,而money字段是空白的。
顺便提一下CRM online 2016
上的自定义工作流程。