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

Настраиваю почтовый ящик.
Если же регистрирую на Email вида myemail@gmail.com - то после того как надал доступ к ненадежным приложениям и enable Imap - все создалось и подключилось.

Если же регистрирую на корпоративную почту (тоже на Gmail) вида myemail@mycompany.ru и проделываю те же шаги - всеравно не пропускает и пишет неверный логин или пароль или не настоенныя доступ ненадежным приложениям.

Как можна решить эту проблему?
Спасибо!

Нравится

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

Здравствуйте. Не работает Лендинг.
Если перейти по ссылке serviceUrl:

https://goldcoachcrm.bpmonline.com/0/ServiceModel/GeneratedWebFormServic...

то выдает ошибку Method not allowed.

Месяц назад все работало, а теперь что-то перестало. Что это может значить и как это починить? Спасибо!

Нравится

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

Добрый день!

Для решения этого вопроса необходимо заменить ссылку в коде лендинга (на сайте, где расположена форма)
С ссылки:
http://call-center.extremehealth.ru/create-lead.js ( в коде лендинга указана сслыка: https://webtracking-v01.bpmonline.com/JS/create-lead.js)
На ссылку:
http://ajax-lib.bpmonline.com/marketing/7.6.0/create-lead.js

Приятной работы!

Здравствуйте! После внесенных правок Лендинг заработал. Но почемуто создается сразу по ДВА единтичных контакта в карточке контакты. А если убрать галочку в Лендинге (создавать контакт) то вообще не создает ни одного. Как это починить? Спасибо!

Добрый день!

В Ваше приложение были внесены исправления. На сейчас при установленном признаке "Создавать контакт" создается один контакт, связанный с лидом. В случае, если этот признак отключен, контакт не создается.

Приятной работы!

Євген, добрий день!

 

Чи доданий у вас повністю код:

<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.11.2/jquery.min.js"></script>

<script src="https://webtracking-v01.bpmonline.com/JS/track-cookies.js"></script>

<script src="https://webtracking-v01.bpmonline.com/JS/create-object.js"></script>

<script>
?

 

Показать все комментарии

Здравствуйте!
Интересует такой момент.
Вот допустим есть бизнесс процесс и в нем есть поле чтение данных по некоторому условию. Если в ходе выполнения процесса этот элемент не находит соответствующюю условиям запись, то в журнале процессов выдает ошибку и процесс останавливается.

Можна ли как-то обработать эту ошибку в процесе? Тоисть, если элемент чтение данных выдает ошибку, то процесс не останавливается, а переходит на другую ветку процесса где создает новую запись, соответствующую условиям проверки в элементе чтения данных, где произошла ошибка.

Спасибо.

Нравится

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

Добрый день!
Для таких случаев используйте условные потоки и дополнительные проверки на наличие записей.
Исключения можно обрабатывать только в элементе Задание-сценарий.

А как я могу сделать проверку в условном потоке, если я проверяю допустим счет. Я читаю данные счет и по названию фильтрую. Но если такого нет, то Читать данные выдает ошибку и все. Процес останавливается.

Добрый день!

Как вариант:
После чтения данных добавить условный поток.
[#Читать данные. Id#] != Guid.Empty

Показать все комментарии

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

Правильно ли:
if (Page.PoleEdit.Value != null)

?

Нравится

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

Здравствуйте, Татьяна!

По вопросам, связанным с регулярными выражениями C#, рекомендую обратиться на форумы по данному языку программированию.

P.S. Для разных типов полей проверка пустое оно или нет будет производиться по-разному.

А тип данных какой в поле?

В терасофтовских модулях есть такие подходы к проверке:
String.IsNullOrEmpty или String.IsNotNullOrEmpty

"Александр Кудряшов" написал:Тип данных - строка

Показать все комментарии

В Real Estate появилась потребность создать 3 кастомных шаблона для заказчика. Нашел справочник "шаблоны email сообщений", попытался добавить свою запись и в ответ получил ошибку "недостаточно прав". Раздал права по умолчанию на объект - не сработало. Где-то тут на форуме советовали создать замещающий объект шаблонов, пробовал - тоже не помогло. Кто-нибудь сталкивался/есть идеи как решить проблему? Или редактирование шаблонов возможно только в Marketing?

Нравится

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

"Варфоломеев Данила Викторович" написал:

В Real Estate появилась потребность создать 3 кастомных шаблона для заказчика. Нашел справочник "шаблоны email сообщений", попытался добавить свою запись и в ответ получил ошибку "недостаточно прав". Раздал права по умолчанию на объект - не сработало. Где-то тут на форуме советовали создать замещающий объект шаблонов, пробовал - тоже не помогло. Кто-нибудь сталкивался/есть идеи как решить проблему? Или редактирование шаблонов возможно только в Marketing?

Подписаться на обновления этого материала

Объект "Шаблоны email сообщений" лицензируется отдельно. Заместить не выйдет. Скину статью на создание шаблонов писем без использования справочника - может поможет.

Показать все комментарии

В карточке задачи при нажатии на кнопку в CTI панели должно появляться уведомление с этой задачей. Делаю с помощью БП (добавляю запись в объект "Уведомления" с типом Notification). Но уведомление создается только если стоит галочка "Напомнить ответственному". Каким образом можно добавить уведомление, если напоминание в задаче отключено?

Нравится

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

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

Необходимо заполнять поля "Кому", "Время", "Заголовок", "Объект", "Уникальный заголовок". И уведомления должно быть по задаче не в конечном состоянии.

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

Здравствуйте, Олег!

Попробуйте заполнить дополнительно поле "Тип уведомления" (RemindingType). Выберите из справочника "Уведомление" (Reminding).

Я заполняю все поля, но, уведомление будет удалятся в любом случае при отсутствии галочки о напоминании. И единственный способ, судя по всему, - создавать еще одну активность, с которой создавать уведомление, а в таком случае переход по ссылке из CTI панели будет вести не на нужную мне активность. В общем будем пересматривать задачу, спасибо за участие :)

