В пользовательском разделе есть динамические страницы, и мне нужно сделать кнопку с действием, которое сохранит запись раздела, запретит её для редактирования, и отправит уведомление, чтобы управляющее лицо подтвердило действия на этой странице, допустим, покупку оборудования.
В мастере раздела нельзя создать кнопку, но я уверен, что это возможно в клиентском коде, так как на форуме многократно встречались ответы на подобные вопросы, но ссылки в них, увы, указывают на устаревшие адреса, которые перенаправляют на главную страницу академии террасофт.
Расположение кнопки не имеет большого значения, нужно только вызвать мой метод по нажатию.
Нравится
на страницу, в секцию атрибутов добавить, если надо вкл/выкл по условию
attributes: {
"ButtonEnabled": {
"dataValueType": Terrasoft.DataValueType.BOOLEAN,
"type": Terrasoft.ViewModelColumnType.VIRTUAL_COLUMN,
"value": false
}Вызов функции на кнопке
onButtonClick: function(){
this.SomeFunc();Сама кнопка в DIFF
{
"operation": "insert",
"name": "Button",
"values": {
"itemType": 5,
"caption": {
"bindTo": "Resources.Strings.ButtonCaption"
},
"click": {
"bindTo": "onButtonClick"
},
"style": "blue",
"enabled": {
"bindTo": "ButtonEnabled"
},
"layout": {
"colSpan": 12,
"rowSpan": 1,
"column": 0,
"row": 0,
"layoutName": "Tab72b43268TabLabelGridLayoutfb645753"
}
},
"parentName": "Tab72b43268TabLabelGridLayoutfb645753",
"propertyName": "items",
"index": 0
},В LocalizableString
ButtonCaption - Текст на кнопке
Если расположение кнопки не имеет значения, то можно использовать меню в "Действиях"
getActions: function() {
var actionMenuItems = this.callParent(arguments);
actionMenuItems.addItem(this.getButtonMenuItem({
"Caption": {"bindTo": "Resources.Strings.MyButtonCaption"},
"Click": {"bindTo": "onMyButtonClick"}
}));
return actionMenuItems;
},
на страницу, в секцию атрибутов добавить, если надо вкл/выкл по условию
attributes: {
"ButtonEnabled": {
"dataValueType": Terrasoft.DataValueType.BOOLEAN,
"type": Terrasoft.ViewModelColumnType.VIRTUAL_COLUMN,
"value": false
}Вызов функции на кнопке
onButtonClick: function(){
this.SomeFunc();Сама кнопка в DIFF
{
"operation": "insert",
"name": "Button",
"values": {
"itemType": 5,
"caption": {
"bindTo": "Resources.Strings.ButtonCaption"
},
"click": {
"bindTo": "onButtonClick"
},
"style": "blue",
"enabled": {
"bindTo": "ButtonEnabled"
},
"layout": {
"colSpan": 12,
"rowSpan": 1,
"column": 0,
"row": 0,
"layoutName": "Tab72b43268TabLabelGridLayoutfb645753"
}
},
"parentName": "Tab72b43268TabLabelGridLayoutfb645753",
"propertyName": "items",
"index": 0
},В LocalizableString
ButtonCaption - Текст на кнопке
Oleg,
Кнопка добавилась, и даже отображается в инспекторе, но при этом она абсолютно невидима. В enabled установлено true.
В вашем коде изменил только родительский контейнер и, соответственно, layoutName. У других элементов на странице тот же родитель

Oleg,
Спасибо большое, Олег. Хотел ответить "захардкодил", потом заметил, что захардкодил неправильно, но оставлю тут этот неправильный пример, на случай если кто столкнется в будущем.
{
"operation": "insert",
"name": "Button",
"values": {
"itemType": 5,
"caption": {// Правильно: "caption" :"Check out",
"bindTo": "Check out" // неправильное использование bindTo
},
"click": {
"bindTo": "onButtonClick"
},
"style": "blue",
"enabled": true,
"layout": {
"colSpan": 8,
"rowSpan": 1,
"column": 16,
"row": 6,
"layoutName": "Tab84fbfd75TabLabelGridLayout489fb6f3"
}
},
"parentName": "Tab84fbfd75TabLabelGridLayout489fb6f3",
"propertyName": "items",
"index": 6
},