Фільтрація для елемента [Открыть страницу выбора из справочника]

У карточці редагування сутності [запрос] у відповідному полі прописано контент-супервізора.
Для вибору контент-менеджера, зі списку доступних, застосовується елемент керування [Открыть страницу выбора из справочника] (OpenLookupGridPage).

Елемент керування має атрибути:

Потрібно на список контент-менеджерів накласти фільтр: супервізор є безпосередній керівник менеджера.

Вичислив форму, яка пов"язана з елементом керування: [OwnerSelectionGridPage]

Вирішив добавити для OpenLookupGridPage додатковий параметр:

var userContact = Page.DataSource.ActiveRow.GetTypedColumnValueGuid>("OwnerId");
pageParameters.Add("currentSupervisorUId", userContact.ToString());//[current Supervisor]
...
OpenLookupGridPage.PageParameters = pageParameters;

В скипті обробки параметрів:
string currentSupervisorUId = (string)Page.GetParameterValue("currentSupervisorUId");
Page.BaseMessagePanel.AddMessage(Warning, "TEST currentSupervisorUId: ["+currentSupervisorUId+"]", MessageType.Information);

І значення отримую пусте.
Що не так ?

Нравится

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

От, якщо, через 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);

Добавив, не допомагає.

Мало того, що [IsCustomeDeadlineCheckBox] не хоче відображати змінюване значення, так ще й [DeadlineDateEdit] неможливо прочитати:

Виділив значення прочитане і значення відображене.
Як таке може бути ?

Игорь,

а в базе данных значение меняется?

В базі значення є.
Page.DataSource.ActiveRow.GetTypedColumnValue("DeadlineDate"); - видає правильне значення
Page.DeadlineDateEdit.Value - видає [DateTime.MinValue]

Игорь, обращаясь к свойству Value контрола, Вы обращаетесь к серверу, где, вероятно, нет значения.

Правильнее обращаться как раз через ActiveRow.

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