Добрый день!
Подскажите пожалуйста как в скрипте перекрасить компоненты и сделать текст жирным и курсивным: Page.Label или Page.TextEdit, это мне надо в BPMOnline CRM, предоставьте пожалуйста примеры.

Нравится

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

Просто в Caption для Label'а пишете с HTML-тегами.

"Зверев Александр" написал:

Просто в Caption для Label'а пишете с HTML-тегами.


спасибо.

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

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

Есть ли возможность в детали Активность (ActivityDetail из пакета NUI) сделать наименование задачи ссылочным как в разделах? (то бишь при щелчке в гриде на наименование задачи открывать карточку редактирования задачи)

Или хотя бы прикрутить к определенной колонке грида что-нить типа события OnDblClick по которому будет открываться на редактирование выбранная задача из детали

На данный момент просто тупо добавил кнопку Изменить по аналогии с кнопкой Добавить, но мне все же хотелось бы сделать значение именно ссылкой на объект, так как перегружать интерфейс кнопками очень не хотелось бы )

p.s. Есть ли где-нить инфа по созданию модулей (как создать грид, описание конфигов и кастом конфигов для колонок и т.д.)?
раз уж в 7ке IDE для создания карточек не используется, то хотелось бы хотя бы в виде SDK инфу получить или примеров

Использую BPMonline CRM 7

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

Нравится

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

Добрый день,

Уточните, пожалуйста, сборку, которую используете.

BPMonline CRM Версия 7.0.0.207

Добрый день,

Уточняю у департамента разработки. В ближайшее время предоставим ответ.

День добрый!
Максим, как продвигается уточнение? )

С уважением, Волков Артем

Артем, здравствуйте.

Запрос сейчас на техническом лидере департамента разработки. Рекомендации должны придти до 02.09.

Спасибо, будем ждать
p.s. в рамках обращения 0149995 нам готовят новую сборку (или пакет обновлений), так что решение необходимо будет для будущей версии (номер сборки не знаю)

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

Специалистами департамента разработки предлагается следующий механизм для реализации перехода по ссылкам при клике на название активности в детали активности:

1) Удалить в профиле сохранённую настройку кастомизацию для детали в данной секции
Например для Раздела контакта: delete from SysProfileData where [Key]='ContactActivityDetailGridSettings';

2) Необходимо создать замещающий клиентский модуль ActivityDetail. В качестве родительского объекта необходимо указать “Схема Детали Активности” Добавить строки локализации TitleCaption, StartDateCaption, StatusCaption. Зависимость – “Активность ( Base )”

3) В код добавить следующий код:

define('ActivityDetail', ['Activity', 'sandbox', 'ActivityDetailStructure', 'ActivityDetailResources',
    'ConfigurationEnums', 'ConfigurationConstants'],
    function(Activity, sandbox, structure, resources, ConfigurationEnums, ConfigurationConstants) {
        structure.userCode = function() {
            var entitySchema = this.entitySchema = Activity;
            this.name = 'ActivityDetailViewModel';
            this.editPageName = 'ActivityPage';
            this.typeColumn = "Type";
 
            this.columnsConfig[0][0].link = {bindTo:'getLink'};
 
            this.captionsConfig = [
                {
                    cols: 12,
                    name: resources.localizableStrings.TitleCaption
                },
                {
                    cols: 6,
                    name: resources.localizableStrings.StartDateCaption
                },
                {
                    cols: 6,
                    name: resources.localizableStrings.StatusCaption
                }
            ];
 
 
            this.methods.modifyItems = function(items) {
                for (var index in items) {
                    items[index].getLink = function() {
                        var link = Terrasoft.workspaceBaseUrl;
                        var id = this.get('Id');
                        var type = this.get('Type');
                        var schemaName = 'Activity';
                        var config = Terrasoft.configuration.ModuleStructure[schemaName];
                        var URL = '';
                        var cardSchema;
                        if (type != null && type.value == ConfigurationConstants.Activity.Email){
                            cardSchema = 'EmailPage';
                        } else {
                            cardSchema = config.cardSchema;
                        }
                        var notes = "";
                        var target = '_self';
                        URL = [link, 'Nui/ViewModule.aspx#'+config.cardModule, cardSchema, ConfigurationEnums.CardState.Edit, id];
                        return {
                            url: URL.join('/'),
                            title: notes,
                            target: target
                        };
                    };
                }
            };
 
        };
        return structure;
    });

