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/