Вопрос

Добрый день!

Создаю процесс, который в деталь добавляет Результат выборки по объекту. 

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

Можно ли как-то ограничить количество добавляемых записей при добавлении результата выборки (например, свойство, где указывается количество добавляемых записей - 10, 20 и т.д.)?

У меня такой же вопрос

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

В элементе БП 'Добавить данные' такая возможность отсутствует.

Выбрать точное количество записей запроса можно в элементе БП 'Читать данные'. Для этого нужно перейти в расширенный режим параметров элемента бизнес-процесса и найти параметр 'Количество записей для чтения':

Вы можете решить Вашу задачу таким образом.

1. С помощью элемента 'Читать данные' вычитать нужное количество записей.

2. В параметры бизнес-процесса добавить параметр с типом "Коллекция объектов'  и там же указать, что в него должен поместиться результат выборки из элемента 'Читать данные'.

3. После элемента 'Читать данные' добавить элемент 'Задание-сценарий' и уже в нём скриптом вставить нужные данные коллекции из параметра бизнес-процесса.

Или же просто реализовать всю логику в элементе 'Задание-сценарий'.

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

Добрый день. Как правильно добавлять в BPM ссылку на внешнюю службу asmx?

Обычно в VS необходимо добавить ссылку и ввести url службы, но при вызове службы Terrasoft.Configuration.Dev.НазваниеСлужбы приложение не компилируется.

ERROR: The type or namespace name 'Dev' does not exist in the namespace 'Terrasoft.Configuration' (are you missing an assembly reference?) FILE: ICLObject.ICL_Entity.cs LINE: 27

У меня такой же вопрос

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

Там где параметры БП, есть вкладка методы в самом вверху этой вкладки есть Using, возле нее жми + и добавляй свой assembly reference.

Так же посмотри на статью Вызов веб-сервисов из бизнес-процессов

 

 

 

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

Здравствуйте, коллеги.

Появилась необходимость добавить смайлики к модулю HtmlEditModule (используется для написания email внутри bpm'online, а так же в различных текстовых полях вроде Примечаний). Насколько удалось докопаться, данный модуль реализован с помощью CKEditor, на оф.сайте которого предлагается уже разработанный аддон Smiley. В принципе, понятно каким образом можно его добавить для системы, развёрнутой on-site, поскольку необходимо всего лишь поместить соответствующие файлы с оф.сайта в папку CKEditor ([директория установки экземпляра bpm'online]\Terrasoft.WebApp\Resources\ui\CKEditor) и произвести необходимые замещения в модулях системы. Но возникает вопрос, каким образом этот аддон можно установить на системе, развёрнутой в облаке? Terrasoft предоставляет подобный сервис или же для облачных систем такая кастомизация в принципе невозможна?

И, раз уж на то пошло, если у кого-нибудь был опыт работы с аддонами CKEditor, не могли бы вы поделиться советами по данному вопросу?

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

У меня такой же вопрос

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

Запросите у поддержки возможность обновить CKEditor  для вашего сайта в облаке....

Запросите у поддержки возможность обновить CKEditor  для вашего сайта в облаке....

Если есть тестовый локальный сайт, можно протестировать на нём, а потом передать в поддержку готовые файлы и инструкцию, куда их класть.

Но, например, добавление шрифтов в CKEditor делается без доступа на сервер, чисто в конфигурации. Возможно, и аддон Smiley можно добавить похожим образом.

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

Добрый день, коллеги.

Появился вопрос насчёт разделения прочитанных и непрочитанных email сообщений в соответствующем разделе коммуникационной панели. Возможно ли как-то визуально разделять email по прочитанности в этом списке? Подтягивается ли этот параметр каждого письма через интеграцию с почтой или в контексте bpm'online возможно разделение только на обработанные и необработанные письма?

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

У меня такой же вопрос

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

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

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

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

Добрый день!

Подскажите, как реализовать задачу?

При выборе строки в гриде модального окна Распределение продуктов устанавливать фокус в поле Количество, выделять значение, после изменения по нажатию кнопки Enter сохранять и, при необходимости, переходить на следующую строку.

Окно вызывается в графике оплат и поставок на вкладке Паспорт в Заказе.

У меня такой же вопрос

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

Борис Леонов,

Немного лень экспериментировать, но я бы в функции onGridClick подменил target. а-ля:

onGridClick: function(event, target) {
	var newDiv = target.parentElement.children[5]; //берём div нужного элемента. 5 - номер колонки
	target = newDiv.children[0]; //проваливаемся в span
	.....
}

 

Как минимум лепить какой-нибудь ConfigurationGridV2.

