Фильтр по контакту с добавление нескольких пользователей

Добрый день!

Пытаюсь реализовать в новом разделе фильтр по контакту, как в разделе Задачи.

Должна быть возможность выбора нескольких контактов, как в Задачах. Смогла реализовать фильтр по одному контакту

function ApplyContactFilter() {
       
        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;
}

Как добиться того, чтобы фильтрация шла по всем выбраным контактам?

Нравится

2 комментария

Здравствуйте.

Дело в том, что Вы используете фильтр сравнения, т.е.

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);
			}

Спасибо, поменяла, все работает как надо:twisted:

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