Office js mailbox.item.body.getAsync失败时,如何从错误9030中恢复?
我正在处理outlook加载项。但我遇到了这样一个问题:当加载项页面重新加载时,Office.context.mailbox.item.body.getAsync有时会失败。最糟糕的是,一旦body.getAsync返回错误“APICallFailedDueToItemChange”,body.getAsync将始终失败并出现相同的错误。 此错误的详细信息是{name:“APICallFailedDueToItemChange”,消息:“所选项目已更改”,代码:9030} 我试图调用getAsync,甚至重新加载整个窗口以使加载项重新启动,但错误将持续发生。唯一的办法是切换到另一封电子邮件 复制步骤: 1.创建任何尝试获取电子邮件正文的outlook加载项 2.加载加载项后,重新加载加载项窗口 3.一旦发生9030错误,控制台中的代码将始终触发相同的错误,直到我切换到另一封电子邮件Office js mailbox.item.body.getAsync失败时,如何从错误9030中恢复?,office-js,outlook-web-addins,outlook-for-mac,Office Js,Outlook Web Addins,Outlook For Mac,我正在处理outlook加载项。但我遇到了这样一个问题:当加载项页面重新加载时,Office.context.mailbox.item.body.getAsync有时会失败。最糟糕的是,一旦body.getAsync返回错误“APICallFailedDueToItemChange”,body.getAsync将始终失败并出现相同的错误。 此错误的详细信息是{name:“APICallFailedDueToItemChange”,消息:“所选项目已更改”,代码:9030} 我试图调用getAsy
await new Promise((resolve, reject) => {
window.Office.context.mailbox.item.body.getAsync('text', (result) => {
if (result.status === 'succeeded') {
console.log(result.value)
return resolve(result.value); // updated as suggested by Mavi Domates
} else {
console.error(result.error)
return reject(result.error);
}
})
})
我希望getAsync可以正常工作,即使上一次回调失败,但实际的异常将永远不会被清除。请修改您的代码,您并没有真正按照这个承诺做任何事情
await new Promise((resolve, reject) => {
return window.Office.context.mailbox.item.body.getAsync('text', (result) => {
if (result.status === 'succeeded') {
console.log(result.value);
return resolve(result.value);
} else {
console.error(result.error);
return reject(result.error);
}
})
})
我也有同样的问题
我正在开发Outlook加载项,我需要获取我阅读的每封电子邮件的电子邮件正文
在Windows(OWA和应用程序)中一切正常。它也适用于Safari Mac OWA,但不适用于Mac的Outlook应用程序
item.body.getAsync第一次工作,但是当外接程序被固定并且我切换到另一个邮件时,它返回9030错误。我处理这个项目。我还尝试在项目更改时使用window.reload()完全重新加载外接程序,但问题相同。我所有的包裹都是最新的
我在Github&Stackoverflow上看到了一些帖子,但问题似乎仍未解决。有没有其他解决办法
以下是获取正文的代码(当我切换到其他邮件时,值为null):
此外,我的addHandlerAsync:
const reloadInterface = () => {
if (Office.context.mailbox.item != null) {
console.log("New item detected. Reloading interface...");
location.reload(true); // I try here to reload all the add-in when switching to another email
} else {
console.log("No email is selected.");
Office.context.mailbox.removeHandlerAsync(
Office.EventType.ItemChanged,
function() {
console.log("Item Change event unregistered.");
Office.context.mailbox.addHandlerAsync(
Office.EventType.ItemChanged,
reloadInterface
);
console.log("Item Change event re-registered.");
}
);
}
};
Office.initialize = () => {
isOfficeInitialized = true;
Office.context.mailbox.addHandlerAsync(
Office.EventType.ItemChanged,
reloadInterface
);
render(App);
};
你在哪个客户机上测试这个?Windows Win32桌面?Outlook Web Access?等等。还有什么具体版本?以及如何重新加载加载项窗口?如果您使用的是SupportSping功能。您还需要为itemChanged事件实现addHandlerAsync。否则,对该项调用API将导致该错误。@OutlookAdd insTeam MSFT我的客户端是MacOS 10.14.4 outlook 16.24。为了重现此窗口,我右键单击外接程序并选择“重新加载”来重新加载页面。这是随机发生的,但大约有10次。我还添加了“为什么切换到其他电子邮件可以恢复此问题”的itemChanged事件。@OutlookAdd insTeam MSFT我在中创建了一个测试项目。你能帮我看看吗?谢谢,这个问题与我想锁定任务窗格有关。在我更改清单之前,我尝试重新加载窗口大约20多次,没有问题。使用addHandlerAsync相关逻辑后,如果我锁定任务窗格并切换电子邮件,则右键单击重新加载。错误被复制。谢谢回复。是的,在我真正的项目代码中,我决定并拒绝了它。我在这里粘贴的代码是为了在控制台中进行测试。不知怎的,你的建议让我明白了
const reloadInterface = () => {
if (Office.context.mailbox.item != null) {
console.log("New item detected. Reloading interface...");
location.reload(true); // I try here to reload all the add-in when switching to another email
} else {
console.log("No email is selected.");
Office.context.mailbox.removeHandlerAsync(
Office.EventType.ItemChanged,
function() {
console.log("Item Change event unregistered.");
Office.context.mailbox.addHandlerAsync(
Office.EventType.ItemChanged,
reloadInterface
);
console.log("Item Change event re-registered.");
}
);
}
};
Office.initialize = () => {
isOfficeInitialized = true;
Office.context.mailbox.addHandlerAsync(
Office.EventType.ItemChanged,
reloadInterface
);
render(App);
};