forum.bitel.ru http://forum.bitel.ru/ |
|
ContractStatusChangingEvent http://forum.bitel.ru/viewtopic.php?f=22&t=8072 |
Страница 1 из 1 |
Автор: | borisk [ 24 май 2013, 16:19 ] |
Заголовок сообщения: | ContractStatusChangingEvent |
Добрый день! Повесил свой обработчик на bitel.billing.server.script.bean.event.ContractStatusChangingEvent. Вот мой код: Код: @Override public void onEvent( Event event, Setup setup, ConnectionSet connectionSet ) throws Exception { ContractStatusChangingEvent evt = (ContractStatusChangingEvent)event; ContractStatus oldStatus = evt.getOriginalStatus(); ContractStatus newStatus = evt.getStatus(); print("We are onStatusChange"); print("CID: " + evt.getContractId()); print("Old Status: " + oldStatus.getStatus()); print("New Status: " + newStatus.getStatus()); print("Old ID: " + oldStatus.getId()); print("New ID: " + newStatus.getId()); На выходе - во всех строчках (кроме CID) 0. Где косяк? CID правильный возвращается. Цитата: Клиент: вер. 5.2 сборка 1173 от 23.05.2013 18:42:55
os: Windows XP; java: Java HotSpot(TM) Client VM, v.1.6.0_37 Сервер: вер. 5.2 сборка 1502 от 23.05.2013 18:43:03 os: Linux; java: Java HotSpot(TM) 64-Bit Server VM, v.1.6.0_43 card вер. 5.2 сборка 201 от 25.03.2013 14:32:21 enaza вер. 5.2 сборка 47 от 26.12.2012 17:59:24 gorod вер. 5.2 сборка 155 от 25.03.2013 14:32:28 inet вер. 5.2 сборка 1177 от 23.05.2013 20:27:07 mps вер. 5.2 сборка 169 от 24.04.2013 11:02:52 npay вер. 5.2 сборка 202 от 22.05.2013 16:59:25 rentsoft вер. 5.2 сборка 45 от 26.12.2012 17:59:45 |
Автор: | borisk [ 27 май 2013, 17:11 ] |
Заголовок сообщения: | Re: ContractStatusChangingEvent |
up |
Автор: | borisk [ 28 май 2013, 21:40 ] |
Заголовок сообщения: | Re: ContractStatusChangingEvent |
Помогитеееееееееееее! ![]() |
Автор: | dimOn [ 29 май 2013, 13:55 ] |
Заголовок сообщения: | Re: ContractStatusChangingEvent |
а что при этом делаете то? и самое главное: вы что хотите там увидеть? потому что вроде всё верно, т.к. id статусов будет разумеется 0 потому что записи в БД ещё нету, это же синхронное событие, которое как раз и позволяет изменить статус перед записью. плюс, вы, походу, как-то не так понимаете что это событие из себя представляет и что такое oldStatus и newStatus это не статусы "до" и "после". это один и тот же статус, только если произошло урезание статуса (например неперетираемый какой-то попался итд), то originalStatus будет содержать всё равно тот который пытались ставить, а status - уже порезаный, который сейчас в БД будет пытаться писаться. |
Автор: | dimOn [ 29 май 2013, 13:57 ] |
Заголовок сообщения: | Re: ContractStatusChangingEvent |
а строки print("Old Status: " + oldStatus.getStatus()); print("New Status: " + newStatus.getStatus()); выводят 0 потому что походу вы ставите статус просто нулевой (активен), вот и всё. |
Автор: | dimOn [ 29 май 2013, 13:58 ] |
Заголовок сообщения: | Re: ContractStatusChangingEvent |
просто обратите внимание, что ContractStatus это сущность, которая представляет собой запись в истории статусов, а не "статус договора", и всё встанет на свои места. |
Автор: | borisk [ 29 май 2013, 15:41 ] |
Заголовок сообщения: | Re: ContractStatusChangingEvent |
Слишком туманно для меня выразились, я ведь не настоящий программер ![]() Из того что я вижу: Цитата: ContractStatus getOriginalStatus() Возвращает оригинальный статус (исходный). ContractStatus getStatus() Возвращает устанавливаемый статус договора. То есть (на мой взгляд) возвращается не список, а конкретная позиция. Далее я в конкретной позиции делаю: Цитата: int getStatus() потому что, опять таки, не вижу никаких других методов. И нет какого-нибудь ContractStatusHistoryManager. Подскажите тогда плиз в чем я ошибаюсь. |
Автор: | dimOn [ 29 май 2013, 16:12 ] |
Заголовок сообщения: | Re: ContractStatusChangingEvent |
Я просто не знаю что вы хотите сделать, но если вы пытаетесь ставить статус с кодом 0, то всё работает ровно так, как положено. Соответственно, ответить на вопрос не могу, т.к. не понял пока в чём он заключается. На единственный вопрос Цитата: Где косяк? я ответил: косяка по всей видимости нету.Именно, возвращается конкретная позиция, только что сейчас добавляемая. getOriginalStatus отдаст то, что вы пытаетесь в клиенте установить, а getStatus то что реально сейчас будет писаться в БД (во многих случаях оно будет одно и то же). |
Автор: | borisk [ 29 май 2013, 16:49 ] |
Заголовок сообщения: | Re: ContractStatusChangingEvent |
А. Извиняюсь. Задача - отследить изменение статуса с "В подключении" на "Активен" и добавить тарифную опцию. Т. е. я вообще не то событие смотрю. Получается мне ChangedStatus событие надо? |
Автор: | dimOn [ 29 май 2013, 16:57 ] |
Заголовок сообщения: | Re: ContractStatusChangingEvent |
тогда это не совсем то. сюда никак не придёт статус договора который сейчас уже есть. ну короче так. в этом событии можно сделать так: 1. читать текущий статус договора из БД, cid у вас есть. это будет "статус старый" 2. брать статус из getStatus, это будет "статус который сейчас запишется" и сравнивать. но если ставится например завтрашним днём или ещё каким. что делать? кстати , может, вам тут больше подойдут асинхронные события: ContractStatusChangedEvent ContractStatusChangedTopicEvent они вызываются либо сиюминутно если надо сейчас менять статус, либо потом из таска. ContractStatusSetter. но там есть проблема с получением старого статуса, да) |
Автор: | borisk [ 29 май 2013, 17:01 ] |
Заголовок сообщения: | Re: ContractStatusChangingEvent |
А ведь есть еще ContractStatusModifiedEvent, и там вроде как раз те функции что нужны, но не могу найти как он по русски называется в "функциях скриптов поведения" |
Автор: | Amir [ 31 май 2013, 02:52 ] |
Заголовок сообщения: | Re: ContractStatusChangingEvent |
При установке статуса новый статус может перетереть как один, так и несколько старых статусов. И текущий, бывший до установки нового статуса , к сожалению, сейчас в событие не передается. Во время ContractStatusChangingEvent еще ничего не изменилось, поэтому текущий статус можно получить new ContractManager( con ).getContractById( contractId ).getStatus(); или new ContractStatusManager( con ).getStatus( contractId, newStatusDateFrom ); Во время ContractStatusChangedEvent изменения уже в базе: new ContractStatusManager( con ).getStatus( contractId, dayBeforeNewStatusDateFrom ); или new ContractStatusManager( con ).getStatusList( contractId ); |
Автор: | borisk [ 31 май 2013, 08:20 ] |
Заголовок сообщения: | Re: ContractStatusChangingEvent |
Спасибо! А зачем тогда ContractStatusModifiedEvent? Его ни как нельзя использовать? |
Страница 1 из 1 | Часовой пояс: UTC + 5 часов [ Летнее время ] |
Powered by phpBB® Forum Software © phpBB Group http://www.phpbb.com/ |