Вопрос

Показать/скрыть Деталь

Уважаемые коллеги!

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

Нравится

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

"Ифутин Юрий Борисович" написал:Можно ли обойтись пользовательским настройками без написания кода?

Нет.

Спасибо за лаконичный ответ!

Понял, что нельзя обойтись без кода...

А можно объяснить как можно эту задачу решить при помощи кода и где можно посмотреть аналогичные примеры?...

Переопределяете допустим AccountPageV2 в пакете Order.
Деталь "заказы" добавляется в diff, прописываем св-во visible

{
	"operation": "merge",
	"parentName": "HistoryTabContainer",
	"propertyName": "items",
	"name": "Order",
	"values": {
                "visible": {bindTo: "getDetailVisibility"},
		"itemType": Terrasoft.ViewItemType.DETAIL
	}
}

В методах прописываем что-то вроде:

getDetailVisibility: function() {
         return this.get("IsMain") ? true : false; //IsMain - допустим булево поле в контрагенте, индикатор главной компании
}

В общем все сводится к св-ву visible и написанию нужной функции (анализирует контрагента, будет возвращать true или false в зависимости от условий). Ну или можно все это сделать через атрибут, разница невелика.

Спасибо, Данила!

А вот, к примеру, такая комбинация:
1. Располагаем в разделе сразу 2 детали
2. А вот права раздаем разные. Одни пользователи видят первую деталь, другие пользователи видят вторую деталь, а админ видит все детали.
3. Права раздаем при помощи бизнес-процесса.

Как Вы думаете, можно таким методом воспользоваться?

Никогда не пробовал. Уж слишком муторно через права всё это настраивать. К тому же права, вроде как, нельзя на детали накладывать. Только на поля. Придется раздавать права на объект/таблицу, на которую ссылается деталь. Короче гемор:smile:

Добрый день!
Раздать права доступа на детали не получится.
Можно раздавать права доступа на операции.
В Конфигурации пользовательскими средставми можно добавить пользовательскую операцию и далее обращатся к ней из кода, например во так:
/**
* Название операций.
* @type {Object}
*/
SysAdminOperationCode: {
CAN_DESIGN_PAGE: "CanChangeApplicationTuningMode"
},
Идея состтоит в том, чтобы раздать права доступа на созданную пользовательскую операцию, затем в коде схемы страницы редактирования карточки, на которй выведены детали, добавить атрибут логического (булевского типа), установить для него значение по умолчанию - false, и привязать свойство visible детали к значению данного атрибута. Сам атрибут устанавливать в зависимости от возвращаемого значения метода, проверяющего права пользователей на описанную выше пользовательскую операцию. Этот метод будет в свою очередь использовать методы Сервиса страницы управления правами доступа к записи ("RightsService").
Например, вот так вызывается нужный метод из утилитного сервиса "RightsService":
/**
* Метод вызывает метод веб сервиса с указанными параметрами.
* @param {String} methodName Имя метода веб сервиса.
* @param {Object} data Обьект данных для метода веб сервиса.
* @param {Function} callback Функция обратного вызова.
* @param {Object} scope Объект окружения фукнции обратного вызова.
*/
callServiceMethod: function(methodName, data, callback, scope) {
var requestUrl = Terrasoft.workspaceBaseUrl + "/rest/" + this.serviceName + "/" + methodName;
Terrasoft.AjaxProvider.request({
url: requestUrl,
headers: {
"Accept": "application/json",
"Content-Type": "application/json"
},
method: "POST",
jsonData: data || {},
callback: function(request, success, response) {
var responseObject = success ? Terrasoft.decode(response.responseText) : {};
callback.call(scope || this, responseObject, success);
},
scope: this
});
}

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