Технические вопросы
7.x

Создание кнопки вызывающей определенный код

Доброго времени суток!
Есть у нас запись раздела, надо создать на ней кнопку(в действии или так), которая будет запускать определенный код, который на основе этой записи, создаст запись в другом разделе. Типа конвертации.

Буду рад если поделитесь ссылочкой с примером, или просто как это сделать.

Нравится

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

Добрый день.

Вы можете посмотреть пример реализации по ссылке:
http://www.community.terrasoft.ru/forum/topic/10554#comment-47944

Пример не полный.
1. Не указано как создать Действие.
2. Не указано куда вообще писать данный код.
Я думаю это вопросы связанные.

Я понимаю что большая часть тут люди пришедшие в bpm еще с ранних версий и уже опытные. Я же пришел из crm с совершенно другой архитектурой, и мне многое крайне трудно даётся.

Виктор, всю информацию Вы можете найти по ссылкам ниже:

Создание бизнес-процессов:
http://academy.terrasoft.ua/documents/?product=BPMS&ver=7.6.0

https://www.youtube.com/watch?v=PznkmfwaPYw

Добавление кнопки на страницу редактирования:
http://academy.terrasoft.ua/documents/docs/technic/SDK/7.6.0/AddButtonT…

Как создать замещающую схему страницы или раздела:
http://academy.terrasoft.ua/documents/docs/technic/SDK/7.6.0/CreateRepl…

Доброго времени суток!
Вот читаю доки, но у меня не получается в дизайнере процессов получить именно ту запись с которой нажимается кнопка, что бы на ее основании создать новою запись.
Какие именно надо вводить данные?

Добрый день!
Вам нужно создать параметр в вашем процессе ( параметр RecordId).
В методе, в котором вызывается ваш процесс, вызывать процесс с заполненным параметром.
Примерно, таким образом
метод
DoTest: function() {
var activeRow = this.get("ActiveRow");
var processArgs = {
sysProcessName: "UsrProcessTest",
parameters: {
RecordId: activeRow
}
};
ProcessModuleUtilities.executeProcess(processArgs);
}

Так... В документации в которую меня отправляли этого нет.
У меня процесс вызывается из кнопки(как в доках указано), я так полагаю это в схеме страницы вставлять?

Вы можете из кнопки вызывать, из действия.
да, это метод, который связан должен быть с кнопкой/действием

"Татаровская Дарья" написал:

Вы можете из кнопки вызывать, из действия.

да, это метод, который связан должен быть с кнопкой/действием


Это просто хорошо!
Но!
Как же добавить кнопку в действие а не в процесс?

"Сенько Виктор" написал:

Доброго времени суток!

Вот читаю доки, но у меня не получается в дизайнере процессов получить именно ту запись с которой нажимается кнопка, что бы на ее основании создать новою запись.

Какие именно надо вводить данные?


Данные можно определить строкой:
var contactId = this.get('Id');
в схеме страницы редактирования (как было укзано в первой ссылке).

И передать параметрами в бизнес процесс:
[javascript]
var processArgs = {
sysProcessName: 'SetPaymentDate',
parameters: {
ContactId: contactId
}
};
this.runProcess(processArgs.sysProcessName, processArgs.parameters, this);
[/javascript]

"Сенько Виктор" написал:

Это просто хорошо!

Но!

Как же добавить кнопку в действие а не в процесс?

Уточните, пожалуйста, Ваш вопрос.

"Мотков Илья" написал:Уточните, пожалуйста, Ваш вопрос.

Как создать кнопку на карточке? Что бы потом у ней добавить вызов БП.

Нашел данную статью
http://academy.terrasoft.ru/documents/docs/technic/SDK/7.6.0/AddActionT…

Решил для проверки добавить новое действие которое просто выводит название записи.

В Схема страницы редактирования раздела "Объект недвижимости" с типом "Земля" добавил в methods вот такой код:
[javascript]
// Метод, проверяющий на какой стадии находится заказ.
isRunning: function() {
return true;
},
// Метод-обработчик действия, который отображает в информационном окне дату выполнения заказа.
showOrderInfo: function() {
// Получение даты выполнения заказа.
var dueDate = this.get("Name");
// Вызов стандартного системного метода для отображения информационного окна.
this.showInformationDialog(dueDate);
},
getActions: function() {
// Вызывается родительская реализация метода для получения
// коллекции проинициализированных действий базовой страницы.
var actionMenuItems = this.callParent(arguments);
// Добавление линии сепаратора для визуального отделения пользовательского действия от списка
// действий базовой страницы.
actionMenuItems.addItem(this.getButtonMenuItem({
Type: "Terrasoft.MenuSeparator",
Caption: ""
}));
// Добавление пункта меню в список действий страницы редактирования.
actionMenuItems.addItem(this.getButtonMenuItem({
// Привязка заголовка пункта меню к локализуемой строке схемы.
"Caption": {bindTo: "Resources.Strings.GoConvertProperty"},
// Привязка метода обработчика действия.
"Tag": "showOrderInfo",
// Привязка свойства видимости пункта меню к значению, которое возвращает метод isRunning.
"Visible": {bindTo: "isRunning"}
}));
return actionMenuItems;
}
[/javascript]

Сохранил, сохранило успешно.

Однако во вкладке действия я не нашел своего пункта меню.
В чем может быть проблема?

