Здравствуйте!
Нужно в одной детали сделать такой же функционал реестра, как в [Администрирование] - [Доступ к объектам], т.е. чтобы имя менять было нельзя, а можно было только галки переключать из реестра. Был бы очень рад примерам такой реализации (нужно одну галку в реестре детали менять из реестра без использования карточки).
Нравится
В BPMOnline Вы тоже можете это реализовать.
На событии Init реестра необходимо привязать обработчики нажатия.
Вот пример кода:
[csharp]
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");
};
[/csharp]
Здравствуйте!
Подскажите пожалуйста, можно ли убрать событие на двойной клик записи реестра (чтобы он не пытался открыть карточку, так как карточки у меня нету)? И есть ли функция обновления записи реестра (я нашел только метод обновления всего реестра, но при этом сбрасывается выделение и выбранная страница).
Здравствуйте, Дмитрий!
Логика обработки двойного клика наследуется от базовой страницы редактирования, поэтому для того, чтобы ее отключить в дочерней, следует переопределить обработчик.
Это можно сделать следующим образом:
1. Выберите элемент Реестр
2. Переключитесь на События
3. Создайте обработчик события OnDoubleClick

По нажатию на смарт-тег с молнией автоматически создастся пустой обработчик события.
Затем опубликуйте реестр, и событие базового реестра отрабатывать не будет.
Так пробовал делать, обработчик создавал, опубликовывал, но по двойному клику все равно выскакивает ошибка
Здравствуйте, Дмитрий.
В процессе базовой страницы реестра есть сообщение TreeGridDblClick при получении которого выбрасывается промежуточное EditButtonClick. Попробуйте удалить соединяющий их поток и опубликовать страницу.
"Maxim Gritsenko" написал:Здравствуйте, Дмитрий.
В процессе базовой страницы реестра есть сообщение TreeGridDblClick при получении которого выбрасывается промежуточное EditButtonClick. Попробуйте удалить соединяющий их поток и опубликовать страницу.
"Сражаюсь" с аналогичной проблемой - свой обработчик сделал, но все равно каким-то образом событие ловит базовый скрипт... А если удалить проброс события в базовом скрипте, я так понимаю, двойной клик вообще работать перестанет везде, или я не прав?
Добрый день.
Для запрета двойного щелчка, помимо переопределения события двойного щелчка, необходимо переопределить наследуемый метод GetRegisterTreeGridDblClickScript, заменив его тело на:
[csharp]
return String.Empty;
[/csharp]