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

Нравится

1 комментарий
Лучший ответ

К сожалению, общедоступной инструкции пока нет. В руководстве для разработчика описана инструкция по добавлению новых правил поиска в уже существующем разделе  а на этом форуме обсуждались схожие запросы, например, тут. Но в общем реализация этой функциональности очень объемна и сводится к следующему:



1. Создать процесс для поиска записей в своем разделе (аналогично процессу StartGlobalContactDuplicatesSearch).

2. Для поиска необходимо создать процедуру в базе данных, аналогичную уже существующим нашим (по первой ссылке в руководстве разработчика описана последовательность создания хранимой процедуры).

3. Процедура будет записывать данные в созданный Вами объект MyObjectDuplicates (создайте объект по аналогии с объектом ContactDuplicate)

4. Необходимо создать новую страницу редактирования, которая будет отображать данные из созданного объекта MyObjectDuplicates по аналогии со страницей DuplicatesPageV2 (либо заместите DuplicatesPageV2, добавив в нее нужную логику).

 

К сожалению, общедоступной инструкции пока нет. В руководстве для разработчика описана инструкция по добавлению новых правил поиска в уже существующем разделе  а на этом форуме обсуждались схожие запросы, например, тут. Но в общем реализация этой функциональности очень объемна и сводится к следующему:



1. Создать процесс для поиска записей в своем разделе (аналогично процессу StartGlobalContactDuplicatesSearch).

2. Для поиска необходимо создать процедуру в базе данных, аналогичную уже существующим нашим (по первой ссылке в руководстве разработчика описана последовательность создания хранимой процедуры).

3. Процедура будет записывать данные в созданный Вами объект MyObjectDuplicates (создайте объект по аналогии с объектом ContactDuplicate)

4. Необходимо создать новую страницу редактирования, которая будет отображать данные из созданного объекта MyObjectDuplicates по аналогии со страницей DuplicatesPageV2 (либо заместите DuplicatesPageV2, добавив в нее нужную логику).

 

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

Подскажите, пожалуйста, как можно настроить собственное правило поиска дубликатов среди контрагентов.

BPM Online 7.12

СУБД Oracle 11g

Проблема в том, что большинство инструкций относятся к MS SQL. В Oracle просто не вижу большинство указанных хранимых процедур. Плюс просто не вижу раздела "Правила поиска дубликатов" в Дизайнере системы. Не вижу в БД процедур типа "tsp_FindAccountDuplicateByName", процедура tsp_FindAccountSimilarRecords есть, но там пустышка.

Если я правильно понял, то глобальный поиск дубликатов пока недоступен для Oracle. Нужно хотя бы настроить локальный поиск дубликатов. 

Изменение пакета tspkg_DuplicatesSearch (функции fn_GetAccountDuplicates и процедуры tsp_SearchForAccountDuplicates) результата не дало. 

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

Нравится

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

Проверка на дубли при сохранении через миникарточку появилась в 7.12.3. В версии 7.12.3 появился поиск дублей на основании правил для Oracle. В будущих релизах планируется массовая дедупликация для данной СУБД + пользовательская настройка правил + уже можно технически с версии 7.12.3 для новой дедупликации добавить новое правило. Инструкция тут.

Зверев Александр,

Здравствуйте, Александр. 

Спасибо за информацию. Один уточняющий вопрос. У нас на DEV не настроен GlobalSearch (BPM развернут on-site). Однако дедубликация по name срабатывает. Как это может быть?

Видимо, это предыдущая версия, без глобального поиска. Новый то добавили только в 7.12.3:

Для БД Oracle, появилась возможность поиска дублей лидов, а также локального поиска дублей контактов и контрагентов при сохранении. Базовый набор правил поиска можно включать по ссылке “Правила поиска дублей” в дизайнере системы. Для работы поиска дублей на Oracle необходимо настроить глобальный поиск и включить функциональность “ESDeduplication”.

Добрый день. Апдейт на 7.12.3 провели. Global Serach и ESDeduplication включили, правило новое настроили. Видим, что оно работает корректно в миникарточке.

НО при сохранении/изменении в обычной карточке поиск дублей не происходит. Этот функционал для Oracle еще не реализован?

P.S. Стандартные правила также не работают при сохранении/изменении через основную карточку.

Вторая ссылка из моего верхнего комментария уже недоступна, хотя раньше точно была. Видимо, что-то в поддержке работы с Oracle ещё меняют, лучше ещё подождать.

Понятно. Спасибо

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

Добрый день!

Необходимо настроить интеграцию BPM Online 7.12 с контакт-центром Avaya через TSAPI-протокол.

Вопрос: нужны ли дополнительные дистрибутивы? Где можно посмотреть примеры настройки? Нужна именно интеграция через TSAPI без DMCC.

Заранее благодарю!

Нравится

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

