Добавление бизнес процесса в кнопку "Действие" раздела

Здравствуйте. Был составлен бизнес процесс визирование документа по аналогии с визированием заказа. Добавлен объект и составлены два БП (как и у оригинала). Однако, сам БП "визирование документа" в библиотеке не присутствует, хотя он есть в конфигурации. Как его туда добавить и нужно ли вообще это делать? И как добавить этот процесс в кнопку "действие", чтобы визирование работало?
Благодарю

Нравится

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

Добрый день. Обратите внимание,что в OrderPageV2 еще есть следующий код

	getActions: function() {
						var actionMenuItems = this.callParent(arguments);
						actionMenuItems.add("SendToVisaSeparator", this.getActionsMenuItem({
							Type: "Terrasoft.MenuSeparator",
							Caption: ""
						}));
						actionMenuItems.add("SendToVisa", this.getActionsMenuItem({
							"Caption": VisaHelper.resources.localizableStrings.SendToVisaCaption,
							"Tag": VisaHelper.SendToVisaMenuItem.methodName,
							"Enabled": {"bindTo": "canEntityBeOperated"}
						}));
						return actionMenuItems;
					},
 
					/**
					 * Действие "Отправить на визирование"
					 */
					sendToVisa: VisaHelper.SendToVisaMethod,

а также в OrderSectionV2

