бизнес-процесс
Автонумерация
Автонумерация полей
изменение поля
7.12
sales

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

Выполняем нумерацию собственного объекта (сметы).

Создали настройку, в которой хранится маска номера и текущий номер последнего созданного объекта (последний номер нужен еще для других целей).

Объект создается из другого через бизнес-процесс и при его создании необходимо не просто считать  настройку (текущий номер объекта), но и добавить к значению системной настройке единицу.

Подскажите пжлст можно ли это сделать через БП... городить код не хочется).

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

Нравится

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

Из кода изменить настройку можно так, если дело касается общих настроек или значений по умолчанию:

Terrasoft.Core.Configuration.SysSettings.SetDefValue(userConnection, "SettingName", value);

Для текущего пользователя устанавливается так:

Terrasoft.Core.Configuration.SysSettings.SetValue(userConnection, "SettingName", value);

Для конкретного пользователя или группы:

Terrasoft.Core.Configuration.SysSettings.SetDefValue(userConnection, sysAdminUnitId, "SettingName", value);

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

Добрый день!



Можно считать настройку с текущим номером, дальше через элемент "формула" получить этот номер и добавить к нему 1. А дальше номер можно передавать в элементы добавить данные или изменить данные, в зависимости от ситуации. 

Евгений Манько,

Евгений,  а каким элементом процесса записать полученный рассчитаный номер обратно в системную настройку?  Через "изменить объект"? или есть более простой способ?). Спасибо!

Есть готовый элемент GenerateSequenseNumberUserTask, предназначенный именно для этого. Вот разные примеры нумерации.

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

Александр, спасибо! Да, это элемент для нумерации.  Нам нужно не просто пронумеровать объект, а этот получившийся через формулу номер, записать в системную настройку.номевернуть 

Из кода изменить настройку можно так, если дело касается общих настроек или значений по умолчанию:

Terrasoft.Core.Configuration.SysSettings.SetDefValue(userConnection, "SettingName", value);

Для текущего пользователя устанавливается так:

Terrasoft.Core.Configuration.SysSettings.SetValue(userConnection, "SettingName", value);

Для конкретного пользователя или группы:

Terrasoft.Core.Configuration.SysSettings.SetDefValue(userConnection, sysAdminUnitId, "SettingName", value);

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

Бершеда Д. Н. Спасибо!!!)

Бершеда Д. Н.,

Не получается настроить элемент процесса скрипттаск так, чтоб сохранить значение параметра процесса в системную настройку (общую, не персональную).

 

Попытался вот так:

var userConnection = context.UserConnection;

String IDToken = Get<String>("IDToken"); 

Terrasoft.Core.Configuration.SysSettings.SetDefValue(userConnection, "System ID Token", IDToken);

return true;

 

Никакой ошибки не дает, компилируется, но при выполнении процесса этот скрипттаск не отрабатывает - процесс на нем и останавливается.

 

Похоже, я что-то делаю сильно не так. Прошу развернуто привести пример кода скрипттаска. Возможно что-то еще нужно сделать - добавить в зависимости пакета или в параметрах/настройках бизнес-процесса, чтоб SetDefValue работал.

 

Версия платформы - текущая. Пробую на триальном 14-дневном сайте.

Добрый день.

Скорее всего вы передаете неправильный код системной настройки.

Пример рабочего скрипт-таска:

string settingCode = "SystemIdToken"; // код системной настройки
string settingValue = "Test2"; // новое значение
Terrasoft.Core.Configuration.SysSettings.SetDefValue(UserConnection, settingCode, settingValue);
return true;

Результат:

Показать все комментарии
GetHistoryState
ошибка
7.12
sales

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

Возникла необходимость доработать функционал ProcessDashboardSchema.

В процессе реализации новой функциональности  в указанной схеме необходимо получить historyState.

Публикую сообщение GetHistoryState  в ответ получаю true (булево значение, а не объект)

