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

Получение данных от пользователя из ЛК
http://forum.bitel.ru/viewtopic.php?f=19&t=4168
Страница 1 из 2

Автор:  jack7 [ 15 июн 2010, 23:41 ]
Заголовок сообщения:  Получение данных от пользователя из ЛК

Доброе время суток

Хочется при определенном action выводить пользователю html-форму с определенными полями и через них получать данные для дальнейшей обработки.

С первой частью все нормально. Добавил action в "Дополнительные действия", далее открывается форма с нужными полями.

Далее непонятно =)

Есть ли какая-то возможность для обработки этих данных?
Как перехватить данные ?

Вариант с переносом данных в параметры договора через личный кабинет (описанный в вики) не подходит.

Автор:  focus [ 16 июн 2010, 07:03 ]
Заголовок сообщения:  Re: Получение данных от пользователя из ЛК

На html страничке разместить форму к форме привязать action, который и будет делать дальнейшую обработку.
На форме поля. Их будет заполнять клиент и значения этих полей будет передаваться в action через параметры запроса при нажатии на кнопочку.

Автор:  jack7 [ 16 июн 2010, 07:25 ]
Заголовок сообщения:  Re: Получение данных от пользователя из ЛК

focus писал(а):
На html страничке разместить форму к форме привязать action, который и будет делать дальнейшую обработку.
На форме поля. Их будет заполнять клиент и значения этих полей будет передаваться в action через параметры запроса при нажатии на кнопочку.


Это не вызывает проблем.

Как в классе нового action указать принимать определенные http параметры? (ведь API определяет определенный набор http параметров, а мне нужно перехватить свои).
Если ставить form action (в форме html) на сторонний url-ресурс - то все просто, но надо сделать в рамках ЛК.

Автор:  focus [ 16 июн 2010, 09:46 ]
Заголовок сообщения:  Re: Получение данных от пользователя из ЛК

Насколько удалось разобраться в BG, то все action должны быть унаследованы от класса bitel.billing.server.ActionBase
А в этом классе есть такие функции
getParam(String name)
где name и есть имя параметра в запросе.
+ есть ещё функции getIntParameter, getBooleanParameter, getBooleanParameter
+ ещё доступен объект HttpServletRequest request.

P.S Если я не прав - поправьте меня.

Автор:  jack7 [ 16 июн 2010, 09:51 ]
Заголовок сообщения:  Re: Получение данных от пользователя из ЛК

focus, спасибо
буду разбираться..

Автор:  focus [ 16 июн 2010, 10:05 ]
Заголовок сообщения:  Re: Получение данных от пользователя из ЛК

Да и твой класс, который будет в качестве action выступать должен быть в
package bitel.billing.server.[module]
я делал у меня он был в bitel.billing.server.contract

Автор:  jack7 [ 16 июн 2010, 10:10 ]
Заголовок сообщения:  Re: Получение данных от пользователя из ЛК

ок, благодарю :)

Автор:  dimOn [ 16 июн 2010, 11:21 ]
Заголовок сообщения:  Re: Получение данных от пользователя из ЛК

focus писал(а):
Да и твой класс, который будет в качестве action выступать должен быть в
package bitel.billing.server.[module]
я делал у меня он был в bitel.billing.server.contract
ну, это устаревшая схема, можно и так, но лучше в ru.bitel.bgbilling.modules.[module].server.action а вебовские в ru.bitel.bgbilling.modules.[module].server.action.web, но ищется сначала всё равно там, где указано в БД в таблице installed_modules, то есть если вы пользуете готовое строковое наименование модуля (т.е. не создаёте новый свой), то лучше взять тот, который используется для этого модуля.

Автор:  jack7 [ 16 июн 2010, 16:40 ]
Заголовок сообщения:  Re: Получение данных от пользователя из ЛК

dimOn писал(а):
ну, это устаревшая схема, можно и так, но лучше в ru.bitel.bgbilling.modules.[module].server.action а вебовские в ru.bitel.bgbilling.modules.[module].server.action.web, но ищется сначала всё равно там, где указано в БД в таблице installed_modules, то есть если вы пользуете готовое строковое наименование модуля (т.е. не создаёте новый свой), то лучше взять тот, который используется для этого модуля.


спасибо за совет, dimOn
но у меня версия биллинга 4.6 и нет пакетов ru.bitel.bgbilling.modules.*

Автор:  dimOn [ 16 июн 2010, 17:01 ]
Заголовок сообщения:  Re: Получение данных от пользователя из ЛК

А, ну да, верно, для 4.6 не так актуально. В 4.6 мало модулей там располагалось (assist,drweb итд). Тем более, что там было более жёсткое размещение и все пути были прописаны в БД. Т.е. можно в своём модуле разместить пакеты где угодно, главное прописать их в таблицы. А если расширяете виртуальный модуль "contract", то в 4.6 (!) классы должны лежать в bitel.billing.server.contract.action и называться ActionНазваниеЭкшена или для веба лежать в bitel.billing.server.contract и называться WebAction_НазваниеЭкшена.


