Kaizen #139: Using Functions in Client Script and Handling Timeouts

Kaizen #139: Using Functions in Client Script and Handling Timeouts



Hello everyone!

Welcome back to another interesting Kaizen post. In this post, we can discuss how to invoke Functions using Client Script and how to handle Timeouts in Client Script. This post will answer the question raised in the post, Why Client Script is not running after function execution?


In this Kaizen post,
1. What are Functions in Zoho CRM?
2. How to Invoke a function from a Client Script?
3. Use Case to use existing function in Client Script
4. Solution
5. Timeouts in Client Script
6. How to handle timeouts in a Client Script?
7. Timeout Scenario
8. Solution
9. Summary

1. What are Functions in Zoho CRM?

      Functions in Zoho CRM follows the Serverless Computing architecture. It follows cloud computing execution model in which the cloud provider dynamically manages the allocation of machine resources. Zoho CRM provides options for the customer to write their own functions using Deluge script and run their code ( proprietary within Zoho CRM ) without worrying about deploying their code in servers. Click here to know more about Functions.

2. How to Invoke a Function from Client Script?

      You can invoke a function from a Client Script using the  execute() method. Here is the syntax of execute() method. The Client Script execution will only proceed after the Function has completed, demonstrating synchronous behavior.



3. Use Case to use existing function in Client Script

      Zylker, a manufacturing organization, utilizes Zoho CRM. Within their CRM, there is an existing function sendmailToContactRoles that allows meeting invites to be sent to all contact roles associated with a Deal at the click of a button. Deals often require inputs and approval from various stakeholders. By inviting all contact roles, Zylker ensures that all necessary parties are involved in the decision-making process, reducing delays and improving the chances of closing the deal successfully. To avoid accidental clicks, 
  • The admin wants a confirmation message to appear when the Mail icon is clicked, asking for approval and trigger the Function based on user selection. 
  • Additionally, the admin would like to display a success notification , if the emails are sent successfully.
  • Also, once the email is dispatched, a tooltip saying "Invite Sent" should be added should be added to the Mail icon.

4. Solution

  • Create a Client Script to accomplish the above requirements. Click here to know how to create a Client Script.
  • Create a Client Script for "Deals" module with onClick Event and Icon Event Type for the Detail Page(Canvas).

  • Enter the following code and click Save.
  1. var isProceed = ZDK.Client.showConfirmation('Do you want to invite the Contacts of the Deals', 'Proceed', 'Cancel');
  2. var elem = ZDK.UI.getElementByID('icon');
  3. //If user clicks Proceed button
  4. var deal_rec = $Page.record_id;
  5. if (isProceed) {
  6.  ZDK.Apps.CRM.Functions.execute("sendmailToContactRoles", deal_rec);
  7.  ZDK.Client.showMessage(" All the Contacts have been invited successfully");

  8.  elem.addToolTip({ text: 'Invite Sent' });
  9. }
  10. else {
  11.  elem.addToolTip({ text: 'Click to send invite' });
  12. }

  • After getting user's confirmation with showConfirmation() , the execute() method triggers the function. 
  • The parameters of execute() are function name and parameters
  • The name of the existing function is "sendmailToContactRoles". 
  • The parameters of the function are record ID of the Deal and subject of the email.
  • $Page is a constant supported by Client Script, using which you can get information about the current record. 
  • $Page.record_id will give the id of the current record.
  • Once the function gets executed successfully, you can display the success message using showMessage() . To know more about displaying messages using Client Script , check our Kaizen post Creating Alerts and messages using Client Script.
  • Here is how the Client Script works.

  • Here is the Function code where emailSubject and deal ID are the arguments of this function.
  1. relatedcontrole = zoho.crm.getRelatedRecords("Contact_Roles","Deals",input.dealId.toLong());
  2. emailSubject="Meeting Invite";
  3. emailContent = " Click the following link to join the meeting this evening at 5.00 pm" + " https://meeting.zoho.com/meeting/presenter.do?key=1069852805&cid=5668066&x-meeting-org=53296550";
  4. salutation = "<p>Hello!!<br /><br /></p>";
  5. signature = "<br /><br /><p>Best Regards,<br />Patricia Boyle</p>";
  6. sub = input.emailSubject.toString();
  7. str = input.emailContent.toString();
  8. str = concat(salutation,str);
  9. str = concat(str,signature);
  10. for each role in relatedcontroles
  11. {
  12. emailAddress = role.get("Email");
  13. info emailAddress;
  14. sendmail
  15. [
  16. from :zoho.adminuserid
  17. to :emailAddress
  18. subject :sub
  19. message :str
  20. content type :HTML
  21. ]
  22. }

  • You can achieve the functionality of sending emails in Functions using Client Script itself using fetchRelatedRecords() and  openMailer(). Here, we have made use of the existing Function. 