Показать все комментарии

Здравствуйте.
Пробую запускать процессы через веб-сервис как написано в http://academy.terrasoft.ru/documents/docs/technic/SDK/7.7.0/WorkWithBpm...

Делаю запрос об оплате счета. Он имеет вид https://mysystem.bpmonline.com/0/ServiceModel/ProcessEngineService.svc/C...

Если я делаю его со своего компа, то все работает. Если из друго приложения - нет.

Этот запрос мне нужно делать из стороннего приложения. И оно меня выбрасывает на страницу входа в систему.

В этой же статье есть Пример запуска бизнес-процессов bpm'online из внешнего приложения.
Но я не совсем понимаю всей картины.

Что именно мне нужно сделать? Подскажите пошагово, что и куда дописать?

Я так понимаю, что в этом запросе из стороннего приложения https://mysystem.bpmonline.com/0/ServiceModel/ProcessEngineService.svc/C...

я должен еще передавать логин и пароль на вход в систему?
где должен быть прописан программный код внешнего приложения?
Как и где я могу создать Клиентский класс, реализующий логику работы с веб-сервисом ProcessEngineService.svc? (типа BPMonlineProcessEngineExample) - я не понимаю куда его добавлять. Спасибо!

Нравится

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

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

Для вызова сервиса нужно быть авторизированным пользователем системы. При вызове сервиса с приложения, используются auth-кука. При вызове сервиса с другого приложения Вы можете использовать Basic-аутентификацию.

Я так понимаю, мне достаточно перед этим запросом https://mysystem.bpmonline.com/0/ServiceModel/ProcessEngineService.svc/… сделать запрос аутентификации
http(s)://mysystem.bpmonline.com/ServiceModel/AuthService.svc/Login

и передать параметры

Content–Type: application/json
Authorization: Basic <Имя пользователя>:<Пароль пользователя>
в кодировке Base64?

и тогда все заработает? Или нет?

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

Подробней об аутентификации Вы можете узнать перейдя по ссылке:
http://academy.terrasoft.ua/documents/docs/technic/SDK/7.7.0/RequestAut…

А можна более детальнее как мне передать те куки которые перешли в ответ на первый запрос в следующий запрос?

А по поводу статьи -
1) Добавьте в блок usings пространства имен System.IO и System.Net:

2) Создайте класс, в который добавьте следующие поля:

3) Добавьте в созданный класс метод для аутентификации через сервис AuthService.svc:

Вопрос: Куда я должен прописать этот код? Где и как создать этот класс? Спасибо.

Этот код Вам нужно добавить в Ваш класс, который вызывает сервис bpm'online и при первом запросе вызвать метод TryLogin с Вашим логином и паролем.
Если авторизация прошла успешно, то метод TryLogin вернет True, после этого при любом запросе к bpm'online передавать auth-куку.
Пример передачи куки:
// Включение использования cookie в запросе.
authRequest.CookieContainer = AuthCookie;

А как создать клас? (извините за тупой вопрос)

Конфигурация - Добавить - Исходный код? Или как?

Добрый день!

"Сергиенко Николай Петрович" написал:

А как создать клас? (извините за тупой вопрос)

Конфигурация - Добавить - Исходный код? Или как?

Совершенно верно.

А Реализация запуска процессов в bpm'online из программного кода внешнего приложения
http://academy.terrasoft.ru/documents/docs/technic/SDK/7.7.0/WorkWithBp…

Теперь для запуска процессов 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;
 
public class BPMonlineProcessEngineExample
{
    private const string processServiceUri = 
            "<адрес приложения bpm'online>/0/ServiceModel/ProcessEngineService.svc/";
    private const string authServiceUri = 
            "<адрес приложения bpm'online>/ServiceModel/AuthService.svc/Login";
 
    // Cookie аутентификации bpm'online.
    private static CookieContainer AuthCookie = new CookieContainer();
 
    // Признак, прошла ли аутентификация пользователя на сервере bpm'online.
    // Если аутентификация прошла успешно, в свойстве AuthCookie будут лежать 
    // аутентификационные cookie, сформированные сервисом.
    public static bool IsAuthentificated
    {
        get { return (AuthCookie != null); }
    }
 