Посмотрите в консоли браузера, там должна быть ошибка, возможно у вас нет поля Name, или вы не создали локал. строку GoConvertProperty. Так как код из академии верный. Вот к примеру в схеме OrderPageV2 добавлены методы:

[javascript]
methods: {
showInfo: function() {
var test = this.get("Id");
this.showInformationDialog(test);
},
getActions: function() {
var actionMenuItems = this.callParent(arguments);
actionMenuItems.addItem(this.getButtonMenuItem({
Type: "Terrasoft.MenuSeparator",
Caption: ""
}));
actionMenuItems.addItem(this.getButtonMenuItem({
"Caption": "test method 1",
"Tag": "showInfo"
}));
return actionMenuItems;
}
},
[/javascript]

Результат:

Так же кнопку можно добавить не в "действия" а просто, как обычный элемент, в нужную вам часть страницы, к примеру в контейнер с остальными кнопками, описав ее аналогично другим элементам, в секции diff:
[javascript]
{
"operation": "insert",
"parentName": "LeftContainer",
"propertyName": "items",
"name": "TestButton",
"values": {
"itemType": Terrasoft.ViewItemType.BUTTON,
"caption": "test method 2",
"click": {"bindTo": "showInfo"}
}
}
[/javascript]

Результат:

Ничего не понимаю
Добавил:
[javascript]
{
"operation": "insert",
"parentName": "LeftContainer",
"propertyName": "items",
"name": "TestButton",
"values": {
"itemType": Terrasoft.ViewItemType.BUTTON,
"caption": "test method 2",
"click": {"bindTo": "showInfo"}
}
},
[/javascript]

в методы:
[javascript]
showInfo: function() {
var test = this.get("Id");
this.showInformationDialog(test);
}
[/javascript]

TestButton - добавил в переменные.

