Апострофы сокращаются и избегают проблем с символами в Outlook DASL Queries - PullRequest
0 голосов
/ 08 июня 2018

У меня есть плагин для Outlook, который я написал на C #, он сканирует электронные письма и перетасовывает их в разные папки.Потому что термины, которые мы ищем, меняются достаточно часто, поэтому их добавление в программу в качестве переменных будет совершенно неприемлемо;к тому же списки довольно длинные!Я сделал так, чтобы код выполз из строки в CSV и использовал этот термин в запросе DASL.

Моя проблема в том, что когда мы должны искать слова типа «не», «не имею», «не должен», «Дейв» и другие сокращения или притяжательные существительные, возникают проблемы.Я перепробовал все, что мог придумать, чтобы улучшить проблему, к сожалению, я в растерянности.Программа работает без нареканий, если не введено сокращение.Пожалуйста, помогите:)

Наиболее релевантный фрагмент кода такой:

         using (StreamReader r = new StreamReader(fileLoc))
        {
            //while != null to kill the loop
            string line;
            string prefix = @"@SQL=urn:schemas:httpmail:textdescription like '"; 
            string postfix = @"'";
            while ((line = r.ReadLine()) != null)
            {
                //slurp the csv line out, and spit it into DASL query.
                line = prefix + line + postfix;
                lines.Add(line);

            }
        } //closes out the streamreader object?
        string[] outputArray = lines.ToArray();
        return outputArray;

Мой CSV-файл выглядит примерно так:

%i do not%
%i flipped it%
%no thanks%

Когда я пытаюсь добавитьчто-то вроде%, не делай этого% или% не будет%, у меня проблемы.

Я пробовал такие вещи, как% don''t%,% "not"%,% don /'t%,% dochr (39) t%, к сожалению, все безуспешно.

Как заставить запрос DASL принять апостроф?И как мне заставить его принять этот апостроф, если он существует в записи в файле CSV?

Спасибо :))

Редактировать Это модуль, который я использую для поиска в электронных письмах сзапрос DASL, может ли он помочь кому-то решить проблему.

  public void SearchEmailBodyWithArray(string[] filter)
        {
            //this is the workhorse of this program
            MessageBox.Show("Pick Source Folder");
            Outlook.MAPIFolder olFolder = Application.Session.PickFolder();
            MessageBox.Show("Pick Destination Folder");
            Outlook.MAPIFolder destFolder = Application.Session.PickFolder();
            Outlook.Items items = olFolder.Items;
            Outlook.MailItem mailItem = null;

            object folderItem;
            string subjectName = string.Empty;

            int f = 0;
            while ( f < filter.Length)
            {
                folderItem = items.Find(filter[f]);
                while (folderItem != null)
                {
                    mailItem = folderItem as Outlook.MailItem;
                    if (mailItem != null)
                    {
                        subjectName += "\n" + mailItem.Subject;
                        mailItem.Move(destFolder);


                    }
                    folderItem = items.FindNext();
                }
                f++;
            }
            subjectName = " The following e-mail messages were found: " +
                subjectName;
            MessageBox.Show(subjectName);

        }

1 Ответ

0 голосов
/ 21 декабря 2018

У меня есть схема DASL, которая обрабатывает апострофы.Мой фрагмент кода - VBA, но запрос, вероятно, тот же, потому что мы используем те же имена схем свойств пространства имен, которые использует объект Property-Acessor - согласно Сью Мошер @ MS Outlook 2007 Программирование: JumpStart для Admin и PwrUsers, pg503.

Set myRestrictItems = myFolderContatos.Items.Restrict( _
                           "@SQL=" & Chr(34) & "http://schemas.microsoft.com/mapi/string/{00020329-0000-0000-C000-000000000046}/udfToAdd" & Chr(34) & " = 1 AND " _
                        & Chr(34) & "urn:schemas:contacts:bday" & Chr(34) & " = '" & "06 de abril de 1930" & "' AND " _
                        & Chr(34) & "urn:schemas:contacts:cn" & Chr(34) & " = " & ParseSpecialCharsAndDataTypeForSQL("Sérgio D'Or", False, False))

Когда я делаю Debug.print ParseSpecialCharsAndDataTypeForSQL:

?ParseSpecialCharsAndDataTypeForSQL("Sérgio D'Or",False,False)
'Sérgio D''Or'

И он находит контакт:

?myRestrictItems.Count
1

Resuming, старый трюк для JetДоступ к спасению от апострофии - это путь.

Надеюсь, это поможет.

PS Я знаю, что прошло много месяцев с момента вашего вопроса, но, тем не менее, может быть, помочь кому-то.

...