Добрый день, настроил интеграцию веб сервиса и сейчас настраиваю бизнес процесс по данному сервису, а именно запись всех детали по совершенным входящим и исходящим звонкам через мобильный телефон, и привязка всех этих данных к Детали Звонок в Bpm Online.
Сам вопрос состоит в том что - все данный которые высылает веб сервис являются " Тип Данных Текст", и только в этом формате они могут попасть в bpm online. К письму прикрепляю скриншот авто генерирующей страницы данных в бизнес процессе , который показывает все данные с веб сервиса при одном запросе (то есть данные одного звонка). Без труда по бизнес процессу в Детали Звонок заполнил Данные - "Номер от" и "Номер Кому", по скольку эти поля в bpm online " строковые (текстовые) как и в веб сервисе, но к примеру:
1. Как в бизнес процессе добавить в детали Звонок, в Справочном Поле "Направление звонка", где есть варианты "Входящий" и "Исходящий", если Веб сервис выдает направление звонка в виде Тип Данных Текстового поля (строковое) в двух вариантах: "1" - это исходящий звонок и "0" - это входящий звонок. Как я понимаю это можно сделать по идее через "Условный поток" или элемент бизнес процесса "Формула", где по видимому логика на подобие "если Направление Звонка в Веб Сервисе == "1", то далее поток идет в элемент процесса Добавить Данные в Деталь звонок и заполняем там Направление Звонка "Исходящий". К сожалению заполнив в условном потоке условие:
[#Мои Звонки 1.napravlenie_zvonka#]=="1"
процесс через данный условный поток не проходит и далее не отрабатывается элемент Добавить Данные в Деталь звонок, как правильно реализовать данную идею ?
2. Необходимо чтоб веб сервис вызывался каждые 3-5 секунд, чтоб синхронизировать звонки с веб сервиса, как решение нашел пока только запуск бизнес процесса через элемент "Начальное Событие Стартовый Таймер", но там минимальное значение 1 мин, то есть бизнес процесс запускается не чаще чем каждые 1 мин, как реализовать начало бизнес процесса (запрос данных с веб сервиса) каждые 3-5 секунд
3. Веб сервис выдает в текстовом формате тип данных (как и все данне) "Дату Звонка" в виде тип данных текст - набор цифр (визуально для нас), а для системы получается в виде текста (в сриншоте видно) пример:
Дата Звонка: 15218316845
Представитель веб сервиса Мои Звонки, сказал:
"по дате звонка - это дата/время в формате unix timetamp (количество секунд, прошедших с полуночи (00:00:00 UTC) 1 января 1970 года), стандартный формат для передачи дат в числе .."
Вопрос состоит в том как эти данные которые попадают в bpm online в виде Тип Данных Текст преобразовать в Тип Данных Время в формате bpm online и далее чтоб отрабатывался элемент бизнес процесса - Добавить Данные в Деталь звонок и заполнилось поле " Дата Начала", " Дата Завершения" ... где данные поля заполняются/имеют Тип Данных Дата и Время.
Спасибо
Нравится
Направления звонка это справочник, туда можно вставлять значения кода в виде чисел и он будет соответственно показывать ваше состояние. (пример ниже).
Пример как решить проблему с UTC тоже ниже привел.
Запускать БП можете через крон тригер, настроив его так, как вам нужно, пример ниже.
Для пункта 2
// Создание задания для запуска процесса. IJobDetail job = AppScheduler.CreateProcessJob("OpStateActivityInAccountProcessJob", null, "OpStateActivityInAccountProcess", "CurrentWorkspace", "CurrentUserName"); // Создание Cron-триггера, соответствующего графику запуска задания. ITrigger trigger = new CronTriggerImpl("OpStateActivityInAccountProcessTrigger", null, "0 60 * * * ?"); //Каждый час будет запускать БП OpStateActivityInAccountProcess //Секунды будут выглядеть так: ("0/5 * * * * ?"), то есть каждые 5 секунд запускать // Добавление задания и триггера в планировщик. AppScheduler.Instance.ScheduleJob(job, trigger); return true;
Для пункт 1, 3.
Условие направления звонка можете так сделать --- if (direction.ToString() == "0")
var insert = new Insert(userConn) .Into("Call") .Set("Duration", Column.Const(Int32.Parse(duration))) .Set("StartDate", Column.Const(new DateTime(1970, 1, 1, 0, 0, 0, DateTimeKind.Utc).AddSeconds(start_time))) Set("EndDate", Column.Const(new DateTime(1970, 1, 1, 0, 0, 0, DateTimeKind.Utc).AddSeconds(end_time))) as Insert; insert.Execute();
А еще лучше, вместо БП которые будет каждые 5 секунд у вас делать синхронизацию, это привязаться на событие окончания звонка из сервиса Моих звонков и указать шарпный сервис, который будет принимать и обрабатывать это событие, примером если надо могу поделится, как я интегрировался с ними
Направления звонка это справочник, туда можно вставлять значения кода в виде чисел и он будет соответственно показывать ваше состояние. (пример ниже).
Пример как решить проблему с UTC тоже ниже привел.
Запускать БП можете через крон тригер, настроив его так, как вам нужно, пример ниже.
Для пункта 2
// Создание задания для запуска процесса. IJobDetail job = AppScheduler.CreateProcessJob("OpStateActivityInAccountProcessJob", null, "OpStateActivityInAccountProcess", "CurrentWorkspace", "CurrentUserName"); // Создание Cron-триггера, соответствующего графику запуска задания. ITrigger trigger = new CronTriggerImpl("OpStateActivityInAccountProcessTrigger", null, "0 60 * * * ?"); //Каждый час будет запускать БП OpStateActivityInAccountProcess //Секунды будут выглядеть так: ("0/5 * * * * ?"), то есть каждые 5 секунд запускать // Добавление задания и триггера в планировщик. AppScheduler.Instance.ScheduleJob(job, trigger); return true;
Для пункт 1, 3.
Условие направления звонка можете так сделать --- if (direction.ToString() == "0")
var insert = new Insert(userConn) .Into("Call") .Set("Duration", Column.Const(Int32.Parse(duration))) .Set("StartDate", Column.Const(new DateTime(1970, 1, 1, 0, 0, 0, DateTimeKind.Utc).AddSeconds(start_time))) Set("EndDate", Column.Const(new DateTime(1970, 1, 1, 0, 0, 0, DateTimeKind.Utc).AddSeconds(end_time))) as Insert; insert.Execute();
А еще лучше, вместо БП которые будет каждые 5 секунд у вас делать синхронизацию, это привязаться на событие окончания звонка из сервиса Моих звонков и указать шарпный сервис, который будет принимать и обрабатывать это событие, примером если надо могу поделится, как я интегрировался с ними
Для пункта 1 сделал как вы сказали: --- if (direction.ToString() == "0"), все сработало отлично, Спасибо !
по остальным пунктам напишу вам личное сообщение