`let
// Кодирование учетных данных в формате base64
basic = Binary.ToText(Text.ToBinary("***" & ":" & "***"), BinaryEncoding.Base64),
// Определение функции для выполнения GET-запроса с учетом авторизации
GetJson = (url as text, authHeader as text) =>
let
// Выполнение GET-запроса и получение данных в формате JSON
response = Web.Contents(url, [Headers=[#"Authorization"=authHeader]]),
json = Json.Document(response)
in
json,
// Определение функции для получения прогресса выполнения запроса
GetProgress = (url as text, authHeader as text) =>
let
// Получение данных прогресса в формате base64 и последующий парсинг JSON
response = Web.Contents(url, [Headers=[#"Authorization"=authHeader]]),
jsonResponse = Text.FromBinary(response, BinaryEncoding.Base64),
json = Json.Document(jsonResponse)
in
json,
// Определение функции для получения результата запроса
GetResult = (url as text, authHeader as text) =>
let
// Получение результата в формате base64 и последующий парсинг JSON
response = Web.Contents(url, [Headers=[#"Authorization"=authHeader]]),
jsonResponse = Text.FromBinary(response, BinaryEncoding.Base64),
json = Json.Document(jsonResponse)
in
json,
// URL и заголовок авторизации для получения отчета
url1 = "https://asu.***:7050/rest/Report/Start/Stat?Objs=3157234151&StTime=2023-06-01T00:00:00&EnTime=2023-07-01T00:00:00&Params=ZStopTime,NZStopTime,MoveTime,PathLen,Date,WorkTime_TRASH,WorkTime_STEAM,WorkTime_CRANE,WorkTime_BLADE,WorkTime_PUMP,WorkTime_DIGGER,WorkTime_MIXER,WorkTime_SPREADER,WorkTime_GENERATOR,WorkTime_PUMP_1,WorkTime_CEMENTING,WorkTime_DRILL&format=json",
authHeader = "Basic " & basic,
// Получение отчета
result1 = GetJson(url1, authHeader),
requestID = result1[RequestID],
// URL и заголовок авторизации для получения прогресса выполнения отчета
url2 = "https://asu.***:7050/rest/Report/GetProgress/" & requestID & "?format=json",
authHeader2 = "Basic " & basic,
progress = GetProgress(url2, authHeader2),
// Функция ожидания завершения выполнения запроса
waitForCompletion = () =>
let
// Проверка завершения и ожидание, если запрос еще не завершен
doneFlag = progress[Done],
waitPeriod = #duration(0, 0, 0, 10),
endTime = DateTime.LocalNow() + waitPeriod
in
if doneFlag <> 1 then
let
loop = List.Generate(
() => [result = GetProgress(url2, authHeader2), currentTime = DateTime.LocalNow()],
each [result][Done] <> 1 and [currentTime] < endTime,
each [result = GetProgress(url2, authHeader2), currentTime = DateTime.LocalNow()]
),
lastResult = List.Last(loop),
doneFlag = lastResult[result][Done]
in
doneFlag,
// Получение окончательного результата
finalResult = GetResult("https://asu.***:7050/rest/Report/GetResult/" & requestID & "?format=json", authHeader)
in
finalResult`
There was an attempt to raise finalresult in else, but unfortunately there was no result. I also removed queries step by step from bottom to top. requests are processed until the last step. replaced the login password url with asterisks
I am attaching a screenshot of the error. Please direct me where to dig in search of a solution to this problem? enter image description here
In PowerQuery, if
statements need an else
and you are missing an else
at the bottom, in the waitForCompletion
step.
Try updating it to:
waitForCompletion = () =>
let
doneFlag = progress[Done],
waitPeriod = #duration(0, 0, 0, 10),
endTime = DateTime.LocalNow() + waitPeriod
in
if doneFlag <> 1 then
let
loop = List.Generate(
() => [result = GetProgress(url2, authHeader2), currentTime = DateTime.LocalNow()],
each [result][Done] <> 1 and [currentTime] < endTime,
each [result = GetProgress(url2, authHeader2), currentTime = DateTime.LocalNow()]
),
lastResult = List.Last(loop),
doneFlag = lastResult[result][Done]
in
doneFlag
else doneFlag, // <-- SEE HERE