BiTel

Форум BiTel
bgbilling.ru     docs.bitel.ru     wiki.bitel.ru     dbinfo.bitel.ru     bgcrm.ru     billing.bitel.ru     bitel.ru    
Текущее время: 29 мар 2024, 01:05

Часовой пояс: UTC + 5 часов [ Летнее время ]




Начать новую тему Ответить на тему  [ Сообщений: 81 ]  На страницу Пред.  1, 2, 3
Автор Сообщение
 Заголовок сообщения: Re: Свой action в личном кабинете
СообщениеДобавлено: 19 май 2011, 15:26 
Не в сети
Аватара пользователя

Зарегистрирован: 23 мар 2009, 23:16
Сообщения: 780
Откуда: St.Petersburg
Карма: 0
Теперь другая ерунда.
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!


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Свой action в личном кабинете
СообщениеДобавлено: 19 май 2011, 16:08 
Не в сети
Клиент
Аватара пользователя

Зарегистрирован: 20 апр 2009, 12:03
Сообщения: 3092
Откуда: Иркутск
Карма: 338
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-код страницы.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Свой action в личном кабинете
СообщениеДобавлено: 19 май 2011, 16:19 
Не в сети
Аватара пользователя

Зарегистрирован: 23 мар 2009, 23:16
Сообщения: 780
Откуда: St.Petersburg
Карма: 0
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 ?


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Свой action в личном кабинете
СообщениеДобавлено: 19 май 2011, 16:33 
Не в сети
Клиент
Аватара пользователя

Зарегистрирован: 20 апр 2009, 12:03
Сообщения: 3092
Откуда: Иркутск
Карма: 338
В 5.1 должен быть /bitel/billing/server/contract/action/web/ActionAdditionalParams.java
Соотв-нно:

package bitel.billing.server.contract.action.web;

class ActionAdditionalParams ...


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Свой action в личном кабинете
СообщениеДобавлено: 19 май 2011, 16:57 
Не в сети
Аватара пользователя

Зарегистрирован: 23 мар 2009, 23:16
Сообщения: 780
Откуда: St.Petersburg
Карма: 0
Все получилось. Спасибо!


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Свой action в личном кабинете
СообщениеДобавлено: 04 июл 2011, 15:42 
Не в сети

Зарегистрирован: 15 июн 2011, 13:33
Сообщения: 29
Карма: 0
При редактировании .пдф СЧЕТА появилась необходимость вывести прописью суммы без НДС и суммы с НДС
Стандартный скрипт 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" />



Подскажите что необходимо прописать мне чтобы выводился мой скрипт?


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Свой action в личном кабинете
СообщениеДобавлено: 17 авг 2011, 15:31 
Не в сети
Разработчик

Зарегистрирован: 27 ноя 2006, 20:36
Сообщения: 5715
Карма: 93
Это не скрипт, а 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. При чём тут свой акшен в личном кабинете?


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Свой action в личном кабинете
СообщениеДобавлено: 15 фев 2012, 11:04 
Не в сети

Зарегистрирован: 12 фев 2008, 16:11
Сообщения: 485
Карма: 12
А кто-нибудь думал над ситуацией, когда первоначально поле 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"); не выводит ничего.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Свой action в личном кабинете
СообщениеДобавлено: 27 фев 2012, 15:59 
Не в сети
Клиент

Зарегистрирован: 21 сен 2009, 13:01
Сообщения: 835
Откуда: Москва
Карма: 15
Добрый день,
помогите осилить для версии 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


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Свой action в личном кабинете
СообщениеДобавлено: 29 фев 2012, 10:27 
Не в сети

Зарегистрирован: 12 фев 2008, 16:11
Сообщения: 485
Карма: 12
Поменялся синтаксис в версии 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 );


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Свой action в личном кабинете
СообщениеДобавлено: 31 мар 2015, 15:47 
Не в сети