Выяснилось, что в ProcessDashboardModule это сообщение определено как широковещательное, а не адресное.

Заместил модуль. Поменял тип сообщения на Адресное. GetHistoryState  вернул корректную структуру  historyState.

Не могу найти подписчика на  Широковешательного сообщения GetHistoryState (На это сообщение вообще всего 1 подписчик в NavigationModule.init) 



Является ли это багом?

И если является, то есть ряд вопросов/предложений:

1. Когда этот баг будет исправлен? (на текущей версии он ещё есть)

2. Когда будет рассмотрен вопрос о вознаграждении участников community за отлов таких багов?

3. Предлагаю добавить на community ещё один тип сообщения "Ошибка базовой функциональности" 

Нравится

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

Добрый день.

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

Так же передали пожелания по пунктам 2-3

Коллеги, до сих пор ошибка не устранена.

Зато в ProcessDashboardModule были добавлены стили, из-за чего поплыла вся разметка в панели "Задачи по бизнес-процессам"

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

Мотков Илья,

Илья, в тексте обращения описан конкретный баг. Когда его исправят?

В одной из следующих версий.

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

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

Добавил в деталь кнопку на добавление новой записи:

addNewItem: function () {
		this.addRecord();}

Открывается окно создания новой детали.

Как можно программно заполнить некоторые поля (Name, Date) открывшейся детали и проставить в них значения?

Нравится

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

*Окно создания новой записи в детали.

Посмотрите пример в AccountPageV2, деталь Relationships (а точнее её описание в details). Там пробрасываются значения через defaultValues. 

Если этот метод не подойдёт, то надо раскопать, где в детали отсылается OpenCard-сообщение с конфигом и добавить в конфиг valuePairs (вроде так поле называется)

*Окно создания новой записи в детали.

Посмотрите пример в AccountPageV2, деталь Relationships (а точнее её описание в details). Там пробрасываются значения через defaultValues. 

Если этот метод не подойдёт, то надо раскопать, где в детали отсылается OpenCard-сообщение с конфигом и добавить в конфиг valuePairs (вроде так поле называется)

Показать все комментарии
ModalBox
модальное окно
стиль
7.7
sales

Добрый день, 

Подскажите пожалуйста как сделать стили для модального окна по стандартному гриду как на любой другой странице,

У меня по нажатию кнопки вызывается модальное окно

var sandbox = this.sandbox;
var config = {
    heightPixels: 550,
    widthPixels: 950
};
var moduleName = "UsrMyModalModule";
var moduleId = sandbox.id + "_" + moduleName;
var renderTo = ModalBox.show(config, function() {
    sandbox.unloadModule(moduleId, renderTo);
});
sandbox.loadModule(moduleName, {
    id: moduleId,
    renderTo: renderTo
});

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

на выходе получается так:

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

на странице окна добавлял обычным средством:

 

{
	"operation": "insert",
	"name": "HeaderContainer",
	"propertyName": "items",
	"values": {
		"itemType": Terrasoft.ViewItemType.CONTAINER,
		"items": []
	}
},
{
	"operation": "insert",
	"parentName": "HeaderContainer",
	"propertyName": "items",
	"name": "Header",
	"values": {
		"itemType": Terrasoft.ViewItemType.GRID_LAYOUT,
		"items": []
	}
},
{
	"operation": "insert",
	"parentName": "Header",
	"propertyName": "items",
	"name": "TestText",
	"values": {
		"bindTo": "TestText",
		"caption": "Test text",
		"layout": {"column": 0, "row": 0, "colSpan": 10}
	}
},
{
	"operation": "insert",
	"parentName": "Header",
	"name": "CloseButton",
	"propertyName": "items",
	"values": {
		"itemType": Terrasoft.ViewItemType.BUTTON,
		"style": Terrasoft.controls.ButtonEnums.style.BLUE,
		"click": {bindTo: "onCloseButtonClick"},
		"markerValue": "CloseButton",
		"caption": "OK",
		"layout": { "column": 0, "row": 1, "colSpan": 3 }
	}
}

 

