如何重写损坏的查询?
我正在 Power Query 中编写一些 M 代码,其中有 GraphQL 部分提交给 API。目标是检索一些员工记录:ID、姓名和访问状态。现在我收到错误请求错误,据说是由于我的语法在查询中的某个时刻不正确。到目前为止,我使用的所有查询都是基于不同节点的模板查询。根节点如图 1 所示,我正在查询 WorkerAccess(其文档位于图 2 中)。直到我感兴趣的节点的其余分支如图 #3 所示。
在我基于模板创建的四个查询中,出于我的目的所需的唯一更改很小。我已经包含了下面的模板,并在可互换术语旁边添加了注释。据我所知,我不需要更改任何其他内容即可获得我需要的结果。但是,WorkerAccess 查询的参数与我使用过的其他查询有所不同,即它似乎需要一个工作人员 ID。这是每当我尝试调用时收到错误请求错误的可能原因之一。其他查询的参数中通常包含“First”和“After”。
let
Source = (apiToken as text, optional endCursor as text, optional data as list) =>
let
endCursor = if endCursor is null then "" else endCursor,
query = "{
""query"": ""
{
// Everything after 'results:' can be changed depending on the query
results: PeopleOnSiteHistory(First: 2, After: \""" & endCursor &"\"") {
PageInfo {
HasNextPage
EndCursor
}
Items {
PersonId // these items can be changed to reflect what I want back
PersonName
}
}
}
""
}",
JSON = Web.Contents("https://cloud.3dsafety.com.au/graphql",
[
Headers = [#"X-API-Key"=apiToken, #"Content-Type"="application/json"],
Content = Text.ToBinary(query)
]
),
Source = Json.Document(JSON),
pageInfo = Source[data][results][PageInfo],
items = Source[data][results][Items],
appendedData =
if pageInfo[HasNextPage] = true and data is null then
List.Combine({{}, items})
else List.Combine({data, items}),
output =
if pageInfo[HasNextPage] = true then
// Name of PQ query goes here after '@' sign
@GetPeople(apiToken, pageInfo[EndCursor], appendedData)
else
// Items go in the curly braces again
Table.FromList(appendedData, Record.FieldValues, {"PersonId", "PersonName"})
in
output
in
Source
这是损坏的查询,显示了相关更改:
... "{
""query"": ""
{
results: WorkerAccess(Id: 1) {
PageInfo {
HasNextPage
EndCursor
}
Items {
Id
Name
AccessStatus
}
}
}
""
}",
...
@GetWorkerStatus(apiToken, pageInfo[EndCursor], appendedData)
else
Table.FromList(appendedData, Record.FieldValues, {"Id", "Name", "AccessStatus"})
...
不熟悉 Power Query,但看起来您试图在结果中返回不正确的结构。
WorkerAccess
查询采用一个参数:Id
。它返回一个 WorkerProjectAccess
类型。
这将是来自客户端的有效 GraphQL 查询,它会返回类型树中所有可能的字段:
query myQuery($Id: ID!) {
WorkerAccess(Id: $Id) {
Id
ProjectName
NextAction
Sites {
TotalCount
PageInfo {
HasNextPage
EndCursor
}
Edges {
Cursor
Node {
Id
Name
AccessStatus
}
}
Items {
Id
Name
AccessStatus
}
}
}
}
而在您的情况下,您似乎在返回类型的根级别有
PageInfo
和 Items
。