define("OrderSectionV2", ["ProductSalesUtils", "BaseFiltersGenerateModule", "VisaHelper", "ReportUtilities",
	"css!VisaHelper"], function(ProductSalesUtils, BaseFiltersGenerateModule, VisaHelper) {
	return {
		entitySchemaName: "Order",
		attributes: {
			/**
			 * Заголовок пункта меню "Отправить на визирование"
			 */
			SendToVisaMenuItemCaption: {
				dataValueType: Terrasoft.DataValueType.TEXT,
				value: VisaHelper.resources.localizableStrings.SendToVisaCaption
			}
		},
		methods: {
 
			/**
			 * Действие "Отправить на визирование"
			 */
			sendToVisa: VisaHelper.SendToVisaMethod,
 
			/**
			 * Возвращает коллекцию действий раздела в режиме отображения реестра
			 * @protected
			 * @overridden
			 * @return {Terrasoft.BaseViewModelCollection} Возвращает коллекцию действий раздела в режиме
			 * отображения реестра
			 */
			getSectionActions: function() {
				var actionMenuItems = this.callParent(arguments);
				actionMenuItems.addItem(this.getActionsMenuItem({
					Type: "Terrasoft.MenuSeparator",
					Caption: ""
				}));
				actionMenuItems.addItem(this.getActionsMenuItem({
					"Caption": {bindTo: "SendToVisaMenuItemCaption"},
					"Click": {bindTo: "sendToVisa"},
					"Enabled": {bindTo: "isSingleSelected"}
				}));
				return actionMenuItems;
			},
// продолжение модуля....

Спасибо нашёл их. Только как заменить DocumentSectionV2. Он находится в папке Document и при попытке сохранения выдаёт вот такую надпись "Для заданного локального пути не указан путь к хранилищу".
Сохранив ваш код в схеме DocumentPageV2 страницу раздела перестал отображать

Добрый день!

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

"Зарицкий Олег Васильевич" написал:

"Пащенко Александр Сергеевич" написал:

Спасибо. Сейчас попробую сделать

Здравствуйте. Создал замещающую схему и добавил указанные коды. Однако, раздел перестал отображаться. Посмотрите пожалуйста может где-то ошибка есть?

define("DocumentSectionV2", ["VisaHelper", "BaseFiltersGenerateModule",	"DocumentSectionGridRowViewModel"],
	function(VisaHelper, BaseFiltersGenerateModule) {
		return {
			entitySchemaName: "Document",
			methods: {
				/**
				 * Устанавливает значение идентификатора контекстной справки для раздела "Документы"
				 * @overridden
				 */
				initContextHelp: function() {
					this.set("ContextHelpId", 1005);
					this.callParent(arguments);
				},
			attributes: {
                        /**
                         * Заголовок пункта меню "Отправить на визирование"
                         */
                        SendToVisaMenuItemCaption: {
                                dataValueType: Terrasoft.DataValueType.TEXT,
                                value: VisaHelper.resources.localizableStrings.SendToVisaCaption
                        }
                },
                methods: {
                        
                        /**
                         * Действие "Отправить на визирование"
                         */
                        sendToVisa: VisaHelper.SendToVisaMethod,

                        /**
                         * Возвращает коллекцию действий раздела в режиме отображения реестра
                         * @protected
                         * @overridden
                         * @return {Terrasoft.BaseViewModelCollection} Возвращает коллекцию действий раздела в режиме
                         * отображения реестра
                         */
                        getSectionActions: function() {
                                var actionMenuItems = this.callParent(arguments);
                                actionMenuItems.addItem(this.getActionsMenuItem({
                                        Type: "Terrasoft.MenuSeparator",
                                        Caption: ""
                                }));
                                actionMenuItems.addItem(this.getActionsMenuItem({
                                        "Caption": {bindTo: "SendToVisaMenuItemCaption"},
                                        "Click": {bindTo: "sendToVisa"},
                                        "Enabled": {bindTo: "isSingleSelected"}
                                }));
                                return actionMenuItems;
                        },

				/**
				 * @overridden
				 * @inheritDoc BaseSectionV2#initFixedFiltersConfig
				 */
				initFixedFiltersConfig: function() {
					var fixedFilterConfig = {
						entitySchema: this.entitySchema,
						filters: [
							{
								name: "PeriodFilter",
								caption: this.get("Resources.Strings.PeriodFilterCaption"),
								dataValueType: Terrasoft.DataValueType.DATE,
								columnName: "Date",
								startDate: {},
								dueDate: {}
							},
							{
								name: "Owner",
								caption: this.get("Resources.Strings.OwnerFilterCaption"),
								dataValueType: Terrasoft.DataValueType.LOOKUP,
								filter: BaseFiltersGenerateModule.OwnerFilter,
								columnName: "Owner"
							}
						]
					};
					this.set("FixedFilterConfig", fixedFilterConfig);
				},

				/**
				 * @overridden
				 */
				getGridRowViewModelClassName: function() {
					return "Terrasoft.DocumentSectionGridRowViewModel";
				},

				/**
				 * overridden
				 */
				getReportFilters: function() {
					var filters = this.getFilters();
					var recordId = this.get("ActiveRow");
					if (recordId) {
						filters.clear();
						filters.name = "primaryColumnFilter";
						filters.logicalComparisonTypes = Terrasoft.LogicalOperatorType.AND;
						var filter = this.Terrasoft.createColumnInFilterWithParameters(
							this.entitySchema.primaryColumnName, [recordId]);
						filters.addItem(filter);
					}
					return filters;
				},

				/**
				 * overridden
				 */
				prepareResponseCollection: function(collection) {
					this.callParent(arguments);
					var cardPrintMenuItems = this.get("CardPrintMenuItems");
					collection.each(function(item) {
						item.set("CardPrintMenuItems", cardPrintMenuItems);
					}, this);
				}
			},
			diff: /**SCHEMA_DIFF*/[
				{
					"operation": "insert",
					"name": "DataGridActiveRowPrintAction",
					"parentName": "DataGrid",
					"propertyName": "activeRowActions",
					"values": {
						"className": "Terrasoft.Button",
						"style": Terrasoft.controls.ButtonEnums.style.GREY,
						"caption": {"bindTo": "Resources.Strings.PrintRecordGridRowButtonCaption"},
						"tag": "print",
						"visible": {
							bindTo: "getDataGridActiveRowPrintActionVisible"
						}
					}
				}
			]/**SCHEMA_DIFF*/
		};
	});

У Вас лишняя точка с запятой в предпоследней строке и не хватает одной закрывающей фигурной скобки.
Должно быть так:

//весь ваш код
   ]/**SCHEMA_DIFF*/
                }
            }
        });

