从 PowerApps 中的自定义连接器 (Web API) 访问 JSON 结果

Posted

技术标签:

【中文标题】从 PowerApps 中的自定义连接器 (Web API) 访问 JSON 结果【英文标题】:Access JSON results from Custom Connector (Web API) in PowerApps 【发布时间】:2019-03-02 21:55:31 【问题描述】:

我正在尝试获取 JSON 文本结果,例如

[
    
        "TABLE_NAME": "UpdatePlanning"
    ,
    
        "TABLE_NAME": "StoreInfo"
    ,
    
        "TABLE_NAME": "InSiteTxPerHourPerDay"
    ,
    
        "TABLE_NAME": "inSiteTaskRecordsLocal"
    ,
    
        "TABLE_NAME": "InSiteStoreInformation"
    ,
    
        "TABLE_NAME": "InSiteLogExtractionTest"
    ,
    
        "TABLE_NAME": "InSiteDailySalesPerDay"
    ,
    
        "TABLE_NAME": "FredOfficeLogAlerts"
    ,
    
        "TABLE_NAME": "DPTestAutoScaleTable"
    ,
    
        "TABLE_NAME": "DPGenHoldTable"
    ,
    
        "TABLE_NAME": "DPDailyTopSellerItems"
    ,
    
        "TABLE_NAME": "DPDailyTierSales"
    ,
    
        "TABLE_NAME": "DPDailySales"
    ,
    
        "TABLE_NAME": "DPDailyAvgBasketSize"
    ,
    
        "TABLE_NAME": "ASGInSiteStoreInformation"
    
]

从一个 Web API 中,我封装了一个“自定义连接器”以在 PowerApps 中使用。我的自定义连接器效果很好,我可以在自定义连接器屏幕中对其进行测试,但我不知道如何在 Power Apps 中访问该 JSON 数据以 - 例如 - 填充数据表或填充列表,或者画廊,甚至只是一个标签?请记住,从某些 GET 方法返回的 JSON 模式不是固定的,例如JSON结构可以根据查询的对象类型等而有所不同,但无论如何我都无法让它工作。

示例: 我已经在 PowerApps 应用程序的第一个屏幕的 OnStart 方法中尝试过此操作

Set(myTable,InSiteConnector.gettables())

假设我的 JSON 将存储在变量 myTable 中。但如果我在标签或任何地方引用 myTable,它不会产生任何东西。对数据表或图表或列表使用相同的方法是相同的,没有结果。我在这里想念什么?我已经在网上搜索过,但我尝试的语法似乎都不起作用。

同样,如果我创建一个数据表并尝试选择我的自定义连接器作为数据源,例如它在数据源列表中

但是添加它只会导致它一次又一次地出现在这个列表中......

但是我不能点击它,或者用它做任何看起来很明显的事情,就从它获取数据而言? (例如,能够从我的 JSON 中选择字段,甚至可以从 GET 方法返回原始 BODY)

我已经开始为某人提供赏金,请向我展示一个工作且可复制的示例,该示例将 JSON 从此 Web API 获取到 PowerApps 应用程序中,以便在画廊或类似应用程序中使用。谢谢!

【问题讨论】:

【参考方案1】:

必须定义返回数据的 JSON 架构,任何不符合该架构的数据都不会传递回 PowerApps。这是因为架构用于定义 PowerApps 中的返回类型以供进一步使用。在某种程度上,你可以说连接是强类型的。

下面是一个屏幕截图,您可以在其中定义响应正文,以便数据“显示为设计器中的输出”,这很有帮助。

如果您的架构是可变的,您可以做的是使用 Flow 获取数据并对其进行处理,并在将其返回给 PowerApps 之前符合您定义的响应架构。

例如查看this blog post。如果您的响应正文是可变的,那么您可以在 GetDailySales 步骤之后在流中插入一些逻辑,以调整响应正文以适应响应步骤中定义的 JSON 架构。

【讨论】:

谢谢Meneghino - 这听起来很合理,我能否请教一个使用Flow 获取数据并使其符合标准模式的简单示例?那个评论让我有点难过。我了解目标,而不是实现目标的方法... 为了清楚起见,我已经编辑了我的答案。在 Flow 中,您可以从数据源获取任何形状的 JSON 响应,然后使用一些逻辑和 Compose 操作,您可以重新调整响应以适应您在 PowerApps 中定义的 JSON 架构。在不知道 JSON 响应的可变性的情况下很难具体说明。 不不,这对我来说非常有意义,Meneghino,谢谢 - 我可以查看 Compose 操作并从那里弄清楚。我采纳了您的建议,并在我的自定义连接器中添加了“强类型”响应!伟大的!现在我回到 PowerApps ......我有一个按钮,我在其中调用自定义连接器的“gettables”功能 - Set(getTables,InSiteConnector.gettables()) 但仍然不太确定如何访问“我在自定义连接器中定义的 TABLE_NAME''token'(请参阅我的原始帖子了解 JSON 的样子) 在 PowerApps 中将 Label 的 Text 属性设置为 getTables。点,看看提出了哪些选项。您可以通过 . 访问 getTables 的内容 我已经尝试过了……但使用的是“getTables”。在标签上只是给了我一个红色的'波浪',说'意外的字符。该公式包含“Ident”,其中预期为 EOF”

以上是关于从 PowerApps 中的自定义连接器 (Web API) 访问 JSON 结果的主要内容,如果未能解决你的问题,请参考以下文章

SharePoint Online 开发:什么是PowerApps如何连接创建和使用?

如何使用 @solana/web3.js 从 Solana 中的自定义令牌中删除铸币权限?

如何从 Laravel 8 中的自定义 Web 路由中删除“api/”前缀?

SharePoint 2013 中的自定义字段

重新打开PowerApps后我无法从PowerBi Integration检索数据

从 Kentico 10 中的自定义表重复器中过滤重复的列值