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

Получить Contract
http://forum.bitel.ru/viewtopic.php?f=19&t=12369
Страница 1 из 2

Автор:  mhollow [ 07 апр 2017, 16:09 ]
Заголовок сообщения:  Получить Contract

Подскажите пожалуйста как сейчас правильно получать Contract по id, а то смотрю, то не использовать, то использовать.. трудно по началу разобраться.
Один единственный, по id полученному из event.
Спасибо.

Автор:  skyb [ 07 апр 2017, 16:26 ]
Заголовок сообщения:  Re: Получить Contract

Код:
Connection con  = connectionSet.getConnection();
ContractManager cm = new ContractManager(con);
Contract contract = cm.getContractById(cid);

плюсик слева, а то опять фрикер перехватит ))))

Автор:  mhollow [ 07 апр 2017, 16:28 ]
Заголовок сообщения:  Re: Получить Contract

дык вроде как он возвращает не кошерный Contract
По возможности не использовать. Использовать Contract. Есть трудности с переводом на новый бин из-за tariffOptions и tts, до тех пор пока к ним обращаються сюда, перевести полностью не получится.

Автор:  skyb [ 07 апр 2017, 16:45 ]
Заголовок сообщения:  Re: Получить Contract

а ссыль? а то о каких версиях непонятно

Автор:  mhollow [ 07 апр 2017, 16:47 ]
Заголовок сообщения:  Re: Получить Contract

https://bgbilling.ru/v7.0/javadoc/index ... nager.html

Автор:  Phricker [ 07 апр 2017, 16:51 ]
Заголовок сообщения:  Re: Получить Contract

Код:
Connection con = connectionSet.getConnection();
ContractDao contractDao = new ContractDao(con, User.USER_SERVER);
Contract contract = contractDao.get(CONTRACT_ID);

p.s. ваши программисты пишущие кошерный динамически подгружаемый код Java не смогли разобраться в API? O.o
Или апи тоже через жопу написанное?

Автор:  skyb [ 07 апр 2017, 16:52 ]
Заголовок сообщения:  Re: Получить Contract

даошки ненада жеж )
а что не так то?
Код:
getContractById
public Contract getContractById(int cid)
Возвращает договор по его коду
Parameters:
cid - код договора
Returns:

Автор:  Phricker [ 07 апр 2017, 16:53 ]
Заголовок сообщения:  Re: Получить Contract

Ну тогда ContractService.
Минуту щас найду где оно у меня.

Автор:  Phricker [ 07 апр 2017, 16:55 ]
Заголовок сообщения:  Re: Получить Contract

Код:
ServerContext context = ServerContext.get();
ContractService contractService = context.getService(ContractService.class, 0);
contractService.contractGet(CONTRACT_ID);

Лень IDE запускать, написал навскидку.
Но кажись оно.

Автор:  Phricker [ 07 апр 2017, 16:59 ]
Заголовок сообщения:  Re: Получить Contract

skyb писал(а):
а что не так то?

Там два Contract
Первый типа устарел все дела.
https://bgbilling.ru/v7.0/javadoc/bitel ... tract.html
Цитата:
По возможности не использовать. Использовать Contract. Есть трудности с переводом на новый бин из-за tariffOptions и tts, до тех пор пока к ним обращаються сюда, перевести полностью не получится.

и в нем же есть ссылка на второй
https://bgbilling.ru/v7.0/javadoc/ru/bi ... tract.html


Я юзаю какой придется, т.к. про ContractService не всегда вспоминаю, а большая часть отчетов переписывается со старых в которых используется ContractManager.

Автор:  mhollow [ 07 апр 2017, 17:00 ]
Заголовок сообщения:  Re: Получить Contract

Итого три способа)) Не многовато ли?))
Дык какой предпочтительный? Dao?
Уважаемые разработчики? Эм?

Автор:  Phricker [ 07 апр 2017, 17:06 ]
Заголовок сообщения:  Re: Получить Contract

Старый способ через ContractManager. Использовался в том числе и в богохульном BGBS.
Новый способ - через ContractService.
Появился в 6.2 и выше кажись.

В новом способе внутри используется ContractDao, так что можно с осторожностью использовать даошку если нет другого варианта, не забывая закрывать и прочее.
Код:
 private ContractDao getDao() {
        if(this.contractDao == null) {
            this.contractDao = new ContractDao(this.getConnection(), this.userId);
        }

        return this.contractDao;
    }
...
@PreDestroy
    private void destroy() {
        try {
            if(this.contractDao != null) {
                this.contractDao.close();
                this.contractDao = null;
            }
        } catch (Exception var2) {
            logger.error(var2.getMessage(), var2);
        }

    }
...

public Contract contractGet(int contractId) throws BGException {
        return (Contract)this.getDao().get(contractId);
    }

Автор:  Phricker [ 07 апр 2017, 17:09 ]
Заголовок сообщения:  Re: Получить Contract

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

Автор:  mhollow [ 07 апр 2017, 17:51 ]
Заголовок сообщения:  Re: Получить Contract

