CRM v9-使用C#代码从CRM实体中删除基于ID的记录

时间:2019-04-05 08:19:17

标签: c# dynamics-crm crm dynamics-crm-365 unified-service-desk

我正在使用CRM版本9.0,并且想通过C#删除CRM中具有相同ID的所有记录。

我想实现这样的功能(我提供一个SQL Query示例仅供参考)

Delete from entityName where id = @id

当前,我正在使用下面的

通过C#代码在CRM中创建记录。
dictionary.Add("code", new CrmDataTypeWrapper(code, CrmFieldType.Raw));
dictionary.Add("id", new CrmDataTypeWrapper(id, CrmFieldType.Raw));
Guid EvntId = _client.CrmInterface.CreateNewRecord("entityname", dictionary, "", false, new System.Guid());

现在,我想在此逻辑之前编写一个代码块,如果存在传递的ID,则将删除所有记录。

3 个答案:

答案 0 :(得分:0)

要在CRM中删除实体,您必须首先获取实体以获得实体的GUID

IOrganizationService界面包含一个Delete方法,该方法要求实体类型(LogicalName)和CRM创建的实体的GUID。

这是我们的工作方式。

QueryExpression oppQuery = new QueryExpression("opportunity");
oppQuery.ColumnSet = new ColumnSet(new string[] { "opportunityid" });
oppQuery.Criteria.AddCondition(new ConditionExpression("parentcontactid", ConditionOperator.Equal, contact.Id));

EntityCollection opportunities = crmSvc.RetrieveMultiple(oppQuery);

foreach (var opportunity in opportunities.Entities)
{
    service.Delete("opportunity", opportunity.Id);
}

这意味着您可以根据条件删除实体,方法是根据条件先获取需要的实体。

oppQuery.Criteria.AddCondition(new ConditionExpression("<your id field>", ConditionOperator.Equal, <your id>));

在此行上,指定用于删除相关实体的条件。

答案 1 :(得分:0)

如果您不确定这些ID是否在Dynamics中存在,则应尝试捕获Delete尝试,因为如果您尝试删除Dynamics中不存在的记录,Dynamics会向您抛出{{1} }。

FaultException

答案 2 :(得分:0)

赞美Adriani6答案:

我认为您正在尝试删除具有特定字段值的一组记录。但是该字段被命名为id,它不是主键。

Dynamics CRM中没有以下SQL查询的等效项。

Delete from entityName where id = @id

您必须使用service.RetrieveMultiple获取与该非主键条件匹配的所有实体记录,然后遍历每个记录的结果集以发出具有主键的service.Delete请求。

QueryExpression query = new QueryExpression("entityName");
query.ColumnSet = new ColumnSet(new string[] { "eventId", "code"});
query.Criteria.AddCondition(new ConditionExpression("id", ConditionOperator.Equal, id));

EntityCollection events = service.RetrieveMultiple(query);

foreach (var event in events.Entities)
{
    service.Delete("entityName", event.Id);
}