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

    • Draft & Schedule Emails Directly in Bigin

      Greetings, I hope all of you are doing well. We're happy to announce a few recent enhancements we've made to email in Bigin. We'll go over each one in detail, but here's a quick overview: Previously, you couldn't draft or schedule emails in Bigin, but
    • Cliq does not sync messages after Sleep on Mac

      I'm using the mac app of Cliq. When I open my mac after it was in sleep mode, Cliq does not sync the messages that I received. I always have to reload using cmd + R, which is not what I want when using a chat application.
    • Link to images

      I have added images in pages. I would like to link those images with linked in URL so that they open in new window. There is an option of image -> link but I am not able to use the same to open URL in new window. Please check the attached image. Can you
    • Canvas View - Print

      What is the best way to accomplish a print to PDF of the canvas view?
    • Respond faster and smarter with Zia in your IM Inbox

      You’re in the middle of a busy chat queue. New messages keep popping up. One customer sounds upset. Another is asking a long list of questions. You need context. You need speed. You need help. That’s exactly when Zia Insghts jumps into action. It shows
    • Meeting impossible to use when sharing screen

      he Meeting tool in Brazil is practically unusable when sharing anything, whether it’s a presentation or simple navigation. When accessed via Cliq, the situation gets even worse: even basic calls fail to work properly, constantly freezing. And as you are
    • Let's Talk Recruit: Meet Zia, your all-in-one AI assistant (Part-2)

      Welcome back to Let’s Talk Recruit series. In Part 1, we introduced Zia and how AI is reshaping the way recruiters work. This time, we’re taking a closer look at how far Zia has come and how each update continues to simplify your everyday tasks. When
    • WARNING : Smart list automatically unsubscribes your contacts.

      I created a smart list of my team members based on the criterion that their email domain was @_____. The list refreshed as expected — but it ended up unsubscribing almost all members of my team. I contacted support, but it took two months to get a reply,
    • Export Purchase orders as Excel

      Is it possible to export purchase orders as excel rather than PDF? Our suppliers don't want orders made in PDF, they need it to be excel
    • 5名限定 課題解決型ワークショップイベント Zoho ワークアウト開催のお知らせ (10/31)

      ユーザーの皆さま、こんにちは。Zoho ユーザーコミュニティチームの中野です。 10月開催のZoho ワークアウトについてお知らせします。 今回はZoomにて、オンライン開催します。 参加登録はこちら(無料):https://us02web.zoom.us/meeting/register/BGYTysOnSqa9LA9eY2IKww ━━━━━━━━━━━━━━━━━━━━━━━━ Zoho ワークアウトとは? Zoho ユーザー同士で交流しながら、サービスに関する疑問や不明点の解消を目的とした
    • Subforms in Stateless Forms

      Stateless Forms are very useful, but we can't build complex data entry pages without Subforms. Can this be implemented? This would make Stateless Forms truly powerful.
    • Custom Function not getting package details when triggered from Workflow Rules.

      I have a custom function for Packages that submits a form in our Creator app that we use to generate custom shipping labels (internal staff complete deliveries so we cannot generate shipping labels straight from Inventory). When the function is executed
    • Billing Preferences per Account

      Hello, We are trying to setup Billing Preferences in Zoho Desk to set up a different pricing per account. We charge different pricing per hour per customer/account. Account A = 100 per hour Account B = 125 per hour In the Billing Preferences in Time Entry
    • Time entry preview for custom time entry templates.

      Our company needed time entries in a specific format to document our client interactions. Since we are using a custom time entry layout, we have lost the "preview" on the time entry tab. Using the default time entry layout, you get a small preview of
    • Able to change project on timelog entries

      Ability to move the timesheet entry from one project to another. When a user adds a wrong entry a manager can change/update the timesheet entry to the correct project.
    • Knowledge base: The nitty-gritty of SEO tags

      A well-optimized knowledge base with great SEO can benefit your company by allowing customers to find help articles and support resources using search engines. This enables customers to quickly and efficiently find the information they need without direct
    • Full Text Customization & Translation in SalesIQ Chat Widget Settings

      Dear Zoho SalesIQ Team, Greetings, We would like to request an important enhancement to the chat widget customization options in Zoho SalesIQ. Current Limitation: At the moment, only some of the text shown in the chat widget is editable or translatable
    • Introducing swipe actions in the Zoho CRM Android app

      Hello everyone, How much time do you spend each day on your list view? Probably quite a lot. Since it's such an important part of your work, wouldn't it be easier if you could take action directly from your list view instead of opening each record one
    • Content Security Policy

      Is there a place in ZOHO CRM to add a Content Security Policy to allow for a call to a google.com map, from inside our current app? Or, how do I resolve the issue below?? jquery.js:1 Refused to load the script 'https://maps.google.com/maps/api/js?v=3.41&libraries=places&sensor=true&key=AIzaSyAyQzKeKSbLci4LwZhn9oXvtCkbUo1Ae4g&callback=map_loader'
    • Option to select location?

      As a business coach, I meet with clients at various public locations. I have two or three pre-determined locations that I meet at. I would like the client to choose the location when booking an appointment. Is there a way to do that with a single service, or is the best way to accomplish this by creating one service for each location offered?
    • Unified WhatsApp Number Management in Zoho Desk and SalesIQ

      Dear Zoho Desk Support Team, We are currently utilizing both Zoho Desk and Zoho SalesIQ for our customer support operations. While both platforms offer WhatsApp integration, we are facing challenges due to the requirement of separate WhatsApp numbers
    • Provide a standard structure to your content using article templates

      Hello everyone, When multiple writers work on different documents, maintaining a standard structure can be challenging as each of the writer follows a different writing style. However, when the structure, tone, and format of every document is different,
    • How to update custom multi-user field in Zoho Projects?

      I'm trying to update custom multi-user fields in Zoho Projects via a Deluge function in CRM. The code I have so far is below. It works for updating standard project fields and single-line custom fields, but it does not work to update multi-user fields.
    • Accessibility Spotlight Series - 1

      Every user interacts with products differently, what feels intuitive to one may be challenging for another. Addressing this, accessibility is built into Zoho Project's design philosophy. This helps users navigate and perform actions with ease irrespective
    • Projects Tasks Not Showing Dependencies

      I'm clicking on tasks and the popup to add dependencies isn't showing. I can't disconnect the nodes either. For some reason when I slide a task backwards it says it cannot go before a predecessor, even though there is not predecessor. Double clicking
    • Deprecation of C4 endpoint URLs

      Note: This post is only for users who are still using the C4 endpoints. Hello everyone, At Zoho Creator, we're committed to continuously enhancing the security, performance, and capabilities of our platform. As part of this ongoing effort, we'll be deprecating
    • Introducing AWS authentication for connections in Deluge

      Hello everyone, We're incredibly excited to announce the all-new AWS authentication for connections in Deluge! This highly anticipated feature simplifies connecting to Amazon Web Services, opening up a world of possibilities and allowing you to seamlessly
    • Timeline Tracking Support for records updates via module import and bulk write api

      Note: This update is currently available in Early Access and will soon be rolled out across all data centers (DCs) and for all editions of Zoho CRM. The update will be available to all users within your organization, regardless of their profiles or roles.
    • Customize User Invites with Invitation Templates

      Invitation Templates help streamline the invitation process by allowing users to create customized email formats instead of sending a one-size-fits-all email. Different invitation templates can be created for portal users and client users to align with
    • ListObjects is recognized by VBA

      Sub addNewRow() Dim ws As Worksheet ' Set your worksheet name Set ws = ThisWorkbook.Sheets("Invoice") ' Set your table name (change "Table1" to your actual table name) ws.ListObjects("InvItems").ListRows.Add End Sub I am getting Unknown function: Li
    • KPI Widget dashboard select periods

      I have a problem with selecting periods as a user filter. In the beste scenario I would like to have to have a period filter like Google Analytics has of Datastudio (see attachment). In the KPI widget I "Group by "inquiry_date" on week&Year". It selects
    • Need a way to secure Prefill URLs in Zoho Forms (hide or encrypt prefilled values)

      Hi everyone, I often use Zoho Forms with prefilled URLs to simplify the user experience — for example: https://forms.zohopublic.com/.../form?Name=David&Amount=300 However, the problem is that all prefilled values are visible and editable in the link.
    • Can’t send emails from Zoho CRM after adding a new user — verification codes not received

      Hi everyone, We recently added a new user to our Zoho CRM account and purchased an additional license. Since then, we haven’t been able to send any emails from Zoho CRM. Our Zoho Mail accounts are working perfectly, we can send and receive emails directly
    • CRM for email in Outlook: how to ignore addresses?

      We’re using the "Zoho CRM for email" add-in for Outlook. When opening an email, the add-in displays all email addresses from the message and allows me to add them to the CRM or shows if they’re already contacts. However, sometimes people listed in To
    • Scheduling Calls in CommandCenter / Blueprints

      I would love it if you could add a function to schedule a call in the lead's record for a future date. I know you can add a Task by going to Instant Actions > Task and completing the form: These tasks go into the lead's record under Open Actions. But
    • Quickly send emails and sync conversations with custom email addresses in CRM

      Editions: All editions DCs: All DCs Release plan: This enhancement has been released for customers in all DCs except IN and US. We will be enabling it for IN and US DC customers soon. [Update on 22 May 2024] This enhancement has been released for all
    • Zoho製品と生成AIツールの活用について

      いつもありがとうございます。 弊社では、Zoho Oneを契約し、CRMを軸として、見込み客の管理から商談、その後の受注や請求の管理、サポート業務(Desk)、業務データのレポーティング(Analytics)などを行っております。 Zohoサービス自体には、Ziaというツールが搭載されているかと存じますが、それ以外の外部の生成AIツールと連携した活用などもできるのでしょうか?具体的には、CopilotなどがZohoに登録されているデータや情報を見て、対話型で必要なデータを提示してくれたり、商談や蓄積されたメモなどを分析してユーザが知見を得られるような活用ができないか、と考えております。
    • Work with Contacts who use multiple Emails / Manage obsolete Email addresses without loosing Emails in Context

      Hello List Work with Contacts who use multiple Emails Only after 1 week in using Zoho CRM productively we have contacts which randomly use 2 different email addresses. From the concept I've understood that Zoho CRM offers two email fields which are recognized
    • New Field in CRM Product Module Not Visible in Zoho Creator for Mapping

      I created a new single-line field in the Products module in Zoho CRM. Zoho CRM and Zoho Creator are integrated, but the newly created field in CRM is not visible in Zoho Creator when I try to map fields.
    • Send WhatsApp voice messages from Bigin

      Greetings, I hope all of you are doing well. We're happy to announce this enhancement we've made to Bigin. Bigin's WhatsApp integration now supports audio messages, so you can record and send voice messages. This makes it easier to handle customer questions
    • Next Page