вот полный код:
[javascript]
define('SFPropertyType5Page', ['SFPropertyType5PageResources', 'GeneralDetails'],
function(resources, GeneralDetails) {
return {
entitySchemaName: 'SFProperty',
details: /**SCHEMA_DETAILS*/{
"PropertyCon": {
"schemaName": "PropertyConDetail",
"entitySchemaName": "PropertyCon",
"filter": {
"detailColumn": "Property",
"masterColumn": "Id"
}
}
}/**SCHEMA_DETAILS*/,
diff: /**SCHEMA_DIFF*/[
{
"operation": "insert",
"parentName": "LeftContainer",
"propertyName": "items",
"name": "TestButton",
"values": {
"itemType": Terrasoft.ViewItemType.BUTTON,
"caption": "test method 2",
"click": {"bindTo": "showInfo"}
}
},
{
"operation": "insert",
"name": "Name",
"values": {
"layout": {
"column": 0,
"row": 0,
"colSpan": 12,
"rowSpan": 1
}
},
"parentName": "Header",
"propertyName": "items",
"index": 0
},
{
"operation": "insert",
"name": "Owner",
"values": {
"layout": {
"column": 12,
"row": 0,
"colSpan": 12,
"rowSpan": 1
},
"bindTo": "Owner",
"caption": {
"bindTo": "Resources.Strings.OwnerCaption"
},
"enabled": true
},
"parentName": "Header",
"propertyName": "items",
"index": 1
},
{
"operation": "insert",
"name": "Type",
"values": {
"layout": {
"column": 0,
"row": 1,
"colSpan": 12,
"rowSpan": 1
},
"bindTo": "Type",
"caption": {
"bindTo": "Resources.Strings.TypeCaption"
},
"enabled": true
},
"parentName": "Header",
"propertyName": "items",
"index": 2
},
{
"operation": "insert",
"name": "ExclusiveContract",
"values": {
"layout": {
"column": 12,
"row": 1,
"colSpan": 12,
"rowSpan": 1
},
"bindTo": "ExclusiveContract",
"caption": {
"bindTo": "Resources.Strings.ExclusiveContractCaption"
},
"enabled": true
},
"parentName": "Header",
"propertyName": "items",
"index": 3
},
{
"operation": "insert",
"name": "AdLink",
"values": {
"layout": {
"column": 0,
"row": 2,
"colSpan": 12,
"rowSpan": 1
},
"bindTo": "AdLink",
"caption": {
"bindTo": "Resources.Strings.AdLinkCaption"
},
"enabled": true
},
"parentName": "Header",
"propertyName": "items",
"index": 4
},
{
"operation": "insert",
"name": "IsArchive",
"values": {
"layout": {
"column": 12,
"row": 2,
"colSpan": 12,
"rowSpan": 1
},
"bindTo": "IsArchive",
"caption": {
"bindTo": "Resources.Strings.IsArchiveCaption"
},
"enabled": true
},
"parentName": "Header",
"propertyName": "items",
"index": 5
},
{
"operation": "insert",
"name": "RentDate",
"values": {
"layout": {
"column": 0,
"row": 3,
"colSpan": 12,
"rowSpan": 1
},
"bindTo": "RentDate",
"caption": {
"bindTo": "Resources.Strings.RentDateCaption"
},
"enabled": true
},
"parentName": "Header",
"propertyName": "items",
"index": 6
},
{
"operation": "insert",
"name": "Price",
"values": {
"layout": {
"column": 0,
"row": 4,
"colSpan": 12,
"rowSpan": 1
},
"bindTo": "Price",
"caption": {
"bindTo": "Resources.Strings.PriceCaption"
},
"enabled": true
},
"parentName": "Header",
"propertyName": "items",
"index": 7
},
{
"operation": "insert",
"name": "Discount",
"values": {
"layout": {
"column": 0,
"row": 5,
"colSpan": 12,
"rowSpan": 1
},
"bindTo": "Discount",
"caption": {
"bindTo": "Resources.Strings.DiscountCaption"
},
"enabled": true
},
"parentName": "Header",
"propertyName": "items",
"index": 8
},
{
"operation": "insert",
"name": "Vzamen",
"values": {
"layout": {
"column": 0,
"row": 6,
"colSpan": 12,
"rowSpan": 1
},
"bindTo": "Vzamen",
"caption": {
"bindTo": "Resources.Strings.VzamenCaption"
},
"enabled": true
},
"parentName": "Header",
"propertyName": "items",
"index": 9
},
{
"operation": "insert",
"name": "Rieltcom",
"values": {
"layout": {
"column": 0,
"row": 7,
"colSpan": 12,
"rowSpan": 1
},
"bindTo": "Rieltcom",
"caption": {
"bindTo": "Resources.Strings.RieltcomCaption"
},
"enabled": true
},
"parentName": "Header",
"propertyName": "items",
"index": 10
},
{
"operation": "insert",
"name": "Description",
"values": {
"layout": {
"column": 0,
"row": 8,
"colSpan": 24,
"rowSpan": 1
},
"bindTo": "Description",
"caption": {
"bindTo": "Resources.Strings.DescriptionCaption"
},
"enabled": true
},
"parentName": "Header",
"propertyName": "items",
"index": 11
},
{
"operation": "insert",
"name": "GeneralInfoTab",
"values": {
"caption": {
"bindTo": "Resources.Strings.GeneralInfoTabCaption"
},
"items": []
},
"parentName": "Tabs",
"propertyName": "tabs",
"index": 0
},
{
"operation": "insert",
"name": "PropertyCon",
"values": {
"itemType": 2
},
"parentName": "GeneralInfoTab",
"propertyName": "items",
"index": 0
},
{
"operation": "insert",
"name": "group",
"values": {
"itemType": 15,
"caption": {
"bindTo": "Resources.Strings.groupCaption"
},
"items": [],
"controlConfig": {
"collapsed": false
}
},
"parentName": "GeneralInfoTab",
"propertyName": "items",
"index": 1
},
{
"operation": "insert",
"name": "group_gridLayout",
"values": {
"itemType": 0,
"items": []
},
"parentName": "group",
"propertyName": "items",
"index": 0
},
{
"operation": "insert",
"name": "State",
"values": {
"layout": {
"column": 0,
"row": 0,
"colSpan": 12,
"rowSpan": 1
},
"bindTo": "State",
"caption": {
"bindTo": "Resources.Strings.StateCaption"
},
"enabled": true
},
"parentName": "group_gridLayout",
"propertyName": "items",
"index": 0
},
{
"operation": "insert",
"name": "Street",
"values": {
"layout": {
"column": 12,
"row": 0,
"colSpan": 12,
"rowSpan": 1
},
"bindTo": "Street",
"caption": {
"bindTo": "Resources.Strings.StreetCaption"
},
"enabled": true
},
"parentName": "group_gridLayout",
"propertyName": "items",
"index": 1
},
{
"operation": "insert",
"name": "Areastate",
"values": {
"layout": {
"column": 0,
"row": 1,
"colSpan": 12,
"rowSpan": 1
},
"bindTo": "Areastate",
"caption": {
"bindTo": "Resources.Strings.AreastateCaption"
},
"enabled": true
},
"parentName": "group_gridLayout",
"propertyName": "items",
"index": 2
},
{
"operation": "insert",
"name": "HouseNumber",
"values": {
"layout": {
"column": 12,
"row": 1,
"colSpan": 12,
"rowSpan": 1
},
"bindTo": "HouseNumber",
"caption": {
"bindTo": "Resources.Strings.HouseNumberCaption"
},
"enabled": true
},
"parentName": "group_gridLayout",
"propertyName": "items",
"index": 3
},
{
"operation": "insert",
"name": "City",
"values": {
"layout": {
"column": 0,
"row": 2,
"colSpan": 12,
"rowSpan": 1
},
"bindTo": "City",
"caption": {
"bindTo": "Resources.Strings.CityCaption"
},
"enabled": true
},
"parentName": "group_gridLayout",
"propertyName": "items",
"index": 4
},
{
"operation": "insert",
"name": "Housing",
"values": {
"layout": {
"column": 12,
"row": 2,
"colSpan": 12,
"rowSpan": 1
},
"bindTo": "Housing",
"caption": {
"bindTo": "Resources.Strings.HousingCaption"
},
"enabled": true
},
"parentName": "group_gridLayout",
"propertyName": "items",
"index": 5
},
{
"operation": "insert",
"name": "CityArea",
"values": {
"layout": {
"column": 0,
"row": 3,
"colSpan": 12,
"rowSpan": 1
},
"bindTo": "CityArea",
"caption": {
"bindTo": "Resources.Strings.CityAreaCaption"
},
"enabled": true
},
"parentName": "group_gridLayout",
"propertyName": "items",
"index": 6
},
{
"operation": "insert",
"name": "Fraction",
"values": {
"layout": {
"column": 12,
"row": 3,
"colSpan": 12,
"rowSpan": 1
},
"bindTo": "Fraction",
"caption": {
"bindTo": "Resources.Strings.FractionCaption"
},
"enabled": true
},
"parentName": "group_gridLayout",
"propertyName": "items",
"index": 7
},
{
"operation": "insert",
"name": "Landmark",
"values": {
"layout": {
"column": 0,
"row": 4,
"colSpan": 12,
"rowSpan": 1
},
"bindTo": "Landmark",
"caption": {
"bindTo": "Resources.Strings.LandmarkCaption"
},
"enabled": true
},
"parentName": "group_gridLayout",
"propertyName": "items",
"index": 8
},
{
"operation": "insert",
"name": "group1",
"values": {
"itemType": 15,
"caption": {
"bindTo": "Resources.Strings.group1Caption"
},
"items": [],
"controlConfig": {
"collapsed": false
}
},
"parentName": "GeneralInfoTab",
"propertyName": "items",
"index": 2
},
{
"operation": "insert",
"name": "group1_gridLayout",
"values": {
"itemType": 0,
"items": []
},
"parentName": "group1",
"propertyName": "items",
"index": 0
},
{
"operation": "insert",
"name": "PlotArea",
"values": {
"layout": {
"column": 0,
"row": 0,
"colSpan": 12,
"rowSpan": 1
},
"bindTo": "PlotArea",
"caption": {
"bindTo": "Resources.Strings.PlotAreaCaption"
},
"enabled": true
},
"parentName": "group1_gridLayout",
"propertyName": "items",
"index": 0
},
{
"operation": "insert",
"name": "group2",
"values": {
"itemType": 15,
"caption": {
"bindTo": "Resources.Strings.group2Caption"
},
"items": [],
"controlConfig": {
"collapsed": false
}
},
"parentName": "GeneralInfoTab",
"propertyName": "items",
"index": 3
},
{
"operation": "insert",
"name": "group2_gridLayout",
"values": {
"itemType": 0,
"items": []
},
"parentName": "group2",
"propertyName": "items",
"index": 0
},
{
"operation": "insert",
"name": "ObjectType",
"values": {
"layout": {
"column": 0,
"row": 0,
"colSpan": 12,
"rowSpan": 1
},
"bindTo": "ObjectType",
"caption": {
"bindTo": "Resources.Strings.ObjectTypeCaption"
},
"enabled": true
},
"parentName": "group2_gridLayout",
"propertyName": "items",
"index": 0
},
{
"operation": "insert",
"name": "IsSewerage",
"values": {
"layout": {
"column": 12,
"row": 0,
"colSpan": 12,
"rowSpan": 1
},
"bindTo": "IsSewerage",
"caption": {
"bindTo": "Resources.Strings.IsSewerageCaption"
},
"enabled": true
},
"parentName": "group2_gridLayout",
"propertyName": "items",
"index": 1
},
{
"operation": "insert",
"name": "IsAsphaltedRoad",
"values": {
"layout": {
"column": 0,
"row": 1,
"colSpan": 12,
"rowSpan": 1
},
"bindTo": "IsAsphaltedRoad",
"caption": {
"bindTo": "Resources.Strings.IsAsphaltedRoadCaption"
},
"textSize": 0,
"labelConfig": {
"visible": true
},
"enabled": true
},
"parentName": "group2_gridLayout",
"propertyName": "items",
"index": 2
},
{
"operation": "insert",
"name": "IsWaterSupply",
"values": {
"layout": {
"column": 12,
"row": 1,
"colSpan": 12,
"rowSpan": 1
},
"bindTo": "IsWaterSupply",
"caption": {
"bindTo": "Resources.Strings.IsWaterSupplyCaption"
},
"enabled": true
},
"parentName": "group2_gridLayout",
"propertyName": "items",
"index": 3
},
{
"operation": "insert",
"name": "IsGasSupply",
"values": {
"layout": {
"column": 0,
"row": 2,
"colSpan": 12,
"rowSpan": 1
},
"bindTo": "IsGasSupply",
"caption": {
"bindTo": "Resources.Strings.IsGasSupplyCaption"
},
"enabled": true
},
"parentName": "group2_gridLayout",
"propertyName": "items",
"index": 4
},
{
"operation": "insert",
"name": "IsPledged",
"values": {
"layout": {
"column": 12,
"row": 2,
"colSpan": 12,
"rowSpan": 1
},
"bindTo": "IsPledged",
"caption": {
"bindTo": "Resources.Strings.IsPledgedCaption"
},
"enabled": true
},
"parentName": "group2_gridLayout",
"propertyName": "items",
"index": 5
},
{
"operation": "insert",
"name": "IsDeposit",
"values": {
"layout": {
"column": 0,
"row": 3,
"colSpan": 12,
"rowSpan": 1
},
"bindTo": "IsDeposit",
"caption": {
"bindTo": "Resources.Strings.IsDepositCaption"
},
"enabled": true
},
"parentName": "group2_gridLayout",
"propertyName": "items",
"index": 6
},
{
"operation": "insert",
"name": "IsMortgage",
"values": {
"layout": {
"column": 12,
"row": 3,
"colSpan": 12,
"rowSpan": 1
},
"bindTo": "IsMortgage",
"caption": {
"bindTo": "Resources.Strings.IsMortgageCaption"
},
"enabled": true
},
"parentName": "group2_gridLayout",
"propertyName": "items",
"index": 7
},
{
"operation": "insert",
"name": "IsBargaining",
"values": {
"layout": {
"column": 0,
"row": 4,
"colSpan": 12,
"rowSpan": 1
},
"bindTo": "IsBargaining",
"caption": {
"bindTo": "Resources.Strings.IsBargainingCaption"
},
"enabled": true
},
"parentName": "group2_gridLayout",
"propertyName": "items",
"index": 8
},
{
"operation": "insert",
"name": "IsExchange",
"values": {
"layout": {
"column": 12,
"row": 4,
"colSpan": 12,
"rowSpan": 1
},
"bindTo": "IsExchange",
"caption": {
"bindTo": "Resources.Strings.IsExchangeCaption"
},
"enabled": true
},
"parentName": "group2_gridLayout",
"propertyName": "items",
"index": 9
},
{
"operation": "insert",
"name": "IsNetSales",
"values": {
"layout": {
"column": 0,
"row": 5,
"colSpan": 12,
"rowSpan": 1
},
"bindTo": "IsNetSales",
"caption": {
"bindTo": "Resources.Strings.IsNetSalesCaption"
},
"enabled": true
},
"parentName": "group2_gridLayout",
"propertyName": "items",
"index": 10
}
]/**SCHEMA_DIFF*/,
attributes: {},
methods: {
showInfo: function() {
var test = this.get("Id");
this.showInformationDialog(test);
}
},
rules: {},
userCode: {}
};
});

