forum.bitel.ru
http://forum.bitel.ru/

События при работе с объектами
http://forum.bitel.ru/viewtopic.php?f=19&t=11506
Страница 1 из 1

Автор:  Jimson [ 07 апр 2016, 20:47 ]
Заголовок сообщения:  События при работе с объектами

Событий в списке 5 штук: добавлен объект, удален объект, изменен объект, изменен параметр, перед изменением параметра.
Вопросы пока такие:
1) Это какие типы событий, я вот нашел парочку в ru.bitel.bgbilling.kernel.contract.object.common.event ContractObjectParamModifiedEvent и ContractObjectTypeModifiedEvent, это они? Я про то какой тип расширять EventScriptBase<?> для каждого из этих пяти событий.
2) Событие "добавлен объект" сработает в момент когда мы выбрали тип объекта и нажали ОК? Т.е. в этот момент у нас все параметра объекта пустые и все что мы знаем это тип объекта?
3) В какой момент срабатывает событие "изменен объект" и чем оно отличается от "изменен параметр"?
4) Можно ли в событии "перед изменением параметра" запретить это изменение?
5) Событие "объект удален" в какой момент приходит: до удаления или после? Можно заблокировать удаление?

Заранее спасибо :)

Автор:  Jimson [ 07 апр 2016, 21:20 ]
Заголовок сообщения:  Re: События при работе с объектами

Нашел еще ru.bitel.bgbilling.kernel.event.events.ContractObjectParameterUpdateEvent.
Но сразу бросается в глаза что у класса нет ни свойства ссылающегося на объект, ни свойства указывающего на параметр, только value и cid доступны.
А в классе ContractObjectParameterBeforeUpdateEvent конструктору передается paramid, но нигде не сохраняется? И ссылки/id на сам объект тоже не видно.

Автор:  barguzin2 [ 08 апр 2016, 11:20 ]
Заголовок сообщения:  Re: События при работе с объектами

1) https://bgbilling.ru/v6.2/javadoc/index.html - там есть All Classes, можно сделать поиск по слову object

Как обычно, вопрос с середины. Какую задачу то решаете?

Объект добавлен/удален - это имеется ввиду на договор/с договора. ContractAddObjectEvent/ContractDeleteObjectEvent

Изменение параметра объекта и перед изменением параметра - тут должно быть все понятно, ContractObjectParamModifiedEvent и ContractObjectParameterBeforeUpdateEvent

Изменение типа объекта - это изменение типа объекта в справочнике объектов event.ContractObjectTypeModifiedEvent

2) Уже ответил, при добавлении объекта в договор

3) Тоже следует из определения события

4) Можно. https://bgbilling.ru/v6.2/javadoc/ru/bi ... Event.html

5) Нет. Асинхронное событие - удаление объекта договора. Вызывается после удаления объекта договора.

6) Читайте документацию API

7) ContractObjectParameterUpdateEvent - да, имеет cid и value, но value типа ParamValue. С ContractObjectParameterBeforeUpdateEvent тоже самое
https://bgbilling.ru/v6.2/javadoc/bitel ... Value.html

Автор:  Jimson [ 08 апр 2016, 14:03 ]
Заголовок сообщения:  Re: События при работе с объектами

barguzin2 писал(а):
Как обычно, вопрос с середины. Какую задачу то решаете?

Ничего не обычного о чем стоило бы упоминать: синхронизация параметров с внешней системой, валидация, автоматическое заведение услуг.

barguzin2 писал(а):
7) ContractObjectParameterUpdateEvent - да, имеет cid и value, но value типа ParamValue. С ContractObjectParameterBeforeUpdateEvent тоже самое
https://bgbilling.ru/v6.2/javadoc/bitel ... Value.html

Да, что то сразу пошел по jar-ам искать и запутался, и ParamValue прохлопал, спасибо.
Смутило еще что в конструкторы передается paramId и не используется при этом.

P.S. Я правильно понимаю что никакой фабрики или кэша нет и доступ к объектам и договорам надо получать через ContractManager/ContractObjectManaget/etc создавая их непосредственно при обработке события?

Автор:  barguzin2 [ 08 апр 2016, 14:14 ]
Заголовок сообщения:  Re: События при работе с объектами

Да, всё, что отсутствует в объекте события, нужно вытягивать манагерами.

Автор:  Jimson [ 08 апр 2016, 14:33 ]
Заголовок сообщения:  Re: События при работе с объектами

Так, все же вроде чего не хватает или я опять затупил.
В ContractObjectParameterBeforeUpdateEvent передается только cid(int) и value(ParamValue), но ParamValue это objectId(int) и paramId(int), а где взять собственно новое значение параметра?

Автор:  barguzin2 [ 08 апр 2016, 15:27 ]
Заголовок сообщения:  Re: События при работе с объектами

ParamValue - это базовый класс, у которого есть еще дочерние AddressParamValue, TextParamValue и другие, соответствующие типу параметру объекта. Поэтому тут нужно еще определять по paramId тип параметра, а уже потом получать значение, приведенное к этому типу, например, вот так
Код:
   TextParamValue value = (TextParamValue) event.getValue();
   String txt = value.getValue();

Автор:  Jimson [ 08 апр 2016, 15:29 ]
Заголовок сообщения:  Re: События при работе с объектами

Да, все ясно. Спасибо.

Автор:  barguzin2 [ 08 апр 2016, 15:57 ]
Заголовок сообщения:  Re: События при работе с объектами

Где ? :D
Кнопка спасибо находится слева под профилем Изображение

Автор:  Jimson [ 08 апр 2016, 22:53 ]
Заголовок сообщения:  Re: События при работе с объектами

В ObjectParam есть флаги Read и Write, и в ParamManager они реализованы (выставляются в/из битовой маски object_param.flags). Но ни в интерфейсе ни экшенах эти флаги не проверяются?

Если при обработке события ContractObjectParameterBeforeUpdateEvent выставить ошибку, то в клиенте значение параметра все равно остается, надо тыкнуть в объект чтобы значения параметров обновились. По идее если я, например, в ContractObjectParameterUpdateEvent в ответ на изменение одного параметра изменю другие параметры объекта, то опять же в клиенте я этого не увижу. Логично было бы что бы клиент сам обновлял все параметры объекта после изменения одного из них.

Автор:  Jimson [ 12 апр 2016, 15:05 ]
Заголовок сообщения:  Re: События при работе с объектами

еще два момента

e.setError() реализуется через исключение, ошибка попадает в server.error.log с stacktrace, если использовать синхронное событие для валидации данных, то действия пользователя загаживают серверный лог, как с этим быть? Фильтровать как то в log4j? Stacktrace для этого исключения имеет какой то смысл?

Два класса в bitel.billing.server.contract.object.bean ObjectTypeParam и TypeParam подозрительно одинаковые. Один из них должен быть deprecated?

Страница 1 из 1 Часовой пояс: UTC + 5 часов [ Летнее время ]
Powered by phpBB® Forum Software © phpBB Group
http://www.phpbb.com/