upd. з.ы. Если положить их наоборот соответственно в bitel.billing.server.contract и в bitel.billing.server.contract.action то тоже будет работать. Там поиск класса делается по куче мест, исторически сложилось так.

Автор:  jack7 [ 16 июн 2010, 17:05 ]
Заголовок сообщения:  Re: Получение данных от пользователя из ЛК

Да, так и буду делать
dimOn, еще вопрос:
если я обновлю BG до версии 5.0, надо ли будет менять свой класс и его положение в иерархии пакетов?

Автор:  dimOn [ 16 июн 2010, 18:36 ]
Заголовок сообщения:  Re: Получение данных от пользователя из ЛК

До 5.0 - вряд ли что-либо поменяется.
До 5.1 - очень возможно понадобится поменять его реализацию (другие там классы для Page, Period используются итд итп), в иерархии (скорее всего) тоже надо будет переместить его в обязательную подпапку action и action.web для вебовских (и убрать префикс "WebAction_").

Автор:  jack7 [ 16 июн 2010, 20:13 ]
Заголовок сообщения:  Re: Получение данных от пользователя из ЛК

ок, спасибо за помощь

Автор:  focus [ 17 июн 2010, 10:25 ]
Заголовок сообщения:  Re: Получение данных от пользователя из ЛК

Спасибо за информацию. Будем иметь ввиду для 5.1

Автор:  jack7 [ 19 июн 2010, 19:56 ]
Заголовок сообщения:  Re: Получение данных от пользователя из ЛК

по ходу дела у меня возникла пара вопросов:

1) в скрипте формирующем форму создается таблица с 2-мя полями в которые пользователь вводит данные
Цитата:
event.addReport( "<html><body><form action=\"https://bill.server.com:8443/bgbilling/webexecuter?action=MyAction\">"
+ "<input type=\"hidden\" name=\"param_0\" value=\"1\"></input>"
+ "<dl><table cellspacing=\"1\"><thead><tr><center><td>Параметр 1</td>"
+ "</center><td>Параметр 2</td></tr></thead><tbody>"
+ "<tr><td class=\"comment\"><input type=\"text\" name=\"param_1\"></input></td>"
+ "<td class=\"comment\"><input type=\"text\" name=\"param_2\"></input></td></tr>"
+ "</tbody></table></dl><dl><input type=\"submit\" value=\"Выполнить\"></input></dl></form></body></html>" );


form action должен отправлять данные при нажатии на кнопку "Выполнить" - но этого не происходит
что нужно сделать чтоб корректно передать данные на указанный в URL action?

2) Как вывести сообщение на страницу ЛК при определенном событии из своего экшена?
И надо ли что-то делать с шаблонами xsl в таком случае?


пробовал addReport() как в скриптах поведения
Код:
AdditionalActionEvent lk = new AdditionalActionEvent(cid,aid);
lk.addReport("любой текст");


но сообщение не выдается

Автор:  dimOn [ 21 июн 2010, 10:43 ]
Заголовок сообщения:  Re: Получение данных от пользователя из ЛК

Чтобы вывести в 4.6 сообщение в рамочке, надо вызвать
Код:
setErrorStatus( "Ошибка" );
или
Код:
setMsg( String msg );
На странице в xsl должен быть вставлен
Код:
<xsl:call-template name="error"/>

Автор:  focus [ 21 июн 2010, 15:23 ]
Заголовок сообщения:  Re: Получение данных от пользователя из ЛК

Цитата:
form action должен отправлять данные при нажатии на кнопку "Выполнить" - но этого не происходит
что нужно сделать чтоб корректно передать данные на указанный в URL action?

Как определяете, что этого не происходит. приведите код WebAction_MyAction.

Автор:  jack7 [ 21 июн 2010, 16:41 ]
Заголовок сообщения:  Re: Получение данных от пользователя из ЛК

dimOn, спасибо за информацию

focus, форму создаю из скрипта поведения с помощью event.addReport()

1) в скрипте, создающем форму, отображается таблица с 2-мя полями в которые пользователь вводит данные
Цитата:
event.addReport( "<html><body><form action=\"https://bill.server.com:8443/bgbilling/webexecuter?action=MyAction\">"
+ "<input type=\"hidden\" name=\"param_0\" value=\"1\"></input>"
+ "<dl><table cellspacing=\"1\"><thead><tr><center><td>Параметр 1</td>"
+ "</center><td>Параметр 2</td></tr></thead><tbody>"
+ "<tr><td class=\"comment\"><input type=\"text\" name=\"param_1\"></input></td>"
+ "<td class=\"comment\"><input type=\"text\" name=\"param_2\"></input></td></tr>"
+ "</tbody></table></dl><dl><input type=\"submit\" value=\"Выполнить\"></input></dl></form></body></html>" );


а в своем экшене уже перехватываю параметры

когда я руками в строке браузера выполняю bill.server.com:8080/bgbilling/webexecuter?action=MyAction&param_0=1&param_1=1&param_2=2
то параметры нормально перехватываются