[/javascript]

Кнопки на карточке нету....

Что вы имели в виду под "TestButton - добавил в переменные.", какие переменные?

А в остальном повторюсь, код верный, кнопка должна быть на странице SFPropertyType5Page, учтите что она будет не на всех страницах этого раздела, а только на странице, соответствующего типа.
Проверить какой номер типа у вашей страницы, на которой вы смотрите результат, можно, перейдя в дизайнер страницы, тогда в адресной строке отобразится что-то вроде этого:
http://ваш-сайт/0/Nui/ViewModule.aspx#SectionDesigner/Document/Page/UsrDocumentType4Page

Так же попробуйте почистить кеш браузера и перезайти на сайт.
Если проблему не получится устранить, обратитесь в службу поддержки support@terrasoft.ru, и предоставьте им доступ к вашему сайту. Тогда специалист посмотрит ваш конкретный случай, так как, по коду, все верно.

"Щиголь Максим" написал:Что вы имели в виду под "TestButton - добавил в переменные.", какие переменные?

LocalizableString

Кнопки нету.

"Щиголь Максим" написал:А в остальном повторюсь, код верный, кнопка должна быть на странице SFPropertyType5Page, учтите что она будет не на всех страницах этого раздела, а только на странице, соответствующего типа.

Я в курсе этого. Все точно совпадает.
Это можно понять по линку самой записи
0/Nui/ViewModule.aspx#SectionModuleV2/SFPropertySection/SFPropertyType5Page/edit/75472f5b-57b3-44e9-8c27-001b82b0aab2

