2

この質問はprevious questionに基づいていますが、それ以降はもう少し詳細と経験があります。OutlookアドインでEWSとRest APIを使用する場合の永続的なサクセス

最初にいくつかの背景がありますが、ユーザーのメッセージを転送して特定のフォルダに移動する必要があるOutlook Addinがあります。これは、Prem ExchangeのOWAとOutlook 2016環境の両方で機能する必要があります。また、以前のクライアントとO365ユーザー向けのOutlook Mobile Appの両方で動作するはずです。

私の具体的な質問は、EWSとRest API(またはMS Graph API)のどちらを使用するかを検出することになります。ここで

は私のコードのスニペットのです:私の前の質問で

Office.initialize = function() { 
    $(document).ready(function() { 
     $('#forward').click(forwardMessage); 
    }); 
}; 

function forwardMessage() { 
    if(Office.context.mailbox.restUrl) { // The problem child 
     forwardEWS(); // Works like a charm 
    } else { 
     forwardRest(); // Works fine for O365 users 
    } 
} 

function forwardRest() { 
    var restHost = Office.context.mailbox.restUrl; 
    var restId = getItemRestId(); 

    Office.context.mailbox.getCallbackTokenAsync({isRest: true}, function(result){ 
     if (result.status === "succeeded") { 
      var accessToken = result.value; 

      $.ajax({ 
       url: restHost + '/v2.0/me/messages/' + restId + '/forward', 
       type: 'post', 
       headers: {'Authorization': 'Bearer ' + accessToken}, 
       contentType: 'application/json', 
       data: JSON.stringify({ 
        'ToRecipients': [ 
         {'EmailAddress': { 'Address': '[email protected]' }} 
        ] 
       }) 
      }).done(function (response) { 
       sidepane_status('success', 'Message forwarded.'); 

       moveRest(restHost, accessToken, restId); 

      }).fail(function(err) { 
       sidepane_status('error', 'Could not forward message'); 
      }); 
     } else { 
      sidepane_status('error', 'Could not get token'); 
     } 
    }); 
} 

function moveRest(restHost, accessToken, restId) { 
    var folder = $('#ews_folder').val(); 
    $.ajax({ 
     url: restHost + '/v2.0/me/messages/' + restId + '/move', 
     type: 'post', 
     headers: {'Authorization': 'Bearer ' + accessToken}, 
     contentType: 'application/json', 
     data: JSON.stringify({ 'DestinationId': folder }) 
    }).fail(function(err) { 
     sidepane_status('error', 'Could not move message to ' + folder); 
    }); 
} 

function getItemRestId() { 
    if (Office.context.mailbox.diagnostics.hostName === 'OutlookIOS') { 
     return Office.context.mailbox.item.itemId; 
    } else { 
     return Office.context.mailbox.convertToRestId(
      Office.context.mailbox.item.itemId, 
      Office.MailboxEnums.RestVersion.v2_0 
     ); 
    } 
} 

、私はOffice.context.mailbox.restUrlのリターンをチェックするように言われました。 URLを返した場合は、Rest APIを使用することができ、使用しない場合はEWSを使用できます。ここの問題は、OWAの私のプレム交換ユーザーにあります。Office.context.mailbox.restUrlは何も返しません。それから私はEWSを使用します。ただし、Outlook 2016 Office.context.mailbox.restUrlhttps://exch1.mailhost.com/apiを返します。これはいくつかの問題につながります。

Outlook 2016のOn Prem ExchangeユーザーがRest URLを返す場合の最初の状況です。このarticleに続いてOfficeJSの助けを借りてRest APIとやりとりする場合、On Premユーザーと一緒にOfficeJSからOffice.context.mailbox.getCallbackTokenAsync({isRest: true}, function(result){ ... });でアクセストークンを取得することはできず、その後Rest APIを使用することはできません。

私は、私の元の質問のコメントとして、EWSを使用すると思います。しかし、これはモバイルで別の問題を引き起こします。このarticleから、EWSはモバイルでサポートされておらず、Restを使用する必要があります。私はPremのユーザーがOutlook Mobile Appを使用できないことを理解しています。

どのAPIを使用するか、どのようなコンテキストで使用するかを判断する方法が見つからないという問題が発生します。私がOffice.context.mailbox.restUrlをオフにすると、OWAのOn PremとO365の両方のユーザーが、それぞれのAPIを正しく使用し、すべてがユニコーンと虹です。ただし、Outlook 2016のOn Premユーザーの場合、EWSを使用する必要があるときにRest APIを使用しようとします。最後に、EWSのみに依存している場合、Outlook MobileクライアントのO365ユーザーはAddinは機能しません。

私はマイクロソフトの文書として知られている、海での試行錯誤、泳ぎの良い一ヶ月を過ごした後、ちょっとしたことがあります。すべてのヘルプは大幅に

答えて

4

をいただければ幸いですはい、これはdocsからrestUrlの既知の問題、次のとおりです。

注:カスタムREST URLを使用してExchange 2016のオンプレミスのインストールに接続 OutlookクライアントrestUrlの無効な値が返されます。

私はそれがもう少し複雑になることを理解しています。現在の状況では、電話をかける方法は次のとおりです:

  • 最初のチェックrestUrlです。定義されていない場合は、EWSを使用します。
  • restUrlに値がある場合は、getCallbackTokenAsyncisRest: trueと試してください。トークンを取得できない場合は、EWSにフォールバックします。

私は、将来にそう(Office.context.roamingSettingsを経由して)これはユーザーのメールボックス内の設定で保存しますアドインは、この「発見」フェーズをスキップして、ちょうど最初から右のAPIを使用することができます実行します。

私はサイドアドバイスとして、Outlookアドインのドキュメントをhttps://docs.microsoft.com/en-us/outlook/add-ins/に改訂するという進行中のプロジェクトに取り組んでいます。そのため、「海に浮かぶ」という気持ちを助けてくれることでしょう。 Twitterに私に連絡することができれば、あなたが特に気に入っているものにあなたのフィードバックを得ることが大好きです。

+0

これは間違いなく動作するはずです。私が試してみる機会が得られたら、それを正しくマークしてください、ありがとう。また、私はあなたに連絡して、ドキュメントに関するフィードバックをもらう予定です。 – gr347wh173n0r7h

関連する問題