Здравствуйте! Интересует вопрос как скрыть вкладку Лента у некоторых пользователей?
Например Info(которую я сам создал) я еще могу в Мастере раздела убрать и ее не будет видеть никто, но вот с Лентой так не получается ибо ее совсем нету в Мастере раздела.

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

Нравится

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

Добрый день!
Скрыть вкладку "Лента" на странице записи нет возможности. Пользовательскими средствами в bpm'online можно настроить доступ пользователей и групп пользователей к разделу "Лента". В этом случае пользователи группы, которой не дали права на просмотр раздела, не увидят записей ленты ни на вкладке "Лента", ни в коммуникационной панели, ни на боковой панели. Подробно о настройке прав доступа рассказано в видеоролике Академии: https://youtu.be/x5C6VcOhKj4?list=PLDp-M9ZGnvgH5uPrXsjxblaSWMmQ17Xt9

Так нет такого раздела Лента в Правах доступах на обьекти. Где именно можна изменить права для Ленти?

Это в 7.8 такое счастье, что деталь Лента не видна в мастере раздела и ее снести нельзя? В 7.7 можно было.

Доступ к сообщениям в ленте устанавливается через объект Сообщение/Комментарий.

Лента добавлена дифом в BaseModulePageV2 на уровне пакета ESN.
В той же схеме посмотрите метод:

initTabs: function() {
	if (this.entitySchemaName !== "SocialChannel") {
		var tabsCollection = this.get("TabsCollection");
		var tabsCount = tabsCollection.getCount();
		if (tabsCollection.contains("ESNTab")) {
			var esnTab = tabsCollection.get("ESNTab");
			tabsCollection.removeByKey("ESNTab");
			tabsCollection.insert(tabsCount, "ESNTab", esnTab);
		}
	}
	this.callParent(arguments);
},

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

А как сделать чтобы Лента не была первой вкладкой при входжении в карточку контакта?

В Дизайнере карточни Ленты просто нету!???

Как сделать ее последней а не первой?

Здравсвуйте! Очень нужна помощь. Не пойму как убрать Ленту из первой вкладки. Хочу чтобы первая была Демография. При сохранении в таком виде как на последнем фото, получаем результат как на первом. Как вообще эта Лента очутилась на первом месте если к ней даже нет доступа?

Я просто перетасовал на первое место в дизайнере все вкладки. Сохранил. И Лента ушла в конец. С этим разобрался.

Возможно, если окажется первой снова, поможет такое решение:


Решение проблемы того, что вкладка “FEED”, или “ЛЕНТА” находится на первой позиции:
Удаляем код из замещенных схем карточок (например, ContactPageV2, AccountPageV2, … в пакете Custom)

               {
                              "operation": "move",
                              "name": "ESNTab",
                              "index": 0,
                              …
               },

В продолжении темы:
Как скрыть раздел Лента для определённых ролей пользователей:
1. в "Администрирование:Доступ к объектам" включаю "Доступ по операциям" для объектов "Сообщение/комментарий", "Канал"
2. На детали "Доступ к объектам" указанных объектов установил "х" на все права для роли Бухгалтерия.
В итоге добавить в раздел данные нельзя, но он так и отображается в меню.
Аналогичный вопрос по скрытию р. "Единое окно" и "Итоги".
По р. Итоги, если закрыть доступ для объекта Итог, то доступ будет закрыт для всех итогов во всех разделах, а раздел так и будет отображаться.
"Единое окно" продолжает отображаться после закрытия доступа на объект "Элемент очереди единого окна (представление)", и "Элемент очереди единого окна"

Это работает

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

Возможно, если окажется первой снова, поможет такое решение: Решение проблемы того, что вкладка “FEED”, или “ЛЕНТА” находится на первой позиции: Удаляем код из замещенных схем карточок (например, ContactPageV2, AccountPageV2, … в пакете Custom) { "operation": "move", "name": "ESNTab", "index": 0, … },

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

Всем добрый день!

Появилась трудность с реализацией запуска процесса "Блокировка карты" по нажатию на кнопку.
Для страницы "Карты" создал замещающую страницу BankCardPagev2. Добавил в diff создание кнопки "CardBlock", прописал метод ProcCardBlock. Создал процесс UsrCardBlock, в котором создал параметр ProcParamCardId.
Может я что забыл сделать, можете подсказать, плиз.

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

