确定约会项目是否存在于缓存或在线商店中

Determine if an appointment item exists in a cached or online store

我正在尝试确定在线邮箱存储的缓存中是否存在约会项目。我的代码在在线商店中运行速度太慢,因此我试图隐藏在线商店的功能区按钮。

 public bool Control_Visible_AptDates(Office.IRibbonControl control)
    {

        if (control.Context is Outlook.Inspector)
        {
            Outlook.Inspector inspector = (Outlook.Inspector)control.Context;
            if (inspector.CurrentItem is Outlook.AppointmentItem)
            {
                
                Outlook.AppointmentItem aptItem = inspector.CurrentItem as Outlook.AppointmentItem;

                if (true)
                {
                    //If item stored online return false
                }
                else
                {
                    //If item stored in cached Exchange mailbox store return true
                }

确定项目是在线还是使用缓存 Exchange 模式的最佳方法是什么?

使用 Outlook Spy,我可以看到有一个 PR_STORE_OFFLINE,它似乎是我正在寻找的 属性。据我所知,它仅存在于缓存项中。

bool offline = aptItem.PropertyAccessor.GetProperty("http://schemas.microsoft.com/mapi/proptag/0x6632000B");

可以使用 PropertyAccessor 以某种方式读取这个 属性 还是需要赎回?

如果需要兑换,您能否提供代码片段让我开始?

提前致谢!

相关图片-

PR_STORE_OFFLINE 仅适用于 IMsgStore 对象,不适用于项目。您可以尝试使用 Application.Session.ExchangeConnectionMode 属性 - 请参阅 https://docs.microsoft.com/en-us/office/vba/api/outlook.namespace.exchangeconnectionmode.

找到适合我的服务方法。 应该也可以对其进行返工以检查邮件项目,但我没有测试该场景。

    bool IsItemCachedExchange(Outlook._AppointmentItem aptItem)
    {
        try
        {
            bool result = false;
            Outlook.Account account = aptItem.SendUsingAccount;
            if (account  != null)
            {
                Outlook.Store store = account.DeliveryStore;
                result = store.IsCachedExchange;
                Marshal.ReleaseComObject(store);
                Marshal.ReleaseComObject(account);
                return result;
            }
            else
            {
                result = false;
                return result;
            }
        }
        catch (Exception)
        {
            bool result = false;
            return result;
        }
    }

    public bool Control_Visible_AptDates(Office.IRibbonControl control)
    {
        try
        {
            if (control.Context is Outlook.Inspector)
            {
                Outlook.Inspector inspector = (Outlook.Inspector)control.Context;
                if (inspector.CurrentItem is Outlook.AppointmentItem)
                {
                    Outlook.AppointmentItem aptItem = inspector.CurrentItem;
                    bool isItemCachedLocal = IsItemCachedExchange(aptItem);

                    if (isItemCachedLocal == true)
                    {
                        return true;
                    }
                    else
                    {
                        return false;
                    }
                }

                else
                {
                    return false;
                }
            }

            else
            {
                return false;
            }
        }
        catch (Exception)
        {
            return false;
        }
    }