Ошибка при попытке в истории связанного объекта активности добавить новую активность
Симптомы
Кейс воспроизведения:
1) открыть задачу в расписании, на детали "Связи" которой заполнен лид, счет, проект и т.д.;
2) перейти по гиперссылке в карточку связанного объекта;
3) открыть вкладку "История" и деталь "Активности";
4) добавить на деталь новую задачу.
В результате получаем ошибку в консоли с сообщением:
message: Cannot read property 'replaceCls' of null.
Далее нормально открывается карточка новой задачи, но после сохранения и закрытия всех открытых страниц мы возвращаемся в расписание, которое отображается в вертикальном реестре, а на месте карточки задачи пустое пространство с нерабочими кнопками действий.
Причина
Происходит это из-за того, что в ActivitySectionV2 перекрыт метод openCardInChain следующим образом:
openCardInChain: function(config) { if (this.isSchedulerDataView() && (config.operation === ConfigurationEnums.CardStateV2.ADD)) { var historyStateInfo = this.getHistoryStateInfo(); if (historyStateInfo.workAreaMode === ConfigurationEnums.WorkAreaMode.COMBINED) { this.closeCard(); } } return this.callParent(arguments); },
Этот код присутствует начиная с версии 7.3.0.
Решение
В версии 7.7.0 данное поведение должно быть исправлено.
Для быстрого исправления в конфигурации необходимо заместить схему ActivitySectionV2 и переопределить в ней метод openCardInChain так:
openCardInChain: function(config) { if (config.isLinkClick) { return false; } this.saveCardScroll(); this.scrollCardTop(); this.showBodyMask(); var historyState = this.sandbox.publish("GetHistoryState"); var stateObj = config.stateObj || { isSeparateMode: config.isSeparateMode || true, schemaName: config.schemaName, entitySchemaName: config.entitySchemaName, operation: config.action || config.operation, primaryColumnValue: config.id, valuePairs: config.defaultValues, isInChain: true }; this.sandbox.publish("PushHistoryState", { hash: historyState.hash.historyState, silent: config.silent, stateObj: stateObj }); var moduleName = config.moduleName || "CardModuleV2"; var moduleParams = { renderTo: config.renderTo || this.renderTo, id: config.moduleId, keepAlive: (config.keepAlive !== false) }; var instanceConfig = config.instanceConfig; if (instanceConfig) { this.Ext.apply(moduleParams, { instanceConfig: instanceConfig }); } this.sandbox.loadModule(moduleName, moduleParams); return true; }