P.S. Кнопка на странице появилась, при нажатии на нее выдает ошибку: "ProcessModuleUtilities is not defined"

define('BankCardPageV2', ['BankCardPageV2Resources', 'GeneralDetails'],
function(resources, GeneralDetails) {
        return {
                entitySchemaName: 'BankCard',
                details: /**SCHEMA_DETAILS*/{
        "BankAccountInBankCardDetailV2": {
                "schemaName": "BankAccountInBankCardDetailV2",
                "entitySchemaName": "BankCardBankAccount",
                "filter": {
                        "masterColumn": "Id",
                        "detailColumn": "BankCard"
                }
        }
}/**SCHEMA_DETAILS*/,
                diff: /**SCHEMA_DIFF*/[
        {
                "operation": "merge",
                "name": "StartDate",
                "values": {
                        "layout": {
                                "column": 0,
                                "row": 0,
                                "colSpan": 12,
                                "rowSpan": 1
                        }
                }
        },
        {
                "operation": "merge",
                "name": "EndDate",
                "values": {
                        "layout": {
                                "column": 0,
                                "row": 1,
                                "colSpan": 12,
                                "rowSpan": 1
                        }
                }
        },
        {
                "operation": "merge",
                "name": "BankCardStatus",
                "values": {
                        "layout": {
                                "column": 12,
                                "row": 0,
                                "colSpan": 12,
                                "rowSpan": 1
                        }
                }
        },
        {
                "operation": "insert",
                "name": "UsrBlockType",
                "values": {
                        "layout": {
                                "column": 0,
                                "row": 2,
                                "colSpan": 12,
                                "rowSpan": 1
                        },
                        "bindTo": "UsrBlockType",
                        "caption": {
                                "bindTo": "Resources.Strings.BlockTypeCaption"
                        },
                        "textSize": 0,
                        "contentType": 3,
                        "labelConfig": {
                                "visible": true
                        },
                        "enabled": true
                },
                "parentName": "StatusGroupGridLayout",
                "propertyName": "items",
                "index": 3
        },
        {
                "operation": "insert",
                "name": "UsrBlockReason",
                "values": {
                        "layout": {
                                "column": 12,
                                "row": 2,
                                "colSpan": 12,
                                "rowSpan": 1
                        },
                        "bindTo": "UsrBlockReason",
                        "caption": {
                                "bindTo": "Resources.Strings.BlockReasonCaption"
                        },
                        "textSize": 0,
                        "contentType": 3,
                        "labelConfig": {
                                "visible": true
                        },
                        "enabled": true
                },
                "parentName": "StatusGroupGridLayout",
                "propertyName": "items",
                "index": 4
        },
        {
                "operation": "insert",
                //"parentName": "LeftContainer",
                "name": "NewButton",
                "values": {
                                "itemType": Terrasoft.ViewItemType.BUTTON,
                                "style": Terrasoft.controls.ButtonEnums.style.RED,
                                "caption": "CardBlock",
                                "click": {"bindTo": "ProcCardBlock"}
                }
        }
]/**SCHEMA_DIFF*/,
                attributes: {},
                methods: {
                                ProcCardBlock: function() {
                                        var activeRowId = this.get("ActiveRow");
                                        var args = {
                                                sysProcessName: "UsrCardBlock",
                                                parameters :{
                                                        ProcParamCardID: activeRowId
                                                }
                                        };
                                ProcessModuleUtilities.runProcess(args.sysProcessName, args.parameters, this);
                                }
                        },
                rules: {},
                userCode: {}
        };
});

Нравится

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

Добрый день.
Вам нужно в первых двух строчка :

