Третий день сижу в платформе. Как в ней после замещения клиентского модуля, управлять видимостью кнопок - прятать/ показывать, показывать только админу и тп
Может что-то еще нужно замещять?
Есть нормальная методичка, крнига?
Как вести разработку с отладкой? (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 - мой новый вопрос, ... спасибо