видимость
грид
кнопка
реестр
Технические вопросы
7.x

Как настроить видимость кнопок в реестре?

Коллеги, доброго дня!
Возможно, кто-то сталкивался с необходимостью скрывать/отображать кнопки в реестре по условию? Пример из документации SDK не получилось адаптировать:

isCategory: function() {
        var activeRow = this.get("ActiveRow");
        if (activeRow)
                    {
                        var cat = this.get("GridData").get(activeRow).get("Category");
                        return (cat == "ID_нужной_категории") ? true : false;
                    }
       return false;
}

Необходимо в зависимости от категории и состояния Активности скрывать и отображать различные кнопки

Нравится

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

Антон, у Вас в в переменной cat хранится объект с value и displayValue.
Для сравнения с "ID_нужной_категории" нужно брать cat.value.
Также важно, что если у вас не будет выведена колонка в реестр, то вы не сможете получить ее значение.
Для того, чтобы необходимая колонка всегда тянулась в ActiveRow можете переопределить следующий метод:
[javascript]
getGridDataColumns: function(){
var gridDataColumns = this.callParent(arguments);
gridDataColumns.Category= gridDataColumns.Category|| {path: "Category"};
return gridDataColumns;
}
[/javascript]

Александр, спасибо, однако это не помогло, к сожалению. Как только делаю привязку свойства visible к функции isComplectationCategory, так сразу кнопка пропадает независимо от категории выбранной активности. Изменение условия проверки (с "==" на "!=") не помогает, кнопка в любом случае скрыта.

Вот полный код ActivitySectionV2:
[javascript]
define("ActivitySectionV2", ['ConfigurationConstants', 'ProcessModuleUtilities'],
function(ConfigurationConstants, ProcessModuleUtilities) {
return {
entitySchemaName: "Activity",
methods: {
// добавляем новые пункты в меню "Действия"
getSectionActions: function() {
var actionMenuItems = this.callParent(arguments);
actionMenuItems.addItem(this.getButtonMenuItem({
Type: "Terrasoft.MenuSeparator",
Caption: "Задачи на комплектацию"
}));
actionMenuItems.addItem(this.getActionsMenuItem({
Caption: "Взять в работу",
Click: {bindTo: "Get2Work"}
}));
return actionMenuItems;
},
// отработка нажатия пункта "Взять в работу" в "Действиях"
Get2Work: function() {
debugger;
var processArgs = {
sysProcessName: "UsrProcessGet2Work",
parameters: {
IncomingActivitiesList: this.getSelectedItems()
}
};
ProcessModuleUtilities.executeProcess(processArgs);
},
// выбор функций для отработки нажатий кнопок в реестре
onActiveRowAction: function(buttonTag, primaryColumnValue) {
switch (buttonTag) {
case "ComplectationFinished":
this.ComplectationFinishedProcess(primaryColumnValue);
break;
case "Sended":
this.SendedProcess(primaryColumnValue);
break;
case "SamplesReceived":
this.SamplesReceivedProcess(primaryColumnValue);
break;
default:
this.callParent(arguments);
break;
}
},
// отработка кнопки "Скомплектовано"
ComplectationFinishedProcess: function(recordId) {
debugger;
var activeRow = this.get("ActiveRow");
var processArgs = {
sysProcessName: "UsrComplectationFinishedProcess",
parameters: {
recordId: activeRow
}
};
ProcessModuleUtilities.executeProcess(processArgs);
},
// отработка кнопки "Отправлено"
SendedProcess: function(recordId) {
debugger;
var activeRow = this.get("ActiveRow");
var processArgs = {
sysProcessName: "UsrSendedProcess",
parameters: {
recordId: activeRow
}
};
ProcessModuleUtilities.executeProcess(processArgs);
},
// отработка кнопки "Образцы получены"
SamplesReceivedProcess: function(recordId) {
debugger;
var activeRow = this.get("ActiveRow");
var processArgs = {
sysProcessName: "UsrSamplesReceivedProcess",
parameters: {
recordId: activeRow
}
};
ProcessModuleUtilities.executeProcess(processArgs);
},
// установка видимости кнопки "Скомплектовано", если категория активности == "Комплектация"
isComplectationCategory: function() {
var activeRow = this.get("ActiveRow");
if (activeRow) {
var cat = this.get("GridData").get(activeRow).get("ActivityCategory");
return (cat.value != "4b9497c0-e794-40bc-81e0-5f46c9bde343") ? true : false; // 4b9497c0-e794-40bc-81e0-5f46c9bde343 категория "Комплектация"
}
return false;
},
getGridDataColumns: function() {
var gridDataColumns = this.callParent(arguments);
gridDataColumns.ActivityCategory= gridDataColumns.ActivityCategory|| { path: "ActivityCategory" };
return gridDataColumns;
}
},
diff: /**SCHEMA_DIFF*/[
// вставка кнопки "Скомплектовано"
{
"operation": "insert",
"name": "ComplectationFinishedAction",
"parentName": "DataGrid",
"propertyName": "activeRowActions",
"values": {
"className": "Terrasoft.Button",
"caption": "Скомплектовано",
"style": Terrasoft.controls.ButtonEnums.style.GREEN,
"tag": "ComplectationFinished",
"visible": {"bindTo": "isComplectationCategory"}
}
},
// ставка кнпоки "Отправлено"
{
"operation": "insert",
"name": "SendedAction",
"parentName": "DataGrid",
"propertyName": "activeRowActions",
"values": {
"className": "Terrasoft.Button",
"caption": "Отправлено",
"style": Terrasoft.controls.ButtonEnums.style.GREEN,
"tag": "Sended"
}
},
// вставка кнопки "Образцы отправлены"
{
"operation": "insert",
"name": "SamplesReceivedAction",
"parentName": "DataGrid",
"propertyName": "activeRowActions",
"values": {
"className": "Terrasoft.Button",
"caption": "Образцы получены",
"style": Terrasoft.controls.ButtonEnums.style.GREEN,
"tag": "SamplesReceived"
}
}
]/**SCHEMA_DIFF*/
};
}
);
[/javascript]
При установке внутрь функции isComplectationCategory точек остановки или уведомлений ничего не происходит - ощущение, что при выборе текущей строки реестра эта функция не срабатывает. Может, что-то ещё упустил в коде?

