Коллеги всем доброго времени суток.

Кто нибудь сталкивался с аутентификацией и отправкой внешних запросов на JS?

Как это лучше всего реализовать?

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

Нравится

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

Нигрескул Алексей,

Александр прав. Можно написать конфиги, прокинуть сервис без авторизации. И если сайт не в облаке, тогда всё просто, если в облаке - каждое обновление конфиги перетирает. 

Либо типовая авторизация (тот же XMLHttpRequest.1 запрос на получение куки+csrf-токена, последующие запросы - к сервисам, но уже с заголовками)

Не совсем понятно что должно авторизовываться и откуда. С js-кода BPM обратиться на какой-то сервер? (тогда XMLHttpRequest с кучей коллбеков, при условии, что CORS не выскочит)

Или наоборот с условного сайта авторизоваться в BPM? 

Варфоломеев Данила,

Наоборот с условного сайта в BPM, даже не с сайта, а из письма пришедшего на почту. Но я так понял что не получится. Примерно представляю как необходимо реализовать кейс. 

На почту приходит письмо в нем есть условная ссылка которая редиректит на реализованное api из которого уже идет аутентификация с bpm и в bpm кидаются нужные запросы с данными. Как то так. 

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

Нигрескул Алексей,

Александр прав. Можно написать конфиги, прокинуть сервис без авторизации. И если сайт не в облаке, тогда всё просто, если в облаке - каждое обновление конфиги перетирает. 

Либо типовая авторизация (тот же XMLHttpRequest.1 запрос на получение куки+csrf-токена, последующие запросы - к сервисам, но уже с заголовками)

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

Не могу нигде найти, каким образом возможно получить top N в запросе на JavaScript.

Везде только примеры на С#.

Нравится

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

Похожая задача и похожая проблема ( https://community.terrasoft.ru/questions/zapros-ne-vozvrasaet-znacenie ). Используя запрос:

var vip = 0;
var recordId = item.get("Id");
var esqCase = Ext.create("Terrasoft.EntitySchemaQuery", {
rootSchemaName: "Case"
});
esqCase.addColumn("UsrVIPobr");
esqCase.getEntity(recordId, function(result) {
if (result.success) {
vip = result.entity.get("UsrVIPobr");
}
}, this);

Получаю корректный Id (по базе находится нужное обращение с нужным id и полем UsrVIPObr). В карточке обращения есть логическое поле UsrVIPobr (1 или 0), но почему-то переменная vip не меняется. Прошу помочь разобраться. Изображение удалено.

Нравится

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

Быстров Сергей,

Добро пожаловать в мир async вычислений, коллбеков и промисов)

Вам надо весь код(который за скриншотом) перенести в коллбек-функцию getEntity. грубо говоря:

var vip=null;
esq.getEntity(id, function(p) {
     //тут vip будет не null
     var vip=...;
 
     if (vip) {....}
}, this);
//тут vip все ещё null, следующие строки кода отработают ДО результата функции getEntity
var a = ...;
....

 

То, что у вас скриншот обрывается на esq.getEntity - уже подозрительно :)

Вы используете переменную vip после выполнения getEntity?

Варфоломеев Данила,

Да, используется для сравнения с константой

Там же асинхронное выполнение. В getEntity добавляется функция, которая запустится где-то потом, а код пошёл выполняться дальше.

Быстров Сергей,

Добро пожаловать в мир async вычислений, коллбеков и промисов)

Вам надо весь код(который за скриншотом) перенести в коллбек-функцию getEntity. грубо говоря:

var vip=null;
esq.getEntity(id, function(p) {
     //тут vip будет не null
     var vip=...;
 
     if (vip) {....}
}, this);
//тут vip все ещё null, следующие строки кода отработают ДО результата функции getEntity
var a = ...;
....

 

А есть какие-то безболезненные способы заставить работать код в синхронном режиме?

Быстров Сергей,

нет. только упаковать всё в Terrasoft.chain (те же коллбеки, только в более удобоваримом виде)

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

Добрый день.

Есть следующий кейс:

Необходимо создать рабочие места на портале самообслуживания для разных ролей пользователей портала  (Клиенты и партнёры) с различным набором разделов и соответствующими доступами для конкретного пользователя. Данный подход уже реализован на портале самообслуживания Terrasoft. 

Как можно решить данный кейс? 



Обнаружил, что в группу "Все пользователи портала" нельзя добавить подчинённые группы. И даже добавить их с помощью sql-инъекции, права для портала на них не распространяются.

  

 

Нравится

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

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

Мотков Илья,

