GetFacilityModels = (baseUrl as text, twinId as text, accessToken as text) as list =>
let
url = baseUrl & "/twins/" & twinId,
response = Web.Contents(url, [Headers = [#"Authorization" = "Bearer " & accessToken]]),
data = Json.Document(response),
models = data[links],
result = List.Transform(models, each Record.Field(_, "modelId"))
in
result;
// Function to process model assets
GetModelAssets = (baseUrl as text, urn as text, accessToken as text) =>
let
// Define the endpoint URL
url = baseUrl & "/modeldata/" & urn & "/scan",
input = "{""families"": [ ""n"", ""z"" ], ""includeHistory"": false, ""skipArrays"":true}",
response = Web.Contents(
url,
[
Headers = [#"Content-Type"="application/json"],
Content = Text.ToBinary(input)
]
),
// Parse the JSON response
data = Json.Document(response),
result = data
in
result;
data;
// Function to combine all assets into a table
GetAssetsTable = (baseUrl as text, twinId as text, accessToken as text) =>
let
modelList = GetFacilityModels(baseUrl, twinId, accessToken),
assetList = List.Transform(modelList, each GetModelAssets(baseUrl, _, accessToken)),
validTables = List.RemoveNulls(assetList),
result = Table.Combine(validTables)
in
result;
// Helper function to check if an item is an asset
_IsAsset = (item as record) =>
let
isAsset = Record.HasFields(item, {"n:n", "n:!n"})
in
isAsset;
// Function to retrieve model list
[DataSource.Kind="connectortest", Publish="connectortest.Models.Publish"]
shared connectortest.Models = () =>
let
baseUrl = "https://developer.api.autodesk.com/tandem/v1",
twinID = "urn:adsk.dtt:uSyCHvt1QmakLrZ8g4NSdg",
tokenResponse = GetAccessToken(),
accessToken = tokenResponse[access_token],
modelList = GetFacilityModels(baseUrl, twinID, accessToken)
in
modelList;
// Function to retrieve asset list
[DataSource.Kind="connectortest", Publish="connectortest.Assets.Publish"]
shared connectortest.Assets = () =>
let
baseUrl = "https://developer.api.autodesk.com/tandem/v1",
modelID2 = "urn:adsk.dtm:iXzvRVKqQL6q0WYL01oKgA",
tokenResponse = GetAccessToken(),
accessToken = tokenResponse[access_token],
assetList = GetModelAssets(baseUrl, modelID2, accessToken)
in
assetList;
// Data Source Kind description
connectortest = [
Authentication = [
Anonymous = [] // No login UI needed for 2-legged token
]
];
Authorization
函数中缺少有效令牌的标头:
GetModelAssets
需要对串联REST API进行认证 - 请参见Herey。