2012-04-17 1 views
2

У нашей учетной записи есть связь 1: N с «BookingAccount», настраиваемой сущностью. Имя отношения - new_Account_new_BookingAccount. В плагине, если я пытаюсь итерацию своей коллекцииКак выполнять итерацию в соотношении 1: N в динамике CRM4 C# Плагин

foreach (new_BookingAccount ba in myAccount.new_Account_newBookingAccount) 
{ 
    ... 
} 

это не действительна - даже при наличии связанных BookingAccounts.

Должен ли я повторно запрашивать для BookingAccounts или я могу вызвать некоторый метод «заполнения» в свойстве коллекции? Если да, то как это лучший способ? И в чем смысл свойства коллекции, если вы не можете его повторить.

Благодарим за любую помощь заранее.

ответ

1

Ах - коллекция должна быть загружена в явном виде:

orgContext.LoadProperty(account, "new_BookingAccount_new_ExternalCode"); 
foreach (new_BookingAccount ba in myAccount.new_Account_new_BookingAccount) 
{ 
    ... 
} 

(Хотя это не может быть сделано, если accouont является новым объектом, поэтому нуждается в какой-то чек заранее):

if (account.CreatedOn == null) 
    return; 

Кажется, что много работы для простой итерации коллекции

1

Ваш код должен работать. Если вы напишете клиент с ранними связанными сущностными классами, вы увидите, что такие коллекции используют общий метод GetRelatedEntity. Код будет выглядеть так:

 /// <summary> 
     /// 1:N account_activity_parties 
     /// </summary> 
     [Microsoft.Xrm.Sdk.RelationshipSchemaNameAttribute("account_activity_parties")] 
     public System.Collections.Generic.IEnumerable<MyCrmNamespace.ActivityParty> account_activity_parties 
     { 
      get 
      { 
       return this.GetRelatedEntities<MyCrmNamespace.ActivityParty>("account_activity_parties", null); 
      } 
      ... 
     } 

Этот код должен работать во всех случаях правильно. Конечно, возможны некоторые проблемы с безопасностью. Ваш код выполняется под некоторыми учетными данными пользователя CRM, и вы должны быть уверены, что у пользователя достаточно разрешений для просмотра обоих объектов.
Но самое главное, на что вы должны обратить внимание, это как вы извлекаете экземпляр myAccount. Вы упомянули, что этот код используется внутри подключаемого модуля. Но вы не упоминали, какой тип подключаемого модуля (pre-stage, post-stage), какое сообщение вы обрабатываете в этом подключаемом модуле, как вы получить экземпляр объекта myAccount. Если вы напрямую вызываете метод retrieve, все свойства должны быть заполнены. Но если myAccount поступает из входных параметров, нет гарантии, что все фактические значения будут установлены для всех свойств. Возможно, именно поэтому коллекция пуста.

+0

Отлично, спасибо за совет. Это плагин post-stage, и я получаю объект от изображения после публикации. Все, что задано/изменено пользователем, доступно (и, конечно, я его изменил, сохранил, а затем запустил подключаемый модуль) - все еще пусто! Мы еще не создали систему безопасности в нашей системе, поэтому не думайте, что это так. В очередной раз благодарим за помощь – Ryan

 Смежные вопросы

  • Нет связанных вопросов^_^