Я так понял что придется писать в саппорт.

Да, пишите в саппорт с предоставлением доступа. А в LocalizableString нет смысла добавлять TestButton, если вы не используете значение этой локал. строки как Resources.Strings.TestButton где-нибудь в коде.

"Щиголь Максим" написал:

Да, пишите в саппорт с предоставлением доступа. А в LocalizableString нет смысла добавлять TestButton, если вы не используете значение этой локал. строки как Resources.Strings.TestButton где-нибудь в коде.


Спасибо, написал в саппорт.

Вопрос отправил, но был не тот пакет саппорта) Оплатили, жду.

Пока вопрос другого плана:
Как добавить параметр в процесс?
Нашел статью: http://academy.terrasoft.ua/documents/docs/technic/BPMS/7.6.0/BPMonline…

Но у себя нигде не могу найти где добавлять параметры. В дизайнере процессов такого не нашел. А в конфигурации если нажать на процесс опять открывается дизайнер.
Плиз хелп.

Здравствуйте!

Параметры нужно добавлять в самом дизайнере. Для этого необходимо открыть панель справа (там справа есть две стрелки). После открытия этой панели Вы увидите структуру процесса. Там Вы можете добавить параметр.

У меня оказалось все свернуто)
Большое спасибо!

Пришел ответ от саппорта.
Суть в том что оказывается кнопка есть, но она присутствует только при создании новой записи.

Ответ такой:
Проблема возникает из-за того, что в добавляемом элементе неверно указан parentName контейнер, он не существует при открытии из грида, Вам необходимо модифицировать страницу в которую Вы добавили кнопку, таким образом, чтобы она отображалась в обоиз режимах в контейнере с ActionButtons

Суть в том что как раз при создании записи кнопка и не нужна.

Какой мне использовать parentName в моём случае?

