forum.bitel.ru http://forum.bitel.ru/ |
|
Свой action в личном кабинете http://forum.bitel.ru/viewtopic.php?f=19&t=3230 |
Страница 3 из 3 |
Автор: | mikos [ 19 май 2011, 15:26 ] |
Заголовок сообщения: | Re: Свой action в личном кабинете |
Теперь другая ерунда. 1. Форма появляется, но поля в ней пустые. Получается в переменные не попадают параметры: Код: <xsl:template name="AdditionalParams"> <form method='post' action='{$WEBEXECUTER}'> <!-- Дополнительные параметры договора --> <xsl:variable name="email" select="/data/contract_data/parameters/parameter[@pid='12']/@value"/> <xsl:variable name="mobilephone" select="/data/contract_data/parameters/parameter[@pid='20']/@value"/> <xsl:variable name="contactname" select="/data/contract_data/parameters/parameter[@pid='19']/@value"/> <xsl:call-template name="action"/> <xsl:call-template name="error"/> <input type="hidden" name="command" value="change"/> <xsl:if test="@status = 'ok'"> <div class="infoMessage"> <xsl:for-each select="/data/report/row"> <xsl:if test="@status = 'ok'"> <xsl:value-of select="@parameter" /> changed to <xsl:value-of select="@value" /><br /> </xsl:if> <xsl:if test="@status = 'error'"> An error occured while changing parameter "<xsl:value-of select="@parameter" />": <xsl:value-of select="@val!>>ue" /><br /> </xsl:if> </xsl:for-each> </div> </xsl:if> <div class="report"> <table cellspacing='1' id="idTableChangePassword"> <col class="col1"/> <col class="col2"/> <tbody> <tr> <th>Email:</th> <td><input type="text" name="email" value="{$email}" size="30" maxlength="100"/></td> </tr> <tr> <th>Mobile Phone:</th> <td><input type="text" name="mobilephone" value="{$mobilephone}" size="30" maxlength="20"/></td> </tr> <tr> <th>Contact Name:</th> <td><input type="text" name="contactname" value="{$contactname}" size="30" maxlength="20"/></td> </tr> </tbody> <tfoot> <tr><td colspan='2'> <xsl:call-template name="submit"> <xsl:with-param name="title" select="'Save'"/> </xsl:call-template> </td></tr> </tfoot> </table> </div> </form> </xsl:template> 2. При сабмите формы в логах биллинга на каждую попытку Код: 05-19/13:19:39 WARN [http-8080-2] server - action = contract.ActionAdditionalParams - not found!
|
Автор: | Cromeshnic [ 19 май 2011, 16:08 ] |
Заголовок сообщения: | Re: Свой action в личном кабинете |
1. В конфиге сервера (в клиенте который настраивается) указано: Код: #добавление в XML на странице статистике детальной информации по договору - 1 web.add.contract=1 ? 2. - написали свой класс bitel.billing.server.contract.action.web.ActionAdditionalParams - скомпилили - запаковали в my.jar - закинули my.jar в /usr/local/BGBillingServer/lib/ - рестартанули сервер биллинга Всё из этого проделали? зы. Для отладки того, что вам приходит от сервера, удобно добавлять к урлу &ct=xml и смотреть исходный xml-код страницы. |
Автор: | mikos [ 19 май 2011, 16:19 ] |
Заголовок сообщения: | Re: Свой action в личном кабинете |
1. Спасибо, помогло web.add.contract=1 2. Написал, скомпилил и положил в /opt/BGBillingServer/lib Но есть один момент - путь до класса у меня bitel/billing/server/contract/WebAction_AdditionalParams.java Должен быть bitel/billing/server/contract/action/web/WebAction_AdditionalParams.java ? |
Автор: | Cromeshnic [ 19 май 2011, 16:33 ] |
Заголовок сообщения: | Re: Свой action в личном кабинете |
В 5.1 должен быть /bitel/billing/server/contract/action/web/ActionAdditionalParams.java Соотв-нно: package bitel.billing.server.contract.action.web; class ActionAdditionalParams ... |
Автор: | mikos [ 19 май 2011, 16:57 ] |
Заголовок сообщения: | Re: Свой action в личном кабинете |
Все получилось. Спасибо! |
Автор: | romaniozi [ 04 июл 2011, 15:42 ] |
Заголовок сообщения: | Re: Свой action в личном кабинете |
При редактировании .пдф СЧЕТА появилась необходимость вывести прописью суммы без НДС и суммы с НДС Стандартный скрипт SummaToString выводит сумму прописью но пишет рубли, т.к. фирма работает в Украине, рубли не актуальны. Т.к. изменить валюту в SummaToString нельзя, необходимо создать свой скрипт и включить его в .XSL файле СЧЕТА 1.Нашел нужный скрипт 2.Скомпилил его MoneyToString.java ---->MoneyToString.class 3.Создал userjars.jar c файлом в нем MoneyToString.class 4.Закинул файл usersjars.jar в local/BGBillingServer/lib Теперь как мне его включить в XSL? На данный момент сумма прописью пишется скриптом SummaToString Код: <xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" xmlns:fo="http://www.w3.org/1999/XSL/Format" xmlns:svg="http://www.w3.org/2000/svg" xmlns:xalan="http://xml.apache.org/xalan" xmlns:java="http://xml.apache.org/xalan/java" exclude-result-prefixes="java" xmlns:st="bitel.billing.server.bill.bean.SummaToString" xmlns:counter="bitel.billing.server.util.exslt.Counter" version="1.0"> <xalan:component prefix="st" functions="summaToString"> <xalan:script lang="javaclass" src="xalan://bitel.billing.server.bill.bean.SummaToString"/> </xalan:component> <xalan:component prefix="counter" functions="add set get"> <xalan:script lang="javaclass" src="xalan://bitel.billing.server.util.exslt.Counter"/> </xalan:component> <xsl:output encoding="windows-1251" method='xml' indent='yes' /> Выводится так: Код: <xsl:variable name="sumStr" select="java:java.lang.String.new(st:summaToString(@total_sum))"/> <xsl:variable name="sumStr2" select="java:concat(java:toUpperCase(java:substring($sumStr,0,1)),java:substring($sumStr,1))"/> <xsl:value-of select="$sumStr2" /><xsl:variable name="sumStr" select="java:java.lang.String.new(st:summaToString(counter:get( 'total_nds')))"/> <xsl:variable name="sumStr2" select="java:concat(java:toUpperCase(java:substring($sumStr,0,1)),java:substring($sumStr,1))"/> в т.ч. НДС: <xsl:value-of select="$sumStr2" /> Подскажите что необходимо прописать мне чтобы выводился мой скрипт? |
Автор: | Администратор [ 17 авг 2011, 15:31 ] |
Заголовок сообщения: | Re: Свой action в личном кабинете |
Это не скрипт, а Java класс вызывается. Делайте по аналогии с SummaToString. 1) xmlns:mst="MoneyToString" 2) <xalan:component prefix="mst" functions="summaToString"> <xalan:script lang="javaclass" src="xalan://MoneyToString/> </xalan:component> 3) Можете вызывать Функцию mst:summaToString. http://wiki.bgbilling.ru/index.php/XSLT http://wiki.bitel.ru/index.php/XSLT P.S. При чём тут свой акшен в личном кабинете? |
Автор: | mrustik [ 15 фев 2012, 11:04 ] |
Заголовок сообщения: | Re: Свой action в личном кабинете |
А кто-нибудь думал над ситуацией, когда первоначально поле e-mail не заполнено, как вставить его? Есть в коде вот такая проверка Код: // Get old value (email parameter needs special handling) if( paramName.equals( "email" )) { emailParam = cpm.getEmailParam( cid, pid ); oldParamValue = emailParam.getEmail(); } else { oldParamValue = cpm.getStringParam( cid, pid ); } // If value has been changed (from LK) then ... if( !paramValue.equals( oldParamValue )) { ... } Соответственно, если нет предыдущего значения, то исправить, вставить не получиться. Это актуально для версии 5.1, не знаю как для 4.6 При изменении вылетает с ошибкой на строке Код: oldParamValue = emailParam.getEmail(); как можно запустить отладку, this.log.debug("test debug"); не выводит ничего. |
Автор: | Dog [ 27 фев 2012, 15:59 ] |
Заголовок сообщения: | Re: Свой action в личном кабинете |
Добрый день, помогите осилить для версии 5.1 Код: package bitel.billing.server.contract; import bitel.billing.server.admin.bean.User; import bitel.billing.server.admin.bgsecure.bean.UserLoginModule.UserPrincipal; import bitel.billing.server.contract.action.base.ActionBase; import bitel.billing.server.contract.bean.ContractEmailParamValue; import bitel.billing.server.contract.bean.ContractParameterManager; import bitel.billing.server.script.bean.event.ContractParamBeforeChangeEvent; import bitel.billing.server.script.bean.event.ContractParamChangedEvent; import bitel.billing.server.script.bean.event.EventProcessor; import org.w3c.dom.Element; import ru.bitel.bgbilling.server.util.Setup; import javax.security.auth.Subject; import java.security.AccessController; import java.sql.SQLException; import java.util.HashMap; import java.util.Iterator; public class WebAction_AdditionalParams extends ActionBase { @Override public void doAction() throws SQLException { // Object request holds all information about HTTP-request request.getSession(); // Get customer ID Subject subject = Subject.getSubject( AccessController.getContext() ); if( subject != null ) { for( UserPrincipal userPrincipal : subject.getPrincipals( UserPrincipal.class ) ) { User currentUser = userPrincipal.getUser(); Integer cid = currentUser.getID(); } } if( cid != 0 ) { Setup setup = Setup.getSetup(); ContractParameterManager cpm = new ContractParameterManager( con ); Integer pid = 0; Integer reportIsNeeded = 0; Element report = createElement( rootNode, "report" ); Element element; // Get parameter IDs and descriptions from BGBilling configuration HashMap<String,String> pids = (HashMap<String,String>) setup.getHashValuesWithPrefix( "my.pid." ); HashMap<String,String> descriptions = (HashMap<String,String>) setup.getHashValuesWithPrefix( "my.desc." ); // Cycle through parameters set Iterator iterator = pids.keySet().iterator(); while( iterator. hasNext() ) { String paramName = String.valueOf( iterator.next() ); String paramDesc = descriptions.get( paramName ); String paramValue = request.getParameter( paramName ); String oldParamValue; String errorBefore = ""; ContractEmailParamValue emailParam = null; ContractParamBeforeChangeEvent eventBefore = null; ContractParamChangedEvent event = null; // If value from POST-request exists if( paramValue != null ) { pid = Integer.parseInt( pids.get( paramName )); // Get old value (email parameter needs special handling) if( paramName.equals( "email" )) { emailParam = cpm.getEmailParam( cid, pid ); oldParamValue = emailParam.getEmail(); } else { oldParamValue = cpm.getStringParam( cid, pid ); } // If value has been changed (from LK) then ... if( !paramValue.equals( oldParamValue )) { // Prepare new value to parameter and set "before change" event (email parameter needs special handling) if( paramName.equals( "email" )) { emailParam.setEmail( paramValue ); emailParam.setEmailId( 1 ); eventBefore = new ContractParamBeforeChangeEvent( cid, pid, emailParam ); } else { eventBefore = new ContractParamBeforeChangeEvent( cid, pid, paramValue ); } if( eventBefore != null ) { // Create "row" element for XML report element = createElement( report, "row" ); element.setAttribute( "parameter", paramDesc ); // Throw "before change" event to handler (BGBilling server) and get error message EventProcessor.getProcessor().processEvent( eventBefore ); errorBefore = eventBefore.getError(); if( errorBefore == null ) { // If handler returns "ok" then set new parameter value and set "parameter changed" event if( paramName.equals( "email" )) { cpm.setEmailParam( cid, pid, emailParam, false, 1 ); event = new ContractParamChangedEvent( cid, pid, emailParam ); } else { cpm.setStringParam( cid, pid, paramValue, 1 ); event = new ContractParamChangedEvent( cid, pid, paramValue ); } if( event != null ) { // Throw "parameter changed" event and set attributes for XML report EventProcessor.getProcessor().addEvent( event ); element.setAttribute( "status", "ok" ); element.setAttribute( "value", String.valueOf( paramValue )); reportIsNeeded = 1; } } else { // If handler returns error then set attributes for XML report only element.setAttribute( "status", "error" ); element.setAttribute( "value", String.valueOf( errorBefore )); reportIsNeeded = 1; } } } } } // Renew XML element with contract parameters and set status variable for Web if( reportIsNeeded == 1 ) { request.getSession().removeAttribute( "contract_data" ); rootNode.setAttribute("status","ok"); } } } } ругается на event = new ContractParamChangedEvent( cid, pid, emailParam ); и eventBefore = new ContractParamBeforeChangeEvent( cid, pid, paramValue ); в коде. Код: /srv/my_param.java:83: cannot find symbol
symbol : constructor ContractParamBeforeChangeEvent(int,java.lang.Integer,bitel.billing.server.contract.bean.ContractEmailParamValue) location: class bitel.billing.server.script.bean.event.ContractParamBeforeChangeEvent eventBefore = new ContractParamBeforeChangeEvent( cid, pid, emailParam ); ^ /srv/my_param.java:85: cannot find symbol symbol : constructor ContractParamBeforeChangeEvent(int,java.lang.Integer,java.lang.String) location: class bitel.billing.server.script.bean.event.ContractParamBeforeChangeEvent eventBefore = new ContractParamBeforeChangeEvent( cid, pid, paramValue ); ^ /srv/my_param.java:103: cannot find symbol symbol : constructor ContractParamChangedEvent(int,java.lang.Integer,bitel.billing.server.contract.bean.ContractEmailParamValue) location: class bitel.billing.server.script.bean.event.ContractParamChangedEvent event = new ContractParamChangedEvent( cid, pid, emailParam ); ^ /srv/my_param.java:106: cannot find symbol symbol : constructor ContractParamChangedEvent(int,java.lang.Integer,java.lang.String) location: class bitel.billing.server.script.bean.event.ContractParamChangedEvent event = new ContractParamChangedEvent( cid, pid, paramValue ); ^ Note: /srv/my_param.java uses or overrides a deprecated API. Note: Recompile with -Xlint:deprecation for details. 4 errors |
Автор: | mrustik [ 29 фев 2012, 10:27 ] |
Заголовок сообщения: | Re: Свой action в личном кабинете |
Поменялся синтаксис в версии 5.1 Код: ContractParamBeforeChangeEvent(int userId, int cid, int pid, java.lang.Object value) нужно определить как Код: eventBefore = new ContractParamBeforeChangeEvent( 0, cid, pid, emailParam ); так же нужно поменять Код: event = new ContractParamChangedEvent( 0, cid, pid, emailParam );
|
Автор: | braek-neck [ 31 мар 2015, 15:47 ] |
Заголовок сообщения: | Re: Свой action в личном кабинете |
Добрый день. поискал в doc API и не нашел описание класса bitel.billing.server.ActionBase Выложите пожалуйста для версии 5.0 |
Автор: | dimOn [ 31 мар 2015, 15:55 ] |
Заголовок сообщения: | Re: Свой action в личном кабинете |
Хотя в общем-то часть методов (типа получения параметров) можно отнести к API, да. |
Автор: | braek-neck [ 31 мар 2015, 16:02 ] |
Заголовок сообщения: | Re: Свой action в личном кабинете |
а кто же он тогда? |
Автор: | stark [ 31 мар 2015, 16:03 ] |
Заголовок сообщения: | Re: Свой action в личном кабинете |
Хорошо, добавим. |
Автор: | lda [ 18 май 2017, 00:45 ] |
Заголовок сообщения: | Re: Свой action в личном кабинете |
Коллеги подскажите, так теперь принято делать Свой action в личном кабинете в версии 7.0? |
Автор: | dimOn [ 18 май 2017, 01:30 ] |
Заголовок сообщения: | Re: Свой action в личном кабинете |
ничего тут особо не изменилось |
Автор: | Cromeshnic [ 18 май 2017, 08:07 ] |
Заголовок сообщения: | Re: Свой action в личном кабинете |
Лучше через dynaction, я думаю |
Автор: | lda [ 18 май 2017, 08:23 ] |
Заголовок сообщения: | Re: Свой action в личном кабинете |
Cromeshnic писал(а): Лучше через dynaction, я думаю А есть пример? |
Автор: | Cromeshnic [ 18 май 2017, 08:59 ] |
Заголовок сообщения: | Re: Свой action в личном кабинете |
Ну вот у меня в конфиге свой новый экшн: Код: #Красивая статистика для dialup dynaction:dialup.web.ActionCustomShowStat=ru.dsi.bgbilling.modules.dialup.api.server.action.ActionCustomShowStat А дальше там пишешь что угодно |
Автор: | dimOn [ 18 май 2017, 13:11 ] |
Заголовок сообщения: | Re: Свой action в личном кабинете |
Cromeshnic писал(а): Лучше через dynaction, я думаю я думал это и подразумевается |
Автор: | lda [ 19 май 2017, 23:32 ] |
Заголовок сообщения: | Re: Свой action в личном кабинете |
Спасибо. Все получилось через dynaction. |
Страница 3 из 3 | Часовой пояс: UTC + 5 часов [ Летнее время ] |
Powered by phpBB® Forum Software © phpBB Group http://www.phpbb.com/ |