Записи с меткой «Reporting Services»

PostHeaderIcon Ссылка на запись в CRM из отчета Reporting Services

Для формирования ссылки на форму записи в Dynamics CRM из отчетов, как вариант, можно использовать следующее выражение:

=iif(IsNothing(Parameters!CRM_URL.Value) , Nothing, Parameters!CRM_URL.Value+”?ID=”+Fields![GUID Field].Value.ToString+”&LogicalName=[Entity Type Name]#”)

Лучше описанного в SDK тем, что не привязываемся к коду сущности, который может быть различным между разными инстансами системы.

В выражении:

  • CRM_URL – текстовый параметр, заполняется CRM при формировании отчета
  • [GUID Field] – поле с GUID открываемой записи
  • [Entity Type Name] – текстовое наименование типа записи (account, contact, new_warehouse и пр.)

Выражение используется в параметре Jump to URL у элемента отчета.

PostHeaderIcon Решение проблемы со стандартным фильтром CRM в сложных отчетах Reporting Services

При разработке комплексных отчетов для Dynamics CRM мы часто сталкиваемся с задачей сделать несколько запросов, в которых используется один и тот же фильтр CRM (CRMAF_). Если в запросах указать CRMAF_ для одного и того же типа записи несколько раз, то при формировании отчета пользователю приходится несколько раз выбрать одинаковые критерии фильтрации для одинакового типа записи.

Мы решаем эту проблему следующим образом. В каждом запросе (DataSet) отчета создаем временную таблицу с выборкой id нужного типа записи и далее используем эту таблицу для запроса вместо стандартного CRMAF_.

Пример для сущности Account:

--Get Customers ID From CRM Filter
DECLARE @SQL nvarchar(4000);
DECLARE @Accounts TABLE
(
  accountid uniqueidentifier
)
SET @SQL = 'SELECT accountid FROM ('+@CRM_FilteredAccount+') AS Accounts;'
INSERT INTO @Accounts EXEC (@SQL);

--Select Accounts Data
SELECT
   *
FROM FilteredAccount AS Account
WHERE 
  EXISTS (SELECT * FROM @Accounts AS AccountsFilter WHERE AccountsFilter.accountid=Account.accountid);

@CRM_FilteredAccount – стандартная переменная CRM, которая создается в шаблоне отчета для каждого фильтра, указанного в запросе как “CRMAF_”. В данном случае, эта переменная создается для записей типа Account, а для контактов будет @CRM_FilteredContact.

В результате можно использовать @Accounts в комплексном запросе и отсутствует проблема со стандартным фильтром CRM.