Я так понял, ваш последний комментарий, о попытках создания кнопки, следующим образом:
[javascript]
{
"operation": "insert",
"parentName": "LeftContainer",
"propertyName": "items",
"name": "TestButton",
"values": {
"itemType": Terrasoft.ViewItemType.BUTTON,
"caption": "test method 2",
"click": {"bindTo": "showInfo"}
}
},
[/javascript]
От сюда вопрос: в какой схеме вы добавляете код?
Если в схеме редактирования страницы, то у нее "parentName": "LeftContainer" есть.
Если в схеме секции, то там есть подобный контейнер, называется он "SeparateModeActionButtonsLeftContainer".

Посмотреть названия контейнеров можно через Inspect element в браузере, значения атрибута id в div'ах контейнеров составляются как "название схемы" + "имя контейнера" + "Container".

Ну или в родительских схемах страницы и секции есть конечно же объявление этих контейнеров.

Согласно этой инструкции
http://academy.terrasoft.ru/documents/?product=SDK&ver=7.6.0
Как добавить кнопку на страницу редактирования существующей записи

нужно добавлять изменения в замещающем модуле раздела и в замещающем модуле страницы редактирования.
Вы по-моему только на странице редактирования сделали?

И не забывайте после изменения схем, чистить кеш браузера, что бы изменения вступили в силу.

"Татаровская Дарья" написал:нужно добавлять изменения в замещающем модуле раздела и в замещающем модуле страницы редактирования.
Вы по-моему только на странице редактирования сделали?

Ну посути да, SFPropertyType5Page
А больше у меня замещающих схем с нужным типом и нет.

просто в той инструкции, что вы пользовались, написано что вам необходимо внести изменения в замещающем модуле раздела и в замещающем модуле страницы.
Вы же только в странице получается изменения внесли
Пункты 1-5 в инструкции вашей посмотрите

Цифра 5 в типе, подсказывает что у вас есть еще 4 вариации страниц для данного раздела, плюс схема секции обязательно должна быть тоже. Если раздел совсем новый, то схема секции должна быть в ваших custom пакетах, если раздел типовой, то можно создать замещающую схему и изменить в ней только то что вам нужно.
Подробнее про замещение схем:
https://www.youtube.com/watch?v=cA-WmZKpuGg
http://academy.terrasoft.ru/documents/docs/technic/SDK/7.6.0/ModuleSubs…
Или воспользоватся мастером раздела, после сохранения изменений, он сам создаст замещающие схемы для внесенных изменений в визуальный вид.

"Щиголь Максим" написал:

Цифра 5 в типе, подсказывает что у вас есть еще 4 вариации страниц для данного раздела, плюс схема секции обязательно должна быть тоже. Если раздел совсем новый, то схема секции должна быть в ваших custom пакетах, если раздел типовой, то можно создать замещающую схему и изменить в ней только то что вам нужно.

Подробнее про замещение схем:

https://www.youtube.com/watch?v=cA-WmZKpuGg

http://academy.terrasoft.ru/documents/docs/technic/SDK/7.6.0/ModuleSubst...

Или воспользоватся мастером раздела, после сохранения изменений, он сам создаст замещающие схемы для внесенных изменений в визуальный вид.

Страница не новая, кнопка нужна имеено для этой схемы.

Что то совсем запутался.

Какие мне надо внести изменения в замещающую схему раздела? Что бы у меня была кнопка?

Два варианта вставки кода кнопки уже были написаны выше. Если пользуетесь способом добавления через секцию "diff", убедитесь что соответствующий контейнер есть на странице. Посмотрите в это в developer tools вашего браузера, т.к. описано выше. Или посмотрите родительскую схему вашей схемы страницы, и ее код.
В идеальном случае, если вы свои типы страниц создавали через мастер раздела,

то в вашей схеме "SFPropertyType5Page" в качестве родительской должна стоять "BaseModulePageV2", или схема, у которой родительской стоит "BaseModulePageV2"

которая в свою очередь наследуется от базовой схемы карточки "BasePageV2"

в ней то и объявлен "LeftContainer",

именно по этому в него можно добавлять ваши произвольные кнопки из вашей замещающей схемы страницы следующим образом с "parentName": "LeftContainer"
[javascript]
{
"operation": "insert",
"parentName": "LeftContainer",
"propertyName": "items",
"name": "TestButton",
"values": {
"itemType": Terrasoft.ViewItemType.BUTTON,
"caption": "test method 2",
"click": {"bindTo": "showInfo"}
}
}
[/javascript]
Если все условия совпадают, и у вас по какой-то причине кнопка не появляется, обратитесь еще раз в поддержку, и попросите пусть они это сделают за вас, а далее уже будете делать по примеру.

BaseModulePageV2 стандартна, и ее изменить нелязя.
Я так понимаю мне надо создать для нее замещающую схему? И в ней уже внести данный блок. Верно?
Или же надо создать замещающую схему для BasePageV2? В ней как раз содержатся кнопки сохранить и т.д
в BasePageV2 уже есть:
[javascript]
{
"operation": "insert",
"name": "LeftContainer",
"parentName": "ActionButtonsContainer",
"propertyName": "items",
"values": {
"itemType": Terrasoft.ViewItemType.CONTAINER,
"wrapClass": ["left-container-wrapClass"],
"items": []
}
},
[/javascript]

Так как же уменя называется контейнер, подскажите плиз:
http://cs629430.vk.me/v629430418/2257b/M9ERHTvJsl4.jpg

