THROW ERROR FROM CRUD OPERATION

Posted by Roger Blanchard on 28-May-2014 08:26

Is there anyway to throw an error on the appserver that can be retrieved by the mobile device? With invoke operations you can use the ReturnValue in the response object. It would be nice to let the mobile user know why an operation failed.

All Replies

Posted by johncat on 28-May-2014 09:58

How about

   THROW NEW Progress.Lang.AppError("Problem with 'wibble'.").    ?

Does the error message get returned to the client?  I'm reusing some existing REST services, but if I get an error back from the server, the error message is contained in the 'errorThrown' parameter of the failure event.

Funnily enough, thinking about this has helped me solve something else, so thanks for that!

Posted by Roger Blanchard on 28-May-2014 10:01

I can THROW the error just fine but I do not see anything on the mobile client. The mobile client thinks the service call was a success.

Posted by egarcia on 28-May-2014 11:07

Hello.

Are you doing the THROW from the CRUD method, something like "ReadCustomer" or "UpdateCustomer"?

Here is how the code looks like in one of my test programs:

ROUTINE-LEVEL ON ERROR UNDO, THROW.

CLASS CustomerBE:

...

   METHOD PUBLIC VOID UpdateCustomer(INPUT-OUTPUT DATASET dsCustomer):    

       UNDO, THROW NEW Progress.Lang.AppError("Error message.").

       THIS-OBJECT:commitCustomers(INPUT "", ROW-MODIFIED).        

   END METHOD.

...

Could you check that the network request returns HTTP error 500 with a request body like the following?

{"_retVal":"Error message.","_errors":[{"_errorMsg":"ERROR condition: The Server application has returned an error. (7243) (7211)","_errorNum":0}]}

I hope this helps.

Posted by Roger Blanchard on 28-May-2014 11:36

Hello Edsel,

I am throwing from CRUD method. Let me check the network request. Thanks.

Posted by maura on 28-May-2014 12:25

Also, I have similar code to Edsels' in my Update. I then have the following code in my UpdateService's error handler and see error message in responseText object.

/* input paramters are: jqXHR, textStatus */

var msg = "";

var msg = "";

if (textStatus != undefined)

  msg = textStatus;

if (jqXHR){    

  msg = msg + " Status :" + jqXHR.status;

  msg = msg + " responseText :" + jqXHR.responseText;

}

if (msg != undefined)

   alert("Update: " + msg);

else

   alert("Update ERROR");

console.log("CustomerUpdate ERROR" + msg);

Posted by Roger Blanchard on 28-May-2014 15:07

You were both correct. I had a CATCH block in an include file that was catching the THROW on the appserver.

Thanks

This thread is closed