Коллеги, доброго дня!
Возможно, кто-то сталкивался с необходимостью скрывать/отображать кнопки в реестре по условию? Пример из документации SDK не получилось адаптировать:
var activeRow = this.get("ActiveRow");
if (activeRow)
{
var cat = this.get("GridData").get(activeRow).get("Category");
return (cat == "ID_нужной_категории") ? true : false;
}
return false;
}
Необходимо в зависимости от категории и состояния Активности скрывать и отображать различные кнопки
Нравится
Антон, у Вас в в переменной cat хранится объект с value и displayValue.
Для сравнения с "ID_нужной_категории" нужно брать cat.value.
Также важно, что если у вас не будет выведена колонка в реестр, то вы не сможете получить ее значение.
Для того, чтобы необходимая колонка всегда тянулась в ActiveRow можете переопределить следующий метод:
getGridDataColumns: function(){ var gridDataColumns = this.callParent(arguments); gridDataColumns.Category= gridDataColumns.Category|| {path: "Category"}; return gridDataColumns; }
Александр, спасибо, однако это не помогло, к сожалению. Как только делаю привязку свойства visible к функции isComplectationCategory, так сразу кнопка пропадает независимо от категории выбранной активности. Изменение условия проверки (с "==" на "!=") не помогает, кнопка в любом случае скрыта.
Вот полный код ActivitySectionV2:
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*/ }; } );
При установке внутрь функции isComplectationCategory точек остановки или уведомлений ничего не происходит - ощущение, что при выборе текущей строки реестра эта функция не срабатывает. Может, что-то ещё упустил в коде?
И ещё бы весьма признателен за подсказку, как скрыть стандартные кнопки в реестре
Попробуйте создать атрибут и забиндить видимость на него. Изменять состояние атрибута можно при изменении активного столбца, например.
А какие именно стандартные кнопки нужно скрыть? Они либо в diff по названию удаляются,либо методы, которые их формируют нужно сделать пустыми.
В этой теме есть пример:
http://www.community.terrasoft.ru/forum/topic/15106
Снова не помогло:
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*/ }; } );
Кнопка теперь всегда скрыта. Подозреваю, что для Section некорректно писать type: Terrasoft.ViewModelColumnType.VIRTUAL_COLUMN, или вообще где-то глобально ошибаюсь?
с удалением стандартных кнопок разобрался, достаточно в diff добавить код:
{ "operation": "remove", "name": "DataGridActiveRowDeleteAction" }
где "DataGridActiveRowDeleteAction" это название кнопки, взятое из BaseSectionV2
Антон, для наглядности оставил только 1 кнопку и соответствующие методы.
Обратите внимание на метод addColumnLink. Без него зависимость видимости не срабатывает.
Пример найден в LeadSectionV2.
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*/ }; } );
Александр, прекрасно! Ваше решение работает, большое спасибо