09.02.2012, 10:20 | #1 |
Участник
|
Объясните, как работает AccountSet
Добрый день!
Простой вопрос для гуру СРМ2011: Задача: создать для всех клиентов записи в связанной сущности. var clients = from a in svc_crm.AccountSet select new Account { AccountId = a.AccountId, Name = a.Name }; foreach (var c in clients) { создаю новые записи для связанной сущности } Все замечательно отрабатывает, но только для первых 50 клиентов. Почему? |
|
09.02.2012, 10:38 | #2 |
Участник
|
oData имеет такое ограничение на количество возвращаемых записей. Нужно использовать оператор $skip или что-то вроде:
...AccountSet.AddQueryOption("$skip", 50) |
|
09.02.2012, 10:53 | #3 |
Moderator
|
Это ограничение системы, сделанное чтобы обеспечить быстродействие. Записи выдаются постранично в зависимости от ностроек пользователя. По умолчанию по 50 штук. Судя по SDK:
Цитата:
In Microsoft Dynamics CRM 2011 and Microsoft Dynamics CRM Online you can page the results of a large .NET Language-Integrated Query (LINQ) query by using the Take and Skip operators. The Take operator retrieves a specified number of results and the Skip operator skips over a specified number of results.
__________________
http://fixrm.wordpress.com, снятие/наведение порчи. Быстро, дорого, гарантия. MS Certified Dirty Magic Professional |
|
09.02.2012, 12:48 | #4 |
Участник
|
Все равно выводит только 50... Skip и Take не помогли.
X++: Console.WriteLine("Loading clients.."); var clients = (from a in svc_crm.AccountSet select new Account { AccountId = a.AccountId, Name = a.Name }); foreach (var c in clients.Skip(100)) { Console.WriteLine("Clients " + i); Console.WriteLine("Creating new dlr_legalentity.."); var new_legalperson = new CRM.dlr_legalentity() { dlr_legalentityId = Guid.NewGuid(), dlr_name = String.Format("auto for client ({0})", c.Name.Substring(0, Math.Min(c.Name.Length, 30)), c.AccountId), dlr_accountid = new EntityReference { Id = c.AccountId, LogicalName = "account" } }; svc_crm.AddTodlr_legalentitySet(new_legalperson); svc_crm.SaveChanges(); i++;} |
|
09.02.2012, 12:50 | #5 |
Участник
|
Да, только по идее должны быть не первые 50, а далее. Соответственно нужно в цикле перебирать по 50 записей.
А skip скорее надо применять к svc_crm.AccountSet, хотя не буду утверждать, плохо знаком с Linq. |
|
|
За это сообщение автора поблагодарили: kenzo (1). |