Большое спасибо!

День добрый!
Ваш способ помог, но к сожалению есть небольшая проблемка c отображением детали

Поле создания замещающего модуля для ActivityDetail с кодом:

define('ActivityDetail', ['Activity', 'sandbox', 'ActivityDetailStructure', 'ActivityDetailResources',
    'ConfigurationEnums', 'ConfigurationConstants'],
    function(Activity, sandbox, structure, resources, ConfigurationEnums, ConfigurationConstants) {
        structure.userCode = function() {
            var entitySchema = this.entitySchema = Activity;
            this.name = 'ActivityDetailViewModel';
            this.editPageName = 'ActivityPage';
            this.typeColumn = "Type";
 
 
            this.captionsConfig = [
                {
                    cols: 12,
                    name: resources.localizableStrings.TitleCaption
                },
                {
                    cols: 6,
                    name: resources.localizableStrings.StartDateCaption
                },
                {
                    cols: 6,
                    name: resources.localizableStrings.StatusCaption
                }
            ];
 
			this.columnsConfig[0][0].link = {bindTo: 'getLink'};
 
            this.methods.modifyItems = function(items) {
                for (var index in items) {
                    items[index].getLink = function() {
                        var link = Terrasoft.workspaceBaseUrl;
                        var id = this.get('Id');
                        var type = this.get('Type');
                        var schemaName = 'Activity';
                        var config = Terrasoft.configuration.ModuleStructure[schemaName];
                        var URL = '';
                        var cardSchema;
                        if (type != null && type.value == ConfigurationConstants.Activity.Email) {
                            cardSchema = 'EmailPage';
                        } else {
                            cardSchema = config.cardSchema;
                        }
                        var notes = "";
                        var target = '_self';
                        URL = [link, 'Nui/ViewModule.aspx#' + config.cardModule, cardSchema, ConfigurationEnums.CardState.Edit, id];
                        return {
                            url: URL.join('/'),
                            title: notes,
                            target: target
                        };
                    };
                }
            };
 
        };
        return structure;
    });

произошло смещение колонок + появился непонятный элемент undefined (см. activity_detail_err.png) при чем в хтмле он оформлен без тегов (см. activity_detail_html.png)
При отладке вплоть до самой загрузки данных в конфиге показывает 3 колонки, откуда появляется 4ая могу только догадываться ) видимо добавляется системой так же как и чекбокс для мультиселекта при формировании ряда
Очень надеюсь что хотя бы подскажете куда копать, потому я уже даже не знаю )

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

Добрый день,

Необходимо заменить строку в коде

                this.columnsConfig[0][0].link = {bindTo:'getLink'};

на

this.columnsConfig = this.columnsConfig[0];
               this.columnsConfig[0].link = {bindTo:'getLink'};

Спасибо, теперь все идеально )

Обнаружили такую проблему - при настройке отображаемых на детали колонок ссылки пропадают. Это можно как-нибудь обойти?

И ещё одну - если после перехода по ссылке нажать Отмену, то система выбрасывает в раздел, а не в запись раздела.

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

Добрый день!
Подскажите, пожалуйста.
Вы написали такой кусочек кода:

"var target = '_self';
...
target: target"

Это, чтобы ссылка открывалась в текущей вкладке, а как сделать так, чтобы она открывалась в новой вкладке??

Такой код не проходит, к сожалению.

"var target = '_blank';
...
target: target"

Версия системы: 7.5.0.1328

Настя, добрый день!

При использовании базового механизма перехода по ссылке из детали (в результате обычно открывается карточка редактирования объекта) используется метод openCardInChain базовой модели представления (BaseSchemaViewModel), который открывает карточку в том же окне, независимо от атрибута target.

Для того, чтобы по ссылке карточка открывалась в новом окне, необходимо использовать метод open глобального объекта window. Например:

var url = Terrasoft.workspaceBaseUrl;
window.open(url);

Примеры использования - модуль SystemDesigner пакета UIv2: действия "Мастер разделов", "Мастер деталей", "Управление конфигурацией".

Олег, здравствуйте!
Спасибо Вам большое за ответ.
Я посмотрела SystemDesigner и решила сделать наподобие.
У меня есть поле UsrFoto. Я добавила туда следующие строчки:

