Динамическое отображение содержимого инструментальной панели действий.
Добрый день. Требуется скрывать содержимое ContentContainer инструментальной панели действий в зависимости от значения атрибута карточки редактирования. Я переопределил объявление модуля в карточке, добавив свойство contentVisible с привязкой к атрибуту, но теперь содержимого ContentContainer не видно никогда. Подскажите как добиться, чтобы содержимое отображалось в зависимости от значения атрибута карточки редактирования. Ниже привожу код, который я модифицировал
modules: /**SCHEMA_MODULES*/{
"ActionsDashboardModule": {
"config": {
"isSchemaConfigInitialized": true,
"schemaName": "OpportunityActionsDashboard",
"useHistoryState": false,
"parameters": {
"viewModelConfig": {
"entitySchemaName": "Opportunity",
"actionsConfig": {
"schemaName": "OpportunityStage",
"columnName": "Stage",
"colorColumnName": "Color",
"filterColumnName": "ShowInProgressBar",
"orderColumnName": "Number",
"innerOrderColumnName": "End",
"decouplingConfig": {
"name": "OppStageDecoupling",
"masterColumnName": "CurrentStage",
"referenceColumnName": "AvailableStage"
}
},
"contentVisible": {bindTo: "NrbIsOpportunity"},
"dashboardConfig": {
"Activity": {
"masterColumnName": "Id",
"referenceColumnName": "Opportunity"
}
}
}
}
}
}
}/**SCHEMA_MODULES*/,
Нравится
Попробуй по изменению атрибута вызывать обновление твоей детали:
this.updateDetail({detail: "Relationships"});
Решил свою проблему с помощью сообщений. Пришлось сделать два встречно направленных сообщения, чтобы корректно отрабатывало во всех возможных вариантах просмотра: combined mode с вертикальным реестром и без, separate mode. Ниже код замещающей схемы инструментальной панели действий
define("OpportunityActionsDashboard", [], function() {
return {
messages: {
"InitVisibilityByRights": {
mode: this.Terrasoft.MessageMode.BROADCAST,
direction: this.Terrasoft.MessageDirectionType.SUBSCRIBE
},
"GetInitVisibilityByRights": {
mode: this.Terrasoft.MessageMode.BROADCAST,
direction: this.Terrasoft.MessageDirectionType.PUBLISH
}
},
methods: {
/**
* @inheritdoc Terrasoft.BaseActionsDashboard#subscribeSandboxEvents
* @overridden
*/
subscribeSandboxEvents: function() {
this.callParent(arguments);
var sandbox = this.sandbox;
var tags = [sandbox.id];
sandbox.subscribe("InitVisibilityByRights", this.initVisibilityByRights, this, tags);
sandbox.publish("GetInitVisibilityByRights");
},
/**
* Инициализирует видимость содержимого панели
*/
initVisibilityByRights: function(value) {
this.set("ContentVisible", value);
}
},
diff: /**SCHEMA_DIFF*/[]/**SCHEMA_DIFF*/
};
});В карточке редактирования продажи необходимы следующие модификации
messages: {
"InitVisibilityByRights": {
mode: this.Terrasoft.MessageMode.BROADCAST,
direction: this.Terrasoft.MessageDirectionType.PUBLISH
},
"GetInitVisibilityByRights": {
mode: this.Terrasoft.MessageMode.BROADCAST,
direction: this.Terrasoft.MessageDirectionType.SUBSCRIBE
}
},
attributes: {
// это и есть атрибут, который определяет видимость
"IsColumnVisibleByOwnerOrFuncRole": {
dependencies: [{
columns: ["IsColumnVisibleByOwnerOrFuncRole"],
methodName: "publishVisibilityByRights"
}]
}
},
methods: {
subscribeSandboxEvents: function() {
this.callParent(arguments);
this.sandbox.subscribe("GetInitVisibilityByRights", this.publishVisibilityByRights, this);
},
/**
* Публикует признак видимости в другие модули
*/
publishVisibilityByRights: function() {
var moduleIds = this.getModuleIds();
moduleIds.push(this.sandbox.id);
var value = this.get("IsColumnVisibleByOwnerOrFuncRole");
this.sandbox.publish("InitVisibilityByRights", value, moduleIds);
}
},
Вот так это выглядит в интерфейсе
Когда показано содержимое панели действий
и
Когда скрыто
