Надстройка Outlook с использованием Angular 4 - PullRequest
0 голосов
/ 17 января 2019

Я разрабатываю надстройку Outlook, используя angular4. У меня возникли проблемы с пониманием некоторых концепций разработки офисных надстроек с использованием angular.

  1. Нужно ли реализовывать Office.initialize и Office.OnReady() в main.ts, потому что всякий раз, когда я запускаю свое приложение, я получаю сообщение об ошибке, что я не реализовал Office.OnReady, хотя я использовал Offize.initialize
  2. Нужно ли использовать Office.initialize каждый раз, когда я использую какой-либо офисный компонент в своем приложении?
  3. Влияет ли это на мою надстройку, если я запускаю приложение в режиме разработки, а не в производственном режиме?
  4. Можно ли запускать мое угловое приложение в диалоговом окне Office, а не на панели задач, т. Е. У меня на панели задач есть простой HTML-файл (который содержит только одну кнопку), и когда я нажимаю эту кнопку, он открывает мое угловое приложение в диалоговом окне.
  5. Или я могу открыть один компонент моего приложения в диалоговом окне? Если да, может кто-нибудь объяснить, с примером кода.

1 Ответ

0 голосов
/ 18 января 2019
  1. Вам нужно реализовать только один из них. Возможно, вы пытаетесь получить доступ к какому-либо офисному методу, прежде чем правильно инициализировать Office. Как правило, мне нравится иметь загрузочный экран со спиннером и переходить с него только после инициализации офиса.

    Office.initialize = function(reason) {
        window.location.hash = 'apploaded';
    }
    
  2. Нет - вам нужно только инициализировать его один раз, если вы не обновляете сервер. Пока вы остаетесь в контексте своего приложения и не обновляете все приложение, а просто перемещаетесь между компонентами, все будет в порядке.

  3. Это может произойти, особенно если под локальным подразумевается, что вы делаете это без контекста Office (то есть вы не в клиенте). Как я обычно решаю эту проблему, никогда не получаю прямой доступ к объекту Office, но всегда через службу, которая в случае пропуска объекта Office или его подпрограмм не вызывает сбоев. Так что вместо

    // calling directly in some component
    office.context.mailbox.item.to.getAsync 
    

    Я бы сделал

    OfficeService.GetAsync() {
        if (Office && Office.context && Office.context.mailbox && ...) {
             // call real method
        }
        else {
             console.log('Detected local mode - without office context')
             // do a fake test operation instead of the real thing.
        }
    
    }
    
  4. Просмотрите файл functionFile . Это дает вам кнопку на ленте, которую вы можете щелкнуть и выполнить функцию в основном. Он по-прежнему будет загружать HTML-код в невидимый браузер, но в этом случае вы не получите панель задач. Это должно поддерживаться только в подмножестве клиентов, но не во всех.

  5. Есть несколько способов сделать это, вы можете просто указать URL-адрес вашей записи на панели задач в манифесте на этот URL-адрес компонента. Как это

    <SourceLocation DefaultValue="https://randommailaddin.org/component"/>
    

и сопоставьте маршрутизацию /component с вашим компонентом, поэтому, когда пользователь нажимает кнопку, он загружает только этот компонент. Вам все равно нужно инициализировать офисный контекст, иначе ваша функция не будет работать.

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