При обновлении контактов я просто удаляю старый контакт и заменяю его новым, потому что не могу удосужиться проверить все поля всех контактов.
private void ThisAddIn_Startup(object sender, System.EventArgs e)
{
string sTempPath = GetTemporaryDirectory();
//RequestContacts();
ExtractContacts(sTempPath);
ImportContacts(sTempPath);
}
«RequestContacts()» загружает контакты с сервера в виде zip-файла в каталог приложений.
public string GetTemporaryDirectory()
{
string tempDirectory = Path.Combine(Path.GetTempPath(), Path.GetRandomFileName());
Directory.CreateDirectory(tempDirectory);
return tempDirectory;
}
Это просто находит временную папку для извлечения контактов, а затем импортирует их в Outlook.
private void ExtractContacts(string sExtractPath)
{
string sImportPath = Path.GetDirectoryName(Assembly.GetExecutingAssembly().GetName().CodeBase);
string sZipPath = sImportPath.Substring(6, sImportPath.Length - 6) + "/contacts.zip";
ZipFile.ExtractToDirectory(sZipPath, sExtractPath);
}
Это извлекает загруженные контакты из zip во временную папку.
private void ImportContacts(string sImportPath)
{
var oldContacts = Application.Session.GetDefaultFolder(Outlook.OlDefaultFolders.olFolderContacts).Items.Cast<Outlook.ContactItem>()
.Where(c => c.ManagerName.Equals("QERP"));
foreach (var oldContact in oldContacts)
{
oldContact.Delete();
}
var newContacts = Directory.GetFiles(sImportPath, "*.vcf").Select(Application.Session.OpenSharedItem).Cast<Outlook.ContactItem>();
foreach (var newContact in newContacts)
{
newContact.ManagerName = "QERP";
newContact.Save();
}
}
Это удаляет старые контакты, которые мы загрузили, а не контакты, которые мы не загрузили этим приложением.
Проблема в том, что он не удаляет все контакты. По какой-то причине он всегда удаляет половину + 1.