Симптомы
Кейс воспроизведения:
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;
}