Обновление реестра раздела после добавления/изменения записи на детали.....

Где то читал про это здесь, но найти никак не могу.

Есть раздел и есть в нем деталь.
На детали добавляют/изменяют запись.
Сохраняют.
Надо чтобы при этом обновился основной реестр записей, так как меняются поля в записи детали и от этого отрабатывает логика, меняющая поля в основной записи и эта запись уже не попадает в условия отбора выбранной в данный момент динамической папки.

Уффф. :smile: Сформулировал.

Как?

Нравится

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

Попробуйте с помощью бизнес-процесса.
После сохранения записи генерируйте сигнал, что-то типа "UpdateBla_Bla_BlaGrid". И уже в процессе Bla_Bla_BlaGrid'a ловите этот сигнал и обновляете гриду

Мысль....Семен Семеныч :-) Спасибо.

Так же есть вариант вызвать обновление грида с помощью скрипта.
Например, так:

Page.AddScript("PageContainer_AccountsModulePage_Grid_TreeGrid.refreshData();");

Если нужно больше универсальности, то можно достучаться до родительского контейнера через свойство "ownerCt". Путем нескольких повторений "ownerCt.ownerCt..." можно попасть в "PageContainer_AccountsModulePage", затем к нему добавить "_Grid_TreeGrid.refreshData();".
А получить Id элемента для обращения к нему из скрипта можно из свойства "ClientID".

Не совсем я понял.
Я добавил в процесс сохранения записи детали генерацию события RefreshBaseGrid
Мне его где ловить? На странице раздела?

Александр, из страницы редактирования добрался до грида раздела следующим образом:

Page.AddScript("window.opener.window.PageContainer_ContactsModulePage_Grid_TreeGrid.refreshData();");

Смачно. Сейчас попробую.

"Шамуилов Александр" написал:

Не совсем я понял.

Я добавил в процесс сохранения записи детали генерацию события RefreshBaseGrid

Мне его где ловить? На странице раздела?


Да, в процессе страницы раздела. В том то и есть разница между сигналом и событием - событие может запустить другое событие только внутри текущего процесса, а сигнал запускает любой процесс системы, где он установлен как начальный

"Андрей Каспаревич" написал:

Александр, из страницы редактирования добрался до грида раздела следующим образом:

Page.AddScript("window.opener.window.PageContainer_ContactsModulePage_Grid_TreeGrid.refreshData();");

С уважением,

Каспаревич Андрей

Эксперт 3-й линии поддержки


ИМХО, попахивает костылями. А если эту же страницу возможно открыть не только с этой детали? Соответственно opener будет совершенно другой, да и вложенность в контейнеры может варьироваться...
Ну это лично мои соображения - возможно так и будет правильней

эээээ, работает, есть тока одна проблема, если я это вешаю на кнопку OK карточки, то основной реестр раздела обновляется ДО того как сохранятся изменения.....соответственно, ничего не меняется. :smile:
Не могу сообразить, куда вставить сие произведение.

"Шамуилов Александр" написал:

эээээ, работает, есть тока одна проблема, если я это вешаю на кнопку OK карточки, то основной реестр раздела обновляется ДО того как сохранятся изменения.....соответственно, ничего не меняется. :smile:

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


Генерируйте сигнал после сохранения DataSourc'a
Тогда точно будет после:smile:

Действительно, Константин дело говорит. Можно обновлять с реестра детали по событию "DataSourceSaved".

Не ловится сигнал.
В процессе карточки редактирования записи детали делаю так:
refresh

В процессе страницы РАЗДЕЛА делаю так:
refresh

В скрипте написано

bool RefreshBaseModuleGridScriptTaskExecute(ProcessExecutingContext context){
 
Page.BaseMessagePanel.AddMessage("DEBUG", "ВНИМАНИЕ!!!", 
			"REFRESH GRID SIGNAL CATCHED!!!", 
			MessageType.Warning); //ЭТО ДЛЯ ОТЛАДКИ
 
Page.AddScript("window.PageContainer_DocumentsModulePage_Grid_TreeGrid.refreshData();");
 
return true;
 
}

НИЧЕГО НЕ ПРОИСХОДИТ.......

Здравствуйте, Александр.

Попробуйте обновлять реестр в скрипте так:

Page.TreeGrid.Clear();
Page.DataSource.LoadRows();
Page.TreeGrid.RefreshData();

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

Не работает, не понимаю.......

Как мне понять, что сигнал доходит?

Александр, тогда не нужно передавать сигнал в родительский процесс. Просто используйте предложенный скрипт прямо на событии сохранения датасета:
Page.AddScript("window.PageContainer_DocumentsModulePage_Grid_TreeGrid.refreshData();");

АААААА, заработало, чтоб ей пусто было!!!! :smile:

Всем спасибо огромное!
Хороших выходных!

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