Вопрос

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

Мне необходимо внести изменения в базовый конфигурационный сервис 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, а также в приложенном документе.

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


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

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

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

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

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

Эмин,

Работа с визуальными элементами при запущенном с помощью веб-сервиса процессе будет возможна только в 7.х, доработка в планах.
На 5.х она спускаться не будет, ввиду больших трудозатрат на адаптацию.

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

Эмин,

Работа с визуальными элементами при запущенном с помощью веб-сервиса процессе будет возможна только в 7.х, доработка в планах.
На 5.х она спускаться не будет, ввиду больших трудозатрат на адаптацию.


Тогда подскажите, пожалуйста, как можно реализовать работу с визуальными элементами в BPM 5.4 по сигналу из другого приложения без использования веб-сервиса?
И еще вопрос. Возможен ли следующий алгоритм?
Процесс 1 создает запись о контакте в базе через EntitySchemaQuery при запуске по веб-сервис
Процесс 2 подписан на событие создание контакта с условием, и если условие совпадает, то открывается карточка созданного контакта.
Как нужно добавлять запись в БД, чтобы был запущен процесс по событию?

Эмин,

Риквест процессу2 приходит не от страницы, соотв. нет страницы и рендерить некуда, поэтому никак не получится вызвать визуальный элемент "извне".
Максимум, как можно известить пользователя - это установить ему задачу в расписание.

"Maxim Gritsenko" написал:
Максимум, как можно известить пользователя - это установить ему задачу в расписание.

Хорошо, а возможно прописаться на вызов функции, которая проверяет задачи в расписании и расширить ее функционал, или добавить вызов своей функции?

В процессе страницы MainPage, в PageLoadCOmpleteScriptTask собирается js скрипт по обновлению счетчиков уведомлений. Можете вклиниться в этот процесс и добавить, извещение пользователя по выполнению каких-либо условий.

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

В процессе страницы MainPage, в PageLoadCOmpleteScriptTask собирается js скрипт по обновлению счетчиков уведомлений. Можете вклиниться в этот процесс и добавить, извещение пользователя по выполнению каких-либо условий.


Огромное спасибо! Подскажите пожалуйста, как нужно добавить код, который будет затем вызван ajax'ом из javascript'a

Я условие создавал на c# - больше возможностей. А потом просто собирал строку с кодом и вставлял в переменную со скриптом.

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

Я условие создавал на c# - больше возможностей. А потом просто собирал строку с кодом и вставлял в переменную со скриптом.


Немного не то)
Опишу ситуацию подробнее. По веб-сервису запускается процесс, который сохраняет задачу и связывает ее с контактом и ответственным. Теперь для пользователя необходимо открыть карточку задачи. Мы выяснили, что визуализация процессов через веб-сервис не возможна.
И появилась следующая идея, дописаться в яваскрипт на MainPage, и каждые n сек вызывать метод, а уже данный метод будет запускать процесс, который найдет новую задачу для пользователя и откроет карточку этой задачи.
Возможно ли это?
Подскажите, пожалуйста, как правильно добавить такой метод, чтобы затем вызвать его из яваскрипта по ajax

В 5.х нет таймера, так что раз в n секунд не получится. PageLoadComplete мейнпейджа отрабатывает при его загрузке, то есть, при переходе между разделами. Вызвать процесс из карточки, который сумеет отобразить визуальный элемент можно так:

var manager = UserConnection.ProcessSchemaManager;
var processSchema = manager.GetInstanceByName("MyProcess");
var process = processSchema.CreateProcess(UserConnection);
process.Execute(Page.UserConnection);

Так что получится уведомлять активных пользователей, которые "ходят" по системе.

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

В 5.х нет таймера, так что раз в n секунд не получится. PageLoadComplete мейнпейджа отрабатывает при его загрузке, то есть, при переходе между разделами.

...

Так что получится уведомлять активных пользователей, которые "ходят" по системе.


Спасибо!
В javascript коде, который добавляется на PageLoadComplete есть функция checkRemindingExists() и функция setInterval (checkRemindingExists, " + remindingsCheckInterval + @");
Как я понимаю, данные функции осуществляют проверку напоминаний по интервалу. Мне по аналогии необходимо запустить БП из javascript. Как я могу это сделать?

Эмин,

Нашел такую штуку:

Из клиентского кода можно отправить сообщение в процесс страницы:

window.Terrasoft.AjaxMethods.ThrowClientEvent(processUId, message);

В процессе можно создать событийный подпроцесс, в нем начальное сообщение и задание-сценарий, в котором вызов бизнес процесса:

var manager = UserConnection.ProcessSchemaManager;
var processSchema = manager.GetInstanceByName("MyProcess");
var process = processSchema.CreateProcess(UserConnection);
process.Execute(Page.UserConnection);

На PageLoadComplete в ScriptManager передавать вызов своей функции с интервалом вызова:

По идее, это то, что вам нужно. Но, мне кажется, открывать окна юзерам - не лучшая практика.

Спасибо огромное! Все работает!
P.S. Не все обращают внимание на колокольчик, а если там уже были какие-то цифры, то иногда не очевидно поступила новая задача или нет. А окно привлечет внимание.

Вам решать =)

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

Добрый день, Максим!
Подскажите пожалуйста где в BPMOnline 7.X осуществляется обновление счетчика уведомлений. Насколько я понял, страница MainPage теперь не осуществляет данный функционал (там закомментирован js-код для счетчика)

Также вы писали, что в 7.X планируется открытие страницы через веб-сервис. Реализован ли данный функционал в 7.1. Если да, то как его можно прмиенить. Т.к. при открытие карточки в БП, который запускается по веб-сервису, БП отрабатывает, но страница не открывается.

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

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

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

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

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

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


Спасибо, разобрался.
Не получается открыть страницу по процессу в новом окне. Создал процесс, который по аналогии вызывается в модуле панельки. Данный процесс должен открывать страницу активности. Но страница открывается на основной странице, можно ли как-то в БП указать открыть в новой вкладке, или в новом окне (как это было в 5.4)?

Из процесса открыть в новой вкладке/окне не выйдет. Можно попробовать открыть страницу, которая при загрузке открывает страницу активности в новой вкладке. Правда, пахнет костылем.
Или можно переопределить модуль панельки, чтобы он при получении сообщения кроме изменения счетчика еще и открывал страницу активности в новой вкладке. Но это тоже костыль, потому что при накатке обновлений они не доедут на переопределенный модуль.

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

Из процесса открыть в новой вкладке/окне не выйдет. Можно попробовать открыть страницу, которая при загрузке открывает страницу активности в новой вкладке. Правда, пахнет костылем.
Или можно переопределить модуль панельки, чтобы он при получении сообщения кроме изменения счетчика еще и открывал страницу активности в новой вкладке. Но это тоже костыль, потому что при накатке обновлений они не доедут на переопределенный модуль.


Я так понимаю, что при переопределении модуля необходимо полностью перенести код из базового LeftPanelTopMenuModule в новый. Все перенес, но не могу добавить Images(где хранятся картинки этих иконок?)
Возможно ли уменьшить время запуска счетчика активностей?

Перенести код и использовать свои локализированные строки/изображения. Изображения хранятся в файлах ресурсов, так что, скорее всего, придется нарезать собственные.

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

Перенести код и использовать свои локализированные строки/изображения. Изображения хранятся в файлах ресурсов, так что, скорее всего, придется нарезать собственные.


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

Подскажите, КАК запустить процесс по веб-сервису.

Акмаль, вот ссылка на статью в SDK:
http://www.terrasoft.ru/bpmonlinesdk/WorkWithBpmByWebServices.html

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