Вопрос

Если изменять значения полей таблицы в Web-service, то информация о изменении не попадает в Change log и невозможно потом в случае чего проверить, кто изменил данные.

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

У меня такой же вопрос

11 комментариев
Лучший ответ

Алла набросал конфигурационный сервис если выполнять UpdateQuery логирование не работает, если менять через Entity все логируется.  На всякий случай уточняю имеется ввиду Конфигурация-> Журнал изменений)

Если речь об изменении данных внутри веб-сервиса, то не должно быть отличий от обычной серверной логики: если менять при помощи EntitySchemaQuery, то логируется, если через Insert и Update, то нет.

Каким сервисом меняются данные если вами разработанным то привидите код иначе название и пример вызова.

Зверев Александр,

Не важно, как реализовано, логгирование не работает ни через EntitySchemaQuery, ни через Update.

Разница в реализации, если через EntitySchemaQuery, то срабатывает вызов процессов по сигналам, а через Update - нет.

Таким образом, вопрос по логгированию остается открытым. Как всё-таки это можно реализовать на уровне серверной логики?

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

Либо же можно сделать свой процесс, срабатывающий на событии изменения и пишущий информацию в таблицу лога.

А если изменять не в вэб сервисе изминения попадают в  Change log? Может проблемы с настройкой  Change log?!

Григорий Чех,

Chage log настроен корректно, если изменять с клиента, то изменения в Change log отображаются.

А у Вас работает такой кейс или это гипотетическое предположение?

Если всё проверили и не логирует, лучше отправить в поддержку подробную информацию о веб-сервисе и как с ним работали. Или поднять демку и воспроизвести там на стандартных веб-сервисах при помощи примеров добавления-изменения из академии.

Алла набросал конфигурационный сервис если выполнять UpdateQuery логирование не работает, если менять через Entity все логируется.  На всякий случай уточняю имеется ввиду Конфигурация-> Журнал изменений)

Григорий Чех,

Спасибо с этим уже разобралась.

Так а в чём дело было?

Зверев Александр,

Ошибка. Действительно, через EntitySchemaQuery логгирование работает.

Войдите или зарегистрируйтесь, чтобы комментировать
Вопрос

Коллеги, добрый день!

Мне необходимо внести изменения в базовый конфигурационный сервис AdministrationServiceUsers.

Возможно ли создать замещающую схему для сервиса? 

Подскажите, как правильно это сделать? В академии не нашел информации.

У меня такой же вопрос

1 комментарий

Добрый день, Павел.

Вносить изменения в базовые веб сервисы нет возможности.

Для этих целей Вам необходимо реализовать собственный веб - сервис,

Вы можете выполнить наследование в своем сервисе от базового, но, так как многие методы нет возможности переопределить, оптимальным решением будет реализовать полностью свой сервис по аналогии с базовым.

Подробно вопрос конфигурирования веб-сервисов рассматривается в видео-обучении. https://www.youtube.com/watch?v=rbdB7LFgNf0&feature=youtu.be

Войдите или зарегистрируйтесь, чтобы комментировать
Вопрос

Добрый день, Коллеги!

Изучили ряд тем на сообществе по данному вопросу и попробовали воспроизвести кейс из данной темы:

https://community.terrasoft.ru/questions/anonimnaa-autentifikacia-vnesn…

Сделали всё в точности как описано в примере, включая настройку web-конфигов. 

Сервис:

namespace Terrasoft.Configuration
{
 using System;
 using System.Collections.Generic;
 using System.Collections.ObjectModel;
 using System.Data;
 using System.Linq;
 using System.Security;
 using System.ServiceModel;
 using System.ServiceModel.Web;
 using System.ServiceModel.Activation;
 using System.Web;
 using Terrasoft;
 using Terrasoft.Common;
 using Terrasoft.Common.Json;
 using Terrasoft.Core;
 using Terrasoft.Core.DB;
 using Terrasoft.Core.Entities;
 using Terrasoft.Core.Store;
 using Newtonsoft.Json;
 
