Доброго времени суток!
Есть у нас запись раздела, надо создать на ней кнопку(в действии или так), которая будет запускать определенный код, который на основе этой записи, создаст запись в другом разделе. Типа конвертации.
Буду рад если поделитесь ссылочкой с примером, или просто как это сделать.
Нравится
Добрый день.
Вы можете посмотреть пример реализации по ссылке:
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");
Добрый день. Пробовал отобразить результат этого кода 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.