[使用C#更新CRM中的实体字段

问题描述 投票:0回答:2

我正在尝试使用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'Microsoft.Xrm.Sdk.dll

我可以知道如何使用FetchXML正确更新CRM中的字段吗?

attributeId = 0AB038CE-E57E-EA11-A811-000D3AA3E77C
entityId = b6abe6f6-a876-4a80-87d6-2f1b179d437f
c# dynamics-crm crm fetchxml
2个回答
0
投票

[第一个问题是您将entityRef实例化为new Entity("financialaid"),但从未分配该对象的Id属性,因此service.Update(entityRef)调用将尝试更新具有financialaidid = Guid.Empty的Financialaid实体的记录],不应该存在。

使用某些Linq表达式或简单地使用foreach可以大大简化结果的循环。循环也没有任何意义,因为您每次都更新同一条记录(ID为空的Financialaid记录)。

[如果您要完成的工作是更新实体Financialaid的每条记录,并将emailcontent属性设置为“ test”,则将其放入循环中:

var entityRef = new Entity(retrieved.Entities.LogicalName, retrieved.Entities.Id);
entityRef["emailcontent"] = "test";
service.Update(entityRef);

请注意,FetchXML只是一种查询语言,您不能使用FetchXML更新记录。将其视为SQL的select语句。

最后,如果您只想批量更新所有Financialaid记录以设置字段的值,我建议为此使用现有工具,而不要编写一次性应用程序。在这种情况下,XrmToolBox中的Bulk Data Updater工具将完成此工作。


0
投票

您正在错误的实体中创建emailContent字段。如果该实体中有5,000多个记录,则该实体很可能存储事务数据。

我建议您使用具有键字段和值字段的自定义配置实体(如果有,则创建一个配置实体)。

为键指定一个唯一的名称,然后将html表存储到该值字段中。

通过键检索该记录,然后您可以从值字段中更新/读取html表。

© www.soinside.com 2019 - 2024. All rights reserved.