CRM v9 - удаление записей на основе идентификатора из объекта CRM с использованием кода C # - PullRequest
1 голос
/ 05 апреля 2019

Я использую CRM версии 9.0 и хочу удалить все записи с одинаковым идентификатором в CRM через C #.

Я хочу добиться чего-то подобного (я даю пример SQL-запроса только для справки)

Delete from entityName where id = @id

В настоящее время я создаю записи в CRM с помощью моего кода C #, используя ниже

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());

Теперь я хочу написать блок кода перед этой логикой, который удалит все записи, еслиони существуют с переданным идентификатором.

Ответы [ 3 ]

0 голосов
/ 05 апреля 2019

Если вы не уверены, существуют ли эти идентификаторы в Dynamics, попробуйте перехватить вашу попытку удаления, потому что, если вы попытаетесь удалить запись, которая не существует в Dynamics, Dynamics выдаст вам FaultException.

var ids = new Collection<Guid>();
foreach (var id in ids)
{
    try
    {
        _service.Delete("[entityName]", id);
    }
    catch (FaultException)
    {
        continue;
    }
}
0 голосов
/ 06 апреля 2019

В дополнение 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);
}
0 голосов
/ 05 апреля 2019

Чтобы удалить сущность в CRM, вы должны сначала выбрать сущность, чтобы получить GUID сущности.

Интерфейс

IOrganizationService содержит метод Delete, для которого требуется тип объекта (LogicalName) и GUID объекта, который создает CRM.

Вот как мы это делаем.

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>));

В этой строке вы указываете условие, используемое для удаления соответствующих объектов.

...