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

Как изменить статус договора через запрос (5.1)
http://forum.bitel.ru/viewtopic.php?f=19&t=7256
Страница 1 из 1

Автор:  SeGa [ 27 сен 2012, 11:44 ]
Заголовок сообщения:  Как изменить статус договора через запрос (5.1)

Сращиваю биллинг с 1с. Получаю данные из биллинга через http запросы, запросы выбираю через дебагер. Подскажите, как изменить через запрос статус договора, а то в логе биллинга в режиме дебаггера отображает какую то тарабарщину в непонятной кодировке.
Спасибо.

Автор:  Cromeshnic [ 27 сен 2012, 12:14 ]
Заголовок сообщения:  Re: Как изменить статус договора через запрос (5.1)

Не помню, были ли веб-сервисы в 5.1, но в 5.2 смена статуса работает именно через них.
Поищите по форуму "веб-сервисы".

Автор:  stark [ 27 сен 2012, 13:22 ]
Заголовок сообщения:  Re: Как изменить статус договора через запрос (5.1)

viewtopic.php?f=22&t=6891&p=53606&hilit=web&sid=7c332f2eeddf0b1b39e8509fa352dd66#p53606

Автор:  SeGa [ 28 сен 2012, 03:32 ]
Заголовок сообщения:  Re: Как изменить статус договора через запрос (5.1)

Понятно, спасибо за подсказку, буду копать. Думается мне в 7.7 будет всё не очень тривиально.

Автор:  Cromeshnic [ 28 сен 2012, 06:41 ]
Заголовок сообщения:  Re: Как изменить статус договора через запрос (5.1)

Можно написать свой Action, чтобы менять статусы обычным запросом.
Я написал себе такой временно, чтобы не переделывать внешний скрипт на сервисы.

5.2:
Код:
package bitel.billing.server.contract.status.action;

import ru.bitel.bgbilling.common.BGException;
import bitel.billing.server.contract.bean.ContractStatus;
import bitel.billing.server.contract.bean.ContractStatusManager;
import bitel.billing.server.contract.status.action.base.ActionBase;
import java.sql.SQLException;
import java.util.Calendar;
import java.util.Date;
import ru.bitel.bgbilling.common.BGIllegalArgumentException;
import ru.bitel.bgbilling.server.util.ClosedDateChecker;

public class ActionContractStatusChange extends ActionBase
{
  public void doAction()
    throws SQLException, BGException
  {
    int newStatus = getIntParameter("status", -1);
    Date date1 = getDateParameter("date1");
    Date date2 = getDateParameter("date2");
    String comment = getParameter("comment", "");
    if ((this.cid <= 0) || (newStatus < 0) || (date1 == null))
    {
      throw new BGIllegalArgumentException();
    }
    if (!checkPeriod(date1, date2))
    {
      return;
    }
    ContractStatus status = new ContractStatus();
    status.setContractId(this.cid);
    status.setStatus(newStatus);
    status.setDateFrom(date1);
    status.setDateTo(date2);
    status.setComment(comment);
   
    Calendar closedDate = null;
    if ((closedDate = ClosedDateChecker.getClosePeriodDateIfChecking("ActionContractStatus", this.mid, this.userID.intValue())) != null)
    {
       ClosedDateChecker.checkDatesForUpdate(closedDate, null, null, date1, date2);
    }
    ContractStatusManager statusManager = new ContractStatusManager(this.con);
    statusManager.changeStatus(status.clone(), this.userID);
    this.con.commit();
  }
}

Автор:  SeGa [ 20 ноя 2012, 05:25 ]
Заголовок сообщения:  Re: Как изменить статус договора через запрос (5.1)

Чет не могу разобраться с этими вашими веб сервисами......
Имеется код
Код:
<?php
$client = new SoapClient("http://localhost:8080/bgbilling/executer/kernel.module.api/Service?wsdl");
$result = $client->serviceList();
?>

Получаю ответ:
Цитата:
PHP Fatal error: Uncaught SoapFault exception: [S:Server] javax.security.auth.login.LoginException in /var/www/atc/soap.php:3
Stack trace:
#0 /var/www/atc/soap.php(3): SoapClient->__call('serviceList', Array)
#1 /var/www/atc/soap.php(3): SoapClient->serviceList()
#2 {main}
thrown in /var/www/atc/soap.php on line 3

На сколько я понимаю проблема в авторизации....но как авторизоваться не понято....
А по работе со статусами вообще нечто не понятное:
Код:
<?php
$client = new SoapClient("http://localhost:8080/bgbilling/executer/kernel.contract.status/ContractStatusMonitor?wsdl");
?>

В ответ:
Цитата:
PHP Fatal error: SOAP-ERROR: Parsing Schema: unresolved element 'ref' attribute in /var/www/atc/soap.php on line 2
PHP Fatal error: Uncaught SoapFault exception: [WSDL] SOAP-ERROR: Parsing Schema: unresolved element 'ref' attribute in /var/www/atc/soap.php:2
Stack trace:
#0 /var/www/atc/soap.php(2): SoapClient->SoapClient('http://localho...')
#1 {main}
thrown in /var/www/atc/soap.php on line 2

