Подскажите, пожалуйста, как сделать фильтры по аналогии с "показывать для контакта" на вкладке "задачи" окна wnd_MsOutlookSynchronization

Нравится

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

Добрый день!

Добавить легко, но не в этом ведь дело. Предполагаю, что Вы хотите, чтобы этот фильтр еще и работал.

Это сделать нельзя, поскольку синхронизация возможна только с соединенной конфигурацией для текущего пользователя.

Добрый день!

Спасибо за отклик.

Что Вы подразумеваете под "с соединенной конфигурацией для текущего пользователя"?

Нужно добавить фильтры "тип задачи", "статус задачи" и "дата создания". Эти фильтры влияют лишь на список задач, которые будут импортироваться в аутлук, на сам процесс экспорта они вроде бы не влияют. Интересует, где именно происходит фильтрация.

Имелась в виду часть, отвечающая за выбор групп в Outlook. Если Вы подразумеваете фильтры по данным в Terrasoft, то это, в принципе, реализуемо. Все что надо - получить необходимый dataset, и наложить на него ApplyDatasetFilter (звучит легче, чем это есть на самом деле). Удачи :smile:

В том-то и беда, что фильтровать нужно mds_MSOutlookTaskTS, а mds как-то по хитрому фильтруется. к тому же, не могу пока отследить, где именно происходить фильтрация по контактам.

Добрый день! Да, в таком случае это будет посложнее, но Вы можете попробовать это сделать следующим образом (приблизительный алгоритм):

Для набора данных установить свойство IsFiltered в true (пример функции из базовой конфигурации):

function SetIsFiltered(Dataset, IsFiltered) {
	if (IsFiltered) {
		Dataset.IsFiltered = false;
		Dataset.IsFiltered = true;
	} else {
		Dataset.IsFiltered = false;	
	}
}

У датасета есть свойство OnDatasetFilterRecord, на которое следует обратить внимание:

http://www.community.terrasoft.ru/system/files/1_71.png

Пример его использования можно посмотреть в скрипте wnd_MethodListScript

function dlDataOnDatasetFilterRecord(Dataset, DoAccept) {
	var FunctionName = Dataset.ValAsStr('FunctionName').toUpperCase();
	var FilterValue = edtFilterValue.Value.toUpperCase();
	DoAccept.Value = (FunctionName.indexOf(FilterValue) != -1);
}

Спасибо за ответы! Удалось разобраться самостоятельно. Если вкратце,то нужно было изменить следующие сервисы и функции:

a) Два фильтра сравнения в sq_Task: TaskTypeID и TaskStatusID
b) Фильтры на окне – обработчик событий OnChange в скрипте scr_MsOutlookSynchronization
c) FilteredItemDataset(IsChecked) в том же скрипте
d) function FilterDatasetByGroup(GroupDataset, MemoryDataset, IsContactSync, IsTaskSync, FilteredDate, OwnerID, TaskTypeID, TaskStatusID) в скрипте scr_MSOutlookSynchronizationUtils
e) function SetItemMemoryDataset(Dataset, MemoryDataset, IsContact, FilteredDate, OwnerID, TaskTypeID, TaskStatusID) в том же скрипте

То есть из обработчиков фильтров на окне через атрибуты объекта передаются значения фильтров в функцию SetItemMemoryDataset, а там уже фильтруется датасет задач и заполняется mds.

Ну и чудненько :smile:

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