 using Terrasoft.Web.Common;
 
    [ServiceContract]
    [AspNetCompatibilityRequirements(RequirementsMode = AspNetCompatibilityRequirementsMode.Required)]
    public class UsrGreetingService : BaseService //,System.Web.SessionState.IReadOnlySessionState
    {
 
        [OperationContract]
        [WebInvoke(Method = "GET", UriTemplate = "Hello", RequestFormat = WebMessageFormat.Json, ResponseFormat = WebMessageFormat.Json)]
        public string TestHello()
        {
            return "Hello!!!!!!!!!!!!!!!!!";
        }
 
 
        [OperationContract]
        [WebInvoke(Method = "GET", RequestFormat = WebMessageFormat.Json, ResponseFormat = WebMessageFormat.Xml)]
        public string TestHelloXml()
        {
            return "Hello!!!!!!!!!!!!!!!!!";
        }
 
        [OperationContract]
        [WebInvoke(Method = "POST", RequestFormat = WebMessageFormat.Json, BodyStyle = WebMessageBodyStyle.Wrapped, ResponseFormat = WebMessageFormat.Json)]
        public string TestPostJson()
        {
            return "Hello!!!!!!!!!!!!!!!!!";
        }
 
 
 
 
 //       private UserConnection _userConnection;
  /// <summary>
  /// </summary>
// private UserConnection UserConnection {
//  get {
//   return _userConnection ?? (_userConnection = HttpContext.Current.Session["UserConnection"] as UserConnection);
 //  }
// }
    }
}

 

В результате попробовали отправить запрос через POSTMAN

1) Если указать метод GET без авторизационных Cookie, то всё работает

Как пример можно получить результат запроса по ссылке:

http://93.188.21.108:2022/0/ServiceModel/UsrGreetingService.svc/Hello

 

2) Указываем метод POST без авторизационных Cookie, то получаем 403:

 

 

Если же добавить к запросу(метод POST) авторизационные Cookie, то всё работает...

Коллеги, прошу подсказать, что именно делаем не так?

 

У меня такой же вопрос

2 комментария

Добрый день, 

Проверьте включена ли на сайте CSRF-защита. В внешнем и внутреннем Web.config есть атрибут UseCsrfToken, содержит значение true то можно поступить следующим образом: 

1. Изменить значение UseCsrfToken в Web.config и WebApp/Web.config на 

<add key="UseCsrfToken" value="false" />

2. В хедере запроса отправлять Csrf-токен. Следующим образов (в случае безавторизационного сервиса, авторизацитонные куки можно не отправлять):

Tsopa,

Спасибо большое! Решили проблему получением и отправкой

авторизацитонных куков!

Войдите или зарегистрируйтесь, чтобы комментировать
Вопрос

Здравствуйте.

Я заметил, что к OData в BPM можно обращаться используя basic authentication в заголовке запроса. Как можно сделать тоже самое для своего веб-сервиса? Я попробовал сделать сам, получая заголовок запроса, вытаскивая от туда данные basic authentication и пытался через класс AuthService сделать авторизацию, но у меня не получилось, т.к. в методе Login происходила ошибка.

У меня такой же вопрос

1 комментарий

Спасибо, помощь больше не нужна, разобрался сам. Если ,вдруг, кому нужно, то авторизовать пользователя можно вызвав метод RecreateUserConnection у класса SessionHelper и передав ему логин, пароль и др. данные.

Войдите или зарегистрируйтесь, чтобы комментировать
Вопрос

Здравствуйте !

Пожалуйста, подскажите, как решить следующую задачу.

В пользовательском пакете (управление конфигурацией) есть готовый исходный код веб-сервиса UsrSourceCode1. Как бизнес-процессу использовать написанный конфигурационный сервис и передать ему входные параметры?