а при нажатии "выполнить" на форме из скрипта этого не происходит, на сервере через анализатор пакетов вижу что аргументы передаются не так как хотелось бы
(смотрю через ettercap на порт 8080) прилетают такие параметры

Цитата:
module=contract&mid=contract&action=AdditionalAction&action_id=0&action=MyAction&param_0=1&param_1=1&param_2=2


как видно параметр action прилетает 2 раза и принимается только первый со значением AdditionalAction
скорее всего такой способ предачи параметров не подходит


2) как в своем экшене создать форму?
просто передать html код в метод setErrorStatus() не приводит к желаемому результату, так как на выводе получается чистый html код

Автор:  dimOn [ 21 июн 2010, 16:49 ]
Заголовок сообщения:  Re: Получение данных от пользователя из ЛК

зачем в экшене форму создавать? только в xsl у нас всегда создаётся. что именно вам надо там создавать?

Автор:  jack7 [ 21 июн 2010, 16:54 ]
Заголовок сообщения:  Re: Получение данных от пользователя из ЛК

нужно создать таблицу с двумя редактируемыми полями и при нажатии кнопки "выполнить" отправить данные из этих полей (на свой экшен)

Автор:  dimOn [ 21 июн 2010, 18:29 ]
Заголовок сообщения:  Re: Получение данных от пользователя из ЛК

ну так таблица должна быть в xsl, нет? И поля там же. Зачем её создавать динамически?

Автор:  jack7 [ 21 июн 2010, 18:39 ]
Заголовок сообщения:  Re: Получение данных от пользователя из ЛК

да :)
в сторону xsl что-то не подумал
сделал форму как надо
спасибо !

Автор:  jack7 [ 29 июн 2010, 20:56 ]
Заголовок сообщения:  Re: Получение данных от пользователя из ЛК

еще небольшой вопрос

можно ли с помощью xsl выбрать значения параметров договора по pid и показать их пользователю в личном кабинете?

Автор:  focus [ 30 июн 2010, 05:23 ]
Заголовок сообщения:  Re: Получение данных от пользователя из ЛК

если правильно вас понял, то добавьте к запросу в браузере &ct=xml.
Будет ответ в виде xml. Смотрим как называется параметр и по имени к параметру обращаемся.

Если именно по pid тогда наверное нужно свой Java класс сделать и дергать его из xslt. Или же из xslt брать значение из БД с помощью SQL. На wiki у Бител есть такие примеры.

Автор:  Cromeshnic [ 30 июн 2010, 05:31 ]
Заголовок сообщения:  Re: Получение данных от пользователя из ЛК

Можно.
Чтобы параметры выдавались в xml, нужно в конфигурации биллинга указать:
Код:
#добавление в XML на странице статистике детальной информации по договору - 1
web.add.contract=1


Пример получения значения спискового параметра в xsl:
Код:
<xsl:if test="/data/contract_data/parameters/parameter[@pid=58]">
    <xsl:value-of select="/data/contract_data/parameters/parameter[@pid=58]/@value"/>
</xsl:if>

Автор:  jack7 [ 30 июн 2010, 06:38 ]
Заголовок сообщения:  Re: Получение данных от пользователя из ЛК

Cromeshnic, спасибо!
это то что надо

Автор:  skyb [ 16 июл 2010, 08:39 ]
Заголовок сообщения:  Re: Получение данных от пользователя из ЛК

jack7 А поделитесь данными, как реализовали добавление каких либо данных с личного кабинета пользователем в параметры договора

Cromeshnic У меня информация выводиться, но куда ее запихать? тоесть чтоб она выводилась в менюшке как все остальное??

Автор:  snark [ 16 июл 2010, 10:32 ]
Заголовок сообщения:  Re: Получение данных от пользователя из ЛК

skyb писал(а):
У меня информация выводиться, но куда ее запихать? тоесть чтоб она выводилась в менюшке как все остальное??

в какой менюшке то? что именно надо сделать? форму с выводом текущих данных и возможностью изменения (примерно об этом тут выше как раз и речь) или просто вывод данных (это решается простой правкой шаблонов)?

Автор:  skyb [ 16 июл 2010, 11:54 ]
Заголовок сообщения:  Re: Получение данных от пользователя из ЛК

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

Автор:  snark [ 16 июл 2010, 12:53 ]
Заголовок сообщения:  Re: Получение данных от пользователя из ЛК

skyb писал(а):
1-в какое место в каком файле это все вставлять чтоб получилась менюшка (тоесть слева, где новости и тд) чтоб была типо - параметры договра, после нажатия на нее выводились некоторые данные по полям

в common.xsl, в <xsl:template name="standart_menu"> вставить
Код:
<tr>
   <th><img src="img/strelki.gif"/></th>
   <td><a href="link_to_pagre">Параметры договора</a></td>
</tr>

вместо link_to_pagre вставить ссылку на ту страницу где будешь это все вытягивать их из XML, хоть убей - не помню где именно выводятся параметры но ЕМНИМС на всех страницах (читай - не зависит от модуля), так что можно даже ссылку на новости для этого использовать (правда от ссылки них придется отказаться наверное) - надо только их не рисовать на своей "страничке" и все ...

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