<< Click to Display Table of Contents >> Разработка > Примеры разработки > Папки и списки > Как настроить валидацию панели фильтрации для входящих документов Шаг 1. Создание папки – аналог списка входящих документов |
Список входящих документов настроен в базовом типе сущности «Входящий документ» (IncomingDocumentBase). Базовые типы нельзя перекрывать. Поэтому, чтобы настроить валидацию панели фильтрации для входящих документов, нужно создать папку, которая заменит список входящих документов.
Для этого:
1.В вашем решении перекройте модуль Sungero.RecordManagementUI и добавьте зависимость от него. Если зависимости не указаны, при публикации могут возникнуть ошибки.
2.В редакторе перекрытого модуля создайте вычисляемую папку – аналог списка входящих документов. Для этого перейдите в узел «Папки» и нажмите на кнопку Добавить.
3.Заполните именование и параметры папки, как показано на скриншоте.
ПРИМЕЧАНИЕ. К имени папки автоматически добавился постфикс с кодом вашей компании, так как при установке среды разработки был установлен флажок Уникальные имена при перекрытии. В нашем примере код компании – DEV.
4.Добавьте логику вычисления содержимого папки и условия фильтрации. Для этого откройте редактор базового типа сущности «Входящий документ» (IncomingDocumentBase) и скопируйте код события Фильтрация. В редакторе созданной вычисляемой папки в группе «События» установите флажок Получение данных и перейдите по ссылке. В открывшемся редакторе вставьте код:
public virtual IQueryable<Sungero.Docflow.IIncomingDocumentBase> IncomingDocumentsDataQuery(IQueryable<Sungero.Docflow.IIncomingDocumentBase> query)
{
if (_filter == null)
return query;
// Фильтр по журналу регистрации.
if (_filter.DocumentRegister != null)
query = query.Where(d => Equals(d.DocumentRegister, _filter.DocumentRegister));
// Фильтр по виду документа.
if (_filter.DocumentKind != null)
query = query.Where(d => Equals(d.DocumentKind, _filter.DocumentKind));
// Фильтр по статусу.
// Если все галочки включены, то нет смысла добавлять фильтр.
if (_filter.Registered != _filter.NotRegistered)
query = query
.Where(d => _filter.Registered && d.RegistrationState == Sungero.Docflow.OfficialDocument.RegistrationState.Registered ||
_filter.NotRegistered && d.RegistrationState == Sungero.Docflow.OfficialDocument.RegistrationState.NotRegistered);
// Фильтр по контрагенту.
if (_filter.Counterparty != null)
query = query.Where(d => Equals(d.Correspondent, _filter.Counterparty));
// Фильтр по подразделению.
if (_filter.Department != null)
query = query.Where(c => Equals(c.Department, _filter.Department));
// Фильтр по интервалу времени.
var periodBegin = Calendar.UserToday.AddDays(-7);
var periodEnd = Calendar.UserToday.EndOfDay();
if (_filter.LastWeek)
periodBegin = Calendar.UserToday.AddDays(-7);
if (_filter.LastMonth)
periodBegin = Calendar.UserToday.AddDays(-30);
if (_filter.Last90Days)
periodBegin = Calendar.UserToday.AddDays(-90);
if (_filter.ManualPeriod)
{
periodBegin = _filter.DateRangeFrom ?? Calendar.SqlMinValue;
periodEnd = _filter.DateRangeTo ?? Calendar.SqlMaxValue;
}
var serverPeriodBegin = Equals(Calendar.SqlMinValue, periodBegin) ? periodBegin : Sungero.Docflow.PublicFunctions.Module.Remote.GetTenantDateTimeFromUserDay(periodBegin);
var serverPeriodEnd = Equals(Calendar.SqlMaxValue, periodEnd) ? periodEnd : periodEnd.EndOfDay().FromUserTime();
var clientPeriodEnd = !Equals(Calendar.SqlMaxValue, periodEnd) ? periodEnd.AddDays(1) : Calendar.SqlMaxValue;
query = query.Where(j => (j.DocumentDate.Between(serverPeriodBegin, serverPeriodEnd) ||
j.DocumentDate == periodBegin) && j.DocumentDate != clientPeriodEnd);
return query;
}
5.Настройте для папки представление по умолчанию.
Таким образом вы создали вычисляемую папку для входящих документов.
© Компания Directum, 2024 |