Зарегистрирован: 08 окт 2009, 16:06
Сообщения: 186
Карма: 20
Добрый день. поискал в doc API и не нашел описание класса bitel.billing.server.ActionBase
Выложите пожалуйста для версии 5.0


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Свой action в личном кабинете
СообщениеДобавлено: 31 мар 2015, 15:55 
Не в сети
Аватара пользователя

Зарегистрирован: 30 май 2008, 15:51
Сообщения: 6055
Карма: 244
Зачем в документации по API класс, который не представляет собой API?

Хотя в общем-то часть методов (типа получения параметров) можно отнести к API, да.

_________________
I'm clever. I've got a computer.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Свой action в личном кабинете
СообщениеДобавлено: 31 мар 2015, 16:02 
Не в сети

Зарегистрирован: 08 окт 2009, 16:06
Сообщения: 186
Карма: 20
а кто же он тогда?


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Свой action в личном кабинете
СообщениеДобавлено: 31 мар 2015, 16:03 
Не в сети
Разработчик

Зарегистрирован: 08 ноя 2007, 01:05
Сообщения: 8343
Откуда: Уфа
Карма: 238
Хорошо, добавим.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Свой action в личном кабинете
СообщениеДобавлено: 18 май 2017, 00:45 
Не в сети
Клиент

Зарегистрирован: 20 мар 2008, 20:20
Сообщения: 676
Откуда: Россия, Иваново
Карма: 36
Коллеги подскажите, так теперь принято делать Свой action в личном кабинете в версии 7.0?


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Свой action в личном кабинете
СообщениеДобавлено: 18 май 2017, 01:30 
Не в сети
Аватара пользователя

Зарегистрирован: 30 май 2008, 15:51
Сообщения: 6055
Карма: 244
ничего тут особо не изменилось

_________________
I'm clever. I've got a computer.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Свой action в личном кабинете
СообщениеДобавлено: 18 май 2017, 08:07 
Не в сети
Клиент
Аватара пользователя

Зарегистрирован: 20 апр 2009, 12:03
Сообщения: 3092
Откуда: Иркутск
Карма: 338
Лучше через dynaction, я думаю


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Свой action в личном кабинете
СообщениеДобавлено: 18 май 2017, 08:23 
Не в сети
Клиент

Зарегистрирован: 20 мар 2008, 20:20
Сообщения: 676
Откуда: Россия, Иваново
Карма: 36
Cromeshnic писал(а):
Лучше через dynaction, я думаю

А есть пример?


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Свой action в личном кабинете
СообщениеДобавлено: 18 май 2017, 08:59 
Не в сети
Клиент
Аватара пользователя

Зарегистрирован: 20 апр 2009, 12:03
Сообщения: 3092
Откуда: Иркутск
Карма: 338
Ну вот у меня в конфиге свой новый экшн:

Код:
#Красивая статистика для dialup
dynaction:dialup.web.ActionCustomShowStat=ru.dsi.bgbilling.modules.dialup.api.server.action.ActionCustomShowStat


А дальше там пишешь что угодно


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Свой action в личном кабинете
СообщениеДобавлено: 18 май 2017, 13:11 
Не в сети
Аватара пользователя

Зарегистрирован: 30 май 2008, 15:51
Сообщения: 6055
Карма: 244
Cromeshnic писал(а):
Лучше через dynaction, я думаю

я думал это и подразумевается

_________________
I'm clever. I've got a computer.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Свой action в личном кабинете
СообщениеДобавлено: 19 май 2017, 23:32 
Не в сети
Клиент

Зарегистрирован: 20 мар 2008, 20:20
Сообщения: 676
Откуда: Россия, Иваново
Карма: 36
Спасибо. Все получилось через dynaction.


Вернуться к началу
 Профиль  
 
Показать сообщения за:  Поле сортировки  
Начать новую тему Ответить на тему  [ Сообщений: 81 ]  На страницу Пред.  1, 2, 3

Часовой пояс: UTC + 5 часов [ Летнее время ]


Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 1


Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете добавлять вложения

Найти:
Перейти:  
POWERED_BY
Русская поддержка phpBB
[ Time : 0.098s | 60 Queries | GZIP : On ]