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

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

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

Нравится

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');
в схеме страницы редактирования (как было укзано в первой ссылке).

И передать параметрами в бизнес процесс:

var processArgs = {
    sysProcessName: 'SetPaymentDate',
    parameters: {
        ContactId: contactId
    }
};
this.runProcess(processArgs.sysProcessName, processArgs.parameters, this);

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

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

Но!

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

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

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

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

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

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

В Схема страницы редактирования раздела "Объект недвижимости" с типом "Земля" добавил в methods вот такой код:

                // Метод, проверяющий на какой стадии находится заказ.
                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;
				}	

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

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

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

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;
	}
},

Результат:

Так же кнопку можно добавить не в "действия" а просто, как обычный элемент, в нужную вам часть страницы, к примеру в контейнер с остальными кнопками, описав ее аналогично другим элементам, в секции diff:

{
	"operation": "insert",
		"parentName": "LeftContainer",
		"propertyName": "items",
		"name": "TestButton",
		"values": {
			"itemType": Terrasoft.ViewItemType.BUTTON,
			"caption": "test method 2",
			"click": {"bindTo": "showInfo"}
		}
}

Результат:

Ничего не понимаю
Добавил:

{
        "operation": "insert",
                "parentName": "LeftContainer",
                "propertyName": "items",
                "name": "TestButton",
                "values": {
                        "itemType": Terrasoft.ViewItemType.BUTTON,
                        "caption": "test method 2",
                        "click": {"bindTo": "showInfo"}
                }
},	

в методы:

			showInfo: function() {
			                var test = this.get("Id");
			                this.showInformationDialog(test);
			        }	

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

вот полный код:

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: {}
	};
});

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

Что вы имели в виду под "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 в моём случае?

Я так понял, ваш последний комментарий, о попытках создания кнопки, следующим образом:

{
        "operation": "insert",
                "parentName": "LeftContainer",
                "propertyName": "items",
                "name": "TestButton",
                "values": {
                        "itemType": Terrasoft.ViewItemType.BUTTON,
                        "caption": "test method 2",
                        "click": {"bindTo": "showInfo"}
                }
},     

От сюда вопрос: в какой схеме вы добавляете код?
Если в схеме редактирования страницы, то у нее "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"

{
        "operation": "insert",
                "parentName": "LeftContainer",
                "propertyName": "items",
                "name": "TestButton",
                "values": {
                        "itemType": Terrasoft.ViewItemType.BUTTON,
                        "caption": "test method 2",
                        "click": {"bindTo": "showInfo"}
                }
}

Если все условия совпадают, и у вас по какой-то причине кнопка не появляется, обратитесь еще раз в поддержку, и попросите пусть они это сделают за вас, а далее уже будете делать по примеру.

BaseModulePageV2 стандартна, и ее изменить нелязя.
Я так понимаю мне надо создать для нее замещающую схему? И в ней уже внести данный блок. Верно?
Или же надо создать замещающую схему для BasePageV2? В ней как раз содержатся кнопки сохранить и т.д
в BasePageV2 уже есть:

				{
					"operation": "insert",
					"name": "LeftContainer",
					"parentName": "ActionButtonsContainer",
					"propertyName": "items",
					"values": {
						"itemType": Terrasoft.ViewItemType.CONTAINER,
						"wrapClass": ["left-container-wrapClass"],
						"items": []
					}
				},

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

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

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

А так, добавляйте в схему SFPropertySection:

{
	"operation": "insert",
	"parentName": "CombinedModeActionButtonsCardLeftContainer",
	"propertyName": "items",
	"name": "TestButton",
	"values": {
		"itemType": Terrasoft.ViewItemType.BUTTON,
		"caption": "test method сombined",
		"click": {
			"bindTo": "showInfo"
		}
	}
}

Ок, допустим кнопка появилась. Только это не разместит ли кнопку в разделе? А не на карточке записи?
И как мне тогда мне по нажатию на нее получить ID записи?
Ведь с раздела то это не сделать:

var test = this.get("Id");

Виктор,

попробуйте

this.get("ActiveRow");

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

Добрый день. Пробовал отобразить результат этого кода 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 контакта из карточки которого была нажата кнопка.
Создал два замещающих клиентских модуля

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.svc/UsrSendEmailToContact/Execute?ContactId=" + 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
                        }
                    }
                }
            ]
        };
    });

и

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.svc/UsrSendEmailToContact/Execute?ContactId=" + 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
                        }
                    }
                }
            ]
        };
    });

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

Николай,

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

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

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

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

Странно!

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

Здравствуйте! Вот код который содержится в "Схеме отображения карточки контакта". Там 3700 строчек кода. Поэтому высылаю только ту часть которая отвечает за новую кнопку.

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: {}
	};
});

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

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

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

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