Меня интересует именно создание разных рабочих мест на портале самообслуживания, и предоставление на них доступа для разных дочерних ролей (Клиенты/Партнёры) роли "Все пользователи портала".

С точки зрения разработки, портал является одним отдельным рабочим местом со своими разделами. 

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

Мотков Илья,

На портале самообслуживания для партнёров есть два рабочих места с разным набором разделов.

Прошу поделится кейсом реализации подобной функциональности.

 

Игорь, это настраивается при помощи стандартных механизмов рабочих мест и прав доступа на них для разных пользователей.

Мотков Илья,

Прошу предоставить инструкцию по реализации такой настройки.

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

1. Для пользователя портала нельзя добавить функциональные роли.

2. Для орг. группы "Все пользователи порта" нельзя добавить подчинённые орг. группы.

3. Как быть с настройкой аналитики на главной странице портала для разных групп пользователей?

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

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

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

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

Да, всё верно. Для группы «All portal users».

Мотков Илья,

Т.е. для обеих рабочих мест дан доступ только для пользователей портала?

Из Вашего скриншота это нельзя достоверно выяснить. Попробовал на тестовой базе, добавил второе рабочее место с указанием прав для этой группы, зашёл под портальным пользователем — видно оба рабочих места.

Да, рабочее место создать можно.

Но вопрос в другом: Как отобразить рабочие места в зависимости от роли пользователя портала (партнёр/клиент)?

Все пользователи портала входят в одну и ту же роль.

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

Добрый день, коллеги. Подскажите пожалуйста, какие зависимости я должен добавить в собственный пользовательский пакет, чтобы он нормально переносился на любую из систем (studio, team, enterprise)? Допустим, хочу создать пакет "Automobile", где сделаю раздел "Автомобили" и в несколько кликов буду загружать это дело в любую новую систему, которую настраиваю, чтобы каждый раз не проделывать эту рутинную работу по созданию тех же полей и прочего.

Нравится

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

Base, NUI, UIv2 + по необходимости накидывать. Грубо говоря надо создать в пакете замещающий объект, и если родитель не выбирается в поле => зависимость не добавлена. Добавляем пакет в зависимости, замещаем объект, переходим к след. схеме/объекту

Base, NUI, UIv2 + по необходимости накидывать. Грубо говоря надо создать в пакете замещающий объект, и если родитель не выбирается в поле => зависимость не добавлена. Добавляем пакет в зависимости, замещаем объект, переходим к след. схеме/объекту

Варфоломеев Данила,

Да, спасибо, я попытался в мастере разделов создать раздел, который должен упасть в мой пакет (в котором я не проставил ни единой зависимости), и Мастер разделов мне сообщил к каким схемам не хватает доступа, я посмотрел где они все находятся, этот как раз и были Base и NUI. Спасибо за совет с UIv2.

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

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

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



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



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



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

 

Нравится

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.



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

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

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

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

Есть такой пример в Документации:

Для раздела [Заказы] реализовать выделение тех записей реестра, которые находятся на стадии [Исполнение].

Подскажите: как определять константы для других разделов (интересует выделение Обращений в реестре по их приоритету)?



В этом примере проверятся по стадии [Исполнение] в разделе [Заказы]:

if (running.value === OrderConfigurationConstants.Order.OrderStatus.Running)

 

Нравится

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

Возможно несколько вариантов.

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

2. Либо сразу же сравнивать с нужным значением Id записи в справочнике приоритетов обращений.

Id нужных значений записей можно получить из базы данных.

Если у Вас приложение on-site, то заходите на сервер баз данных и пишите запрос к таблице CasePriority и получаете нужные значения, если on-demand, то можно обратиться за помощью в службу поддержки.

Также можно себе в конфигурацию установить бесплатное приложение SQL Executor, с помощью которого можно получить значения из нужной таблицы непосредственно из приложения bpm'online.

А вообще, очень похоже, что для Вашей задачи подойдет другое бесплатное приложение Records color highlighting.

Дополнение "Records color highlighting" облегчает навигацию по записям в разделах bpm'online, фокусируя внимание пользователя на элементах, выделенных цветом по предварительно настроенному правилу. Для создания правила выделения можно использовать одно из справочных полей в любом разделе bpm'online и широкую цветовую палитру.

Возможно несколько вариантов.

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

2. Либо сразу же сравнивать с нужным значением Id записи в справочнике приоритетов обращений.

Id нужных значений записей можно получить из базы данных.

Если у Вас приложение on-site, то заходите на сервер баз данных и пишите запрос к таблице CasePriority и получаете нужные значения, если on-demand, то можно обратиться за помощью в службу поддержки.

