首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >CRM v9 -使用C#代码从CRM实体中删除基于ID的记录

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

Stack Overflow用户
提问于 2019-04-05 16:19:17
回答 3查看 2.4K关注 0票数 1

我正在使用客户关系管理版本9.0,我想通过C#删除客户关系管理中具有相同ID的所有记录。

我想要实现这样的东西(我给出了一个SQL查询示例,仅供参考)

代码语言:javascript
复制
Delete from entityName where id = @id

目前,我正在使用下面的C#代码在客户关系管理中创建记录

代码语言:javascript
复制
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。

EN

回答 3

Stack Overflow用户

发布于 2019-04-05 16:28:56

要删除客户关系管理中的实体,您必须首先获取实体以获取实体的GUID

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

我们是这样做的。

代码语言:javascript
复制
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>));

在此行中,您可以指定用于删除相关实体的条件。

票数 0
EN

Stack Overflow用户

发布于 2019-04-05 19:09:04

如果您不确定这些ids在Dynamics中是否存在,您应该尝试捕获删除尝试,因为如果您尝试删除Dynamics中不存在的记录,Dynamics将抛出一个FaultException

代码语言:javascript
复制
var ids = new Collection<Guid>();
foreach (var id in ids)
{
    try
    {
        _service.Delete("[entityName]", id);
    }
    catch (FaultException)
    {
        continue;
    }
}
票数 0
EN

Stack Overflow用户

发布于 2019-04-07 00:19:30

要称赞Adriani6的答案:

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

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

代码语言:javascript
复制
Delete from entityName where id = @id

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

代码语言:javascript
复制
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);
}
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/55531122

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档