Forum Discussion
Anonymous
7 years agoNot applicable
RestApi with Session Authentication
Hi everybody I'm trying to get data from and Rest API, i am close to getting it to work, but the rest API requieres and SessionToken whick im able to pull out with the following query let
...
- 7 years ago
Yes, you have to use the result of your function as a variable parameter in the url like so:
let MyToken = let body = Text.ToBinary("{""Name"":""AX"", ""Key"":""XXXXXXXXXXXXXXX=""}"), url = "http://api.xxxxx.com/login/application", options = [ Headers =[#"Content-type"="application/json"], Content=body ], result = Web.Contents(url, options), #"Converted to Table" = Xml.Tables(result,null,65001), access_token = #"Converted to Table"{0}[SessionToken] in access_token, url = "http://api.xxxxxx.com/employees/getemployeedetails/?token=" & MyToken & "&page=0", options = [Headers =[#"Content-type"="application/json"]], result = Web.Contents(url, options), #"Imported XML" = Xml.Tables(result,null,65001), Table = #"Imported XML"{0}[Table], #"Changed Type" = Table.TransformColumnTypes(Table,{{"CanAddOwnShiftsOnSmartphone", type logical}, {"CanApproveEmployeeChanges", type logical}, {"CanEditActualHours", type logical}, {"CanEditPlan", type logical}, {"CanSendSms", type logical}, {"CustomColumns", type text}, {"CustomRoles", type text}, {"Email", type text}, {"EmployeeId", type text}, {"EmployeeIsAdmin", type logical}, {"EmployeeType", type text}, {"EmployerNumber", Int64.Type}, {"EnforceMaxWeeklyWorkingHours", type logical}, {"HomeDepartment", type text}, {"IsUserEnabled", type logical}, {"Name", type text}, {"ReasonForTermination", type text}, {"SendShiftReminder", type logical}}), #"Removed Other Columns" = Table.SelectColumns(#"Changed Type",{"Competencies", "IsUserEnabled", "Name", "WageNumber"}), #"Expanded WageNumber" = Table.ExpandTableColumn(#"Removed Other Columns", "WageNumber", {"Element:Text"}, {"WageNumber.Element:Text"}), #"Expanded Competencies" = Table.ExpandTableColumn(#"Expanded WageNumber", "Competencies", {"CompetenciesModel"}, {"Competencies.CompetenciesModel"}), #"Expanded Competencies.CompetenciesModel" = Table.ExpandTableColumn(#"Expanded Competencies", "Competencies.CompetenciesModel", {"Name", "Status"}, {"Competencies.CompetenciesModel.Name", "Competencies.CompetenciesModel.Status"}), #"Filtered Rows" = Table.SelectRows(#"Expanded Competencies.CompetenciesModel", each ([Competencies.CompetenciesModel.Name] = "AX-BRUGER") and ([Competencies.CompetenciesModel.Status] = "true")) in #"Filtered Rows"If you need to refresh this in the service, you will hav to shift the variable part to a query-record like described here:
ImkeF
7 years agoCommunity Champion
Yes, you have to use the result of your function as a variable parameter in the url like so:
let
MyToken = let
body = Text.ToBinary("{""Name"":""AX"", ""Key"":""XXXXXXXXXXXXXXX=""}"),
url = "http://api.xxxxx.com/login/application",
options = [
Headers =[#"Content-type"="application/json"],
Content=body
],
result = Web.Contents(url, options),
#"Converted to Table" = Xml.Tables(result,null,65001),
access_token = #"Converted to Table"{0}[SessionToken]
in
access_token,
url = "http://api.xxxxxx.com/employees/getemployeedetails/?token=" & MyToken & "&page=0",
options = [Headers =[#"Content-type"="application/json"]],
result = Web.Contents(url, options),
#"Imported XML" = Xml.Tables(result,null,65001),
Table = #"Imported XML"{0}[Table],
#"Changed Type" = Table.TransformColumnTypes(Table,{{"CanAddOwnShiftsOnSmartphone", type logical}, {"CanApproveEmployeeChanges", type logical}, {"CanEditActualHours", type logical}, {"CanEditPlan", type logical}, {"CanSendSms", type logical}, {"CustomColumns", type text}, {"CustomRoles", type text}, {"Email", type text}, {"EmployeeId", type text}, {"EmployeeIsAdmin", type logical}, {"EmployeeType", type text}, {"EmployerNumber", Int64.Type}, {"EnforceMaxWeeklyWorkingHours", type logical}, {"HomeDepartment", type text}, {"IsUserEnabled", type logical}, {"Name", type text}, {"ReasonForTermination", type text}, {"SendShiftReminder", type logical}}),
#"Removed Other Columns" = Table.SelectColumns(#"Changed Type",{"Competencies", "IsUserEnabled", "Name", "WageNumber"}),
#"Expanded WageNumber" = Table.ExpandTableColumn(#"Removed Other Columns", "WageNumber", {"Element:Text"}, {"WageNumber.Element:Text"}),
#"Expanded Competencies" = Table.ExpandTableColumn(#"Expanded WageNumber", "Competencies", {"CompetenciesModel"}, {"Competencies.CompetenciesModel"}),
#"Expanded Competencies.CompetenciesModel" = Table.ExpandTableColumn(#"Expanded Competencies", "Competencies.CompetenciesModel", {"Name", "Status"}, {"Competencies.CompetenciesModel.Name", "Competencies.CompetenciesModel.Status"}),
#"Filtered Rows" = Table.SelectRows(#"Expanded Competencies.CompetenciesModel", each ([Competencies.CompetenciesModel.Name] = "AX-BRUGER") and ([Competencies.CompetenciesModel.Status] = "true"))
in
#"Filtered Rows"
If you need to refresh this in the service, you will hav to shift the variable part to a query-record like described here:
Anonymous
4 years agoNot applicable
Thanks a lot for this code, in 2021 I was able to do a POST through Power Query with authentication.