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

Странное поведение класса ContractStatusManager
http://forum.bitel.ru/viewtopic.php?f=22&t=3238
Страница 1 из 1

Автор:  focus [ 25 ноя 2009, 14:33 ]
Заголовок сообщения:  Странное поведение класса ContractStatusManager

Здравствуйте.
Такая вот ситуация. Создаем скрипт с помощью Автоматизация-Функции скриптов поведения.
часть кода скрипта
Код:
//Если текущий статус Активен и далее нет никаких статусов в будущем пропускаем скрипт
Calendar d = Calendar.getInstance();
List statusList =  cstm.getStatusList(cid, d);
List newstatusList = new ArrayList();
for (Iterator i = statusList.iterator(); i.hasNext();) {
   ContractStatus s = (ContractStatus) i.next();
   cStatus=s.getStatus();
   // Если будущйи статус = ОТКЛЮЧЕН или Закрыт
//   if( cStatus == 2 || cStatus == 3){
      s.setStatus(0);
      s.setComment("Статус изменен скриптом 'Изменение статуса договора по приходу платежа'");
   //}
    newstatusList.add(s);
}
// Меняем статусы в соответствии с новым списком статусов
for (Iterator t = newstatusList.iterator(); t.hasNext();){
   ContractStatus s2 = (ContractStatus) t.next();
   cstm.changeStatus(s2,0,true);
}

Прикрепляем к событию приход платежа. Добавляем платеж. Все ок.
Статус был допустим Закрыт - поменялся на активен.
Если этот же код выполняем не из скрипта, а создаем свой класс и запускаем его
Код:
public class setStatusContract {
    private static String db_url = "СТРОКА ПОДКЛЧЕНИЯ К БД";
    public static void main(String[] args){
        Connection con = null;
        try{
            DriverManager.registerDriver((Driver)Class.forName("com.mysql.jdbc.Driver").newInstance());
            con = DriverManager.getConnection(db_url,user,pass);
            ContractStatusManager cstm = new ContractStatusManager(con);
            int cid= КОД ДОГОВОРА;
            Calendar d = Calendar.getInstance();           
            List statusList =  cstm.getStatusList(cid, d);
            // нужно взять статус договора на дату закрытия договора
            java.util.List newstatusList = new java.util.ArrayList();
            for (java.util.Iterator i = statusList.iterator(); i.hasNext();) {
                ContractStatus s = (ContractStatus) i.next();
      s.setStatus(0);
      s.setComment("Закрываем скриптом по причине окончания срока действия договора.");   
                newstatusList.add(s);   
            }
            // Меняем статусы в соответствии с новым списком статусов
            for (java.util.Iterator t = newstatusList.iterator(); t.hasNext();){
                ContractStatus s2 = (ContractStatus) t.next();
                try{
                    cstm.changeStatus(s2,0,true); // Вот 47 строка в моем коде на которой и происходит exception
                }catch(Exception e){
                    e.printStackTrace();
                }
            }           
            con.close();
        }catch(Exception e){
            e.printStackTrace();
        }
    }
}
Вываливается ошибка
Цитата:
java.lang.NullPointerException
at bitel.billing.server.contract.bean.ContractStatusManager.changeStatus(ContractStatusManager.java:402)
at ru.dsi.testbgbs.gw.setStatusContract.main(setStatusContract.java:47)

Сам статус остается закрыт. Поясните какие-то особенности есть при использовании этого класса ?

Автор:  Amir [ 25 ноя 2009, 14:47 ]
Заголовок сообщения:  Re: Странное поведение класса ContractStatusManager

Потому что выполняется не в среде биллинга.
У биллинга есть обработчик событий (которых не должно быть запущено больше чем 1), на нем и падает в тесте.

В 5.1 хотим внедрить вебсервисы, так что с этим проще возможно будет, и вообще стать более MOM-образными, но это уже не так просто...

В java и beanshell можно вместо

Код:
for (java.util.Iterator t = newstatusList.iterator(); t.hasNext();){
                ContractStatus s2 = (ContractStatus) t.next();
}

писать
Код:
for (ContractStatus s2 : newstatusList){
}

Автор:  focus [ 25 ноя 2009, 15:42 ]
Заголовок сообщения:  Re: Странное поведение класса ContractStatusManager

Получается из своего класса такая фишка не прокатит ?
Используем скрипты....

Автор:  Amir [ 25 ноя 2009, 16:17 ]
Заголовок сообщения:  Re: Странное поведение класса ContractStatusManager

В 4.6 сейчас есть глобальные скрипты поведения, может пригодятся...

Автор:  aardvark [ 25 ноя 2009, 20:00 ]
Заголовок сообщения:  Re: Странное поведение класса ContractStatusManager

Код:
В 4.6 сейчас есть глобальные скрипты поведения, может пригодятся...

А где про их читать? Как вешать и тд.?

Автор:  Администратор [ 25 ноя 2009, 20:20 ]
Заголовок сообщения:  Re: Странное поведение класса ContractStatusManager

http://www.bgbilling.ru/v5.0/doc/ch02s03.html

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