我正在开发outlook外接程序。但我得到的问题是,有时Office.context.mailbox.item.body.getAsync将失败时,外接程序页面重新加载。最糟糕的是,一旦body.getAsync返回错误"APICallFailedDueToItemChange",body.getAsync将总是失败并返回相同的错误。此错误的详细信息为{名称:"APICallFailedDueToItemChange",消息:“所选项目已更改。”,代码: 9030}
我试图重新调用getAsync,甚至重新加载整个窗口,以使插件重新启动,但错误将持续发生。唯一的方法是切换到另一封电子邮件。
复制步骤: 1.创建尝试获取电子邮件正文的任何outlook外接程序2.加载外接程序后,重新加载外接程序窗口3.一旦发生9030错误,控制台中的这些代码将始终触发相同的错误,直到我切换到另一封电子邮件
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也能正常工作,但实际上异常永远不会被清除。
发布于 2019-05-09 21:57:02
请修改你的代码,你并不是真的在用这个承诺做任何事情。
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);
}
})
})
发布于 2020-06-16 17:59:45
我也有同样的问题。
我正在开发一个Outlook加载项,我需要获取我阅读的每封电子邮件的电子邮件正文。
在Windows (OWA和应用程序)中一切工作正常。它也适用于Safari Mac OWA,但不适用于Mac版的Outlook应用程序。
item.body.getAsync第一次可以工作,但是当附加模块被固定并且我切换到另一个邮件时,它返回一个9030错误。我负责ItemChangedEvent的工作。当项目发生变化时,我还尝试使用window.reload()重新加载整个插件,但仍然存在同样的问题。我所有的包都是最新的。
我在Github & Stackoverflow上看到了一些帖子,但这个问题似乎仍然没有得到解决。有没有其他的解决方案?
下面是我获取正文的代码(当我切换到另一个邮件时,值为null ):
item.body.getAsync("text", (result) => {
const { value } = result;
getParsedContact({
variables: {
email: contactToParse.email,
name: contactToParse.displayName,
body: contactToParse.main
? (value || "").replace(/(\r\n|\n|\r)/gm, "\n")
: "",
},
});
});
另外,我的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);
};
https://stackoverflow.com/questions/56028709
复制相似问题