Вопрос
Фильтр по контакту с добавление нескольких пользователей
21 сентября 2012 16:07
Добрый день!
Пытаюсь реализовать в новом разделе фильтр по контакту, как в разделе Задачи.
Должна быть возможность выбора нескольких контактов, как в Задачах. Смогла реализовать фильтр по одному контакту
function ApplyContactFilter() {
if (chkContact.IsChecked) {
ApplyDatasetFilter(Dataset, 'OwnerID', ContactFilter.Value,
chkContact.IsChecked);
}
}
if (chkContact.IsChecked) {
ApplyDatasetFilter(Dataset, 'OwnerID', ContactFilter.Value,
chkContact.IsChecked);
}
}
и при нажатии кнопки "+" появляется новое поле, где выбирается другое контакт, но фильтрация идет только по первому контакту
function AddDynamicLookupControl(ContactID, Enabled) {
if (!ContactID) {
return;
}
if (Enabled == undefined) {
Enabled = true;
}
var MainLookup = Self.ComponentsByName('ContactFilter');
var Color = GetFreeColor();
if (Color == 0xFFFFFFFF) {
return;
}
if (IsEmptyValue(LimitsWorkspace.FilterComponentsCounter)) {
LimitsWorkspace.FilterComponentsCounter = 1;
} else {
LimitsWorkspace.FilterComponentsCounter += 1;
}
var ParentWindow = MainLookup.ParentWindow;
var frmComponent = Self.ComponentsByname('FrameGroup2');
var Frame = ParentWindow.CreateComponent('FrameGroup', 'fgFilter' +
LimitsWorkspace.FilterComponentsCounter);
var Control = ParentWindow.CreateComponent('LookupControl',
'ContactFilter' + LimitsWorkspace.FilterComponentsCounter);
var CheckBox = ParentWindow.CreateComponent('CheckBox',
'cbFilter' + LimitsWorkspace.FilterComponentsCounter);
Frame.Direction = dHorizontal;
Frame.AlignHorizontal = alhClient;
Control.Tag = CheckBox.Name;
CheckBox.Tag = Control.Name;
SetObjectEventDispatcher(Self, Control, Control.Name,
'OnChange', 'LookupControlOnChange');
SetObjectEventDispatcher(Self, CheckBox, CheckBox.Name,
'OnClick', 'CheckBoxOnClick');
var Buttons = Self.ComponentsByName('amContactFilterOper');
Control.LookupDatasetLink = dlContact;
Control.Color = Color;
Frame.Add(CheckBox);
Frame.Add(Control);
CheckBox.AlignHorizontal = alhLeft;
CheckBox.Width = 15;
CheckBox.IsChecked = Enabled;
Control.AlignHorizontal = alhClient;
frmComponent.Add(Frame);
Control.Buttons = Buttons;
Control.DisableEvents();
try {
Control.Value = ContactID ? ContactID : null;
} finally {
Control.EnableEvents();
}
ContactAdd.IsVisible = true;
}
if (!ContactID) {
return;
}
if (Enabled == undefined) {
Enabled = true;
}
var MainLookup = Self.ComponentsByName('ContactFilter');
var Color = GetFreeColor();
if (Color == 0xFFFFFFFF) {
return;
}
if (IsEmptyValue(LimitsWorkspace.FilterComponentsCounter)) {
LimitsWorkspace.FilterComponentsCounter = 1;
} else {
LimitsWorkspace.FilterComponentsCounter += 1;
}
var ParentWindow = MainLookup.ParentWindow;
var frmComponent = Self.ComponentsByname('FrameGroup2');
var Frame = ParentWindow.CreateComponent('FrameGroup', 'fgFilter' +
LimitsWorkspace.FilterComponentsCounter);
var Control = ParentWindow.CreateComponent('LookupControl',
'ContactFilter' + LimitsWorkspace.FilterComponentsCounter);
var CheckBox = ParentWindow.CreateComponent('CheckBox',
'cbFilter' + LimitsWorkspace.FilterComponentsCounter);
Frame.Direction = dHorizontal;
Frame.AlignHorizontal = alhClient;
Control.Tag = CheckBox.Name;
CheckBox.Tag = Control.Name;
SetObjectEventDispatcher(Self, Control, Control.Name,
'OnChange', 'LookupControlOnChange');
SetObjectEventDispatcher(Self, CheckBox, CheckBox.Name,
'OnClick', 'CheckBoxOnClick');
var Buttons = Self.ComponentsByName('amContactFilterOper');
Control.LookupDatasetLink = dlContact;
Control.Color = Color;
Frame.Add(CheckBox);
Frame.Add(Control);
CheckBox.AlignHorizontal = alhLeft;
CheckBox.Width = 15;
CheckBox.IsChecked = Enabled;
Control.AlignHorizontal = alhClient;
frmComponent.Add(Frame);
Control.Buttons = Buttons;
Control.DisableEvents();
try {
Control.Value = ContactID ? ContactID : null;
} finally {
Control.EnableEvents();
}
ContactAdd.IsVisible = true;
}
Как добиться того, чтобы фильтрация шла по всем выбраным контактам?
Нравится
2 комментария
24 сентября 2012 10:18
Здравствуйте.
Дело в том, что Вы используете фильтр сравнения, т.е.
WHERE Contact.ID = '{_some_id_}'
а нужен фильтр типа IN:
WHERE Contact.ID IN '{_some_id_1}', '{_some_id_2}'
Т.е. функцию ApplyContactFilter() нужно изменить примерно так:
if (IDs.length > 1) { EnableDatasetFilters(Dataset, false, 'CreatedByID'); ApplyDatasetIncludeFilter(Dataset, 'OwnerIDs', IDs, true); } else { EnableDatasetFilters(Dataset, false, 'CreatedByIDs'); ApplyDatasetFilter(Dataset, 'OwnerID', TaskOwnerID, ShowForContact); }
Показать все комментарии
Войдите или зарегистрируйтесь, что бы комментировать