Например, нужно посчитать сумму счетов по контрагенту. Из схемы раздела "Контрагент" запускается бизнес-процесс, передав входные параметры. В свою очередь, бизнес процесс обращается к сервису для подсчета суммы счетов. В веб-сервисе эта сумма считается, и результаты возвращаются бизнес-процессу.

Версия: bpm'online sales enterprise 7.8

У меня такой же вопрос

3 комментария

Здравствуйте,
Проверю кое-что и отвечу в соседней теме:
http://www.community.terrasoft.ru/forum/topic/24733
Незачем создавать дубли.

Здравствуйте!

Пример вы можете посмотреть в процессе CreateInvoiceFromOrder (Создание счета на основании заказа). В элементе "Задание-сценарий" вызывается метод CreateInvoice(). Этот метод вызывает метод CreateEntity() схемы OrderInvoiceHelper. Создание счета реализовано в схеме OrderInvoiceHelper.

Спасибо большое за ответ. Буду разбираться. Извините за дубли.

Войдите или зарегистрируйтесь, чтобы комментировать
Вопрос

Здравствуйте !

Пожалуйста, подскажите, как решить следующую задачу.
Есть бизнес-процесс UsrProcess1. В пользовательском пакете (управление конфигурацией) есть исходный код веб-сервиса UsrSourceCode1.

Как бизнес-процессу использовать написанный конфигурационный сервис и передать ему входные параметры?

Например, нужно посчитать сумму счетов по контрагенту. В веб-сервисе эта сумма считается, принимая на вход id контрагента. То есть нужно передать бизнес-процессу идентификатор контрагента и запустить сервис.

У меня такой же вопрос

3 комментария

Какая версия?

Здравствуйте.
bpm'online sales enterprise 7.8 пробная

Здравствуйте,
Если сервис создан в той же bpm’online что в БП, то просто можно создать экземпляр класса, и вызвать нужный вам метод. Пример привели в соседней теме, в комментарии:
http://www.community.terrasoft.ru/forum/topic/24735#comment-65599

Войдите или зарегистрируйтесь, чтобы комментировать
Вопрос

Здравствуйте !

Пожалуйста, подскажите, как решить следующую задачу.
Есть бизнесс-процесс UsrProcess1. В пользовательском пакете (управление конфигурацией) есть исходный код веб-сервиса UsrSourceCode1.

Как бизнесс-процессу использовать написанный конфигурационный сервис и передать ему входные параметры?
Например, нужно посчитать сумму счетов по контрагенту. В веб-сервисе эта сумма считается, принимая на вход id контрагента. То есть нужно передать бизнес-процессу идентификатор контрагента и запустить сервис.

У меня такой же вопрос

1 комментарий

Добрый день!
Прикрепил файл с описанием.
vyzov_metoda_veb-servisa.doc

Войдите или зарегистрируйтесь, чтобы комментировать
Вопрос

Здравствуйте.
Подскажите, пожалуйста, как можно решить проблему с веб-сервисом в bpmonline 5.4.
При компиляции ошибки: "Имя типа или пространства имен "ServiceModel" отсутствует в пространстве имен "System" (пропущена ссылка на сборку?)"
И соответственно: "Не удалось найти имя типа или пространства имен "ServiceContract" (пропущена директива using или ссылка на сборку?)"
Не использую EntityDataService.svc, так как нужен сервис, доступный без авторизации.

У меня такой же вопрос

2 комментария

Елена, возможно, Вы что-то неправильно заполнили в Using нового сервиса. См. как написан любой готовый сервис в конфигурации, например, CardService в коробке Loyalty 5.3.
Также см. статью.

Александр, спасибо. Помогло копирование библиотек в папку bin и добавление ссылок.

Войдите или зарегистрируйтесь, чтобы комментировать
Публикация

В SDK bpm'online дополнен раздел "Рекомендуемые средства интеграции".
Заходите на сайт Terrasoft Academy в раздел "Документация SDK" и узнайте как

