Изменение выделенной записи по кнопке

Здравствуйте!

Нужно в одной детали сделать такой же функционал реестра, как в [Администрирование] - [Доступ к объектам], т.е. чтобы имя менять было нельзя, а можно было только галки переключать из реестра. Был бы очень рад примерам такой реализации (нужно одну галку в реестре детали менять из реестра без использования карточки).

Нравится

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

Посмотрите пример реализации во вложенном файле.

Извиняюсь. Забыл указать, что речь идет о BPM Online

В BPMOnline Вы тоже можете это реализовать.
На событии Init реестра необходимо привязать обработчики нажатия.
Вот пример кода:

Page.TreeGrid.AjaxEvents.CellIconClick.Event += CellIconClickHandler;
Page.TreeGrid.AjaxEvents.CellIconClick.ExtraParameters.Add(
 new Terrasoft.UI.WebControls.Controls.Parameter("nodeId", "nodeId", 
 Terrasoft.UI.WebControls.Controls.ParameterMode.Raw));
Page.TreeGrid.AjaxEvents.CellIconClick.ExtraParameters.Add(
 new Terrasoft.UI.WebControls.Controls.Parameter("iconId", "iconId", 
 Terrasoft.UI.WebControls.Controls.ParameterMode.Raw));
Page.TreeGrid.ImageList = "Terrasoft.WebApp";
Page.DataSource.Loaded += Page.TreeGrid.DataLoaded;
Page.TreeGrid.AjaxEvents.CellIconClick.ShowLoadMask = true;
Page.TreeGrid.AjaxEvents.CellIconClick.ShowOpaqueMask = true;
Page.DataSource.PrepareFilters += delegate (object sender, DataSourceEventArgs e)
{
 var dataSource = Page.DataSource;
 var currentStructure = dataSource.CurrentStructure;
 var sysSolutionFilter = currentStructure.Filters.FindByName("SysSolutionFilter");
 if(sysSolutionFilter == null) {
  sysSolutionFilter = currentStructure.CreateFilterWithParameters(dataSource.Schema, FilterComparisonType.Equal, "SysSolution", Page.UserConnection.Solution.Id);
  sysSolutionFilter.Name = "SysSolutionFilter";
  currentStructure.Filters.Add(sysSolutionFilter);
 }
};
Page.DataSource.SaveError +=
delegate(object sender, DataSourceEventArgs e) {
 Guid redactedId = e.Request == null ? Guid.Empty : e.Request.PrimaryColumnValue;
 if (redactedId != Guid.Empty) {
  Page.DataSource.LoadRow(redactedId);
 }
 ShowErrorMessage(e.Exception.Message);
 e.IsHandled = true;
};
Page.DataSource.LoadRowsResponseRegistered += delegate(object sender, DataSourceEventArgs e) {
 context.ThrowEventArgs = e;
 ThrowEvent(context, "DataSourceLoadRowsResponseRegistered");
};

Здравствуйте!

Подскажите пожалуйста, можно ли убрать событие на двойной клик записи реестра (чтобы он не пытался открыть карточку, так как карточки у меня нету)? И есть ли функция обновления записи реестра (я нашел только метод обновления всего реестра, но при этом сбрасывается выделение и выбранная страница).

Здравствуйте, Дмитрий!

Логика обработки двойного клика наследуется от базовой страницы редактирования, поэтому для того, чтобы ее отключить в дочерней, следует переопределить обработчик.

Это можно сделать следующим образом:

1. Выберите элемент Реестр
2. Переключитесь на События
3. Создайте обработчик события OnDoubleClick

griddoubleclick

По нажатию на смарт-тег с молнией автоматически создастся пустой обработчик события.

Затем опубликуйте реестр, и событие базового реестра отрабатывать не будет.

Так пробовал делать, обработчик создавал, опубликовывал, но по двойному клику все равно выскакивает ошибка

Здравствуйте, Дмитрий.

В процессе базовой страницы реестра есть сообщение TreeGridDblClick при получении которого выбрасывается промежуточное EditButtonClick. Попробуйте удалить соединяющий их поток и опубликовать страницу.

"Maxim Gritsenko" написал:

Здравствуйте, Дмитрий.

В процессе базовой страницы реестра есть сообщение TreeGridDblClick при получении которого выбрасывается промежуточное EditButtonClick. Попробуйте удалить соединяющий их поток и опубликовать страницу.


"Сражаюсь" с аналогичной проблемой - свой обработчик сделал, но все равно каким-то образом событие ловит базовый скрипт... А если удалить проброс события в базовом скрипте, я так понимаю, двойной клик вообще работать перестанет везде, или я не прав?

Добрый день.

Для запрета двойного щелчка, помимо переопределения события двойного щелчка, необходимо переопределить наследуемый метод GetRegisterTreeGridDblClickScript, заменив его тело на:

return String.Empty;
Показать все комментарии