"click": {"bindTo": "onNavigateClick"},
"itemType": Terrasoft.ViewItemType.LINK,

{
		"operation": "insert",
		"name": "UsrFoto",
		"values": {
			"layout": {
				"column": 0,
				"row": 7,
				"colSpan": 24,
				"rowSpan": 1
			},
			"bindTo": "UsrFoto",
			"caption": {
				"bindTo": "Resources.Strings.UsrFotoCaption"
			},
			"click": {"bindTo": "onNavigateClick"},
			"itemType": Terrasoft.ViewItemType.LINK,
			"textSize": 0,
			"contentType": 1,
			//"itemType": Terrasoft.ViewItemType.HYPERLINK,
			"labelConfig": {
				"visible": true
			},
			"enabled": true/*,
			"showValueAsLink": true,
			"href": {
   			"bindTo": "getLink"
			}*/
	},
		"parentName": "Header",
		"propertyName": "items",
		"index": 15
	}

И в методы также добавила следующее:

			onNavigateClick: function() {
			var url = this.get("UsrFoto");
				if (url != null) {
					window.open(url, "_blank", "height=" + this.get("WindowHeight") + ",width=" + this.get("WindowWidth"));
			}
			}

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

Методом последовательного комментирования выяснила, что проблема в этой строчке: "click": {"bindTo": "onNavigateClick"},

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

Вот например кусочек кода в файле SystemDesigner, пример с которого я брала.

{
				"operation": "insert",
				"propertyName": "items",
				"parentName": "UsersTile",
				"name": "ObjectRightsManagement",
				"values": {
					"itemType": Terrasoft.ViewItemType.LINK,
					"caption": {"bindTo": "Resources.Strings.ObjectRightsManagementLinkCaption"},
					"click": {"bindTo": "onNavigateToObjectRightsManagementClick"}
				}
			}
 
 
