forum.bitel.ru http://forum.bitel.ru/ |
|
Получение данных из запроса http://forum.bitel.ru/viewtopic.php?f=19&t=6618 |
Страница 1 из 1 |
Автор: | Phricker [ 29 мар 2012, 11:25 ] |
Заголовок сообщения: | Получение данных из запроса |
Собственно где то помнится видел тему, что можно в скрипте выдернуть любые данные из запроса. И не могу ее найти ![]() Или меня уже глючит и это не относится к БГ биллингу Собственно вопрос вот в чем. Вешаем скрипт поведения на событие "Изменение тарифного плана". Как получить ID тарифа который поменяли? что то по аналогии с event.getContractId(). Что нибудь типа event.getTariffPlanId() или не знаю как. |
Автор: | Cromeshnic [ 29 мар 2012, 11:39 ] |
Заголовок сообщения: | Re: Получение данных из запроса |
viewtopic.php?f=19&t=6254&p=47589&hilit=%D0%94%D1%80%D1%83%D0%B7%D1%8C#p47589 |
Автор: | Phricker [ 29 мар 2012, 11:40 ] |
Заголовок сообщения: | Re: Получение данных из запроса |
Во во точняк. Помнил что то про request. Пошел ковырять http://bgbilling.ru/v5.1/doc/ch02s02s02.html |
Автор: | Phricker [ 29 мар 2012, 12:49 ] |
Заголовок сообщения: | Re: Получение данных из запроса |
Кромешник, и еще один вопрос если можно ![]() Если вешаем скрипт на событие "Перед действием" или "После действия", как можно разделить в каком именно случае оно сработает? Т.е. у меня допустим несколько событий в конфиге прописано. И если я буду два три скрипта вешать на событие "Перед действием" то они будут срабатывать постоянно. Как можно разделить в каком случае сработает какой? (повторенье мать ученья) |
Автор: | Cromeshnic [ 29 мар 2012, 13:06 ] |
Заголовок сообщения: | Re: Получение данных из запроса |
if(event instanceof ActionBeforeEvent){ ... } и т.п. |
Автор: | Phricker [ 29 мар 2012, 13:26 ] |
Заголовок сообщения: | Re: Получение данных из запроса |
Спасибо. Решил вот так. Т.к. скрипт все равно вешается только на событие "Перед действием" и проверка на то действительно ли это событие отработало - не нужна Код: void onEvent(event, setup, con, conSlave){ if(event.getRequest().getParameter("action").equals("UpdateContractTariffPlan")){ [...] } } добавил в закладки ![]() |
Автор: | Phricker [ 29 мар 2012, 15:53 ] |
Заголовок сообщения: | Re: Получение данных из запроса |
дабы не плодить темки Родилось вот такое. Код: import bitel.billing.server.script.event.*; import bitel.billing.server.contract.bean.*; import bitel.billing.server.util.*; import bitel.billing.common.TimeUtils.*; import java.sql.*; import java.util.*; void onEvent(event, setup, con, conSlave){ if(event.getRequest().getParameter("action").equals("UpdateContractTariffPlan")){ date = TimeUtils.convertStringToDate(event.getRequest().getParameter("date1")); cid = event.getContractId(); tpid = event.getRequest().getParameter("tpid"); ctgm = new ContractTariffGroupManager( con ); int tgid = 0; //Выбираем группу тарифных планов в которую входит установленный тариф String SQL = "select tgid from tariff_group_tariff where tpid = " + tpid ; //print(SQL) ; PreparedStatement ps = con.prepareStatement( SQL ); ResultSet rs = ps.executeQuery(); while ( rs.next() ) { tgid = rs.getInt("tgid") ; } newGroup = new ContractTariffGroup(); newGroup.setContractId( cid ); newGroup.setDate1( TimeUtils.convertDateToCalendar( date )); newGroup.setTariffGroupId( tgid ); newGroup.setComment("Установлена автоматически при смене тарифного плана"); ctgm.updateContractTariffGroup(newGroup); } } Пока без особых проверок и прочего. На тестовом делаю На событие "Перед действием". Не срабатывает ctgm.updateContractTariffGroup(newGroup);. Группа тарифов не появляется на договоре. В чем может быть прикол? |
Автор: | Phricker [ 30 мар 2012, 11:35 ] |
Заголовок сообщения: | Re: Получение данных из запроса |
Так что делать SQL'ем insert? ![]() Не срабатывает и все тут. Логи девственно чистые. |
Автор: | barguzin2 [ 01 апр 2012, 21:53 ] |
Заголовок сообщения: | Re: Получение данных из запроса |
Поправки: Код: newGroup.setContractID( cid ); newGroup.setTariffGroupID( tgid ); ctgm.updateContractTariffGroup("new", newGroup); Позволь поинтересоваться для чего делать такие хитрые события ДО, когда можно туже операцию сделать ПОСЛЕ стандартного события ContractTariffUpdateEvent. Или там же до кучи будут идти проверки на другие события ? И еще на каждое изменение плана скрипт будет каждый раз плодить юзеру группу тарифов, так что добавить проверочку нет ли уже у юзера на сегодняшний день такой группы. |
Автор: | Phricker [ 02 апр 2012, 00:11 ] |
Заголовок сообщения: | Re: Получение данных из запроса |
Цитата: Код: newGroup.setContractID( cid ); newGroup.setTariffGroupID( tgid ); ctgm.updateContractTariffGroup("new", newGroup); Это для 5.1. у меня же 5.2 На 5.1 что самое смешное - все работает (через "new" в установке группы) В 5.2 скопированный рабочий скрипт с 5.1 пишет в лог Код: 04-01/22:06:37 INFO ["http-bio-/0.0.0.0-8080"-exec-9] ScriptEventListener - Caught event: ru.bitel.bgbilling.kernel.event.events.ActionBeforeEvent 04-01/22:06:37 INFO [pool-1-thread-5] ScriptInstance - Invoke method Function [id:3; title:Изменение группы тарифов] : onEvent 04-01/22:06:37 WARN ["http-bio-/0.0.0.0-8080"-exec-9] ScriptInstance - Function [id:3; title:Изменение группы тарифов]: using deprecated method [public void bitel.billing.server.contract.bean.ContractTariffGroup.setTariffGroupID(int)] 04-01/22:06:37 WARN ["http-bio-/0.0.0.0-8080"-exec-9] ScriptInstance - Function [id:3; title:Изменение группы тарифов]: using deprecated method [public void bitel.billing.server.contract.bean.ContractTariffGroup.setContractID(int)] 04-01/22:06:37 WARN ["http-bio-/0.0.0.0-8080"-exec-9] ScriptInstance - Function [id:3; title:Изменение группы тарифов]: using deprecated method [public void bitel.billing.server.contract.bean.ContractTariffGroupManager.updateContractTariffGroup(java.lang.String,bitel.billing.server.contract.bean.ContractTariffGroup) throws java.sql.SQLException] 04-01/22:06:37 INFO ["http-bio-/0.0.0.0-8080"-exec-9] ScriptEventListener - Process time => 29 и группу тарифов не ставит barguzin2 писал(а): Позволь поинтересоваться для чего делать такие хитрые события ДО, когда можно туже операцию сделать ПОСЛЕ стандартного события ContractTariffUpdateEvent. Или там же до кучи будут идти проверки на другие события ? В стандартном событии нет получения кода тарифного плана который назначили. Придется извращаться получением списка тарифов на определенную дату (дату заведения тарифа). Тоже в принципе возможно, но смысл, если здесь проще, т.к. передается ID тарифа - по нему сразу узнаем ID группы тарифов в которую входит тариф. barguzin2 писал(а): И еще на каждое изменение плана скрипт будет каждый раз плодить юзеру группу тарифов, так что добавить проверочку нет ли уже у юзера на сегодняшний день такой группы. Это будет работать только если на договоре не будет тарифных групп выставленных. Плюс только для физиков. Плюс если ID тарифа не входит ни в одну тарифную группу - назначение группы не будет. Ну и т.д. и т.п. Это зачатки скрипта с тестового сервера. |
Автор: | Phricker [ 02 апр 2012, 02:31 ] |
Заголовок сообщения: | Re: Получение данных из запроса |
Выхлоп 5.1 Код: [root@bg51 log]# cat ./server.script.log 04-02/00:21:22 INFO [Thread-6] script - Starting event processor... 04-02/00:21:22 INFO [main] ScriptEventListener - Starting ScriptEventListener... 04-02/00:21:23 INFO [main] EventProcessor - Add listener ru.bitel.bgbilling.kernel.script.server.ScriptEventListener$1@1c9e67a to BG.Event.ru.bitel.bgbilling.kernel.script.common.ScriptFunctionModifiedEvent 04-02/00:22:30 INFO [http-8080-1] script - Process event cid:1; event:Event bitel.billing.server.script.bean.event.ActionBeforeEvent cid: 1; module: 0; type: 30; userId: 1 04-02/00:22:30 INFO [http-8080-1] script - Process event cid:1; event:Event bitel.billing.server.script.bean.event.ActionBeforeEvent cid: 1; module: 0; type: 30; userId: 1 04-02/00:22:30 INFO [http-8080-1] script - Process time => 165 04-02/00:22:30 INFO [pool-1-thread-1] ScriptInstance - Eval script Function [id:1; title:Перед действием] 04-02/00:22:30 INFO [pool-1-thread-1] ScriptInstance - Invoke method Function [id:1; title:Перед действием] : onEvent 04-02/00:22:30 INFO [http-8080-1] script - Add event to queue Event bitel.billing.server.script.bean.event.ContractTariffUpdateEvent cid: 1; module: 0; type: 32; userId: 1 04-02/00:22:31 INFO [Thread-6] script - Found event id=6 04-02/00:22:31 INFO [Thread-6] script - Process event cid:1; event:Event bitel.billing.server.script.bean.event.ContractTariffUpdateEvent cid: 1; module: 0; type: 32; userId: 1 04-02/00:22:31 INFO [Thread-6] script - Process event cid:1; event:Event bitel.billing.server.script.bean.event.ContractTariffUpdateEvent cid: 1; module: 0; type: 32; userId: 1 [root@bg51 log]# Выхлоп 5.2 Код: [root@bg log]# cat ./server.script.log 04-02/00:24:47 INFO [main] ScriptEventListener - Starting ScriptEventListener... 04-02/00:24:47 INFO [main] ScriptEventListener - Relinking script functions. 04-02/00:24:47 INFO [main] ScriptEventListener - Skip event type bitel.billing.server.script.bean.event.ContractWebLoginEvent. Class not found for this application. 04-02/00:24:47 INFO [main] ScriptEventListener - Linked Function [id:3; title:Изменение группы тарифов] 04-02/00:24:47 INFO [main] ScriptEventListener - Skip event type bitel.billing.server.script.bean.event.ContractWebLoginEvent. Class not found for this application. 04-02/00:24:48 INFO [main] ScriptEventListener - Starting DynamicScriptEventListener... 04-02/00:24:48 INFO [main] ScriptEventListener - Skip event type bitel.billing.server.script.bean.event.ContractWebLoginEvent. Class not found for this application. 04-02/00:25:01 INFO ["http-bio-/0.0.0.0-8080"-exec-5] ScriptEventListener - Caught event: ru.bitel.bgbilling.kernel.event.events.ActionBeforeEvent 04-02/00:25:01 INFO [pool-1-thread-1] ScriptInstance - Invoke method Function [id:3; title:Изменение группы тарифов] : onEvent 04-02/00:25:01 INFO ["http-bio-/0.0.0.0-8080"-exec-5] ScriptEventListener - Process time => 39 [root@bg log]# Код: [root@bg opt]# diff ./51 ./52
28c28 < newGroup.setContractID( cid ); --- > newGroup.setContractId( cid ); 31c31 < newGroup.setTariffGroupID( tgid ); --- > newGroup.setTariffGroupId( tgid ); 34c34 < ctgm.updateContractTariffGroup( "new", newGroup ); --- > ctgm.updateContractTariffGroup( newGroup ); [root@bg opt]# |
Автор: | barguzin2 [ 02 апр 2012, 08:48 ] |
Заголовок сообщения: | Re: Получение данных из запроса |
Цитата: Во во точняк. Помнил что то про request. Пошел ковырять http://bgbilling.ru/v5.1/doc/ch02s02s02.html Ну и сделал вывод что про 5.1 речь. А там как раз есть метод в событии getContractTariff(). В 5.2 его похерили чтоли ? До 5.2 еще не добрался, надо ставить уже тестить думаю. Глянул доку по API - вообще про ru.bitel.bgbilling.kernel.event не нашел. Видимо еще тоже в разработке. Но, ИМХО, отсутствие в событии информации о том, про что это событие - несколько неправильно. |
Автор: | Phricker [ 02 апр 2012, 11:11 ] |
Заголовок сообщения: | Re: Получение данных из запроса |
Ааааа... Просто в доке по 5.2 нет описаний универсальных событий до и после экшена ![]() В 5.2 тоже есть такой же метод Код: getContractTariff(int cid, java.util.Calendar date) Возвращает первый тариф из списка тарифов для договора на определенную дату Но, что если выставят сначала тариф с доп.услугами который нигде не фигурирует. И постоянно будет возвращаться он ![]() |
Автор: | barguzin2 [ 02 апр 2012, 13:09 ] |
Заголовок сообщения: | Re: Получение данных из запроса |
Не, я про метод класса ContractTariffUpdateEvent. В 5.1 в обработчие события изменения ТП можно вызвать event.getContractTariff() без параметров, т.е. как раз получение ТП, над которым проводится изменение. В 5.2 разве нет такого ? |
Автор: | Phricker [ 02 апр 2012, 13:29 ] |
Заголовок сообщения: | Re: Получение данных из запроса |
ять Работает! Спасибо ![]() Код: import bitel.billing.server.script.event.*; import bitel.billing.server.contract.bean.*; import bitel.billing.server.util.*; import bitel.billing.common.TimeUtils.*; import java.sql.*; import java.util.*; void onEvent(event, setup, con, conSlave){ date = event.getTime(); print("date" + date); cid = event.getContractId(); print("cid" + cid); tpid = event.getContractTariff().getTariffPlanId(); print("tpid" + tpid); ctgm = new ContractTariffGroupManager( con ); int tgid = 0; //Выбираем группу тарифных планов в которую входит установленный тариф String SQL = "select tgid from tariff_group_tariff where tpid = " + tpid ; PreparedStatement ps = con.prepareStatement( SQL ); ResultSet rs = ps.executeQuery(); while ( rs.next() ) { tgid = rs.getInt("tgid") ; } newGroup = new ContractTariffGroup(); newGroup.setContractId( cid ); newGroup.setDate1( date ); newGroup.setTariffGroupId( tgid ); newGroup.setComment("Установлена автоматически при смене тарифного плана"); ctgm.updateContractTariffGroup( newGroup ); } В 5.2 в доке по API нет метода getContractTariff(), но он работает рукалицо ![]() |
Автор: | Phricker [ 02 апр 2012, 14:42 ] |
Заголовок сообщения: | Re: Получение данных из запроса |
Версия 0.2 Код: import bitel.billing.server.script.event.*; import bitel.billing.server.contract.bean.*; import bitel.billing.server.util.*; import bitel.billing.common.TimeUtils.*; import java.sql.*; import java.util.*; void onEvent(event, setup, con, conSlave){ cm = new ContractManager( con ); ctgm = new ContractTariffGroupManager( con ); cid = event.getContractId(); if(cm.getContractById(cid).getFc() == 0 && ctgm.getContractTariffGroupList(cid).size() == 0 ){ date = event.getTime(); tpid = event.getContractTariff().getTariffPlanId(); int tgid = 0; //Выбираем группу тарифных планов в которую входит установленный тариф String SQL = "select tgid from tariff_group_tariff where tpid = " + tpid ; PreparedStatement ps = con.prepareStatement( SQL ); ResultSet rs = ps.executeQuery(); while ( rs.next() ){ tgid = rs.getInt("tgid") ; } if(tgid != 0){ newGroup = new ContractTariffGroup(); newGroup.setContractId( cid ); newGroup.setDate1( date ); newGroup.setTariffGroupId( tgid ); newGroup.setComment("Установлена автоматически при смене тарифного плана"); ctgm.updateContractTariffGroup( newGroup ); } } } Есть у кого нибудь замечания? Подскажите что не так, и с чем я могу столкнуться ![]() |
Автор: | barguzin2 [ 04 апр 2012, 09:16 ] |
Заголовок сообщения: | Re: Получение данных из запроса |
Цитата: Код: import bitel.billing.server.script.event.*; А это откуда взялось ? Цитата: 3. Скрипты поведения 3.. Общие сведения Скрипты поведения предоставляют возможность пользователю произвольным образом обрабатывать события договоров биллинга. ... Все классы-события расширяют базовый класс ru.bitel.bgbilling.kernel.event.Event. Только вот в документации про этот базовый класс и его потомков не написано (плохо смотел может ?!) |
Страница 1 из 1 | Часовой пояс: UTC + 5 часов [ Летнее время ] |
Powered by phpBB® Forum Software © phpBB Group http://www.phpbb.com/ |