2017-08-25 13 views
9

Buduję niestandardowe złącze, aby połączyć się z naszym API przez OAuth2. Dzięki temu możemy użyć naszego api jako źródła danych dla powerbi.Przekaż kilka parametrów w funkcji StartLogin

// 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 }) 

kiedyś MakeResourcePath i ParseResourcePath przejść parametr Environment (który przyjmuje się jako dane wejściowe od użytkownika, w miejscu zasilania bi/stacjonarny). Zostanie to przekazane do StartLogin, aby wywołać autoryzację 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 
      ], 

Potrzebuję innego parametru jako dane wejściowe od użytkownika. Nazywa się hostname w interfejsie użytkownika. W jaki sposób mogę przekazać hostname i environment zarówno do funkcji ? Zasadniczo potrzebuję tych dwóch zmiennych do skonstruowania resourceUrl. Pomocne będą również wszelkie odniesienia.

Odpowiedz

3

Nie musisz przekazywać zmiennych do funkcji StartLogin, aby zbudować AuthorizeUrl. Zamiast tego możesz po prostu zadeklarować je jako zmienne globalne, aby StartLogin mógł uzyskać do nich dostęp w celu utworzenia AuthorizeUrl.

np.

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

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

i jak mogę przypisać nazwę hosta i środowisko? W jaki sposób wartości wprowadzone przez użytkownika w nich się znajdą? – sudeepdino008

+0

Możesz odwołać się do tego [przykład] (https://github.com/Microsoft/DataConnectors/tree/master/samples/HelloWorldWithDocs), aby dowiedzieć się, jak uzyskać dane wejściowe od użytkownika. –

Powiązane problemy