In our
previous post, we explored creating custom graphical user interfaces using widgets. In this post, we'll learn about enhancing user experience through modal boxes.
What is a modal box, and where is it used?
A modal box is essentially a widget interface that appears over the currently active UI or screen and deactivates all other page content until the modal box is closed. The modal box becomes the active focused screen. It can be used to prompt the user to enter information or to display information to the user on a new UI that pops up from the current UI.
Support for modal boxes
Zoho Sprints offers support for opening and closing a modal box widget, and it also allows data communication between these widgets as part of the extension development process. See the supported methods for handling modal boxes in Zoho Sprints extension development in our documentation.
How do the supported methods work?
The above image lists the methods supported in Zoho Sprints for handling modal boxes and illustrates their behavior. Now, let's have a quick overview of how the modal box is invoked and how data flows from the parent UI to the modal box UI.
1. The sdk.dispatch("zs-modal", {url,options}) method is invoked from the parent UI to open a modal box UI.
2. Once the method is invoked, a widget app ID is returned. The modal box is opened and an instance (WidgetApp) is created using the returned widget app ID.
3. A trigger event is set in the modal box by providing a name for the event using the sdk.trigger method. This sdk.trigger method is used to notify the parent widget that the modal box has opened and is ready to receive data.
4. In the parent UI, the WidgetApp.on method is invoked to listen to the trigger event set in the modal box. This method is invoked using the following parameters: trigger event name (set in the modal box widget) and a callback function.
Note: When the sdk.trigger method (mentioned in step 3) is invoked in the modal box widget, it searches for the widget instance that listens to it (based on the trigger event name), and, if found, it executes the function associated with it the parent UI.
➤ Inside this executed function, the widgetApp.emit method is invoked to emit the required data from the parent UI to the modal box widget.
5. In the modal box widget, the sdk.on method can be invoked to listen to the data emitted from the parent UI.
6. When the modal box needs to be closed, the sdk.dispatch("zs-destroy") method can be invoked to close the opened modal box.
This is a generic flow of how the modal box methods are utilized and handled in a Zoho Sprints extension. To understand these in detail, let's check out a use case involving a modal box.
Use case
In the previous post, we demonstrated widgets with a connection between Zoho Sprints and Zoho Bookings that allowed users to book an appointment with a team member allocated to a work item directly from the Zoho Sprints work item page. The output is attached below for reference.
Now, let's use a modal box to enhance this. We'll provide a modal box to allow the user to reschedule the booked appointment if they want to modify the staff or the time of the appointment they booked.
Steps to update the extension
To achieve the above-mentioned extension functionality, along with the other components (creating extension, configuring plugin-manifest.json and creating connection) discussed in the previous post, few other components are required.
1. Add an additional button called Reschedule Appointment as part of the existing Book an Appointment widget on click of which the new modal box will be opened.
2. Create and open a modal box widget to reschedule the appointment by changing the staff and time if needed.
➤ Reschedule Appointment button code in the Book an Appointment widget - This is the code snippet for the Reschedule Appointment button in the Book an Appointment widget.
//Functionality of reschedule appointment button widget
Util.rescheduleappointment = function() {
var message = "Do you want to reschedule the appointment you booked now?";
//Construct and pass the URL and data to open up the modal box
function SuccessHandler(response) {
var url = "/app/reschedule.html";
var data = {
"staffid": staffid,
"serviceid": serviceid,
"selecteddate": selecteddate,
"bookingid": bookingid
};
var width = "800px";
var height = "500px";
sdk.dispatch("zs-modal", {
url,
options: {
width,
height
}
}).then(widgetId => {
const widgetApp = sdk.getWidget(widgetId);
//To open a modal box and emit data to it
widgetApp.on("model.open", () => {
widgetApp.emit("model.view", data);
});
});
}
function FailureHandler(error) {
console.error("Error:", error);
}
//Confirmation message that appears on click of Reschedule Appointment button
sdk.dispatch("zs-confirm-message", {message })
.then(SuccessHandler)//If Yes, SuccessHandler function will be invoked
.catch(FailureHandler);//If Cancel, FailureHandler function will be invoked
}
|
- In the above Book an Appointment widget code, when a user clicks the Reschedule Appointment button, a confirmation message asks if they want to proceed or cancel rescheduling the appointment. This confirmation message is prompted to the user using the zs-confirm-message method.
- If they choose to proceed, then the SuccessHandler method is invoked where the URL and data (staff ID, service ID, selected date, and booking ID) are passed to the modal box for rescheduling the appointment. Once these details are constructed, the zs-modal method is used to invoke and open the modal box.
➤ Modal box widget to reschedule appointment - The modal box UI allows the user to change the staff and time of the appointment and reschedule the appointment.
Reschedule Appointment - Please find the widget code attached in the post.
- In this code snippet, the data passed from the Book an Appointment widget is received using the sdk.on method.
- The Zoho Bookings API to get staff members is invoked using the request method. Similarly, the fetch availability API is invoked using the request method. For both cases, the connection created for Zoho Bookings is passed as a parameter to request method.
- Next, using the Reschedule Appointment button, based on the staff and the time slot chosen, the appointment is rescheduled by invoking the reschedule appointment API. The booking ID parameter received from the Book an Appointment widget is sent as a parameter to the book appointment API along with the staff ID and the time slot chosen by the user in the modal box widget.
- The zs-destroy method to close the modal box widget is invoked as part of the Reschule Appointment button functionality in order to close the modal box once the appointment has been rescheduled.
Note: You can customize the height and width of the modal box to your requirements. If you need to access the primary widget alongside the modal box widget, you can customize the size of your modal box accordingly.
Now that we have explored both the widgets, let's go ahead and test the extension functionality.
Testing the extension
- You can test the widget using the Run option in the Sigma cloud editor. For detailed guidance on testing the extension, read our post here.
- Once you enter into the test environment, install the extension and authorize the connections.
- Next, enter into the work item and access the Book an Appointment widget. Choose the staff, service, and date, and click Check Availability. The available time slots will be displayed. Choose a time slot and click Book Appointment. An appointment will be successfully booked in Zoho Bookings.
- If you want to reschedule the appointment, click Reschedule Appointment. You will be prompted with a confirmation message if you want to reschedule.
- If you choose to proceed, it will open the modal box where you can change the staff and time slot. Once done, click Reschedule Appointment in the modal box. The appointment will be successfully rescheduled.
In this post we have explored the advantages of using modal boxes to enhance the end-user experience. We hope you found this information useful. Keep following this space for more updates. Stay tuned!
SEE ALSO
Recent Topics
Les meilleures pratiques d’email marketing pour booster les ouvertures, les clics et les conversions
L’email marketing connaît aujourd’hui des changements profonds. Gmail, Yahoo et Microsoft ont notamment renforcé leurs exigences en matière d’authentification, ce qui rend la délivrabilité plus complexe et exigeante. Dans le même temps, les filtres basés
Cross-application Deluge calls fail when application link name starts with a number
I encountered an issue when calling a custom function in another Zoho Creator application within the same account. The target application’s URL/application link name began with a number, similar to: 27_example_application The following cross-application
prefill_data for Creator + Merge & Sign
Hello, Is there an option to use prefill_data for signer fields from creator? I see the option for CRM but it will not work with creator? I have tried passing the value in the signer data, and that also does not work. Alternatively, is there a way to
Announcing the new SKILL.md for Zoho CRM and the updated OAS repository!
We are introducing a new zoho-crm skill to make working with Zoho CRM Developer tools (like APIs, functions, widgets, client scripts, queries etc) easier and faster, with the help of AI in your preferred AI harness like Claude Code, Codex, Cursor, VSCode
Kaizen #258 - Getting Started with zoho-crm SKILL.md
Howdy tech wizards, Welcome to a fresh week of Kaizen. This week, we are taking a look at the zoho-crm SKILL.md, an Agent Skill designed to help AI coding agents work with Zoho CRM’s developer capabilities. What is zoho-crm SKILL.md? The zoho-crm skill
Support Required for Integrating Zoho SalesIQ in Flutter Web
Hi Team, I have developed a Flutter application and I am currently using the salesiq_mobilisten: ^6.5.4 package. As per the package documentation ( https://pub.dev/packages/salesiq_mobilisten ), it supports only Android and iOS, and it is working fine
Books is extremely slow again today !
Everything is running slowly even with 500mb connection speed
MCP for Zoho Sign is not working
I'm using the mcp builder at mcp.zoho.com and selected Zoho Sign. I have created it 4 different times but my other mcp servers are working. However, mcp for zoho sign WILL NOT WORK. It throws a 400 error. I've checked everything. I tried with both Grok
Automate Credit Card Surcharge
Is there a way to create an automation that will add a 3.0% credit card surcharge to a subscription whenever a customer pays via credit card?
How to charge Convenience fee OR payment gateway charges to the end client who is paying the invoice?
Hello, I am creating this topic after having discussions with various sets of users and have understood that with people moving more and more to digital payments, it is important for the client to enable the "Convenience fee" kind of scenario. I have
How to add a fee based on payment method
I currently accept both ACH payments and credit card. I want to add a 3% fee to a number of my subscription plans if the customer chooses to use a credit card (and not ACH/checking). How do I do this? Is there an in-built feature, or would i have to create
Automating CRM backup storage?
Hi there, We've recently set up automatic backups for our Zoho CRM account. We were hoping that the backup functionality would not require any manual work on our end, but it seems that we are always required to download the backups ourselves, store them,
Zoho Inventory - Profit Margin Feature - Allow Users to Set Default Cost Price Calculation Method
Hi Zoho Inventory Team, I'm working with an automotive parts distributor using Zoho Inventory. They have expressed frustration about having to change the Cost Price Method on every line item they add from the defult "Inventory Valuation Method" to "Item
OpenAI Is Moving to the Responses API: Here's What It Means for SalesIQ
OpenAI has deprecated its Assistants API and is moving to the Responses API. If you're using OpenAI Assistants with SalesIQ, you may be wondering if you need to make any changes to your existing setup. You don't. SalesIQ has already taken care of the
Deprecation Notice: OpenAI Assistants API will be shut down on August 26, 2026
I recieved this email from openAI what does it means for us that are using the integration and what should we do? Earlier this year, we shared our plan to deprecate the Assistants API once the Responses API reached feature parity. With the launch of Conversations,
Payment for product renewal
Good morning, I am requesting your kind assistance to renew my subscription because when I try to make the payment I get this way
All new Address Field in Zoho CRM: maintain structured and accurate address inputs
Availability Update: 29 September 2025: It's currently available for all new sign-ups and for existing Zoho CRM orgs which are in the Professional edition exclusively for IN DC users. 2 March 2026: Available to users in all DCs except US and EU DC. 24
API - Available Stock Definitions
Okay, Zoho team... your copywriters fell down on the job for this one :) I think these warrant a bit more explanation as to what they include and what they don't.
Feature Request: Add Sort by Cell Color and Text Color functionality
Hello Zoho Sheet Development Team, I am writing to suggest a feature enhancement for Zoho Sheet. Currently, the platform supports "Filter by Color," which is incredibly useful. However, there is no native option to "Sort by Color" (by cell fill or text
Zoho Creator to Zoho Writer for prefilled documents...
In response to the question about connecting Zoho Creator to Zoho Writer for prefilled documents, I wanted to share a working implementation that demonstrates how to use the record_id parameter with the Zoho Writer Merge API. This allows Writer to automatically
Calendar Year View?
Is there a way I can view the calendar in year view? Maybe create a page with a view like this?
Razorpay + Zoho Billing + Zoho Books Integration
Please help us set up this integration.
Proyecto SII
Buenas tardes amigos de zoho. en mi empresa vamos a implementar el proyecto de emisión de facturas SII pero para poder hacerlo hay que subir un xml, estoy intentando automatizar este proceso pero no se como convertir la factura que retorna books a xml
Automate Workflows at the Subform Level
Hello, Enterprise Support Community! We are excited to introduce an enhancement to Workflow Rules that gives you more control over automation within your records. Previously, Workflow Rules could only be configured at the module level, which meant changes
Custom module - change from autonumber to name
I fear I know the answer to this already, but thought I'd ask the question. I created a custom module and instead of having a name as being the primary field, I changed it to an auto-number. I didn't realise that all searches would only show this reference.
What is wrong with this sendmail message?
I keep getting improper statement errors on the message, but I cannot see a problem. Also, if the message is much longer the whole message turns black instead of being coloured yellow, red and blue. client = Clients[ID == input.Client_Lookup]; sendmail
sales IQ issue on website
i integrated the zoho sales IQ code on the website but it is comming in distroted form i am sharing the screenshot below the website is bulit in wix platform
Zoho Creator - Install app from Gallery takes too long
I'm trying to install the 'Volunteer Portal' from the app Gallery of Zoho Creator. It has been busy installing the app for over 2 hours now. It might be okay, but how long is something like that supposed to take? I never installed anything from that Gallery
Automate customer follow-ups with Sequences in Bigin
Greetings, We hope you're all doing well! We're happy to announce a new feature that we've added to Bigin. Following up with every lead at the right time can be challenging, especially when your team is managing multiple conversations across emails, calls,
How can I load a network into the cliq desktop app?
I have both the standard cliq log in for my org and I am part of a cliq network. In the browser I can choose which I log in to. However, in teh desktop app if I log in it will alwasy load my org's cliq. Can I switch this to the network I have create
4.7.500 Server busy. Please try again later from [136.143.188.52]. (S77719) [SJ1PEPF00001CE2.namprd05.prod.outlook.com 2026-09-04T11:42:24.261Z 08DF0918255760D6]
4.7.500 Server busy. Please try again later from [136.143.188.52]. (S77719) [SJ1PEPF00001CE2.namprd05.prod.outlook.com 2026-09-04T11:42:24.261Z 08DF0918255760D6]
Set Up Google Tag Manager for Your Zoho Recruit Career Site
Understanding how candidates interact with your career site can help you improve their experience and make better decisions about your recruitment process. With the new Google Tag Manager (GTM) integration in Zoho Recruit, you can connect your career
Gmail users think they've replied to invite when they havent.
Hi, I think there's an issue when inviting gmail users to a zoho calendar event. Basically, when an invite from zoho calendar is received by a gmail user, gmail has this functionality where it will render "yes/no/maybe" buttons that, when clicked, they
Translated country names in Address field not sorted alphabetically
Hello. I have a form with an address field that includes the country dropdown. The primary form language is English (as is the Zoho Forms account language). The form has been translated into German from the form's Settings > Translation functionality.
Zoho Commerce Microstore to bypass customer portal on spesific items
Hi everyone, I’m currently testing the Microstore feature in Zoho Commerce and trying to understand how it behaves with access restrictions. My goal is the following: Even though the customer portal is enabled (and the main store requires users to sign
Calendar Attachments in iOS Mail App
It appears that viewing or accessing attachments to a calendar event is not possible in the iOS mail app. Is this correct? The ability to view calendar attachments in the mobile app is vital for me. Is this just a setting I'm missing somewhere?
Zoho Desk API modifiedTimeRange returns HTTP 500 around 2026-03-08T02:00:00.000Z
Hello Zoho Support Team, We are experiencing a reproducible HTTP 500 Internal Server Error when querying the Zoho Desk API search endpoint with a specific modifiedTimeRange boundary. ### API Endpoint GET /api/v1/tickets/search ### Reproduction Steps &
Grey border on inserted Sheet on Write document
When inserting a Sheet on a Write document, it show an ugly gray border. How to get rid of it?
Send workflow alerts as a single mass email to all recipients
Managing workflow notifications becomes easier when everyone needs visibility into who received an alert. With this enhancement, workflow email alerts can now be sent as a single email to all recipients, giving recipients visibility into the other users
Kaizen #253 : Custom Validation for Blueprint to Enforce Mandatory File Uploads and File Extension Compliance Using Client Script
Welcome to another exciting Kaizen post on Client Script! Have you ever wanted more control over what gets uploaded to a File or Image field in Zoho CRM, like restricting file types, validating file names, or showing a custom error before an inappropriate
Next Page