获得所有业务部门

时间:2013-12-11 07:52:03

标签: c# .net dynamics-crm-2013

我正在尝试从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)。

我将非常感谢您如何检索所有业务部门的任何帮助。

2 个答案:

答案 0 :(得分: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;
            }
        }
    }

答案 1 :(得分:2)

我认为您希望从系统中获取所有活动的业务单位。因此,您必须使用IsDisabled属性来获取它们。您使用的属性EntityState用于跟踪上下文中的实体状态,而不是指示CRM中的实体状态。有关BU实体的详细信息,请参阅BusinessUnit Entity