PS: А как переделать тот скрипт что выкладывали выше под 5.1, я так и не разобрался...нуб я в java (

Автор:  aiwbend [ 20 ноя 2012, 08:43 ]
Заголовок сообщения:  Re: Как изменить статус договора через запрос (5.1)

SeGa писал(а):
На сколько я понимаю проблема в авторизации....но как авторизоваться не понято....
А по работе со статусами вообще нечто не понятное:


мб так? http://www.php.net/manual/ru/book.soap.php#96033
с http://127.0.0.1:8080/bgbilling/executer
Пробовал отправить через soapUI тоже с авторизацией затык был, header wsdl ему не нравился...

Автор:  SeGa [ 22 ноя 2012, 07:13 ]
Заголовок сообщения:  Re: Как изменить статус договора через запрос (5.1)

Вопрос к разработчикам: Если статус договора менять напрямую в sql чем это грозит?

Автор:  Cromeshnic [ 22 ноя 2012, 08:13 ]
Заголовок сообщения:  Re: Как изменить статус договора через запрос (5.1)

События не отработают, ничего не произойдёт.
Плюс, нужно менять contract.status и contract_status и contract_status_log
Потом, если схему работы со статусами немножно поменяют, всё сломается.
Короче, это сложно и неэффективно.

Автор:  SeGa [ 22 ноя 2012, 09:06 ]
Заголовок сообщения:  Re: Как изменить статус договора через запрос (5.1)

Печаль, а с этим скриптом я что то не могу разобраться, врода под 5.1 скомпилировал, но каким запросом поменять статус не понятно (
Код:
package bitel.billing.server.contract.action;

import bitel.billing.common.BGException;
import bitel.billing.server.contract.bean.ContractStatus;
import bitel.billing.server.contract.bean.ContractStatusManager;
import bitel.billing.server.contract.status.action.base.ActionBase;
import java.sql.SQLException;
import java.util.Calendar;
import java.util.Date;
import ru.bitel.bgbilling.common.BGIllegalArgumentException;

public class ActionContractStatusChange extends ActionBase
{
  public void doAction()
    throws SQLException, BGException
  {
    int newStatus = getIntParameter("status", -1);
 Date date1 = getDateParameter("date1");
    Date date2 = getDateParameter("date2");
    String comment = getParameter("comment", "");
    if ((this.cid <= 0) || (newStatus < 0) || (date1 == null))
    {
      throw new BGIllegalArgumentException();
    }
    if (!checkPeriod(date1, date2))
    {
      return;
    }
ContractStatus status = new ContractStatus();
    status.setContractId(this.cid);
    status.setStatus(newStatus);
    status.setDateFrom(date1);
    status.setDateTo(date2);
    status.setComment(comment);
if ((isDateCheckingEnabled("ActionContractStatus")) && ((
          (!checkDatesByClosedDate(null, date1)) || (!checkDatesByClosedDate(null, date2)))))
                {
                        setWebErrorMessage("Устанавливаемый статус пересекается с закрытым периодом!");
                                return;
                                        }
    ContractStatusManager statusManager = new ContractStatusManager(this.con);
    statusManager.changeStatus(status.clone(), this.userID);
    this.con.commit();
  }
}

Что бы не быть как все, расскажу как это поставить:
в домашнем каталоге создаем путь(папки): bg/bitel/billing/server/contract/action
В папке action создаем файл ActionContractStatusChange.java
и вносим код который был выше.
идем в папку bg и выполняем команды:
Код:
javac -cp ./:/usr/local/BGBillingServer/lib/* bitel/billing/server/contract/action/ActionContractStatusChange.java

Код:
jar cf ActionContractStatusChange.jar ./

получившейся ActionContractStatusChange.jar кидаем в папку /usr/local/BGBillingServer/lib/
и перезапускаем билинг.
Меняем статусы http://bgbilling.local:8080/bgbilling/e ... cid=290632

Автор:  Cromeshnic [ 22 ноя 2012, 09:26 ]
Заголовок сообщения:  Re: Как изменить статус договора через запрос (5.1)

action=ContractStatusChange&status=1&date1=&date2=&comment=test&cid=12345

Автор:  SeGa [ 22 ноя 2012, 09:47 ]
Заголовок сообщения:  Re: Как изменить статус договора через запрос (5.1)

Делаю запрос action=ContractStatusChange&status=2&date1=21.11.2012&date2=&comment=test&cid=290632
Получаю ответ:
<data errcode="2341031401" status="error">Can't call commit when autocommit=true</data>
Статус вроде бы нормально меняется :)
Спасибо за помощь.

Автор:  Cromeshnic [ 22 ноя 2012, 10:16 ]
Заголовок сообщения:  Re: Как изменить статус договора через запрос (5.1)

this.con.commit(); - уберите. В 5.1 вроде бы везде автокоммит.
Ну или так:

Код:
     
      if (!this.con.getAutoCommit())
      {
        this.con.commit();
      }

Автор:  Cromeshnic [ 22 ноя 2012, 10:16 ]
Заголовок сообщения:  Re: Как изменить статус договора через запрос (5.1)

так погодите, а что, в 5.1 тоже стандартный ContractStatusChange заменён на веб-сервисы?

Автор:  SeGa [ 22 ноя 2012, 10:43 ]
Заголовок сообщения:  Re: Как изменить статус договора через запрос (5.1)

Да :(

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