Нравится

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

Открываете модуль UsrMyModalModule, в нём на вкладке Less прописываете стили для элементов.

В странице в define, в перечислении подгружаемых модулей добавляете "css!UsrMyModalModule"

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

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

 

Сериков Асхат Кайратович пишет:

а можно как нибудь грид сетку из страниц редактирования взять?

 Так вы же её уже добавили)

{
	"operation": "insert",
	"parentName": "HeaderContainer",
	"propertyName": "items",
	"name": "Header",
	"values": {
		"itemType": Terrasoft.ViewItemType.GRID_LAYOUT,
		"items": []
	}
},

 

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

Добавить добавил, но как видите на картинке, сами поля скукожены, хотя width в процентном соотношении выставляется верно.

Проблема решается если унаследовать от Базовой схемы карточки, но тогда ругается на getCardInfo message, что нет такого сообщения

Сериков Асхат Кайратович пишет:

сами поля скукожены,

 Тогда вам нужно прописать стили(собственно говоря, с чего вы и начали тему). Я обычно прописываю width/height модуля, потом width/height главного контейнера (в вашем случае HeaderContainer)

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

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

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

Здравствуйте! Подскажите пожалуйста. Я добавляю в процесс элемент Автогенерируемая страница. По идее, когда процесс доходит до этого элемента, он должен сразу открывать страницу, но он создает в коммуникационной панели уведомление, если по нему перейти, то он откроет страницу. Как можно автоматически сразу открывать страницу? 

На академии нашел статью:

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

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

 

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

Нравится

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

Добрый день!



Интерактивные элементы (Выполнить задачу/Вопрос пользователю/Открыть страницу редактирования…) автоматически открывают страницу редактирования если:

- текущий пользователь является инициатором процесса

- текущий пользователь указан ответственным по выполнению интерактивного элемента

- пользователь находится в контексте текущего процесса. (Т.е. если пользователь работая по одному процессу параллельно запускает второй процесс – интерактивные элементы по второму БП автоматически не откроют страницу)

Показать все комментарии
Визирование
7.12
sales
Доброго времени суток.
Вопрос по визированию.
В базовом функционале реализован механизм визирования следующего плана:
на деталь визы приходит запись с заполнением поля "Визирующий", 
которое ссылается на таблицу SysAdminUnit. После для пользователей, указанных в поле "Визирующий", в коммуникационной панели
появляются уведомления.
Возникла необходимость выполнить следующее: добавить на деталь "Визы" поле "Должность"(справочник Job).
Вместо визирующего выбирать должность. То есть получается на деталь "Визы" упадет запись с заполненным полем
"Должность", но с пустым полем "Визирующий". Уведомления нужно разослать всем пользователям, в контактах которых
указана должность соответствующая той, которая указна на записи детали "Визы". Базовый механизм убирать не нужно. Пользователь будет выбирать или визирующего, или
должность.

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

Вопрос: насколько проблематично допилить такой функционал? 

Нравится

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

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

После вызова процесса, в журнале отображается с ошибкой.

Подскажите с чем это может быть связано?

и виляет ли это на отображение количества  уведомлений (сами уведомления появляются, но на колокольчику нету цифр)

Нравится

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

А какой текст ошибки в журнале процесса?

Его можно скачать, нажав кнопку [Download error description] (Скачать описание ошибки), которая появляется, если выбрать элемент, выполнившийся с ошибкой.

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

System.Reflection.TargetInvocationException: Адресат вызова создал исключение. ---> Terrasoft.Common.ItemNotFoundException: Элемент с уникальным идентификатором "18ead718-9319-48cc-9eef-9e3344a5a338" не найден

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

Как у Вас развернуто приложение on-site или on-demand?

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

