Надстройке Outlook не удалось найти элемент управления Office по идентификатору - PullRequest
2 голосов
/ 30 марта 2012

Я только что создал надстройку MS Outlook, используя Visual Studio и Office 2010. Я установил ее нормально на 4 компьютерах, но один пользователь получает следующую ошибку -

Error found in Custom UI XML of "...."
...
...
Failed to find Office control by ID

Всепод управлением Windows 7 и Outlook 2010 - не уверен, почему у этого человека возникли проблемы.Кто-нибудь может подсказать, как это диагностировать?

Ответы [ 4 ]

9 голосов
/ 11 мая 2016

Для тех, у кого есть похожие проблемы, вам не нужно удалять надстройки.Происходит следующее: Outlook попытается загрузить все ленты (найденные в вашей ленте xml) в любое окно, в которое заходит пользователь.Тогда он будет жаловаться на отсутствие идентификатора x или y.

Просто убедитесь, что ваш метод GetCustomUI в Ribbon.cs не загружает весь XML-файл ленты сразу, а загружает его для каждого фрагмента.

Если вы не уверены, какие идентификаторы вам нужны, используйте точку останова в GetCustomUI, затем запустите Outlook, просматривайте различные представления (основной, новое письмо, новое назначение, календарь и т. Д.), Чтобы собрать идентификаторы для представлений.при этом вам нужно показать надстройку.

В моем случае мне понадобилось Microsoft.Outlook.Explorer , Microsoft.Outlook.Mail.Compose и Microsoft.Outlook.Appointment .

Поэтому я изменил свой GetCustomUI на:

    public string GetCustomUI(string ribbonID)
    {
        switch (ribbonID)
        {
            case "Microsoft.Outlook.Explorer":
                return GetResourceText("MyAddin.RibbonsForOutlookExplorer.xml");
            case "Microsoft.Outlook.Mail.Compose":
                return GetResourceText("MyAddin.RibbonForOutlookMailCompose.xml");
            case "Microsoft.Outlook.Appointment":
                return GetResourceText("MyAddin.RibbonForOutlookAppointment.xml");
            default:
                return null;
        }
    }

Конечно, мне пришлось разбить мой Ribbon.xml на три упомянутых XML-файла.выше.Результат: Outlook загружает ТОЛЬКО фрагмент, необходимый для данного экрана (назначение, новое электронное письмо ...), и не будет жаловаться на «не обнаружение идентификатора на экране X или Y».

Наконец, для тех,кто не уверен, почему некоторые пользователи получают эту ошибку, а другие - нет: это происходит из-за опции «Показать ошибки интерфейса пользователя надстройки» (в меню «Настройки» -> «Дополнительно»).Если этот флажок снят, Outlook будет игнорировать ошибки XML с искаженной лентой.Если флажок установлен, пользователи будут получать сообщения об ошибках, связанных с вашей надстройкой (если она существует), а также с другими надстройками.

2 голосов
/ 30 марта 2012

Если это работает для всех, кроме одного пользователя. Как упомянул @Brijesh Mishra, проверьте, есть ли у пользователя какие-либо другие надстройки и настроена ли для него панель быстрого доступа.

Если у него что-то из этого, удалите другие надстройки и попробуйте установить или сбросить настройки панели быстрого доступа.

1 голос
/ 16 января 2019

Для всех вас, кто использует плагин VSTO на основе Designer, а не решение XML.Я искал эту проблему во всем Интернете, но нашел только решения на основе XML.В Интернете нет ничего для Visual Designer, потому что в этом случае вам не нужно переопределять метод «GetCustomUI».Ленты, разработанные с использованием визуального дизайнера, по умолчанию возвращают RibbonManager.Этот объект RibbonManager представляет все элементы ленты (Visual Designer) в проекте и автоматически обрабатывается в фоновом режиме через активный инспектор окон.Таким образом, вам не нужно писать какой-либо специальный код для обработки разных окон.

Чтобы правильно настроить его, вам просто нужно:

  • Добавить одну дополнительную ленту Visual Designer для каждого окнапользователь переходит на
  • в ленточном объекте перейдите под «RibbonType», откройте список флажков и активируйте только соответствующее окно, где должна появиться лента.

Если естьЕсли в списке выбрано одно окно, Outlook пытается вставить ленту во все отмеченные окна.Даже если соответствующее окно в данный момент не открыто.Вот почему появляется ошибка «Не удалось найти идентификатор элемента управления».

0 голосов
/ 16 декабря 2014

для меня исправлением было разделение XML-файлов ленты, содержащих customUI и перенаправление на правильный метод GetCustomUI (реализованный с использованием Office.IRibbonExtensibility) в примере:

public string GetCustomUI(string RibbonID)
    {
        switch (RibbonID)
        {
            case "Microsoft.Outlook.Mail.Read":
                return GetResourceText("namespace.type1.xml");
            case "Microsoft.Outlook.Mail.Compose":
                return GetResourceText("namespace.type2.xml");
            default:
                return null;
        }
    }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...