У вас это CombinedModeActionButtonsCardLeftContainer, т.к. страница открывается в комбинированном режиме.
И этот контейнер относится к схеме секции а не страницы. Следовательно и добавлять код вам нужно в схеме: "SFPropertySection".

Если бы вы страницу объекта недвижимости открыли как-нибудь из лукапа, на странице где он выведен как поле-справочник, нажали бы "добавить", то на той странице, ваша тестовая кнопка, добавленная в "LeftContainer", была бы.

А так, добавляйте в схему SFPropertySection:
[javascript]
{
"operation": "insert",
"parentName": "CombinedModeActionButtonsCardLeftContainer",
"propertyName": "items",
"name": "TestButton",
"values": {
"itemType": Terrasoft.ViewItemType.BUTTON,
"caption": "test method сombined",
"click": {
"bindTo": "showInfo"
}
}
}
[/javascript]

Ок, допустим кнопка появилась. Только это не разместит ли кнопку в разделе? А не на карточке записи?
И как мне тогда мне по нажатию на нее получить ID записи?
Ведь с раздела то это не сделать:
[csharp]
var test = this.get("Id");
[/csharp]

Виктор,

попробуйте

[javascript]
this.get("ActiveRow");
[/javascript]

получилось! большое спасибо!

Добрый день. Пробовал отобразить результат этого кода http://academy.terrasoft.ua/documents/docs/technic/SDK/7.6.0/AddButtonT…
Но вместо основного контакта хочу кнопку ответственного.
Я так понимаю, что в функции проверки я должен написать Owner вместо PrimaryContact. Но так не работает. Кнопка есть, но не реаоирует ни затемнение ни переход.

Что я делаю не так? Подскажите пожалуйста?

Там еще пропустил в первой функции .value
var primaryId = this.get("GridData").get(activeRow).get("PrimaryContact").value;

Извиняюсь, но вопрос снят. Заработало.

Здравствуйте!
Добавил кнопку на страницу контрагента по этой статье http://academy.terrasoft.ua/documents/docs/technic/SDK/7.6.0/AddButtonT…

Теперь делаю похожую в карточке контакта - кнопка будет вызывать бизнесс-процес отправки некоторого письма на Email контакта.
Я сделал первые 5 пунктов, а вот 6) меня озадачил.
Нету для контакта страници редактирования (такой как для контрагента)

И что я должен выбирать в качестве Родительский объект? в этом случае?

попробуйте "Схема отображения карточки контакта"

Здравствуйте!
Создал кнопку которая будет запускабь бизнес-процесс UsrSendEmailToContact и передавать в него id контакта из карточки которого была нажата кнопка.
Создал два замещающих клиентских модуля
[javascript]
define("ContactSectionV2", [],
function() {
return {
// Название схемы объекта страницы редактирования.
entitySchemaName: "Contact",
// Коллекция методов модели представления страницы редактирования.
methods: {
// Метод-обработчик нажатия кнопки.
onOpenPrimaryContactClick: function() {
var activeRow = this.get("ActiveRow");
if (activeRow) {
// Определение идентификатора основного контакта.
var primaryId = this.get("GridData").get(activeRow).get("Id").value;
if (primaryId) {
// Формирование строки адреса.
var requestUrl = "https://forvatercrm.bpmonline.com/0/ServiceModel/ProcessEngineService.s…" + primaryId;
// Публикация сообщения и переход на страницу редактирования
// основного контакта.
this.sandbox.publish("PushHistoryState", {
hash: requestUrl
});
}
}
}
// Метод проверяет, заполнено ли поле [Основной контакт] страницы.

},
diff: [
// Метаданные для добавления на страницу пользовательской кнопки.
{
// Указывает на то, что выполняется операция добавления элемента на страницу.
"operation": "insert",
// Мета-имя родительского элемента управления, в который добавляется кнопка.
"parentName": "CombinedModeActionButtonsCardLeftContainer",
// Указывает на то, что кнопка добавляется в коллекцию элементов управления
// родительского элемента (мета-имя которого указано в parentName).
"propertyName": "items",
// Мета-имя добавляемой кнопки.
"name": "MainContactButton",
// Дополнительные свойства элемента.
"values": {
// Тип добавляемого элемента - кнопка.
itemType: Terrasoft.ViewItemType.BUTTON,
// Привязка заголовка кнопки к локализуемой строке схемы.
caption: {bindTo: "Resources.Strings.StartProcessOnButtonClick"},
// Привязка метода-обработчика нажатия кнопки.
click: {bindTo: "onOpenPrimaryContactClick"},
// Привязка свойства доступности кнопки.

// Настройка расположения поля.
"layout": {
"column": 1,
"row": 6,
"colSpan": 1
}
}
}
]
};
});
[/javascript]
и
[javascript]
define("ContactPageV2", [],
function() {
return {
// Название схемы объекта страницы редактирования.
entitySchemaName: "Contact",
// Коллекция методов модели представления страницы редактирования.
methods: {
// Метод-обработчик нажатия кнопки.
onOpenPrimaryContactClick: function() {
// Определение идентификатора основного контакта.
var primaryId = this.get("Id").value;
if (primaryId) {
// Формирование строки адреса.
var requestUrl = "https://forvatercrm.bpmonline.com/0/ServiceModel/ProcessEngineService.s…" + primaryId;
// Публикация сообщения и переход на страницу редактирования
// основного контакта.
this.sandbox.publish("PushHistoryState", {
hash: requestUrl
});
}
}
},
diff: [
// Метаданные для добавления на страницу нового элемента управления - пользовательской кнопки.
{
// Указывает на то, что выполняется операция добавления элемента на страницу.
"operation": "insert",
// Мета-имя родительского элемента управления, в который добавляется кнопка.
"parentName": "LeftContainer",
// Указывает на то, что кнопка добавляется в коллекцию элементов управления
// родительского элемента (мета-имя которого указано в parentName).
"propertyName": "items",
// Мета-имя добавляемой кнопки.
"name": "MainContactButton",
// Дополнительные свойства элемента.
"values": {
// Тип добавляемого элемента - кнопка.
itemType: Terrasoft.ViewItemType.BUTTON,
// Привязка заголовка кнопки к локализуемой строке схемы.
caption: {bindTo: "Resources.Strings.OpenPrimaryContactButtonCaption"},
// Привязка метода-обработчика нажатия кнопки.
click: {bindTo: "onOpenPrimaryContactClick"},
// Привязка свойства доступности кнопки.

// Настройка расположения поля.
"layout": {
"column": 1,
"row": 6,
"colSpan": 1
}
}
}
]
};
});
[/javascript]

