Фільтрація для елемента [Открыть страницу выбора из справочника]
У карточці редагування сутності [запрос] у відповідному полі прописано контент-супервізора.
Для вибору контент-менеджера, зі списку доступних, застосовується елемент керування [Открыть страницу выбора из справочника] (OpenLookupGridPage).
Елемент керування має атрибути:
Потрібно на список контент-менеджерів накласти фільтр: супервізор є безпосередній керівник менеджера.
Вичислив форму, яка пов"язана з елементом керування: [OwnerSelectionGridPage]
Вирішив добавити для OpenLookupGridPage додатковий параметр:
pageParameters.Add("currentSupervisorUId", userContact.ToString());//[current Supervisor]
...
OpenLookupGridPage.PageParameters = pageParameters;
В скипті обробки параметрів:
Page.BaseMessagePanel.AddMessage(Warning, "TEST currentSupervisorUId: ["+currentSupervisorUId+"]", MessageType.Information);
І значення отримую пусте.
Що не так ?
Нравится
От, якщо, через UserConnection.SessionData["currentSupervisorUId"], тоді передане значення отримую.
Але наскільки коректно користуватися даними сесії для передачі параметра з вікна у вікно ?
Здравствуйте, Игорь!
Передавать параметры через сессию корректно.
Попробуйте получать параметр следующим образом:
object hideButtons;
.......
pageParameters.TryGetValue("hideButtons", out hideButtons);
.......
if (hideButtons != null) {
tempValues.Add("hideButtons", hideButtons);
.......
userConnection.SessionData[UserContextKey] = tempValues;
.......
Если открыть сценарий самого элемента действия процесса, то можно увидеть, что в нем в конечном результате параметры как раз и передаются через сессию, как видно из фрагмента кода чуть выше.
Обійшовся конструкцією для збереження параметра:
var userContact = Page.DataSource.ActiveRow.GetTypedColumnValue<Guid>("OwnerId"); UserConnection.SessionData["currentSupervisorUId"] = userContact;
і для читання:
Guid currentSupervisorUId = (Guid)UserConnection.SessionData["currentSupervisorUId"];
Тепер ще мороку маю ...
На даний момент плашка "Установить Content-менеджера" доступна за виконання кількох умов, одна з яких - активація чекбокса "Срочно" на пару з "Ожидаемая дата".
Потрібно плашку "Установить Content-менеджера" зробити завжди активною.
Але, далі проявляє себе та причина, з якої атрибут "Ожидаемая дата" відмічається як обов"язковий:
якщо дату не визначити, то при спробі натиснути "Установить Content-менеджера"виходить помилка:
Exception Message: The conversion of a nvarchar data type to a datetime data type resulted in an out-of-range value.
І ніде не можу знайти, де задіяно використання атрибута "Ожидаемая дата".
Десь воно в системному елементі зав"язано. Але де і як туди дістатися ?
Потрібно пару чекбокс-дата відв"язати від обробки плашки "Установить Content-менеджера".
Це взагалі можливо ?
Игорь, добрый вечер.
О какой странице Вы говорите?
Какого типа эти поля?
Опишите, пожалуйста, проблему более детально со скриншотами.
Спасибо.
Доброго ранку!
Мова про ChangeRequestEditPage
На даний момент плашка "Установить Content-менеджера" (SetTaskOwnerButton) залежить від підняття флажка "Срочно" (IsCustomeDeadlineCheckBox) і виставлення поля "Ожидаемая дата" (DeadlineDateEdit).
Потрібно зробити плашку "SetTaskOwnerButton" доступною безвідносно до "IsCustomeDeadlineCheckBox".
Але, без набуття значення полем "DeadlineDateEdit" при натисненні "SetTaskOwnerButton" виникає помилка:
Exception Message: The conversion of a nvarchar data type to a datetime data type resulted in an out-of-range value.
Помилка виникає на етапі "Открыть страницу выбора из справочника".
Коли "DeadlineDateEdit" містить значення, то при натисненні "SetTaskOwnerButton" відкривається вікно "Страница выбора Content-менеджера" (OwnerSelectionGridPage).
Коли "DeadlineDateEdit" не містить значення, то при натисненні "SetTaskOwnerButton" виникає вище вказана помилка. До скриптів "InitScriptTask" та "PageLoadCompleteScriptTask" сторінки "OwnerSelectionGridPage" справа не доходить.
В скрипті "PrepareOpenLookupGridPageScriptTaskExecute" сторінки "ChangeRequestEditPageEventsProcess" є такі визначення:
var pageParameters = new Dictionary<string, object>(); pageParameters.Add("lookupPageSchemaUId", new Guid("832fb1e2-fd4f-4c19-8dc8-1a505de876a1"));//[OwnerSelectionGridPage] ... UserConnection.SessionData["customDeadLine"] = Page.DeadlineDateEdit.Value; OpenLookupGridPage.PageParameters = pageParameters;
Здравствуйте, Игорь!
Просто добавьте проверку в скрипте:
if (Page.DeadlineDateEdit.Value != Datetime.MinValue) { UserConnection.SessionData["customDeadLine"] = Page.DeadlineDateEdit.Value; }
Добавив перевірку:
if (!Equals(Page.DeadlineDateEdit.Value,DateTime.MinValue)) { UserConnection.SessionData["customDeadLine"] = Page.DeadlineDateEdit.Value; }
Не помогло
Exception Message: The conversion of a nvarchar data type to a datetime data type resulted in an out-of-range value. Exception Type: System.Data.SqlClient.SqlException Exception Source: .Net SqlClient Data Provider
Десь глибше це значення використовується. Та й на цей момент я вже переконався, що скрипт підготовки до натиснення плашки нормально відпрацьовує, а помилка виникає на етапі реалізації виділеного елемента.
Це я для проформи вирішив перевірити.
Щоб не порушувати загальну логіку обробки IsCustomeDeadlineCheckBox
Вирішив в скрипті [ChangeRequestEditPageEventsProcess] штучно прописувати включення чек-боксу.
Але щось не вдається.
Добавив ось такий код:
var isCustomeDeadline = Page.IsCustomeDeadlineCheckBox.Checked; Page.BaseMessagePanel.AddMessage(Warning, "isCustomeDeadline = "+isCustomeDeadline.ToString(), MessageType.Information); if (!isCustomeDeadline) { Page.IsCustomeDeadlineCheckBox.Checked = true; isCustomeDeadline = Page.IsCustomeDeadlineCheckBox.Checked; Page.BaseMessagePanel.AddMessage(Warning, "isCustomeDeadline = "+isCustomeDeadline.ToString(), MessageType.Information); }
Перший Message видає [false]
Другий - [true], але візуально сам флажок не вмикається.
Як його увімкнути ?
Игорь,
добавьте еще:
Page.IsCustomeDeadlineCheckBox.SetValue(true);
В базі значення є.
Page.DataSource.ActiveRow.GetTypedColumnValue("DeadlineDate"); - видає правильне значення
Page.DeadlineDateEdit.Value - видає [DateTime.MinValue]
Игорь, обращаясь к свойству Value контрола, Вы обращаетесь к серверу, где, вероятно, нет значения.
Правильнее обращаться как раз через ActiveRow.