... 
 
 
navigateToObjectRightsManagement: function() {
				if (this.get("CanManageAdministration") === true) {
					var url = this.Terrasoft.workspaceBaseUrl +
						"/ViewPage.aspx?Id=5e5f9a9e-aa7d-407d-9e1e-1c24c3f9b59a&" +
						"ActiveTabId=PageContainer_34d8ed7df8e8e011837600155d04c01d_fe571096f36b14102781485b39b2edcc_" +
						"99ea5ea6447249a39dfa660296bb4674";
					window.open(url, "_blank");
				} else {

Настя, у контрола, который создаётся по полю "UsrFoto", нет свойства "click".

Вы можете добавить свой контрол, который не ссылается на колонку Entity-схемы, с типом BUTTON или LABEL, и связать его свойство "click" с обработчиком onNavigateClick.

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

Я посмотрела как это реализовано с Средствах связи контакта (там же как раз есть пол Web и по нажатию на другую вкладку как раз переходит), но не могу там разобраться..

Настя, деталь Средства связи отличается от деталей, которые созданы на основании BaseDetailV2.

Для реализации Вашей задачи необходимо в блоке diff для Вашего поля UsrFoto добавить такие свойства:

"showValueAsLink": true,
"href": {
	"bindTo": "UsrFoto",
	"bindConfig": {"converter": "getUsrFotoLink"}
},
"controlConfig": {
	"className": "Terrasoft.TextEdit",
	"linkclick": { bindTo: "onUsrFotoLinkClick"}
}

Реализация методов примерно следующая:

getUsrFotoLink: function(value) {
	return {
		"url": value,
		"caption": value
	};
},
onUsrFotoLinkClick: function(url) {
	if (url != null) {
		window.open(url, "_blank", "height=" + this.get("WindowHeight") + ",width=" + this.get("WindowWidth"));
		return false;
	}
}

Значение в поле необходимо начинать c http, иначе функционал работы с гиперссылками будет добавлять в начало путь к приложению.

Олег, спасибо Вам огрооооомное!!:smile:
Все получилось!
Я уже думала вечно буду с этими ссылками сидеть.

Олег, спасибо Вам огрооооомное!!:smile:
Все получилось!
Я уже думала вечно буду с этими ссылками сидеть.

Лабьяк Олег Игоревич пишет:

Настя, деталь Средства связи отличается от деталей, которые созданы на основании BaseDetailV2.

Для реализации Вашей задачи необходимо в блоке diff для Вашего поля UsrFoto добавить такие свойства:

"showValueAsLink": true,
"href": {
	"bindTo": "UsrFoto",
	"bindConfig": {"converter": "getUsrFotoLink"}
},
"controlConfig": {
	"className": "Terrasoft.TextEdit",
	"linkclick": { bindTo: "onUsrFotoLinkClick"}
}

Реализация методов примерно следующая:

getUsrFotoLink: function(value) {
	return {
		"url": value,
		"caption": value
	};
},
onUsrFotoLinkClick: function(url) {
	if (url != null) {
		window.open(url, "_blank", "height=" + this.get("WindowHeight") + ",width=" + this.get("WindowWidth"));
		return false;
	}
}

Значение в поле необходимо начинать c http, иначе функционал работы с гиперссылками будет добавлять в начало путь к приложению.

Спасибо, мне помогло. у меня текстовое поле стало ссылкой. все просто 

Данько Дмитрий Леонидович,

Добрый день! А подскажите где именно эти изменения вносить нужно?

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

Добрый день. Возможно данный вопрос уже был но все же, хотелось бы знать есть ограничение на кол-во добавления колонок(строк, справочников и тд) в карточке продажи или других карточках!
И если есть можно ли его убрать? и как это сделать?
Заранее спасибо!

Нравится

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

Добрый день,

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

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

Уважаемые знатоки BPM!

Подскажите, есть ли шанс избавиться от постоянно оказывающегося на своем месте окна Outline?

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

Нравится

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

Александр, в окне настроек дизайнера процесса снимите опцию "Отображать область Outline":
/system/files/1_135.png

Вот спасибо, не знал:smile:

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

Здравствуйте коллеги, возник такой вопрос!
Можно в карточке продаж перейдя в дизайнер страниц редактировать поля и групповые элементы
по своему желанию?
То-есть: Уменьшить ширину колонок, поставить их в 2 ряда (напротив друг друга), вообщем двигать и менять по своему усмотрению как в 5 версии Bpm?
Возможно данная тема уже есть, но не могу найти, если можно киньте ссылку буду признателен!
И заранее спасибо за любую помощь по данному вопросу!

Нравится

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

Юрий, из дизайнера страниц вносить такие изменения нет возможности.
Используя дизайнер Вы сможете определить расположение отдельного поля, но не колонок.
Вопрос решается созданием замещающего клиентского модуля, модуль наследуется от той страницы, для которой нужно изменить визуальное отображение. Затем прописывается логика на java script.

Спасибо Наталия!

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

Добрый день,

Есть бизнес процесс. Допустим объект указанный в БП был переименован\удален. При запуске БП он выполняется и не завершается.
Как увидеть ошибки?
Как отменить выполнение БП ?

Нравится

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

Информацию о наличии ошибок можно увидеть только в поле "Состояние" детали [Элементы процесса] раздела [Журнал процессов].
Отменить шаг используя интерфейс системы нет возможности. Чтобы убрать ошибочные процессы, нужно будет удалять данные на уровне СУБД (таблицы SysProcess, SysProcessElement).

Дело в том, что там нет записей и состояние не видно, и БП висит как выполняющийся.

Антон, какую версию BPMonline Вы используете?

Антон, нужна информация о сборке (например, 5.4.0.591).

"Бондарь Наталия" написал:

Антон, нужна информация о сборке (например, 5.4.0.591).


5.4.0.989

Антон, проставление статуса "Ошибка" в случае наличия ошибок при выполнении элемента дополнено в последних сборках (Вы можете обратиться в службу технической поддержки для обновления текущей версии).
Что касается отмены выполнения БП, помимо описанного мной ранее варианта обратите внимание на этот

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

Здравствуйте коллеги, нужна ваша помощь.
Нужно создать бизнес процесс:
После создания карточки лида в колонке Активности(Добавить e-mail, задачу, звонок) нужно добавить звонок, но так, что бы Бп это делал автоматом, после сохранения карточки!
Как это можно сделать в BPM 7 дизайнере процессов?
Заранее спасибо!

Нравится

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

Юрий Тимурович, используйте элемент "Добавление данных". Объектом будет фигурировать "Активность", связь с лидом нужно установить через поле "Лид" в активности.

Спасибо Наталия, а еще один вопросик!
А как теперь эту активность открыть для редактирования? использовать изменение данных и указать объект активность,а связь с созданной ранее активностью ?

Все уже разобрался!)

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

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

Нравится

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

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

В базовой версии нет такой карточки, где выбор значения лукапного поля происходит из окна с древовидным реестром.
Однако, у каждого лукапного контрола в карточке существует свойство SelectWindowUSI, куда можно подставить USI любого окна в конфигурации, которое будет открываться при нажатии на "лупу".
Таким образом, Вы можете создать свое окно, использовать в нём древовидный реестр (пример таких окон в конфигурации Вы можете найти) и реализовать установку выбранного значения из этого окна в лукапный контрол.

"Резвов Роман" написал:Однако, у каждого лукапного контрола в карточке существует свойство SelectWindowUSI, куда можно подставить USI любого окна в конфигурации, которое будет открываться при нажатии на "лупу".

BPMOnline?
"Резвов Роман" написал:пример таких окон в конфигурации Вы можете найти

Не нашел :) пишу вот сам по аналогии с Базовой страницей групп модуля и базовой страницей раздела

