Функции Azure - запрос привязки ввода Cosmos db не работает - PullRequest
0 голосов
/ 09 декабря 2018

Я пытаюсь запустить функцию Azure, используя триггер Service Bus Queue, который работает нормально.Я также хочу использовать привязку ввода Cosmos Db к той же функции.Функция запускается с конкретным документом и получает результат с привязкой ввода для простого запроса, например:

Select * from c

Но с предложением WHERE тот же запрос ничего не возвращает, хотя условие верно, и данныев базе данных против идентификатора контракта, переданного из триггера:

Select * from c WHERE c.contractId = {contractId}

Ниже приведен код функции Azure

#r "Microsoft.Azure.DocumentDB.Core"
using System;
using System.Collections.Generic;
using Microsoft.Azure.Documents;

public static void Run(IReadOnlyList<Document> input, ILogger log, IEnumerable<dynamic> documents)
{
    if (input != null && input.Count > 0)
    {
        log.LogInformation("Documents modified " + input.Count);
        log.LogInformation("First document Id " + input[0]);
    }
}

function.json

 {
  "bindings": [
    {
      "name": "myQueueItem",
      "type": "serviceBusTrigger",
      "direction": "in",
      "queueName": "tripend",
      "connection": "mobiiot_RootManageSharedAccessKey_SERVICEBUS"
    },
    {
      "type": "cosmosDB",
      "name": "documents",
      "databaseName": "ToDoList",
      "collectionName": "Items",
      "connectionStringSetting": "mobiiot_DOCUMENTDB",
      "direction": "in",
      "sqlQuery": "SELECT * from c where c.contractId= {contractId}"
    }
  ]
}

Запуск данных, поступающих в функцию Azure:

    {"vin":"WP0ZZZ99ZJS167001","milage":780.3333,"contractId":"19277",
"lat":51.47404,"lon":-0.45299000000000006,"noOfHardBreaks":0,"fuelConsumptionRate":22,
"speed":96,"status":"droppedOff","EventProcessedUtcTime":"2018-12-10T09:14:51.6474889Z",
"PartitionId":0,"EventEnqueuedUtcTime":"2018-12-10T09:14:51.5350000Z",
"IoTHub":{"MessageId":null,"CorrelationId":null,"ConnectionDeviceId":"WP0ZZZ99ZJS167001",
"ConnectionDeviceGenerationId":"636795108399273130",
"EnqueuedTime":"2018-12-10T09:14:51.5470000Z","StreamId":null}}

1 Ответ

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

Кажется, ваш код не соответствует function.json.Чтобы установить заполнитель, такой как {contractId}, нам нужно определить собственный тип для десериализации JSON, чтобы код функции мог найти contractId среди поступающих данных.

Попробуйте код ниже.

#r "Microsoft.Azure.DocumentDB.Core"
using System;
using System.Collections.Generic;
using Microsoft.Azure.Documents;

public static void  Run(QueueItem myQueueItem, ILogger log, IEnumerable<dynamic> documents)
{      
    foreach(var doc in documents)
    {
        log.LogInformation((string)doc.id);
    }
}
public class QueueItem
{
    public string contractId { get; set; }
}
...