RSS Подписка на статьи RSS Подписка на комментарии Панель инструментов

Блог профессионалов стал частью сайта технической поддержки DocsVision http://support.docsvision.com. Новые материалы будут появляться уже на этом сайте.

Поиск

Ярлыки

авто генерация кода (1) Администрирование DocsVision (60) Атрибутивный поиск (3) База данных (24) Базы знаний (1) Безопасность (1) Бизнес-процессы (20) Блог (2) Вы увидите это первыми (1) Групповые политики (1) Диаграммы (2) Задания (2) Интеграция (2) Карточки DocsVision (14) Конструктор Решений (11) Маркетинг и продажи (4) Навигатор (3) Новое (3) Новости (32) Опрос (4) Опросы DocsVision (4) Оптимизация (3) Отчеты (2) Ошибки (1) Поддержка (14) Полезные ссылки (1) Представления (4) Производительность (5) Разбор полетов (18) Разработка для Workflow (7) разработка карточек (2) Разработка на платформе DocsVision (41) Разработка решений (43) Расширение платформы (1) Расширенные отчеты (9) Решения на платформе DocsVision (6) Сервисы DocsVision (3) Сканеры (3) Справочник сотрудников (1) Справочник типов (1) Установка (1) Утилиты (13) Шлюз в SharePoint (8) Штрихкод (2) Cкрипты карточек (7) DocsVision внутри (1) DocsVision Live (1) FileStream (1) FireFox (2) Opera (1) Powershell (5) Safari (1) SharePoint2007 (1) SharePoint2010 (2) Silverlight (1) UltraViews (1) Vista (1)
Показаны сообщения с ярлыком Отчеты. Показать все сообщения
Показаны сообщения с ярлыком Отчеты. Показать все сообщения

Пример разработки собственного отчета на Silverlight

