我正在尝试从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 :(得分: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。