Получение данных формы из другого модуля

Добрый день!

Надо получить данные открытой и заполненной формы (чекбоксы и значения полей). На странице редактирования, к примеру, активности, я провожу заполнение её полей, далее нажимаю "ОК" и стартует процесс этой страницы. После этого, НЕ в модуле этой карточки происходит нужное мне действие, которое мне надо править (если проходиться дебаггером). Но для этого мне надо как раз некоторые данные именно из этой формы. Каким кодом я могу обратиться к ним, к открытой странице редактирования чего-либо?

Спасибо заранее!

Нравится

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

Здравствуйте, Виталий!

Не совсем ясна Ваша задача. Вам необходимо проводить отладку процесса, но при этом Вам необходимы данные страницы. Вы можете создать параметры процесса и передать туда параметры со страницы (на самом деле достаточно передать Id записи, а потом элементом "Чтение данных" подтянуть остальные параметры). Уточните, пожалуйста, Вашу задачу.

А также уточните, пожалуйста, версию и продукт, в котором Вы работаете.

Спасибо, что уделили время моему вопросу!

Программный продукт: Realty v5.4. (вроде ж тему создал в нужном разделе...)

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

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

Page.someCheckBox1Edit.Value

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

Параметры процесса тоже выход, но не хотелось бы засорять ненужным структуру процесса. Тем более, эти параметры должны браться как-то из открытой формы. Мне нужно что-то типа:

UserConnection.OpenedPages.GetPage("MyPage").someCheckBox1Edit.Value

Это не реальный код, а просто прообраз того, как (может быть - потому и спрашиваю!) мне получить то, что мне нужно.

Думал как-то прикрутить это:

GetInstanceByName()

но как-то ума не приложу, что и к чему...(

Боюсь, что такого механизма нет и придётся вручную записывать и считывать значения в UserConnection.SessionData. Примеры работы с ней можно найти на Community или в исходниках других страниц.

Нашел по "UserConnection.SessionData" вот это:

http://www.community.terrasoft.ua/forum/topic/9471

Среди всех постов есть вот такой код, по которому у меня еще несколько вопросов:

var defValuesId = new Guid("775F0C4C-9176-449E-B284-4108272F87AA");
var defValues = new Dictionary <string, object>();
 
defValues.Add("Type", new Guid("E2831DEC-CFC0-DF11-B00F-001D60E938C6"));
defValues.Add("Account", Customer );
defValues.Add("PGNHK_AuctionLot", AuctionLot );
defValues.Add("Notes", Notes );
 
UserConnection.SessionData[defValuesId.ToString()] = defValues;

Правильно ли я понял. Для текущего пользователя создается переменная с названием "defValuesId.ToString()" и в нее передается коллекция "defValues" типа "Dictionary()" с ранее инициализированными значениями этой коллекции. В любом (в любом?) другом месте я, используя код:

var myDefValues = UserConnection.SessionData["775F0C4C-9176-449E-B284-4108272F87AA"];

могу получить значения, сохраненные в той переменной моей же сессии (только этого пользователя). При чем могу эти значения вычитать произвольное количество раз и записать произвольное количество раз.

Всё ли я правильно понял? Самое основное, что меня интересует - это отсутствие привязки к месту, где я обращаюсь к значению, сохраненному в переменной моей сессии.

Да, Вы правы. Но только в пределах сессии пользователя. Если параллельный процес запущен по какому-то событию в пользовательском интерфейсе, то нормально. А если по таймеру-кварцу или внешней интеграции — сессия уже, наверно, другая.

Это как раз то, что мне нужно. Александр, очень благодарен Вам!

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