Как вы знаете для 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

report parameter

3. После чего мы можем использовать данный параметр в других наших DataSets как:

where CRMAF_FilteredAccount.accountid = @AccountId

Примечание:

Если у вас готов отчет с несколькими DataSet, 1й из которых не является вспомогательным для создания параметра (как в примере), то просто можете отредактировать в текстовом редакторе ваш .rdl файл отчета и переместить нужный DataSet на первое место ( В студии, перемещать DataSet не получится).