Третий день сижу в платформе. Как в ней после замещения клиентского модуля, управлять видимостью кнопок - прятать/ показывать, показывать только админу и тп
Может что-то еще нужно замещять?
Есть нормальная методичка, крнига?
Как вести разработку с отладкой? (site-установка)
Когда нужен c#, когда достаточно на js и где эта граница?
Нравится
видимостью кнопок можно управлять через атрибуты(в diff кнопки забиндить параметр visibility на нужный атрибут) и потом в методах уже задавать атрибуту true или false
Сериков Асхат Кайратович,
Спасибо. Можно примеры, для кнопки "добавить" и как для кнопок. Вот кусок моего кода, отключил реакцию на кнопки в OnActiveRow а как их вообще убрать? Еще у меня есть кнопка на которую надо делать то для чего c# не нужен но надо как-то ViewModel расширить или что-то такое, вот как это все? diff: [{
"operation": "insert",
"name": "bnBackCall",
"parentName": "DataGrid",
"propertyName": "activeRowActions",
"index": 111,
"values": {
"className": "Terrasoft.Button",
"style": Terrasoft.controls.ButtonEnums.style.GREY,
"caption": "Позвонить",
"tag": "tagBnBackCall"
}
}],
methods: {
init()
{
alert('init');
this.callParent(arguments);
},
onRender()
{
alert('render');
this.callParent(arguments);
},
onActiveRowAction: function(buttonTag, primaryColumnValue) {
switch (buttonTag) {
case "edit":
alert('Нельзя открыть кандидата!');
break;
case "copy":
alert('Нельзя копировать кандидата!');
break;
case "delete":
alert('Нельзя удалить кандидата!');
break;
QArt,
Я бы вам посоветовал заглянуть в базовую схему секции, весь контроль там прописан, все что вам нужно оттуда понять какие атрибуты нужны вам, к примеру чтобы скрыть кнопку "Добавить", в init методе достаточно
init: function() { this.callParent(arguments); this.set("IsAddRecordButtonVisible", false); }
атрибут IsAddRecordButtonVisible я нашел как раз в базовой схеме раздела "BaseSectionV2" так как все остальные секции наследуются именно от этой схемы.
Для скрытия кнопок открытия, удаления и тд точно так же задать нужное значение нужному атрибуту. Например для скрытия кнопки удалить:
init: function() { this.callParent(arguments); this.set("IsAddRecordButtonVisible", false); if(admin){ // Как понять что нынешний пользователь админ или нет думаю сами уже знаете this.set("canDeleteRecords", true) } else { this.set("canDeleteRecords", false) } }
для отображения кнопки копировать или открыть, не совсем уверен(так как не пробовал), но думаю можно сделать что то вроде:
{ "operation": "merge", "name": "DataGridActiveRowOpenAction" //Кнопка открытия записи "values": { "visible": {"bindTo": "YourAttribute"} } }, //кнопка копирования -DataGridActiveRowCopyAction, действия те же самые
Следует обозначить YourAttribute в атрибутах как булевое значение и так же в методе init задавать ему нужное вам значение в нужном вам виде
QArt,
Я не совсем понял про расширение ViewModel можно немного больше деталей? или пример какой нибудь
Подскажи еще плиз, начал лазить в BaseSectionV2. Добавил
diff: [{
"operation": "insert",
"name": "bnBackCall",
"parentName": "DataGrid",
"propertyName": "activeRowActions",
"index": 111,
"values": {
"className": "Terrasoft.Button",
"style": Terrasoft.controls.ButtonEnums.style.GREY,
"caption": "Позвонить",
"tag": "tagBnBackCall"
},
{
"operation": "merge",
"name": "DataGridActiveRowOpenAction" //Кнопка открытия записи
"values": {
"visible": {"bindTo": "IsOpenVisible"}
}
},
{
"operation": "merge",
"name": "DataGridActiveRowCopyAction" //Кнопка открытия записи
"values": {
"visible": {"bindTo": "IsCopyVisible"}
}
},
{
"operation": "merge",
"name": "DataGridActiveRowDeleteAction" //Кнопка открытия записи
"values": {
"visible": {"bindTo": "IsDeleteVisible"}
}
},
}],
methods: {
init: function() {
this.callParent(arguments);
this.set("IsAddRecordButtonVisible", false);
this.set("canDeleteRecords", false);
this.set("IsDeleteVisible", false);
this.set("IsCopyVisible", false);
this.set("IsOpenVisible", false);
},
Кнопка "Добавить" пропала - Спасибо! Но она с главной части, а кнопки удалить, копировать и удалить остались тк они аяксом выходят при выборе ActiveRow. Вероятно их нужно удалять не (только в init) где? Хотя настроено чтобы их не было. Может что-то не так делаю и как определить текущий юзар админ или нет? По этому вопросу ничего лучше чем https://community.terrasoft.ru/articles/bpmonline-kak-opredelit-avlaets… не нашел, но пока не знаю как писать код на c# для платформы и делать так чтобы его можно было вызвать из js (на c# писать умею). Заранее спасибо!
QArt,
Даже не знаю про книгу, максимум что я видел то это академия террасофт где показаны базовые реализации кейсов.
Про с#, не знаю как его используют другие, мы например используем его только в веб сервисах как замену бизнес процессам, все таки все плюшки шарпа можно реализовать там. К примеру вызвать веб сервис на клиенте, получить ответ от веб сервиса в виде json или чего то подобного и уже дальше отталкиваться от этого. Вот пример написания и вызова веб сервиса на академии
https://academy.terrasoft.ru/documents/technic-sdk/7-11/kak-programmno-…
Понять администратор ли пользователь можно строчкой в init методе
this.getRoles(Terrasoft.core.enums.SysValue.CURRENT_USER.value, function (result) { this.set("Roles", result); }, this);
Тут выгружаются все роли пользователя в "Result", уже в коде можешь пройтись по нему в цикле посмотреть есть ли нужная тебе роль в объекте и делать дальше что по сценарию.
QArt,
Что касается кнопок, то я попробовал на секции ContactSectionV2(Секция контактов) и вот что получилось
define("ContactSectionV2", [], function() { return { entitySchemaName: "Contact", details: /**SCHEMA_DETAILS*/{}/**SCHEMA_DETAILS*/, methods: { init: function() { this.callParent(arguments); this.set("IsAddRecordButtonVisible", false); this.set("IsButtonVisible", false); //Прячет кнопки }, getSectionActions: function() { var actionMenuItems = this.callParent(arguments); actionMenuItems.addItem(this.getButtonMenuItem({ Type: "Terrasoft.MenuSeparator", Caption: "" })); actionMenuItems.addItem(this.getButtonMenuItem({ "Caption": "Скрыть/Показать", "Click": {bindTo: "showHide"}, "Enabled": true })); return actionMenuItems; }, showHide: function() { var visibleStatus = this.get("IsButtonVisible"); window.console.log(visibleStatus); this.set("IsButtonVisible", !visibleStatus); window.console.log(!visibleStatus); } }, attributes: { "IsButtonVisible": { "dataValueType": Terrasoft.DataValueType.BOOLEAN, "value": false } }, diff: /**SCHEMA_DIFF*/[ { "operation": "merge", "name": "DataGridActiveRowOpenAction", //Кнопка открытия записи "values": { "visible": {"bindTo": "IsButtonVisible"} } }, { "operation": "merge", "name": "DataGridActiveRowCopyAction", //Кнопка открытия записи "values": { "visible": {"bindTo": "IsButtonVisible"} } }, { "operation": "merge", "name": "DataGridActiveRowDeleteAction", //Кнопка открытия записи "values": { "visible": {"bindTo": "IsButtonVisible"} } } ]/**SCHEMA_DIFF*/ }; });
Однако кнопки почему то скрываются только один раз и не хотят вновь показаться по нажатию на действие Показать/Скрыть которое в кнопке Действия, надеюсь это поможет разобраться как дальше
Спросил у коллег поэтому поводу, говорят что эти кнопки добавляются куда то в buttonCollection и чтобы их скрыть/показать надо их оттуда удалять, и при надобности обратно закидывать, а как именно я не знаю, так что вышеописанный вариант нерабочий но думаю хоть какую то информацию он дает.
Привет, еще раз вопрос, и еще вопрос :) - в init написал:
init()
{
alert('init');
this.callParent(arguments);
this.set("IsAddRecordButtonVisible", false);
this.getRoles(Terrasoft.core.enums.SysValue.CURRENT_USER.value,
function (result) {
this.set("Roles", result);
},
this);
alert(result);
},
и вот что в отладке в хроме.консоле: (может надо в схему или куда-то что-то добавить и будет работать)
SxCandidateSection.js?hash=87519e0c9f0746dbb10b870134a8a93a:86 Uncaught TypeError: this.getRoles is not a function
at init (SxCandidateSection.js?hash=87519e0c9f0746dbb10b870134a8a93a:86)
at i.<anonymous> (BaseSchemaModuleV2.js?hash=87519e0c9f0746dbb10b870134a8a93a:184)
at i.<anonymous> (BaseSchemaModuleV2.js?hash=87519e0c9f0746dbb10b870134a8a93a:142)
at i.<anonymous> (SchemaBuilderV2.js?hash=87519e0c9f0746dbb10b870134a8a93a:715)
at SchemaBuilderV2.js?hash=87519e0c9f0746dbb10b870134a8a93a:465
at i.<anonymous> (ViewGeneratorV2.js?hash=87519e0c9f0746dbb10b870134a8a93a:2883)
at ViewGeneratorV2.js?hash=87519e0c9f0746dbb10b870134a8a93a:381
at Object.execCb (require.js:1693)
at Module.check (require.js:881)
at Module.enable (require.js:1173)
QArt,
Эм да, моя ошибка, забыл добавить сам метод,
getRoles: function (UserId, callback, scope) { var esq = Ext.create("Terrasoft.EntitySchemaQuery", { rootSchemaName: "SysUserInRole" }); var filter = this.Terrasoft.createColumnFilterWithParameter(this.Terrasoft.ComparisonType.EQUAL, "SysUser", UserId); esq.filters.addItem(filter); esq.addColumn("SysRole.Id", "RoleId"); esq.addColumn("[SysAdminUnit:Id:SysRole].Name", "Name"); esq.getEntityCollection(function (response) { if (response && response.success) { var roles = []; response.collection.each(function (item) { roles.push({ Id: item.values.RoleId, Name: item.values.Name }); }); if (scope) callback.call(scope, roles); else callback(roles); } }, this); }
Сериков Асхат Кайратович,
Спасибо! Но что-то не так делаю, помоги плиз
//IsAdmin
В Init написал this.getRoles(Terrasoft.core.enums.SysValue.CURRENT_USER.value,
function (result) {
this.set("gRoles", result);
},
this);
В кнопке на ActiveRow написал
var roles = this.get('gRoles');
var rolesAsString = '';
for (var i = 0; i < roles.length; i++)
{
var item = roles [i];
rolesAsString = rolesAsString + item[0] + ' => ' + item[1] + ' <+> ';
}
alert(rolesAsString);
выводит сплошные undefined притом пробовал в самом callback сделать alert(result) выдавал массив из трех элементов каждый из которых тоже массив из двух элементов, но в итоге каждое значение равно undefined
Что делать?
QArt,
Не могу точно сказать в чем причина, попробуй просто в ините когда получаешь роли прописать логи
this.getRoles(Terrasoft.core.enums.SysValue.CURRENT_USER.value, function (result) { window.console.log(result); this.set("Roles", result); }, this);
И посмотреть что в консоли выведется, если и тут ничего норм не выйдет, то возможно разница в версиях может быть ( я работаю на 7.7).
Можно еще поковырять в самой функции getRoles, посмотреть на каком этапе что выдает и где падает
Я кстати разобрался как манипулировать кнопками(скрыть/показать), еще требуется или уже сам разобрался?
Сериков Асхат Кайратович,
Привет, пиши как с кнопками, но у меня приемлемо работает то что ты писал до того. Можешь подсказать - https://community.terrasoft.ru/questions/obrabotka-v-onactiverowaction - мой новый вопрос, ... спасибо