【问题标题】:Outlook default categories are adding to category list when trying to add custom categories using redemption尝试使用兑换添加自定义类别时,Outlook 默认类别正在添加到类别列表
【发布时间】:2023-01-31 04:36:27
【问题描述】:

我有一个 outlook 插件,可以在加载项启动完成时向 outlook 添加自定义类别。

 public void CreateCategories()
        {
            RDOCategories categories = null;
            RDOCategory category = null;            

            try
            {
                var customCategoryList = FileManager.GetCustomCategoryList();
                categories = rSession.Categories;

                // add category 
                foreach (var customCategory in customCategoryList)
                {
                    try
                    {

                        category = categories.Add(customCategory.Name
                                               , PaintHelper.GetHexCodeByColorName(customCategory.Color));
                    }
                    catch (Exception ex)
                    {
                       
                    }
                    finally
                    {
                        if (category != null)
                        {
                            Marshal.ReleaseComObject(category);
                        }
                    }
                }
            }
            catch (Exception ex)
            {
                
            }
            finally
            {
                if (categories != null)
                {
                    Marshal.ReleaseComObject(categories);
                }
            }
        }

当我从 outlook 中删除所有类别并尝试运行插件时,它仍然显示计数rSession.类别作为 6,它添加了所有默认的 6 个类别以及自定义类别。

我们可以在删除所有 outlook 类别时省略添加默认类别吗?

【问题讨论】:

  • 为什么需要使用 Redemption 来处理 Outlook 中的类别?

标签: c# outlook vsto outlook-addin outlook-redemption


【解决方案1】:

如果没有类别,Redemption 会假定它是 Outlook 从未接触过的全新商店,并添加默认类别。

尝试删除默认类别添加您的自定义类别。

【讨论】:

    【解决方案2】:

    使用 NameSpace 对象的 Categories 属性获取 Categories 对象引用,表示该命名空间的 Master Category List

    using Outlook = Microsoft.Office.Interop.Outlook;
    // ...
    private void EnumerateCategories()
    {
        Outlook.Categories categories =
            Application.Session.Categories;
        foreach (Outlook.Category category in categories)
        {
            Debug.WriteLine(category.Name);
            Debug.WriteLine(category.CategoryID);
        }
    }
    
    private void AddACategory()
    {
        Outlook.Categories categories =
            Application.Session.Categories;
        if (!CategoryExists("MyCategory"))
        {
            Outlook.Category category = categories.Add("MyCategory",
                Outlook.OlCategoryColor.olCategoryColorDarkBlue,
                Outlook.OlCategoryShortcutKey.olCategoryShortcutKeyCtrlF11);
        }
    }
    
    private bool CategoryExists(string categoryName)
    {
        try
        {
            Outlook.Category category = 
                Application.Session.Categories[categoryName];
            if(category != null)
            {
                return true;
            }
            else
            {
                return false;
            }
        }
        catch { return false; }
    }
    

    AddACategory过程获取当前用户的主要类别列表,并使用CategoryExists方法检查集合中是否存在名为MyCategory的类别。如果不存在名称为MyCategory的类别,AddACategory会在主类别列表中添加一个名为“MyCategory”的类别,并使用Categories集合的Add方法为其分配深蓝色。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2013-07-20
      • 1970-01-01
      • 2017-04-21
      • 1970-01-01
      • 1970-01-01
      • 2015-10-29
      • 1970-01-01
      • 2014-06-21
      相关资源
      最近更新 更多