Здравствуйте.
Такая вот ситуация. Создаем скрипт с помощью Автоматизация-Функции скриптов поведения.
часть кода скрипта
Код:
//Если текущий статус Активен и далее нет никаких статусов в будущем пропускаем скрипт
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)
Сам статус остается закрыт. Поясните какие-то особенности есть при использовании этого класса ?