Id выделенной(активной) записи раздела на странице реестра детали
Здравствуйте.
Нахожусь в разделе. Открыла деталь, на которой сделала кнопку.
Мне нужно, чтобы В зависимости от параметров, которые есть у записи раздела, кнопка на детали выводилась или не выводилась.
Каким образом мне получить Id выделенной(активной) записи раздела на странице реестра детали?
Нравится
this.get("ActiveRow").
альтернативный вариант - var row = this.getActiveRow()
"Варфоломеев Данила" написал:this.get("ActiveRow").
альтернативный вариант - var row = this.getActiveRow()
Таким образом выдает ошибку при компиляции, что нету get'а.
"Чемезова Антонина" написал:Таким образом выдает ошибку при компиляции, что нету get'а.
Прошу прощения, поздно заметил, что вопрос относится к BPMonline 5.x. Мой вариант применим к 7.x
Вы можете получить Id текущей записи в реестре на детали, а затем получить значение поля, по которому идёт связь с разделом. Например, если деталь в разделе контактов, то поле в объекте детали ContactId.
"Зверев Александр" написал:Вы можете получить Id текущей записи в реестре на детали, а затем получить значение поля, по которому идёт связь с разделом. Например, если деталь в разделе контактов, то поле в объекте детали ContactId.
Такой вариант не подходит в тот момент, когда на реестре детали нет записей.
В таком случае стоит привязывать логику не к детали, а к основному разделу.
В странице раздела (BaseModulePage) есть событие GridActiveRowChanged, которое срабатывает при смене записи в основном реестре и к нему привязывается обновление детали. Вы можете в своём разделе добавить на него дополнительную логику.
"Зверев Александр" написал:В таком случае стоит привязывать логику не к детали, а к основному разделу.
А как из основного раздела скрыть видимость кнопки детали?
Аналогично наложению фильтров на детали, через detailPageContainer.FindPageControlByName. Как получается detailPageContainer, см. в коде базовой страницы раздела логику обновления деталей.
"Зверев Александр" написал:Аналогично наложению фильтров на детали, через detailPageContainer.FindPageControlByName.
Можете подсказать, примерчик где-то в системе есть похожий?
Да, в нескольких местах так получают DataSource со страницы детали. Посмотрите поиском по конфигурации. Думаю, получить кнопку можно так же.
var detailDataSource = (detailPageContainer.FindPageControlByName("DataSource")) as Terrasoft.UI.WebControls.Controls.DataSource; if (detailDataSource != null) {
"Зверев Александр" написал:Да, в нескольких местах так получают DataSource со страницы детали. Посмотрите поиском по конфигурации. Думаю, получить кнопку можно так же.
Александр, так кнопка же не содержится в DataSource детали. Она находится на странице детали. Как к ней добраться? на Page.Print.SetVisible(false); ругается.
var detailsTabPanel = Page.PageContainer.FindPageControlByName("DetailsTabPanel") as Terrasoft.UI.WebControls.Controls.TabPanel; var detailsTab = detailsTabPanel.Tabs[detailsTabPanel.ActiveTabIndex]; var detailPageContainer = detailsTab.Items[0] as PageContainer; var detailDataSource = (detailPageContainer.FindPageControlByName("DataSource")) as Terrasoft.UI.WebControls.Controls.DataSource; var page = Page.AspPage as Terrasoft.UI.WebControls.Page; if (detailDataSource == null) { Page.Print.SetVisible(false); }
Аналогично. DataSuorce и эта Ваша кнопка — два компонента на одной странице.Указывайте в FindPageControlByName название компонента с кнопкой. Тип значения при этом также будет другой.
Александр, спасибо за подсказки. С кодом вроде разобралась.
Но у меня проблема, если я цепляюсь к событию GridActiveRowChanged, то после этого происходит обновление детали.
Подскажите сигнал, который срабатывает уже после обновления детали?
В странице реестра на компоненте DataSource довольно много событий. Возможно, какое-то из них.
Для эксперимента можно добавить в каждое из них, подходящее по смыслу, обработчик, поставить там breakpoint-ы и посмотреть, кто будет позже всех.