Здравствуйте! Необходимо добавить красную кнопку “Удалить” на страницу Лида, что-то в таком роде:
Делаем по документации (https://academy.terrasoft.ru/documents/technic-sdk/7-9/kak-dobavit-knopk...),
добавили код в замещающую схему LeadPageV2, кэш чистили, но кнопка все равно не отображается.
{
"operation": "insert",
"parentName": "CombinedModeActionButtonsCardLeftContainer",
"propertyName": "items",
"name": "DeleteLeadButton",
"values": {
"itemType": Terrasoft.ViewItemType.BUTTON,
"caption": {bindTo: "Resources.Strings.DeleteLeadButtonCaption"},
"click": {bindTo: "onDeleteLeadClick"},
"style": Terrasoft.controls.ButtonEnums.style.RED,
}
}
]
Подскажите, пожалуйста, в чем может быть ошибка, версия 7.9.1
Нравится
Если режим совмещённый, то добавлять нужно в схему LeadSectionV2. Вы же добавили кнопку в схему страницы редактирования в, скорее всего, несуществующий там контейнер "CombinedModeActionButtonsCardLeftContainer"
Здравствуйте!
Если рекомендация от Данилы не помогла, то просьба предоставить полный листинг кода.
Мария, здравствуйте!
Наглядный пример реализации Вы можете посмотреть в обработчике кнопки "Удалить" в реестре раздела.
Спасибо, получилось реализовать удаление с помощью функции deleteRecords из GridUtilitiesV2.
Добавили таким образом кнопку в 3 раздела, всё работает, только в разделе “Контакты” кнопка не отображается :sad:. В контактах 3 вида страниц, ссылка на страницу редактирования контакта имеет вид:
ViewModule.aspx#CardModuleV2/BtcContactType1Page/edit/deafe024-a148-4ba6-a4b1-cb8fce5b8443
, может ли это как-то влиять на способ добавления кнопки?
Попробуйте этот же код добавить и в Section и на Page (если их несколько, то во все).
Мария, а что делает кнопка "Удалить"? Если правильно поняли, то она удаляет текущую запись. Тогда хотелось бы посоветовать продумать удаление более глобально, так как нужно учесть все возможные моменты. Например:
- что должно произойти после нажатия;
- что делать с деталями;
- что будет если после нажатия "Удалить", нажать на "Сохранить" и т.д;
- процессная ли карточка или нет.
Спасибо, кнопка в контактах появилась. :smile:
Если заходить напрямую через раздел в карточку кнопка вроде корректно срабатывает, сразу после нажатия "удалить" прописали переход обратно в раздел, где уже выполняется либо удаление, либо предлагается удалить связанные записи, если таковые имеются.
Но возникла проблема с удалением на отдельной странице, если допустим перейти с лида в контакт, или из контакта в лид, или даже просто перезагрузить страницу из раздела, то кнопка удаления не срабатывает. Подскажите, пожалуйста, как в Page можно осуществить удаление? Не можем найти пример в стандартных схемах.
Или можно как-то самому принудительно запускать совмещенный режим при переходе на другую страницу, в плане: сделать, что при нажатии на кнопку “удалить” перекидывало в карточку, но в совмещенном режиме и автоматически нажималась кнопка удалить сразу?
Для исправления - продублируйте код метода, связанного с кнопкой "удалить" в схеме карточки. Также смотрите в сторону использования Terrasoft.DeleteQuery для удаления записи по Id. Для перехода обратно в раздел - воспользуйтесь сообщением PushHistoryState.
Спасибо за помощь,
Функция удаления из раздела:
deleteRecords: function() { var activeRow = this.getActiveRow(); if (activeRow && activeRow.isNew) { this.removeGridRecords([activeRow.get("Id")]); } else { var items = this.getSelectedItems(); if (!items || !items.length) { return; } this.checkCanDelete(items, this.checkCanDeleteCallback, this); } }, handleAfterDelete: function() { this.sandbox.unRegisterMessages(["MultiDeleteFinished"]); this.registerMultiDeleteMessages(); this.reloadGridData(); this.onDeleted({ Success: true }); this.onDataChanged(); var requestUrl = "SectionModuleV2/UsrInterestSection"; this.sandbox.publish("PushHistoryState", { hash: requestUrl }); }
Код функции удаления со страницы редактирования:
delete: function() { var recId = this.get("Id"); var deleteQuery = Ext.create("Terrasoft.DeleteQuery", { rootSchemaName: "UsrInterest" }); deleteQuery.filters.add("userFilter", deleteQuery.createColumnFilterWithParameter(Terrasoft.ComparisonType.EQUAL, "Id", recId)); deleteQuery.execute(function() {}); var requestUrl = "SectionModuleV2/UsrInterestSection"; this.sandbox.publish("PushHistoryState", { hash: requestUrl }); }
На странице записи удаление происходит, но не выходит выполнить каскадное удаление, подскажите пожалуйста, как проще реализовать удаление связанных записей?
Добрый день.
Удалить записи каскадно через DeleteQuery у Вас не выйдет. Возможны только следующие два варианта:
1) Перед удалением основной записи выполнять SELECT для получения Id связанных записей. Удалять их, а только затем выполнять DELETE основной.
2) На уровне объекта установить чекбокс "каскадная связь".
Обратите внимание, что после использования второго варианта - записи каскадно будут удаляться и при стандартном удалении из раздела.
Данная деталь создается на основании view VwEntityInProcess. Код самой вьюхи:
ALTER VIEW [dbo].[VwEntityInProcess] ( [Id], [CreatedOn], [CreatedById], [ModifiedOn], [ModifiedById], [ProcessListeners], [EntitySchemaName], [RecordId], [ProcessCaption], [ProcessDescription] ) AS SELECT DISTINCT ss.[Id], ss.[CreatedOn], ss.[CreatedById], ss.[ModifiedOn], ss.[ModifiedById], ss.[ProcessListeners], ss.[Name], secpe.[RecordId], ssProcess.[Caption], ssProcess.[Description] FROM [SysEntityCommonPrcEl] secpe JOIN [SysSchema] ss ON ss.UId = secpe.[EntitySchemaUId] JOIN [SysProcessElementData] sped ON secpe.[ProcessElementId] = sped.[Id] JOIN [SysProcessData] spd ON spd.[Id] = sped.[SysProcessId] JOIN [SysProcessData] spdParent ON COALESCE(spd.ParentId, spd.Id) = spdParent.[Id] JOIN [SysSchema] ssProcess ON ssProcess.[Id] = spdParent.[SysSchemaId] JOIN [SysProcessLog] spl ON spl.[SysSchemaId] = spdParent.[SysSchemaId] WHERE spl.[StatusId] = 'ed2ae277-b6e2-df11-971b-001d60e938c6' GO
Спасибо за помощь. С изначальным удалением из VwEntityInProcess не получилось, появляется ошибка: "Uncaught View or function 'dbo.VwEntityInProcess' is not updatable because the modification affects multiple base tables."
А удалять "без связанных записей" с помощью DeleteQuery, или как можно выполнить sql запрос на удаление по нажатию кнопки ?
"Maria H" написал:как можно выполнить sql запрос на удаление по нажатию кнопки ?
Это можно сделать на бекенде, тоесть вам нужно сделать свой конфигурационный веб сервис:
https://academy.terrasoft.ru/documents/technic-sdk/7-8/kak-sozdat-svoy-…
В теле которого уже формировать произвольный sql запрос, пример:
var test = new CustomQuery(UserConnection, DBEngine.GetIndexQuerySqlText())
.WithParameter("DBSchemaName", DBEngine.CurrentSchemaName)
.WithParameter("EntitySchemaQualifierName", null, "DBObjectName")
.WithParameter("EntitySchemaName", entitySchemaName)
.WithParameter("IndexName", indexName);
Где второй параметр new CustomQuery, собственно текст самого запроса, с параметрами внутри через собаку, к пр. @param_name, если параметры конечно нужны.
Выполнить можно так:
test.Execute();
Если это запрос на чтение, то можно преобразавать его в стандартный IDataReader:
using (DBExecutor dbExecutor = UserConnection.EnsureDBConnection()) {
IDataReader datareader = test.ExecuteReader(dbExecutor);
}
После чего данный сервис по удалению можно будет вызвать из ваших схема страниц\секций следующим образом:
https://academy.terrasoft.ru/documents/technic-sdk/7-8/kak-programmno-v…