forum.bitel.ru http://forum.bitel.ru/ |
|
Табличный отчет в динкоде http://forum.bitel.ru/viewtopic.php?f=12&t=9355 |
Страница 1 из 1 |
Автор: | skyb [ 19 июн 2014, 10:29 ] |
Заголовок сообщения: | Табличный отчет в динкоде |
пытаюсь нарисовать, не выходит. если пытаюсь сделать чтоб столбцы брались с xml файла Код: implements bitel.billing.server.reports.BGCSVReport.CSVFillerData пишет Вложение: Выделение_136.png [ 4.2 КБ | Просмотров: 20371 ] если ставить Код: bitel.billing.server.reports.BGCSVReport.CSVFillerDataFields то все компилится. но я вот незнаю, верно ли я добавил столбцы? Код: String colid = "title"; String colname = "title"; fields.put( colid, colname ); кажется неверно файл cat kernel_allParam.rep.xml Код: <report title="Заполненые параметры договоров" dyn_class="ru.bitel.bgbilling.modules.reports.AllParam" type="java"> <checkedList name="object" title="Фильтр по объектам"> <item id="9" title="ул. , д.3"/> <item id="7" title="ул. , д. 98"/> <item id="16" title="ул. , д. 79Б"/> <item id="8" title="ул. , д.8"/> <item id="14" title="ул. , 19А"/> <item id="19" title="ул. , д.27/26"/> <item id="20" title="ул. , д.7/10"/> </checkedList> <fields> <item id="title" title="Договор"/> <item id="param" title="Параметры"/> </fields> </report> код класса Код: package ru.bitel.bgbilling.modules.reports; import bitel.billing.server.admin.reports.BGReportFilter; import bitel.billing.server.reports.BGCSVReport.ReportResult; import java.sql.Connection; import java.util.ArrayList; import java.util.HashMap; import java.util.List; import java.util.Map; import java.sql.Connection; import java.sql.PreparedStatement; import java.sql.ResultSet; import ru.bitel.common.sql.ConnectionSet; public class AllParam implements bitel.billing.server.reports.BGCSVReport.CSVFillerDataFields { @Override public void fillReport( Connection con, BGReportFilter filter, ReportResult result, Map<String, String> fields ) throws Exception { int object = filter.getIntParam( "object" ); List<Map<String, String>> data = new ArrayList<Map<String, String>>( 1000 ); String query = " SELECT c.id, c.title FROM contract AS c" + " LEFT JOIN contract_parameter_type_7 AS cpt ON cpt.cid = c.id " + " WHERE cpt.val = " + object; PreparedStatement ps = con.prepareStatement(query); ResultSet rs = ps.executeQuery(); while (rs.next()) { Map map = new HashMap(); int cid = rs.getInt(1); String title = rs.getString(2); map.put("title", title); //print ("Договора " + title); String allParam = " SELECT `cntrct_prmtrs_pref`.`title` " + " , `cntrct_prmtr_tp_1`.`val` AS `data` " + " , `cntrct_prmtrs_pref`.`sort` " + " FROM `contract_parameters_pref` AS `cntrct_prmtrs_pref` " + " LEFT JOIN `contract_parameter_type_1` AS `cntrct_prmtr_tp_1` " + " ON `cntrct_prmtrs_pref`.`id` = `cntrct_prmtr_tp_1`.`pid` " + " AND `cntrct_prmtr_tp_1`.`cid` = " + cid + " WHERE `cntrct_prmtr_tp_1`.`val` IS NOT NULL " + " UNION " + " SELECT `cntrct_prmtrs_pref`.`title` " + " , CONCAT(`addrss_ct`.`title`, ', ', `addrss_strt`.`title`, ', ' , `addrss_hs`.`house`, ', ', `cntrct_prmtr_tp_2`.`flat`) " + " AS `data` " + " , `cntrct_prmtrs_pref`.`sort` " + " FROM `contract_parameters_pref` AS `cntrct_prmtrs_pref` " + " LEFT JOIN `contract_parameter_type_2` AS `cntrct_prmtr_tp_2` " + " ON `cntrct_prmtrs_pref`.`id` = `cntrct_prmtr_tp_2`.`pid` " + " AND `cntrct_prmtr_tp_2`.`cid` = "+ cid + " LEFT JOIN `address_house` AS `addrss_hs` " + " ON `cntrct_prmtr_tp_2`.`hid` = `addrss_hs`.`id` " + " LEFT JOIN `address_street` AS `addrss_strt` " + " ON `addrss_hs`.`streetid` = `addrss_strt`.`id` " + " LEFT JOIN `address_city` AS `addrss_ct` " + " ON `addrss_strt`.`cityid` = `addrss_ct`.`id` " + " WHERE `cntrct_prmtr_tp_2`.`flat` IS NOT NULL " + " UNION " + " SELECT `cntrct_prmtrs_pref`.`title` " + " , `cntrct_prmtr_tp_3`.`email` AS `data` " + " , `cntrct_prmtrs_pref`.`sort` " + " FROM `contract_parameters_pref` AS `cntrct_prmtrs_pref` " + " LEFT JOIN `contract_parameter_type_3` AS `cntrct_prmtr_tp_3` " + " ON `cntrct_prmtrs_pref`.`id` = `cntrct_prmtr_tp_3`.`pid` " + " AND `cntrct_prmtr_tp_3`.`cid` = " + cid + " WHERE `cntrct_prmtr_tp_3`.`email` IS NOT NULL " + " UNION " + " SELECT `cntrct_prmtrs_pref`.`title` " + " , `cntrct_prmtr_tp_6`.`val` AS `data` " + " , `cntrct_prmtrs_pref`.`sort` " + " FROM `contract_parameters_pref` AS `cntrct_prmtrs_pref` " + " LEFT JOIN `contract_parameter_type_6` AS `cntrct_prmtr_tp_6` " + " ON `cntrct_prmtrs_pref`.`id` = `cntrct_prmtr_tp_6`.`pid` " + " AND `cntrct_prmtr_tp_6`.`cid` = " + cid + " WHERE `cntrct_prmtr_tp_6`.`val` IS NOT NULL " + " UNION " + " SELECT `cntrct_prmtrs_pref`.`title` " + " , `cntrct_prmtr_tp_7_vls`.`title` AS `data` " + " , `cntrct_prmtrs_pref`.`sort` " + " FROM `contract_parameters_pref` AS `cntrct_prmtrs_pref` " + " LEFT JOIN `contract_parameter_type_7` AS `cntrct_prmtr_tp_7` " + " ON `cntrct_prmtrs_pref`.`id` = `cntrct_prmtr_tp_7`.`pid` " + " AND `cntrct_prmtr_tp_7`.`cid` = " + cid + " LEFT JOIN `contract_parameter_type_7_values` AS `cntrct_prmtr_tp_7_vls` " + " ON `cntrct_prmtr_tp_7`.`val` = `cntrct_prmtr_tp_7_vls`.`id` " + " WHERE `cntrct_prmtr_tp_7_vls`.`title` IS NOT NULL " + " UNION " + " SELECT `cntrct_prmtrs_pref`.`title` " + " , `cntrct_prmtr_tp_phn_itm`.`phone` AS `data` " + " , `cntrct_prmtrs_pref`.`sort` " + " FROM `contract_parameters_pref` AS `cntrct_prmtrs_pref` " + " LEFT JOIN `contract_parameter_type_phone_item` AS `cntrct_prmtr_tp_phn_itm` " + " ON `cntrct_prmtrs_pref`.`id` = `cntrct_prmtr_tp_phn_itm`.`pid` " + " AND `cntrct_prmtr_tp_phn_itm`.`cid` = " + cid + " WHERE `cntrct_prmtr_tp_phn_itm`.`phone` IS NOT NULL " + " ORDER BY `sort` "; PreparedStatement paramPs = con.prepareStatement(allParam); ResultSet paramRs = paramPs.executeQuery(); while (paramRs.next()) { String paramName = paramRs.getString(1); String DATA = paramRs.getString(2); //print ("paramName " + paramName + " data " + DATA); } data.add( map ); } result.setData( data ); String colid = "title"; String colname = title; fields.put( colid, colname ); } } и если формировать отчет, когда класс нормально компилится, то вылетает ошибка Код: java.lang.RuntimeException: java.lang.ClassCastException: ru.bitel.bgbilling.modules.reports.AllParam cannot be cast to bitel.billing.server.reports.BGCSVReport$CSVFillerData at bitel.billing.server.reports.BGCSVReport.getResultDyncode(BGCSVReport.java:227)
at bitel.billing.server.reports.BGCSVReport.fillReportToStream(BGCSVReport.java:63) at bitel.billing.server.reports.action.ActionReport.doAction(ActionReport.java:57) at bitel.billing.server.Executer.doModule(Unknown Source) at bitel.billing.server.Executer$1.run(Unknown Source) at java.security.AccessController.doPrivileged(Native Method) at javax.security.auth.Subject.doAs(Subject.java:415) at bitel.billing.server.Executer.doPost(Unknown Source) at javax.servlet.http.HttpServlet.service(HttpServlet.java:647) at javax.servlet.http.HttpServlet.service(HttpServlet.java:728) at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:305) at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:210) at ru.bitel.common.server.filters.SetCharacterEncodingFilter.doFilter(SetCharacterEncodingFilter.java:50) at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:243) at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:210) at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:222) at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:123) at org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:472) at org.apache.catalina.valves.AccessLogValve.invoke(AccessLogValve.java:936) at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:171) at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:99) at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:118) at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:407) at org.apache.coyote.http11.AbstractHttp11Processor.process(AbstractHttp11Processor.java:1004) at org.apache.coyote.AbstractProtocol$AbstractConnectionHandler.process(AbstractProtocol.java:589) at org.apache.tomcat.util.net.JIoEndpoint$SocketProcessor.run(JIoEndpoint.java:312) at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1145) at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:615) at java.lang.Thread.run(Thread.java:744) Caused by: java.lang.ClassCastException: ru.bitel.bgbilling.modules.reports.AllParam cannot be cast to bitel.billing.server.reports.BGCSVReport$CSVFillerData at bitel.billing.server.reports.BGCSVReport.getResultDyncode(BGCSVReport.java:219) ... 28 more |
Автор: | dimOn [ 19 июн 2014, 14:29 ] |
Заголовок сообщения: | Re: Табличный отчет в динкоде |
Цитата: файл cat kernel_allParam.rep.xml начнём с того что: где в этом файле любое указание на этот дин.класс ru.bitel.bgbilling.modules.reports.AllParam? это вот не вызывает никаких мыслей и прочих подозрений, да? <report title="Заполненые параметры договоров" type="java"> <checkedList name="object" title="Фильтр по объектам"> <item id="9" title="ул. , д.3"/> <item id="7" title="ул. , д. 98"/> <item id="16" title="ул. , д. 79Б"/> <item id="8" title="ул. , д.8"/> <item id="14" title="ул. , 19А"/> <item id="19" title="ул. , д.27/26"/> <item id="20" title="ул. , д.7/10"/> </checkedList> <fields> <item id="title" title="Договор"/> <item id="param" title="Параметры"/> </fields> и почему тег report не закрыт? |
Автор: | skyb [ 19 июн 2014, 14:37 ] |
Заголовок сообщения: | Re: Табличный отчет в динкоде |
dimOn писал(а): Цитата: файл cat kernel_allParam.rep.xml начнём с того что: где в этом файле любое указание на этот дин.класс ru.bitel.bgbilling.modules.reports.AllParam? это вот не вызывает никаких мыслей и прочих подозрений, да? <report title="Заполненые параметры договоров" type="java"> <checkedList name="object" title="Фильтр по объектам"> <item id="9" title="ул. , д.3"/> <item id="7" title="ул. , д. 98"/> <item id="16" title="ул. , д. 79Б"/> <item id="8" title="ул. , д.8"/> <item id="14" title="ул. , 19А"/> <item id="19" title="ул. , д.27/26"/> <item id="20" title="ул. , д.7/10"/> </checkedList> <fields> <item id="title" title="Договор"/> <item id="param" title="Параметры"/> </fields> и почему тег report не закрыт? Скопировал коряво, все это было конечно же, и тег закрыт и указание на класс, когда пробовал, потом просто переделывал на старый отчет, чтоб временно работал, а скопировал вот так |
Автор: | dimOn [ 19 июн 2014, 14:39 ] |
Заголовок сообщения: | Re: Табличный отчет в динкоде |
ну а смысл тогда в информации выше, если она вообще неактуальна?) |
Автор: | dimOn [ 19 июн 2014, 14:40 ] |
Заголовок сообщения: | Re: Табличный отчет в динкоде |
в вики же прекрасные примеры выложил какой-то хороший человек http://wiki.bitel.ru/index.php/%D0%A2%D ... 0%B4%D0%B5 http://wiki.bitel.ru/index.php/%D0%A2%D ... 0%BC%D0%B8 можно использовать как шаблоны, например. |
Автор: | skyb [ 19 июн 2014, 14:57 ] |
Заголовок сообщения: | Re: Табличный отчет в динкоде |
dimOn писал(а): в вики же прекрасные примеры выложил какой-то хороший человек http://wiki.bitel.ru/index.php/%D0%A2%D ... 0%B4%D0%B5 http://wiki.bitel.ru/index.php/%D0%A2%D ... 0%BC%D0%B8 можно использовать как шаблоны, например. так вот я по ним же и делал, вот такая ошибка вышла. поправил и актуализировал инфу |
Автор: | dimOn [ 19 июн 2014, 16:42 ] |
Заголовок сообщения: | Re: Табличный отчет в динкоде |
если делать implements bitel.billing.server.reports.BGCSVReport.CSVFillerData то, очевидно, надо последний параметр убрать из public void fillReport( Connection con, BGReportFilter filter, ReportResult result, Map<String, String> fields ) это как бы по java так надо сделать |
Автор: | dimOn [ 19 июн 2014, 16:45 ] |
Заголовок сообщения: | Re: Табличный отчет в динкоде |
а если прописаны поля в xml то наследовать надо обязательно от того, который без полей интерфейс: CSVFillerData а это как бы по логике поведения системы так надо сделать |
Автор: | dimOn [ 19 июн 2014, 16:48 ] |
Заголовок сообщения: | Re: Табличный отчет в динкоде |
либо поля в xml либо интерфейс нужный использовать. ну и сигнатуры методов соответствующие интерфейсу брать, очевидно. всё же в примера понятно и там даже отдельно это упомянуто прямым текстом Цитата: Для этого нужно не прописывать в *.rep.xml раздел "fields" как в обычном случае, а в классе отчёта добавить параметр "Map fields" в метод fillReport. Обратите внимание, эти два пункта должны всегда следовать друг из друга.
|
Автор: | skyb [ 19 июн 2014, 16:52 ] |
Заголовок сообщения: | Re: Табличный отчет в динкоде |
Завелося!!!! а что не так с формирование столбцов в динкоде? |
Автор: | dimOn [ 19 июн 2014, 17:08 ] |
Заголовок сообщения: | Re: Табличный отчет в динкоде |
а что с ним не так? всё должно работать |
Автор: | skyb [ 19 июн 2014, 17:14 ] |
Заголовок сообщения: | Re: Табличный отчет в динкоде |
dimOn писал(а): а что с ним не так? всё должно работать ну вот то что я пробовал, оно не так наверное обозначено, там же переменная должна быть где то? |
Автор: | dimOn [ 20 июн 2014, 11:09 ] |
Заголовок сообщения: | Re: Табличный отчет в динкоде |
Цитата: ну вот то что я пробовал, оно не так наверное обозначено, там же переменная должна быть где то? Что "пробовал"? Что не так обозначено? Какая ещё переменная? всё же есть в примере, добавление столбца: fields.put( colid, colname ); что-то не работает или что? |
Автор: | skyb [ 20 июн 2014, 12:37 ] |
Заголовок сообщения: | Re: Табличный отчет в динкоде |
dimOn писал(а): Цитата: ну вот то что я пробовал, оно не так наверное обозначено, там же переменная должна быть где то? Что "пробовал"? Что не так обозначено? Какая ещё переменная? всё же есть в примере, добавление столбца: fields.put( colid, colname ); что-то не работает или что? я не понял что тут переменные значат, это же как и в файле xml определение? |
Автор: | dimOn [ 20 июн 2014, 14:32 ] |
Заголовок сообщения: | Re: Табличный отчет в динкоде |
какие переменные то? colid, colname? ну да, как в xml , думал, это интуитивно понятно должно быть |
Автор: | dimOn [ 20 июн 2014, 14:33 ] |
Заголовок сообщения: | Re: Табличный отчет в динкоде |
да и даже если это всего лишь догадкой осталось - это же проверить можно за 1сек |
Автор: | skyb [ 20 июн 2014, 14:45 ] |
Заголовок сообщения: | Re: Табличный отчет в динкоде |
dimOn писал(а): да и даже если это всего лишь догадкой осталось - это же проверить можно за 1сек просто у меня в коде чушь получилась, и я переделал покачто без динкода, там все норм. а это уже для будущего, чтоб писать в динкоде. спасибо dimOn за разбор полетов |
Автор: | dimOn [ 20 июн 2014, 14:48 ] |
Заголовок сообщения: | Re: Табличный отчет в динкоде |
ну без динкода там и нельзя так написать в общем случае |
Автор: | skyb [ 14 май 2015, 12:19 ] |
Заголовок сообщения: | Re: Табличный отчет в динкоде |
я че подумал, в отчетах можно ж сделать так же как и в скриптах, тоесть возможность создавать болванку отчета в самом модуле отчетов и так же выбирать какой класс для какого отчета, там же и название писать, ну и туда можно вынести конфиг того что сейчас в xml на сервере, м? |
Автор: | dimOn [ 14 май 2015, 12:27 ] |
Заголовок сообщения: | Re: Табличный отчет в динкоде |
Что такое болванка отчёта? xml с описанием фильтров? А смысл выбирать какой класс куда, если они друг другу обязательно должны соответствовать и случайным образом не получится совместить фильтры+класс для обработки |
Автор: | skyb [ 14 май 2015, 12:41 ] |
Заголовок сообщения: | Re: Табличный отчет в динкоде |
dimOn писал(а): Что такое болванка отчёта? xml с описанием фильтров? неее ))) это как при создании класса из функций скриптов поведения например, или из глобальных скриптов. а с фильтрами наверное тоже что то придумать можно, правда в голову не приходит ничего. dimOn писал(а): А смысл выбирать какой класс куда, если они друг другу обязательно должны соответствовать и случайным образом не получится совместить фильтры+класс для обработки тут я имел ввиду наверное не сопостовление как таковое, а просто вынести то что в xml лежит в файле на сервере в конфиг создаваемого класса, чтобы не лезть на сервер, а все в клиенте делать |
Автор: | dimOn [ 14 май 2015, 12:57 ] |
Заголовок сообщения: | Re: Табличный отчет в динкоде |
Идея примерно понятна, конечно, но там кой-чего переделать нужно. Там есть уже кой-какие мысли на этот счёт, так что добавил себе в TODO |
Автор: | skyb [ 14 май 2015, 13:22 ] |
Заголовок сообщения: | Re: Табличный отчет в динкоде |
dimOn писал(а): Идея примерно понятна, конечно, но там кой-чего переделать нужно. Там есть уже кой-какие мысли на этот счёт, так что добавил себе в TODO димооон, напиши в ближайшее время пазязя !!! ))) я на 6.2 скоро обновляться буду, хотелось бы иметь функционал ))))) |
Автор: | skyb [ 15 май 2015, 06:47 ] |
Заголовок сообщения: | Re: Табличный отчет в динкоде |
стоит ждать в ближайшее время, или забыть до хороших времен? |
Автор: | skyb [ 15 май 2015, 13:11 ] |
Заголовок сообщения: | Re: Табличный отчет в динкоде |
просто мне обновляться или подождать стоит? функционал хоцца, вот расцениваю необходимость оттягивания обновления |
Автор: | dimOn [ 15 май 2015, 14:49 ] |
Заголовок сообщения: | Re: Табличный отчет в динкоде |
в ближайшем времени наверно не будет |
Автор: | skyb [ 15 май 2015, 20:39 ] |
Заголовок сообщения: | Re: Табличный отчет в динкоде |
эх(((( понял |
Страница 1 из 1 | Часовой пояс: UTC + 5 часов [ Летнее время ] |
Powered by phpBB® Forum Software © phpBB Group http://www.phpbb.com/ |