Статьи расположены в разделе "Рекомендуемые средства интеграции".

Поделиться

10 комментариев

Добрый день!
Вопрос по статье "выполнить аутентификацию внешних запросов к веб-сервисам bpm'online". Что делать, если у пользователей ntlm-аутентификация (логин/пароль доменные) и нужно обратить к сервису OData?

Добрый день, Александр.

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

Сергей, не совсем понял, при чем тут страница логина.
Есть внешний код (в примере это код на C#), там жестко зашиты логин/пароль.
Вопрос: что зашивать, если логин/пароль доменные?

NTLM - аутентификация используется только через страницу логина.
В версиях 5.4, 7.6 и выше через аутентификационный сервис можно выполнить аутентификацию по логину/паролю пользователя в системе или по LDAP.

То есть, если у меня 5 пользователей, все доменные, то я не смогу создать например лид через OData, использую какую то внешнюю систему?

Вы не сможете этого сделать. В текущем случае рекомендуем настроить LDAP подключение к Вашему домену, и авторизоваться через LDAP.

Сергей,
я подключусь, авторизуюсь по LDAP из своего кода, а как потом обратиться к сервису (например добавить лид)? Он же попросит авторизацию логин/пароль, а я после авторизации только на уровне кода смогу проверить, что все ок, а пароль то все равно не смогу в сервис передать и он меня не пустит.

Александр, данная аутентификация не поддерживается.
Поддерживаются:
1. Basic
2. Cookie (если есть способ получить аутентификационные куки из bpm'online, выполняется с помощью auth-сервиса).

Добрый день!
Скажите, пожалуйста, правильно ли я поняла?
чтобы использовать протокол ODATA необходимо, чтобы был хотя бы один пользователь(администратор) НЕ с доменной авторизацией ?

Добрый день, Дарья!

Верно, для использования протокола OData необходим пользователь с обычной или ldap авторизацией.

Войдите или зарегистрируйтесь, чтобы комментировать
Вопрос

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

У меня такой же вопрос

5 комментариев

Спасибо за Ваше обращение. Мы зарегистрировали его в Службе технической поддержки и назначили специалиста, который сможет Вас компетентно проконсультировать по данному вопросу.

Здравствуйте, Эмин!
В продолжение комментария Максима Гриценко

"Maxim Gritsenko" написал:

Здравствуйте, Эмин.

В 7.x расчет счетчика уведомлений действительно изменился. Стало немного запутанней, но работает быстрее.
Теперь это представление в БД (VwRemindingsCount), которое хранит данные по уведомлениям. Из модуля панельки (LeftPanelTopMenuModule) отправляется запрос сервису напоминаний (RemindingService), который запускает процесс (GetRemindingCounters) выполняющий выборку из представления раз в минуту и передающий ответным запросом модулю панельки, который подписан на сообщения от этого процесса и получив сообщение обновляет счетчик.

По открытию страницы через веб-сервис ориентировок нет, это не приоритетная задача и в спринтах разработчиков я ее пока вообще не вижу.

можно переопределить LeftPanelTopMenuModule и в обработчике сообщения от процесса можно переходить на необходимую страницу. Однако, в 7.х это вызовет неудобства в работе пользователя, поэтому лучше открывать страницу активности хотя бы в другой вкладке, чтобы пользователь смог закончить работу на текущей странице, или просто вызывать "alert()" со ссылкой на страницу активности.

"Андрей Каспаревич" написал:

Здравствуйте, Эмин!


Спасибо за помощь.
Опишите, пожалуйста, как правильно переопределить LeftPanelTopMenuModule. Только начал разбираться с 7 версией BPM
При создании замещающего модуля и добавлении в него кода из родительского, кнопочки панели пропали

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

"Андрей Каспаревич" написал:


Огромное спасибо за помощь.

Войдите или зарегистрируйтесь, чтобы комментировать