【发布时间】:2020-07-28 06:57:56
【问题描述】:
我正在尝试使用 C# 更新 CRM 中实体的字段值,但我不知道该怎么做。
以下是我当前的代码:
var helper = new CRMConnection();
var service = helper.OpenConnection();
var entiyRef = new Entity("financialaid");
string fetchXML = @"<fetch version='1.0' output-format='xml-platform' mapping='logical' distinct='false'>
<entity name='financialaid'>
<attribute name='financialaidid' />
<attribute name='emailcontent' />
</entity>
</fetch>";
var retrieved = service.RetrieveMultiple(new FetchExpression(fetchXML));
if (retrieved != null && retrieved.Entities.Count > 0){
for (var k = 0; k < retrieved .Entities.Count; i++){
var emailContent = retrieved .Entities[i].GetAttributeValue<string>("emailcontent");
entiyRef["emailcontent"] = "test";
service.Update(entiyRef);
}
}
上面的代码通过5000 记录返回,我想它与我在CRM 中的每条记录相关联。但我只是想更新实体中的独立字段。
之后,它遇到以下错误并退出。
抛出异常:'System.ServiceModel.FaultException`1' in Microsoft.Xrm.Sdk.dll
我可以知道如何使用 FetchXML 正确更新 CRM 中的字段吗?
attributeId = 0AB038CE-E57E-EA11-A811-000D3AA3E77C
entityId = b6abe6f6-a876-4a80-87d6-2f1b179d437f
【问题讨论】:
-
您没有在 FetchXML 中指定过滤条件,因此它将更新每条记录的电子邮件内容。这是你想要的结果吗?此外,RetrieveMultiple 每次检索将仅返回 5000 条记录。最后,您没有在 entityRef 处指定要更新的记录的主键。系统不知道您要更新的记录。 entityRef 需要一个 ID 值才能对该记录执行更新。
-
我为工作流的一般用途创建了该字段,而不是分配给每个单独的记录。我不确定是否使用
.retrieve,因为我不确定id字段,所以我改用.retrieveMultiple。 -
该字段包含要传递给工作流并使用解析值执行的 html 表。所以它实际上只是一个字段,并没有分配给任何记录。
-
实体本质上是DB中的表,字段是列。所以你实际上想要一个存储 html 表的地方,而不是每条记录 1 个 html 表?
-
我明白了。是的,它只是存储html表,而不是每条记录1。
标签: c# dynamics-crm crm fetchxml