Forum Discussion

Anonymous's avatar
Anonymous
Not applicable
7 years ago
Solved

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 ...
  • ImkeF's avatar
    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:

    https://blog.crossjoin.co.uk/2016/08/23/web-contents-m-functions-and-dataset-refresh-errors-in-power-bi/