Насчет SelectWindowUSI не знаю, по моему это точно не из BPMonline оперы, но есть у лукапного поля на странице свойство Страница справочника, по моему то что ищете....
Lookup

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

ааааа, понял

Александр, посмотрите, пожалуйста, пример в рабочем месте "Маркетинг", раздел "Рассылки", деталь "Контакты" -> Добавить группу контактов

Роман, спасибо! Только там "скучная" деталь, просто назначили в качестве источника данных объект Группы контактов и все... Хотя вот как потом по выбранной группе отбирают контакты почитаю!
Кстати, что уже получилось: окно с нужным деревом групп проинициализировалось! Теперь добиваюсь чтобы при переходе по группам список фильтровался - вот тут тяжко... разбираюсь с методами из BaseModulePage

Окно получилось. Работает именно так, как и требовалось. Код далек от совершенства и написан пока "начерно", поэтому выкладывать здесь пока смысла не вижу. В качестве родителя использовалось окно справочника LookupGridPage, в качестве "донора" скриптов базовая страница раздела.

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

Здравствуйте.
Возникла сложность с элементом чтение данных.
Мне нужно считать e-mail ответственного по активности. В элементе "чтение данных" указываю все данные:

Затем в элементе "Формула", пытаюсь присвоить созданному в структуре параметру значение e-mail ответственного, но не нахожу его в результате выборки чтения данных.

Снова перехожу в чтение данных - действительно, поле e-mail ответственного пропало, хотя я его и указывал.

В чем дело? Почему так происходит?

Нравится

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

Добрый день, Акмаль.

Используйтесь два элемента Чтение данных последовательно, в первом вычитайте Контакт ответственного, во втором - его почтовый адрес:

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

Спасибо, Максим, вроде работает.

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

На C# написал класс, метод которого подключается к базе данных, собирает нужные данные, формирует PDF файл и отправляет клиенту.
В качестве параметра я передаю туда идентификатор счета (Invoice).
Далее, на основе класса и метода, я создаю в SQL ассамблею и процедуру.
И вызываю эту процедуру из BPM.

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

При этом, если я запускаю эту же сформированную процедуру прямо в SQL Studio - все отлично срабатывает, счет формируется и отсылается. Проблема только при запуске из BPM.

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

Может кто-то что-то подсказать? Спасибо.

Нравится

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

Здравствуйте, Наталия.

Bad Request error 400 – означает, что сервер обнаружил в данном запросе, который ввел клиент, синтаксическую ошибку. То есть - сервер обрабатывает битую ссылку ссылаясь на error 400.
Действительно, если посмотреть на Ваш скриншот, ссылка имеет один лишний слэш. Т.е. подозреваю что дело не в подключении к БД. Попробуйте скопировать адрес запроса и вставить в адресную строку в браузере, скорее всего Вы получите туже ошибку.
А если отсылать запрос без подключения к БД, адрес POST запроса такой же?

> А если отсылать запрос без подключения к БД, адрес POST запроса такой же?
Да. Такой же.

Мне удалось это наладить. Проблtма была именно при вызове процедуры для подключения к базе данных. Без вызова базы данных все работало прекрасно.
Для исправления ошибки надо было сначало запустить локальный сервис Distributed Transaction Coordinator. Потом вышла другая ошибка - о том, что данный процесс уже занят. Ее можно исправить, добавив в Connection String параметр Enlist=false

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