You can use Functions in Client Script,

To leverage existing Functions for similar functionality, thereby enhancing reusability and to trigger Functions based on UI events such as Icon Event, onType Field Event, Canvas Text Event, and others, beyond the buttons and workflows already supported by Functions.

5. Timeouts in Client Script 

In Client Script, executions are bounded by a 10-second time out. During execution of API calls or during the execution of a function which involves API calls , it might take more than 10 seconds to provide response. Consequently, when they are used in Client Script, execution will get halted. To overcome such scenarios you need to use Loaders.

6. How to handle timeouts in a Client Script?

Client Script allows you to manage the timeout by using a loader. The execution of Client Script will be on hold, as long as the loader is active, and so the timeout will not occur.

a. showLoader()

Use showLoader() to display the loader.



b. hideLoader()

Use hideLoader() to make the loader inactive.



7. Timeout Scenario :

At Zylker, which uses Zoho CRM, there is an existing function named "Books_send_quote" in their Zoho CRM account. The admin wants this function to execute via a Client Script whenever the status is updated to delivered and display a message saying, "Quote has been sent successfully." The admin added the script to show a success message after the function execution. 

Problem :

During execution of the following code, the admin noticed that the code following the function invocation is not running. Similar problem is described in this post.

The current code is 

  1. if (value == Delivered) {
  2. ZDK.Apps.CRM.Functions.execute("Send_Quote");
  3. ZDK.Client.showMessage('Quotation sent successfully', { type: 'success' });
  4. }

In such scenarios, the Messages Pane of Client Script IDE will show Timeout as shown below.



Solution:

 Since the timeout limit of 10 seconds has reached, further execution did not occur. So you need to add ZDK.Client.showLoader() before the execution of the Function and ZDK.Client.hideLoader() after the function execution.

  1. if (value == 'Delivered') {
  2. ZDK.Client.showLoader({type:'page', template:'spinner', message:'Sending Quotation...' });
  3. ZDK.Apps.CRM.Functions.execute("Send_Quote");
  4. ZDK.Client.hideLoader();
  5. ZDK.Client.showMessage('Quotation sent successfully', { type: 'success' });
  6. }
Here is how the Client Script works.



The presence of loader on the screen will inform the user about the ongoing processes in the background.


6. Summary :

This post includes the following,
  • When and how to use Functions in Client Script?
  • How to trigger Client Script using icons?
  • How to add tooltip to an icon using Client Script?
  • How to execute Client Script based on Confirmation box?
  • How to display messages and confirmation box using Client Script?
  • How to add loaders on UI using Client Script?