Да. это базовый процесс. правок нет. и на on-site on-domain процесс не работает. Сейчас более актуальна проблема с on-site

yura.makarchuk,

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

Так как это базовый процесс и Вы его не изменяли, обратитесь в службу поддержки Terrasoft (их контакты можно найти на сайте или по e-mail support@terrasoft.ru) они помогут Вам с решением данной проблемы.

Показать все комментарии
база знаний
7.12
sales

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



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



Хочется использовать для этого Базу знаний, но работать в ней с текстами и графикой совершенно не удобно.



Подскажите, может быть есть какие-то дополнения или другие способы, которые могут расширить функционал БЗ? Особенно интересует возможность работы с текстами в HTML (форматирование текста, размер картинки и тд).

Нравится

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

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

На данный момент на странице записи базы знаний присутствует специальное поле с HTML форматированием, которое частично поддерживает работу с текстами в HTML (можно устанавливать разные шрифты, изображения). В приложении bpm’online для реализации такого поля используется CKEditor, это сторонняя разработка. Функционал базовых возможностей данного поля реализован в ядре приложения. 

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

Одеяненко Юлия,

Здравсвуйте! А где найти это специальное поле? Не вижу его у себя в редакторе.

На счет функционала: изменения размера картинок, работа с таблицами, якоря.

Andrey Aleksandrov,

