кнопка на страницу редактирования
новая кнопка
Технические вопросы
7.x

Добавление кнопки "Удалить" на страницу редактирования

Здравствуйте! Необходимо добавить красную кнопку “Удалить” на страницу Лида, что-то в таком роде:
!
Делаем по документации (https://academy.terrasoft.ru/documents/technic-sdk/7-9/kak-dobavit-knopk...),
добавили код в замещающую схему LeadPageV2, кэш чистили, но кнопка все равно не отображается.

 diff: [
            {
                "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

Нравится

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

Если режим совмещённый, то добавлять нужно в схему LeadSectionV2. Вы же добавили кнопку в схему страницы редактирования в, скорее всего, несуществующий там контейнер "CombinedModeActionButtonsCardLeftContainer"

Здравствуйте!

Если рекомендация от Данилы не помогла, то просьба предоставить полный листинг кода.

Большое спасибо за помощь, после добавления кода в LeadSectionV2 кнопка появилась. :smile:
Подскажите пожалуйста, как должна выглядеть функция для удаления записи. Сперва вытягиваем id лида: [code]
var leadId = this.get("Id");
[/code]
а как в дальнейшем его можно удалить?

Мария, здравствуйте!

Наглядный пример реализации Вы можете посмотреть в обработчике кнопки "Удалить" в реестре раздела.

Спасибо, получилось реализовать удаление с помощью функции deleteRecords из GridUtilitiesV2.
Добавили таким образом кнопку в 3 раздела, всё работает, только в разделе “Контакты” кнопка не отображается :sad:. В контактах 3 вида страниц, ссылка на страницу редактирования контакта имеет вид:

ViewModule.aspx#CardModuleV2/BtcContactType1Page/edit/deafe024-a148-4ba6-a4b1-cb8fce5b8443

, может ли это как-то влиять на способ добавления кнопки?

Попробуйте этот же код добавить и в Section и на Page (если их несколько, то во все).

Мария, а что делает кнопка "Удалить"? Если правильно поняли, то она удаляет текущую запись. Тогда хотелось бы посоветовать продумать удаление более глобально, так как нужно учесть все возможные моменты. Например:

- что должно произойти после нажатия;
- что делать с деталями;
- что будет если после нажатия "Удалить", нажать на "Сохранить" и т.д;
- процессная ли карточка или нет.

Спасибо, кнопка в контактах появилась. :smile:

Если заходить напрямую через раздел в карточку кнопка вроде корректно срабатывает, сразу после нажатия "удалить" прописали переход обратно в раздел, где уже выполняется либо удаление, либо предлагается удалить связанные записи, если таковые имеются.

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

Или можно как-то самому принудительно запускать совмещенный режим при переходе на другую страницу, в плане: сделать, что при нажатии на кнопку “удалить” перекидывало в карточку, но в совмещенном режиме и автоматически нажималась кнопка удалить сразу?

Для исправления - продублируйте код метода, связанного с кнопкой "удалить" в схеме карточки. Также смотрите в сторону использования Terrasoft.DeleteQuery для удаления записи по Id. Для перехода обратно в раздел - воспользуйтесь сообщением PushHistoryState.

Спасибо за помощь,
Функция удаления из раздела:
[code]
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
});
}
[/code]
Код функции удаления со страницы редактирования:
[code]
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
});
}
[/code]
На странице записи удаление происходит, но не выходит выполнить каскадное удаление, подскажите пожалуйста, как проще реализовать удаление связанных записей?

Добрый день.

Удалить записи каскадно через DeleteQuery у Вас не выйдет. Возможны только следующие два варианта:

1) Перед удалением основной записи выполнять SELECT для получения Id связанных записей. Удалять их, а только затем выполнять DELETE основной.

2) На уровне объекта установить чекбокс "каскадная связь".

Обратите внимание, что после использования второго варианта - записи каскадно будут удаляться и при стандартном удалении из раздела.

Спасибо, для пользовательского раздела с галочкой "каскадная связь" всё получилось.
Не подскажите, пожалуйста, где для лидов ставить это свойство для каскадного удаления в процессах и для контактов в лидах?

!

Данная деталь создается на основании view VwEntityInProcess. Код самой вьюхи:

[sql]
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
[/sql]

Спасибо за помощь. С изначальным удалением из 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…

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