BiTel

Форум BiTel
bgbilling.ru     docs.bitel.ru     wiki.bitel.ru     dbinfo.bitel.ru     bgcrm.ru     billing.bitel.ru     bitel.ru    
Текущее время: 22 июн 2025, 11:39

Часовой пояс: UTC + 5 часов [ Летнее время ]




Начать новую тему Ответить на тему  [ Сообщений: 6 ] 
Автор Сообщение
СообщениеДобавлено: 25 ноя 2009, 14:33 
Не в сети
Клиент

Зарегистрирован: 27 окт 2009, 16:17
Сообщения: 319
Откуда: Иркутск
Карма: 18
Здравствуйте.
Такая вот ситуация. Создаем скрипт с помощью Автоматизация-Функции скриптов поведения.
часть кода скрипта
Код:
//Если текущий статус Активен и далее нет никаких статусов в будущем пропускаем скрипт
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)

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


Вернуться к началу
 Профиль  
 
СообщениеДобавлено: 25 ноя 2009, 14:47 
Не в сети
Разработчик
Аватара пользователя

Зарегистрирован: 19 дек 2006, 21:04
Сообщения: 5970
Карма: 256
Потому что выполняется не в среде биллинга.
У биллинга есть обработчик событий (которых не должно быть запущено больше чем 1), на нем и падает в тесте.

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

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

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

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


Вернуться к началу
 Профиль  
 
СообщениеДобавлено: 25 ноя 2009, 15:42 
Не в сети
Клиент

Зарегистрирован: 27 окт 2009, 16:17
Сообщения: 319
Откуда: Иркутск
Карма: 18
Получается из своего класса такая фишка не прокатит ?
Используем скрипты....


Вернуться к началу
 Профиль  
 
СообщениеДобавлено: 25 ноя 2009, 16:17 
Не в сети
Разработчик
Аватара пользователя

Зарегистрирован: 19 дек 2006, 21:04
Сообщения: 5970
Карма: 256
В 4.6 сейчас есть глобальные скрипты поведения, может пригодятся...


Вернуться к началу
 Профиль  
 
СообщениеДобавлено: 25 ноя 2009, 20:00 
Не в сети

Зарегистрирован: 22 дек 2008, 13:02
Сообщения: 270
Откуда: Москва
Карма: 27
Код:
В 4.6 сейчас есть глобальные скрипты поведения, может пригодятся...

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


Вернуться к началу
 Профиль  
 
СообщениеДобавлено: 25 ноя 2009, 20:20 
Не в сети
Разработчик

Зарегистрирован: 27 ноя 2006, 20:36
Сообщения: 5715
Карма: 93
http://www.bgbilling.ru/v5.0/doc/ch02s03.html


Вернуться к началу
 Профиль  
 
Показать сообщения за:  Поле сортировки  
Начать новую тему Ответить на тему  [ Сообщений: 6 ] 

Часовой пояс: UTC + 5 часов [ Летнее время ]


Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 1


Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете добавлять вложения

Найти:
Перейти:  
cron
POWERED_BY
Русская поддержка phpBB
[ Time : 0.038s | 27 Queries | GZIP : On ]