Проблемы с Powerapps DropDown Control: при заполнении выпадающих элементов управления вводом текстом / записями / списком / DataRows из функции Azure - PullRequest
0 голосов
/ 10 декабря 2018

Повестка дня: Мы пытаемся отобразить наши данные, извлеченные из SQL , в раскрывающемся списке, но вместо прямой передачи мы используем «Функции Azure» который может помочь получить данные из SQL через хранилище ключей

Проблема: Элемент управления Powerapps DropDown / ListBox не может понять выходные данные, заданные функцией Azure.Мы попытались отобразить выходные данные из функций Azure, т. Е. Строка / текст / записи / список / DataRows

Ошибка:

свойство ожидает значения таблицы, но это правило создаетнесовместимые текстовые значения

Что мы сделали:

  1. Создана функция Azure (предоставлены все необходимые права доступа, такие как удостоверение управляемой службы, добавление приложения в AAD и т. д..) (Протестировав функцию, мы получим ожидаемый вывод)
  2. Создан API с swagger 2.0
  3. Создан пользовательский разъем powerapp с указанным выше файлом OpenAPI (Соединитель работает отлично)
  4. Мы вызываем функцию из холста Powerapp следующим образом: MCFAzureFunction.RunThis(Button1.Pressed)

Help: Сообщите нам, как лучше всего передать функцию ответных данных fromazure в выпадающий список или элемент управления 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 Ответ

0 голосов
/ 10 декабря 2018

Я думаю, что проблема может быть связана со структурой JSON , которую возвращает Функция Azure .

Поддерживаемая структура должна выглядеть примерно так:

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

Вам может потребоваться сериализовать возвращаемые строки вручную, поскольку класс DataRow содержит гораздо больше информации, чем вам нужно, и объединить конечный результат, используя StringBuilder, прежде чем передать его обратно в качестве содержимого ответа..

Надеюсь, это поможет.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...