Добрый день!

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

Нравится

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

Что вы имеете в виду, поясните? На что именно вы хотите получить ссылку?

Скорее всего, он имеет в виду страницу предпросмотра в дизайнере шаблонов писем. Насколько понял из кода схемы BulkEmailContentBuilder, эта информация не хранится по какому-то URL, а на ходу формируется в функции openPreviewModule:

openPreviewModule: function() {
	var config = this.getContentBuilderConfig();
	var configItems = config && config.Items;
	if (configItems && configItems.length > 0) {
		BulkEmailTemplateHelper.checkNeedUnsubscribeLink(config, function(needUnsubscribeLink, html) {
			this.needUnsubscribeLinkCallback(needUnsubscribeLink, config, html, this.openPreview);
		}, this);
	} else {
		var emailContentExporter = Ext.create("Terrasoft.EmailContentExporter");
		var emptyHtml = emailContentExporter.exportData(config);
		this.openPreview(config, emptyHtml);
	}
},
openPreview: function(config, html) {
	var previewWindow = window.open("", "printwin");
	previewWindow.document.write(html);
	previewWindow.document.close();
},

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

Не так глубоко.

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

В различных сервисах, в том же unione (через который рассылает bpmonline) для этого есть тег {{WebLetterUrl}}.  

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

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

Спасибо. 

Если подключён эластик, то можно вставить тег {{View}} на href ссылки и будет работать, но только на эластик, это их макрос.

Здравствуйте! Интересует положение дел с указанным макросом. 

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

Здравствуйте! Интересует положение дел с указанным макросом. Появился ли он в системе? 

Ничего не менялось.

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

Привет.

bpm sales 7.13.4

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

Для этого был создан модуль WiseEquipmentCatalogueFolderManagerViewModelV2 по примеру ProductCatalogueFolderManagerViewModel и аналогичным образом подсоединил к схеме секции: 

properties: {
	folderManagerViewModelClassName: "Terrasoft.WiseEquipmentCatalogueFolderManagerViewModelV2"
},

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

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

Что самое странное в глобальном объекте Terrasoft нету моего класса при этом присутствует класс из продуктов(по аналогии которого я делаю и который работает):

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

Есть идеи?

*Все компилировал и генерировал

Нравится

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

Судя по 404, веб-сервер по запросу не может найти файл с определённым именем. Попробуйте посмотреть в Fiddler, в чём отличия запросов между нормально работающим и новым разделом. Наконец, кроме компиляции может потребоваться просто перезапуск сайта или чистка Redis.

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

перезапуск и очистка не помогла.

Вопрос:

1. Почему моей модельки нету в объекте Terrasoft, а моделька продуктов присутствует?

2. Какая "правильная" последовательность действий для создания модуля ViewModel при котором он появится в объекте Terrasoft?

*Потому что мне кажется проблема именно в этом.

Порядок создания описан тут.

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

может вы знаете каким образом в об. Terrasoft попадают модельки схем? 

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

подскажите пожалуйста, каким образом можно править код базовых модулей? К примеру FolderManagerViewModel(как оказалось тут и реализован функционал каталога продуктов). Если не ошибаюсь замещение с 7.13+ уже не работает.

Андреев Андрей Сергеевич,

Реализуйте по аналогии свое собственное окно и с ним работайте.

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

Создал свои модули на основании ниже перечисленных после чего переопределив свойства в схеме раздела:  

folderManagerViewConfigGenerator: "FolderManagerView",
 
folderManagerViewModelConfigGenerator: "FolderManagerViewModel",
 
folderManagerModuleName: "FolderManager",

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

*Лог пуст

 

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

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

При включении визирования дизайнер виснет, а в консоле выбивает ошибку:

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

Кто сталкивался с этим?

Нравится

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

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

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

Заменил модуль ReportFilterModule. скопировал полностью код. После замещение форма фильтрации изменилась... лукапное поле стало на всю страницу по ширине, пропали заголовки... С чем это может быть связано?

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

Нравится

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

Вы не добавили локализируемые строки и могли не перенести стили контролов во вкладке LESS.

LocalizableStrings?

Вы не добавили локализируемые строки и могли не перенести стили контролов во вкладке LESS.

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

С полем решилось, спасибо!

Строки сами перенеслись