В этой статье я бы хотел показать, как можно быстро создать гибкий и красивый (зависит от фантазии дизайнера) отчет с применением технологии Silverlight. К числу преимуществ WEB-отчета (Silverlight в частности) можно вписать:
  • Простота развертки (не надо каждый раз при обновлении разворачивать на клиентах msi'ники)
  • Возможность просмотра как в навигаторе (настроив папку на отображения отчета по URL), так и вне его (просто в браузере).
  • Так как физически отчет находится на сервере – это значит, что удобно использовать MSSQL Server напрямую для выборки данных для отчета (хотя никто не мешает задействовать и DV API)

Silverlight предоставляет возможность создавать действительно «богатые» интерфейсы (rich UI) декларативно на языке XAML (так же, как и в WPF). Например, небольшими усилиями можно сделать таблицу, похожую на ту, что используется в навигаторе: 

При том, что исходный код страницы на C# выглядит очень минималистично:


using System.Windows.Data;

namespace IDoc.DvWebReports
{
public partial class MainPage
{
public MainPage()
{
InitializeComponent();
//генерация набора тестовых данных:
Tasks = new PagedCollectionView(TaskInfo.GetTaskInfoForTest());
//группировка:
Tasks.GroupDescriptions.Add(new PropertyGroupDescription("Author"));
Tasks.GroupDescriptions.Add(new PropertyGroupDescription("Executer"));
}

///
/// Поручения
///

public PagedCollectionView Tasks { get; set; }
}
}

А представление этих тестовых данных (через Binding) полностью настраивается декларативно в XAML по средствам дизайнера в Visual Studio или такого интересного инструмента, как Expression Blend. На создание такого «фейкового» отчета у меня ушло меньше часа. 

Теперь перейдем к «реальным отчетам». В качестве примера, рассмотрим отчет о кол-ве созданных в системе карточек (в виде круговой диаграммы). Silverlight – это, по сути, клиентская часть, поэтому в проекте SL приложения мы не можем получить прямой доступ к данным (например, по средствам ADO.NET). Поэтому нам необходима отдельная служба, которую очень просто реализовать, используя технологию WCF. Ну и наконец, нам нужен ASP.NET проект, который будет хостом для нашего клиентского xap пакета (Silverlight приложения) и нашей службы WCF (с basicHttpBinding, т.к. только этот вид привязки поддерживается сильверлайтом). Структура солюшна в VS выглядит следующим образом:

Для развертки всего решения достаточно воспользоваться командой Publish и опубликовать на удаленном сервере прямо с машины разработчика.
В качестве доступа к данным в своём примере я использовал “недо-ОRM” LINQ to SQL, в котором накидал в дизайнере пару нужных для отчета таблиц и составил вот такой запрос:

    /// 
/// Получить информацию по кол-вам карточек в системе
///

public static CardsCountInfoRow[] GetCardCountsInfo(string connectionString,
DateTime rangeStart, DateTime rangeEnd)
{
using (var dataContext = CreateDataContext(connectionString))
{
var result =
from instancesGroup in
(from instance in dataContext.dvsys_instances
join instanceDate in dataContext.dvsys_instances_dates
on instance.InstanceID equals instanceDate.InstanceID
where
//Не удалена
(!instance.Deleted.HasValue || !instance.Deleted.Value) &&
//Не шаблон
(!instance.Template.HasValue || !instance.Template.Value) &&
//создана в указанный период
instanceDate.CreationDateTime >= rangeStart &&
instanceDate.CreationDateTime <= rangeEnd
group instance by instance.CardTypeID into g
select new { CardTypeID = g.Key, Count = g.Count()})
join def in dataContext.dvsys_carddefs
on instancesGroup.CardTypeID equals def.CardTypeID
select new CardsCountInfoRow(instancesGroup.Count, def.Icon,
def.CardTypeID, def.XMLSchema);
return result.ToArray();
}
}

Исходный код страницы отчета:

using System;
using System.Windows;
using DvReports.Reporting;

namespace DvReports
{
public partial class MainPage
{
public MainPage()
{
InitializeComponent();
RangeStart = new DateTime(DateTime.Now.Year, 1, 1);
RangeEnd = DateTime.Now;
}

///
/// Начало периода создания карточек
///

public DateTime RangeStart { get; set; }

///
/// Окончание периода создания карточек
///

public DateTime RangeEnd { get; set; }

private void btShowData_Click(object sender, RoutedEventArgs e)
{
var client = new ReportServiceClient();
client.GetCardCountsInfoCompleted += GetCardCountsInfoCompleted;
//посылаем запрос службе
client.GetCardCountsInfoAsync(RangeStart,
RangeEnd == DateTime.MinValue ? DateTime.MaxValue : RangeEnd);
}

//пришел ответ
private void GetCardCountsInfoCompleted(object sender, GetCardCountsInfoCompletedEventArgs e)
{
pieChart.Visibility = Visibility.Visible;
//отдаем данные диаграмме
pieChart.DataContext = e.Result;
}
}
}

Далее на XAML описал представление, развернул сайт на IIS и указал в одной из папок дв его отображение по URL:


На этом не остановился, и там же сделал ещё один отчет – отчет по продолжительностям сессий у сотрудников:


Тут используется обычный компонент ListBox с применением такой интересной "фичи", как DataTemplate – шаблон представления данных элемента, который удобно создавать в Expression Blend:

Для исполнения Silverlight приложений на клиентах, у них должен быть установлен Silverlight Runtime (~9mb), при этом наличие исполняемой среды .NET какой-либо версии не обязательно. Cовместимость Silverlight с различными операционными системами можно увидеть в таблице тут

Некоторые ссылки по теме:


  1. Step by step руководство по созданию Silverlight + WCF приложения 
  2. Видео-доклады на techdays.ru по Silverlight и WCF 

Исходники демонстрационных приложений: DvReportsSample и DataGridSample Читать дальше

Оставить комментарий (всего: 3)

UltraViews 2.0 и диаграммы

Не так давно я проводил вебинар по UltraViews - платформе для постоения интерактивных отчетов и рабочих мест для DocsVision и говорил про выход UltraViews 2.0 и про новые возможности библиотеки. Одна из таких возможностей - скриптинг на C# и подключение дополнительных библиотек к отчетам. Например, можно подключить компонент для построения диаграмм. После вебинара меня просили выпустить вместе с новой версией библиотеки и несколько примеров построения диаграмм.

Мы сделали два таких предварительных примера. Но хочется реализовать примеры, которые были бы не просто иллюстрацией использования UltraViews, а реально полезными и использовались as is сразу после их установки. Всех интересующихся прошу посмотреть описание примеров под катом и высказать в комментариях свои соображения и пожелания. Шансы на реализацию каких-то из них велики.


Итак, примеры. Построены они на базе замечательного компонента ZedGraph. Количество и качество данных для диаграмм сомнительное, но в данном случае скриншоты нужны только как иллюстрации.
1. Строит круговую диаграмму, показывающую количество документов различных типов (по справочнику типов). Используются все неудаленные входящие, исходящие, внутренние и универсальные документы.


2. Строит сравнительную статистику количества входов пользователей в систему. По умолчанию сравниваются последние 10 дней и 10 дней 2 недели назад (калькуляция в неделях нужна для совпадения дней недели и сравнения понедельник-понедельник, а не понедельник-суббота).


Читать дальше

Оставить комментарий (всего: 0)