Возвращение строки ошибки из abl, если нет совпадения - PullRequest
0 голосов
/ 05 декабря 2018

Я пытаюсь найти в базе данных, а затем удалить запись, если совпадение найдено.Затем, если совпадений не найдено, я хотел бы вернуть ошибку в строковом формате с сообщением об ошибке.

DEF INPUT PARAM i_cCarID LIKE Car.carID NO-UNDO.
DEFINE OUTPUT PARAMETER o_cErrorMsg AS CHARACTER NO-UNDO.
DEF BUFFER carBuffer_B1 FOR Car.


FIND FIRST carBuffer_B1 WHERE carBuffer.carID= i_cCarID EXCLUSIVE-LOCK NO-ERROR.

    IF AVAIL(carBuffer_B1) THEN DO:
        DELETE carBuffer_B1 NO-ERROR.
        IF ERROR-STATUS:ERROR THEN DO:   
            o_cErrorMSG = "Error: ".
            RETURN o_cErrorMsg + ERROR-STATUS:GET-MESSAGE(1).
        END.
    END. 

Этот код, по-видимому, не возвращает никаких ошибок при вызове из Java.

Правка 1. Не приводит ли совпадение даже к ошибке или нужно как-то явно «выбросить» ошибку?

1 Ответ

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

У вас есть выходной параметр, но процедура возвращает.Вот почему вы не видите ошибки.Ваша процедура должна выглядеть примерно так: (В примере есть таблица Customer и недостаточно обработки ошибок)

DEF INPUT PARAM i_cCustNum LIKE Customer.Cust-Num NO-UNDO.
DEFINE OUTPUT PARAMETER o_cErrorMsg AS CHARACTER NO-UNDO.

DEF BUFFER carBuffer_B1 FOR Customer.

FIND FIRST carBuffer_B1 WHERE carBuffer_B1.Cust-Num = i_cCarID EXCLUSIVE-LOCK NO-ERROR.

IF AVAIL(carBuffer_B1) THEN 
DO:
    DELETE carBuffer_B1 NO-ERROR.
    o_cErrorMsg = "Delete Succeeded for id " + string(i_cCarID).
END.
ELSE 
DO:
    o_cErrorMsg = "No record found with id " + string(i_cCarID).
END.
...