Как активировать действие фильтрации для пользовательского поля, добавленного в сетку - PullRequest
0 голосов
/ 19 апреля 2019

У меня есть настройка на экран Release Time Activity (EP507020), где я добавляю поле пользователя.Это пользовательское поле будет содержать результат выборки статуса встречи из экрана «Встречи» (FS300200) на основе идентификатора встречи, который я также добавил в сетку экрана «Время отпуска».

Это было сделано для того, чтобыСетка процесса может быть отфильтрована для статуса назначения, которые имели определенное значение.Добавленное мной поле «Пользователь статуса встречи» содержит те же атрибуты, что и поле «Состояние» на экране «Встречи», с расширением «Кэш», которое выглядит следующим образом:

    #region UsrApptStatus
    public abstract class usrApptStatus : IBqlField
    {
    }

    [PXDBString(1)]
    [FSAppointment.status.ListAtrribute]
    [PXUIField(DisplayName = "Appt Status",Enabled = false)]
    public virtual string UsrApptStatus { get; set; }
    #endregion

Это прекрасно работает, когда я получаю статус следующим образом.в расширении графика:

    protected virtual void EPActivityApprove_RowSelected(PXCache sender, PXRowSelectedEventArgs e)
    {
        var epactivityapprove = (EPActivityApprove)e.Row;
        if (epactivityapprove != null)
        {
            FSxPMTimeActivity rowExt = epactivityapprove.GetExtension<FSxPMTimeActivity>();
            if (rowExt != null)
            {
                var appointmentID = rowExt.AppointmentID;

                var fsappt = (FSAppointment)PXSelect<FSAppointment,
                                            Where<FSAppointment.appointmentID, Equal<Required<FSAppointment.appointmentID>>>>.Select(Base, appointmentID);

                var epactivityapproveext = PXCache<EPActivityApprove>.GetExtension<EPActivityApproveExt>(epactivityapprove);

                epactivityapproveext.UsrApptStatus = fsappt.Status;
            }
        }
    }

Проблема в том, что когда я иду к фильтру столбца Status, независимо от того, что я выбираю из списка параметров, он очищает все строки.Я понятия не имею, почему это не сработает, но я уверен, что что-то упустил.

Сетка перед фильтрацией:

Grid before filtering

Фильтр:

enter image description here

Сетка после фильтра:

enter image description here

1 Ответ

0 голосов
/ 20 апреля 2019

Мне кажется, что изменение значения в событии RowUpdated мешает работе фильтра. Если вы написали оба расширения, было бы полезно иметь оба настраиваемых поля в одном расширении и использовать атрибут PXFormula, чтобы установить значение вашего статуса на основе поля AppointmentID. Таким образом, вам не придется полагаться на событие:

#region UsrApptStatus
public abstract class usrApptStatus : IBqlField
{
}

[PXDBString(1)]
[FSAppointment.status.ListAtrribute]
[PXFormula(typeof(Selector<appointmentID, FSAppointment.status>))]
[PXUIField(DisplayName = "Appt Status",Enabled = false)]
public virtual string UsrApptStatus { get; set; }
#endregion
...