在Excel加载项中验证REST请求

时间:2017-10-30 08:07:11

标签: excel office-js

我正在尝试为Excel开发一个加载项,目标是根据电子表格中的数据创建日历事件。

我几乎可以做任何我想要的事情,除了使用REST API在日历中构建事件,我无法准确找出出错的地方。

我已关注documentation suggested by @MarcLaFleur

我可以构建和运行应用程序没问题,但是当我点击“从OneDrive获取我的文件”时#39;按钮,我得到以下内容:

Code: 5001
Message: An internal error has occurred.
name: Internal Error

这来自此函数的else子句中某处公共目录中的program.js文件。

function getDataWithoutAuthChallenge() {
    Office.context.auth.getAccessTokenAsync({ forceConsent: false },
        function (result) {
            if (result.status === "succeeded") {
                // TODO1: Use the access token to get Microsoft Graph data.
                accessToken = result.value;
                getData("/api/onedriveitems", accessToken);
            }
            else {
                console.log("Code: " + result.error.code);
                console.log("Message: " + result.error.message);
                console.log("name: " + result.error.name);
                document.getElementById("getGraphAccessTokenButton").disabled = true;
            }
        });
}

以下是manifest.xml

中的范围
    ...
    <WebApplicationInfo>
      <Id>c931b396-7 ... </Id>
      <Resource>api://localhost:3000/c931b396-7 ... </Resource>
      <Scopes>
        <Scope>files.read.all</Scope>
        <Scope>profile</Scope>
      </Scopes>
    </WebApplicationInfo>
  </VersionOverrides>

以下是apps.dev.microsoft.com的范围:

Imgur

如果你能为我揭开光明,那真的会帮助我。

3 个答案:

答案 0 :(得分:2)

5001可能是因为未请求个人资料范围造成的。除 Calendar.ReadWrite 外,您还需要请求个人资料范围。您可以在注册应用程序时以及清单中执行此操作。有关更多信息,请参阅Marc LaFleur链接到的文章。

答案 1 :(得分:1)

可以在Enable single sign-on for Office Add-ins找到该文档。 ASP.NETNode.js以及Troubleshooting上的文档也有步行。

这里有许多可能出错的事情,但如果不了解更多有关您的注册的信息,则很难确定。也就是说,这里有几个常见的错误:

  • 您需要确保收到您正在开发的租户Admin Consent。这只是开发人员的要求,一旦您发布到商店,就不需要。

  • 确保您已预先授权正确的申请。您需要预先授权:

    • d3590ed6-52b3-4102-aeff-aad2292ab01c(Microsoft Office)
    • 57fb890c-0dab-4253-a5e0-7188c88b2bb4(Office Online)
    • bc59ab01-8403-45c6-8796-ac3ef710b3e3(办公室在线)
  • 确保您在manifest.xml中定义的范围反映在apps.dev.microsoft.com的应用注册中。

  • 如果您对权限范围进行了更改,则需要确保重复管理员同意过程。当您获得同意时,他们同意在同意时注册的范围而不是App ID本身。

答案 2 :(得分:1)

5001错误通常表明Office中的加载项API存在根本性错误。例如,您的Office应用程序不支持API,清单不正确,或者office.js的版本不支持它。由于您正在使用该示例,因此我想到了两件事:

  1. 您没有运行最新的Insiders build
  2. 错误的清单正在加载(如果你有的话,这有时会发生 在Windows上并使用旧版的Visual Studio 2017 模式文件,因此您必须进行后期构建清理调试 清单XML)
  3. 虽然Rick关于Scopes的评论是相关的,但您的清单和Azure注册看起来大都很好。配置文件必须与openid配合使用(仅配置文件不起作用;仅打开openid不起作用),正如所讨论的那样,您需要同意。作为开发人员,您可以尝试consenting for yourself at the protocol level。您需要根据需要更新client_id,redirect_uri和范围查询参数,并添加&amp; prompt = consent。

    要回答以后的问题,Excel和Mail加载项是不同的,我的回答仅适用于Excel。对于Outlook,有一个different sample