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

данные из сервиса Inet в текстовое поле договора
http://forum.bitel.ru/viewtopic.php?f=19&t=12072
Страница 1 из 1

Автор:  Dipress [ 08 ноя 2016, 12:16 ]
Заголовок сообщения:  данные из сервиса Inet в текстовое поле договора

Добрый день.
Подскажите как сделать. Есть договор, в нем экземпляр модуля Inet, в котором заведем сервис. Необходимо из сервиса каким-то образом извлечь IP адрес и добавить его в текстовое поле в самом договоре. Т.е. при добавлении сервиса в экземпляре Inet, указанный IP адрес должен автоматически добавляться в текстовое поле договора.

Автор:  Dipress [ 08 ноя 2016, 12:19 ]
Заголовок сообщения:  Re: данные из сервиса Inet в текстовое поле договора

Забыл указать что биллинг 6.2.

Автор:  Phricker [ 08 ноя 2016, 13:29 ]
Заголовок сообщения:  Re: данные из сервиса Inet в текстовое поле договора

Как то так.
Код:
package ru.ellcom.bgbilling.scripts.inet;

import bitel.billing.common.IPUtils;
import bitel.billing.server.contract.bean.ContractParameterManager;
import org.apache.log4j.Logger;
import ru.bitel.bgbilling.kernel.module.common.bean.User;
import ru.bitel.bgbilling.kernel.script.server.dev.EventScript;
import ru.bitel.bgbilling.kernel.script.server.dev.EventScriptBase;
import ru.bitel.bgbilling.modules.inet.api.common.bean.InetServ;
import ru.bitel.bgbilling.modules.inet.api.server.event.InetServChangingEvent;
import ru.bitel.bgbilling.server.util.Setup;
import ru.bitel.common.sql.ConnectionSet;
import ru.bitel.oss.systems.inventory.resource.common.bean.IpResourceSubscription;
import ru.bitel.oss.systems.inventory.resource.server.bean.IpResourceSubscriptionDao;

import java.net.InetAddress;
import java.sql.Connection;


public class PasteIPToContractParam extends EventScriptBase<InetServChangingEvent> implements EventScript<InetServChangingEvent> {

    private static final Logger logger = Logger.getLogger(PasteIPToContractParam.class);

    @Override
    public void onEvent(InetServChangingEvent event, Setup setup, ConnectionSet connectionSet) throws Exception {
        Connection con = connectionSet.getConnection();
        int INET_MODULE_ID = 12;
        int TEXT_PARAM_ID = 1;

        ContractParameterManager cpm = new ContractParameterManager(con);
        InetServ service = event.getInetServ();
        IpResourceSubscriptionDao ipResourceSubscriptionDao = new IpResourceSubscriptionDao(con, INET_MODULE_ID);

        IpResourceSubscription ip = ipResourceSubscriptionDao.get(service.getIpResourceSubscriptionId());
        byte[] ipAddr = ip.getAddressFrom();
        cpm.updateStringParam(event.getContractId(),TEXT_PARAM_ID, InetAddress.getByAddress(ipAddr).toString(), User.USER_SERVER);

    }
}


Вешается на событие "Изменяется сервис договора"
Изображение

Автор:  Phricker [ 08 ноя 2016, 13:30 ]
Заголовок сообщения:  Re: данные из сервиса Inet в текстовое поле договора

Изображение

Автор:  Phricker [ 08 ноя 2016, 13:34 ]
Заголовок сообщения:  Re: данные из сервиса Inet в текстовое поле договора

Ну и да.
Выдает NPE (java.lang.NullPointerException), если не указан IP адрес :D
Но я и не претендовал на законченный скрипт

Автор:  barguzin2 [ 08 ноя 2016, 13:38 ]
Заголовок сообщения:  Re: данные из сервиса Inet в текстовое поле договора

А обязательно лезть в подписки на ресурсы? Вроде адрес в самом сервисе фигурирует. И еще маленькое дополнение:
Код:
String ipStr = InetAddress.getByAddress(serv.getAddressFrom()).getHostAddress();

Вот так адрес будет без начального слэша.

Автор:  Dipress [ 08 ноя 2016, 13:48 ]
Заголовок сообщения:  Re: данные из сервиса Inet в текстовое поле договора

Phricker писал(а):
Ну и да.
Выдает NPE (java.lang.NullPointerException), если не указан IP адрес :D
Но я и не претендовал на законченный скрипт

А как можно обработать подобное исключение?

Автор:  Phricker [ 08 ноя 2016, 13:49 ]
Заголовок сообщения:  Re: данные из сервиса Inet в текстовое поле договора

barguzin2 писал(а):
А обязательно лезть в подписки на ресурсы? Вроде адрес в самом сервисе фигурирует.

Тьфу точно, прошляпил его в IDE.
Вот что значит кофе с утра не выпить, сижу туплю.
Значит будет выглядеть как то так.

Код:
    @Override
    public void onEvent(InetServChangingEvent event, Setup setup, ConnectionSet connectionSet) throws Exception {
        Connection con = connectionSet.getConnection();
        int INET_MODULE_ID = 12;
        int TEXT_PARAM_ID = 1;

        ContractParameterManager cpm = new ContractParameterManager(con);
        InetServ service = event.getInetServ();
        byte[] ipAddr = service.getAddressFrom();
        cpm.updateStringParam(event.getContractId(),TEXT_PARAM_ID, InetAddress.getByAddress(ipAddr).getHostAddress(), User.USER_SERVER);

    }

Автор:  Dipress [ 08 ноя 2016, 13:57 ]
Заголовок сообщения:  Re: данные из сервиса Inet в текстовое поле договора

Я правильно понимаю что на java.lang.NullPointerException надо использовать проверку на null Вот эту переменную ?
InetServ service = event.getInetServ();

Автор:  Phricker [ 08 ноя 2016, 13:58 ]
Заголовок сообщения:  Re: данные из сервиса Inet в текстовое поле договора

Не. По идее проверять надо ipAddr

Автор:  Dipress [ 09 ноя 2016, 16:30 ]
Заголовок сообщения:  Re: данные из сервиса Inet в текстовое поле договора

Благодарю за помощь. В целом все работает как и хотелось.

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