function getPeriodreportButtonViewConfig(filterName) {
	var config = getReportButtonBaseConfig();
	config.imageConfig = resources.localizableImages.PeriodButtonImage;
	config.menu = {
		items: [
			{
				className: "Terrasoft.MenuItem",
				caption: resources.localizableStrings.YesterdayCaption,
				click: {
					bindTo: "setPeriod"
				},
				tag: filterName + "_Yesterday"
			},
.............

Отладчик показывает, что таких строк нет!

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

Зверев Александр, НИЧЕГО не помогло. Заметил еще такую же ошибку при замещении модуля FixedFilterViewV2. тут уже во всех разделах пропали заголовки. 

Возможно, при замещении что-то сделали не так. Попробуйте воспроизвести такое же поведение на развёрнутом триал-сайте без доработок.

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

Впервые хотел использовать этот элемент , и возможно некорректно настроил. 

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

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

Нравится

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

Кирилл Паксюдкин,

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

Под Supervisor, так как этот пользователь системный администратор, права забираться не будут - у этого пользователя максимальные права доступа на все.

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

Посмотрите, обучающее видео про настройку прав доступа. Обратите внимание на приоритет прав доступа!

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

Проверьте соответствуют ли ваши записи указанным условиям отбора (фильтрации)

Шаг запускается под привелигированным пользователем? Если нет попробуйте выполнить под SuperVisor на тестовой записи

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

фильтрация правильная, 

Шаг я запускал как от простого пользователя так и от Supervisor никакой блокировки нет.

Кирилл Паксюдкин,

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

Под Supervisor, так как этот пользователь системный администратор, права забираться не будут - у этого пользователя максимальные права доступа на все.

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

Посмотрите, обучающее видео про настройку прав доступа. Обратите внимание на приоритет прав доступа!

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

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

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

Вопрос: как вывести на вкладку, например, вместо “bpm’online”, номер обращения, карточка которого открыта?

спасибо 

Нравится

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

Для смены заголовка страницы (вкладки) воспользуйтесь кодом

document.title = 'Заголовок';

Те при открытии страницы получите ее название и установите как заголовок

Как то так 

onEntityInitialized: function() {
	this.callParent(arguments);
	document.title = this.get("Number");
},

 

Для смены заголовка страницы (вкладки) воспользуйтесь кодом

document.title = 'Заголовок';

Те при открытии страницы получите ее название и установите как заголовок

Как то так 

onEntityInitialized: function() {
	this.callParent(arguments);
	document.title = this.get("Number");
},

 

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

Добрый день!

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

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

И есть процесс который ждет изменения поля статус: 

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

Собственно, проблема в том что событие в процессе не отрабатывает, и процесс остается виснуть на этом элементе. В чем может быть проблема?

Нравится

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

Процесс может не отрабатывать, так как в методе у Вас происходит изменение статуса на событие 'Добавления записи', а в БП указано, что сигнал должен сработать при возникновении события 'Изменения записи'.

В БП добавьте старт данного события ещё и по сигналу добавления записи.

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

я неверно написал, у меня метод отрабатывает на событие Updating а не Inserting

Миннекаев Айдар,

Проверьте, запускается ли Ваш бизнес-процесс при изменении статуса на нужное значение из конфигурации. Возможно, проблема в процессе.

Также уточните, откуда запускается метод SetStatus и каким образом получен объект entity, который передается в него?

Алла Савельева пишет:

откуда запускается метод SetStatus и каким образом получен объект entity, который передается в него?

 Видимо, дело в том, что оба механизма срабатывают на одном событии. Сначала пользователь меняет запись, потом во встроенном БП срабатывает обработчик на Updating, потом сохраняется запись в базу и затем должен был срабатывать сигнал в БП. И список изменённых полей формируется на первом шаге, до изменения статуса, из-за чего сигнал не получен.

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

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

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

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

Нравится

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

Думаю что вам может помочь это бесплатное приложение.

Думаю что вам может помочь это бесплатное приложение.

Григорий Чех, спасибо Вам большое.

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

Есть два справочника, Города (базовый) и Районы (Custom). В справочнике районов при добавлении записей, заполняется поле Город. Но возник вопрос, как в карточке редактирования (например в контактах), при выборе города проживания, наложить фильтр на справочник Районов? 

Нравится

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

Добрый день!

Можно при помощи бизнес правил: кодом или редактором 

Добрый день!

Можно при помощи бизнес правил: кодом или редактором 

Спасибо за помощь. Все работает как надо.

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

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

attributes: {

   "IsModelItemsEnabled": {
      dataValueType: Terrasoft.DataValueType.BOOLEAN,
      value: true,
      dependencies: [{
         columns: ["NavOrderStatus"],
         methodName: "changeNavOrderStatus"
      }]
   }

}

А в методе изменения:

this.set("IsModelItemsEnabled", false);

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

getDefaultCellControlsConfig: function(columnName, params) {
   var config = {
      itemType: Terrasoft.ViewItemType.MODEL_ITEM,
      name: columnName,
      labelConfig: {visible: false},
   };

   if(columnName = "Product" && ...){
      config.enabled = false;
   }


   return Ext.apply(config, params);
}

Что тоже не помогает.. Подскажите, пожалуйста решение данной проблемы.

Нравится

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

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

generateActiveRowControlsConfig: function (id, columnsConfig, rowConfig) {
                    this.columnsConfig = columnsConfig;
                    var gridData = this.getGridData();
                    var activeRow = gridData.get(id);
                    var isEditableColumn;
                    if (activeRow.values.IDSBParent === "") {
                        isEditableColumn = this.isEditableParentColumn;
                    }
                    else {
                        isEditableColumn = this.isEditableColumn;
                    }
                    var gridLayoutItems = [];
                    var currentColumnIndex = 0;
                    Terrasoft.each(columnsConfig, function (columnConfig) {
                        var cellConfig = this.getActiveRowCellConfig(columnConfig, currentColumnIndex);
                        cellConfig.enabled = isEditableColumn(cellConfig.name);
                        if (!cellConfig.hasOwnProperty("isNotFound")) {
                            gridLayoutItems.push(cellConfig);
                        }
                        currentColumnIndex += cellConfig.layout.colSpan;
                    }, this);
                    this.applyBusinessRulesForActiveRow(id, gridLayoutItems);
                    var viewGenerator = Ext.create(this.getRowViewGeneratorClassName());
                    viewGenerator.viewModelClass = this;
                    var gridLayoutConfig = viewGenerator.generateGridLayout({
                        name: this.name,
                        items: gridLayoutItems
                    });
                    rowConfig.push(gridLayoutConfig);
                }

 

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

generateActiveRowControlsConfig: function (id, columnsConfig, rowConfig) {
                    this.columnsConfig = columnsConfig;
                    var gridData = this.getGridData();
                    var activeRow = gridData.get(id);
                    var isEditableColumn;
                    if (activeRow.values.IDSBParent === "") {
                        isEditableColumn = this.isEditableParentColumn;
                    }
                    else {
                        isEditableColumn = this.isEditableColumn;
                    }
                    var gridLayoutItems = [];
                    var currentColumnIndex = 0;
                    Terrasoft.each(columnsConfig, function (columnConfig) {
                        var cellConfig = this.getActiveRowCellConfig(columnConfig, currentColumnIndex);
                        cellConfig.enabled = isEditableColumn(cellConfig.name);
                        if (!cellConfig.hasOwnProperty("isNotFound")) {
                            gridLayoutItems.push(cellConfig);
                        }
                        currentColumnIndex += cellConfig.layout.colSpan;
                    }, this);
                    this.applyBusinessRulesForActiveRow(id, gridLayoutItems);
                    var viewGenerator = Ext.create(this.getRowViewGeneratorClassName());
                    viewGenerator.viewModelClass = this;
                    var gridLayoutConfig = viewGenerator.generateGridLayout({
                        name: this.name,
                        items: gridLayoutItems
                    });
                    rowConfig.push(gridLayoutConfig);
                }

 

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

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

 

Просто забрать у пользователя права на запись на объект детали.

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

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

Права определяются содержимым таблиц, для изменения прав нужно добавлять/изменять/удалять записи в них. Например, для прав доступа на записи в разделе контактов это SysContactRight. А если это делать в БП, есть специальный элемент изменения прав.

Дмитрий А.,

Проблема в том, что поля детали не блокируются из-за правил, а делал я именно по этим ссылкам

Если отобрать права доступа, правила будут безразличны.

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