Forum Discussion
New API connection
- 9 months ago
okay maybe you will need to pass the token as a function then , try to created the following function and query
open blank query and copy past , name the function as GetTokenNew
() as text => let // ----------------------------- // ECI OAuth Token Request // ----------------------------- client_id = "YOUR_CLIENT_ID", client_secret = "YOUR_CLIENT_SECRET", token_url = "https://api-user.integrations.ecimanufacturing.com/oauth2/api-user/token", tokenBody = "grant_type=client_credentials" & "&scope=openid" & "&client_id=" & client_id & "&client_secret=" & client_secret, tokenResponse = Json.Document( Web.Contents( token_url, [ Headers = [ #"Content-Type" = "application/x-www-form-urlencoded", Accept = "application/json" ], Content = Text.ToBinary(tokenBody) ] ) ), // Extract raw token access_token = tokenResponse[access_token], // Return as "Bearer xxxx" BearerToken = "Bearer " & access_token in BearerTokencreate another query and past
let // Call token function BearerToken = GetTokenNew(), api_url = "https://api-jb2.integrations.ecimanufacturing.com/api/v1/job-materials", apiResponse = Json.Document( Web.Contents( api_url, [ Headers = [ Authorization = BearerToken, Accept = "application/json" ] ] ) ), // Convert list/record into table AsList = if apiResponse is list then apiResponse else if apiResponse is record and Record.HasFields(apiResponse, "data") then apiResponse[data] else {}, TableOut = if List.Count(AsList) > 0 then let tbl = Table.FromList(AsList, Splitter.SplitByNothing(), null, null, ExtraValues.Error), firstRecord = tbl{0}[Column1], expanded = Table.ExpandRecordColumn(tbl, "Column1", Record.FieldNames(firstRecord)) in expanded else #table({}, {}) in TableOutbut it's better if you change the get-schedule url(in the first working query) and get the job-materials value in one query first , then try above method
- 8 months ago
Hi Anonymous
Can you try this code and see if it returns a value to pages step ?
let // --------------------------------------------------- // 1. OAuth Token Request (leave your real values) // --------------------------------------------------- client_id = "YOUR_CLIENT_ID", client_secret = "YOUR_CLIENT_SECRET", token_url = "https://api-user.integrations.ecimanufacturing.com/oauth2/api-user/token", tokenResponse = Json.Document( Web.Contents( token_url, [ Headers = [ #"Content-Type" = "application/x-www-form-urlencoded", Accept = "application/json" ], Content = Text.ToBinary( "grant_type=client_credentials" & "&scope=openid" & "&client_id=" & client_id & "&client_secret=" & client_secret ) ] ) ), access_token = tokenResponse[access_token], // --------------------------------------------------- // 2. Paging Function // --------------------------------------------------- PageSize = 200, GetPage = (Skip as number) => let url = "https://api-jb2.integrations.ecimanufacturing.com/api/v1/job-materials" & "?take=" & Number.ToText(PageSize) & "&skip=" & Number.ToText(Skip), response = Json.Document( Web.Contents( url, [ Headers = [ Authorization = "Bearer " & access_token, Accept = "application/json" ] ] ) ), // FIXED: correct field is "Data" (case-sensitive) items = if response is list then response else if response is record and Record.HasFields(response, "Data") then response[Data] else {} in items, // --------------------------------------------------- // 3. Generate pages until empty page encountered // --------------------------------------------------- Pages = List.Generate( () => [Skip = 0, Data = GetPage(0)], each List.Count([Data]) > 0, each [Skip = [Skip] + PageSize, Data = GetPage([Skip] )], each [Data] ), AllItems = List.Combine(Pages), // --------------------------------------------------- // 4. Convert to Table and Expand // --------------------------------------------------- Output = if List.Count(AllItems) = 0 then #table({}, {}) else let tbl = Table.FromList(AllItems, Splitter.SplitByNothing(), null, null, ExtraValues.Error), firstRecord = tbl{0}[Column1], fieldNames = Record.FieldNames(firstRecord), expanded = Table.ExpandRecordColumn(tbl, "Column1", fieldNames, fieldNames) in expanded in Output
Hi kushanNa,
It's still required the pages as variable (and if I entry some values it go in error). What I need is a loop from page 1 to the end to pull all the pagination. Hope it make sense.
Giovanni
Hi Anonymous
Can you try this code and send me a screenshot of the first step you are getting an error?
let
// -----------------------------
// 1. OAuth Token Request
// -----------------------------
client_id = "YOUR_CLIENT_ID",
client_secret = "YOUR_CLIENT_SECRET",
token_url = "https://api-user.integrations.ecimanufacturing.com/oauth2/api-user/token",
tokenResponse =
Json.Document(
Web.Contents(
token_url,
[
Headers = [
#"Content-Type" = "application/x-www-form-urlencoded",
Accept = "application/json"
],
Content = Text.ToBinary(
"grant_type=client_credentials" &
"&scope=openid" &
"&client_id=" & client_id &
"&client_secret=" & client_secret
)
]
)
),
access_token = tokenResponse[access_token],
// -----------------------------
// 2. Paging Function (calls API)
// -----------------------------
PageSize = 200,
GetPage = (Skip as number) =>
let
url =
"https://api-jb2.integrations.ecimanufacturing.com/api/v1/job-materials" &
"?take=" & Number.ToText(PageSize) &
"&skip=" & Number.ToText(Skip),
response =
Json.Document(
Web.Contents(
url,
[
Headers = [
Authorization = "Bearer " & access_token,
Accept = "application/json"
]
]
)
),
items =
if response is list then
response
else if response is record and Record.HasFields(response, "data") then
response[data]
else
{}
in
items,
// -----------------------------
// 3. Generate list of pages until empty
// -----------------------------
Pages =
List.Generate(
() => [Skip = 0, Data = GetPage(0)],
each List.Count([Data]) > 0,
each [Skip = [Skip] + PageSize, Data = GetPage([Skip] + PageSize)],
each [Data]
),
AllItems = List.Combine(Pages),
// -----------------------------
// 4. Convert to Table
// -----------------------------
Output =
if List.Count(AllItems) = 0 then
#table({}, {})
else
let
tbl = Table.FromList(AllItems, Splitter.SplitByNothing(), null, null, ExtraValues.Error),
expanded = Table.ExpandRecordColumn(tbl, "Column1", Record.FieldNames(tbl{0}[Column1]))
in
expanded
in
Output
The function is in there not for us to enter data manually actually it's in there to add data automatically .
- Anonymous8 months agoNot applicable
Hi, kushanNa
First step as blocker is Get Page step: is asking a parameter: as I said before an anutomatic loop would be better.
Even If I enter a parameter (I tried 1) the invoked function created end in error.
As I said before if it could help I'm avaiable to a Team session. Just let me know.
- Anonymous8 months agoNot applicable
Hi kushanNa ,
Apology if I disturb you but I'm in trouble with it.
Do you had my message. Any thoughts?
Kind regards
Giovanni
- kushanNa8 months agoSuper User
Hi Anonymous
No worries, What do you see in the step after GetPage step?
- Anonymous8 months agoNot applicable
Hi kushanNa
GetPages asking for a Skip and in my previous message I reported any values I can use it will invoke a function with error.
Pages at the moment returning an emapty list.
Thanks
Giovanni