Перейти в совмещенный режим по нажатию кнопки

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

var recId = this.get("Id");
var requestUrl = " CardModuleV2/LeadPageV2/edit/" + recId;
this.sandbox.publish("PushHistoryState", {
    hash: requestUrl
});

Нравится

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

Могу предположить что нужно посмотреть в исходных кодах базовой карточки или раздела, и искать в направлении historyStateInfo.workAreaMode === 2 (так выполняется проверка на совмещенный режим).

спасиб, а реально как-то вызвать функцию в схеме карточки из схемы раздела, необходимо запускать функцию кнопки, которая нормально работает в Combined режиме, а в Separated не срабатывает?

Не совсем понятно, что нужно конкретно.
Вы можете объявить в diff раздела и карточке, а сами функции, например, прописать в миксине, который подключите к разделу и карточке.
В этом миксине можете так же написать функцию, на проверку того в каком режиме открыта карточка, а в самой карточке вызывать эти функции.

Спасибо за помощь :smile:
Суть в том, что есть кнопка удаления в разделе карточки, которая прописана в LeadSectionV2, использующая стандартную функцию deleteRecords из GridUtilitiesV2 и работает в совмещенном режим, но если перейти из контакта в лид или просто перезагрузить страницу, то карточка открывается в раздельном режиме и уже кнопка берется из LeadPageV2, и deleteRecords не срабатывает корректно. В соседней теме советовали использовать deleteQuery, но она не отображает связанные записи и не выполняет каскадное удаление. Поэтому хотели попробовать сделать, чтобы по нажатию кнопки из раздельного режима выполнялся переход в совмещенный и сразу запускалась необходимая функция из LeadSectionV2.

Сам лично не сталкивался с подобным кейсом.
Значит всё же вам по исходным кода javascript надо искать логику открытия страницы в совмещенном режиме и копировать её в LeadPageV2.
Моё мнение.
Либо нужно сделать миксин и логику кнопки из LeadSection копировать в миксин, заранее немного пересмотрев логику удаления связей.

Так же, можете переходить в секцию публикуя сообщение PushHistoryState передавая в него Id текущей записи. В секции проверять наличие атрибута с Id записи (в onEntityInialized). Если атрибут есть - выполнять удаление.

Спасибо, попробовали с помощью PushHistoryState передавать Id.
В LeadPageV2 прописали :

		methods: {
		        delete: function() {
		            var recId = this.get("Id");
 
		            this.sandbox.publish("GetRecordId", this.get("Id"), [this.sandbox.id]);
		            console.log(this.sandbox.id);
 
		            var requestUrl = "SectionModuleV2/LeadSectionV2/";
		            this.sandbox.publish("PushHistoryState", {
		                hash: requestUrl
		            });
 
		        }
 
		    },
		    messages: {
		        "GetRecordId": {
		            mode: Terrasoft.MessageMode.PTP,
		            direction: Terrasoft.MessageDirectionType.PUBLISH
		        }
 
		    }

,а в LeadSectionV2 :

            onEntityInialized: function() {
                this.callParent(arguments);
 
                var recId2 = this.sandbox.id;
                this.sandbox.subscribe("GetRecordId", function() {
                    alert("check")
                }, [this.sandbox.id]);
 
                if (recId2) {
 
                    var activeRow = this.getActiveRow();
                    if (activeRow && activeRow.isNew) {
                        this.removeGridRecords([activeRow.recId2]);
                    } else {
                        var items = this.getSelectedItems();
                        if (!items || !items.length) {
                            return;
                        }
                        this.checkCanDelete(items, this.checkCanDeleteCallback, this);
                    }
                }
            }
 
 
            },
 
            messages: {
                "GetRecordId": {
                    mode: Terrasoft.MessageMode.PTP,
                    direction: Terrasoft.MessageDirectionType.SUBSCRIBE
                }
            }

Но в консоли пишет ошибку:  message direction set as publish
И не передается Id, подскажите, пожалуйста в чем может быть ошибка?

Хм, а вы точно уверены что в месте подписки [this.sanbox.id] идентичный с [this.sanbox.id] в месте отправки?
Добавлю работающий пример передачи значений c детали в карточку через песочницу.
Так же могу предположить, что массив messages нужно было объявить до methods, но скорее всего это не имеет значения.

За это отвечает свойство конфигурационного объекта workAreaMode и соответствующее значение ConfigurationEnums.WorkAreaMode.COMBINED
пример для PushHistoryState

this.sandbox.publish("PushHistoryState", {
	hash: this.Terrasoft.combinePath("SectionModuleV2", "SysAdminUnitSectionV2",
		pageName, "edit", primaryColumnValue),
	stateObj: {
		module: "SectionModuleV2",
		operation: "edit",
		primaryColumnValue: primaryColumnValue,
		schemas: [
			"SysAdminUnitSectionV2",
			pageName
		],
		workAreaMode: ConfigurationEnums.WorkAreaMode.COMBINED,
		moduleId: this.sandbox.id,
		UsersActiveRow: this.get("ActiveRow"),
		FuncRolesActiveRow: this.get("FuncRolesActiveRow"),
		OrgRolesActiveRow: this.get("OrganizationalRolesActiveRow")
	}
});

пример для OpenCardInChain (В сути оберткой над PushHistoryState)

this.openCardInChain({
	"schemaName": "ServiceModelPage",
	"moduleId": this.sandbox.id + "_ServiceModelPage",
	"isSeparateMode": false,
	"defaultValues": defaultValues,
	"workAreaMode": ConfigurationEnums.WorkAreaMode.COMBINED
});

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

"Maria H" написал:ошибки в консоли отсутствуют.

А что за кнопка? Вероятно кнопка ищет реализацию метода в карточке секции, т.к. совмещенный режим обрабатывается секцией.

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