确定约会项目是否存在于缓存或在线商店中
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;
}
}
我正在尝试确定在线邮箱存储的缓存中是否存在约会项目。我的代码在在线商店中运行速度太慢,因此我试图隐藏在线商店的功能区按钮。
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;
}
}