Как вы знаете для Microsoft Dynamics CRM можно создавать отчеты, которые будут доступны для определенных типов записей: контактов, организаций, заказов и др. Для это необходимо использовать фильтрованные представления в базе данных: FilteredContact, FilteredAccount … и указать в настройке отчета необходимые данные в пунктах: «Связанные типы записей» и «Отобразить в».
Например, такой запрос:
select name from FilteredAccount CRMAF_FilteredAccount
будет трансформировать системой в запрос вида
select name
from FilteredAccount CRMAF_FilteredAccount
where CRMAF_FilteredAccount.accountid = '{0000000-0000-0000-0000-000000000000}'
т.е. идентификатор выбранной записи будет подставлен автоматически.
Проблема может возникнуть, когда в вашем отчете используется несколько DataSet. Почему-то идентификатор записи будет передаваться только в 1й DataSet, а в остальные нет. Поэтому если есть необходимость использовать полученный идентификатор в нескольких DataSet, то придется выполнить следующие шаги:
1. Создать 1й DataSet с простым запросом получения идентификатора записи, н-р:
Создаю DataSet с именем GetAccountId
select CRMAF_FilteredAccount.accountid from FilteredAccount CRMAF_FilteredAccount
2. Создать новый параметр @AccountId со значением по умолчанию равным accountid из GetAccountId
3. После чего мы можем использовать данный параметр в других наших DataSets как:
where CRMAF_FilteredAccount.accountid = @AccountId
Примечание:
Если у вас готов отчет с несколькими DataSet, 1й из которых не является вспомогательным для создания параметра (как в примере), то просто можете отредактировать в текстовом редакторе ваш .rdl файл отчета и переместить нужный DataSet на первое место ( В студии, перемещать DataSet не получится).


29.11.2010 в 08:39
Ну или самое простое – использовать параметр отчёта @CRM_FilteredAccount с последующей его передачей во все датасеты