кнопка
совмещенный режим
Технические вопросы
7.x

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

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

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 прописали :
[code]
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
}

}
[/code]
,а в LeadSectionV2 :
[code]
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
}
}
[/code]
Но в консоли пишет ошибку: [code] message direction set as publish [/code]
И не передается Id, подскажите, пожалуйста в чем может быть ошибка?

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

За это отвечает свойство конфигурационного объекта workAreaMode и соответствующее значение ConfigurationEnums.WorkAreaMode.COMBINED
пример для PushHistoryState
[javascript]
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")
}
});
[/javascript]
пример для OpenCardInChain (В сути оберткой над PushHistoryState)
[javascript]
this.openCardInChain({
"schemaName": "ServiceModelPage",
"moduleId": this.sandbox.id + "_ServiceModelPage",
"isSeparateMode": false,
"defaultValues": defaultValues,
"workAreaMode": ConfigurationEnums.WorkAreaMode.COMBINED
});
[/javascript]

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

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

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

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