Добрый день!
Надо получить данные открытой и заполненной формы (чекбоксы и значения полей). На странице редактирования, к примеру, активности, я провожу заполнение её полей, далее нажимаю "ОК" и стартует процесс этой страницы. После этого, НЕ в модуле этой карточки происходит нужное мне действие, которое мне надо править (если проходиться дебаггером). Но для этого мне надо как раз некоторые данные именно из этой формы. Каким кодом я могу обратиться к ним, к открытой странице редактирования чего-либо?
Спасибо заранее!
Нравится
Здравствуйте, Виталий!
Не совсем ясна Ваша задача. Вам необходимо проводить отладку процесса, но при этом Вам необходимы данные страницы. Вы можете создать параметры процесса и передать туда параметры со страницы (на самом деле достаточно передать 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"];
могу получить значения, сохраненные в той переменной моей же сессии (только этого пользователя). При чем могу эти значения вычитать произвольное количество раз и записать произвольное количество раз.
Всё ли я правильно понял? Самое основное, что меня интересует - это отсутствие привязки к месту, где я обращаюсь к значению, сохраненному в переменной моей сессии.
Да, Вы правы. Но только в пределах сессии пользователя. Если параллельный процес запущен по какому-то событию в пользовательском интерфейсе, то нормально. А если по таймеру-кварцу или внешней интеграции — сессия уже, наверно, другая.
Это как раз то, что мне нужно. Александр, очень благодарен Вам!