Добрый день.

Через бизнес-процесс настраивается Email. При вызове бизнес-процесса передаются параметры для подстановки в Email.

Подстановка текстовых значений - работает. Вопрос в том, возможно ли подставить в URL переменный параметр. К примеру, стороннюю ссылку.

Также, возможно ли подстановка картинки из передаваемого URL в шаблон письма?
К примеру, штрих-код.

Нравится

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

Это делается реализацией своего обработчика макроса на основе IMacrosInvokable. См. обсуждения тут, тут и особенно тут. Стандартно в системе этот механизм использован для оценок по обращениям.

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

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

Как это лучше сделать?

Я, например, вижу, что есть метод setActiveTab, однако, надо номер таба получить.

Нормально ли сделать ссылку вида

/0/Nui/ViewModule.aspx#CardModuleV2/UsrMyPage/edit/3f199545-fd54-46fb-b801-f711014389f2/4

Не окажется ли так, что такая приписка к урлу будет валить систему в будущих версиях?

Нравится

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

Добрый день

Вы можете оперировать не номерами Tab'а, а их именами и в урле будете передавать его имя. В будущих релизах не планируется что-то добавлять после Id записи

По ходу возник еще один вопрос - а когда можно вызывать setActiveTab при загрузке страницы? В onEntityEnitialized получается рано - таб выбирается, но контент остается от первого таба.

Алексей-Карягин пишет:
В onEntityEnitialized получается рано - таб выбирается, но контент остается от первого таба.

Это потому , что с табами всё очень плохо smiley Попробуйте вот так написать:

onEntityInitialized: function() {
	this.callParent(arguments);
	this.tabsCollectionActions();
},
tabsCollectionActions: function() {
	var tabsCollection = this.get("TabsCollection"); //получаем коллекцию
	//что-то с ней делаем (или нет)
	this.setActiveTab("ProductsInDiscountTab"); //устанавливаем активную
	this.set("ProductsInDiscountTab", true); //в этом set-е вся соль. Нафига он - непонятно. Но без него не рендерится содержимое вкладки
},

 

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

this.set("ProductsInDiscountTab", true); тоже не рендерится. Только таймаут, только хардкор!

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

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

В лиде есть деталь. Деталь стандартная, при нажатии на "+" открывается карточка создания.
задача состоит в том, чтобы из детали можно было открыть карточку редактирования по ссылке,а не через выбор пункта "изменить". например, как сделано с деталью Контакты в контрагенте. Делаю по аналогии, но у меня не работает. также в детали выведено поле UsrName и при клике на него нужно открыть объект UsrStructure.

есть особенность -объект детали был создан через конфигурацию,а не через мастер разделов. но у него есть страница редактирования,которая настраивается через деталь.

пробовала и через linkClicked и через on[ColumnName]LinkClick. первый вообще не вызывается. Второй тоже, но для него я знаю почему - так как в Terrasoft.configuration.ModuleStructure нет моей сущности.
var entitySchemaConfig = Terrasoft.configuration.ModuleStructure[entitySchemaName];

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

Нравится

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

"Zaitova Liubov" написал:подскажите, пожалуйста, как я могу реализовать эту задачу?

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

"Варфоломеев Данила" написал:
Zaitova Liubov пишет:

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

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


я рассматривала метод addColumnLink. в нем есть следующая строка
var entitySchemaConfig = Terrasoft.configuration.ModuleStructure[entitySchemaName];
но моей сущности нет в этой коллекции Terrasoft.configuration.ModuleStructure, потому что я создавала ее через конфигурацию,а не через мастер.

"Zaitova Liubov" написал:var entitySchemaConfig = Terrasoft.configuration.ModuleStructure[entitySchemaName];

Шаг 1: Нафиг выкинуть все методы террасофта
Шаг 2: Костыли. Я к примеру хочу в детали адрес контрагента лепить ссылку на поле "адрес":