"Пащенко Александр Сергеевич" написал:
<

Александр, здравствуйте. Посмотрите пожалуйста вот этот код. Записал отдельную схему представления раздела, с родительским объектом "Раздел контакты". Но и там кнопка визирования не отображается. Скорее всего что-то делаю не так. Буду весьма благодарен за помощь

define("ContactSectionV2", ["VisaHelper", "css!VisaHelper"], function(VisaHelper) {
	return {
		entitySchemaName: "Contact",
		attributes: {
                        /**
                         * Заголовок пункта меню "Отправить на визирование"
                         */
			SendToVisaMenuItemCaption: {
				dataValueType: Terrasoft.DataValueType.TEXT,
				value: VisaHelper.resources.localizableStrings.SendToVisaCaption
			}
		},
		methods: {
                       
                        /**
                         * Действие "Отправить на визирование"
                         */
			sendToVisa: VisaHelper.SendToVisaMethod,

                        /**
                         * Возвращает коллекцию действий раздела в режиме отображения реестра
                         * @protected
                         * @overridden
                         * @return {Terrasoft.BaseViewModelCollection} Возвращает коллекцию действий раздела в режиме
                         * отображения реестра
                         */
			getSectionActions: function() {
				var actionMenuItems = this.callParent(arguments);
				actionMenuItems.addItem(this.getActionsMenuItem({
					Type: "Terrasoft.MenuSeparator",
					Caption: ""
				}));
				actionMenuItems.addItem(this.getActionsMenuItem({
					"Caption": {bindTo: "SendToVisaMenuItemCaption"},
					"Click": {bindTo: "sendToVisa"},
					"Enabled": {bindTo: "isSingleSelected"}
				}));
				return actionMenuItems;
			}
			}
	};

Дмитрий, вы создали замещающий клиентский модуль или новую схему представления раздела, с родителем "Раздел контакты"?
Вам нужен именно замещающий клиентский модуль

"Пащенко Александр Сергеевич" написал:

Дмитрий, вы создали замещающий клиентский модуль или новую схему представления раздела, с родительским объектом "Раздел контакты"?

Вам нужен именно замещающий клиентский модуль


Да я просто создал новую схему представления раздела. При замещающей схеме нужно копировать всю родительскую схему + дописывать свои доработки?

Всю схему копировать не нужно. Только объявление модуля и новый/измененный функционал.
В Вашем случаем можно полностью вставить код из предыдущего сообщения. Он будет корректен.

"Ануфриев Дмитрий Юрьевич" написал:

Да я просто создал новую схему представления раздела. При замещающей схеме нужно копировать всю родительскую схему + дописывать свои доработки?

Нет, необходимо указать только следующий обязательный код:
1) Для страницы редактирования:

define('ContactPageV2', ['ContactPageV2Resources', 'GeneralDetails'],
function(resources, GeneralDetails) {
	return {
		entitySchemaName: 'Contact',
		details: /**SCHEMA_DETAILS*/{}/**SCHEMA_DETAILS*/,
		diff: /**SCHEMA_DIFF*/[]/**SCHEMA_DIFF*/,
		attributes: {},
		methods: {},
		rules: {},
		userCode: {}
	};
});

2) Для страницы раздела:

define("ContactSectionV2", ["GridUtilitiesV2", "GoogleIntegrationUtilities", "RightUtilities",
		"ConfigurationConstants", "GoogleIntegrationUtilitiesV2"],
	function(gridUtilitiesV2, GoogleUtilities, RightUtilities, ConfigurationConstants) {
		return {
			entitySchemaName: "Contact",
			attributes: {},
			messages: {},
			mixins: {},
			methods: {}
		};
	});

"Демьяник Алексей" написал:Нет, необходимо указать только следующий обязательный код:

Возможно, поможете. Добавила все коды выше, но при нажатии на кнопку "Отправить на визирование" возникает ошибка (на скриншоте)

Анастасия,
Трудно определить причину по скриншоту. Напишите письмо в тех.поддержку с детальным описанием.

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