Previous Post: Kaizen #138 - How are Widgets used inZoho CRM Settings?       |     Kaizen Collection: Home
Join us for our upcoming Zoho CRM Developer Series: Zoho CRM APIs, where you can explore more about Zoho CRM APIs. Register Now!  


    • Recent Topics

    • Add multiple users to a task

      When I´m assigning a task it is almost always related to more than one person. Practical situation: When a client request some improvement the related department opens the task with the situation and people related to it as the client itself, the salesman
    • Enhancing Task Accuracy: Automatically notify the owners upon Task duplication.

      Hello Everyone, A Custom function is a user-written set of code to achieve a specific requirement. Set the required conditions needed as when to trigger using the Workflow rules (be it Tasks / Project) and associate the custom function to it. The requirement
    • Show/ hide specific field based on user

      Can someone please help me with a client script to achieve the following? I've already tried a couple of different scripts I've found on here (updating to match my details etc...) but none of them seem to work. No errors flagged in the codes, it just
    • Where are Kanban swimlanes

      So i've been playing with Zoho Projects Kanban view a bit more. It appears that task lists are being used as the Kanban columns, which makes sense from the implementation point of view but not the logical one.  Kanban columns are statuses that a task can flow through, while a task list has been a logical way to organize related tasks and relate them to a mislestone. In other words a task in a particular task can go through several stages while remaining in the same task list. After doing some research
    • Tip 19: How to display images in Pages using ZML snippets

      Hi folks, We're back with another tip on how to use Zoho Markup Language (ZML) to create interactive pages in Zoho Creator. You can use ZML snippets to add various kinds of components to your pages and structure them in meaningful ways. That's not all, though—using ZML you can ensure your application is automatically compatible with all kinds of devices without any inconsistencies. We often get questions from users about how to invoke Deluge scripts within ZML code. Here's a simple use case for adding
    • Can zoho swign format block text spacing automatically when prefilled from zoho crm?

      I'm sending zoho sign template from zoho crm, so that zoho crm pre-populates most fields. I have existing pdf documents that i am having signed. I have no ability to change the pdf documents, they are standardized government forms. The problem I am facing
    • Zoho Inventory / Finance Suite - Add feature to prevent duplicate values in Item Unit field

      I've noticed that a client has 2 values the same in the Unit field on edit/create Items. This surprised me as why would you have 2 units with the same name. Please consider adding a feature which prevents this as it seems to serve no purpose.
    • Reference lookup field values in Client script

      hello all, I'm using a "ZDK.Apps.CRM.Products.searchByCriteria" function call, which is returning the matching records correctly; however, one of the fields is a lookup field which I need the associated data. I believe there is a way to get this data
    • In App Auto Refresh/Update Features

      Hi,    I am trying to use Zoho Creator for Restaurant management. While using the android apps, I reliased the apps would not auto refresh if there is new entries i.e new kitchen order ticket (KOT) from other users.   The apps does received notification but would not auto refresh, users required to refresh the apps manually in order to see the new KOT in the apps.    I am wondering why this features is not implemented? Or is this feature being considered to be implemented in the future? With the
    • Every time an event is updated, all participants receive an update email. How can I deactivate this?

      Every time an event is updated in Zoho CRM (e.g. change description, link to Lead) every participant of this meeting gets an update email. Another customer noticed this problem years ago in the Japanese community: https://help.zoho.com/portal/ja/community/topic/any-time-an-event-is-updated-on-zohocrm-calendar-it-sends-multiple-invites-to-the-participants-how-do-i-stop-that-from-happening
    • How can I filter a field integration?

      Hi,  I have a field integration from CRM "Products" in a form, and I have three product Categories in CRM. I only need to see Products of a category. Thanks for you answers.
    • How to implement new online payment gateway?

      Hello, Can you tell me how to proceed to implement my local payment gateway? DIBS has an open avaiable API that should be easy to implement into ZOHO BOOKS. http://tech.dibspayment.com/dibs_payment_window
    • Zoho CRM - Portal Users Edit Their Own Account Information

      Hi Community, I'm working on a client portal and it seems like the only I can make the Account record editable to the Contact, is if I add another lookup on the Account to the Contact record. Am I missing something as the account already has a list of
    • Connecting Zoho Mail with Apollo.io

      Hi, I am trying to connect my Zoho Mail account with my Apollo.io account to start sending cold email for prospecting purposes. I have activated the IMAP setting but I am still unable to connect to the Apollo account. I am using my email credentials but
    • Where does this report come from in the Zoho One ecosystems?

      Is this directly from MA, Analytics or ??? ???
    • Contact's title in "Contact Role Mapping"

      When I'm creating a deal, I'd like to see the contacts title in the listing. Right now, I only see this: How can I get the contact's title in there?
    • Zoho CRM - Client Portal - Hide Notes Related List

      Hi Community, I'm building a customer portal and I can't find a way to hide the notes related list. I don't want the client to see the notes I have about them. Is there a way to do this as it is no bin/trash icon when I hover over.
    • "Pivot Table" Conditional Formatting

      Team, I there a way to use conditional formatting a "Pivot Table"  report? Thanks, Arron Blue Pumpkin Hosting | Solutions Made Simple
    • How many clients can be added to Zoho Practice?

      How many clients can be added to Zoho Practice without having their zoho app?
    • Stage History

      when viewing a ticket , and you look at stage history tab (kanban view) and look at the stage duration column in days, it shows the current stage of the ticket as " current stage ". Should it not rather show the amount of days it has been in that current
    • Automating Ticket Responses Using Zoho Desk's AI Features

      We’re looking to set up an automation within Zoho Desk that can analyze incoming emails or tickets and automatically respond with relevant knowledge base articles based on the content of the request. Could you please guide us on how to configure this
    • Optimising CRM-Projects workflows to manage requests, using Forms as an intermediary

      Is it possible to create a workflow between three apps with traceability between them all? We send information from Zoho CRM Deals over to Zoho Projects for project management and execution. We have used a lookup of sorts to create tasks in the past,
    • Service locations are tied to contacts?

      Trying the system out. And what I discovered is that it seems that the whole logic of the app is, I'd say, backwards. There is a Customer - a company. The company has contact persons and service locations can be associated with different contact persons.
    • Enhancements to Zoho Map integration tasks

      Hello everyone, We're excited to announce enhancements to the Zoho Map integration tasks in Deluge, which will boost its performance. This post will walk you through the upcoming changes, explain why we're making them, and detail the steps you need to
    • Bug in Total Hour Calculation in Regularization for past dates

      There is a bug in Zoho People Regularization For example today is the date is 10 if I choose a previous Date like 9 and add the Check in and Check out time The total hours aren't calculated properly, in the example the check in time is 10:40 AM check
    • Narrative 12: Sandbox - Testing without the risk

      Behind the scenes of a successful ticketing system: BTS Series Narrative 12: Sandbox - Testing without the risk What is a sandbox environment? A sandbox environment is a virtual playground that allows you to test freely and experiment with various elements
    • Announcing new features in Trident for Mac (1.27.0)

      Hello everyone! Trident for macOS (v1.27.0) is here with new features and enhancements to improve scheduling and managing your calendar events. Let's take a quick look at them. Stay aligned across time zones. Both the scheduled and original time zones
    • Slow uploads of large files

      I'm wanting to use Workdrive for transferring large images and video (we're talking things from 100MB-5GB). I'm running solo on a 500MBit/sec fiber connection. I'm getting upload speeds to Workdrive of no more than about 1-3Mbytes/sec when going through
    • Migrate Your Notes from OneNote to Zoho Notebook Today

      Greetings Notebook Users, We’re excited to introduce a powerful new feature that lets you migrate your notes from Microsoft OneNote to Zoho Notebook—making your transition faster and more seamless than ever. ✨ What’s New One-click migration: Easily import
    • need to upload from airtable to google drive

      I have a zapier zap that automates between airtable and google drive. When a customer uploads a new file into airtable via a client portal interface, zapier uploads that file into a folder linked to that customer's project record. I need to replicate
    • Can't delete functions that are associated with deleted workflow rules

      We have a handful of functions that were once associated with a workflow rule, but the rule has been deleted. The function still thinks it is associated so I can't assign it to a new rule. It is starting to get really messy because we have a list of functions
    • Default Sorting on Related Lists

      Is it possible to set the default sorting options on the related lists. For example on the Contact Details view I have related lists for activities, emails, products cases, notes etc... currently: Activities 'created date' newest first Emails - 'created
    • Credit Management: #1 Credit You Owe vs Credits Owed to the Business

      Think about the last time you ordered food online. You might have paid in advance through your card, but you received a $20 refund because your order got delayed or cancelled. In most apps, refunds don't go into the bank account directly; instead, they're
    • Tip #46- Turn Every Session into an Insight with Zoho Assist survey report- 'Insider Insights'

      Delivering exceptional remote support isn’t just about resolving issues, it’s about understanding how both customers and technicians experience each session. That’s where Survey Report in Zoho Assist come in. You can configure and customize survey questions
    • CRM/Bookings integration edits Contact names

      Hi there, I've installed the extension that connects Zoho CRM and Zoho Bookings. When we get a new appointment from Bookings from an existing Contact, that Contact's record shows this: First Name was updated from asd to blank value Last Name was updated
    • Domain Change

      “Please update my Email-in domain from @biginmail.biginmail.in to @biginmail.zoho.com. Messages to the .in domain are bouncing.”
    • Webhooks Limit Exceeded

      Today, I received an error message saying, 'Total number of Webhook call exceeded', but when I look at Manage > Billing, it doesn't look like any of my invokeURL calls are being logged. Following the advice from this thread: https://help.zoho.com/portal/en/community/topic/webhooks-daily-limits-in-zoho-creator
    • Auto select option in CRM after Zoho Form merge

      Hi, I have a dropdown field in Zoho CRM that is filled with a Zoho Form. The data is filled but not automatically shown. After selecting the right value in the dropdown the information a second field is shown. So the question is; how can I make the dropdown
    • Bring your CRM data straight into your presentations in Zoho Show

      Let's say you are working on a presentation about your team's sales pipeline for an upcoming strategy meeting. All the information you need about clients and leads is in Zoho CRM, but you end up copying details from the CRM into your slides, adjusting
    • Improved RingCentral Integration

      We’d like to request an enhancement to the current RingCentral integration with Zoho. RingCentral now automatically generates call transcripts and AI-based call summaries (AI Notes) for each call, which are extremely helpful for support and sales teams.
    • Next Page