2011-06-10 3 views
0

Je suis en train de reproduire la page Activités dans Microsoft CRM 4.0 via des services Web. Je peux récupérer une liste d'activités, et je crois que j'ai besoin d'utiliser ActivityPointers pour récupérer les entités, mais j'ai échoué jusqu'ici. Aurais-je besoin de faire une boucle à travers chaque entité retournée à partir de la première requête pour récupérer le ActivityPointer pour cela? Et si oui, comment puis-je obtenir le champ "Concernant" ou le sujet de l'activité (par exemple: email).Liste des activités via les services Web

Le code pour récupérer les activités est:

var svc = GetCrmService(); 
    var cols = new ColumnSet(); 
    cols.Attributes = new[] { "activityid", "addressused", "scheduledstart", "scheduledend", "partyid", "activitypartyid", "participationtypemask", "ownerid" }; 
    var query = new QueryExpression(); 
    query.EntityName = EntityName.activityparty.ToString(); 
    query.ColumnSet = cols; 

    LinkEntity link = new LinkEntity(); 
    //link.LinkCriteria = filter; 
    link.LinkFromEntityName = EntityName.activitypointer.ToString(); 
    link.LinkFromAttributeName = "activityid"; 
    link.LinkToEntityName = EntityName.activityparty.ToString(); 
    link.LinkToAttributeName = "activityid"; 
    query.LinkEntities = new[] {link}; 

    var activities = svc.RetrieveMultiple(query); 
    var entities = new List<ICWebServices.activityparty>(); 
    RetrieveMultipleResponse retrieved = (RetrieveMultipleResponse) svc.Execute(request); 
    //var pointers = new List<activitypointer>(); 
    foreach (activityparty c in activities.BusinessEntities) 
    { 
     entities.Add(((activityparty)c)); 
     //the entities don't seem to contain a link to the email which they came from 
    } 

Répondre

1

Je ne sais pas si je comprends votre problème, mais le champ « ActivityID » dans l'objet ActivityPointer est le même ActivityID que l'activité sous-jacente (e-mail, tâche, phonecall, etc). Le forecobjectid est le lien vers l'entité concernée.

Heres ce que vous avez besoin pour obtenir l'équivalent de la page Activités

 ColumnSet cols = new ColumnSet() 
     { 
      Attributes = new string[] { "subject", "regardingobjectid", "regardingobjectidname", "regardingobjectidtypecode", "activitytypecodename", "createdon", "scheduledstart", "scheduledend" } 
     }; 
     ConditionExpression condition = new ConditionExpression() 
     { 
      AttributeName = "ownerid", 
      Operator = ConditionOperator.Equal, 
      Values = new object[] { CurrentUser.systemuserid.Value } //CurrentUser is an systemuser object that represents the current user (WhoAmIRequest) 
     }; 
     FilterExpression filter = new FilterExpression() 
     { 
      Conditions = new ConditionExpression[] { condition }, 
      FilterOperator = LogicalOperator.And 
     }; 
     QueryExpression query = new QueryExpression() 
     { 
      EntityName = EntityName.activitypointer.ToString(), 
      ColumnSet = cols, 
      Criteria = filter 
     }; 

     BusinessEntityCollection activities = svc.RetrieveMultiple(query); 

     foreach (activitypointer activity in activities) 
     { 
      //do something with the activity 

      //or get the email object 
      email originalEmail = (email)svc.Retrieve(EntityName.email.ToString(), activity.activityid.Value, new AllColumns()); 

     } 
+0

Merci à tous, je vais donner un aller. – Echilon

Questions connexes