1

Outlook 2010 でカスタム プロパティ AT FOLDER LEVEL を追加しています。MAPIFolder(およびFolder) オブジェクトには、UserDefinedPropertiesカスタム プロパティを追加できる名前のプロパティがありますが、問題は、これらのプロパティが値を格納するためのものではないことです。ハックとして、2 つを等号で区切って名前の中にプロパティ値を保存していました。たとえば、「MyProperty=123」のようなものを追加しUserDefinedPropertyますName

ここでの問題は、私のプロパティの値に、Name. たとえば、値が「America/New_York」のプロパティがあります。これら 2 文字 (スラッシュとアンダースコア) は では許可されていないNameため、例外が発生します。

ここで必要なのは、フォルダー レベルでプロパティ値を格納するためのより良い方法か、オブジェクトのNameプロパティで許可されている文字のリストでUserDefinedProperty、何らかの置換を行うことができるようにすることです。

私は C#、.NET Fx 4.0、および VSTO を使用しています。

4

3 に答える 3

1

私の悪い。例外メッセージを完全に読んでいませんでした。不正な文字について明示的に言及しました。これらは:

括弧: [ と ]
アンダースコア: _
ポンド: #

それでも、フォルダー レベルのプロパティを保存することについて、より良いアイデアがある場合は、ここに投稿してください。

于 2012-10-30T12:55:59.297 に答える
0

StorageItemフォルダー レベルの状態を管理するために使用する必要があります。StorageItemsユーザー ビューから非表示になり、Exchange メールボックス アイテムを使用して状態を保持できます。

キーをStorageItem使用してフォルダーの状態を保持するMessageClass

Outlook.StorageItem folderState = folder.GetStorage("IPM.Storage.MyCustomStore", Outlook.OlStorageIdentifierType.olIdentifyByMessageClass);
if (folderState.Size == 0) // no state exists
{ // save state
  folderState.UserProperties.Add("CustomKey1", Outlook.OlUserPropertyType.olText).Value = "America/New_York";
  folderState.Save();
}
else // state exists
{ // read state
  string propVal = folderState.UserProperties["CustomKey1"].Value;
}

キーとして使用するか、上記の例のキーとして使用StorageItemsして、フォルダーを管理できます。SubjectMessageClass

于 2012-10-30T13:52:50.620 に答える
0

例外によると、名前に特殊文字を含めることはできません。ただし、プロパティの値は次のことができます。

Outlook.Folder folder = Application.GetNamespace("MAPI").Folders[1] as Outlook.Folder;
                Outlook.StorageItem storageItem = folder.GetStorage("ABCDE", Outlook.OlStorageIdentifierType.olIdentifyBySubject);
Outlook.UserProperty property = null;
foreach (Outlook.UserProperty p in storageItem.UserProperties)
{
    if (p.Name == "PropertyName")
        property = p;
}
if (property == null)
{
    property = storageItem.UserProperties.Add("PropertyName", Outlook.OlUserPropertyType.olText, false,                                                                Outlook.OlDisplayType.olUser);
                }
property.Value = "my_value_can_contain[brackets]";
storageItem.Save();
于 2013-08-28T11:08:46.223 に答える