forum.bitel.ru http://forum.bitel.ru/ |
|
JAVA в отчетах (CRM) http://forum.bitel.ru/viewtopic.php?f=49&t=11957 |
Страница 1 из 1 |
Автор: | skyb [ 27 сен 2016, 18:45 ] |
Заголовок сообщения: | JAVA в отчетах |
Помогите разобраться как использовать JAVA в отчетах, с sql вроде разобрался болемение, а вот с java непонятно что куда вставлять, мне бы пример отчета, банальный sql запрос и разбор его с помощью java и вывод результатов, а то сам долго буду разбираться |
Автор: | skyb [ 30 сен 2016, 08:31 ] |
Заголовок сообщения: | Re: JAVA в отчетах |
ввысь, нет нигде примера, а самому невзлетает, подскажите |
Автор: | braek-neck [ 30 сен 2016, 10:46 ] |
Заголовок сообщения: | Re: JAVA в отчетах |
Вот в вики вроде есть пример. Самому скоро предстоит разбираться. ) http://wiki.bitel.ru/index.php/%D0%9F%D ... 0%B2_BGCRM |
Автор: | skyb [ 03 окт 2016, 16:13 ] |
Заголовок сообщения: | Re: JAVA в отчетах |
braek-neck писал(а): Вот в вики вроде есть пример. Самому скоро предстоит разбираться. ) http://wiki.bitel.ru/index.php/%D0%9F%D ... 0%B2_BGCRM Если присмотреться детально, то можно увидеть что там простой sql, с ним собственно я разобрался, проблемы решил. А вот как засунуть туда яву - не дохожу я мозгом, поэтому и прошу пример, верней как банальный принт вывести я разобрался, а вот как разбирать sql запрос, нет, как я только не пробовал, ошибку выдает. Нужен рабочий пример |
Автор: | Администратор [ 05 окт 2016, 01:43 ] |
Заголовок сообщения: | Re: JAVA в отчетах |
День добрый. Используя приведённый ниже тег вы можете создать в JSP любой объект из динамических классов. Там же приведён пример вызова метода из него. В закоментированном виде будет включен в пример отчёта. Код: <u:newInstance var="test" clazz="ru.bgcrm.dyn.Test"/>
Вызов метода из объекта класса: ${test.doSomthing()} |
Автор: | skyb [ 05 окт 2016, 14:53 ] |
Заголовок сообщения: | Re: JAVA в отчетах |
Немного не понятно, есть обычный sql запрос, там выводятся определенные поля, как это потом передать в вывод фомы отчета на вебстраницу - не понятно. можно всетаки примером |
Автор: | Администратор [ 05 окт 2016, 22:18 ] |
Заголовок сообщения: | Re: JAVA в отчетах |
SQL выполняется в Java коде? В примере есть вызов метода. В метод можете получить соединение к БД, выбрать необходимое и возвратить результат объектами в JSP. |
Автор: | skyb [ 06 окт 2016, 15:35 ] |
Заголовок сообщения: | Re: JAVA в отчетах |
всервно не совсем понятно как это запихать в отчет, там есть такие строчки Код: <c:forEach var="row" items="${result.rowsByIndex}"> <c:set var="id" value="${row[0]}"/> <c:set var="executers" value="${row[1]}"/> <c:set var="type" value="${row[2]}"/> <c:set var="colT" value="${row[3]}"/> <c:set var="vid" value="${row[4]}"/> <c:set var="colV" value="${row[5]}"/> Это каждое поле полученное в запросе, а как быть с таким методом непонятно, нужно использовать return ? но тогда что получать? или для каждого значения описывать свой отдельный метод и в нем возвращать каждое значение? вобщем пока опять непонятно |
Автор: | Администратор [ 07 окт 2016, 02:45 ] |
Заголовок сообщения: | Re: JAVA в отчетах |
Например Java класс может возвращать List<String[]>. Код: public List<String[]> getData() { } Тогда в JSP работа будет выглядеть следующим образом: Код: <u:newInstance var="test" clazz="ru.bgcrm.dyn.Test"/>
<c:forEach var="row" items="${test.getData()}"> <c:set var="id" value="${row[0]}"/> <c:set var="executers" value="${row[1]}"/> |
Автор: | skyb [ 07 окт 2016, 16:03 ] |
Заголовок сообщения: | Re: JAVA в отчетах |
дело движется и это радует ) Но непонятно как должен выглядеть класс, в документации сказано Класс должен расширять абстрактный класс ru.bgcrm.event.listener.DynamicEventListener в который передаётся событие ru.bgcrm.event.RunClassRequestEvent. а нам же ненада такого, нам нужно просто глобальный скрипт, если ассоциировать с биллингом. Тут должна быть какая то точка входа, тоже непонятно, есть пример начала класса Код: public class KtvDebtManager implements Runnable, EventListener<UserEvent> { @Override public void run() { } } что то типо такого? и если ипорты какие то заморские, то тоже от примера не откажусь =) |
Автор: | Администратор [ 12 окт 2016, 00:44 ] |
Заголовок сообщения: | Re: JAVA в отчетах |
Класс может быть любой. Указанные вами выше требования относятся только к классам - обработчикам событий. |
Автор: | skyb [ 12 окт 2016, 16:51 ] |
Заголовок сообщения: | Re: JAVA в отчетах |
Ява класс Код: public class ManagerJob { private static final Logger log = Logger.getLogger( ManagerJob.class ); public List<String[]> getData() { Connection con = Setup.getSetup().getDBConnectionFromPool(); List<String> manager = new ArrayList<String>(); manager.add("Test"); return manager; } } Это отчет, он с sql эм, и рабочий, много конечно ненужного, но не стоит обращать внимание, толькоо на нужное Код: # cat custom_report_executers.jsp <%@ page import="java.util.Enumeration"%> <%@ page import = "java.util.*" %> <%@ page import = "java.net.*" %> <%@ page import = "ru.bitel.common.sql.ConnectionSet.*" %> <%@ page import = "java.sql.*" %> <%@ page import = "java.util.*" %> <%@ page contentType="text/html; charset=UTF-8"%> <%@ include file="/WEB-INF/jspf/taglibs.jsp"%> <div class="center1020"> <h2>Отчёт по исполнителям</h2> <html:form action="/user/empty"> <input type="hidden" name="forwardFile" value="/WEB-INF/jspf/user/plugin/report/report/custom_report_executers.jsp"/> Дата начала: <ui:date-time paramName="date1" value="0"/> Дата окончания: <ui:date-time paramName="date2" value="0"/> <br/> <button type="button" class="btn-grey ml1 mt05" onclick="openUrlToParent( formUrl( this.form ), $(this.form) )">Сформировать</button> </html:form> <c:set var="date1" value="${u:parseDate( form.param.date1, 'ymd' ) }"/> <c:set var="date2" value="${u:parseDate( form.param.date2, 'ymd' ) }"/> <c:if test="${not empty date1}"> <%-- в случае, если Slave база не настроена - будет использована обычная --%> <sql:query var="result" dataSource="${ctxSlaveDataSource}"> SELECT p.id, u.title, pt.title, (SELECT count(p.id) FROM process AS p LEFT JOIN process_type AS pt ON pt.id = p.type_id LEFT JOIN process_executor AS pe ON pe.process_id = p.id LEFT JOIN user AS u ON pe.user_id = u.id LEFT JOIN param_list AS pl ON pl.id = p.id AND pl.param_id IN (26,42) LEFT JOIN param_date AS pd ON pd.id = p.id LEFT JOIN user_group AS ug ON ug.user_id = u.id WHERE pd.param_id = 10 AND pd.value BETWEEN ? AND ? AND ug.group_id = 1), nplv.title FROM process AS p LEFT JOIN process_type AS pt ON pt.id = p.type_id LEFT JOIN process_executor AS pe ON pe.process_id = p.id LEFT JOIN param_list AS pl ON pl.id = p.id AND pl.param_id IN (26,42) LEFT JOIN n_param_list_value AS nplv ON nplv.id = pl.value AND nplv.param_id = pl.param_id LEFT JOIN user AS u ON pe.user_id = u.id LEFT JOIN param_date AS pd ON pd.id = p.id LEFT JOIN user_group AS ug ON ug.user_id = u.id WHERE pd.param_id = 10 AND pd.value BETWEEN ? AND ? AND ug.group_id = 1 ORDER BY pt.title <sql:param value="${date1}"/> <sql:param value="${date2}"/> <sql:param value="${date1}"/> <sql:param value="${date2}"/> </sql:query> <u:newInstance var="test" clazz="ru.bgcrm.dyn.bghelp.ManagerJob"/> <c:forEach var="row" items="${test.getData()}"> <c:set var="id" value="${row[0]}"/> System.out.println("IP of my system " + ${id}); <% String query = "SELECT id FROM process LIMIT 5"; System.out.println("IP of my system " + query); %> <table style="width: 100%;" class="data mt1"> <tr> <td>ID</td> <td>Исполнитель</td> <td>Тип работ</td> <td>---</td> <td>Вид</td> <td>---</td> </tr> <c:forEach var="row" items="${result.rowsByIndex}"> <c:set var="id" value="${row[0]}"/> <c:set var="executers" value="${row[1]}"/> <c:set var="type" value="${row[2]}"/> <c:set var="colT" value="${row[3]}"/> <c:set var="vid" value="${row[4]}"/> <c:set var="colV" value="${row[5]}"/> <tr> <td><a href="UNDEF" onclick="openProcess( ${id} ); return false;">${id}</a></td> <td>${executers}</td> <td>${type}</td> <td>${colT}</td> <td>${vid}</td> <td>${colV}</td> </tr> </c:forEach> </table> </c:if> </div> Принт даже не вызвался, хелп ми |
Автор: | skyb [ 12 окт 2016, 17:04 ] |
Заголовок сообщения: | Re: JAVA в отчетах |
и не понятно как дебажить такие отчеты, может стоит сделать так - дать возможность запускать ява класс в веб админке BGCRM, чтобы в лог выводить какие то принты, для дебага, а потом уже нужные данные возвращать в отчет и там выводить? как глобальный скрипт в биллинге |
Автор: | Администратор [ 13 окт 2016, 01:14 ] |
Заголовок сообщения: | Re: JAVA в отчетах |
Вызов класса правильный. Динамический код скомпилировали, ошибок не было? В логе сервера ошибок нет при генерации отчёта? Попробуйте сократить JSP только до создания класса и вызова getData() в нём. |
Автор: | skyb [ 13 окт 2016, 05:33 ] |
Заголовок сообщения: | Re: JAVA в отчетах |
Класс изменился до Код: public class ManagerJob { private static final Logger log = Logger.getLogger( ManagerJob.class ); public java.util.List<String[]> getData() { Connection con = Setup.getSetup().getDBConnectionFromPool(); List<String[]> manager = new ArrayList<String[]>(); String[] cats = {"Васька", "Барсик", "Мурзик"}; manager.add(cats); return ( manager ); } } Отчет поменялся до Код: <u:newInstance var="test" clazz="ru.bgcrm.dyn.bghelp.ManagerJob"/> <c:forEach var="row" items="${test.getData()}"> <c:set var="id" value="${row[0]}"/> System.out.println("Test cats manager " + ${id}); выводит просто Код: System.out.println("Test cats manager " + ); ошибок нигде необнаружил |
Автор: | Администратор [ 13 окт 2016, 13:49 ] |
Заголовок сообщения: | Re: JAVA в отчетах |
Так попробуйте: Код: <u:newInstance var="test" clazz="ru.bgcrm.dyn.bghelp.ManagerJob"/>
<c:forEach var="row" items="${test.getData()}"> ${row[0]} |
Автор: | skyb [ 13 окт 2016, 14:28 ] |
Заголовок сообщения: | Re: JAVA в отчетах |
неа, неработает. Уточню, что это у меня полностью весь файл, тоесть больше в JSP ничего нет кроме этих строк |
Автор: | Администратор [ 16 окт 2016, 22:59 ] |
Заголовок сообщения: | Re: JAVA в отчетах |
1) Создал динамический класс (каталог dyn): Код: package ru.bgcrm.dyn.bghelp; import java.util.ArrayList; import java.util.List; public class ManagerJob { public List<String[]> getData() { List<String[]> manager = new ArrayList<String[]>(); String[] cats = { "Васька", "Барсик", "Мурзик" }; manager.add(cats); return manager; } } 2) В JSP тестового отчёта example.jsp вставил фрагмент (после комментированного блока где "Пример создания объекта.."): Код: <u:newInstance var="test" clazz="ru.bgcrm.dyn.bghelp.ManagerJob"/> Вызов метода из объекта класса: ${test.getData()[0][0]} "Васька" успешно было выведено.. |
Автор: | skyb [ 17 окт 2016, 08:15 ] |
Заголовок сообщения: | Re: JAVA в отчетах |
васька канеш шикарен, не кот а прелесть )))) вывелся только на странице, в отчет его поместить не удалось, пытался по разному, но результат нулевой, невыводит ваську в отчет, подскажите как и второй вопрос, а как быть с фильтрами отчета, как его передать в динкласс? |
Автор: | skyb [ 20 окт 2016, 08:09 ] |
Заголовок сообщения: | Re: JAVA в отчетах |
Можно очень попросить, сделайте тек же как и в биллинге а, ну очень там сейчас удобно |
Автор: | skyb [ 30 окт 2016, 06:24 ] |
Заголовок сообщения: | Re: JAVA в отчетах |
Ап |
Автор: | Администратор [ 13 ноя 2016, 21:51 ] |
Заголовок сообщения: | Re: JAVA в отчетах (CRM) |
"вывелся только на странице, в отчет его поместить не удалось" А разве содержимое отчёта и страница, сгенерированная JSP - не одно и то же? |
Автор: | skyb [ 16 ноя 2016, 09:01 ] |
Заголовок сообщения: | Re: JAVA в отчетах (CRM) |
Одно и то же, конечно. Я про то что у меня не получилось этого сделать, может всетаки будет пример простого отчета с использованием явы? ^_^ Код: <c:forEach var="row" items="${result.rowsByIndex}"> <c:set var="id" value="${row[0]}"/> <c:set var="executers" value="${row[1]}"/> <c:set var="type" value="${row[2]}"/> <c:set var="colT" value="${row[3]}"/> <c:set var="vid" value="${row[4]}"/> <c:set var="colV" value="${row[5]}"/> <tr> <td><a href="UNDEF" onclick="openProcess( ${id} ); return false;">${id}</a></td> <td>${executers}</td> <td>${type}</td> <td>${colT}</td> <td>${vid}</td> <td>${colV}</td> </tr> Тут понятно как выводится из запроса, но как я только не подставлял чтобы этого кота вывести, у меня он не выходил, было пустое поле |
Автор: | Администратор [ 18 ноя 2016, 02:47 ] |
Заголовок сообщения: | Re: JAVA в отчетах (CRM) |
Пример добавлен. Обновление опубликовано. |
Автор: | skyb [ 07 апр 2017, 14:18 ] |
Заголовок сообщения: | Re: JAVA в отчетах (CRM) |
не могу понять как добавить второй параметр из фильтра в метод Код: <c:set var="date" value="${u:parseDate( form.param.date, 'ymd' ) }"/> <c:set var="h2" value="${u:parseDate( form.param.date, 'ymd' ) }"/> ---------------------------------------- <ui:date-time paramName="date" value="0"/> <ui:date-time paramName="h2" value="0"/> ---------------------------------------- <c:forEach var="pet" items="${data.getConnectionStatistic(date, h2)}"> И собственно сам метод Код: public java.util.List<String[]> getConnectionStatistic(Date h1, Date h2) { List<String[]> result = new ArrayList<String[]>(); StringBuilder sb = new StringBuilder(); Date date1 = h1; Date date2 = h2; System.out.println("h1 " + h1 + "\nh2 " + h2); вывод вот такой Код: h1 Thu Mar 09 00:00:00 MAGT 2017 h2 Thu Mar 09 00:00:00 MAGT 2017 При этом в отчете в фильтре я выбираю конечно разные даты, и подставляет только первую дату, которая изначально была в отчете |
Автор: | zavndw [ 07 апр 2017, 17:49 ] |
Заголовок сообщения: | Re: JAVA в отчетах (CRM) |
попробуй типо того: Код: <c:set var="date" value="${u:parseDate( form.param.date, 'ymd' ) }"/>
<c:set var="h2" value="${u:parseDate( form.param.h2, 'ymd' ) }"/> |
Автор: | skyb [ 10 апр 2017, 07:54 ] |
Заголовок сообщения: | Re: JAVA в отчетах (CRM) |
Л - логика, или я чего-то не понимаю? заработало |
Страница 1 из 1 | Часовой пояс: UTC + 5 часов [ Летнее время ] |
Powered by phpBB® Forum Software © phpBB Group http://www.phpbb.com/ |