define('BankCardPageV2', ['BankCardPageV2Resources', 'GeneralDetails'],
function(resources, GeneralDetails) {

дописать ProcessModuleUtilities , это примерно выглядить должно так:

define('BankCardPageV2', ['BankCardPageV2Resources', 'GeneralDetails', 'ProcessModuleUtilities '],
function(resources, GeneralDetails, ProcessModuleUtilities ) {

Роман, спасибо!
Теперь кнопка реагирует на нажатие :)
Но появляется ошибка

"При выполнении запроса возникла ошибка
статус ответа: 404 (Not Found)
url запроса: http://172.26.20.18:81/0/ServiceModel/ProcessEngineService.svc/UsrCardB…
метод: POST
данные запроса: {}"

Исходя из ошибки, предполагаю, что у меня косяк с процессом. Сейчас процесс сделал самый простой : начальное событие простое - открыть страницу редактирования - завершающее событие.
В методе ProcCardBlock объявлен параметр ProcParamCardId, такой же параметр создал в процессе и в странице редактирования передаю ID записи значение этого параметра.
Можете подсказать, что не так или чего не сделал, чтобы верно передать в процесс ID записи и он стартанул.

С уважением,
Дмитрий

В урл видно же что параметр не передался, точнее вместо айди передалось андефайнед:
?ProcParamCardID=undefined

Т.к. вы:
var activeRowId = this.get("ActiveRow");

пытаетесь получить в карточке, в карточке нет атрибута ActiveRow, если вам нужно Id записи карточки, то так и пишите

var activeRowId = this.get("Id");

Всем большое спасибо.

Процесс запустили :)

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

Возникли трудности с переносом кнопки в блок кнопок "Сохранить", "Отменить", "Действия".

Как я понимаю, выбор контейнера в поле "parentName" зависит от типа страницы (новая или редактируемая).
Если использовать LeftContaner, то кнопка отлично уходит в верхний левый угол на новых записях.
А если использовать CombinedModeActionButtonsCardLeftContainer то кнопка распологается снизу слева на странице как новой так и редактируемой страницы.
Можете подсказать, что нужно изменить в коде, чтобы кнопка появились слева вверху вместе с кнопками "Сохранить", "Отменить", "Действия".

"operation": "insert",
		"parentName": "CombinedModeActionButtonsCardRightContainer",
		"propertyName" :"items",
		"name": "NewButton",
		"values": {
			"itemType": Terrasoft.ViewItemType.BUTTON,
			"style": "red",
			"caption": {"bindTo": "Resources.Strings.CardBlockCapture"},
			"click": {"bindTo": "ProcCardBlock"},
			"layout": {
				"column": 1,
				"row": 6,
				"colSpan": 1
Показать все комментарии

Добрый день, коллеги!
Подскажите пожалуйста, в версии 7.8 видел я на стартовой странице портала виджет, а на нем была кнопка "GO TO" , но по требованиям клиента, я изменил эту страницу, и потерял таким образом этот виджет. Подскажите пожалуйста кто знает, что это за модуль используется для такого виджета ?

Нравится

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

Всем добрый день!

Нашел на сайте статью, что для переноса текста на новую строку используется (https://community.terrasoft.ru/blogs/12527).
В данный момент пытаюсь в элементе "Вопрос пользователю" в поле "Вопрос" указать вопрос, который необходимо отображать в несколько строк. Применение кавычек и не помогает. Пробовал использовать эти правила как в самом поле "Вопрос", так и в пункте "Question" элемента "Вопрос пользователя" в структуре Процесса.

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

С уважением,
Дмитрий

Нравится

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

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

Попробуйте так:
"Первая строка текста\\nВторая строка текста\\nТретья строка текста". Два обратных слеша обязательные - первый экранирует второй:)

Алексей, спасибо, помогло :)

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

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

Хотелось бы переопределить название кнопки в шапке раздела. Подскажите как это сделать?

Нравится

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

Добрый день.

На сколько я помню. то эти названия хранит таблица SysModuleEditLcz. Колонка RecordId хранит ссылку на таблицу SysModuleEdit, колонка Value хранит этот текст, который вам нужно изменить на то которое вам подойдёт.

Роман, зачем же так сурово? А если в базе чего-то нарушите?

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

в качестве очень близкого примера смотрите статью в документации разработчика
https://academy.terrasoft.ru/documents/technic-sdk/7-8-0/dobavlenie-kno…

"Симута Роман Русланович" написал:

Роман, зачем же так сурово? А если в базе чего-то нарушите?

Предлагаю безопасный вариант

надо всего лишь создать замещающую схему страницы редактирования раздела

в замещающей схеме поменять значение локализируемой строки для кнопки

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

https://academy.terrasoft.ru/documents/technic-sdk/7-8-0/dobavlenie-knop...

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

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

Измените значение поля Value в таблице SysModuleEditLcz.

Да, был не прав. Для русской версии 7.8 (проверял для Sales) необходимо поменять значение поля ActionKindCaption в таблице SysModuleEdit. В таблице SysModuleEditLcz хранятся английские названия.

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

При создании в справочнике нового типа средств связи (например, Email личный), данный тип отсутствует при открытии мастера раздела (контакта). для добавления его в Профиль записи. Как осуществляется добавление поля в средства связи, чтобы оно могло быть и в Детали средства Контакта и в могло использоваться в Профиле записи?

Нравится

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

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

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

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

Здравствуйте. Вот имеем карточку контакта.

В нем есть некоторые поля, которые менеджер должен заполнить. Нужно эти сделать выделенны красным цветом, пока в эти поля не внесут хоть какую то информацию. Тоисть условие: Пока поле не заполнено оно подсвечивается красным и таким образом стимулирует менеджера его заполнить чтобы убрать подсветку. Как это можно реализовать? Может есть пример похожего кода? Спасибо!

Нравится

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

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

Я думаю лучшей стимуляцией пользователя будет обязательность этих полей.

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

Ну так что, есть хоть какие-то соображения как это можна реализовать?

Здравствуйте,
Хороший, но долгий путь: написать на основании контрола Terrasoft.controls.LookupEdit свой контрол, где анализировать наличие значения и делать addCls и removeCls, предварительно конечно написав эти css стили которые делают выделение цветом, которые вы будете добавлять или удалять.
Ну и потом вместо стандартного типа контрола для этих полей, использовать написанный вами контрол.

Простой путь, который идет в разрез с идеологией bpm’online: в карточке повесить обработчик на onEntityInitialized и на изменение колонок, подключить jQuery, подключить стили выделения цветом, и в обработчиках анализировать заполнение полей и добавлять, или удалять классы(стили css) для колонок в рантайме, средствами jQuery
https://api.jquery.com/addclass/

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

Добрый день.
В модальном окне разместил несколько полей.
FromDate, ToDate, Test. Они виртуальные(в базе их нет).
с полями типа дата проблем нет.
Но с lookup есть проблемы. Никак не пойму как его вызвать. Необходимо в лукапе выбрать несколько записей с таблицы Контакт и поместить в массив, потом его буду использовать для построения графика.
Подскажите пожалуйста как это реализовать. В коде js не смог найти примеров.
Прикрепляю скриншот и код страницы модального окна.

Нравится

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

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

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

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

Спасаибо за отзыв. Сделал новую вкладку.
Но возникла другая проблемка.
После выбора необходимых значений они не отображаются в лукапе, хотя я их могу получить через this.get('ResponsibleLookUp'). Повторю поля в таблице нет, оно виртуальное.
А также есть непонятная мне бага. После выбора записей при нажатии на "Выбрать" возникает ошибка(message: Несуществующий или пустой аргумент). При повторном нажатии всё проходит нормально. Прикрепил скриншот.
Код который обрабатывает выбор.

ResponsibleLookUpClick: function() {
 
	var config = {
		entitySchemaName: 'Contact',
		columns: ['Name'],
		multiSelect: true
	};
 
	var callback = function(args) {
		var items = args.selectedRows.getItems();
		debugger;
		var showInLookup = [];
		for(var i = 0; i<items.length;i++){
			showInLookup.push({value: items[i].Id, displayValue: items[i].Name})
		}
		this.set('ResponsibleLookUp',showInLookup);
		debugger;
	};
 
	LookupUtilities.Open(this.sandbox, config, callback, this);
 
},

Здравствуйте,
Лукап эдит по умолчанию не может отображать несколько значений, обходится это связкой атрибута для хранения массива значений, и эдита, с иконкой лукапа, по нажатию на который вызывается LookupUtilities.Open, в атрибут заносятся значения массива, а в атрибут на который завязан эдит, текстовое представление с разделитетелем «;». По ошибке не подскажу, не сталкивался, попробуйте её оттдебажить если не исчезнет после переделывания на вышеуказанную схему.

"Максим Шевченко" написал:

и эдита, с иконкой лукапа, по нажатию на который вызывается LookupUtilities.Open


Добрый день.
а нет ли у вас примера как сделать эдит с лупой, или где в bpm поискать?

{
				"operation": "insert",
				"name": "Number",
				"className": "Terrasoft.TextEdit",
				"values": {
					"layout": {
						"colSpan": 12,
						"rowSpan": 1,
						"column": 0,
						"row": 4,
						"layoutName": "SolutionTab_gridLayout"
					},
					"rightIconConfig": resources.localizableImages.LookUpIcon,
					"value": { "bindTo": "Number" }
				},
 
				"parentName": "SolutionTab_gridLayout",
				"propertyName": "items",
				"index": 6
			}

С учетом что в схеме добавлена картинка LookUpIcon

Добрый день.
Не получилось.
В консоли ошибка:
Свойство rightIconConfig Не было определено в классе Terrasoft.controls.Label

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

Добрый день.

Интересует следующий вопрос, по сути он является продолжением вот этой задачи: https://community.terrasoft.ru/forum/topic/20879

После получения ответа от нашего сервиса внутри метода onDataLoaded нужно в случае, если в ответе получено сообщения об ошибке удалить фотографию из галереи. Известен id фото. Собственно, вопрос - как вызвать удаление фото по его id? Я знаю, что есть метод deleteImage, но его из метода он внутри метода onDataLoaded почему-то не вызвать.

Редакция real-estate 7.7

Спасибо.

Нравится

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

Добрый день, Денис!
Методы deleteImage и onDataLoaded находятся в разных viewModel’ях, поэтому deleteImage нельзя вызвать из onDataLoaded.
Есть несколько вариантов решения проблемы:
1) Сделать запрос на удаление картинки в перегруженном методе onDataLoaded (запрос аналогичный как в методе deleteImage).
2) В GalleryImageViewModel сделать подписку на свое сообщение, которое будет выполнять метод deleteImage. А в GalleryDetail публиковать это сообщение.

Валерий, спасибо за ответ!

Я в итоге воспользовался третьим вариантом: по id ищу нужный элемент в DOM и инициирую через JS событие клика по кнопке удаления картинки. В итоге картинка удаляется.

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

Добрый день!

Для оформления договоров хотел сделать в печатной форме, чтобы автоматически сумма которая выражена числом (45500.00 руб) прописывалась в том числе прописью (сорок пять тысяч пятьсот руб 00 коп).
В форуме есть ссылка на рецепт(https://academy.terrasoft.ru/documents/technic-sdk/7-6-0/kak-sozdat-svoy...).
Поддержка сказала, что нужно воспользоваться макросом NumberRUExpressionConveter и он находится в конфигурации. ... Но, в моей конфигурации его я не нашел (у меня версия 7.3).
У меня большая просьба.. У кого есть этот макрос в конфигурации или просто кто знает - скиньте пожалуйста исходный код этого макроса (NumberRUExpressionConveter).

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

Нравится

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

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

Добавил во вложению инструкцию по реализации подобного отображения.

Добрый день!

Да это работает, но есть одно но. Почему то не отображаются копейки.
Прикрепил скриншот.
В приложенной вами инстуркции также отображаются без копеек...
Возможно ли реализовать с копейками?

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

"Минигазимов Азат Рамильевич" написал:

Добрый день!

Да это работает, но есть одно но. Почему то не отображаются копейки.

...

...

Решен ли вопрос о дробной части?
Каково решение?

"<a href="mailto:admin@aergroup.ru">admin@aergroup.ru</a>" написал:

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

Минигазимов Азат Рамильевич пишет:

Добрый день!

Да это работает, но есть одно но. Почему то не отображаются копейки.

...

...

Решен ли вопрос о дробной части?

Каково решение?

Не я не смог решить. Прописываю от руки каждый раз.

Данная задача в любом случае решается написанием собственного макроса,
https://academy.terrasoft.ru/documents/technic-sdk/7-6-0/kak-sozdat-svo…
вы можете либо сами написать свою логику преобразования на языке с#, либо использовать библиотеку, которая умеет это делать, написанную на c#, подключив её на закладку «Внешние библиотеки» в пакете, и потом использовать её возможности в макросе. Таких библиотек я не знаю, но если вы таковую найдете, суть задачи сведется лишь к получению строки-цифры в макросе, преобразованию её в цифру, передаче её в библиотеку, которая вернет строку результат, который и будет результирующей строкой для word отчета. Все как в выше приведенной статье.

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