Подавление печати полей Outlook - PullRequest
4 голосов
/ 31 марта 2009

Мы написали надстройку для Outlook, которая отправляет электронные письма в нашу систему CRM. В процессе этого он сохраняет идентификатор сообщения Outlook как поле пользователя в самом сообщении.

например.

currentUserProperty = Constants.APPLICATION_NAME + "EntryID";
mailItem.UserProperties.Add(currentUserProperty,
       Microsoft.Office.Interop.Outlook.OlUserPropertyType.olText,
       Missing.Value,
       Missing.Value).Value = entryId;

К сожалению, это HUUUGGEE номер, очень похожий на:

"00000000D502D779150E2F4580B1AADDF04ECDA6070097EF5A1237597748A4B4F9BFF540020800000006E9E4000068BB5B6DFC36924FAEC709A17D056583000002DE0E350000"

Проблема заключается в том, что когда пользователь печатает сообщение, Outlook настаивает на включении этого поля (под полем «От / до») и, поскольку в нем нет пробелов, не может переносить идентификатор и сжимает страницу А4 до тех пор, пока она не уместится горизонтально , Это создает крошечные распечатки электронной почты.

Есть ли способ, как я могу это исправить? Я думал о перезаписи поля OriginalEntryID (которое является причиной проблемы) одним, разделенным пробелами, но я получаю исключение из уровня COM. Моя следующая остановка - попытаться подавить вывод этого и других пользовательских полей в Outlook стационарно.

Кто-нибудь знает, как этого можно достичь?

Ответы [ 2 ]

16 голосов
/ 23 июня 2011

Вы должны использовать .NET Reflection , чтобы исправить это ( согласно рекомендации службы поддержки Microsoft ). Надеюсь, это будет исправлено в будущих версиях VSTO SDK.

Подавить печать полей пользователя Outlook

static void SuppressUserPropertyPrinting(Outlook.MailItem message)
{
    try
    {   // Late Binding in .NET: https://support.microsoft.com/en-us/kb/302902
        Type userPropertyType;
        long dispidMember = 107;
        long ulPropPrintable = 0x4; // removes PDO_PRINT_SAVEAS
        string dispMemberName = String.Format("[DispID={0}]", dispidMember);
        object[] dispParams;

        if (message.UserProperties.Count == 0) return; // no props found (exit)

        // marks all user properties as suppressed
        foreach (Outlook.UserProperty userProperty in message.UserProperties.Cast<Outlook.UserProperty>())
        {
            if (userProperty == null) continue; // no prop found (go to next)
            userPropertyType = userProperty.GetType(); // user property type

            // Call IDispatch::Invoke to get the current flags
            object flags = userPropertyType.InvokeMember(dispMemberName, BindingFlags.GetProperty, null, userProperty, null);
            long lFlags = long.Parse(flags.ToString()); // default is 45 - PDO_IS_CUSTOM|PDO_PRINT_SAVEAS|PDO_PRINT_SAVEAS_DEF (ref: http://msdn.microsoft.com/en-us/library/ee415114.aspx)

            // Remove the hidden property Printable flag
            lFlags &= ~ulPropPrintable; // change to 41 - // PDO_IS_CUSTOM|PDO_PRINT_SAVEAS_DEF (ref: http://msdn.microsoft.com/en-us/library/ee415114.aspx)

            // Place the new flags property into an argument array
            dispParams = new object[] { lFlags };

            // Call IDispatch::Invoke to set the current flags
            userPropertyType.InvokeMember(dispMemberName, BindingFlags.SetProperty, null, userProperty, dispParams);
        }
    }
    catch { } // safely ignore if property suppression doesn't work
}
0 голосов
/ 01 апреля 2009

Я думаю, что это может помочь мне:

http://www.add -in-express.com / форум / read.php? FID = 5 & TID = 5071 # postform

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...