Добавление бизнес процесса в кнопку "Действие" раздела
Здравствуйте. Был составлен бизнес процесс визирование документа по аналогии с визированием заказа. Добавлен объект и составлены два БП (как и у оригинала). Однако, сам БП "визирование документа" в библиотеке не присутствует, хотя он есть в конфигурации. Как его туда добавить и нужно ли вообще это делать? И как добавить этот процесс в кнопку "действие", чтобы визирование работало?
Благодарю
Нравится
Добрый день. Обратите внимание,что в 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: {} }; });
"Демьяник Алексей" написал:Нет, необходимо указать только следующий обязательный код:
Возможно, поможете. Добавила все коды выше, но при нажатии на кнопку "Отправить на визирование" возникает ошибка (на скриншоте)
Анастасия,
Трудно определить причину по скриншоту. Напишите письмо в тех.поддержку с детальным описанием.