имелось в виду поле, над которым специальная панель со шрифтами, списками, расположением текста и т. п. (на скриншоте в рамочке - 

http://prntscr.com/k0bv1u).

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

Спасибо, что помогаете улучшать наши продукты!

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

Добрый день.

Мы обновились на тестовой платформе до версии bpmonline 7.12.1. Когда я захотел обновить на тестовой платформе пакет своей разработки из SVN, то получил сообщение об ошибке " Невозможно установить пакет "InhouseDeNovoSharepoint" версии "1.0.0.1", так как зависимый пакет "SalesEnterpriseSoftkey_RUS" версии "7.8.0" не найден ни в одном из хранилищ системы контроля версий". Я посмотрел и, действительно, после обновления на тестовой платформе пропал пакет SalesEnterpriseSoftkey_RUS 7.8.0. Вместо него появился пакет SalesEnterpriseSoftkey_ENU 7.8.0. Скажите, это было как-то некорректно выполнено обновление на тестовой платформе или это ожидаемое поведение на версии 7.12.1? Заранее спасибо за ответ.

Нравится

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

Игорь, попробуйте установить пакет из svn на версию 7.12.0, а только потом обновите(уже с установленным пакетом). Нам такое помогло.

Добрый день, Игорь.

Есть два варианта решения проблемы с привязкой:

1. Для устранения ошибки в дескрипторе пакета "descriptor.json" необходимо изменить "SalesEnterpriseSoftkey_RUS" на "SalesEnterpriseSoftkey_Obsolete".

2. Необходимо обновить среду разработки до версии 7.12.0, после чего закоммитить в svn конкретный пакет, чтобы пакет SalesEnterpriseSoftkey_RUS переименовался в SalesEnterpriseSoftkey_ENU. После этого на облако удаётся подтянуть изменения из SVN.

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

 большое спасибо за Ваш ответ.

Антон Малий,

большое спасибо за Ваш ответ.

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

Добрый день, стоит задача вывести/встроить в карточку Звонка Клиента, аудио плеер для проигрывания аудио записи звонка разговора. На данном этапе в карточке звонка есть поле где указанно ссылка местоположения записи, и если пройти по данной ссылке то начинается автоматическое скачивание аудио фаила на компьютер и далее можно прослушать разговор с клиентом. Формат аудио фаила - *.mp4. Прикрепляю фото карточки звонка, отметил строку с ссылкой.

Запись звонка выполняется сторонним сервисом установленным на мобильном телефоне, на  Андроид , который (сервис) интегрирован с bpm online, и далее Сервис (сторонний) после завершения Звонка на мобильном телефоне, генерирует данную ссылку - место хранения аудио фаила (на облачном хранилище), и в итоге передает ее в bpm online.

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

Тестируем вариант вывести Аудио плеер по средством HTML в BPM, но пока не получилось, пробовали вот так (может кто подправит или добавит):

{

    "operation": "insert",

    "parentName": "Header",

    "name": "AudioPlayer",

    "propertyName": "items",

    "values": {

        "itemType": Terrasoft.ViewItemType.CONTAINER,

        "generator": function() {

            return {

                "selectors": {

                    "wrapEl": "#AudioPlayer",

                    "iframeEl": "id_AudioPlayer"

                },

                "className": "Terrasoft.HtmlControl",

                "html": "
                "src=\"\" type=\"audio/mp4\" />"

            };

        },

        "layout": {

            "colSpan": 12,

            "rowSpan": 1,

            "column": 0,

            "row": 0

        }

    }

}

generateAudioPlayer: function(audioUrl) {

    if (audioUrl.length >= 12) {

        var audioSource = document.querySelector("Source");

        if (audioSource) {

            audioSource.src = audioUrl;

            var audioBlock = document.querySelector("audio");

            audioBlock.style = "style=\"display:block;\"";

        }

    }

}

onEntityInitialized: function() {

    this.callParent(arguments);

 

    var callAudioUrl = ""; //Ссылка на файл звонка

    this.generateAudioPlayer(callAudioUrl);

}

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

Нравится

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

Можно сделать кнопку. Пример реализации в ContactPageV2:

define("ContactPageV2", [], function() {
	return {
		entitySchemaName: "Contact",
		methods: {
			onRecordPlayerClick: function() {
				Ext.getCmp("ContactPageV2AudioPlayerComponent").play();
			},
		},
		diff: /**SCHEMA_DIFF*/[
			{
				"operation": "insert",
				"name": "PlayRecordButton",
				"parentName": "GeneralInfoTab",
				"propertyName": "items",
				"index": 0,
				"values": {
					"itemType": Terrasoft.ViewItemType.COMPONENT,
					"className": "Terrasoft.Button",
					"style": Terrasoft.controls.ButtonEnums.style.GREEN,
					"classes": {"textClass": ["audio-player-button"]},
					"caption": "Прослушать",
					"click": {"bindTo": "onRecordPlayerClick"},
					"layout": {
						"colSpan": 12,
						"column": 0,
						"rowSpan": 1,
						"row": 1
					}
				}
			},
			{
				"operation": "insert",
				"name": "AudioPlayer",
				"parentName": "GeneralInfoTab",
				"propertyName": "items",
				"index": 1,
				"values": {
					"itemType": Terrasoft.ViewItemType.COMPONENT,
					"className": "Terrasoft.AudioPlayer",
						"selectors": {"wrapEl": "#AudioPlayer"},
						"sourceUrl": "https://www.computerhope.com/jargon/m/example.mp3"
				}
			},

..............

 

Я делаю проще. 

1) В diff вписываю контейнер

{
	"operation": "insert",
	"name": "AudioContainer",
	"values": {
		"afterrerender": {
			"bindTo": "prepareCallRecord"
		},
		"afterrender": {
			"bindTo": "prepareCallRecord"
		},
		"id": "AudioContainer",
		"visible": true,
		"itemType": 7
	},
	"parentName": "CallPageGeneralBlock",
	"propertyName": "items"
}

2) После его отрисовки вставляю туда дефолтный плеер

prepareCallRecord: function() {
	//вытаскиваем url записи
	this.setPlayer(url);
},
setPlayer: function(url) {
	var element = document.createElement("audio");
	element.addEventListener("click", function(e) { e.stopPropagation(); }, false);
	element.autoplay = false;
	element.controls = true;
	element.src = url;
	element.type = "audio/mpeg";
	actionsDiv.appendChild(element);
}

 

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