Для интеграции нужно покупать bpm’online avaya connector. Также ставится сервис сообщений bpm’online Messaging Service. Вот инструкция по их настройке. Интеграция работает только по DMCC.

Добрый день. Согласно информации от Terrasoft использование протокола DMCC опционально. Уверили, что достаточно TSAPI. Лицензии на Avaya коннектор получены и установлены. BPM Online Messaging Service установлен и настроен согласно инструкции. Однако при открытии cti-панели выдает: "Отсутствует подключение к серверу телефонии. Возможно, не настроены параметры соединения или сервер телефонии недоступен."

Асылан, не опционально:

Сервис сообщений позволяет соединить bpm’online c телефонией, подключаясь по интеграционному протоколу DMCC. NET API к Avaya и распределяя события о звонках между пользователями bpm’online.

Игорь, Terrasoft 3.X умеет интегрироваться с телефониями Oktell, Infinity, Webitel и с АТС, поддерживающими стандарт TAPI (универсальный, подходит к разным АТС, но менее функциональный, чем специализированные в списке). Вероятно, для Avaya используется он.

Логика работы с телефонией, смены статуса и прочее реализовано в скриптах scr_CallClientUtils, scr_TAPIClientUtils и scr_TAPIUtils. Первый — общий для разных телефоний, два других — для этого коннектора. Последний скрипт доступен для чтения и правки только при наличии лицензии на нужную телефонию в 3.Х.

Инструкцию к функциональности телефонии можно скачать тут.

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

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

Помогите, пожалуйста, найти кнопку "Добавить", пропала из созданного пользователем раздела.

Изображение удалено.

Нравится

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

Добрый день!

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

хотя при записи результата текст разбивался на абзацы.

Как можно перенести текст, записанный в результате звонка в ленту продажи в том виде, как записан изначально?

Нравится

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

Посмотрел в базе, сообщения ленты хранятся в таблице SocialMessage в поле Message в таком формате:

<p>строка 1</p> <div>строка 2</div> <div>строка 3</div>

Видимо, при добавлении программно нужно имитировать этот формат.

Аналогично, вставьте текст в нужном виде, сохраните и посмотрите, что получается в поле в базе.

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

Товарищи помогите.

БЦ  дергает код на сервере, этот код забирает данные из другой системы и обновляет запись контрагента путем прямого SQL запроса.

Все работает  но проблема с обновление пользовательского интерфеса.(Ну тобишь пользователь должен в интерактиве увидеть результат). Сейчас  я в клиенском коде кручу в потоке jQuery таймер и тыкаюсь в БД проверяя наличие изменений и вывожу диалоговое окошко. Но данный подход, мне уж больно не нравится.

Есть ли способ из внешней системы путем сетевого запроса, вывести модальное окно у конкретного пользователя? Или какие иные подходы существуют

 

Нравится

2 комментария
Лучший ответ

Чисто в теории:

- код на сервере помимо sql-вставок, генерирует сигнал по web-socket, что изменена запись

-на клиенте развернуть listener, будет принимать сигнал, выдавать пользователям сообщение

Чисто в теории:

- код на сервере помимо sql-вставок, генерирует сигнал по web-socket, что изменена запись

-на клиенте развернуть listener, будет принимать сигнал, выдавать пользователям сообщение

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

Добрый день!

 

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

В первом детале создал сообщение, и зарегистрировал в методе init.

init: function() {

                    this.callParent(arguments);

                    window.console.log("begin finance come here to show where error");

                    var messages = {

                        "GetFinanceBlock": {

                            mode: Terrasoft.MessageMode.BROADCAST,

                            direction: this.Terrasoft.MessageDirectionType.PUBLISH

                        }

                    };

                    this.sandbox.registerMessages(messages);

                    window.console.log("end finance come here to show where error");

}

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

rowSelected: function(primaryColumnValue) {

                    this.sandbox.publish("GetFinanceBlock", {arg1 : primaryColumnValue}, ["key"]);

                    window.console.log("end publish");

}

 

Во второй деталь метод init добавил subscribe для данного сообщение:

init: function() {

                    this.callParent(arguments);

                    window.console.log(" child come here to show where error");

                    var message={

                        "GetFinanceBlock": {

                            mode: Terrasoft.MessageMode.PTP,

                            direction: Terrasoft.MessageDirectionType.SUBSCRIBE

                        }

                    };

                    this.sandbox.registerMessages(message);

                    this.sandbox.subscribe("GetFinanceBlock", this.onMessageSubscribe, this, ["key"]);

                    window.console.log(" child end subscribe");

                },

                onMessageSubscribe: function(args) {

                    window.console.log("child call method subscribe args " + args + " " + JSON.stringify(args));

                },

И добавил метод обработчик onMessageSubscribe для анализа передачи данные из первого модуля.

 

Проблема заключается в том, что при отправке сообщение второй модуль вообще не получает.

 

