Динамическое отображение содержимого инструментальной панели действий.
Добрый день. Требуется скрывать содержимое 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); } },
Вот так это выглядит в интерфейсе
Когда показано содержимое панели действий
и
Когда скрыто