Также можно себе в конфигурацию установить бесплатное приложение SQL Executor, с помощью которого можно получить значения из нужной таблицы непосредственно из приложения bpm'online.

А вообще, очень похоже, что для Вашей задачи подойдет другое бесплатное приложение Records color highlighting.

Дополнение "Records color highlighting" облегчает навигацию по записям в разделах bpm'online, фокусируя внимание пользователя на элементах, выделенных цветом по предварительно настроенному правилу. Для создания правила выделения можно использовать одно из справочных полей в любом разделе bpm'online и широкую цветовую палитру.

Остается только один не решенный вопрос - как обратиться к колонке, которой нету в отображении Реестра, но есть в самом обращении. Используемый код:

var vip = item.get("нужная колонка");
if (vip.value === *константа*) {
item.customStyle = {
"color": "black",
"background": "#A52A2A"
};

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

Можно брать Id обращения и получать значение нужной колонки из базы.

Быстров Сергей,

В смысле? Добавляете её, когда формируется запрос на выборку в реестр (см addGridDataColumns из GridUtilities). Далее в updateLoadedGridData точно будет ваша колонка в выборке.

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

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

 

 

 

О компании

Компания Fibex специализируется на производстве и продаже паракорда, фастексов, карабинов и другой полезной фурнитуры.

Предпосылки внедрения bpmonline

До внедрения bpm'online менеджеры не вовремя или вообще не обрабатывали клиентов с низким приоритетом. Отсутствовали процессы, которые помогали бы менеджерам взаимодействовать с клиентами.

Основные задачи проекта:

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

Для решения этих задач выбран продукт bpm'online sales.

Выполненные настройки

Работы по адаптации системы под требования компании Fibex были начаты с кастомизации карточки контакта, так как одной из основных целей использования системы bpm’online является сохранение истории взаимоотношений между клиентом и менеджером компании. Так, для сегментации клиентской базы в карточке раздела [Контакт] было добавлено справочное поле «Тип», в котором менеджер отмечал текущий статус клиента по отношению к компании (действующий или потенциальный). В зависимости от типа клиента дальнейшая работа происходит в разделе [Лид] для потенциального клиента и в разделе [Продажа] для существующего.

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

После анализа существующего процесса продаж компании на каждом этапе взаимодействия с клиентом команда внедрения настроила алгоритм действий менеджера с помощью кейс-менеджмента в разделе [Продажи]. При создании продажи первой стадией является Квалификация: на этой стадии система автоматически создает активность, которая сигнализирует о необходимости связаться с клиентом, уточнить и заполнить необходимую информацию, которая будет использоваться для ведения сделки.

После прохождения квалификации система переводит продажу на стадию Оформление продажи, на которой менеджер получает автоматические напоминания о формировании счета и проверке всей необходимой информации в этом счете. После этого менеджер отправляет счет клиенту.

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

На стадии Оплата счета продажа находится до поступления оплаты на расчетный счет компании (подтверждение оплаты менеджер получает от бухгалтерии). После подтверждения отплаты менеджер вручную переводит продажу на завершающую стадию — Завершена с победой.

Согласно ключевым показателям эффективности компании были реализованы Итоги, с помощью которых можно получить информацию в виде графиков, таблиц и числовых показателей. Данный раздел даёт возможность руководителю подразделения получить информацию о эффективности работы как каждого из менеджеров, так и его команды в целом.

 

Ниже примеры отчетов, доступных в различных интервалах времени на текущий день, предыдущий день, текущую неделю, предыдущую неделю и т.д.: 

  • количество обработанных клиентов с типом существующий клиент/потенциальный клиент;
  • количество новых контрагентов;
  • количество завершенных активностей;
  • суммы продаж и их маржи;
  • просроченные задачи менеджеров по продажам и менеджеров производства.

 

Результат

Внедрение bpm’online позволило организовать работу со всей клиентской базой в единой системе, где прописаны все шаги в работе с клиентом и настроены автоматические напоминания по задачам, что повысило качество обработки клиентской базы. К тому же, стандартизированный процесс упростил обучение новых сотрудников компании.

Автоматизация процесса продаж упростила коммуникацию между отделом производства и менеджерами по продажам, что увеличило скорость оформления продаж.

Также появилась возможность прозрачной контроля показателей эффективности работы менеджеров.

 

Нравится

Поделиться

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

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

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

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

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

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

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

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

 

 

Нравится

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

Добрый день!

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

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

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

Калушка Д.,

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

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

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

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

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

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

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

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

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

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