2015-11-13 3 views
1

У меня есть сценарий в CRM Dynamics 2013, где мне нужно удалить тысячи записей, в основном у меня есть контакт, учетная запись, ведущий, мне нужно в основном удалить весь маркетинговый список из контактов, где владелец находится в состоянии «Ожидание удаления», поэтому эти контакты Я получаю списки, мне было интересно, какой подход будет лучше всего, но, может быть, если я создам программу, которая использует RemoveMemberListRequest, все хорошо, но как я могу указать запрос с помощью sdk, который в основном говорит, удалите членов из списка, где контакт в списке имеет владельца, установленного на «Ожидание удаления».Как навалом удалить участников из списка маркетинга?

Я немного обеспокоен этим подходом, так как я планирую использовать RemoveMemberListRequest, он ищет руководство EntityId (контакт) и руководство ListID (маркетинговый список), проблема в том, что существует много списков и многие контакты, которые подпадают под этот критерий. Важные критерии сосредоточены на контактах с владельцем, находящимся в ожидании удаления, это означает, что у меня нет конкретного способа запроса этих конкретных маркетинговых списков, в которые добавлен контакт, имеет это недопустимое удаление как собственное поле , Надеюсь, это имеет смысл, любая помощь будет оценена по достоинству.

Пожалуйста, смотрите, что я до сих пор

public static Entity GetConatctWithPendingDeletion(IOrganizationService service) 
    { 
     QueryExpression qe = new QueryExpression(); 
     qe.EntityName = "contact"; 
     qe.ColumnSet = new ColumnSet("fullname", "ownerid", "parentcustomerid", "new_title"); 
     qe.Criteria.AddCondition("ownerid", ConditionOperator.Equal, "0F040671-1E83-E111-83B9-D067E5EBE694");// tbhis represents the optionset 'Pending Deletion' 

     EntityCollection response = service.RetrieveMultiple(qe); 

     return response.Entities[0]; 

     Console.WriteLine(response.Entities.Count()); 
     Console.ReadLine(); 

     RemoveMemberListRequest req = new RemoveMemberListRequest(); 
     req.EntityId = new Guid("xxxxxxx-xxx-xxx-xxx-xxxxxxx");//how do I specifty a list of Contact guids based on above code 
     req.ListId = new Guid("xxxxxxx-xxxx-xxxx-xxxxx");// Also here , how do I specify the lists I want, 

     RemoveMemberListResponse resp = (RemoveMemberListResponse)service.Execute(req); 


    } 

ответ

0

Вы должны быть в состоянии решить эту проблему путем JOIN ИНГ соотношению сущности маркетинга Списка пользователей на свой счет/контакт/свинцовый запрос и перебрать результирующие записи:

QueryExpression qe = new QueryExpression(); 
qe.EntityName = "contact"; 
qe.ColumnSet = new ColumnSet("fullname", "ownerid", "parentcustomerid", "new_title"); 
qe.Criteria.AddCondition("ownerid", ConditionOperator.Equal, "0F040671-1E83-E111-83B9-D067E5EBE694"); 

LinkEntity le = new LinkEntity(); 
le.EntityAlias = "lm"; // note the alias, you need it when accessing fields of the linked entity 
le.Columns = new ColumnSet("listid"); 
le.JoinOperator = JoinOperator.Inner; 
le.LinkFromEntityName = "contact"; 
le.LinkFromAttributeName = "contactid"; 
le.LinkToEntityName = "listmember"; 
le.LinkToAttributeName = "entityid"; 

eq.LinkEntities.Add(le); 

EntityCollection response = service.RetrieveMultiple(qe); 

// iterate over list members 
foreach (var listmember in response.Entities) 
{ 
    RemoveMemberListRequest req = new RemoveMemberListRequest(); 
    req.EntityId = listmember.Id; 

    // the linked (relationship) entity fields are of type AliasedValue 
    AliasedValue av = listmember.GetAttributeValue<AliasedValue>("lm.listid"); 
    EntityReference lm = (EntityReference)av.Value; 
    req.ListId = lm.Id; 

    RemoveMemberListResponse resp = (RemoveMemberListResponse)service.Execute(req); 
} 
+0

Благодаря Filburt, я собираюсь попробовать это, я буду отмечать свой вопрос, как правильно только его сделали – Papi

+0

я сосредоточил свой образец кода - я пропустил свойство .value поля AliasedValue. – Filburt