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/