Jquery OfficeJs中removeAttachmentAsync()出现意外行为
我刚刚在OfficeJs中的Jquery OfficeJs中removeAttachmentAsync()出现意外行为,jquery,outlook-addin,office-js,Jquery,Outlook Addin,Office Js,我刚刚在OfficeJs中的removeAttachmentAsync()中遇到了一些意外行为。直到最近(几周),功能是一致的,对我们的案例有效,然后我们似乎看到一些奇怪的事情发生 因此,我们有一个按钮,通过撰写页面上的addFileAttachmentAsync()添加附件,然后将附件id保存到会话中以备将来使用,然后按钮逻辑反转为使用removeAttachmentAsync()在会话中使用保存的附件id删除所述附件。请记住,在添加附件时,我们会等待并验证附件是否已完全添加,然后用户才能执行
removeAttachmentAsync()
中遇到了一些意外行为。直到最近(几周),功能是一致的,对我们的案例有效,然后我们似乎看到一些奇怪的事情发生
因此,我们有一个按钮,通过撰写页面上的addFileAttachmentAsync()
添加附件,然后将附件id保存到会话中以备将来使用,然后按钮逻辑反转为使用removeAttachmentAsync()
在会话中使用保存的附件id删除所述附件。请记住,在添加附件时,我们会等待并验证附件是否已完全添加,然后用户才能执行其他操作。然后,用户可以选择转到设置页面
验证附件是否已成功添加:
status: "succeeded"
value: "xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxxxxxxxxxxxxxxxxx" // ${attachment_id}
这就是有趣的地方,如果用户添加附件,然后转到“设置”页面,然后返回到“撰写”页面,并选择删除附件,我们会收到此错误,但OfficeJs正在删除附件:
error: Object { name: "AttachmentDeletedBeforeUploadCompletes",
message: "The user removed the attachment before upload has completed.",
code: 9006 }
status: "failed"
value: null
但是,下面是OfficeJS对Exchange服务器执行的DeleteAttachment操作:
网址:
答复:
{
"Body":{
"ResponseMessages":{
"Items":[
{
"__type":"DeleteAttachmentResponseMessage:#Exchange",
"ResponseCode":"NoError",
"ResponseClass":"Success",
"RootItemId":{
"RootItemChangeKey":"xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx",
"RootItemId":"xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx\/xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx="
}
}
]
}
}
}
此行为不一致Exchange server表示成功,OfficeJs表示失败
以下是我删除附件的代码:
function remove() {
$.ajax({
url: "/getattachment",
dataType: 'json',
cache: false
}).always(function(res) {
if(res.id) {
Office.context.mailbox.item.removeAttachmentAsync(res.id,{asyncContext: null}, function (asyncResult) {
// Display the result to the user
if (asyncResult.status == Office.AsyncResultStatus.Succeeded) {
if (typeof Office.context.mailbox.item.notificationMessages === 'undefined') {
sidepane_status('success', 'Attachment removed.');
} else {
update_status('encryption-off', 'Attachment removed..');
}
attachment_id = null;
} else {
sidepane_status('error', 'Unable to remove attachment: ' + asyncResult.error.message);
}
}
);
} else {
sidepane_status('error', 'Unable to remove attachment: ' + asyncResult.error.message);
}
});
}
在MS文档中,我看到:
“在Outlook Web App和OWA for Devices中,附件标识符仅在同一会话中有效。当用户关闭应用程序时,或当用户开始以内联表单进行创作,然后弹出内联表单以在单独窗口中继续时,会话结束。”
但在这种情况下,用户没有关闭应用程序,仍然在使用相同的会话,并且没有编写内联表单
有人知道最近发生了什么变化,或者对可能发生的事情有什么见解吗
TLDR;调用了removeAttachmentAsync()
,删除了附件,但OfficeJs返回失败,因为“用户在上载完成之前删除了附件。”
更新1:附件代码
function add() {
$.ajax({
url: "/attachment",
dataType: 'json',
cache: false
}).done(function(response) {
if(typeof response.attachment_name !== "undefined" && typeof response.attachment_url !== 'undefined') {
Office.context.mailbox.item.addFileAttachmentAsync(response.attachment_url, response.attachment_name, { asyncContext: null }, function(asyncResult) {
if(asyncResult.status == Office.AsyncResultStatus.Succeeded) {
if(typeof Office.context.mailbox.item.notificationMessages === 'undefined') {
sidepane_status('success', 'Attachment successfully added');
} else {
update_status('encryption-on', 'Attachment successfully added.');
}
attachment_id = asyncResult.value;
$.ajax({
url: "/saveattachment/" + attachment_id,
dataType: 'json',
cache: false
}).always(function() {
// Hide an Element
});
} else {
sidepane_status('error', 'Unable to add attachment: ' + asyncResult.error.message);
}
}
);
} else {
sidepane_status('error', 'Unable to retrieve attachment information');
}
});
}
请记住,用户使用
add()
添加附件,我们保存附件id,用户通过超链接进入新页面,然后通过另一个超链接返回。由于我们保存了附件id,然后使用它删除带有remove()
的附件,因此无法重现此问题。感谢您共享removeAttachmentAsync代码。您是否也可以共享addFileAttachmentAsync代码以帮助我们端到端地调查此问题?使用附件添加代码进行了更新,并复制了更多的上下文。不幸的是,我们仍然无法使用简单的测试用例重新编程,这使我们相信您的外接程序具有独特性。您可以提供外接程序,或者提供一个非常简单的测试用例来重新处理问题吗?同样重要的是,这是在每一个浏览器上复制还是只在某些浏览器上复制?这也是100%复制吗?@OutlookAdd insTeam MSFT没有问题,您可以用Github或Bitbucket用户id ping我,这样我就可以将您添加到私有回购中。我不想把整个插件发布在开放的互联网上,我希望你能理解。而且,它不是100%可复制的,但可能有80%的时间是可以复制的。然而,这只发生在OWA中,而且它似乎与浏览器无关。我们无法重现这个问题。感谢您共享removeAttachmentAsync代码。您是否也可以共享addFileAttachmentAsync代码以帮助我们端到端地调查此问题?使用附件添加代码进行了更新,并复制了更多的上下文。不幸的是,我们仍然无法使用简单的测试用例重新编程,这使我们相信您的外接程序具有独特性。您可以提供外接程序,或者提供一个非常简单的测试用例来重新处理问题吗?同样重要的是,这是在每一个浏览器上复制还是只在某些浏览器上复制?这也是100%复制吗?@OutlookAdd insTeam MSFT没有问题,您可以用Github或Bitbucket用户id ping我,这样我就可以将您添加到私有回购中。我不想把整个插件发布在开放的互联网上,我希望你能理解。而且,它不是100%可复制的,但可能有80%的时间是可以复制的。然而,这只发生在OWA中,而且它似乎与浏览器无关。