addColumnLink: function(item, column) {
	var columnPath = column.columnPath;
	var onColumnLinkClickName = "on" + columnPath + "LinkClick";
	var profileColumns = this.getProfileColumns();
	var profileColumn = profileColumns[columnPath];
	var isProfiledLinkColumn =
		profileColumn && (profileColumn.type === Terrasoft.GridCellType.LINK);
	var isLinkColumn = this.getIsLinkColumn(this.getGridEntitySchema(), column);
	if ((isProfiledLinkColumn || isLinkColumn) && !this.getIsEditable()) {
		var referenceSchemaName = column.referenceSchemaName;
		var schemaConfig = Terrasoft.configuration.ModuleStructure[referenceSchemaName];
		var scope = this;
		if (column.isLookup && schemaConfig) {
			item[onColumnLinkClickName] = function() {
				var record = this.get(columnPath);
				if (!record) {
					return "";
				}
				var recordId = record.value;
				if (!recordId) {
					return "";
				}
				return scope.createLink.call(this, referenceSchemaName, columnPath,
					record.displayValue, recordId);
			};
		} else {
			var columnIdName = item.primaryColumnName;
			var entitySchemaName = this.getGridEntitySchemaName();
			var entitySchemaConfig = Terrasoft.configuration.ModuleStructure[entitySchemaName];
			if (entitySchemaConfig) {
				item[onColumnLinkClickName] = function() {
					var recordId = this.get(columnIdName);
					if (!recordId) {
						return "";
					}
					var displayValue = this.get(columnPath);
					if (scope.Ext.isEmpty(displayValue)) {
						return "";
					}
					var link =
						LinkColumnHelper.createLink(entitySchemaName, columnPath, displayValue, recordId);
					return link || scope.createLink.call(this, entitySchemaName, columnPath,
						displayValue, recordId);
				};
			}
		}
	}
	/**КОСТЫЛИ**/
	if (columnPath === "Address") {
		var scope = this;
		var columnIdName = item.primaryColumnName;
		var entitySchemaName = this.getGridEntitySchemaName();
		item[onColumnLinkClickName] = function() {
			var recordId = item.get("Id");
			if (!recordId) {
				return "";
			}
			var displayValue = item.get("Address");
			if (scope.Ext.isEmpty(displayValue)) {
				return "";
			}
 
			var editPageName ="AccountAddressPageV2";
			var link = Terrasoft.workspaceBaseUrl + "/Nui/ViewModule.aspx#CardModuleV2/"+editPageName+"/edit/"+recordId;
			return {
				caption: displayValue,
				target: "_self",
				title: displayValue,
				url: link
			};
		};
	}
	if (Ext.isEmpty(item[onColumnLinkClickName])) {
		item[onColumnLinkClickName] = function() {
			return (item.getLinkColumnConfig ? item.getLinkColumnConfig(column) : null);
		};
	}

Шаг 3: Вставить в methods детали.
Результат:
зшс

В чём проблема, то?:smile:

"Варфоломеев Данила" написал:В чём проблема, то?


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

В дополнение, у меня возникла проблема возврата в ту вкладку, из которой вызывалась страница. В addColumnLink сформировал ссылку. Переход происходит, но при нажатии на странице "Закрыть" возврат на первую вкладку, а вызов происходит из второй. Те же ссылки стандартные, например, "Контрагент" переходят и возвращаются корректно. Что упустил - понять не могу.

"Лапшин Павел Александрович" написал:Переход происходит, но при нажатии на странице "Закрыть" возврат на первую вкладку, а вызов происходит из второй.

Надо разбираться с HistoryState и браузерной строкой. Иногда при переходе по страницам bpm-ка не меняет путь и вот фиг знает, если честно, как система отреагирует на закрытие карточек(PushBackHistoryState событие). Надо тестить)

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

Доброго времени суток.

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

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

Возможно ли это сделать?

Нравится

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

Информация о том, как добавлять кнопки есть на академии:
https://academy.terrasoft.ru/documents/technic-sdk/7-8/kak-dobavit-knop…
Посмотреть как по нажатию кнопки переходить в импорт можете в схеме SystemDesigner
Там для этого есть метод:
navigateToImportFromExcel: function() {
var url = this.Terrasoft.workspaceBaseUrl + ConfigurationConstants.ApplicationPage.ExcelImport;
window.open(url, "_blank", "height=" + this.get("WindowHeight") + ",width=" + this.get("WindowWidth"));
},
Что касается предзаполения объекта, необходимо изучить как данный механизм работает в самой странице импорта: схема FileImportStartPage
В замещающей схеме FileImportStartPage реализовать метод который будет заполнять объект импорта на нужным вам. И средствами песочницы sandbox, узнавать что вы перешли в импорт из нужной вам страницы нужной вам кнопкой, выполнять его. Подробнее про песочницу: http://www.community.terrasoft.ru/forum/topic/15210

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

Не находил, что есть ещё такой вариант страницы импорта.

"Мотков Илья" написал:Что касается предзаполения объекта, необходимо изучить как данный механизм работает в самой странице импорта: схема FileImportStartPage

Это метод setImportObject, как я понимаю? Только запускать при открытии окна.

Разобрался с основным, кроме одного момента:

"Мотков Илья" написал:И средствами песочницы sandbox, узнавать что вы перешли в импорт из нужной вам страницы нужной вам кнопкой, выполнять его.

Сообщения использовал неоднократно, но ведь тут страница открывается на соседней вкладке (окне), будет ли там работать сандбокс?

Например, я передаю сообщение по клику на кнопку:

this.sandbox.publish("StartImportFlag", { date: "test" }, ['FileImportModule_FileImportStartPage']);

В замещающей схеме FileImportStartPage есть соответственно:

this.sandbox.subscribe("StartImportFlag", function(arg) {
	console.log(arg); //Это пока просто для примера - должно вывести test
}, this, [this.sandbox.id]); //Тут this.sandbox.id равен FileImportModule_FileImportStartPage, у этих страниц они слишком различаются между собой.

Открываю страницу импорта, сообщение по идее должно отправиться, в консоль выведется test, но... ничего не происходит.

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

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

Нравится

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

Добрый день Екатерина!!!

поясните пожалуйста, если реквизит не является справочником и при этом будет являться Гиперссылкой, подскажите пожалуйста нажав на данную ссылку куда вы желаете потом перейти? немного непонял задачи. Так как если к примеру Реквизит имеет тип "Текст", и принудительно описать, что данный реквизит на детали будет Гиперссылка, то нужно будет не забывать, что еще и события по нажатию на Гиперссылку нужно будет отработать. Уточните пожалуйста задачу, я поделюсь примером из своих решений. Спасибо!!!

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

Здравствуйте, Екатерина!

Посмотрите в пакете CTIBase деталь Активности.

Там должен быть пример обработчика клика по номеру телефона.

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

Добрый день!
У меня такая ситуация. В компании внедрён BPMOnline SD 5.4.0
Есть задача по формированию гиперссылки во всех письмах-оповещениях по обращениям.
Однако, если я не авторизован в системе, то изначальная ссылка, по которой я перехожу, теряется в процессе авторизации. Может кто-то знает почему и как исправить ?
И второй вопрос - Есть ли возможность переходить на страницу ввода логина/пароля только в случае того, если доменная авторизация НЕ сработала (чтобы не надо было вручную на страницу логина кликать на доменную авторизацию) ?

Спасибо заранее за любой ответ.

С уважением, Владимир.

Нравится

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

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

Здравствуйте, Владимир!

По вопросу №1 ("Есть задача по формированию гиперссылки во всех письмах-оповещениях по обращениям.
Однако, если я не авторизован в системе, то изначальная ссылка, по которой я перехожу, теряется в процессе авторизации. Может кто-то знает почему и как исправить ?
"):

Действительно, такая ситуация присутствовала в более ранних сборках.
Для исправления необходимо обновиться на сборку выше 5.4.0.2467 (включительно).
Для получения сборки Вы можете обратиться в техническую поддержку по адресу: support@terrasoft.ru
Перед обновлением крайне желательно сделать резервную копию предыдущей версии бинарных файлов и базы данных.

По вопросу №2 ("Есть ли возможность переходить на страницу ввода логина/пароля только в случае того, если доменная авторизация НЕ сработала (чтобы не надо было вручную на страницу логина кликать на доменную авторизацию) ?"):

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

Добрый день . У нас версия 5.4.0.2269. Могу я реализовать задачу по формированию гиперссылки во всех письмах-обращениях? Мне вышлют сборку?

Татьяна,

напишите на support@terrasoft.ru - мы вышлем Вам обновленную сборку.

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

Задача:
Добавить в меню [Помощь] ссылку на документ из сетевого ресурса.
Решение:
1. Открыть сервис wnd_Main. Перейти на вкладку невизуальных компонентов. Найти и выделить элемент amiHelp, добавить для него новый ActionMenuItem.
2. Для добавленного ActionMenuItem создать обработчик события OnExecute. В созданную функцию внести подобный код:

function ActionMenuItemOnExecute(ActionMenuItem, Sender) {
                var url = 'http://training.terrasoft.ru/sites/default/files/document/TS_Basic_3.3.2.pdf';
                OpenFileWithFullAccess(url);
}

Где переменной url необходимо присвоить ссылку на ресурс.

Нравится

Поделиться

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

Необходимо в шаблон сообщения добавить ссылку, часть которой заполняется макросом:
http://site.ru/#ID#
Как такое можно реализовать?

Если http://site.ru/ делаю ссылкой, тогда макрос не будет ссылкой и нельзя будет из сообщения перейти по ссылке, кликнув на нее.

Нравится

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

Kat, попробуйте не делать текст "http://site.ru/" ссылкой, а просто дописать его к макросу #ID#, как Вы написали выше. Если письмо отправляется в формате HTML, MS Outlook автоматически отобразит эту строку как гиперссылку, даже если перед отправкой она выглядит как обычная строка. Проверял на MS Outlook 2007, версии Terrasoft 3.1.1.26. У Вас же эта версия, если не ошибаюсь?

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

А есть метод, одназначно отвечающий из какого раздела добавляется ссылка или файл?

Есть задумка, автоматически прибавлять к имени файлов, добавляемым в библиотеку подпись ШАБЛОН.

Нравится

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

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

Спасибо Ольга.

if(FilesDetailGridArea.TableUSI == 'tbl_FileInLibrary') {} 

работает :)

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