Try-Catch
Table of Contents
Overview
The try-catch The try-catch statement is used to handle exceptions in a Deluge script. An exception is a runtime condition that interrupts the normal flow of script execution. Some exceptions are raised automatically by Deluge when runtime errors occur, such as division by zero or accessing an invalid list index. Exceptions can also be raised explicitly using the throw statement when application-specific validation or business rules fail.
The try block encloses the code that might raise an exception. If an exception occurs, Deluge transfers control to the catch block, where you can inspect and handle it. If no errors are found, the Catch block is simply ignored and is not executed.
Syntax
try { <script>// Enclose Deluge script that might raise an exception. // You may also use the throw statement here to raise // an exception explicitly. } catch(<exception_variable>) { <script>// Handle the exception here. // You can inspect, log, or re-throw the exception. }
The throw statement can be used inside the try block to explicitly raise an exception. See the throw statement page for full details.
This task can be used in the following events
| When a record is Created | ||
| On Load | Yes | |
| On Validate | Yes | |
| On Success | Yes | |
| On User input | Yes | |
| Subform on add row | Yes | |
| Subform on delete row | Yes | |
| When a record is Created or Edited | ||
| On Load | Yes | |
| On Validate | Yes | |
| On Success | Yes | |
| On User input | Yes | |
| Subform on add row | Yes | |
| Subform on delete row | Yes | |
| When a record is Edited | ||
| On Load | Yes | |
| On Validate | Yes | |
| On Success | Yes | |
| On User input | Yes | |
| Subform on add row | Yes | |
| Subform on delete row | Yes | |
| When a record is Deleted | ||
| On Validate | Yes | |
| On Success | Yes | |
| Other workflow events | ||
| On a scheduled date | Yes | |
| During approval process | Yes | |
| During payment process | Yes | |
| In a Custom Function | Yes | |
| In an Action item in report | Yes | |
Exception variable attributes
When an exception is caught, Deluge makes its details available through the exception variable specified in the catch statement (for example, e in catch(e)). This applies to exceptions raised automatically by Deluge during runtime as well as exceptions raised explicitly using the throw statement. The exception variable can be used within the catch block to inspect the exception, log its details, or perform appropriate error handling. The following attributes can be used to retrieve individual components of the exception.
| Syntax | Description |
| <exception_variable>.message | The exception message. |
| <exception_variable>.line | The line number where the exception was raised. |
| <exception_variable>.type | Indicates the origin of the exception.
|
| <exception_variable>.data | Additional structured information supplied via the data key in a throw statement. Returns null if no additional data was provided. |
Note: All exception variable attributes are read-only and cannot be modified.
Exception propagation
If an exception occurs inside a function and is not handled by a try-catch statement within that function, Deluge automatically propagates the exception to the calling script. If the calling script does not handle the exception, Deluge continues searching in each caller until a matching catch block is found. If no matching catch block is found, script execution terminates. Learn more
Example 1
Fetch line number and error message using try-catch
In the following example, there are only 3 items in the list, but the script tries to fetch the item at index 10. The resulting error is caught and its details are displayed.
try { products = {"Creator","CRM","Cliq"}; products = products.get(10); products.add("Sheet"); } catch(e) { info e.lineNo; // Displays line number of the statement that caused the error info e.message; // Displays the error message info e; // Displays both line number and error message }// Output:
// 5 // Given index 10 is greater than the list size // Error at line : 5, Given index 10 is greater than the list size
Example 2
Handle errors during price calculation
Typically data used are stored and fetched from Zoho products, however, let's assume the order placed by a customer is stored in the collection variable - order. The inventory details of products available are stored in the collection variable - products. If there is any problem with price calculation or stock updation, an email needs to be sent to the support team. In the following example, the order quantity is fetched incorrectly and stored as an empty value in the order variable. Here, an error will be returned and the script execution of the try block will be terminated. The returned error is captured and sent as an email to support@zylker.com using the catch block.
try { //Price calculation block order = {"item":"Candy","quantity":""}; //An empty value is assigned to the quantity key products={{"item":"Candy","stock":50,"price":100,"vendor-email":"candy-vendor@zylker.com"},{"item":"Cookies","stock":50,"price":75,"vendor-email":"cookie-vendor@zylker.com"}}; for each product in products { if(product.get("item") == order.get("item")) { total_price = product.get("price")*(order.get("quantity").toLong());//Error occurs at this statement because this calculation cannot be performed with an empty quantity value total_price_including_tax = total_price + (total_price*0.05); product.put("stock",product.get("stock") - order.get("quantity").toLong()); } break; } } catch(e) { //Error returned by the try block is stored in the variable - e //Send an email to support@zylker.com with the details about the error occurred sendmail [ from:zoho.loginuserid to:"support@zylker.com" subject:"Something went wrong while processing the order" message:"<div>An error occurred during price calculation or inventory updation. Please check ASAP.<br></div><div><br></div><div><b>Error details </b><b><br></b></div><div>Error Message: "+e.message+"</div><div>Line Number: "+e.lineNo+"<br></div><div><br></div>" ] } // Periodic inventory check // This block will be executed irrespective of if an error is captured in the try catch block. Therefore the function execution will not be hindered because of runtime errors occurred within try block. for each product in products { if(product.get("stock")<50) { sendmail [ from:zoho.loginuserid to:product.get("vendor-email") subject:"Refill request" message:"<div>We're running out of stock. Please refill.<br></div><div><br></div><div><b>Product details: </b><b><br></b></div><div><br></div><div>Name: "+product.get("item")+"<br></div><div>Quantity: 500</div>" ] } }
Example 3
Raise an exception using throw
The following example validates the order quantity before processing. Since a quantity cannot be negative, the script uses the throw statement to raise a user-defined exception. The catch block handles the exception and displays the message.
try{quantity = -5;if(quantity < 0){throw "Quantity cannot be negative.";}info "Processing order...";}catch(e){info e.message;// Displays: Quantity cannot be negative.info e.type;// Displays: User}info "Order validation completed.";// Output: // Quantity cannot be negative. // User // Order validation completed.
For the full syntax of the throw statement, see the throw statement page.