none
Service Bus Topic receive wrong data-type from logic apps RRS feed

  • Allgemeine Diskussion

  • Hello together,

    i am currently in a evaluation process with microsoft azure service bus in cooperation with logic apps and api management.

    All things are working well, except one problem with data types mapping between an incoming logic app and the "send to a topic subscription" connector .

    The problem is, that i get the data with a key "price" for example from type number in a json oject. I declare the key "price" as a number and dont tick it into "" for the schema. Afterwards i configure the "send to a topic subscription" connector in logic apps, which is working well, becouse in the run history the raw output of the message content from logic app is a valid json with a valid price field like {"price": 49}.
    If i have a SQL Filter in my service bus topic now, which is related to any context for example [price > 100]. The error message of the dead letter queue is like " cannot convert string to integer" and if i have a look in the service bus explorer dead letter queue and select the specific message the message custom propertie "price" is from type string! So ofc it can't compare string with number/integer/double, but it must be a auto mapping between the logic app connector and the service bus message handling.

    Did anyone have experience about that specific problem or any suggestions for a work around/ solution?

    Best regards

    Montag, 5. August 2019 14:20

Alle Antworten

  • Versuchs mal bitte auf Deutsch;-).
    Montag, 5. August 2019 16:58
  • Folgendes Problem besteht:

    ich möchte aus einem API Aufruf Daten gegen ein Schema entgegen nehmen und diese werden über eine Logic App in eine Topic in den Service Bus gesteckt, welche danach weiter verarbeitet werden.
    Das funktioniert alles soweit, allerdings besteht ein Fehler zwischen der Verbindung in Logic App und der Topic in Service Bus.
    Wenn ich eine Number im API Aufruf übergebe und diese in Logic App verarbeite und immer als "number" deklariere und auch ein valides JSON daraus erzeuge und dieses valide JSON (z.B. { "price": 49 } was eindeutig als number deklariert ist) an den Servie Bus schicke und es im Service Bus Explorer die Nachrichten einsehe, steht dort: " Key: Price ; Type: String ; Value 49 ".
    Da ich gerne eine Regel gegen diesen Preis schreiben möchte, steht im Dead Letter Queue Error: "Cannot be applied to operands of type string and long"
    In der Run History in Logic App habe ich die Nachricht verfolgt und das Object als Output ist das richtige valide JSON und ich habe den "Price" natürlich als Custom Prpperty in der Logic App gesetzt, damit ich den Filter anwenden kann.
    Somit muss das Problem zwischen der Logic App und dem Service Bus liegen, welches falsche Daten bekommt/ diese falsch umschreibt.

    Irgendeine Idee, woran dies liegen kann / ähnliches Problem bekannt / Wordaround gegeben?
    Habe bereits etliche Foren durchstöbert, allerdings hat niemand ein solches Problem für die Filterung auf number/long/double.

    Mittwoch, 7. August 2019 06:37
  • Das Problem ist, das JSON (wie auch XML) rein textbasiert ist.
    Aus den Daten selber kann man also nicht erkennen, welcher Typ ein Wert ist.
    Man kann nur sehen, ob ein Wert ein skalarer Typ ist (Zahl, Zeichen, Bool, ...) oder ein komplexer Typ, der wieder mit geschweiften Klammern beschrieben wird.

    Für die Typisierung zwischen Sender und Empfänger gibt es eine Vereinbarung, wie eine JSON/XML in eine Objekt-Variable deserialisiert wird. Erst diese Variable ist dann mit entsprechenden Methoden verwendbar.
    Für JSON gibt es ähnlich wie für XML auch Schema-Informationen, die wiederum als JSON abgelegt werden:
    http://json-schema.org/learn/getting-started-step-by-step.html

    Da ich nun deine Software nicht kenne, stellt sich die Frage in wie weit Typisierungen ausgetauscht und verwendet werden. Ohne Typisierung oder Schema ist im JSON auch erst mal alles vom Typ Text.
    Mittwoch, 7. August 2019 09:36
  • Die Typisierung geschieht ja über die Logic App. In dieser habe ich mein Schema angeben und damit gehe ich davon aus, dass die Logic App das Schema und den Payload zusammen valide in den Service Bus steckt.

    Abgesehen davon passiert dies auch mit Testdaten, das hat noch nichts mit interner Software zu tun.

    Nochmal zum Szenario:
    -API Aufruf, bei der ein valides JSON gesendet wird
    - Logic App holt sich Daten über API Management rein
    - JSON Schema wird erstellet anhand des JSON vom API Aufruf
    - Verbindung zum Service Bus Topic wird geöffnet
    - Daten werden zum Service Bus gesendet und Verbindung geschlossen

    Montag, 12. August 2019 09:08
  • Da muss dann trotzdm irgendwo ein Fehler in der Kette der Definitionen liegen.
    Und sei es nur, dass der numerische ggf. mit Nachkomma, also z.b. 49.00 kodiert werden muss.

    Montag, 12. August 2019 09:59