2017-08-25 26 views
9

Tôi đang tạo một trình kết nối tùy chỉnh để kết nối với API của chúng tôi qua OAuth2. Điều này là để chúng tôi có thể sử dụng api của chúng tôi như là một nguồn dữ liệu để powerbi.Vượt qua một số tham số trong chức năng 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 }) 

tôi đã sử dụng MakeResourcePath và ParseResourcePath để vượt qua Environment tham số (được thực hiện như là đầu vào từ người sử dụng trong điện bi trang web/máy tính để bàn). Thông báo này được chuyển đến StartLogin để thực hiện cuộc gọi ủy quyền 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 
      ], 

Tôi cần thông số khác làm đầu vào từ người dùng ngay bây giờ. Nó được gọi là hostname trong ui. Làm cách nào để vượt qua hostnameenvironment cả hai chức năng này với chức năng StartLogin? Về cơ bản tôi cần hai biến này để xây dựng resourceUrl. Mọi tham chiếu cũng sẽ hữu ích.

Trả lời

3

Bạn không cần phải chuyển các biến thành hàm StartLogin để xây dựng AuthorizeUrl. Thay vào đó, bạn chỉ có thể khai báo chúng dưới dạng các biến toàn cục để StartLogin có thể truy cập chúng để xây dựng AuthorizeUrl.

ví dụ:

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

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

và làm thế nào để tôi chỉ định tên máy chủ và môi trường? Các giá trị được người dùng nhập vào sẽ kết thúc như thế nào? – sudeepdino008

+0

Bạn có thể tham khảo [ví dụ] (https://github.com/Microsoft/DataConnectors/tree/master/samples/HelloWorldWithDocs) để biết cách lấy dữ liệu nhập của người dùng. –

Các vấn đề liên quan