Вопрос

Id выделенной(активной) записи раздела на странице реестра детали

Здравствуйте.
Нахожусь в разделе. Открыла деталь, на которой сделала кнопку.
Мне нужно, чтобы В зависимости от параметров, которые есть у записи раздела, кнопка на детали выводилась или не выводилась.

Каким образом мне получить Id выделенной(активной) записи раздела на странице реестра детали?

Нравится

14 комментариев

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-ы и посмотреть, кто будет позже всех.
events

Показать все комментарии