[GELÖST] api Odata v4 after OnInsertRecord

10. März 2025 10:41

Hallo,

ist es möglich, nachdem etwas per Post eingegangen ist und nach dem OnInsertRecord, eine Validierung auszuführen? Das heißt, man hat eine Response erhalten, und danach soll etwas ausgeführt werden. Ich arbeite mit page api /ODataV4/
Zuletzt geändert von Klaus90 am 13. März 2025 12:15, insgesamt 1-mal geändert.

Re: api Odata v4 after OnInsertRecord

11. März 2025 15:05

kann man da nichts machen commit funktioniert nicht. ich brauche nur etwas wo das danach getriggert wird

Re: api Odata v4 after OnInsertRecord

11. März 2025 18:09

also mich würde interessieren, was da genau nicht geht? und meine Antwort auf deine Frage lautet direkt mal ja

wenn dein Record eingefügt wird, dann werden auch die Triggerchen ausgeführt - die von deiner Page und die von deiner Table und sonst irgendwelche Trigger.....
Commits lässt du bitte einfach mal komplett weg -> außer du weißt was du da tust.

ein paar mehr Informationen wären zur Beantwortung deiner Frage hilfreich.

Re: api Odata v4 after OnInsertRecord

13. März 2025 10:47

Es funktioniert so, wie ich es mir vorstelle: Wenn ich einen POST-Request absende und in der Seite beim Trigger OnInsertRecord einen Breakpoint setze, springt der Debugger an („Nächstes Element debuggen“). Solange der Debugger aktiv ist, erhält Postman keine Response. Das bedeutet für mich: Wenn ich (um es zu übertreiben) 1.000 Zeilen Code in den OnInsertRecord schreibe, dann dauert die Response entsprechend lange.

Ich möchte den eingehenden Input validieren, aber wenn der Aufruf dadurch 30 Sekunden dauert, bringt mir die Validierung an dieser Stelle wenig. Daher möchte ich die Daten zunächst nur im System speichern, sodass der Aufruf schnell abgeschlossen ist, und die Validierung erst danach durchführen. Am liebsten wäre es mir, wenn der Response-Body nicht mitgesendet wird, sondern nur der Header.

Was ist das allgemeine Problem? Der Aufruf dauert länger als 200 ms.

Re: api Odata v4 after OnInsertRecord

13. März 2025 12:15

https://learn.microsoft.com/en-us/opens ... 43ef73e882
das geht.

Re: api Odata v4 after OnInsertRecord

13. März 2025 15:36

Klaus90 hat geschrieben:https://learn.microsoft.com/en-us/openspecs/windows_protocols/ms-odata/b4768cbf-13d5-40df-bfa3-7d43ef73e882
das geht.


schön das du damit eine Lösung hast.
nur mal so die Gegenfrage - die Validierung wirft nen Error....das soll die Gegenstelle nicht mitbekommen? Wenn ja, warum nicht?

Re: [GELÖST] api Odata v4 after OnInsertRecord

18. März 2025 17:23

Bei mir ist in der URL /ODataV4/ vorhanden. Im Webdienst lege ich fest, welche Codeunit oder Page für die API verwendet wird. Ich habe eine Page ausgewählt, die beispielsweise nur ein Feld mit einer Länge von 80 Zeichen hat. Wenn ich ein POST mit einem JSON-String ausführe, der länger als 80 Zeichen ist, erhalte ich eine vom System generierte Fehlermeldung im Response-Body:

Code:
{
    "error": {
        "code": "Application_StringExceededLength",
        "message": "Die Länge der Zeichenfolge beträgt 172, darf aber höchstens 80 Zeichen umfassen. Wert: aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa  CorrelationId:  b60dc3fe-705f-4c7d-a00b-26185da53ea2."
    }
}


Ich muss nicht alles manuell entwickeln, um solche Fehler abzufangen, da das System bereits ein eigenes Error-Handling hat. Wenn ich jedoch eine eigene Validierung programmieren möchte, z. B. eine Tabelle abfragen und bestimmte Prüfungen durchführen, kann dies dazu führen, dass die Dauer des Calls steigt (sollte unter 200 ms liegen). Der Grund dafür ist, dass auf eine Antwort gewartet wird (TCP als Transport für HTTP/1.1 und /2). Ich war unsicher, wie ich mit einem Call umgehen soll, der etwa 830 ms gedauert hat. Dann ist mir eingefallen: Warum nicht einfach den Body der Response entfernen und nur den Body zulassen, der einen Fehler enthält? Dies lässt sich im Header "Prefer" mit dem Wert "return-no-content" erreichen. Jetzt dauert der Call nur noch 30 ms, was gut ist.

Re: [GELÖST] api Odata v4 after OnInsertRecord

19. März 2025 09:32

oki doki - vielen Dank für die ausführliche Beschreibung!