Delphi: Импорт контактов из Microsoft Outlook

Николай18 лет в сервисе
Данные заказчика будут вам доступны после подачи заявки
09.04.2008

Есть классы Delphi, реализующие стандарт vCard 2.1 (TVisitCard, TVisitCardList).

Для этих классов необходимо написать импорт контактов из Microsoft

Outlook.

Должны импортироваться все поля контактов, поддерживаемые текущей версией MS Outlook.

Поддерживаемые версии MS outlook - Outlook'2000, Outlook'2003, Outlook'2007.

Параметры импорта:

1) Источник данных в MS Outlook - из трех вариантов: дефолтная папка Outlook, папка по выбору с помощью диалогового окна Аутлука, папка с сохраненным путем;

2) Приведение номера телефона из MS outlook к набирабельному - через callback - ConvertNumberCallback;

Поддерживаемые фильтры:

1) по категориям: либо импортируются только контакты из указанных категорий, либо наоборот; "без категории" - как отдельная категория;

а) Список категорий, не подлежащих импорту;

б) Список категорий, для которых осуществляется импорт;

2) по содержанию полей: из импорта исключаются контакты и/или поля, не удовлетворяющие каким-то условиям;

а) не включаются в импорт контакты, не содержащие телефонных номеров;

б) в VCard'ы добавляются поля только указанных типов (для недобавления неномерных полей или полей, не поддерживаемых конкретным телефоном);

Дополнительные требования:

1) оформление кода в соответствии с нашим правилами;

2) прогресс процесса импорта с помощью callback'ов;

3) результат должен представлять из себя отдельный модуль на Delphi, к которому должна прилагаться тестовая программа (в исходниках), иллюстрирующая его работоспособность.

Форматы структур и функций:

TImportProgress = procedure(Current, Total: Integer; var Stop: Boolean) of object;

//Current - индекс текущего импортируемого объекта, Total - общее количество; Stop - обрабатывается; если True, то процедура импорта завершается.

TConvertNumber = function(PhoneNumber: String): String of object;

TImportParameters=class

OnlyCategories: Boolean; //True - только указанные в CategoryList категории; False - все категории, кроме указанных в CategoryList

CategoryList: TWideStringList;

IncludeContactsWONumbers: Boolean;

ConvertNumberCallback: TConvertNumber;

end;

function ImportContactsFromOutlookDefault(const Parameters: TImportParameters; out ContactList: TVisitCardList; Prg: TImportProgress = nil): Integer;

function ImportContactsFromOutlookDialog(const Parameters: TImportParameters; out ContactList: TVisitCardList; Prg: TImportProgress = nil): Integer;

function ImportContactsFromOutlookPath(const Parameters: TImportParameters; out ContactList: TVisitCardList; Prg: TImportProgress = nil): Integer;

//функции возвращают код ошибки

P.S. Точно такая же задача стоит для Microsoft Exсhange и Lotus Notes.