Home > MS CRM, SQL Reporting Services > Отображение отчета из навигационной панели CRM 4.0

Отображение отчета из навигационной панели CRM 4.0

Иногда нужно поместить ссылку на отчет в навигационную панель для быстрого к нему доступа. Примером таких отчетов могут быть сводные отчеты производительности, dashboardы, административные отчеты. В любом случае, сделать это не сложно, если смириться с одной проблемой – нужно явно указывать идентификатор в ссылке. А это значит, что ссылку нужно менять при каждом развертывании (на тестовом сервере, на сервере разработки, на эксплуатационном сервере). Также нет уверенности, что идентификатор будет стабильным даже в рамках одного развертывания – отчет может быть удален (в результате сбоя например) и создан наново. Маловероятно, но все равно возможно. Было бы неплохо в ссылке задавать не идентификатор отчета, а что-то более постоянное, например его имя.

Сделать это можно написав свою страницу, которая в качестве параметра  будет принимать название отчета, искать его идентификатор и перенаправляться на собственно ссылку отчета. Звучит несложно, реализация тоже сложностей не вызывает. Код страницы:

protected void Page_Load(object sender, EventArgs e)
    {
        String orgname;
        String ReportName;

        using (new CrmImpersonator())
        {
            String Url = ((string)(Registry.LocalMachine.OpenSubKey("Software\\Microsoft\\MSCRM").GetValue("ServerUrl"))).Replace("MSCRMServices", "");
            CrmService service = new CrmService();
            service.Url = String.Format("{0}mscrmservices/2007/crmservice.asmx",
                            Url);
            service.CrmAuthenticationTokenValue = new CrmAuthenticationToken();
            service.CrmAuthenticationTokenValue.AuthenticationType = 0;
            service.CrmAuthenticationTokenValue.OrganizationName = orgname;

            service.Credentials = System.Net.CredentialCache.DefaultCredentials;

            report desiredReport = new report();
            desiredReport.name = ReportName;

            var filter = new FilterExpression();
            filter.AddCondition("name", ConditionOperator.Equal, ReportName);

            QueryExpression query = new QueryExpression("report");
            query.ColumnSet.AddColumn("reportid");
            query.Criteria = filter;

            var reports = service.RetrieveMultiple(query);
            if (reports.BusinessEntities.Count != 0)
            {
                lbl.Text = (reports.BusinessEntities[0] as report).reportid.Value.ToString();
                Page.Response.Redirect(String.Format("{0}{1}/crmreports/viewer/viewer.aspx?id={2}",
                                                Url,
                                                orgname,
                                                (reports.BusinessEntities[0] as report).reportid.Value.ToString("B")));
            }
            else
            {
                lbl.Text = "Report was not found";
            }
        }

 На странице должна быть только одна метка, которая называется lbl – для вывода сообщения об ошибке. Без нее можно и обойтись.

Публикуем страницу и развертываем ее в папке ISV сервера (не забываем про то, что страница должна быть подписана ключем snk). Теперь модифицируем SiteMap для ее отображения. Допустим, страница развернута в папке ISV\[имя организации]\ReportByName, тогда в SiteMap нужно добавить следующий узел SubArea к списку нужной секции (например секции Workplace):

<SubArea Id="nav_report" Icon="/_imgs/ico_16_1070_d.gif" Url="/[имя организации]/ISV/[имя организации]/ReportByName/Default.aspx?ReportName=Activities" PassParams="1">
<Titles>
   <Title LCID="1033" Title="Activities Report"/>
</Titles>
<Descriptions>
   <Description LCID="1033" 
Description="Activities Report"/>
</Descriptions>
</SubArea>

 В данном случае для примера будет отображаться отчет Activities. Хочу обратить внимание на то, что передавать параметры (PassParams=”1″) – обязательно, так как название организации используется для создания сервиса при поиске идентификатора отчета.

Удачного репортинга 😉

Advertisements
  1. No comments yet.
  1. No trackbacks yet.

Leave a Reply

Fill in your details below or click an icon to log in:

WordPress.com Logo

You are commenting using your WordPress.com account. Log Out / Change )

Twitter picture

You are commenting using your Twitter account. Log Out / Change )

Facebook photo

You are commenting using your Facebook account. Log Out / Change )

Google+ photo

You are commenting using your Google+ account. Log Out / Change )

Connecting to %s

%d bloggers like this: