Добрый день!

Есть задача: своевременно убирать из списка необработанных звонков те, по которым состоялся разговор. Можно было бы подписаться на событие окончания разговора в cti, но это событие придет только оператору, выполнившему звонок, а у остальные операторы не узнают об этом своевременно.

Было бы замечательно, если бы можно было в разделе "Звонки" подписаться на событие от бизнес-процесса (например), который бы следил за окончанием звонков, и своевременно оповещал бы об этом всех подписавшихся клиентов. Есть ли такая возможность?

Нравится

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

Иван, здравствуйте!

Есть возможность отправить сообщение из процесса в клиентский модуль с помощью веб сокетов, подробно вопрос рассмотрен в посте.

При реализации добавьте в using процесса Terrasoft.Configuration .

Для обновления наполнения реестра можете воспользоваться this.reloadGridData()

Логвин Андрей Витальевич,

Огромное спасибо!

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

Может есть уже готовая переменная?

Или все таки придется писать код на шарпе и его результат запрашивать на фронтенде...

Нравится

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

Добрый день.

Такой переменной нет. Нужно писать на шарпе. Можете создать сервис, который возвращает смещение часового пояса, и получив один раз это значение, сохранив его, можете на фронтенде вычислять нужное время.

 

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

Создал редактируемый реестр согласно документации. 

"imageConfig": {"bindTo": "Resources.Images.RemoveIcon"}

Мне нужно сменить иконку корзины на крестик. Не важно как. Готов, даже загрузить свою.

Но не получается ее правильно подключить. Как это сделать правильно?

Нравится

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

Добрый день.

В детали нужно добавить "activeRowActions", в котором переопределить иконку. Реализацию можно посмотреть в ProductDetailV2UIv2.

                        

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

Добрый день!

Помогите справиться с такой задачей:

Имеется справочник QualifyStatus, он выведен на страницу LeadPageV2 через ActionsDashboard, в разделе attributes страницы указаны дополнительные колонки кроме id и value:

"QualifyStatus":     

            { lookupListConfig:         

                    { columns: ["Name", "StageNumber", "UsrIsTaken", "UsrIsOpportunity", "UsrIsDisqualified"] } 

            }

Но они не доступны в коде страницы работы через this.get("QualifyStatus").

Если же добавить на страницу Lookup с QualifyStatus и работать со справочником через него то данные поля становятся доступны

Нравится

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

Владимир, здравствуйте!

"выведен на страницу LeadPageV2 через ActionsDashboard,"

Уточните, пожалуйста, как именно выведен через ActionsDashboard? где физически отображается поле?

Дмитрий, добрый день  

Я описал то, как actions dashboard реализован в стандартном функционале лидов 

Просто, необходимо реализовать некоторые бизнес правила в зависимости от параметров стадии Лида  а не привязываться к id стадии.

И с этим как раз возникают проблемы, описанные в вопросе

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

Мотков Илья,

Да, извернулись по-всякому.. Просто, совсем неожиданно, что lookup работает одним способом, а с ActionsDashboard проблемы

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

Здравствуйте. Спасибо за помощь в настройке конфигов (https://community.terrasoft.ru/questions/nastroika-globalnogo-poiska). Теперь столкнулся со следующей проблемой: 

https://academy.terrasoft.ru/documents/marketing/7-11/opisanie-api-servisa-globalnogo-poiska#XREF_17963_API

 здесь дан пример кода. Вот что у меня получилось

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

Я нашел, что можно с этим сделать, но получаю другую ошибку

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

Почему может не находиться метод addsite?

Нравится

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

Здравствуйте, Максим

Данная ошибка, скорее всего, возникает из-за того, что Вы не совсем правильно формируете POST запрос.

Данный POST запрос должен идти не к ElasticSearch? а к Global Search Service.

Для исправления перестройте POST запрос и попробуйте выполнить его повторно.

Denys Diachenko,

заменил на адрес 

Global Search Service. В итоге получил такое

До этого при запуске Global Search Service из IIS наблюдалось такое

Я думал, что это исправится, когда выполнится вышеуказаный пост-запрос. В чем может быть проблема?

Максим.Паламарчук,

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

Denys Diachenko,

так я и указал, скопировав из адресной строки браузера "http://localhost/GlobalSearch/0" + /addsite

Максим.Паламарчук,

Судя по ссылке Вы развернули 

Global Search Service как приложение в Вашем сайте bpmonline - это неправильно.

Вам необходимо Global Search Service развернуть как отдельный сайт в IIS.

Также судя по второму скриншоту у Вас некорректно прописан путь к БД Global Search - необходимо прописать верный путь и повторить POST запрос с обновленными атрибутами.

Denys Diachenko,

Добрый день! Если у Вас есть опыт настройки и подключения глобального поиска, не могли бы Вы со мной связаться по скайпу? Я уже несколько дней пытаюсь сделать эту настройку и постоянно сталкиваюсь с проблемами.

Здравствуйте, Максим!

Могли бы Вы, пожалуйста, описать какие возникли трудности при настройке?

Shevchenko Andrey,

Добрый день! У меня ошибка "unable to open database file" призапуске приложения глобального поиска из IIS.

В файле web.config указаны такие настройки:

<OnSiteClientSettings>

    <add key="ElasticSearchUrl" value="http://localhost:9200/"/>

    <add key="ConfigDirectory" value="C:\BPMonline_GlobalSearchServices_1.0.0.136_711\GSSConfigs"/>

  </OnSiteClientSettings>

 

 

<appSettings>

    <!--<add key="DbDialectProvider" value="ServiceStack.OrmLite.SqlServerDialect, ServiceStack.OrmLite.SqlServer, Version=4.0.56.0, Culture=neutral, PublicKeyToken=null"/>-->

    <!--Comment DbDialectProvider above and uncomment DbDialectProvider below for on site clients. Vice versa for cloud clients.-->

    <add key="DbDialectProvider" value="ServiceStack.OrmLite.SqliteDialect, ServiceStack.OrmLite.Sqlite.Windows, Version=4.0.56.0, Culture=neutral, PublicKeyToken=null"/>

    <add key="DBConnectionConfigPattern" value="Server={0};Database={1};Uid=Supervisor;Pwd=Supervisor;charset=utf8;Allow User Variables=True" />

    <add key="servicestack:license" value="3802-e1JlZjozODAyLE5hbWU6VGVycmFzb2Z0LFR5cGU6SW5kaWUsSGFzaDpwd0VYdGh0eFByRi90OVpnMmZrZGMxQkNrV0QrSnFZWlRBS3kxSEVZb0dCejRSMnZNVGtFdHNtcVpHd3BGc094bWtsdW1qYTNWV3JTZkJsdTdtU3dMNWZNVDdUQW1pTkIrR2lxN2F4MldiNGs2S0t5Mkp1eG1vbVpHSVNzYWljelNSOHdVTjE1QXhsQ2ZpdHVJNWZiQWlmQUtBeUJ2ajc0UjhCYW5GOVdrRWs9LEV4cGlyeToyMDE3LTA1LTE0fQ==" />

    <add key="AuthApiKeyCacheExpiration" value="300" />

    <add key="MailingAccountCacheExpiration" value="300" />

    <add key="log4net.Config" value="log4net.config" />

    <add key="log4net.Config.Watch" value="True" />

    <add key="ApiKey" value="" />

    <add key="elasticLogin" value="#elasticLogin#" />

    <add key="elasticPassword" value="#elasticPassword#" />

    <add key="RequestTimeOut" value="600000" />

  </appSettings>

 

Здравствуйте, Максим!

Обращаю Ваше внимание на строку конфига:

<add key="DBConnectionConfigPattern" value="Server={0};Database={1};Uid=Supervisor;Pwd=Supervisor;charset=utf8;Allow User Variables=True" />

Как я вижу, Вы не изменили ни сервер подключения ни имя базы данных, потому у Вас и возникает ошибка подключения к несуществующему северу и БД.

Shevchenko Andrey,

Здесь нужны сервер и БД, которые используются в моем приложении bpm'online?

Здравствуйте, Максим!

В инструкции указано:

DBConnectionConfigPattern — шаблон строки подключения к БД клиента. Необходимо указать логин и пароль пользователя:

Ринис, так же как Вы вводите для входа на сервер. С указанием домена и логина.

Shevchenko Andrey,

я указываю и так

<add key="DBConnectionConfigPattern" value="Server=имя моего sql-сервера;Database=имя моей БД;Uid=логин;Pwd=пароль;charset=utf8;Allow User Variables=True" />

и так 

<add key="DBConnectionConfigPattern" value="Server={имя моего sql-сервера};Database={имя моей БД};Uid=логин;Pwd=пароль;charset=utf8;Allow User Variables=True" />

и так 

<add key="DBConnectionConfigPattern" value="Server={0};Database={1};Uid=логин;Pwd=пароль;charset=utf8;Allow User Variables=True" />

 

ошибка "unable to open database file" остается

Здравствуйте, Максим!

Данный параметры необходимо указать как в первом варианте.

Так же при добавлении сайта через пост запрос, выбирается путь к БД который указан в connectionString который Вы настраивали ранее. 

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

Shevchenko Andrey,

Настройка connectionsting такая

<connectionStrings>

    <add name="ConnectionDb" connectionString="Data Source=имя sql сервера;Initial Catalog=имя моей БД;User Id=логин;Password=пароль;"/>

    <add name="RabbitMQ" connectionString="amqp://guest:guest@localhost:5672/" />

</connectionStrings>

 

пост-запрос

$params = @{"ApiKey"= ""; "SiteName"="имя моей БД"}

Invoke-WebRequest -Uri "http://localhost:81/GlobalSearch/0/addsite" -Method POST -Body $params

ошибка та же

Shevchenko Andrey,

добрый день. В connectionString указал путь к файлу SQLite и он сейчас выглядит таким образом:

<connectionStrings>    

    <add name="ConnectionDb" connectionString="C:\BPMonline_GlobalSearchServices_1.0.0.136_711\DB\GlobalSearch.db"/>

    <add name="RabbitMQ" connectionString="amqp://guest:guest@localhost:5672/" />

</connectionStrings>

 

при запуске приложения появилось такое:

При этом по указаному пути появился файл GlobalSearch.db

Далее пытаюсь выполнить такой пост-запрос:

$params = @{"ApiKey"= ""; "SiteName"="C:\BPMonline_GlobalSearchServices_1.0.0.136_711\DB\GlobalSearch.db"}

Invoke-WebRequest -Uri "http://localhost:81/GlobalSearch/0/addsite" -Method POST -Body $params 

 

получаю ошибку

В чем может быть причина?

Здравствуйте, Максим!

Данная проблема может возникает из-за несовпадения ApiKey. Рекомендуем Вам проверить корректность ApiKey, а так же попробовать выполнить запрос с любым не пустым ApiKey.

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

Коллеги, здравствуйте.

Возник вопрос:

Как при помощи БП или есть ли какие-то другие возможности реализации, после перевода объекта лид на стадию дисквалифицирован (дис)квалификации ЛИДа, сделать карточку объекта ЛИДА нередактируемой.

Заранее спасибо!

Нравится

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

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

Роман, здравствуйте!

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

Логвин Андрей Витальевич,

Сидоров Александр Валерьевич,

Коллеги, спасибо! Но тогда таким образом я заберу права у пользователей и в дальнейшем у них не будет возможности работать с обьектом ЛИДов. 



Хотелось бы реализовать такую возможность, чтобы права были, но после определённой стадии работа с лидами блокировалась.

Роман, по этому поводу есть статья на SDK - https://academy.terrasoft.ru/documents/technic-sdk/7-11/kak-polnostyu-z…

Показать все комментарии
веб-форма
7.11
sales

Добрый день!



Кто-нибудь настраивал получение данных из Google form (по аналогии лидов из Landing page)?



В целом, JS в среде Google Script выполняется (GS это, по сути, несколько доработанный JS). Но так как код выполняется не в браузере, в на сервере Google, то о таких объектах как "document", "window" можно забыть, ибо их просто нет. 

А так как стандартный скрипт BPMOnline расчитан на исполнение именно в браузере, он использует массу таких вот несовместимых с Google Script моментов.



То есть тут либо тот же функционал реализовывать на Google Script (но тогда нужна хотя бы спецификация того, что ожидает BPMOnline, ибо реверс-инженерить хоть и можно, но очень уж долго), либо какой-то корректный workaround





Или есть другие варианты?

Нравится

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

Добрый вечер.

GoogleForms пишет ответы пользователей в GoogleSheets, а у GoogleSheets есть api по которому можно считать данные.

https://developers.google.com/sheets/api/guides/values

Показать все комментарии
7.10
sales
день добрый!
в процессе работы возник вопрос связан с содержимым таблицы "dayofweek"

В нескольких базах, которие я проверил  неделя начинается с воскресенья (код дня =1).

Документация гласит, что неделя начинается с понедельника и в понедельника код дня должен бить 1.

https://academy.terrasoft.ua/documents/technic-sdk/7-6-0/dayofweek-metod

Вопрос: можно ли самому изменить номера дней в таблице? может ли это изменение (присвоения понедельнику кода 1, вт=2 ... воск=7 )повлиять на базовый функционал?

 

скрин с моей базы

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

 

 

Нравится

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

Здравствуйте, Юрий

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

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

Коллеги, здравствуйте. 

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

Если кто имеет понятие каким образом правильно выстроить этот БП в bpm, буду очень благодарен.

Заранее спасибо!

 

Нравится

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

Здравствуйте, Роман!

Бизнес-процес для вашей ситуации может выглядеть следующим образом (скриншот 1):

1.Для запуска БП, начальным событием будет сигнал от обьекта, в нашем случае это "Добавление нового контрагента" (скриншот 2);

2.С помощью действия системы [Изменить данные], мы ищем нашего нового контрагента по Id, и устанавливаем ему 

значение поля "Тип контрагента" - Клиент (скриншот 3).

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

Для этого Вам нужно:

1. Перейти в [Управление конфигурацией](скриншот 4);

2. Выбрать вкладку [Конфигурация];

3. Дальше [Схемы]-[Добавить]-[Замещающий обьект] (скриншот 5);

4. В Структуре выбрать "UsrEntity1", в свойствах [Родительский обьект] указать "Контрагент" (скриншот 6);

5. Затем в структуре перейти на вкладку [Type] - [Поведение]-[Значение по умолчанию]-[Установить константу] и в поле выбора значения

выбрать неоходимое (скриншот 7).

Роман,

У поля "Тип" объекта "Контрагент" можете выставить свойство "Значение по умолчанию", равное значению "Клиент".

Показать все комментарии
импорт данных
7.11
sales

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

Кто как решает проблему импорта "больших" данных в облачную CRM?

Нам нужно загрузить 1 000 000 записей в таблицу, при этом стандартные средства импорта ограничивают размер импортируемого файла 10 мб. В моём случае получается 4 файла по 250 000 записей. В принципе, преемлимо, но импорт длится вечность - ещё не удалось загрузить не 1. При этом ТП говорит, что загружать больше 50 000 записей за раз не рекомендуется. Это 20 операций импорта. Разве это промышленное решение?

Нравится

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

Здравствуйте, Вадим

Я передал Ваше пожелание аналитикам продукта на рассмотрение и анализ возможности оптимизации данного функционала в будущих версиях приложения.

Как вариант Вы можtnt разработать интеграцию с помощью Odata или DataService описаных в статье Академии Террасофт по ссылке https://academy.terrasoft.ru/documents/technic-sdk/7-11/integraciya-s-s… и "перегонять" данные с помощью данной интеграции.

Здравствуйте, Вадим!

Согласно заявленным требованиям к файлу импорта максимальное количество импортируемых строк в файле не должно превышать 50 000. Это количество, при котором файл импортируется без проблем.

Если данное количество не устраивает Вы можете реализовать собственный импорт используя веб службу Data Service или с помощью OData.

Новак Руслан пишет:

Если данное количество не устраивает Вы можете реализовать собственный импорт используя веб службу Data Service или с помощью OData.

Хороший вариант для приложения на Marketplace 

Коллеги, каким образом обеспечить проверку на уникальность импортируемых записей, в случае с o'Data?

Добрый вечер.

Данный вопрос можно решить несколькими способами:

1. На объекте можно добавить обработчик на событие "Перед добавлением записи" и в елементе "задание сценарий" реализовывать нужную проверку.

2. Добавить тригер на добавление записи в БД.

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

VladKapitanchyk,

Спасибо!

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