Здравствуй Google API! Или делаем из DIRECTUM'а конфетку.

35 9

    

    Не так давно, просматривая наработки одной системы на С#, я подумал – “Красиво, однако”. Но сразу возникла мысль, что реализация подобных графиков на C# довольно таки трудозатратна, а ведь это не что то новое, это, по сути, все тот же велосипед, только в различных представлениях – Pie chart, Donut chart и т.д. И к тому же подобные вещи можно встретить где только можно, так почему бы не использовать одно какое то универсальное средство которое подошло бы всем.

    Эта тема меня заинтересовала и начался поиск уже готового универсального решения. Поисковые запросы в гугл падали пачками – “Красивые графики”, “графики для различных систем”, “цветные пироги”, “Charts”, “Настраиваемые графики”, “API”… Стоп, “API”? Тут то я понял что нашел то что искал, вот только то, что предлагал мне интернет было каким то… Скажем так – сварщику освоить сложно :)

 

    В общем, каким-то волшебным образом я добрался до библиотеки Google API. Библиотеки того что мне и было нужно в самом простом представлении и еще и с детальным описанием всех возможностей настройки и функций. После изучения возможностей я решил попробовать поиграться с найденным. Простые HTML’ки, небольшие настройки. “Ну вроде понятно” – подумал я, и лег спать… Но, через 10 минут я резко вскочил и подумал – а почему бы не засунуть это в DIRECTUM! И пошла работа (конечно, ведь 2 часа ночи это самое время творить :) )

    Начал я с создания простой функции, которая формировала мне те самые маленькие HTML’ки, с которыми я игрался в начале. Простой вызов функции создавал HTML, экспортировал его как документ, и открывал в браузере. После небольших корректировок HTML’ки она стала выдавать результат, основанный на данных которые я ей передавал:

 
    
    
  
  
    
RitPieChart()

        

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

        REQ – Строка, реквизит справочника по которому собираем статистику
        TITLE – Строка, заголовок графика
        WebBrowserControl – Строка, имя веб-контрола карточки в котором будем отображать график
        Is3D – Логический, будет ли график иметь “3D вид”

    Ну а теперь давайте поиграемся с новой игрушкой. Для начала обозначим задачу:

        “Вывести статистику по исполнению заявок в Service Desk'е.”

    Данные будем брать из реквизита “Состояние” (в данном реквизите указывается статус выполнения заявки) карточки справочника. 

  Выводить их будем в предварительно подготовленный веб-контрол с именем “STWebBrowserControl1”. Называться наш график будет “Статистика выполнения заявок”. А формироваться данные будут по кнопке “Обновить статистику”, на которую мы повесим следующее вычисление:

RITPieGraph('ClaimState'; "Статистика выполнения заявок"; 'STWebBrowserControl1')

    И вот результат:

    Стоит отметить что Google API работает только при наличии подключения к интернету на пользовательской машине и при настройке разрешения запускать ActiveX компоненты в браузерах. Можно воспользоваться другими – так же бесплатными API, которые могут работать и локально, но тогда необходимо будет подгружать ява-скрипты на пользовательские машины. Я же себе ставил цель использования именно компонент Google, т.к. они наиболее просты и очень гибки в настройке. С полным перечнем настроек, которые можно использовать в данном графике можете ознакомиться на официальном сайте:

    https://google-developers.appspot.com/chart/interactive/docs/gallery/piechart

    Полный перечень интерактивных графиков и т.д. от Google по ссылке ниже:

    https://developers.google.com/chart/interactive/docs/gallery

    Так же стоит отметить, что компоненты Google предоставляются бесплатно и не подлежат перепродаже! При использовании внимательно ознакомьтесь с лицензионным соглашением!

    P.S. В данной функции разобран только базовый функционал, подогнанный под конкретную задачу. Вы же можете донастраивать и добавлять параметры в функцию под все ваши нужды. Я лишь показал вам как это просто сделать ;)

    P.P.S. Во вложении данная функция, версия системы - 4.9.1, но можно импортировать в любую версию системы если в файлах разработки изменить версию платформы. (проверено на 4.8)

    RITPieGraph.rar (3,62 Кб)

 

Дмитрий Тарасов
Стоит отметить что Google API работает только при наличии подключения к интернету на пользовательской машине и при настройке разрешения запускать ActiveX компоненты в браузерах.

Совсем печально, особенно в подразделениях газпрома. А почему не стал использовать MS SQL Reporting Services? Для решения поставленной задачи он подходит гораздо больше, чем гугл апи.

Можно воспользоваться другими – так же бесплатными API, которые могут работать и локально, но тогда необходимо будет подгружать ява-скрипты на пользовательские машины.