И ещё бы весьма признателен за подсказку, как скрыть стандартные кнопки в реестре

Попробуйте создать атрибут и забиндить видимость на него. Изменять состояние атрибута можно при изменении активного столбца, например.
А какие именно стандартные кнопки нужно скрыть? Они либо в diff по названию удаляются,либо методы, которые их формируют нужно сделать пустыми.
В этой теме есть пример:
http://www.community.terrasoft.ru/forum/topic/15106

Снова не помогло:

[javascript]
define("ActivitySectionV2", ['ConfigurationConstants', 'ProcessModuleUtilities'],
function(ConfigurationConstants, ProcessModuleUtilities) {
return {
entitySchemaName: "Activity",
attributes: {
'isComplectationCategoryAttribut': {
type: Terrasoft.ViewModelColumnType.VIRTUAL_COLUMN,
dataValueType: Terrasoft.DataValueType.BOOLEAN,
dependencies: [{
columns: ["ActivityCategory"],
methodName: "isComplectationCategoryAttributSet"
}]
}
},
methods: {
// добавляем новые пункты в меню "Действия"
getSectionActions: function() {
var actionMenuItems = this.callParent(arguments);
actionMenuItems.addItem(this.getButtonMenuItem({
Type: "Terrasoft.MenuSeparator",
Caption: "Задачи на комплектацию"
}));
actionMenuItems.addItem(this.getActionsMenuItem({
Caption: "Взять в работу",
Click: {bindTo: "Get2Work"}
}));
return actionMenuItems;
},
isComplectationCategoryAttributSet: function() {
var activeRow = this.get("ActiveRow");
var cat = this.get("GridData").get(activeRow).get("ActivityCategory");
this.set('isComplectationCategoryAttribut', cat.value === "4b9497c0-e794-40bc-81e0-5f46c9bde343")
return true; // 4b9497c0-e794-40bc-81e0-5f46c9bde343 категория "Комплектация"
},
// отработка нажатия пункта "Взять в работу" в "Действиях"
Get2Work: function() {
debugger;
var processArgs = {
sysProcessName: "UsrProcessGet2Work",
parameters: {
IncomingActivitiesList: this.getSelectedItems()
}
};
ProcessModuleUtilities.executeProcess(processArgs);
},
// выбор функций для отработки нажатий кнопок в реестре
onActiveRowAction: function(buttonTag, primaryColumnValue) {
switch (buttonTag) {
case "ComplectationFinished":
this.ComplectationFinishedProcess(primaryColumnValue);
break;
case "Sended":
this.SendedProcess(primaryColumnValue);
break;
case "SamplesReceived":
this.SamplesReceivedProcess(primaryColumnValue);
break;
default:
this.callParent(arguments);
break;
}
},
// отработка кнопки "Скомплектовано"
ComplectationFinishedProcess: function(recordId) {
debugger;
var activeRow = this.get("ActiveRow");
var processArgs = {
sysProcessName: "UsrComplectationFinishedProcess",
parameters: {
recordId: activeRow
}
};
ProcessModuleUtilities.executeProcess(processArgs);
},
// отработка кнопки "Отправлено"
SendedProcess: function(recordId) {
debugger;
var activeRow = this.get("ActiveRow");
var processArgs = {
sysProcessName: "UsrSendedProcess",
parameters: {
recordId: activeRow
}
};
ProcessModuleUtilities.executeProcess(processArgs);
},
// отработка кнопки "Образцы получены"
SamplesReceivedProcess: function(recordId) {
debugger;
var activeRow = this.get("ActiveRow");
var processArgs = {
sysProcessName: "UsrSamplesReceivedProcess",
parameters: {
recordId: activeRow
}
};
ProcessModuleUtilities.executeProcess(processArgs);
},
// установка видимости кнопки "Скомплектовано", если категория активности == "Комплектация"
/*isComplectationCategory: function() {
debugger;
var activeRow = this.get("ActiveRow");
debugger;
if (activeRow) {
var cat = this.get("GridData").get(activeRow).get("ActivityCategory");
debugger;
return (cat.value === "4b9497c0-e794-40bc-81e0-5f46c9bde343") ? true : false; // 4b9497c0-e794-40bc-81e0-5f46c9bde343 категория "Комплектация"
}
return false;
},*/
getGridDataColumns: function() {
var gridDataColumns = this.callParent(arguments);
gridDataColumns.ActivityCategory= gridDataColumns.ActivityCategory|| { path: "ActivityCategory" };
return gridDataColumns;
}
},
diff: /**SCHEMA_DIFF*/[
// вставка кнопки "Скомплектовано"
{
"operation": "insert",
"name": "ComplectationFinishedAction",
"parentName": "DataGrid",
"propertyName": "activeRowActions",
"values": {
"className": "Terrasoft.Button",
"caption": "Скомплектовано",
"style": Terrasoft.controls.ButtonEnums.style.GREEN,
"tag": "ComplectationFinished",
"visible": {"bindTo": "isComplectationCategoryAttribut"}
}
},
// ставка кнпоки "Отправлено"
{
"operation": "insert",
"name": "SendedAction",
"parentName": "DataGrid",
"propertyName": "activeRowActions",
"values": {
"className": "Terrasoft.Button",
"caption": "Отправлено",
"style": Terrasoft.controls.ButtonEnums.style.GREEN,
"tag": "Sended"
}
},
// вставка кнопки "Образцы отправлены"
{
"operation": "insert",
"name": "SamplesReceivedAction",
"parentName": "DataGrid",
"propertyName": "activeRowActions",
"values": {
"className": "Terrasoft.Button",
"caption": "Образцы получены",
"style": Terrasoft.controls.ButtonEnums.style.GREEN,
"tag": "SamplesReceived"
}
}
]/**SCHEMA_DIFF*/
};
}
);
[/javascript]
Кнопка теперь всегда скрыта. Подозреваю, что для Section некорректно писать type: Terrasoft.ViewModelColumnType.VIRTUAL_COLUMN, или вообще где-то глобально ошибаюсь?

