Добрый день,

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

Нашла на портале похожий вопрос, но не до конца понятен код.

https://community.terrasoft.ru/questions/kak-otobrazat-tab-po-usloviu-v-74

спасибо!

Нравится

3 комментария
Лучший ответ
1) Для получения роли советую использовать любезно написанный Севостьяновичем Ильей Сергеевичем миксин по ссылке https://community.terrasoft.ua/tags/opredelit-rol
2) Дальше передать в функцию полученный результат (работает способ начиная с версии 7.12.4, описано в описании релиза https://academy.terrasoft.ru/documents/bpmonline-release-notes-7-12-4 в модуле "OAuth20AppPage")

visibleTab: function(role){
    if(Role1){
        var tab = this.$TabsCollection.get("Tab1"); // "Tab1" - имя вкладки
        tab.set("Visible", true); // "Visible" - ключ свойства, true - значение свойства
    }
    ......
}

3) Через Init при загрузке страницы все это запускаем (думаю роли меняютьяся не часто потому отслеживание изменения в реальном времени не нужно)
1) Для получения роли советую использовать любезно написанный Севостьяновичем Ильей Сергеевичем миксин по ссылке https://community.terrasoft.ua/tags/opredelit-rol
2) Дальше передать в функцию полученный результат (работает способ начиная с версии 7.12.4, описано в описании релиза https://academy.terrasoft.ru/documents/bpmonline-release-notes-7-12-4 в модуле "OAuth20AppPage")

visibleTab: function(role){
    if(Role1){
        var tab = this.$TabsCollection.get("Tab1"); // "Tab1" - имя вкладки
        tab.set("Visible", true); // "Visible" - ключ свойства, true - значение свойства
    }
    ......
}

3) Через Init при загрузке страницы все это запускаем (думаю роли меняютьяся не часто потому отслеживание изменения в реальном времени не нужно)

Александр Тыра,

cпасибо!

Находите в элементах diff вашу вкладку: "name": "Tab62a4b2e3TabLabelGridLayout1729d7bb" - пример.

Далее в "values":{

//прописываете

//видимость по функции

"visible": {

                        "bindTo": "IdUser1"

                    },

}

После в

methods{

//пишите функцию:

IdUser1:function(){

            var x;

   x=Terrasoft.SysValue.CURRENT_USER.value;

            if (x==="id вашего пользователя - можно найти в сотрудниках"){

                return true;    

}else{

return false;

}

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

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

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

Задача следующая: 

Необходимо рядом с именем вкладки "Файлы" выводить counter связанных вложений. Т.е. выглядеть это должно примерно так: "Файлы (3)".

Как посчитать количество вложений - ясно. Но как изменять имя вкладки?

Добавил в init() следующий код:

var tabsCollection = this.get("TabsCollection");
this.set("Resources.Strings.UsrFilesCounterCaption" , this.get("UsrFileCounter"));
var fileCount = this.get("Resources.Strings.UsrFilesCounterCaption");
tabsCollection.collection.items[3].values.Caption  = fileCount;

Но на странице ничего не изменилось...

Нравится

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

Добрый день, Павел!

Вам необходимо менять модель, а не values, т.е. примерно так:

tabsCollection.collection.items[3].model.attributes.Caption = fileCount;

Или как еще один вариант:

tabsCollection.collection.items[3].set("Caption", fileCount);

 

Как вариант, найти определение в diff нужной вкладки, в values дописать

"caption": {"bintTo": "MyTabCaption"}

Где MyTabCaption - виртуальный аттрибут, определённый в attributes. В него и устанавливайте значения.

Добрый день, Павел!

Вам необходимо менять модель, а не values, т.е. примерно так:

tabsCollection.collection.items[3].model.attributes.Caption = fileCount;

Или как еще один вариант:

tabsCollection.collection.items[3].set("Caption", fileCount);

 

Спасибо!Вот такая функция получилась:

initUsrFileCounterCaption: function() {
					var fileCount = null;
					var tabsCollection = this.get("TabsCollection");
					var recordId = this.get("Id");
					if (recordId && recordId !== null && !this.Ext.isArray(recordId)) {
						var esq = Ext.create("Terrasoft.EntitySchemaQuery", {rootSchemaName: "CaseFile"});
						esq.addColumn("Id");
						esq.addColumn("Case");
						esq.filters.add("CaseFilter", Terrasoft.createColumnFilterWithParameter(Terrasoft.ComparisonType.EQUAL, "Case.Id", recordId));
 
						esq.getEntityCollection(function(result) {
							if (result.success) {
								var collection = result.collection;
								if (collection) {
									fileCount = (this.get("Resources.Strings.UsrFilesCounterCaption") + " (" + collection.getCount() +  ") ");
									tabsCollection.collection.items[3].set("Caption", fileCount);
								}
							}
						}, this);
					} else {
						fileCount = (this.get("Resources.Strings.UsrFilesCounterCaption") + " (0) ");
						tabsCollection.collection.items[3].set("Caption", fileCount);
					}
			},

 

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

Никак не получается отображать/скрывать по условию элемент tab:

{
        "operation": "insert",
        "name": "TestTab",
        "values": {
                "caption": {
                        "bindTo": "Resources.Strings.OwnerCaption"
                },
                "items": []
        },
        "parentName": "Tabs",
        "propertyName": "tabs",
        "index": 0
}

Подскажите как это сделать.

Нравится

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

Все вкладки хранятся в коллекции TabsCollection
получить доступ к ней можно следующим образом:
this.get("TabsCollection");

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

this.get("TabsCollection");

 attributes: {
                "Type": {
                    dependencies: [
                        {
                            columns: ["Type"],
                            methodName: "typeChange"
                        }
                    ]
                }
            },
 typeChange: function () {
 
                    /*  Добавление/удаление вкладки */
                    var tabsCollection = this.get("TabsCollection");
                   //TestTab- название вкладки, которую необходимо спрятать
                    var TestTab = tabsCollection.contains("TestTab")?tabsCollection.get("TestTab"):false;
 
                    //прячем вкладку "TestTab" для всех, кроме клиента
                    if( Type === Constants.Client && 
                        !TestTab){
                        tabsCollection.insert(4, "TestTab", Terrasoft.Account.TestTab);
                    }else if(!(Type === Constants.Client) &&
                        TestTab){
                        Terrasoft.Account.TestTab= TestTab;
                        tabsCollection.removeByKey("TestTab");
                    }
 
                }

Также можете ознакомиться с данной темой:
http://www.community.terrasoft.ru/forum/topic/11180

Спасибо, получилось !

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