Try-Catch

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 LoadYes
On ValidateYes
On SuccessYes
On User inputYes
Subform on add rowYes
Subform on delete rowYes
When a record is Created or Edited
On LoadYes
On ValidateYes
On SuccessYes
On User inputYes
Subform on add rowYes
Subform on delete rowYes
When a record is Edited
On LoadYes
On ValidateYes
On SuccessYes
On User inputYes
Subform on add rowYes
Subform on delete rowYes
When a record is Deleted
On ValidateYes
On SuccessYes
Other workflow events
On a scheduled dateYes
During approval processYes
During payment processYes
In a Custom FunctionYes
In an Action item in reportYes

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.

SyntaxDescription
<exception_variable>.messageThe exception message.
<exception_variable>.lineThe line number where the exception was raised.
<exception_variable>.type

Indicates the origin of the exception. 

Applicable values:

  • "User" – exception raised using the throw statement.
  • "System" – exception raised automatically by Deluge during runtime.
<exception_variable>.dataAdditional 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&nbsp;</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.

Related links