Настраиваю почтовый ящик.
Если же регистрирую на Email вида myemail@gmail.com - то после того как надал доступ к ненадежным приложениям и enable Imap - все создалось и подключилось.
Если же регистрирую на корпоративную почту (тоже на Gmail) вида myemail@mycompany.ru и проделываю те же шаги - всеравно не пропускает и пишет неверный логин или пароль или не настоенныя доступ ненадежным приложениям.
Здравствуйте! После внесенных правок Лендинг заработал. Но почемуто создается сразу по ДВА единтичных контакта в карточке контакты. А если убрать галочку в Лендинге (создавать контакт) то вообще не создает ни одного. Как это починить? Спасибо!
В Ваше приложение были внесены исправления. На сейчас при установленном признаке "Создавать контакт" создается один контакт, связанный с лидом. В случае, если этот признак отключен, контакт не создается.
Здравствуйте! Интересует такой момент.
Вот допустим есть бизнесс процесс и в нем есть поле чтение данных по некоторому условию. Если в ходе выполнения процесса этот элемент не находит соответствующюю условиям запись, то в журнале процессов выдает ошибку и процесс останавливается.
Можна ли как-то обработать эту ошибку в процесе? Тоисть, если элемент чтение данных выдает ошибку, то процесс не останавливается, а переходит на другую ветку процесса где создает новую запись, соответствующую условиям проверки в элементе чтения данных, где произошла ошибка.
Добрый день!
Для таких случаев используйте условные потоки и дополнительные проверки на наличие записей.
Исключения можно обрабатывать только в элементе Задание-сценарий.
А как я могу сделать проверку в условном потоке, если я проверяю допустим счет. Я читаю данные счет и по названию фильтрую. Но если такого нет, то Читать данные выдает ошибку и все. Процес останавливается.
Добрый день В карточке есть поле, к-ые заполняется произвольный значением (т.е. не берется из какого-либо справочника). Подскажите, как на С# написать условие если это поле не заполнено.
В 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
Допустим, есть некоторое значение в поле карточке.
Подскажите, пожалуйста, на C# как можно "вытащить" значения только тех символов в этом значении, к-ые третий и четвертый по порядку (слева направо). Заранее спасибо