Перечисление действий через веб-сервисы - PullRequest
0 голосов
/ 10 июня 2011

Я пытаюсь воспроизвести страницу «Действия» в Microsoft CRM 4.0 через веб-службы. Я могу получить список действий, и я считаю, что мне нужно использовать ActivityPointers, чтобы получить объекты, но до сих пор не удалось. Нужно ли было бы перебирать каждую отдельную сущность, возвращаемую из первого запроса, чтобы получить для него ActivityPointer? И если да, то как мне получить поле «Относительно» или «Предмет» (например, электронная почта).

Код для извлечения действий:

    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
    }

1 Ответ

1 голос
/ 16 июня 2011

Не уверен, что я понимаю вашу проблему, но поле «Activityid» в объекте Activitypointer совпадает с «Activityid» базового действия (электронная почта, задача, телефонный звонок и т. Д.). Закрепление объекта - это ссылка на заинтересованное лицо.

Вот что вам нужно, чтобы получить эквивалент страницы действий

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

        }
...