с удалением стандартных кнопок разобрался, достаточно в diff добавить код:
[javascript]
{
"operation": "remove",
"name": "DataGridActiveRowDeleteAction"
}
[/javascript]
где "DataGridActiveRowDeleteAction" это название кнопки, взятое из BaseSectionV2

Антон, для наглядности оставил только 1 кнопку и соответствующие методы.
Обратите внимание на метод addColumnLink. Без него зависимость видимости не срабатывает.
Пример найден в LeadSectionV2.
[javascript]
define("ActivitySectionV2", ["terrasoft",'ConfigurationConstants', 'ProcessModuleUtilities'],
function(Terrasoft,ConfigurationConstants, ProcessModuleUtilities) {
return {
entitySchemaName: "Activity",
attributes: {},
methods: {

addColumnLink: function(item) {
var self = this;
item.isComplectationCategoryAttributSet= function() {
return self.isComplectationCategoryAttributSet.call(self, this.get(this.primaryColumnName));
};
return this.callParent(arguments);
},

isComplectationCategoryAttributSet: function(activeRow) {
if (!activeRow) return true;
var cat = this.get("GridData").get(activeRow).get("ActivityCategory");
return cat&&cat.value === "f51c4643-58e6-df11-971b-001d60e938c6"; //категория = выполнить. Для теста
//return cat&&cat.value === "4b9497c0-e794-40bc-81e0-5f46c9bde343"; //категория "Комплектация"

}
},
diff: /**SCHEMA_DIFF*/[
{
"operation": "insert",
"name": "ComplectationFinishedAction",
"parentName": "DataGrid",
"propertyName": "activeRowActions",
"values": {
"className": "Terrasoft.Button",
"caption": "Скомплектовано",
"style": Terrasoft.controls.ButtonEnums.style.GREEN,
"tag": "ComplectationFinished",
"visible": {"bindTo": "isComplectationCategoryAttributSet"}
}
}
]/**SCHEMA_DIFF*/
};
}
);
[/javascript]

Александр, прекрасно! Ваше решение работает, большое спасибо

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