[gelöst] Ein XMLPort ohne Fehlermeldung abbrechen

28. September 2007 09:29

Hallo!

Gibt es eigentlich eine Möglichkeit in einen XMLPort, aber ohne ERROR(...);, die Verarbeitung abzubrechen?
Zuletzt geändert von f.ritz am 3. Oktober 2007 22:29, insgesamt 3-mal geändert.

28. September 2007 09:34

Ich vermute mal du möchtest einen kontrollierten Abbruch.

Sollte das dann nicht mit QUIT gehen?

28. September 2007 09:37

Heike Bennerscheid hat geschrieben:Ich vermute mal du möchtest einen kontrollierten Abbruch.

Genau!


Heike Bennerscheid hat geschrieben:Sollte das dann nicht mit QUIT gehen?

QUIT; - eine unbekannte Variable im XMLPort

28. September 2007 09:42

:shock:

QUIT (Dataport, Report, XMLport)
Use this function to abort the processing of a dataport, report or XMLport.

QUIT
Comments
When the QUIT function is used, the dataport, report or XMLport is left without committing any changes that were made during the execution to the database. The OnPostReport, OnPostDataPort or OnPostXMLport trigger will not be called.


Das steht im Reference Guide

28. September 2007 09:46

Moin!

f.ritz hat geschrieben:QUIT; - eine unbekannte Variable im XMLPort

Versuch es mal so:

Code:
currXMLport.QUIT;

Gruß, Marc

28. September 2007 10:43

Danke für die Tips!


Der currXMLport.SKIP; bringt die gewünschte Funktionalität! Heißt - bricht die Verarbeitung im XMLPort ab und die Funktion XMLPort.IMPORT; liefert den FALSE zurück.

28. September 2007 11:58

Uuuups!

Habe mich gerade wohl vertan - keine der genannten Funktionen bricht die komplette Verarbeitung im XMLPort ab! :evil:

Siehe auch hier
Zuletzt geändert von f.ritz am 28. September 2007 12:00, insgesamt 1-mal geändert.

28. September 2007 12:00

Wo schreibst du den Befehl denn rein?

28. September 2007 12:02

Heike Bennerscheid hat geschrieben:Wo schreibst du den Befehl denn rein?

In einem der Trigger, im C/AL-Code, des XMLPorts.

28. September 2007 12:04

Welchen Trigger denn? (Je nachdem gibt es da ziemlich viele :wink:)

28. September 2007 12:07

Heike Bennerscheid hat geschrieben:Welchen Trigger denn? (Je nachdem gibt es da ziemlich viele :wink:)


Ist es nicht Egal? Ich möchte, dass wenn ein Inhalt eines Tags(wieso auch immer...) nicht passt - der komplette XMLPort abgebrochen wird. Aber speziell die ich meistens Brauche sind die OnAfterAssignfield() der einzelnen Tags.

28. September 2007 12:09

CurrXMOport.QUIT sollte eigentlich in jedem Trigger funktionieren - wenn der Code bis dahin auch wirklich durchlaufen wird!

28. September 2007 12:22

Natalie hat geschrieben:CurrXMOport.QUIT sollte eigentlich in jedem Trigger funktionieren - wenn der Code bis dahin auch wirklich durchlaufen wird!


Also der CurrXMLPort.QUIT bringt überhaupt nichts - der nachfolgende Code wird einfach weiter verarbeitet.
Der CurrXMLPort.BREAK und CurrXMLPort.SKIP bricht nur den aktuellen Trigger ab.

Was mache ich jetzt?

28. September 2007 12:36

du könntest in den nachfolgenden triggern schauen ob davor ein QUIT passiert ist und dann die Trigger SKIP(en).

28. September 2007 13:31

Ich kann mich noch daran erinnern, dass es eine Version gab, wo ein ähnliches Problem beim Report-Designer bestand.
Lösung war, direkt nacheinander zuerst den CurrReport.QUIT und direkt danach einen CurrReport.SKIP bzw. CurrReport.BREAK aufzurufen.

In diesem Fall sollte es dann wie folgt funktionieren:
Code:
CurrXMLport.QUIT;
CurrXMLport.BREAK;

28. September 2007 14:00

Ich habe jetzt jegliche Kombinationen mit CurrXMLport.QUIT; ausprobiert. Bringt nichts! :evil:
Zur Info: Ich benutze die 4.03-Version.

28. September 2007 14:06

Also ich würde dann eine variable vom Typ Boolean deklarieren und diese auf False setzen. Würde dann diese variable auf True setzen sobald ein QUIT durchgefüht wurde. Dann eine Abfrage in den Triggern machen ob diese Variable auf True steht und wenn ja, den Trigger mit SKIP überspringen. Muss man zwar dann in jedem Trigger warscheinlich machen, aber ne bessere Idee hab ich leider grad auch nicht.

28. September 2007 14:23

Willst du nur keine Fehlermeldung ausgeben? oder willst du alle bisher eingelesenen passenden Datensätze behalten?
in beiden Fällen kannst du den XMLPort mit ERROR('') - ja, mit dem leeren String in der Klammer - abbrechen ohne Meldung. Damit die Datensätze, die in Ordnung waren, nicht wieder verschwinden, machst du im OnAfterInsertRecord bzw im OnAfterAssignVariable der obersten Ebene eines kompletten Satzes ein COMMIT; rein, die Daten bleiben dann erhalten.
Zuletzt geändert von Michael Schumacher am 28. September 2007 16:31, insgesamt 1-mal geändert.

28. September 2007 16:24

Michael Schumacher hat geschrieben:in beiden Fällen kannst du den XMLPort mit ERROR() ja, mit der leeren Klammer, abbrechen ohne Meldung.

Nicht ganz richtig: Du musst schon einen leeren String übergeben, also ERROR('');

28. September 2007 16:31

hast recht, habe meinen Originalbeitrag editiert.

3. Oktober 2007 22:28

Danke!!!!!
ERROR(''); - ist für mich die beste Lösung! Denn ich möchte keine Fehlermeldung, aber einen Abbruch der das schreiben jeglicher Datensätze in die Datenbank verhindert und den Befehl XMLPORT.IMPORT einfach mit dem Rückgabewert FALSE beendet.

Danke an alle!!!