Добрый день.

Возникла следующая задача: у меня в карточке есть поле "Рекомендуемая дата запуска". Значение в это поле должно проставляться автоматически, как : текущая дата + 10 рабочих дней, например. Учитываться должны только рабочие дни, исключая выходные\праздники, которые указаны в календаре (использую типовой календарь в системе, там указываю время рабочего дня, а так же все нужные праздники). Как мне обратиться к данному календарю? Как мне рассчитать верно дату?

P.S: Данную дату мне нужно проставлять в определенный момент в ходе бизнес-процесса.

Нравится

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

Добрый день!

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

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

Рекомендую ознакомится с таблицами и связями в них (названия колонок интуитивно названы с учетом на какую таблицу они ссылаются): WorkingTimeInterval -> DayInCalendar/DayOfWeek - > Calendar.

Все задействованные схемы находятся в пакете Calendar.

Классическая задача. Например, в БП можно решить скриптом:

https://stackoverflow.com/questions/4604461/c-sharp-datetime-to-add-sub…

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

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

При попытке изменить значение поля Ответственный в записи лида, должно появиться окно с реестром записей контактов при выборе из справочника Контакт. Но в итоге появляется пустое окно, в консоли появляется следующая ошибка https://yadi.sk/d/bdZQ5R6k3JQBxt После обновления страницы снова пробую поменять ответственного результат тот же, консоль отображает следующее https://yadi.sk/d/SE5OTKS_3JQC8o https://yadi.sk/d/Q6bHaOUQ3JQCCK
Также страницу обновляет очень медленно.

Какова природа данной ошибки?

Нравится

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

Елена, сообщение консоли говорит о том, что превышено время ожидания ответа от сервера.
Причины могут быть совершенно разными: загружен сервер (в таком случае нужно анализировать производительность); сам запрос по получению списка контактов выполняется долго и клиентская сторона не дожидается его выполнения.

Для точной диагностики необходим профайлинг запроса на стороне Sql-сервера и отладка.

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

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

Здравствуйте. Разворачиваю приложение bpm on-site, на IIS Windows 7.
Но вот в чем проблема, приложение установил в IIS, путь к базе тоже вроде всё корректно прописано, НО когда запускаю приложение после ввода логина и пароля, в окне входа, появляется логотип "bpm'online", и ВСЁ, дальше ничего не происходит. Страницу не грузит, просто логотип bpm, приложение пересоздавал кучу раз с разными параметрами. Может кто-нибудь подскажет, в чем проблема может быть?

Нравится

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

Здравствуйте!

Скорее всего не хватает ролей/компонент на веб-сервере IIS.
Перечень найдете по ссылке https://academy.terrasoft.ru/documents/sales-enterprise/7-10/ustanovka-…

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

Добрый день, коллеги!
Есть разработческая площадка, развернутая на БД клиента с неактуальными данными, на ней ведутся все доработки в свой пакет и фиксируются в хранилище. Также есть "пустая" продуктивная площадка, на которую все изменения применяются. Кроме того, необходимо настроить права доступа, интеграцию с АД, прописать орг структуру. После окончания всех работ нужно перенести все изменения на актуальную базу клиента. Все доработки перенести с помощью хранилища не проблема, но права доступа, интеграция с АД, пользователи, орг структура, настройки почтового ящика хранятся в БД. Поэтому при переносе эти настройки можно потерять. В связи с этим вопрос: есть ли способ переноса данных с одной базы на другую?

Нравится

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

Добрый день, Елена.

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

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

Перенос настроек интеграции с LDAP также приведет к тому, что синхронизация не будет запущена.

В данной ситуации правильно будет выполнить все настройки вручную на актуальной БД.

"Мария Ватулина" написал:

Добрый день, Елена.

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

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

Перенос настроек интеграции с LDAP также приведет к тому, что синхронизация не будет запущена.

В данной ситуации правильно будет выполнить все настройки вручную на актуальной БД.


Мария, спасибо за ответ!

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

Коллеги, добрый день!
При попытке синхронизации с AD в бизнес процессе возникает ошибка: Terrasoft.Common.ArgumentNullOrEmptyException: Значение аргумента "format" не может быть пустым
в Terrasoft.Core.LDAP.LdapUtilities.LogInfo(String format, Object[] args)
в Terrasoft.Core.Process.SyncWithLDAPProcess.ScriptCheckInclusionExecute(ProcessExecutingContext context)
в Terrasoft.Core.Process.ProcessFlowElement.Execute(ProcessExecutingContext context)

Группы с орг структурой я связала

Скриншоты БП из журнала процессов https://yadi.sk/d/4RxVC_F_3Fy4vK https://yadi.sk/d/C8j4PvRZ3Fy5BB

С чем это может быть связано?

Нравится

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

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

Выполните sql-скрипт:
select *
from SysLocalizableValue innerValue
where innerValue.SysSchemaId = (select Id from SysSchema where Name = 'SyncWithLDAPProcess')
and innerValue.SysCultureId = '1A778E3F-0A8E-E111-84A3-00155D054C03'

