Как прочитать пользовательское поле значение внешнего вида - PullRequest
1 голос
/ 18 декабря 2011

Может кто-нибудь сказать мне, как прочитать значение настраиваемого поля внешнего вида, используя c #

Прямо сейчас я попробовал "UserProperties" и "ItemProperties". Оба выдают ошибку. Мой пример кода выглядит следующим образом

Microsoft.Office.Interop.Outlook.Application f = new Microsoft.Office.Interop.Outlook.Application();
NameSpace outlookNS = f.GetNamespace("MAPI");
MAPIFolder inboxFolder = outlookNS.GetDefaultFolder(OlDefaultFolders.olFolderInbox);


foreach (object obj in inboxFolder.Items)
{
    MailItem item = obj as MailItem;
    if (item != null)
    {
        Console.WriteLine(item.UserProperties["test"].Value);
        Console.WriteLine(item.ItemProperties["test"].Value);
    }
}

Заранее спасибо

1 Ответ

1 голос
/ 19 декабря 2011

Этот ответ был переписан после экспериментов с Outlook.

Мой C # достаточно хорош, чтобы я знал, что вы делаете, но я еще не пытался получить доступ к Outlook из C #.

И Items, и Item используются в модели Outlook. Я не знаю, что вы можете использовать item так, как вы пытаетесь.

UserProperties выдает ошибку, если пользовательское свойство "test" не существует. Ниже я покажу, как проверить на существование. Вы добавляете свойство пользователя и забыли сохранить измененный почтовый элемент?

Ниже показан доступ к свойствам пользователя из Outlook VBA. Я ожидаю, что модель InterOp будет настолько похожа, насколько позволяет синтаксис. Важные отличия, о которых я знаю:

  • Set не требуется с C #.
  • Nothing является эквивалентом VBA null.

Переменные:

  • FolderItem - это элемент в папке, который был протестирован на класс olMail.
  • UserProp имеет тип UserProperty.
  • InxUP имеет тип integer.

Следующее добавляет пользовательское свойство с именем «TestProp» и типом olText, устанавливает его значение «Value for TestProp» и сохраняет исправленный почтовый элемент. Без сохранения предыдущие операторы не действуют.

With FolderItem 
  Set UserProp = .UserProperties.Add("TestProp", olText)
  UserProp.Value = "Value for TestProp"
  .Save 
End with

Следующие данные выводят в непосредственное окно имя и значение каждого пользовательского свойства для элемента почты.

For InxUP = 1 To .UserProperties.Count
  Debug.Print "    User prop " & InxUP & _
                        .UserProperties(InxUP).Name & " " & _
                        .UserProperties(InxUP).Value
Next

Следующее проверяет, существует ли пользовательское свойство "TestProp", и, если это так, выводит его значение в непосредственное окно.

Set UserProp = .UserProperties.Find("TestProp")
  If Not UserProp Is Nothing Then
    Debug.Print "    TestProp " & .UserProperties("TestProp").Value
End If

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

...