Совсем не обязательно. Как минимум, их можно хранить в базе как обычные документы.

Адик Крымгужин
А почему не стал использовать MS SQL Reporting Services? Для решения поставленной задачи он подходит гораздо больше, чем гугл апи.

Потому что если бы я хотел его использовать я бы использовал) мне надо было больше красоты и интерактивность, нежели аналитика. + мне мусор в виде доп. элементов интерфейса не надо было, мне нужен был только сам симпатичный график :)
 

Совсем не обязательно. Как минимум, их можно хранить в базе как обычные документы.

А потом экспортировать и прописывать в HTML от куда их подгружать - потому что напрямую с директума это не сделать да и это не совсем правильно. в общем заморочек будет куча. поэтому просто - Google API :) 
не, ну в Газпромах конечно можно и заморочиться. Если вдруг они за красотой погонятся)

Адик Крымгужин

А на счет интерактивности - можете выше указанный HTML код вставить в текстовик, добавив только сверху и снизу - соответственно и посмотреть как быстро и красиво получается и можете даже по кусочкам пирога потыкаться и по легенде) На скриншотах а то этого не видно..

 

Mikhail Kislitsyn

Отлично, очень рад что появляются подобные эксперименты, молодцы.

А потом экспортировать и прописывать в HTML от куда их подгружать - потому что напрямую с директума это не сделать да и это не совсем правильно. в общем заморочек будет куча. поэтому просто - Google API :) .

Поддержу, Дмитрия, что тут проблем никаких нет: пример http://club.directum.ru/post/Code-Snippets-WYSWYG-Redaktor-v-spravochnike-DIRECTUM.aspx

Google API прекрасен чуть более чем полностью, только для параноиков стоит указать, что ВАШУ СТАТИСТИКУ МОЖЕТ ПРОЧЕСТЬ ГУГЛ! smiley
Это примерно как "Нельзя сушить котов в микроволновке".

p.s. Обычно для графиков используют обложки папок, тк места больше, интерфейс можно навернуть поинтереснее и с веб-доступом интегрировать никаких проблем. Почему решили использовать записи справочника?

Адик Крымгужин
Поддержу, Дмитрия, что тут проблем никаких нет: пример http://club.directum.ru/post/Code-Snippets-WYSWYG-Redaktor-v-spravochnike-DIRECTUM.aspx

Я про это уже говорил, что сделать можно, только заморочек более будет чем просто передать параметры.
 

p.s. Обычно для графиков используют обложки папок, тк места больше, интерфейс можно навернуть поинтереснее и с веб-доступом интегрировать никаких проблем. Почему решили использовать записи справочника?

Обложки папок используют для общей статистики обычно. тут конечно тоже показана общая статистика, но если добавить больше вычислений то можно будет отобразить например статус именно по текущей заявке, или например этапы прохождения маршрута: Сколько пройдено, сколько осталось. Тут как бы подразумевалась связь карточка справочника - график.
Просто в примере в общем виде показано :) 

Антон Максунов
Google API прекрасен чуть более чем полностью, только для параноиков стоит указать, что ВАШУ СТАТИСТИКУ МОЖЕТ ПРОЧЕСТЬ ГУГЛ! 

И тут можно сразу отметать 95% организаций с численностью сотрудников от 100 человек. Ну и да, мне например проще сделать локальный инструмент, так как у нас (как у многих других) тупо даже у трети сотрудников нет доступа к интернету. И у нас еще относительно либерально относятся к этому, у соседей чтоб получить доступ к определенному сайту нужно служебку писать на начальство, а в конце месяца начальству в обязательном порядке приходит отчет по его сотрудникам - кто куда ходил, что там делал.

Решение интересное, но скорее самому побаловаться, к сожалению. Либо в максимально либеральную ИТ-направленную контору.

Адик Крымгужин
Решение интересное, но скорее самому побаловаться, к сожалению. Либо в максимально либеральную ИТ-направленную контору.

Хотя статья и посвещена именно использованию Google API она просто показывает очередной способ интересного отображения информации/статистики в DIRECTUM. И как уже ранее говорилось - никто не запрещает использовать в таком плане средства которые не просятся в интернет :)

Адик Крымгужин
Молодец! Просто, быстро и красиво! По разработке... В функции есть над чем поработать. К примеру:  - Цикл по справочнику заменить SQL запросом (там в десятки раз быстрее)

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

Алексей Кузнецов

Я заставлял Google Charts работать на компах без интернета. На локальный сервер залил веcь JS и прочее файло  и подправил в нем отсылы на ресурсы google (заменил ссылки на локальные).  И заработали гугл графики без интернета. 

Авторизуйтесь, чтобы написать комментарий