在StartLogin函数中传递多个参数

10

我正在构建一个自定义连接器,通过OAuth2连接到我们的API。这样我们就可以将我们的api用作数据源来驱动PowerBI。

    // Resource definition
        Resource = [
            Description = "MyAPI",
            Type = "Custom",
            MakeResourcePath = (env) => env,
            ParseResourcePath = (env) => {env},
            Authentication = [OAuth=[StartLogin = StartLogin, FinishLogin = FinishLogin, Refresh = Refresh]],
    ......
Icons = [
            Icon16 = { Extension.Contents("MyAPI10.png"), Extension.Contents("MyAPI20.png") }
        ],
        Label = "MyAPI"
    ]
in
    Extension.Module("MyAPI", { Resource })

我使用了MakeResourcePath和ParseResourcePath函数来传递Environment参数(该参数在Power BI网站/桌面应用中由用户输入)。这个参数被传递给StartLogin函数来进行OAuth授权调用。

  StartLogin = (env, state, display) =>
        let
            resourceUrl = getOAuthUrlFromEnvName(env) & "/oauth/authorize",
            AuthorizeUrl = resourceUrl & "?" & Uri.BuildQueryString([
                client_id = getClientIdFromEnv(env),
                response_type = "code",
                state = state, // added by VM
                redirect_uri = redirect_uri])
        in
            [
                LoginUri = AuthorizeUrl,
                CallbackUri = redirect_uri,
                WindowHeight = windowHeight,
                WindowWidth = windowWidth,
                Context = env
            ],

现在我需要用户输入另一个参数作为输入。在UI中它被称为hostname。我该如何同时将hostnameenvironment传递给StartLogin函数?我基本上需要这两个变量来构造resourceUrl。任何参考资料也会很有帮助。

1个回答

3
您不需要将变量传递到 StartLogin 函数以构建 AuthorizeUrl。相反,您可以将它们声明为全局变量,以便 StartLogin 可以访问它们来构建 AuthorizeUrl

例如:

hostname = ...;
environment = ...;
authorize_uri = hostname & "/" & getOAuthUrlFromEnvName(environment) & "/oauth/authorize?"

StartLogin = (resourceUrl, state, display) =>
    let
        authorizeUrl = authorize_uri & "?" & Uri.BuildQueryString([
        ...

1
我该如何分配主机名和环境?用户输入的值将如何进入它们? - sudeepdino008
您可以参考这个示例,了解如何获取用户输入。 - Foxan Ng
@FoxanNg,你的例子似乎没有什么帮助。你声称这些全局变量可以由用户输入设置,但是这个例子并没有展示出来。这真的能做到吗?Power Query 变量是不可变的。 - Kurren

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接