2017-03-27 5 views
1

ich so einen Fehler nach einer NO-ERROR Aussage zu "re-raise" wollen:Re-raise/-Throw einen Fehler

FIND FIRST table 
    WHERE table.ID = myID 
    EXCLUSIVE-LOCK NO-WAIT NO-ERROR. 

IF (NOT AVAILABLE temp AND LOCKED temp) THEN 
    /* Here I want to raise/throw the last error ("Raise ERROR:STATUS") */ 

IF (NOT AVAILABLE table) THEN 
    CREATE table. 

Gibt es eine solche Aussage in Progress?

+0

Welches ist Ihr OpenEdge-Release? –

+0

Es ist OpenEdge Version 10.2B – user2190035

Antwort

3

In OpenEdge 10.1C und darüber hinaus können Sie Fehler werfen. Um einen Fehler zu wiederholen, müssen Sie ihn zuerst FANGEN.

Also entweder,

IF (NOT AVAILABLE temp AND LOCKED temp) THEN 
    UNDO, THROW NEW Progress.Lang.AppError 
     (ERROR-STATUS:GET-MESSAGE (1), 
      ERROR-STATUS:GET-MESSAGE-NUM (1)) . 

oder fangen Sie den Fehler in erster Linie:

DO ON ERROR UNDO, THROW: /* ABL try */ 
    FIND FIRST table 
     WHERE table.ID = myID 
     EXCLUSIVE-LOCK NO-WAIT . 

    CATCH err AS Progress.Lang.SysError: 
     IF LOCKED temp THEN 
      UNDO, THROW err . /* re-THROW */ 
    END CATCH . 
END . /* ABL try block */ 

IF (NOT AVAILABLE table) THEN 
    CREATE table. 
+2

Wird der Fehler ausgelöst, selbst wenn Sie die Anweisung 'NO-ERROR' verwenden? – user2190035

+1

Nein. Der NO-ERROR sollte nicht da sein. –

3

Antwort Mikes ist richtig. Aber nur um frühere Release-Lösungen anbieten zu können, da dies eine permanente Aufzeichnung ist: Um zu verhindern, dass es verfügbar ist, wäre es richtig, RETURN ERROR an die Anruferprozedur zu senden. ERROR-STATUS wird nicht gelöscht, bis NO-ERROR erneut verwendet wird. Sie können die verfügbaren Fehlermeldungen weiterhin abfragen.