Try-Catch
Table of Contents
Overview
The try-catch statements are used as "exception handlers" that can test Deluge scripts for run-time errors, and perform required actions if any errors are found. The exception handler is established by enclosing deluge code, which you think might throw an error, in the Try block. The Try block is immediately followed by a Catch block which contains code to be executed if any errors are thrown in the Try block. If no errors are found, the Catch block is simply ignored and is not executed.
Syntax
try { <code>//Run code here. Enclose Deluge script that might throw an error. } catch(<exception_variable>) { <code>//Handle errors here. Write Deluge script to perform any action if errors are found in Try block. }
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
The <exception_variable> holds the error message and line number of the statement that caused the error. To fetch individual components, the following 2 attributes can be used:
Syntax | Description |
<variable> = <exception_variable>.lineNo; | Fetches the line number of the statement that caused the error. |
<variable> = <exception_variable>.message; | Fetches the error message. |
Example 1
In the following example, there are only 3 items available in the list, however, the next statement tries to fetch the item at index 10. Hence, an error will be thrown. The thrown error is captured in the catch block and .
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 }
Here, the value stored in the exception variable - e is: Error at line : 6, Given index 10 is greater than the list size
Example 2
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>" ] } }