Можете подсказать чем связано такая проблема.

 

С уважием, Асылан.

 

Заранее благодарю!

 

 

Нравится

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

Если я правильно вас понял, то у вас на странице находится 2 детали.

При выборе определенного значения на Детали №1, должна отобразиться деталь №2.

Сообщение вы публикуете в Детали №1, но принять это сообщение, вы должны на странице, где находятся обе эти детали.

Создайте атрибут, например, в который устанавливайте значение true, когда получено сообщение. А видимость детали повесьте на этот атрибут.

Литвинко Павел,

Да, вы все правильно поняли. Спасибо , попробую . 

Литвинко Павел,

Попробовал анологичная ситуация. Сообщение отправляется, но подписчик не получает.

 

Асылан,

А как вы подписываетесь на сообщение?

Асылан, инструкция по работе с механизмом Sandbox есть в Академии.Возможно, что-то не было учтено, например, в одной указано BROADCAST, а в другой PTP.

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

Коллеги, всем привет!

Есть задачка, а хорошее решение придумать не получается. Может быть кто-то подскажет решение.



Для каждой Продажи можно добавить сотрудников в Команду (Данные о продаже - Команда).



Нужно, что бы у всех сотрудников Команды были прав на редактирование карточки Продажи. Проблема заключается в том, что при удалении сотрудника нужно как-то отнимать у него права. Если БП запускается по событию удаление записи, то не понятно какая запись удалена, а следовательно не понятно у кого надо забрать права. 



Скорее всего есть какие-то простое решение, просто думаю не туда.

 

Нравится

1 комментарий
Лучший ответ

onDeleting в объекте. Но тогда скорее всего придётся писать функцию по удалению.

onDeleting в объекте. Но тогда скорее всего придётся писать функцию по удалению.

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

В мобильной версии приложение в пакете “Mobile”, в схеме MobileActivityModelConfig yстанавливаются значения по умолчанию:

Terrasoft.sdk.Model.setDefaultValuesFunc("Activity", function(config) {

   var coeff = 1000 * 60 * 5;

   var currentDate = new Date();

   var startDate = new Date(Math.round(currentDate.getTime() / coeff) * coeff);

   var dueDate = new Date(startDate.getTime() + 30 * 60000);

   config.record.set("StartDate", startDate);

   config.record.set("DueDate", dueDate);

   config.record.set("ShowInScheduler", true);

   Ext.callback(config.success, config.scope);

});

 

Моя задача дополнить данный код своими данными. Но когда я, в своем пакете, создал схему и добавил в нее код:

Terrasoft.sdk.Model.setDefaultValuesFunc('Activity', function(config) {

    var record = config.record;

    record.set('AnIsMobileSKU', true);

    Ext.callback(config.success, config.scope);

});

 

То получается, что выполняется только мой код, а код из схемы «MobileActivityModelConfig» не выполняется. Каким образом, в мобильной версии, можно расширить данную схему предустановленного пакета?

Нравится

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

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

Попробуйте в начало Вашей функции добавить строчку типа:

this.callParent(config)

Ответ службы поддержки:



В бизнес-правилах нет наследования.

В мобильной версии используется последняя схема, которая используется в ModelExtensions.



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

Пировских Дмитрий,

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

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

Коллеги, есть такой шажок в кейсе.

Изображение удалено.

Вот так не работает, если через ожидание сигнала пошло, сигнал срабатывает, процесс завершается без ошибок, на нужную стадию не переключается

Изображение удалено.

Работает вот так (неинтерактивно).

Изображение удалено.

Если в БП выполнение прошло через ожидание сигнала, БП как бы отрывается от сессии пользователя/интерфейса?

 

 

Нравится

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

Добрый день!

В условии у Вас написано если результат (true), то меняется стадия, а какой результат, результат чего? Какой параметр читается? Результат чего должно быть true?

В процессе надо добавить параметр в который будет записываться значение true или false, а потом указать, что если этот параметр true, то менять стадию

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

Калушка Д.,

по завершении процесса в безусловном порядке переходим на указанную стадию, поэтому просто true

я проверял, если как положено писать [#XX.YY#]==true, поведение не меняется

Зверев Александр,

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

Обычно такие действия, меняющие стадию, делают не в обработчике перехода на другую стадию, а в БП, который запускается по отдельной записи. Например, в разделе обращений сделать «Пометить как спам» и «Пометить как дубль», которые отменяют обращение.

Зверев Александр,

тем не менее, из документации это не очевидно.

Кстати, в текущей версии https://academy.terrasoft.ru/documents/technic-bpms/7-12/element-keysa-… элементу кейса "Подпроцесс" не соответствуют действительности, в дизайнере кейсов по другому выглядит.

Там внизу есть кнопки обратной связи, можете написать им, как всё на самом деле.

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