В случае если столбец Value окажется пустым, выполните следующий скрипт:

insert into SysLocalizableValue (
Id
, SysPackageId
, SysSchemaId
, ResourceManager
, SysCultureId
, ResourceType
, IsChanged
, [Key]
, Value
, ImageData)
select
NEWID()
, SysPackageId
, SysSchemaId
, ResourceManager
, '1A778E3F-0A8E-E111-84A3-00155D054C03'
, ResourceType
, IsChanged
, [Key]
, Value
, ImageData
from SysLocalizableValue lczValue
where lczValue.SysSchemaId = (select Id from SysSchema where Name = 'SyncWithLDAPProcess')
and lczValue.SysCultureId = 'A5420246-0A8E-E111-84A3-00155D054C03'
and not exists (
select 1
from SysLocalizableValue innerValue
where innerValue.SysSchemaId = (select Id from SysSchema where Name = 'SyncWithLDAPProcess')
and innerValue.SysCultureId = '1A778E3F-0A8E-E111-84A3-00155D054C03'
and innerValue.[Key] = lczValue.[Key]
)

После выполнения запроса выполните очистку Redis и перезапуск пула в IIS.

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

Добрый день!

Столкнулся с такой проблемой: После смены состояния заказа пользователю задается вопрос о создании активности. После утвердительного ответа пользователь автоматически переходит на созданную страницу редактирования активности. Как составить бизнес-процесс так, чтобы значения параметров Контрагент и Контакт заказа автоматически переносились в страницу редактирования активности?

Буду очень признателен Вашей помощи.

Нравится

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

Здравствуйте!

Если через DCM, то нужно создать подпроцесс.

В подпроцесс необходимо передать Id заказа, Заказ.Контакт, Заказ.Контрагент. Соответственно, в подпроцессе должны быть аналогичные параметры.
Как вариант, можно создать простую задачу, заполнив нужные поля.

Если процесс вызывается по событию (стартовым сигналом), тогда нужно использовать промежуточное чтение данных для того, чтобы получить значения измененной записи. Потом в элементе "Задача" нужно замапить поля "Контакт", "Контрагент" на соответствующие параметры из чтения данных.

[quote="Демьяник Алексей"]
Благодарю за ответ.

"Демьяник Алексей" написал:

.....Если процесс вызывается по событию (стартовым сигналом), тогда нужно использовать промежуточное чтение данных для того, чтобы получить значения измененной записи. Потом в элементе "Задача" нужно замапить поля "Контакт", "Контрагент" на соответствующие параметры из чтения данных.

Алексей, добрый день!

У меня похожий вопрос. Из карточки контакта перехожу в пользовательскую активность и не получается унаследовать ФИО и пр. из карточки контакта.

Процесс запускаю по сигнальному элементу, в котором отслеживаю добавление записи с конкретными типом активности. Далее, по ID читаю Активность и читаю Контакт. Затем записываю ФИО из Контакта в нужное поле активности. И,... ничего не записывается. Прошу подсказать, что нужно изменить?
Заранее благодарен!

Сергей, здравствуйте!

Алгоритм решения:
А. Создать процесс, условно CreateActivity:
1. Добавить в процесс параметр с типом Уникальный идентификатор – условно ParamContactId.
2. Добавить данные в объект Активность. Заполнить интересующие поля, указать [Тип = Выставка], [Контакт – ФИО = ParamContactId].
3. Элемент [Открыть страницу редактирования], открыть страницу существующей активности, где Id = Пункт 2.Id созданной записи.

Б. Заместить страницу редактирования контакта:
1. Добавить пользовательское действие.
2. Добавить обработчик. Обработчик будет:
- запускать процесс CreateActivity
- в параметр процесса ParamContactId – передавать Id текущего контакта

Пример создания пользовательской кнопки/действия и обработчика (запуск процесса) есть на академии и community:
https://academy.terrasoft.ua/documents/technic-sdk/7-9/zapusk-processa-…
http://www.community.terrasoft.ru/forum/topic/10554
http://www.community.terrasoft.ru/forum/topic/14042

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

Здравствуйте!
В разделе "Активности" есть представление "Планирование визитов". На нем расположен список контрагентов, расписание и карта.
Если я добавляю эти объекты в свой раздел,то они располагаются друг под другом. Подскажите, пожалуйста, где можно настроить их позиции так, чтобы они были как на планировании визитов (т.е., в строчку, а не столбиком)?

Нравится

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

Добрый день, Никита.

Скиньте, пожалуйста, скриншот того, как Вы добавляете объекты в свой раздел и как они располагаются друг под другом.

Если я правильно понял, то Вы имеете в виду объекты: реестр, расписание и карта. Если это те объекты, о которых речь, то их позиционирование регламентируется CSS стилями. Подробнее о расположении элементов в строку с помощью CSS можно почитать тут:
http://htmlbook.ru/samlayout/blochnaya-verstka/strochno-blochnye-elemen…
И по запросу в Google:
css div расположение элементов в строку

