この質問は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.restUrl
はhttps://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は機能しません。
私はマイクロソフトの文書として知られている、海での試行錯誤、泳ぎの良い一ヶ月を過ごした後、ちょっとしたことがあります。すべてのヘルプは大幅に
これは間違いなく動作するはずです。私が試してみる機会が得られたら、それを正しくマークしてください、ありがとう。また、私はあなたに連絡して、ドキュメントに関するフィードバックをもらう予定です。 – gr347wh173n0r7h