И я Вас тоже люблю :-P
А можно ссылочку на ServerContext ? Чет не могу найти в API 7.0. А то ведь запутаюсь не ровен час ))

Автор:  mhollow [ 07 апр 2017, 18:39 ]
Заголовок сообщения:  Re: Получить Contract

Как после изменения обновить Contract? Причем контракт который ru.bitel.bgbilling.kernel.contract.api.common.bean.Contract
Например, после contract.setTitle()
Что нужно сделать чтобы обновилось и в базе и желательно в сразу в интерфейсе?
Спасибо.

Автор:  skn [ 07 апр 2017, 18:57 ]
Заголовок сообщения:  Re: Получить Contract

https://bgbilling.ru/v7.0/javadoc/ru/bi ... ctDao.html метод update(...)

в интерфейсе не поменяется, пока не кликнете по кнопке обновить

Автор:  mhollow [ 07 апр 2017, 19:02 ]
Заголовок сообщения:  Re: Получить Contract

Спасибо.
И никакого события нет чтобы до создания договора отработало и новый договор был создан уже с новым title?
Чтобы не обновлять

Автор:  barguzin2 [ 07 апр 2017, 19:39 ]
Заголовок сообщения:  Re: Получить Contract

напишите дин.сервис, который будет расширять штатный ContractService, в нём формируете нужный вам title и вызываете super. на вики есть пример. Ы... :D

Автор:  Amir [ 07 апр 2017, 20:08 ]
Заголовок сообщения:  Re: Получить Contract

Может, если просто создаете новый договор, все-таки достаточно стандартных шаблонов номера договора?

Автор:  mhollow [ 07 апр 2017, 20:19 ]
Заголовок сообщения:  Re: Получить Contract

Не, мне надо контрольную цифру считать. Шаблонные имена к сожалению имеют слишком ограниченный функционал.

Автор:  mhollow [ 07 апр 2017, 20:33 ]
Заголовок сообщения:  Re: Получить Contract

Так Dao сказали не пользоваться. Или как? Обновить Contract это как раз тот случай "когда нет другого варианта"?
И можно ссылку на метод update(), а то я уже начинаю подозревать что Phricker был прав говоря про способ написания API)

Автор:  skn [ 07 апр 2017, 21:15 ]
Заголовок сообщения:  Re: Получить Contract

mhollow писал(а):
Так Dao сказали не пользоваться. Или как? Обновить Contract это как раз тот случай "когда нет другого варианта"?
И можно ссылку на метод update(), а то я уже начинаю подозревать что Phricker был прав говоря про способ написания API)


ru.bitel.common.dao.AbstractDao.update(...) это один из предков ContractDao

что и как использовать зависит от конкретного случая, иногда можно и напрямую в БД править.

Автор:  Amir [ 07 апр 2017, 21:24 ]
Заголовок сообщения:  Re: Получить Contract

Старый пример, но можно оттуда что-нибудь взять:
http://wiki.bitel.ru/index.php/%D0%9E%D0%B1%D1%80%D0%B0%D0%B1%D0%BE%D1%82%D0%BA%D0%B0_%D1%81%D0%BE%D0%B1%D1%8B%D1%82%D0%B8%D1%8F_%D1%81%D0%BE%D0%B7%D0%B4%D0%B0%D0%BD%D0%B8%D1%8F_%D0%B4%D0%BE%D0%B3%D0%BE%D0%B2%D0%BE%D1%80%D0%B0#.D0.92.D1.81.D1.82.D0.B0.D0.B2.D0.BA.D0.B0_.D0.BA.D0.BE.D0.BD.D1.82.D1.80.D0.BE.D0.BB.D1.8C.D0.BD.D0.BE.D0.B9_.D1.81.D1.83.D0.BC.D0.BC.D1.8B_.D0.B2_.D0.BD.D0.BE.D0.BC.D0.B5.D1.80_.D0.B4.D0.BE.D0.B3.D0.BE.D0.B2.D0.BE.D1.80.D0.B0

Если изменение номера договора будет в скрипте на создание договора - то ничего обновлять в клиенте не надо.

Автор:  Phricker [ 07 апр 2017, 21:46 ]
Заголовок сообщения:  Re: Получить Contract

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

Автор:  mhollow [ 07 апр 2017, 21:56 ]
Заголовок сообщения:  Re: Получить Contract

Да, обновлять ничего не надо, я проверил. Это хорошо.
>>ru.bitel.common.dao.AbstractDao.update(...) это один из предков ContractDao
Дык описание где? в API 7.0 нет, равно как и ServerContext. Как пользователь предполагается узнает об этих классах и параметров методов? От доброго дядюшки Phricker'a на форуме?

Сейчас обновляю Contract полученные через ServerContext и ContractService так:
ContractDao contractDao = new ContractDao(dbConn.getConnection(), User.USER_SERVER);
contractDao.update(contract);
Нужно ли потом вызывать contractDao.close(); и прочие танцы с бубном? Или все-таки dao AutoCloseable ?