"E.Podkovka" написал:

Если я правильно понял, то Вы имеете в виду объекты: реестр, расписание и карта. Если это те объекты, о которых речь, то их позиционирование регламентируется CSS стилями.


Действительно, добавил свой модуль с разметкой и подключил его. Все заработало. Спасибо!

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

Добрый день, коллеги.
Необходимо запретить возможность копирования содержимого реестра в разделах Лиды, Контрагенты, Контакты, Продажи.
Как это можно реализовать?
Сейчас при выделении всего списка в реестре, пользователь может одним нажатием Ctrl+C скопировать все записи.
Заранее спасибо!

Нравится

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

Добрый день, Антон.

Можно организовать только защиту от дурака, ведь записи уже загружены пользователю и он их уже видит.
Отключить копирование можно создав замещающий модуль, указать в качестве родительского объекта "Раздел лиды" и добавить следующий код:

define("LeadSectionV2", ["terrasoft", "GeneratedWebFormUtilities"],
	function(Terrasoft, GeneratedWebFormUtilities) {
		return {
			entitySchemaName: "Lead",
			methods: {
				init: function() {
					this.callParent(arguments);
					document.body.oncopy = function() { return false; };
				}
			}
		};
	});
Показать все комментарии

Здравствуйте,
подскажите как я могу создать собственную страницу в BPMonline для решения такой задачи:

на странице контрагента есть кнопка ("Отправить email"). Мне нужно выбрать из "Средства связи" сам email, на который отправлять письмо. Из самой страницы редактирования никак нельзя указать его либо выделить.

Можно ли создать отдельную страницу, чтобы при нажатии на кнопку она открывалась и содержала, например, элементы checkbox для выбора того или иного email? Как к ней в таком случае обращаться, "переходить", я имею ввиду код кнопки ("Отправить email").

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

Нравится

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

Здравствуйте, Валентин!
Не совсем понял суть вопроса.
На странице контрагента Вы хотите добавить кнопку для отправки e-mail?
Можно добавить поле-справочник для выбора e-mail, затем считывать из него.
Опишите, пожалуйста, более структурированно Ваш вопрос.

Добрый день, Андрей!

Разбираюсь с системой, пока не совсем понятна логика работы с User интерфейсом, в частности добавление собственных контролов программно в конфигураторе (меню) и обработчиков их событий

1. Подскажите как добавить обработчик события кнопки. На примере кнопки выгрузки в xml записи Контрагента. Насколько я понимаю нужно создать Исходный код на C# и привязать функцию-обработчик к событию нажатия кнопки в карточке на js.

Спасибо

Валентин, как вариант решения могу предложить добавить пункт в выпадающее меню "Действия".
Более подробно здесь:
http://www.terrasoft.ua/bpmonlinesdk/CreateActionForStandartSection.html

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

Здравствуйте уважаемые разработчики!

Стоит задача интеграции BPMOnline 7 со сторонним приложением. Есть стандартный бизнес процесс. Необходимо, чтобы при добавлении записи из внешнего приложения запускался бизнес процесс, наступало следующее действие (формировалась задача менеджеру и т.д.). Каким образом это лучше реализовать?

1. Добавление записи через OData. Но в таком случае сработает ли начальное событие "Сигнал"?

2. Использование механизма ProcessEngineService?

Заранее благодарен.

Нравится

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

Александр, оба варианта имеют право на жизнь.

При работе с объектами через сервис OData все внутренние события и обработчики в процессах системы отрабатывают так же, если бы вы добавляли запись через интерфейс или с помощью импорта из excel.
Вы можете создать процесс с начальным событием "Сигнал", отрабатывающим на создание нового объекта в системе и добавить условия которым должен соответствовать вновь созданный объект.
Но в таком случае процесс будет запускаться автоматически для всех созданных объектов, не зависимо от того объект создан пользователем через интерфейс или создан запросом к OData с помощью стороннего приложения.

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

Спасибо, Игорь! Понятно.

И вопрос по ProcessEngineService. Можно ли задавать динамически приходящие параметры: например, в одном случае приходит 3 параметра, в другом 5?

Да, при запуске процесса через ProcessEngineService установка значений в параметры не обязательна.

Если значение не передано, параметр будет проинициализирован значением по умолчанию.

Если у процесса есть два параметра ParamA и ParamB.

Оба запроса создадут новый экземпляр процесса и запустят на выполнение:

http://demo.bpmonline.com/0/ServiceModel/ProcessEngineService.svc/My_Pr…
http://demo.bpmonline.com/0/ServiceModel/ProcessEngineService.svc/My_Pr…
При втором вызове ParamB будет равен пустой строке.

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

Пр.
/Execute?ParamA=Den&ResultParameterName=Param2

После завершения процесса в теле ответа будет лежать сериализированное значение параметра Param2

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