当前位置: 首页 > 知识库问答 >
问题:

Powerapps下拉控制问题:使用Azure函数中的文本/记录/列表/数据行填充下拉输入控制项时

陶宏浚
2023-03-14

议程:我们试图在下拉列表中显示从SQL获取的数据,但是我们没有直接给出,而是使用“Azure函数”,它可以帮助通过密钥保管库从SQL检索数据

问题:Powerapps下拉列表/列表框控件无法理解Azure函数给出的输出。我们试图呈现Azure函数的输出,即字符串/文本/记录/列表/数据行

错误:

属性需要表值,但此规则生成不兼容的文本值

我们所做的:

  1. 创建了Azure功能(提供了所有需要的访问权限,如托管服务标识、添加到AAD的应用程序等)(测试了该功能,我们得到了预期的输出)
  2. 使用swagger 2.0创建API
  3. 使用上述OpenAPI文件创建了自定义powerapp连接器(连接器工作正常)
  4. 我们从Powerapp画布调用函数,如下所示MCFAzureFunction。运行此按钮(按下按钮1)

帮助:让我们知道如何最好地将响应数据从mazure函数推送到PowerApp下拉列表或列表框控件。

代码:

using System.Linq;
using System.Net;
using System.Net.Http;
using System.Threading.Tasks;
using Microsoft.Azure.WebJobs;
using Microsoft.Azure.WebJobs.Extensions.Http;
using Microsoft.Azure.WebJobs.Host;
using Microsoft.Azure.KeyVault;
using Microsoft.Azure.Services.AppAuthentication;
using System.Data;
using System.Data.SqlClient;
using Newtonsoft.Json;

namespace MCFuncApp
{
    public static class Function1
    {
        private static HttpClient client = new HttpClient();

        private static string BuildConnString(string secret, string dbCatalog)
        {
            return ("Server=********** Timeout=30;");
        }

        private static string DataTableToJSON(DataTable table)
        {
            string JSONString = string.Empty;
            JSONString = JsonConvert.SerializeObject(table);
            return JSONString;
        }

        [FunctionName("Function1")]
        public static async Task<HttpResponseMessage> Run([HttpTrigger(AuthorizationLevel.Function, "get", "post", Route = null)]HttpRequestMessage req, TraceWriter log)
        {

            log.Info("C# HTTP trigger function processed a request.");

            // parse query parameter
            string name = req.GetQueryNameValuePairs()
                .FirstOrDefault(q => string.Compare(q.Key, "name", true) == 0)
                .Value;

            if (name == null)
            {
                // Get request body
                dynamic data = await req.Content.ReadAsAsync<object>();
                name = data?.name;
            }

            string exampleSecret = "Secret";
            string qResponse = "";

            if(name != null)
            {   // "https://********"
                string vaultBaseUrl = "*********";
                var azureServiceTokenProvider = new AzureServiceTokenProvider();
                var kvClient = new KeyVaultClient(new KeyVaultClient.AuthenticationCallback(azureServiceTokenProvider.KeyVaultTokenCallback), client);
                var secret = (await kvClient.GetSecretAsync(vaultBaseUrl)).Value;
                var connString = BuildConnString(secret, "*****");

                string query = "*********";

                var dt = new DataTable();
                using (SqlDataAdapter da = new SqlDataAdapter(query, connString))
                {
                    da.Fill(dt);
                }

                qResponse = DataTableToJSON(dt);                
            }


            return name == null
                ? req.CreateResponse(HttpStatusCode.BadRequest, "Please pass a name on the query string or in the request body")
                : req.CreateResponse(HttpStatusCode.OK, qResponse, "application/json");
        }
    }
}

提前谢谢!

共有1个答案

史绍晖
2023-03-14

我认为这个问题可能与Azure函数返回的JSON内容的结构有关。

支撑结构应类似于:

Table({ Text: "Item 1", Val: 1 }, { Text: "Item 2", Val: 2 }, { Text: "Item 3", Val: 3 })

您可能需要手动序列化返回的行,因为DataRow类包含的信息比您需要的多得多,并使用StringBuilder连接最终结果,然后将其作为响应内容传回。

希望能有帮助。

 类似资料:
  • 问题内容: 我有以下jQuery代码。我可以从server获得以下数据。我该如何对此进行迭代,并用 另外,使用和之间有什么区别。 问题答案: 这应该可以解决问题: 这里的区别和(从jQuery的文档): [getJSON]是Ajax的简写功能,等效于: 编辑:要明确,部分问题是服务器的响应返回的是如下所示的json对象: …因此该属性需要使用手动解析。

  • 我有一个包含5列的mysql数据库表。 id,columnA,columnB,columnC,columnD 我用这些值填充datatable,因此每列有2个(不同的)值。 我希望用户可以从下拉列表中选择这些值。当他/她从columnA中选择第一个数据时,columnB值会根据所选值出现在另一个选择框中。等等..所以我想我需要使用Ajax-jQuery。这是我使用的脚本, 和php代码。 我得到了

  • 问题内容: 我有一个表格(“场地”),其中存储了志愿者可以工作的所有可能场所,每个志愿者被分配为每个场所工作一个。 我想从场所表中创建一个选择下拉列表。 现在,我可以显示分配给每个志愿者的地点,但是我希望它显示下拉框,并且已经在列表中选择了地点。 例如,将ID为7的志愿者分配给了场地编号4 我知道它将采用for或while循环的形式从场地表中拉出场地列表 我的查询是: 如何填充选择下拉框与场馆(

  • 问题内容: 我需要使用JavaScript根据下拉菜单A中的选择更改下拉菜单B的内容。没有涉及到数据库查询- 我事先知道应该在A中选择B的内容。我已经找到了一些使用AJAX的示例,但是由于没有涉及到数据库查询,所以没有必要。谁能为我指出一些示例代码以实现此目的? 问题答案: function configureDropDownLists(ddl1, ddl2) {

  • 问题内容: 我知道在这个问题上有很多问题,但是我仍然不确定该怎么做。 我有一个名为“ CuisineForm”的HTML表单,在用户选择了美食类型之后,AJAX将该表单发送到服务器。AJAX调用工作正常,并且服务器以JSON响应进行响应,其中包含此特定美食的所有服务时间。这些服务时间分为早餐,午餐和晚餐。 这些时间需要以相同的形式填充到3个单独的下拉菜单中。 但我真的不知道如何处理JSON结果以填

  • 问题内容: 我打算根据其他下拉菜单的选择使用AJAX填充下拉框。我遵循了使用位于此处的jQuery的教程-http: //remysharp.com/2007/01/20/auto-populating-select-boxes-using-jquery- ajax/ ,并在选择框名称中更改了选择框ID名称。在脚本中。 当主复选框的值发生更改时,将发送ajax并返回如下: 这与教程代码中返回的JS