2013-05-09 3 views
2

Я написал плагин Outlook, который в основном позволяет получать сообщения электронной почты через Outlook для связи с веб-сайтом, чтобы также можно было просматривать электронную почту в функции связи на веб-сайте. Я храню дополнительные данные в ItemProperties MailItem, эти данные в основном такие, как идентификатор пользователя, связанного с электронной почтой на веб-сайте.Скрытие пользовательских ItemProperties из печати. Interop.Outlook

Проблема, с которой я столкнулся, - это любые ItemProperties, которые я добавляю в MailItem, печатаются, когда печатается электронное письмо. Кто-нибудь знает, как исключить пользовательские ItemProperties при печати электронной почты?

Вот код, который создает пользовательский ItemProperty:

// Try and access the required property. 
Microsoft.Office.Interop.Outlook.ItemProperty property = mailItem.ItemProperties[name]; 

// Required property doesnt exist so we'll create it on the fly. 
if (property == null) property = mailItem.ItemProperties.Add(name, Microsoft.Office.Interop.Outlook.OlUserPropertyType.olText); 

// Set the value. 
property.Value = value; 

ответ

2

На низких (Extended MAPI) уровне, каждое определение свойства пользователь имеет флаг, который определяет, является ли версия для печати. Однако этот флаг не отображается через объектную модель Outlook.

Вы можете либо разобрать свойства пользователя блобы и вручную установить, что флаг (формат свойства пользователя блоб документирован, и вы можете увидеть его в OutlookSpy, если нажать на кнопке IMessage), или вы можете использовать Redemption и его RDOUserProperty. Printable Недвижимость.

Следующий скрипт (VB) сбросит печать свойства для всех пользовательских свойств выбранного сообщения:

set Session = CreateObject("Redemption.RDOSession") 
    Session.MAPIOBJECT = Application.Session.MAPIOBJECT 
    set Msg = Session.GetMessageFromID(Application.ActiveExplorer.Selection(1).EntryID) 
    for each prop in Msg.UserProperties 
    Debug.Print prop.Name 
    prop.Printable = false 
    next 
    Msg.Save 
2

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

public void DisablePrint() 
{ 
    long printablePropertyFlag = 0x4; // PDO_PRINT_SAVEAS 
    string printablePropertyCode = "[DispID=107]"; 
    Type customPropertyType = _customProperty.GetType(); 

    // Get current flags. 
    object rawFlags = customPropertyType.InvokeMember(printablePropertyCode , BindingFlags.GetProperty, null, _customProperty, null); 
    long flags = long.Parse(rawFlags.ToString()); 

    // Remove printable flag. 
    flags &= ~printablePropertyFlag; 

    object[] newParameters = new object[] { flags }; 

    // Set current flags. 
    customPropertyType.InvokeMember(printablePropertyCode, BindingFlags.SetProperty, null, _customProperty, newParameters); 
} 

Убедитесь, что _customProperty это ваше имущество, которое вы создали с помощью следующего кода: mailItem.ItemProperties.Add(name,Microsoft.Office.Interop.Outlook.OlUserPropertyType.olText);

+0

Это отлично работает! Сохраняло мое дополнение от полки. Я стучал головой о стену с этим в течение недели. –

 Смежные вопросы

  • Нет связанных вопросов^_^