    // Метод для аутентификации запроса к веб-сервису bpm'online.
    // Параметры:
    // userName - имя пользователя bpm'online,
    // userPassword - пароль пользователя bpm'online.
    public static bool 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)
            {
                return true;
            }
        }
        return false;
    }
 
    // Метод запускает процесс ChangeOrderStatus, который меняет статус оплаты. 
    // Процессу в качестве входящих параметров передаются номер заказа и Email.
    public static bool ChangeOrderStatus(string OrderId, string Email)
    {
        // Проверка, была ли выполнена аутентификация пользователя.
        if (!IsAuthentificated)
        {
            return false;
        }
        // Формирование строки запроса к веб-сервису для запуска процесса 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())
        {
            // Обработка результатов выполнения запроса.
        }
        return true;
    }
}

Какие мои действия дальше? Как учесть этот мой код в запросе от стороннего приложения?

Николай,

для получения полноценного ответа, пожалуйста, сформулируйте и направьте Ваши вопросы в поддержку support@terrasoft.ru

Здравствуйте! У меня получилось отправлять данные из внешнего источника. Я таким образом создаю в системе новые контакты. И если я в БП передаю два параметры, то все занимает 2-3 секунды на обработку такого запроса. Но вот если я передаю 120 параметров и в БП сделал Создание контакта где эти поля присваьваю в контакт, то такой запрос выполняется только один раз в минуту. Тоисть за час я могу таким образом передать только 60 контактов. Можна как-то ускорить это дело? Спасибо!

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

Элемент "Добавить данные" записывает данные через ESQ. Вы можете записывать данные напрямую в БД элементов "Задание-сценарий" (через CustomQuerry), но тогда:

  1. Права на записи не будут раздаваться (в случае администрирования по записям)
  2. Процессы, которые запускаются при создании контакта, запускаться не будут

Также для ускорения работы процесса Вы можете поставить признак "Принудительная компиляция" и после сохранения скомпилировать процесс. Данное действие также может ускорить выполнение процесса (теоретически).

Принудительна компиляция помогла. Спасибо!

Показать все комментарии

Добрый день, я пользуюсь версией bpm'online 7.6 . Возникла надобность в Карточке редактирования Заказа возможности редактирования имени текущего контакта, который связан с заказом полем ContactId. Хотелось бы с заказа не переходить в Контакт и там его редактировать, а сразу делать изменения в имени прямо из карточки заказа. Подскажите, каким способ это можно решить?

Нравится

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

Одним полем, а именно стандартным лукап полем этого не сделать, но вы можете рядом с ним разместить текстовое поле. Назвать его как-то, к примеру «Имя контакта», привязать его к атрибуту текстовому. В методе onEntityInitialized и в методе изменения лукапного контакта, заполнять «Имя контакта» значением имени контакта, через запрос esq, или прямо из значения лукапа.
А уже при изменении вашего «Имя контакта», в событии изменения атрибута «Имя контакта», брать, и через esq, апдейтить имя контакта в объекте контакта, получая его id из главного лукап поля. И, после изменения, обновлять значение лукапного поля.
Стоит ли, конечно, возможность быстро переименовать поле, не переходя в карточку контакта, лишнего поля на форме заказа, вам решать.
Если возникнут точечные вопросы в процессе разработки, пишите, подскажем.

Сделал 2 текстовых виртуальных поля "ФИО контакта" и "телефон" в "OrderPageV2", по вашим инструкциям, при инициализации все подтягивает, при сохранении ("onSaved" ) записывает редактируемые данные в текущий контакт. Все работает. А вот как сделать маску и валидацию для поля "телефон" в "OrderPageV2" из данного примера? В документации только описана возможность базовой валидации контакта в карточке Контакта. Если можно, скиньте пример кода.

На сколько я могу видеть, в базовом функционале поля ввода телефона не используют маску, но вы можете написать свой контрол с маской, или использовать наработки ниже:

Инструкция:
mask.docx
Код модуля который необходимо добавить как модуль у себя в конфигурации:
multimaskedit.txt
И тот же самый код только в ворде так как рус. символы превратились в зюки в тхт:
multicodeinword.docx

Показать все комментарии

Нужен программный код для создания индикатора процентов. Для того чтобы видеть процент дисквалифицированных лидов в итогах.
Заранее благодарен!

Нравится

0 комментариев
Показать все комментарии

Добрый день.

Допустим, есть некоторое значение в поле карточке.
Подскажите, пожалуйста, на C# как можно "вытащить" значения только тех символов в этом значении, к-ые третий и четвертый по порядку (слева направо). Заранее спасибо

Нравится

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

Substring - не пойму, как использовать этот метод

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

public string Substring( int startIndex, int length)

Подробности здесь:
https://msdn.microsoft.com/ru-ru/library/aka44szs(v=vs.110).aspx

Есл не ошибаюсь:

string s = "Terrasoft";
string ss = s.Substring (0,5);// ss содержит "Terra"
Показать все комментарии