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

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

Нравится

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.

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

Добрый вечер!
Подскажите плз, как вернуть страницу к стандартному виду?
Спасибо!

Нравится

1 комментарий

Добрый вечер!
Подскажите плз, как вернуть страницу к стандартному виду?
Спасибо!

Нравится

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

Наталья, в такой ситуации вариантов может быть несколько:

1. Проимпортировать схему карточки из системы, в которой не вносилось никаких изменений (можно запросить у техподдержки, указав используемый Вами продукт и сборку, например bpm`online sales team 7.6.0.1114)$
2. Сделать откат системы до момента, когда еще не вносились никакие изменения (обратится в техподдержку, указав адрес сайта если установка on-demand);
3. Вручную поудалять созданные колонки или добавить скрытые ранее с помощью мастера разделов.

А разве не достаточно удалить созданную замещающую схему?

"Владимир Соколов" написал:

А разве не достаточно удалить созданную замещающую схему?


И навернусь полностью раздел... Проходили.

"Сенько Виктор" написал:И навернусь полностью раздел... Проходили.

если не создали страницы для разных типов, а просто модифицировали страницу стандартного раздела, то ничего навернуться не должно по идее

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

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

OpenUserTaskSenderMailing.ProcessKey = InstanceUId;
string schemaUId = "22C06297-4508-4E5D-9362-4909CF8156CB";
OpenUserTaskSenderMailing.UseCurrentActivePage  = true;
OpenUserTaskSenderMailing.PageParameters = new Dictionary string, object>();
var pageParameters = (Dictionary string, object>)OpenUserTaskSenderMailing.PageParameters;
pageParameters.Add("schemaUId", schemaUId);

return true;

Нравится

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

Вот пример открытия такого окна из БП:
from lookup
Скрипт в начале (фрагмент):

OpenCardTypePageUserTask.ProcessKey = InstanceUId;
OpenCardTypePageUserTask.PageParameters = new Dictionary <string, object>();
var pageParameters = (Dictionary <string, object>)OpenCardTypePageUserTask.PageParameters;
pageParameters.Add("schemaUId", "F1E86D1A-DB06-4D92-859B-81B2E90FC5FB");
pageParameters.Add("useHierarchy", false);
pageParameters.Add("customClosedEvent", "LookupClosed");
pageParameters.Add("multiSelectMode", false);
if (OldCardTypeId != Guid.Empty) {
	var filters = new Collection<Dictionary<string, object>>();
	filters.Add(new Dictionary<string, object> { 
		{"comparisonType", FilterComparisonType.Equal}, 
		{"leftExpressionColumnPath", "CardType.Id"},
		{"useDisplayValue", false}, 
		{"rightExpressionParameterValues", new object[] {OldCardTypeId}}});                                                              
	pageParameters.Remove("LookupFilters");
	pageParameters.Add("LookupFilters", filters);
}
 
return true;

У промежуточного события сообщение «LookupClosed».

Скрипт в конце:

var selectedStatusesIds = (Dictionary <string, object>)OpenCardTypePageUserTask.GetSelectedValues(UserConnection); 
if (selectedStatusesIds.Count == 0) {
	return false;	
}
Inner_CardCategory = new Guid(selectedStatusesIds.First().Key);
return true;

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

pageParameters.Add("useHierarchy", false);
pageParameters.Add("multiSelectMode", false);
pageParameters.Add("customClosedEvent", "LookupClosed");

Вот касательно последнего параметра, customClosedEvent что это? Как мне узнать правильное название необходимого мне значения? Я смотрела у нас в конфигурациях разные справочники открываются и для каждого справочника значение customClosedEvent свое иои LookupClosed это стандарное значение?. Опять же фильтр мне не нужен, мне нужны все значения справочника (можно его не использовать?)

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

Второй — возможность выбора в окне нескольких записей за раз.

Третий — то событие, которое потом будете ловить. На скриншоте место лова — кружочек. Название события можно придумать любое латинскими буквами без пробелов, главное, чтобы значение в скрипте и «сообщение» у кружочка были одинаковыми. Это сделано, чтобы в разных частях процесса можно было показывать несколько окон и при их закрытии процесс шёл из того места, которого надо.

Ну вот вроде, все как у вас, но не работает..

Подготовка параметров MassMailingScriptTask
1

OpenUserTaskSenderMailing.ProcessKey = InstanceUId;
OpenUserTaskSenderMailing.UseCurrentActivePage  = true;
OpenUserTaskSenderMailing.PageParameters = new Dictionary <string, object>();
var pageParameters = (Dictionary <string, object>)OpenUserTaskSenderMailing.PageParameters;
pageParameters.Add("schemaUId", "22C06297-4508-4E5D-9362-4909CF8156CB");
pageParameters.Add("customClosedEvent", "LookupClosed");
return true;

Работа с полученными данными MassMailingScriptTask

var manager = UserConnection.GetSchemaManager("EntitySchemaManager") as EntitySchemaManager;
SetMassMailingStatus(MassMailingId, new Guid("ED5F422E-F46B-1410-6590-1C6F65E24BE8"), 
	manager, this.UId, "StartDateTime");//В работе
 
//GetCurrentUserEmail();
var values = (Dictionary <string, object>)OpenUserTaskSenderMailing.GetSelectedValues(UserConnection);
 if (values.Count == 0) {
	return true;
}
 
var EmailFromId = new Guid(values.First().Key);
 
//var EmailFromId = new Guid(EmailFromId);
string EmailFrom = "";
Select select = new Select(UserConnection)
.Column("Name")
.From("SenderMailing")
.Where("Id").IsEqual(EmailFromId.ToString()) as Select;
 
PrepareMailSubjectAndBody(manager);
 
var targetEntitySchemaQuery = new EntitySchemaQuery(manager, "MassMailingContact");
var idMailing = targetEntitySchemaQuery.AddColumn("Id").Name;
var EmailOfMailing = targetEntitySchemaQuery.AddColumn("EmailAddress").Name;
var idContactOfMailing = targetEntitySchemaQuery.AddColumn("Contact.Id").Name;
var contactNameOfMailing = targetEntitySchemaQuery.AddColumn("Contact.Name").Name;
var accountIdOfMailing = targetEntitySchemaQuery.AddColumn("Account.Id").Name;
var accountNameOfMailing = targetEntitySchemaQuery.AddColumn("Account.Name").Name;
var ownerOfMailing = targetEntitySchemaQuery.AddColumn("MassMailing.Owner.Id").Name;
string campaignColName = targetEntitySchemaQuery.AddColumn("MassMailing.Campaign.Id").Name;
 
targetEntitySchemaQuery.Filters.Add(targetEntitySchemaQuery.CreateFilterWithParameters(FilterComparisonType.Equal, "MassMailing.Id", MassMailingId));
var listFilter = new EntitySchemaQueryFilterCollection(targetEntitySchemaQuery, LogicalOperationStrict.Or);
listFilter.Add(targetEntitySchemaQuery.CreateIsNullFilter("SendStatus"));
listFilter.Add(targetEntitySchemaQuery.CreateFilterWithParameters(FilterComparisonType.NotEqual, "SendStatus", new Guid("8074FFC0-6107-E011-A646-16D83CAB0980")));
targetEntitySchemaQuery.Filters.Add(listFilter);
var mailingCollection = targetEntitySchemaQuery.GetEntityCollection(UserConnection);
 
var macrosDictionary = new Dictionary<string,string>();
var activityRecipients = string.Empty;
var processUserTaskManager = UserConnection.ProcessUserTaskSchemaManager;
var userTaskSchema = (ProcessUserTaskSchema)processUserTaskManager.FindInstanceByName("SendEmailUserTask");
 
MacrosHelper.UserConnection = UserConnection;
 
foreach (var mailingMacros in mailingCollection) {
	Guid campaignId = mailingMacros.GetTypedColumnValue<Guid>(campaignColName);
	Guid targetId = mailingMacros.GetTypedColumnValue<Guid>(idMailing);
	string recepient = mailingMacros.GetTypedColumnValue<string>(EmailOfMailing);
	Guid contactId = mailingMacros.GetTypedColumnValue<Guid>(idContactOfMailing);
	string contactName = mailingMacros.GetTypedColumnValue<string>(contactNameOfMailing);
	Guid accountId = mailingMacros.GetTypedColumnValue<Guid>(accountIdOfMailing);
	string accountName = mailingMacros.GetTypedColumnValue<string>(accountNameOfMailing);
	Guid ownerId = mailingMacros.GetTypedColumnValue<Guid>(ownerOfMailing);
 
	string htmlBody = MacrosHelper.ProcessText(MailBody, UserConnection.CurrentUser.ContactId, 
		contactId, accountId);	
	if (accountId != Guid.Empty) {
		activityRecipients = GetActivityResipients(accountName, recepient);
	} else if (contactId != Guid.Empty) {
		activityRecipients = GetActivityResipients(contactName, recepient);
	}	
	var activitySchema = manager.GetInstanceByName("Activity");
	var activity = activitySchema.CreateEntity(UserConnection);
	activity.SetDefColumnValues();
	activity.SetColumnValue("TypeId", new Guid("E2831DEC-CFC0-DF11-B00F-001D60E938C6")); // Email
	activity.SetColumnValue("Sender", EmailFrom);
	activity.SetColumnValue("Recepient", activityRecipients);
	activity.SetColumnValue("Title", MailSubject);
	activity.SetColumnValue("HtmlBody", htmlBody);
	activity.SetColumnValue("StartDate", DateTime.UtcNow);
	activity.SetColumnValue("DueDate", DateTime.UtcNow);
	activity.SetColumnValue("OwnerId", ownerId);
	activity.SetColumnValue("AuthorId", UserConnection.CurrentUser.ContactId);
	activity.SetColumnValue("StatusId", new Guid("4BDBB88F-58E6-DF11-971B-001D60E938C6")); // Finished
	activity.SetColumnValue("ResultId", new Guid("FB7D22DA-F36B-1410-E19F-1C6F65E9F927")); // Done
	activity.SetColumnValue("ShowInScheduler", false);
 
	if (campaignId != Guid.Empty)
	{
		activity.SetColumnValue("CampaignId", campaignId);
	}
 
	if (accountId != Guid.Empty) {
		activity.SetColumnValue("AccountId", accountId);
	} else if (contactId != Guid.Empty) {
		activity.SetColumnValue("ContactId", contactId);
	}
	activity.SetColumnValue("MassMailingId", MassMailingId);
	activity.Save();
 
	CopyAttachmentsToActivity(MassMailingId, activity.PrimaryColumnValue);		
 
	var userTask = (SendEmailUserTask)userTaskSchema.CreateProcessUserTask(UserConnection);
	userTask.ActivityId = activity.PrimaryColumnValue;
	userTask.Execute(context);
	ErrorCode = userTask.SendEmailStatus;
	SetMassMailingContactSendStatus(ErrorCode, targetId, manager);
}
 
SetMassMailingStatus(MassMailingId, new Guid("FF7F4232-F46B-1410-6690-1C6F65E24BE8"), manager, 
	Guid.Empty, "EndDateTime");//Завершена
 
return true;

Сложно сказать. Может, причина в том, что запущен один процесс из другого. Попробуйте для пробы запустить сразу внутренний, вдруг заработает.

Ещё написали слово «джоб». Если оно действительно запускается по кварцу или иному планировщику, то в таком БП не факт, что вообще можно отображать что-то на экране. Пользователя с браузером может и не быть. Система не знает, кому окно показывать.

Ну я может не правильно выразилась... На прикрепленных файлах(см.ниже) ВЕСЬ процесс запускается по действию, проходит разные проверки и в конце в последнем коде (выделила желтым снимок_2) при определенном параметре вызывается процесс (выделила синим снимок_3) который я описывала изначально

Намудренно конечно, но так было изначально от разработчиков... Вот собственно в таком МЕГА процессе есть возможность открытия моего справочника?

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

окей, спасибо, буду тогда искать другие пути реализации

Есть идея, может получится вызвать справочник в процессе где он отобразится, и отловить результат промежуточным сообщением, а потом уже это промежуточное сообщение передавать в необходимый мне процесс (код)?

Нет. Так тоже не выйдет. У Вас в тот момент вообще может не быть пользователя с браузером.

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

Добрый день!

Подскажите, каков код для добавления напоминания пользователю, а также, какие поля за что отвечают.

Насколько я понял, то за уведомления отвечает таблица "Reminding"...

Спасибо!

Нравится

4 комментария

Обычно сообщения в виде жёлтой плашки вверху окна выводятся кодом вроде:

Page.BaseMessagePanel.AddMessage(WarningMessageCaption, messagePanelMessage, MessageType.Warning);	

При этом текст сообщения лучше брать из локализируемой строки (справа в дереве в дизайнере БП).

Если же нужно много текста, то, возможно, стоит задизайнить отдельную карточку с текстовым полем и кнопкой ОК и показывать её.

Александр, а существует ли такой же код, только для использования в задании-сценарии (блок с C# кодом) в бизнес-процессе? Проблема в том, что это описание добавления напоминания я выполняю не в процессе модуля формы, а в отдельном простейшем БП, потому у меня нету "Page"...

Чтобы не было недоразумений, уточню следующим скрином, какие напоминания мне нужно добавлять:
Напоминания

А, так Вы об этих напоминаниях, теперь понял.

Такие создаются путём добавления новой записи в таблицу, дальше система сама их сама показывает.

В таблицу можно добавить при помощи класса Entity:

	var remindingSchema = UserConnection.EntitySchemaManager.GetInstanceByName("Reminding");
	var reminding = remindingSchema.CreateEntity(UserConnection);
	reminding.SetDefColumnValues();
	reminding.SetColumnValue("Id", Guid.NewGuid());
	reminding.SetColumnValue("AuthorId", UserConnection.CurrentUser.ContactId);
	reminding.SetColumnValue("ContactId", contactId);
	reminding.SetColumnValue("SourceId", new Guid("a66d08e1-2e2d-e011-ac0a-00155d043205"));
	reminding.SetColumnValue("RemindTime", UserConnection.CurrentUser.GetCurrentDateTime());
	reminding.SetColumnValue("Description", string.Format(RemindingDownMask.ToString(), ServiceDataUserTask.ResultEntity.PrimaryDisplayColumnValue));
	reminding.SetColumnValue("SubjectId", IncidentReadDataUserTask.ResultEntity.GetTypedColumnValue<Guid>("Id"));
	reminding.SetColumnValue("SubjectCaption", IncidentReadDataUserTask.ResultEntity.GetTypedColumnValue<string>("Number"));
	reminding.SetColumnValue("SysEntitySchemaId", new Guid("4a5122f9-493f-46a8-b757-fdddbb71a847"));
	reminding.Save();

Или аналогично при помощи более низкоуровневого Insert:

Insert insert = new Insert(UserConnection)
	.Into("Reminding")
	.Set("Id", Column.Parameter(Guid.NewGuid()))
	.Set("CreatedOn", Column.Parameter(DateTime.UtcNow))
	.Set("CreatedById", Column.Parameter(UserConnection.CurrentUser.ContactId))
	.Set("ModifiedOn", Column.Parameter(DateTime.UtcNow))
	.Set("ModifiedById", Column.Parameter(UserConnection.CurrentUser.ContactId))
	.Set("SubjectId", Column.Parameter(ContactConsts.SupervisorUId))
	.Set("SourceId", Column.Parameter(RemindingConst.AuthorSourceTypeUId))
	.Set("ContactId", Column.Parameter(UserConnection.CurrentUser.ContactId))
	.Set("RemindTime", Column.Parameter(DateTime.UtcNow))
	.Set("AuthorId", Column.Parameter(ContactConsts.SupervisorUId))
	.Set("Description", Column.Parameter(description))
	.Set("SysEntitySchemaId", Column.Parameter(UserConnection.EntitySchemaManager.GetInstanceByName("Contact").UId));
insert.Execute();

Примеры из разных мест, поиском можно найти ещё.

Поле SysEntitySchemaId задаёт Id нужной таблицы раздела, SubjectId — Id записи в нём, о которой напоминаем, SourceId — одна из 2 констант (либо «автору», либо «ответственнному»), остальные поля понятны из названия.

Александр, низкий поклон!!! Спасибо огромное!

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

Добрый день

Создала новый раздел по инструкции .
Сделала новую запись в этом разделе. Теперь: кнопки Добавить, Удалить и Копировать - работают. А при нажатии на кнопку Изменить, система выдает следующую ошибку:

Нравится

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

Татьяна, если Вы создали раздел по инструкции и что-то не работает, то причины могут быть такими:

  • Либо это неправильная инструкция.
  • Либо Вы что-то по ней сделали не так или пропустили какой-то шаг.

К сожалению, без дополнительной информации сложно сказать больше.

Можете попробовать самостоятельно провести отладку, чтобы понять, в чём дело.

Можно выслать мне корректную инструкцию по созданию раздела или видео-материал ?

О создании раздела есть здесь, со стр. 157.

Сделала еще раз по этой инструкции. Опять кнопку Изменить выдает ту же ошибку с именем параметра key. В чем ее причина, не подскажете?

Из всей инструкции у меня не получилось сделать Основную отображаемую колонку объекта. - Система просто ничего не выдавала для выбора.

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

#5 TatianaM 26 ноября 2015 – 14:34
Из всей инструкции у меня не получилось сделать Основную отображаемую колонку объекта. - Система просто ничего не выдавала для выбора.

Почему это произошло?

Кстати, беру объект активность, где указана осн.отображаемая колонка - Заголовок. Нажимаю в этом поле на кнопку выбора - система не предлагает к выбору Заголовок. ВОпрос- каким образом заголовок мог оказаться в этом поле?

Возможно, в этом Вашем новом разделе нет подходящего текстового поля.

Вот еще момент:

при создании основного объекта в инструкции написано:
"
После выбора родительского элемента в структуру объекта будут добавлены
системные колонки, которые содержат информацию, необходимую для
идентификации объекта системой: “Id”, “Создано”, “Создал”, “Изменено”,
“Изменил”.
"

так вот, я род.элемент указала "Базовый элемент" (как в инструкции), после чего системные колонки не добавились. Почему ? Может быть, в этом причина?

#10 TatianaM 26 ноября 2015 – 15:15
Вот еще момент:

при создании основного объекта в инструкции написано:
"
После выбора родительского элемента в структуру объекта будут добавлены
системные колонки, которые содержат информацию, необходимую для
идентификации объекта системой: “Id”, “Создано”, “Создал”, “Изменено”,
“Изменил”.
"

так вот, я род.элемент указала "Базовый элемент" (как в инструкции), после чего системные колонки не добавились. Почему ? Может быть, в этом причина?

// Хотя в объекте Активность в структуре тоже не отображаются колонки “Id”, “Создано”, “Создал”, “Изменено”, “Изменил”.

"Зверев Александр" написал:

Возможно, в этом Вашем новом разделе нет подходящего текстового поля.


В страница карточки записи есть многострочное поле, в объекте есть поле с типом Строка неогр.длины.

да!!!все, надо было тип изменить. все получилось

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

Добрый день
Я сделала новый раздел HELP. При этом, в рук-ве по настройке не нашла, как добавить еще возможность фильтрации по периоду. Помогите, пожалуйста. Заранее спасибо.

Сделала так:

А хотелось бы еще и период вывести, как, напр., в разделе Активность:

Нравится

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

Это делается правкой страницы раздела и добавлением дополнительной логики в её БП.

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

Спасибо, поняла.

Добрый день
Слева у меня сделана возможность выбирать период. Но почему реестр записей не изменяется при выборе определенного периода? У меня записи в реестре содержат колонки "Дата начала" и "Дата завершения", как/где эти даты учитываются , если выбран период? Если проводить аналогию с активностями - где именно (в каком скрипте) это учитывается?

В разделе активностей оно учитывается в функции BasePrepeareFilters. Вы можете сделать аналогично.

А в разделе Инциденты оно где учитывается, в какой функции ?

А в разделе Инциденты оно где учитывается, в какой функции ?

А в разделе Инциденты оно где учитывается, в какой функции ?

Вы можете открыть процесс этого раздела и посмотреть. Это несложно.

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

Не работают свойства Enabled и Visible для действий в комбинированном режиме. Версия 7.6

Пример реализации, который работал в 7.5, но не работает в 7.6

          onEntityInitialized: function() {
                this.set("isOutsideSupply", true);
                this.callParent(arguments);
            },
            getActions: function() {
                var actionMenuItems = this.callParent(arguments);
                actionMenuItems.addItem(this.getActionsMenuItem({
                    "Caption": "Спецификация Teleton",
                    "Tag": "specificationTeleton",
                    "Visible": {"bindTo": "isOutsideSupply"}
                }));
                return actionMenuItems;
            },

            initCardActionHandler: function() {
                this.callParent(arguments);
                var propertyNames = [
                    "isOutsideSupply, isInsideSupply", "SxAmountCaption"
                ];
                this.Terrasoft.each(propertyNames, function(propertyName) {
                    this.on("change:" + propertyName, function(model, value) {
                        this.sandbox.publish("CardChanged", {
                            key: propertyName,
                            value: value
                        }, [this.sandbox.id]);
                    }, this);
                }, this);
            },

Также пробовал биндить на метод. Результат тот же.

Нравится

1 комментарий

На сколько я могу судить, код вполне работоспособен на версии 7.6, в зависимости от того, конечно, какую задачу вы им хотите решить.
Функции initCardActionHandler и onEntityInitialized это функции BasePageV2, следовательно переопределяете их вы в схеме страницы.

Что вы делаете:
1. Объявляете свойство, (без разницы, где вы его на странице и в каком методе будете менять, я для теста буду его менять по нажатию кнопки).
2. Добавляете Action "Спецификация Teleton" на страницу и биндите его видимость на свойство.
3. Публикуете сообщение для схемы секции, которое будет срабатывать по изменению вашего свойства.

Посмотрел ваш код на версии 7.6.0.1578
Добавил его на схему страницы контакта, плюс метод который будет менять значение свойства:

methods: {
	    testClick: function() {
	        this.set("isOutsideSupply", true);
	    },
 
	    onEntityInitialized: function() {
                this.set("isOutsideSupply", false);
                this.callParent(arguments);
            },
            getActions: function() {
                var actionMenuItems = this.callParent(arguments);
                actionMenuItems.addItem(this.getActionsMenuItem({
                    "Caption": "Спецификация Teleton",
                    "Tag": "specificationTeleton",
                    "Visible": {"bindTo": "isOutsideSupply"}
                }));
                return actionMenuItems;
            },
 
            initCardActionHandler: function() {
                this.callParent(arguments);
                var propertyNames = [
                    "isOutsideSupply"
                ];
                this.Terrasoft.each(propertyNames, function(propertyName) {
                    this.on("change:" + propertyName, function(model, value) {
                        this.sandbox.publish("CardChanged", {
                            key: propertyName,
                            value: value
                        }, [this.sandbox.id]);
                    }, this);
                }, this);
            },
},

Добавил кнопку которая будем менять значение:

{
		"operation": "insert",
		"name": "Test",
		"parentName": "Header",
		"propertyName": "items",
		"values": {
			"itemType": Terrasoft.ViewItemType.BUTTON,
			"caption": "Test",
			"click": {"bindTo": "testClick"},
			"layout": {"column": 0, "row": 4, "colSpan": 12}
		}
},

При загрузке страницы вижу что экшена в списке нет, т.к. по умолчанию я прописал ему "this.set("isOutsideSupply", false);"
После же нажатия кнопки он появляется. Бинд на видимость работает.

Так же, в то же время в результате публикации сообщения CardChanged, срабатывает прослушка сообщения в BaseSectionV2:

Абсолютно все, что написано в вашем коде, делает то, что и должно делать.

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

Здравствуйте. Подскажите пожалуйста как отключить режим COMBINED на карточке. штоб была видна только карточка без реестра.
Фото:

Нравится

3 комментария

Имеете ввиду убрать вертикальный реестр сбоку страницы редактирования?

Как вариант можно переопределить showFolderTree на BaseSectionV2,

/**
                                      * Открывает модуль списка групп.
                                      * @protected
                                      * @virtual
                                      * @param {Object} args Параментры открытия модуля.
                                      */
                                      showFolderTree: function(args) {
                                               var extendedFilterModuleId = this.getExtendedFilterEditModuleId();
                                               if (this.get("IsFolderManagerActionsContainerVisible")) {
                                                        return;
                                               }
                                               if (args && args.activeFolderId) {
                                                        this.set("activeFolderId", args.activeFolderId);
                                               }
                                               this.set("IsFolderManagerActionsContainerVisible", true);
                                               this.onShowAllFoldersButtonClick();
                                               this.sandbox.unloadModule(extendedFilterModuleId, "ExtendedFiltersContainer");
                                               this.sandbox.loadModule("FolderManager", {
                                                        renderTo: "FoldersContainer",
                                                        id: this.getFolderManagerModuleId()
                                               });
                                      },

Чтобы он не срабатывал

Этот метод срабатывает на действия показать группы. Мне же нужно убрать вертикальный реестр сбоку страницы редактирования. Чтобы страница открывалась без этого реестра.

Посмотрите все в том же BaseSectionV2, есть метод ответственный за нажатие на кнопку "закрыть список" в комбинированном режиме:

onCloseSectionButtonClick: function() {
   this.hideSection();
   this.removeSectionHistoryState();
   this.updateCardHeader();
   this.updateSectionHeader();
},

Попробуйте достучатся до него, через наследника (вашу секцию раздела) из метода init страницы редактирования, в крайнем случае, в вашем вооружении всегда есть "сообщения", вы можете генерировать сообщение в форме редактирования, а ловить сообщение и вызывать этот метод в замещенной схеме, или в вашей схеме секции.

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

вот код который определяет страницу:

define("MyPage1", ["MyPage1Resources"],
        function(Resources) {
        return {
                attributes: {
                        //Гражданство. Выбор из справочника страны.
                        "Country": {
                                caption: "Гражданство",
                                dataValueType: Terrasoft.DataValueType.LOOKUP,
                                referenceSchemaName: "Country",
                                type: Terrasoft.ViewModelColumnType.VIRTUAL_COLUMN
                        },
                        //Пол. Выбор из справочника. (Муж. Жен.)
                        "Gender": {
                                caption: "Пол",
                                dataValueType: Terrasoft.DataValueType.LOOKUP,
                                referenceSchemaName: "Gender",
                                type: Terrasoft.ViewModelColumnType.VIRTUAL_COLUMN
                        },
                        //ИНН. Числовое значение.
                        "INN": {
                                caption: "ИНН",
                                dataValueType: Terrasoft.DataValueType.TEXT
                        },
                        //Статус клиента. Доступен выбор из списка (резидент, нерезидент). По умолчанию значение поля «Резидент».
                        "IsStatusClients": {
                                caption: "Статус клиента",
                                dataValueType: Terrasoft.DataValueType.TEXT
                        },
                        //Цель использования кредитных средств. Текстовое значение
                        "Objective": {
                                caption: "Цель использования кредитных средств",
                                dataValueType: Terrasoft.DataValueType.TEXT
                        }
                },
                methods: {
                        // Обработчик кнопки [Следующий].
                        onNextButtonClick: function() {
                                this.showInformationDialog("Метод кнопки 'Следующий'");
                        },
                        // Выводит заголовок страницы.
                        initHeader: function() {
                                var entityCaption = "Данные о заемщике";
                                this.sandbox.publish("InitDataViews", {caption: entityCaption});
                        }
                },
                details: /**SCHEMA_DETAILS*/{
                                // Деталь средства связи контакта.
                                ContactCommunication: {
                                        schemaName: "ContactCommunicationDetailV2",
                                        masterColumn: "Id",
                                        detailColumn: "Contact"
                                }
                }/**SCHEMA_DETAILS*/,
                diff: [{
                        // Метаданные для добавления поля поля [Гражданство].
                                "operation": "insert",
                                "parentName": "Header",
                                "propertyName": "items",
                                "name": "Country",
                                "values": {
                                        "bindTo": "Country",
                                        "layout": { "column": 0, "row": 1, "colSpan": 12 },
                                        "caption": {
                                                "bindTo": "Resources.Strings.CountryFieldCaption"
                                        },
                                        // Вид данных, содержащихся в поле - простые текстовые данные.
                                        "contentType": Terrasoft.ContentType.LOOKUP
                                }
                        },
                        {
                        // Метаданные для добавления поля  [Пол].
                                "operation": "insert",
                                "parentName": "Header",
                                "propertyName": "items",
                                "name": "Gender",
                                "values": {
                                        "bindTo": "Gender",
                                        "layout": { "column": 0, "row": 3, "colSpan": 12 },
                                        "caption": {
                                                "bindTo": "Resources.Strings.GenderFieldCaption"
                                        },
                                        // Вид данных, содержащихся в поле - простые текстовые данные.
                                        "contentType": Terrasoft.ContentType.LOOKUP
                                }
                        },
                        {
                        // Метаданные для добавления поля [ИНН].
                                "operation": "insert",
                                "parentName": "Header",
                                "propertyName": "items",
                                "name": "INN",
                                "values": {
                                        "bindTo": "INN",
                                        "layout": { "column": 0, "row": 5, "colSpan": 12 },
                                        "caption": {
                                                "bindTo": "Resources.Strings.INNFieldCaption"
                                        },
                                        // Вид данных, содержащихся в поле - простые текстовые данные.
                                        "contentType": Terrasoft.ContentType.TEXT
                                }
                        },
                        {
                        // Метаданные для добавления поля [Статус клиента].
                                "operation": "insert",
                                "parentName": "Header",
                                "propertyName": "items",
                                "name": "IsStatusClients",
                                "values": {
                                        "bindTo": "IsStatusClients",
                                        "layout": { "column": 0, "row": 7, "colSpan": 12 },
                                        "caption": {
                                                "bindTo": "Resources.Strings.IsStatusClientsFieldCaption"
                                        },
                                        // Вид данных, содержащихся в поле - простые текстовые данные.
                                        "contentType": Terrasoft.ContentType.TEXT
                                }
                        },
                        {
                        // Метаданные для добавления поля [Цель использования кредитных средств].
                                "operation": "insert",
                                "parentName": "Header",
                                "propertyName": "items",
                                "name": "Objective",
                                "values": {
                                        "bindTo": "Objective",
                                        "layout": { "column": 0, "row": 9, "colSpan": 12 },
                                        "caption": {
                                                "bindTo": "Resources.Strings.ObjectiveFieldCaption"
                                        },
                                        // Вид данных, содержащихся в поле - простые текстовые данные.
                                        "contentType": Terrasoft.ContentType.TEXT
                                }
                        },
                        {
                                // Метаданные для добавления кнопки [Следующий]
                                "operation": "insert",
                                "parentName": "LeftContainer",
                                "propertyName": "items",
                                "name": "NextButton",
                                "values": {
                                        caption: {bindTo: "Resources.Strings.NextButtonCaption"},
                                        itemType: Terrasoft.ViewItemType.BUTTON,
                                        classes: {textClass: "actions-button-margin-right"},
                                        style: Terrasoft.controls.ButtonEnums.style.GREEN,
                                        click: {bindTo: "onNextButtonClick"}
                                }
                        },
                        /* *** Добавление вкладок. Первая вкладка. *** */
                        // вкладка
                        {
                                "operation": "insert",
                                "name": "ContactCommunicationTab",
                                "parentName": "Tabs",
                                "propertyName": "tabs",
                                "values": {
                                        caption: {bindTo: "Resources.Strings.SecondTabCaption"},
                                        items: []
                                }
                        },
                        {
                                "operation": "insert",
                                "parentName": "ContactCommunicationTab",
                                "propertyName": "items",
                                "name": "ContactCommunication",
                                "values": {
                                        itemType: Terrasoft.ViewItemType.DETAIL
                                }
                        }
                        ]
                       
                };
});

Продукт:bmponline bank sales Версия 7.5.0.1275

Нравится

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

Здравствуйте, Эмир!

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

Здравствуйте, Алексей создается страница о Заемщике при переходе далее срабатывает процесс который вызывает пред настроенную страницу о Заемщике там отображается данные с возможностью редактирование сохранение

для caption:
в место:

 "caption": {"bindTo": "Resources.Strings.GenderFieldCaption"},

поставил просто:

 "caption": "Пол",

и теперь отображается не знаю это правильно или нет.
А вот насчет lookup все еще не разобрался при нажатии на лупу в консоли выводится ошибка:

 message: TypeError: this.entitySchema is null 

из этой ошибку понимаю что данные пустые, и надо доставать эти данные и заполнить entitySchema никто не сталкивался с такой проблемой, если да поделитесь инфой пж

Здравствуйте, Эмир!
У меня Ваш код работает. Только caption не работают, возможно не указано значение поля в LocalizableStrings. Справочники открываются. Даже если не правильно указан referenceSchemaName открывается пустое окно справочника, но Ваша ошибка не появляется

Здравствуйте, Olha спасибо за ответ, но не знаю как у вас заработало, у меня заработал только после:
1.Создал объект DataBorrower где для lookup поля указал на соответствующую справочник:

2.Далее указал этот объект:

return {
		entitySchemaName: "DataBorrower",
		attributes: {
			//Гражданство. Выбор из справочника страны.
			"Country": {
				caption: "Гражданство",
				dataValueType: Terrasoft.DataValueType.LOOKUP,
				referenceSchemaName: "Country",
				type: Terrasoft.ViewModelColumnType.VIRTUAL_COLUMN
			},
//..
 
		diff: [{
			// Метаданные для добавления поля поля [Гражданство].
				"operation": "insert",
				"name": "Country",
				"values": {
					"bindTo": "Country",
					"layout": { "column": 0, "row": 1, "colSpan": 12 },
					"caption": "Гражданство",//{
						//"bindTo": "Resources.Strings.CountryCaption"
					//},
					// Вид данных, содержащихся в поле - простые текстовые данные.
					"textSize": 0,
					"contentType": 5,
					"labelConfig": {
						"visible": true
					},
					"enabled": true
				},
				"parentName": "Header",
				"propertyName": "items",
				"index": 1
			},
//....
Показать все комментарии