Кнопка появилась, но процесс не запускает. В чем может быть проблема?

Николай,

Во вложении пример замещающей страницы редактирования контрагента.
Добавлена кнопка, по кнопке запускается процесс. В процесс передается Id записи.
accountpagev2.txt

Олег здравствуйте. Если делать это в схеме где ничего нет (пробовал на тестовой версии BPM online) - то ваш метод работает.
Если же пробую добавить в свою робочую схему - после нажатия на кнопку начинается вечная загрузка процесса. В чем может быть загвоздка? Причем консоль никаких ошибок не выдает...

Без деталей трудно сказать. Приведите пример вашей реализации.

Здравствуйте! Кнопку получилось создать. Но она не отображается если в карточку контакт заходить из раздела контакти. Если же зайти из раздела Контрагент (наример по ответственному) то кнопка отображается и нажатие работает. Что нужно еще добавить чтобы появилась кноака после захода из раздела контакты. Спасибо.

Странно!

Предоставьте, пожалуйста, листинг кода, который добавляет кнопку.

Здравствуйте! Вот код который содержится в "Схеме отображения карточки контакта". Там 3700 строчек кода. Поэтому высылаю только ту часть которая отвечает за новую кнопку.
[javascript]
define('ContactPageV2', ['ContactPageV2Resources', 'GeneralDetails', 'ProcessModuleUtilities'],
function(resources, GeneralDetails, ProcessModuleUtilities) {
return {
entitySchemaName: 'Contact',
details: /**SCHEMA_DETAILS*/{}/**SCHEMA_DETAILS*/,
diff: /**SCHEMA_DIFF*/[
{
"operation": "merge",
"name": "Name",
"values": {
"layout": {
"column": 4,
"row": 0,
"colSpan": 20,
"rowSpan": 1
}
}
},

{
// Указывает на то, что выполняется операция добавления элемента на страницу.
"operation": "insert",
// Мета-имя родительского элемента управления, в который добавляется кнопка.
"parentName": "LeftContainer",
// Указывает на то, что кнопка добавляется в коллекцию элементов управления
// родительского элемента (мета-имя которого указано в parentName).
"propertyName": "items",
// Мета-имя добавляемой кнопки.
"name": "MainContactButton",
// Дополнительные свойства элемента.
"values": {
// Тип добавляемого элемента - кнопка.
itemType: Terrasoft.ViewItemType.BUTTON,
// Привязка заголовка кнопки к локализуемой строке схемы.
caption: {bindTo: "Resources.Strings.StartProcessSendEmail"},
// Привязка метода-обработчика нажатия кнопки.
click: {bindTo: "procStartByClick"},
// Привязка свойства доступности кнопки.
//enabled: {bindTo: "isAccountPrimaryContactSet"},
// Настройка расположения поля.
"layout": {
"column": 1,
"row": 6,
"colSpan": 1
}
}
},
{
"operation": "move",
"name": "NotesAndFilesTab",
"parentName": "Tabs",
"propertyName": "tabs",
"index": 2
}
]/**SCHEMA_DIFF*/,
attributes: {},
methods: {
procStartByClick: function() {
var activeRowId = this.get("Id");
var args = {
sysProcessName: "Process3",
parameters: {UsrContactId: activeRowId }
};
ProcessModuleUtilities.runProcess(args.sysProcessName, args.parameters, this);
}
},
rules: {},
userCode: {}
};
});

[/javascript]

Вот так выгдядит карточка если зайти из раздела контакты:

Вот так выглядит карточка если например зайти на нее с раздела звонки

Добрый день. Проблема заключается в том, что карточка может открываться в двух режимах: separated mode и combined mode. За отображение кнопок действий (и не только) в первом режиме, отвечает карточка редактирования, за второй же - схема секции. При открытии карточки из раздела, первоначально карточка открывается в combined mode (по этой причине кнопка и отсутствует). Если же обновить страницу или перейти в карточку по ссылке - открывается separated mode.
Для исправления данного поведения необходимо добавить кнопку так же в секцию указав родительским элементом CombinedModeActionButtonsCardLeftContainer.

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