Добрый день, подскажите пожалуйста, как можно по нажатию кнопки переходить в карточку записи в совмещенный режим редактирования. Получается только в обычном режиме:
var requestUrl = " CardModuleV2/LeadPageV2/edit/" + recId;
this.sandbox.publish("PushHistoryState", {
hash: requestUrl
});
Нравится
Могу предположить что нужно посмотреть в исходных кодах базовой карточки или раздела, и искать в направлении historyStateInfo.workAreaMode === 2 (так выполняется проверка на совмещенный режим).
Не совсем понятно, что нужно конкретно.
Вы можете объявить в 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" написал:ошибки в консоли отсутствуют.
А что за кнопка? Вероятно кнопка ищет реализацию метода в карточке секции, т.к. совмещенный режим обрабатывается секцией.