Автор:  barguzin2 [ 07 апр 2017, 23:21 ]
Заголовок сообщения:  Re: Получить Contract

Про ServerContext достаточно того, что уже написали. И нафик тут вообще сервис, когда можно Dao обойтись, тем более вы его для обновления используете.

P.S. Про классы и методы: Eclipse!? Не, не слышал...

Вложения:
ContractDao.PNG
ContractDao.PNG [ 13.68 КБ | Просмотров: 18307 ]

Автор:  mhollow [ 07 апр 2017, 23:59 ]
Заголовок сообщения:  Re: Получить Contract

откуда я знаю можно или нельзя если это нигде не написано

Автор:  mhollow [ 08 апр 2017, 01:18 ]
Заголовок сообщения:  Re: Получить Contract

А вообще конечно разброд и шатание. Один контракт устарел "По возможности не использовать". Замечательно, я стараюсь быть послушным мальчиком и использовать новые классы.
Беру нужный мне ContractCreatedEvent и очень хочу получить из него Contract.
Вижу: очень удобно - он содержит метод, который сразу позволяет получить Contract - getContract(). Но тут... сюрприииз угадайте какой Contract он возвращает? Правильно, тот который "по возможности не использовать".
Как мне кажется, если разработчики объявляют какой-то класс deprecated, то в первую очередь они первые должны обеспечить все возможности и удобства для перехода на новые классы, не?
А тут приходится хитро изголяться, чтобы получить "новый" Contract через Id договора и через "новые" API которые внезапно еще и нигде не описаны.
В результате какой-то левый гемор и 3 строчки нелогичного кода вместо одной.
Ведь всего этого разговора бы просто не было если бы getContract() у Eventa возвращал бы новый "правильный" Contract.
Да я понимаю, обратная совместимость и все такое, но сделайте же тогда новый метод getContract2() возвращающий новый Contract ну? Делов то на 15 минут а пользователям будет приятно))

Автор:  barguzin2 [ 08 апр 2017, 09:06 ]
Заголовок сообщения:  Re: Получить Contract

Л - Логика.

Комрад, если вам сам биллинг подкидывает в ивенте так называемый некошерный Contract (который, кстати, вовсе не устарел, т.к. не Depricated и много еще где используется), то, спрашивается, нахрена усложнять себе задачу и дергать кашерный, который для ваших целей ничем не лутьше. Юзайте то, что дают + ContractManager - и будет вам щщастье.

P.S. Это не разброд и шатание, это постоянное изменение и улучшение биллинга, а с вашей стороны - банальное фи и отсутствие понимания, которое приходит с опытом. А у вас даже нет желания его получать, т.к. вы на каждый чих пишите на форум, и вам пока все достаточно доброжелательно отвечают и разжевывают. Вы не гонитесь сразу за кошерностью, делайте подручными средствами и минимальными усилиями, а там уже допилите. А пока от вас сильно скепсисом веет. Чтоб вам с CarbonBilling работать...

Автор:  mhollow [ 08 апр 2017, 10:31 ]
Заголовок сообщения:  Re: Получить Contract

Видимо, комрад, у нас с Вами слишком разное понимание выражение "По возможности не использовать". По мне так "deprecated" и "По возможности не использовать" это синонимы. Если Вы видите тонкую грань между этими категориями, с удовольствием выслушаю. А так то да, Вы правы, конечно.
"Жрите что дают" давно пора сделать главным девизом фирмы bitel. Тёма Лебедев со своим "Долго, дорого, о#@$нно" одобряэ..)

На счет разжёвывают, ДА, за что всем огромное спасибо. Я это очень ценю, нет, правда! Особенно господину Фрикеру. Ему вообще надо дать какой-нибудь орден за то, насколько доброжелательно он это делает)
Скепсис мой в основном сводится только к одному: "Плохое качество документации". И это объективно так. И это я кому хочешь обосную, сколько бы вы тут не гоняли меня ссаными тряпками. Документация отвратительная. Она плоха и для "Администратора" и я конечно был готов к чему-то подобному когда открывал API но такое...
А отсутствие документации вынуждает меня обращаться сюда. Если Вы думаете, что я получаю огромное удовольствие выпрашивая тут интересующие меня вещи на форуме и вступая с вами в подобные склоки, Вы сильно ошибаетесь. Мне очень жалко и мое время и ваше, уважаемое коммьюнити. Я всего-лишь выполняю свою работу которая в данном случае мне доставляет мало удовольствия. Разбираться в достаточно комплексном проекте, без хорошей доки не очень интересно, так что уж простите мои претензии. Это "накипает" ))

Я скажу так. Если бы каждый участник только веток которые создаю я, потратил то же количество времени, которое потратил на разжевывание и флейм, на доработку документации, многие бы разделы форума можно было закрывать. Мне не нужно разжевывание, я конечно дурак, но не полный идиот, и пока еще могу читать руководства, но это тяжело когда их нет...

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