В Real Estate появилась потребность создать 3 кастомных шаблона для заказчика. Нашел справочник "шаблоны email сообщений", попытался добавить свою запись и в ответ получил ошибку "недостаточно прав". Раздал права по умолчанию на объект - не сработало. Где-то тут на форуме советовали создать замещающий объект шаблонов, пробовал - тоже не помогло. Кто-нибудь сталкивался/есть идеи как решить проблему? Или редактирование шаблонов возможно только в Marketing?
В Real Estate появилась потребность создать 3 кастомных шаблона для заказчика. Нашел справочник "шаблоны email сообщений", попытался добавить свою запись и в ответ получил ошибку "недостаточно прав". Раздал права по умолчанию на объект - не сработало. Где-то тут на форуме советовали создать замещающий объект шаблонов, пробовал - тоже не помогло. Кто-нибудь сталкивался/есть идеи как решить проблему? Или редактирование шаблонов возможно только в Marketing?
Объект "Шаблоны email сообщений" лицензируется отдельно. Заместить не выйдет. Скину статью на создание шаблонов писем без использования справочника - может поможет.
В карточке задачи при нажатии на кнопку в CTI панели должно появляться уведомление с этой задачей. Делаю с помощью БП (добавляю запись в объект "Уведомления" с типом Notification). Но уведомление создается только если стоит галочка "Напомнить ответственному". Каким образом можно добавить уведомление, если напоминание в задаче отключено?
Я заполняю все поля, но, уведомление будет удалятся в любом случае при отсутствии галочки о напоминании. И единственный способ, судя по всему, - создавать еще одну активность, с которой создавать уведомление, а в таком случае переход по ссылке из CTI панели будет вести не на нужную мне активность. В общем будем пересматривать задачу, спасибо за участие :)
я должен еще передавать логин и пароль на вход в систему?
где должен быть прописан программный код внешнего приложения?
Как и где я могу создать Клиентский класс, реализующий логику работы с веб-сервисом ProcessEngineService.svc? (типа BPMonlineProcessEngineExample) - я не понимаю куда его добавлять. Спасибо!
Для вызова сервиса нужно быть авторизированным пользователем системы. При вызове сервиса с приложения, используются auth-кука. При вызове сервиса с другого приложения Вы можете использовать Basic-аутентификацию.
В данном случае, Вы будете использовать куки авторизации, при условии, что в последующих запросах будете передавать те куки, которые перешли в ответ на Ваш запрос.
Этот код Вам нужно добавить в Ваш класс, который вызывает сервис bpm'online и при первом запросе вызвать метод TryLogin с Вашим логином и паролем.
Если авторизация прошла успешно, то метод TryLogin вернет True, после этого при любом запросе к bpm'online передавать auth-куку.
Пример передачи куки:
// Включение использования cookie в запросе.
authRequest.CookieContainer = AuthCookie;
Теперь для запуска процессов bpm'online из внешнего приложения достаточно реализовать вызов соответствующих методов класса BPMonlineProcessEngineExample.
Пример программного кода внешнего приложения:
// Выполнение аутентификации пользователя с имененем UserName. if(BPMonlineProcessEngineExample.TryLogin("UserName", "UserPassword")){try{// Добавление нового контакта через запуск бизнес-процесса в системе.
BPMonlineProcessEngineExample.AddContact("Коваленко Петр Андреевич", "123-23-65");// Получение списка контактов через запуск бизнес-процесса в системе.
List<BPMonlineProcessEngineExample.BPMContact> bpmContacts =
BPMonlineProcessEngineExample.GetAllContacts();// Обработка полученного списка контактов.
foreach (var contact in bpmContacts){// Обработка данных контакта.}}catch(Exception e){// Обработка ошибок.}}
Это нужно писать на стороне стороннего приложения?
А как оно будет понимимать к какому сайту оно обращается? Можна получить пример полного кода на стороне стороннего приложения?
Я добавил Исходный код. Назвал его BPMonlineProcessEngineExample. В него поместил код
using System.IO;using System.Net;publicclass BPMonlineProcessEngineExample
{privateconst string processServiceUri ="<адрес приложения bpm'online>/0/ServiceModel/ProcessEngineService.svc/";privateconst string authServiceUri ="<адрес приложения bpm'online>/ServiceModel/AuthService.svc/Login";// Cookie аутентификации bpm'online.privatestatic CookieContainer AuthCookie =new CookieContainer();// Признак, прошла ли аутентификация пользователя на сервере bpm'online.// Если аутентификация прошла успешно, в свойстве AuthCookie будут лежать // аутентификационные cookie, сформированные сервисом.publicstaticbool IsAuthentificated
{
get {return(AuthCookie != null);}}// Метод для аутентификации запроса к веб-сервису bpm'online.// Параметры:// userName - имя пользователя bpm'online,// userPassword - пароль пользователя bpm'online.publicstaticbool TryLogin(string userName, string userPassword){// Создание экземпляра запроса к сервису аутентификации.
var authRequest = HttpWebRequest.Create(authServiceUri) as HttpWebRequest;// Определение метода запроса.
authRequest.Method="POST";// Определение типа контента запроса.
authRequest.ContentType="application/json";// Включение использования cookie в запросе.
authRequest.CookieContainer= AuthCookie;// Помещение в тело запроса учетной информации пользователя.using(var requesrStream = authRequest.GetRequestStream()){using(var writer =new StreamWriter(requesrStream)){
writer.Write(@"{
""UserName"":"""+ userName + @""",
""UserPassword"":"""+ userPassword + @"""
}");}}using(var response =(HttpWebResponse)authRequest.GetResponse()){if(AuthCookie.Count>0){returntrue;}}returnfalse;}// Метод запускает процесс ChangeOrderStatus, который меняет статус оплаты. // Процессу в качестве входящих параметров передаются номер заказа и Email.publicstaticbool ChangeOrderStatus(string OrderId, string Email){// Проверка, была ли выполнена аутентификация пользователя.if(!IsAuthentificated){returnfalse;}// Формирование строки запроса к веб-сервису для запуска процесса AddNewExternalContact, // которому передаются значения входящих параметров ContactName и ContactPhone.
string requestString = string.Format(processServiceUri +"ChangeOrderStatus/Execute?OrderId={0}&Email={1}",
OrderId, Email);
HttpWebRequest request = HttpWebRequest.Create(requestString) as HttpWebRequest;// Определение метода запроса.
request.Method="GET";// В запрос включаются аутентификационные cookie, которые были получены от // сервиса аутентификации bpm'online.
request.CookieContainer= AuthCookie;// Получение ответа от сервиса и обработка результатов.using(var response = request.GetResponse()){// Обработка результатов выполнения запроса.}returntrue;}}
Какие мои действия дальше? Как учесть этот мой код в запросе от стороннего приложения?
Здравствуйте! У меня получилось отправлять данные из внешнего источника. Я таким образом создаю в системе новые контакты. И если я в БП передаю два параметры, то все занимает 2-3 секунды на обработку такого запроса. Но вот если я передаю 120 параметров и в БП сделал Создание контакта где эти поля присваьваю в контакт, то такой запрос выполняется только один раз в минуту. Тоисть за час я могу таким образом передать только 60 контактов. Можна как-то ускорить это дело? Спасибо!
Элемент "Добавить данные" записывает данные через ESQ. Вы можете записывать данные напрямую в БД элементов "Задание-сценарий" (через CustomQuerry), но тогда:
Права на записи не будут раздаваться (в случае администрирования по записям)
Процессы, которые запускаются при создании контакта, запускаться не будут
Также для ускорения работы процесса Вы можете поставить признак "Принудительная компиляция" и после сохранения скомпилировать процесс. Данное действие также может ускорить выполнение процесса (теоретически).
Добрый день, я пользуюсь версией bpm'online 7.6 . Возникла надобность в Карточке редактирования Заказа возможности редактирования имени текущего контакта, который связан с заказом полем ContactId. Хотелось бы с заказа не переходить в Контакт и там его редактировать, а сразу делать изменения в имени прямо из карточки заказа. Подскажите, каким способ это можно решить?
Одним полем, а именно стандартным лукап полем этого не сделать, но вы можете рядом с ним разместить текстовое поле. Назвать его как-то, к примеру «Имя контакта», привязать его к атрибуту текстовому. В методе onEntityInitialized и в методе изменения лукапного контакта, заполнять «Имя контакта» значением имени контакта, через запрос esq, или прямо из значения лукапа.
А уже при изменении вашего «Имя контакта», в событии изменения атрибута «Имя контакта», брать, и через esq, апдейтить имя контакта в объекте контакта, получая его id из главного лукап поля. И, после изменения, обновлять значение лукапного поля.
Стоит ли, конечно, возможность быстро переименовать поле, не переходя в карточку контакта, лишнего поля на форме заказа, вам решать.
Если возникнут точечные вопросы в процессе разработки, пишите, подскажем.
Сделал 2 текстовых виртуальных поля "ФИО контакта" и "телефон" в "OrderPageV2", по вашим инструкциям, при инициализации все подтягивает, при сохранении ("onSaved" ) записывает редактируемые данные в текущий контакт. Все работает. А вот как сделать маску и валидацию для поля "телефон" в "OrderPageV2" из данного примера? В документации только описана возможность базовой валидации контакта в карточке Контакта. Если можно, скиньте пример кода.
На сколько я могу видеть, в базовом функционале поля ввода телефона не используют маску, но вы можете написать свой контрол с маской, или использовать наработки ниже:
Инструкция: mask.docx
Код модуля который необходимо добавить как модуль у себя в конфигурации: multimaskedit.txt
И тот же самый код только в ворде так как рус. символы превратились в зюки в тхт: multicodeinword.docx
Здравствуйте! Подскажите пожалуйста как автоматизировать распределение Лидов между менеджерами. Допустим из одного Лендинга попадают клиенты, которыми занимаются три менеджера. Как мне равномерно распределять этих клиентов между менеджерами (в бизнес процессе)? Спасибо!
Для соответствующего распределения между менеджерами Вы можете реализовать алгоритм, используя "Задание-сценарий".
Реализацию алгоритма можно придумать самостоятельно или найти примеры в сети.
Я бы попробовал сделать следующим образом - перед распределением проверять количество лидов на каждом из трех менеджеров и назначать на того, у кого меньше:) При равном количестве алгоритм будет назначать первого попавшегося.
Есть Портал самообслуживания, доступный по адресу http://[server]/SSPLogin.aspx. В нем есть ссылка "Зарегистрироваться" для регистрации нового пользователя, с адресом http://[server]//0/Nui/UserManagement.aspx?action=register. По идее, на этой странице я должен увидеть кучу разных полей, необходимых для регистрации нового пользователя. Вместо этого - получаю пустую страницу. При просмотре "исходника" в браузере:
<br />
<br />
Что и где нужно настроить, чтобы таки отобразились необходимые поля? Или что я делаю не так?
Добрый день, Евгений!
Да, данный функционал присутствует и он неоднократно был протестирован.
Для корректной настройки его, необходимо выполнить все шаги в прикрепленной инструкции(во вложении).
Настроить страницу - недостаточно, необходимо еще редактировать config.
1. В <configuration><appSettings> проверить наличие или добавить, если отсутствует:
<!-- LicPackageName = Ваша лицензия и в зависимости от продукта она разная --><add key="SspUserRegistrationLicPackage" value ="{LicPackageName}"/><!-- User1 и Password1 = имя и пароль пользователя, от чьего имени будет выполняться переход на страницу регистрации на портале. Этот пользователь должен быть максимально ограничен в правах и ему будет автоматически закрыт доступ на другие страницы системы. --><add key="UserManagementSauName" value ="{User1}"/><add key="UserManagementSauPassword" value ="{Password1}"/>
2. В <configuration> в разделе пакета/приложения найти <auth> и в параметр "providerNames" добавить значение (Если уже что-то есть, то через запятую) "SSPUserPassword". Получиться, например:
4. В <configuration><system.webServer><defaultDocument><files> заменить <add value="NuiLogin.aspx"/> на <add value="SSPLogin.aspx"/>
Все заработало. А теперь задачка усложняется:
1. может быть несколько вариантов регистрации, скажем так даже различные группы Пользователей. Можно ли такое сделать?
2. в карточке регистрации мне нужно изменить набор полей. Например, убрать Имя/Фамилия и добавить номер телефона. Это в конфигураторе можно сделать?
Евгений,
1. Нет. Страница предназначена для регистрации пользователей портала, а пользователю портала недоступны группы.
2.Если под конфигуратором имеет ввиду мастер разделов, то нет, нельзя, это aspx страница.
Александр,
немного поковыряв конфигуратор, нашел пакет SSP 7.7.0. В нем есть нечто похожее на работу страницы регистрации. И регистрация, там сделана как ВэбСервис C# UserManagementService, а JavaScript UserManagementModule и Registration выступают, как коннекторы.
Я могу попробовать реализовать альтернативный сервис, который заместит текущий?
Евгений, не уверен насчет заместить, но вызвать свой вы точно сможете в Registration вызов происходит в:
сallServiceMethod('Register', registerCallback, userManagementToken, this);
при этом сallServiceMethod определен здесь же как:
var callServiceMethod = function(name, callback, data, scope) {
Terrasoft.AjaxProvider.request({
url: Terrasoft.workspaceBaseUrl + '/rest/UserManagementService/' + name,
headers: {
'Accept': 'application/json',
'Content-Type': 'application/json'
},
method: 'POST',
jsonData: data,
callback: function(request, success, response) {
var responseObject = {};
if (success) {
responseObject = Terrasoft.decode(response.responseText);
}
callback.call(this, success, responseObject);
},
scope: scope
});
};
то есть вы можете вместо текущего сервиса, вызвать свой при желании
Александр, что-то не получается.
Я сделал замещающую схему Registration (SSP 7.7.0), в ней описал нужную логику, а вместо нее упорно подтягивается старая. Что я делаю не так?
То же самое и для UserManagementModule (SSP 7.7.0).
Евгений, я изначально сомневаюсь в реализуемости задуманного, но тем менее обратите внимание что Registration это модуль, а не схема страницы, замежать нужно как модуль, вызов модуля происходит здесь в UserManagementModule:
switch (Terrasoft.action) {
case 'register':
sandbox.loadModule('Registration', {
renderTo: renderTo,
id: sandbox.id + '-Registration',
keepAlive: true
});
break;
}
Попробуйте перезапустить пулл, почистить все кешивозможно, что-то где-то кешируется, возможно где-то в вебконфиге указывается напрямую айди схемы
Александр, да были проблемы с кэшем. Это все устранилось.
Сделал переопределение модуля UserManagementModule. Он сработал.
Но, при попытке загрузить созданный (не переопределенный!) модуль RegistrationV2 оно выдает такое:
core.js:674 WebSocket connection to 'ws://136.243.12.186:2011/0/Nui/UserManagement.aspx?action=register' failed: Error in connection establishment: net::ERR_CONNECTION_TIMED_OUT
define('RegistrationV2', ['ext-base', 'terrasoft', 'sandbox', 'RegistrationResources'],
function(Ext, Terrasoft, sandbox, resources){// пока тут лежит код идентичный Registration});
Если вернуть обратно Registration - все работает.
Мне просто нужно сделать два варианта регистрации (отличаются полями), потому возникла эта идея с различными модулями.
Судя по всему виснет здесь:
sandbox.loadModule('RegistrationV2', {
renderTo: renderTo,
id: sandbox.id + '-Registration',
keepAlive: true
});
Думаю, что проблема я этой строке:
id: sandbox.id + '-Registration'
Все, подтянулось.
Заголовок модуля в RegistrationV2 должен выглядеть так:
define('RegistrationV2', ['ext-base', 'terrasoft', 'sandbox', 'RegistrationV2Resources'],
function(Ext, Terrasoft, sandbox, resources){// пока тут лежит код идентичный Registration});
то есть resources должен принимать значение не RegistrationResources, как вначале, а RegistrationV2Resources
При замещении модулей все ресурсы надо пересохранять, они не подтягиваются. Достаточно просто поставить пробел(он уберется) в каждой локализированной строке
Правлю конфиги в соответсвии с приложеным файлом.
Я правильно понию, что Loader это Web.config в корне сайта, а конфиг приложения это Terrasoft.WebApp\Web.config?
В итоге при запуске IIS получаю страницу авторизации, ввожу логин/пароль (и супервизор, и портальный пользователь) и получаю ошибку:
Ошибка HTTP 500.19 - Internal Server Error
Запрашиваемая страница не доступна из-за неверной конфигурации данных для этой страницы.
Добрый день, Ольга!
Проверил Ваши файлы, исправьте, пожалуйста:
В файле Web_1.config:
В строке SspUserRegistrationLicPackage уберите скобки в имени лицензии, строка должна иметь вид:
Файл Web_2.config такой же, как и Web_1.config, оба файла - это web.config Loader-а.
Файл приложения находится в папке Terrasoft.WebApp и он имеет совсем другое наполнение!
В нем необходимо прописать только:
Ольга, прошу прощение, не все отобразилось.
Я имел ввиду, что в файле Web.config приложения, которое находится в папке Terrasoft.WebApp необходимо прописать только:
""UserManagementSauName" value ="Логин" />
""UserManagementSauPassword" value ="Пароль" />
После внесенных изменний сайт запускается, открывается страница SSPLogin.aspx, при нажатии Зарегистрироваться открывается страница регистрации. Вроде все ок. Но, есть пользователь, ему назначена лицензия портала, при логине ввожу логин/пароль, но меня не пускает на портал, а перебрасывает на страницу NuiLogin.aspx, ошибок никаких не пишет.
Ольга, я исследовал Ваши файлы, сейчас не вижу причин указанного Вами поведения.
Я вижу из конфигов, что пользователь UserOOVR - это пользователь, который должен раздавать лицензию для новых зарегистрированных.
Проверьте, он является портальным пользователем и выдана ли ему лицензия портала.
Самое интересное, создаю нового пользователя, даю ему портальную лицензию, все хорошо работает, логин происходит на портал. а именно UserOOVR не пускает..
И при регистрации пользователя на портале выходит ошибка: "На указанный электронный адрес не удалось отправить письмо для продолжения регистрации. Проверьте корректность введенного email...." Хотя из веб-интерфейса я отправляю письма без проблем. Куда копать?
Ольга, проверьте корректность параметров, которые должны быть указаны в системных настройках.
В предоставленной мной ранее инструкции есть пункт:
"В разделе "Системные настройки" указать корректные значения для всех настроек группы "Отправка e-mail сообщений"
В качестве имени пользователя должен быть указан адрес электронной почты, с которого будет производится рассылка писем для подтверждения регистрации и восстановления пароля"
Необходимо настроить согласно параметров подключения SMTP Вашего сервера.
Ольга, проверьте корректность параметров, которые должны быть указаны в системных настройках.
В предоставленной мной ранее инструкции есть пункт:
"В разделе "Системные настройки" указать корректные значения для всех настроек группы "Отправка e-mail сообщений"
В качестве имени пользователя должен быть указан адрес электронной почты, с которого будет производится рассылка писем для подтверждения регистрации и восстановления пароля"
Необходимо настроить согласно параметров подключения SMTP Вашего сервера.
Добрый день! У нас аналогичная проблема, при регистрации пользователя на портале выходит ошибка: "На указанный электронный адрес не удалось отправить письмо для продолжения регистрации. Проверьте корректность введенного email". Настроили всё по вашей инструкции. В качестве Имени пользователя SMTP-сервера указали адрес электронной почты, с которого будет производится рассылка писем. Через интерфейс письма отправляются нормально. Можете по конкретнее написать какие настройки можно проверить?
Антон, добрый день!
Вам необходимо проверить корректность всех системных настроек, которые входят в группу "Отправка email сообщений", а именно:
"E-mail службы поддержки" - указать email с которого будет производится отправка.
"Имя или IP-адрес SMTP-сервера" - указать значение SmtpHost, например, smtp.gmail.com - это для почтового сервера gmail. Данные для Вашего почтового сервера Вы можете узнать в интернете или, в случае использования Exchange - Вам необходимо их запросить в администратора почтового сервера.
"Имя пользователя SMTP-сервера" - здесь указывается ящик, от имени которого будет производится автоматическое подключение к почтовому серверу.
"Пароль пользователя SMTP-сервера" - пароль от ящика, который Вы указали в системной настройке "Имя пользователя SMTP-сервера".
"Порт SMTP-сервера" - собственно порт SMTP сервера, необходимо указать порт, который будет корректно работать с протоколом SSL.
Данные системные настройки необходимы для того, чтоб система могла автоматически использовать Ваш почтовый сервер для отправки автоматических уведомлений. Ситуация, когда Вы можете отправить сообщение вручную, свидетельствует о том, что в целом интеграция с почтой у Вас настроена корректно, но для автоматических сообщений этого еще недостаточно.
Хорошего Вам дня!
В документации примеров создания и использования контролов нет. Но у нас есть некоторые примеры, которые мы можем предоставить. Только желательно получить хоть какое-то описание, что именно Вы хотите сделать.
"Вильшанский Дмитрий" написал:примеров создания и использования контролов нет
Очень жаль.
"Вильшанский Дмитрий" написал:получить хоть какое-то описание, что именно Вы хотите сделать
Нужна кнопка "Сделать фото" которая откроет камеру моб.устройства и после фотографирования положит фото в деталь "Файлы активности" (так де нужно переименовать фото).
AlexLS, думаю что данная задача очень трудоямка, так как добавление подобных кнопок выполняется не через манифест приложения а через само ядро. Темболее добавлением просто кнопки мы вряд ли ограничимся - нужно будет дописывать дополнительную логику чтобы определять к какой записи привязывать созданый файл, а если кнопка будет не в карточке объекта - то еще и определять объект по которому делаем фото. Как эти фото в дальнейшем будут отображатся и куда попадать в основной конфигурации?
Соответсвенно более оптимальная реализация с точки зрения удобство\трудозатраты - это все же на запись, к которой вы хотите прикрепить файлы, добавить деталь и стандартным функционалом прикреплять файлы.
Здравствуйте. У меня в бизнесс процессе в один элемент входят несколько ветвлений. И если хотя б одна срабатывает, то создается счет. Как мне сделать так чтобы если сработают две или три входящие ветки счет создавался только один. Спасибо.
Не могу понять никак. Вот У меня два из трех процессов пришли к "Исключающее ИЛИ". И каким условием мне сделать чтобы дальше процес пошел только раз к счету?
Необходимо сделать полную выгрузку контрагентов со всеми возможными полями и id. Делать приходится через БД напрямую. Вопрос такой:
В какой таблице БД хранятся справочники?
Справочники в системе создаются на основе объектов. Для каждого справочника отдельный объект и, как следствие, отдельная таблица в БД. Чтобы понять, что это за таблица, можно открыть свойства справочника в соответвующем разделе, взять значение из поля Объект.
По этому значению в конфигурации ищем название объекта, и выбираем данные selectом из БД.