2013-12-11 1 views
2

Я пытаюсь получить все бизнес-единицы из CRM 2013.Получить все бизнес-единицы

Попробовал следующий запрос

 var query = _serviceContext.BusinessUnitSet 
          .Where(b => b.EntityState == 0) 
          .Select(x => new 
             { 
              Name = x.Name, 
              Id = x.Id 
             } 
            ) 
          .ToList(); 

Используя этот запрос я получаю ошибку только с указанием:

{System.ServiceModel.FaultCode} {attributeName} {System.Collections.Generic.SynchronizedReadOnlyCollection<System.ServiceModel.FaultReasonText>} 

При поиске по теме я нашел информацию о том, как извлекать отдельные бизнес-единицы (что, похоже, отличается от получения «нормальной» сущности), но не как получить их все (link).

Любая помощь относительно того, как я мог бы получить все бизнес-единицы, будет очень благодарен.

+0

Вы не получаете информацию об ошибке? Я предполагаю, что это CRM Online? Является ли это в контексте плагина, или это приложение, использующее SDK вне CRM? – Daryl

ответ

2

Я полагаю, вы хотите, чтобы получить все активные бизнес-единицы из системы. Поэтому вы должны использовать свойство IsDisabled, чтобы получить их. Свойство, которое вы используете EntityState, используется для отслеживания состояния объекта в контексте, а не для указания состояния объекта в CRM. См. BusinessUnit Entity для получения дополнительной информации о объекте BU.

3

Попробуйте это с помощью QueryExpression

public class BusinessUnit 
    { 
     public Guid Id { get; set; } 
     public String Name { get; set; } 
    } 


    public void GetAllBusinessUnits(Action<QueryExpression> queryModifier = null) 
    { 

     foreach (BusinessUnit m in RetrieveAllBusinessUnit(this.Service, 1000, queryModifier)) 
     { 

      //Console.WriteLine(m.Name); 
     } 
    } 


    public static IEnumerable<BusinessUnit> RetrieveAllBusinessUnit(IOrganizationService service, int count = 1000, Action<QueryExpression> queryModifier = null) 
    { 

     QueryExpression query = new QueryExpression("businessunit") 
     { 
      ColumnSet = new ColumnSet("businessunitid", "name"), 

      PageInfo = new PagingInfo() 
      { 
       Count = count, 
       PageNumber = 1, 
       PagingCookie = null, 
      } 
     }; 

     if (queryModifier != null) 
     { 
      queryModifier(query); 
     } 

     while (true) 
     { 
      EntityCollection results = service.RetrieveMultiple(query); 

      foreach (Entity e in results.Entities) 
      { 
       yield return new BusinessUnit() 
       { 
        Id = e.GetAttributeValue<Guid>("businessunitid"), 
        Name = e.GetAttributeValue<String>("name") 
       }; 
      } 

      if (results.MoreRecords) 
      { 
       query.PageInfo.PageNumber++; 
       query.PageInfo.PagingCookie = results.PagingCookie; 
      } 
      else 
      { 
       yield break; 
      } 
     } 
    }