В нем переопределять onGridClick (чтобы по клику в фокус попадало только поле количество), переопределять keyMap (там сейчас Tab классно работает, даже ряд создает. осталось всё это перенести на enter), ну и вызывать AddNewRow на клиенте по enter-ивенту из грида.

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

я знал что вы ответите :)

а можно пример onGridClick с назначением фокуса конкретному полю?

Борис Леонов,

Немного лень экспериментировать, но я бы в функции onGridClick подменил target. а-ля:

onGridClick: function(event, target) {
	var newDiv = target.parentElement.children[5]; //берём div нужного элемента. 5 - номер колонки
	target = newDiv.children[0]; //проваливаемся в span
	.....
}

 

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

Идея понятна, большое спасибо!

 

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

Коллеги, доброго дня!
У меня возник вопрос по решению sales - возможно ли реализовать стандартным функционалом bpm через бизнес-процессы такую логику: 

Отправлять уведомление отв. менеджеру контрагента в том случае, если закрепленный за ним контрагент не сделал заказ в течение месяца и с ним нужно связаться или это возможно реализовать только кодом?

Спасибо

У меня такой же вопрос

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

Алла Савельева,

А элемент БП формула уже убрали из дизайнера процессов? Это я к +1 месяц к дате последнего заказа (продажи) и сравнения с текущей датой! Подробности тут

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

Для решения задачи укажите в значении .AddHours() добавляемое количество часов в виде:

([#Читать лид.Первый элемент результирующей коллекции.Дата создания#].AddHours(3)).Hour

 

 

 

На вскидку раз в день запускать вручную или через планировщик БП который ищет контрагентов у которых с момента последнего заказа прошел месяц. Находит их менеджера (ответственного) вычитывает его email и отправляет письма.

Вроде все без кода можно сделать. На чем споткнетесь пишите.

 

Григорий Чех,

А каким образом стандартными средствами фильтрации мы можем проверить, что прошел месяц с момента последнего заказа?

Можем только проверить были ли у клиента заказы в текущем или предыдущем месяце.

Хотя, возможно, что именно такая логика и подойдет Роману.

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

У меня есть другой вариант реализации с помощью бизнес-процессов и без использования программного кода. Для решения нужно реализовать 2 бизнес-процесса.

1. БП, который:

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

и

б) будет записывать в некоторое поле таблицы клиентов (например, назовем его 'Дата актуализации клиента') дату последнего заказа клиента + 1 месяц, т.е. это будет максимальная дата, когда клиент должен сделать заказ.

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

Алла Савельева,

А элемент БП формула уже убрали из дизайнера процессов? Это я к +1 месяц к дате последнего заказа (продажи) и сравнения с текущей датой! Подробности тут

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

Для решения задачи укажите в значении .AddHours() добавляемое количество часов в виде:

([#Читать лид.Первый элемент результирующей коллекции.Дата создания#].AddHours(3)).Hour

 

 

 

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

да и вторую веточку процесса (первая от сигнала на таймер) - на ожидание изменения ответственного (сигнал по полю ответственный) с выходом на останов. Ну чтобы два процесса не работали по одному контрагу :) 

Я как любитель VIEW сделал бы такую выборку на стороне сервера. И каждую ночь бы по всем записям данного VIEW посылал уведомления. 
Работать будет железно, вне зависимости от капризности давно запущенных БП по таймеру.
Логика будет простая и всегда легкая для изменения.
Ну, и выборка ничем, кроме фантазии не ограничена

Владимир Соколов,

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

А как консультант, я бы не использовал уведомления вообще. Уведомления - это самый неконтролируемый инструмент, который не даёт нужного эффекта. Лучше сделать KPI, аналитику и бизнес-процесс хотя бы с простановкой задач.
VIEW будет нужна, так как периодичность закупок у разных категорий клиентов разная. Следовательно, не у всех будет 30 дней.

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

Коллеги, добрый день! С чем может быть связана проблема, что при запуске импорта (12, 5 тыс строк всего то) импорт просто висит часами на 0% и ничего не происходит.

Маленькими порциями (10) этот пакет заходит.

 

 

У меня такой же вопрос

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

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

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

Если маленькими порциями импортуется то возможно на какой то записи затыкается? Нужно смотреть логи импорта и потом возможно дебажится. Или внимательно просмотреть источник данных для импорта, скорее всего эксель, может что то бросится в глаза!

И просмотрите рекомендации по подготовке файла для импорта данных

 

 

 

Григорий Чех,

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

чется).

 

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

Коллеги всем доброго времени суток!
Столкнулся со следующей проблемой, обработки исключений возвращаемых при запросе к внешнему API.
Делаю запрос через WebClient
 

public void Patch(string method, Dictionary<string, string> parameters)
        {
            try
            {
                NameValueCollection parametersValues = new NameValueCollection();
 
                foreach (var parameter in parameters)
                {
                    if (String.IsNullOrEmpty(parameter.Value))
                    {
                        parametersValues.Add(parameter.Key, null);
                        continue;
                    }
                    parametersValues.Add(parameter.Key, parameter.Value);
                }
 
                string uri = $"{abUrl}{method}";
                using (WebClient webClient = new WebClient())
                {
                    string credentials = Convert.ToBase64String(
                        Encoding.ASCII.GetBytes(LoginDev + ":" + PassDev));
                    webClient.Headers[HttpRequestHeader.Authorization] = $"Basic {credentials}";
                    webClient.Headers.Add("Content-Type", "application/x-www-form-urlencoded");
                    byte[] result = webClient.UploadValues(uri, "PATCH", parametersValues);
                    var response = Encoding.UTF8.GetString(result);
                }
 
            }
            catch (WebException e)
            {
                var exceptionMessage = e.Message;
                if (e.Status.Equals(WebExceptionStatus.ProtocolError))
                {
                    if (e.Response is HttpWebResponse)
                    {
                        var sr = new StreamReader(e.Response.GetResponseStream());
                        var response = sr.ReadToEnd();
                        sr.Close();
                        sr.Dispose();
                    }
                }
            }
        }

Когда пытаюсь обработать WebException в Bpm то мне записывает в логи - http://prntscr.com/kr7aja
 

При выполнении данного кода через консольное приложение обработка срабатывает корректно - http://prntscr.com/kr7baj
Подскажите в чем может быть проблема, как бороться?
Заранее благодарен.

У меня такой же вопрос

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

Попробуйте, вместо public void Patch сделать public string Patch, объявите переменную, например result и в catch, сделайте result += e.Message, ну и по итогу соответственно return result

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

я в самом методе Patch в блоке catch логирую 

e.Message - http://prntscr.com/kr838h
в Bpm у меня метод Patch возвращает string. Суть в другом почему в catch обрабатывается Too many redirects, а при выполнении данного метода из консольного приложения обрабатывается корректно, то что возвращает сервер к которому запрос был.

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

А в консоли, на этом прерывается выполнение? Повторно не вызывается? Возможно он просто неоднократно вызывается и по итогу в лог попадает конечная ошибка

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

В консоли - при выполнении кода вылетает в catch и потом на выход метода 

При выполнении метода из консоли запустил fiddler запрос ушел один раз - http://prntscr.com/kr8oum

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

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

Задача - на островах Контакт и Контрагент в Лиде сделать функционал, аналогичный Квалификации (ну не устраивает кнопка Квалификация((...)

Т.е. при нажатии на кнопку Добавить должен создаться Контрагент с данными из группы полей Регистрационные данные.

Подскажите как  привязать  процесс к кнопке Добавить? Что то не можем до нее добраться).

спасибо!

 

 

Прикрепленные файлы

У меня такой же вопрос

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

Смотри BaseProfileSchema  метод addRecord

Смотри BaseProfileSchema  метод addRecord

Григорий, спасибо! попробуем)

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

Как включается режим использования bundle-схем в версии 7.12.3?

Включил UseIncludeDependenciesSource во внутреннем веб-конфиге, но ничего не получается.

Компиляции и перезапуски ИИС или пула так же ничего не меняет.

У меня такой же вопрос

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

В 7.11 это настраивалось в web.config (папка Terrasoft.WebApp) приложения в секции "appSettings" строкой

"add key="SeparatedJsFiles" value="true" /"

SeparatedJsFiles это одно, и оно у меня не добавлено, т.е. файлы не Separated, но при этом они не объединены в Bundle-ы. У клиента на проде все дефайны разбиты по бандлам, у меня на тесте нет, как результат тестирование не совсем полное, могут быть нюансы, которые лучше бы отлавливать и исправлять до передачи пакетов.

Вы имеете введу выгрузку исходного кода клиентских схем?

Тогда смотри тут

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

Версии на проде и тесте совпадают?

Григорий Чех,

Да.

 

Отключите UseIncludeDependenciesSource  и добавьте во внутрений web.config (папка Terrasoft.WebApp) в секцию "appSettings" строкой

<add key="SeparatedJsFiles" value="true" />

Перезайдите в систему

Григорий Чех

Повторюсь, включать SeparatedJsFiles я умею. Вопрос совсем не об этом.

Сергей, в таком случае выключите SeparatedJsFiles, это решит и Ваш вопрос. Либо же опишите более подробно, что у Вас сейчас и что хотите получить.

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