Event Management System using ZDK CLI

Event Management System using ZDK CLI



Hello Everyone,

Welcome back to yet another post in the Kaizen Series!

As you already may know, for the Kaizen #200 milestone, we asked for your feedback and many of you suggested topics for us to discuss. We have been writing on these topics over the past few weeks. One of the feedbacks asked us to cover "more on ZDK CLI". In this post, we will discuss building an Event Management System in Zoho CRM Using ZDK CLI.

Consider the case of Zenith, a Zoho CRM partner who is also partner for Zoho's competing products. Zenith is hosting a conference in which their representatives are inviting speakers from Zoho and also other competing products. The attendees of the conference will be either external attendees or leads or contacts of Zenith. For this purpose existing meetings module of Zoho CRM (previously called Events) can not be used as it is not a good fit for this case. Custom modules and fields are required for this. In this post, we’ll discuss how to create a Event Management System that is complimentary to Zoho CRM using ZDK CLI

Why Use ZDK CLI?
ZDK CLI allows developers to:
  1. Create and edit CRM metadata (modules, fields, roles, profiles, and widgets)
  2. Define relationships between modules (lookups, multi-select lookups)
  3. Push and sync metadata changes to sandbox.
  4. Resolve conflicts when multiple users work on the same metadata.

This makes it ideal for building reusable CRM systems such as event management.

Initial Setup

As the initial setup, initialize the ZDK CLI project directory using zdk init command and create a new ZDK Project folder "Zenith". 

     zdk init




Then, login to the sandbox environment for Zenith using zdk auth:login command. 

     zdk auth:login


When you execute zdk auth:login, you can either select any org that is already signed in or select NEW LOGIN to visit the login page and select the sandbox org you will be working on.




After logging in to Zoho select the sandbox environment and give required permissions.
Notes
For the current beta release, ZDK CLI is exclusively available for Sandbox environment and is not operational in Production environments. 



You will be redirected to the terminal after successful login and you can start working on ZDK CLI.



Notes
Change the api_version to 8 in zdk-project.json file.

Step 1: Define the Modules

For an event management use case, we will need the following custom modules:
  1. Conference – Stores details of each event.
  2. Attendees – Tracks participants, whether leads, contacts, or external.
  3. ConferenceAttendees (Linking Module, not created) – Connects conferences and attendees with registration status.
  4. Venues – Captures details of event locations.
  5. Speakers – Stores details of invited speakers.

This has been visualized in the data model below.


To create a module, use the command

     zdk meta:create modules




This creates the json file for module metadata : Conference.modules-meta.json  in the path Zenith/crm/meta/modules/Conference 

Conference.modules-meta.json content

{
    "singular_label": "Conference",
    "plural_label": "Conferences",
    "api_name": "Conference",
    "profiles": [
        {
            "api_name": "Administrator"
        }
    ],
    "display_field": {
        "api_name": "Conferences"
    },
    "show_as_tab": true
}

Similarly create modules Attendees , Venues, and Speakers modules

Step 2: Customize Fields

To create a field, use the command

     zdk meta:create fields

Conference module:

Conference modules's fields are:

  1. Attendees (multiselectlookup to Attendee module) 
  2. Speakers (multiselectlookup to Speakers module) 
  3. Venue (lookup to Venue module) 
  4. Date (datetime) 
  5. Duration(double) 
  6. Description (textarea) 
  7. Status (picklist: Planned, Ongoing, Completed)


Attendees field
Let us check how to create the field attendees of type multi-select lookup (to Attendee module)




The json file Attendees.fields-meta.json created in the path Zenith/crm/meta/modules/Conference/fields will look like this


To provide dependent details for the multi select lookup, add the multiselectlookup json object to the Attendees.fields-meta.json file as below:

{
    "field_label": "Attendees",
    "display_name": "Attendees",
    "api_name": "Attendees",
    "type": "used",
    "data_type": "multiselectlookup",
    "multiselectlookup": {
        "connected_details": {
            "module": {
                "api_name": "Attendee"
            },
            "field": {
                "field_label": "AttendingConference"
            }
        },
        "linking_details": {
            "module": {
                "plural_label": "Conferences_X_attendees"
            }
        }
 }
}

Speakers (multi-select lookup to Speakers module)
Similar to Attendees field, create Speakers field and modify the json file Speaker.fields-meta.json created in the path Zenith/crm/meta/modules/Conference/fields:

{
    "field_label": "Speaker",
    "display_name": "Speakers",
    "api_name": "Speakers",
    "type": "used",
    "data_type": "multiselectlookup",
    "multiselectlookup": {
        "connected_details": {
            "module": {
                "api_name": "Speaker"
            },
            "field": {
                "field_label": "AttendingConference"
            }
        },
        "linking_details": {
            "module": {
                "plural_label": "Speakers_X_attendees"
            }
        }
 }
}

Venue (lookup field to Venue module)
Similarly, create the Venue field with type as "lookup" The json file Venue.fields-meta.json created in the path Zenith/crm/meta/modules/Conference/fields will look like this


To provide dependent details for the lookup, add the lookup json object to the json as below.
{
    "field_label": "Venue",
    "display_name": "Venue",
    "api_name": "Venue",
    "type": "used",
    "data_type": "lookup"
    "lookup": {
        "display_label": "Venue",
        "api_name": "Venue",
        "module": {
          "api_name": "Venue"
        }
      }
}

Description (textarea)
After create a textarea field Description using zdk meta:create fields command, add textarea json object to the field meta json file as below :

{
        "field_label": "Description",
                "display_name": "Description",
                "api_name": "Description",
                "type": "used",
                "data_type": "textarea",
                "textarea": {
                        "type": "rich_text"
                }
}

The possible values for text area are small, large and rich_text.

Status (picklist)
After create a picklist field Status using zdk meta:create fields command, a
dd pick_list_values json array to the field meta json file as below:

{
    "field_label": "Status",
    "display_name": "Status",
    "api_name": "Status",
    "type": "used",
    "data_type": "picklist",
  "pick_list_values": [
    {
      "display_value": "Planned",
      "actual_value": "Planned"
    },
    {
      "display_value": "Ongoing",
      "actual_value": "Ongoing"
    },
    {
      "display_value": "Completed",
      "actual_value": "Completed"
    }
  ]
}

Date and duration fields of type datetime and double does not require any edits to the created meta.json file.




Attendees Module

Similarly, add fields for attendees modules
  1. Phone (phone)
  2. Company (text)
  3. EventsAttended (multi-select lookup to Conference module)
  4. Attendee Type (picklist with options Lead, Contact, External)
  5. Leads (lookup to Lead module)
  6. Contacts (lookup to Contact module

Venue Module

  1. Location (text)
  2. Capacity (integer)
  3. Contact erson (text)
  4. ContactNumber(phone)
  5. Description(textarea)

Speakers Module
  1. Phone (phone)
  2. Company (text)
  3. SpeakerStatus (picklist with options Confirmed, Pending, Canceled)

Step 3: Create a Custom Role


To create a field, use the command

     zdk meta:create roles


This ensures event managers have the right access without interfering with other CRM operations.

Pushing changes to the sandbox environment

Once all changes are done execute zdk org:push and zdk org:push result --{jobId} command to deploy the changes to the sandbox environment. Once the changes are verified in your sandbox environment you can deploy it to the production environment.




You can extract this metadata zip file, that is created using zdk org:export command to your own ZDK project directory and try pushing the changes to your sandbox environment.

Building the Event Management System for "Zenith" illustrates the core strength of ZDK CLI. It brings software engineering best practices to Zoho CRM customization. By defining modules/fields/roles as json files directly or creating them using the command, the source truth of the metadata is available in local system. The same can be tracked via version control systems like GIT for better collaboration among the team.
    • Sticky Posts

    • Kaizen #217 - Actions APIs : Tasks

      Welcome to another week of Kaizen! In last week's post we discussed Email Notifications APIs which act as the link between your Workflow automations and you. We have discussed how Zylker Cloud Services uses Email Notifications API in their custom dashboard.
    • Kaizen #216 - Actions APIs : Email Notifications

      Welcome to another week of Kaizen! For the last three weeks, we have been discussing Zylker's workflows. We successfully updated a dormant workflow, built a new one from the ground up and more. But our work is not finished—these automated processes are
    • Kaizen #152 - Client Script Support for the new Canvas Record Forms

      Hello everyone! Have you ever wanted to trigger actions on click of a canvas button, icon, or text mandatory forms in Create/Edit and Clone Pages? Have you ever wanted to control how elements behave on the new Canvas Record Forms? This can be achieved
    • Kaizen #142: How to Navigate to Another Page in Zoho CRM using Client Script

      Hello everyone! Welcome back to another exciting Kaizen post. In this post, let us see how you can you navigate to different Pages using Client Script. In this Kaizen post, Need to Navigate to different Pages Client Script ZDKs related to navigation A.
    • Kaizen #210 - Answering your Questions | Event Management System using ZDK CLI

      Hello Everyone, Welcome back to yet another post in the Kaizen Series! As you already may know, for the Kaizen #200 milestone, we asked for your feedback and many of you suggested topics for us to discuss. We have been writing on these topics over the
    • Recent Topics

    • Tip #53- Remote Billing: Your End-to-End Billing Solution in Zoho Assist- 'Insider Insights'

      Manual invoicing, after every remote support session, can be time-consuming and often error-prone. As an MSP, IT admin, or even a freelance support technician, it may become overwhelming to keep track of session time, service rates, and client invoices.
    • Record history and ticket interaction tab in contacts and accounts

      Hello everyone! We have improved the History tab to help users trace updates in the interaction activity logs of the Contacts and Accounts detail pages in the Customer Module. This enhancement make it easier to get clear details about who made each update,
    • issue with deluge script

      i used chat gpt to build this script and I am getting 2 errors which I cannot figure out how to fix: void monthly_sales_order_generation() { try { // ---------------- CONFIG ------------------- analytics_url_1 = "https://analytics.zoho.com/api/<workspaceID>/report/<reportID1>/data";
    • Ticket Status email

      Good day, This was discussed in the past, but it would be helpful if we could have the system assign a custom response to a status. We have various statuses for tickets, e.g. "closed due to no response", or "Pending Status", it would be helpful for the
    • Is there an API to "File a Ticket" in Desk

      Hi, Is there an API to "File a Ticket" in Desk to zoho projects?
    • Zoho Desk View Open Tickets and Open Shared Tickets

      Hi, I would like to create a custom view so that an agent can view all the open tickets he has access to, including the shared tickets created by a different department. Currently my team has to swich between two views (Open Tickets and Shared Open Tickets).
    • Keyboard UX for Assemblies

      The new Assembly module has a counter-intuitive behavior that ought to be corrected. When an Assembly is ready to be entered, there are two options given, the blue-highlighted "Assemble" and the gray "Save as Draft". This correctly implies that the normal
    • Mapping a new Ticket in Zoho Desk to an Account or Deal in Zoho CRM manually

      Is there any way for me to map an existing ticket in Zoho desk to an account or Deal within Zoho CRM? Sometimes people use different email to put in a ticket than the one that we have in the CRM, but it's still the same person. We would like to be able
    • Cliq iOS can't see shared screen

      Hello, I had this morning a video call with a colleague. She is using Cliq Desktop MacOS and wanted to share her screen with me. I'm on iPad. I noticed, while she shared her screen, I could only see her video, but not the shared screen... Does Cliq iOS is able to display shared screen, or is it somewhere else to be found ? Regards
    • Zoho Desk API - Influence which layout is used

      Hello, how can the ticket layout be changed using the API? I would like to choose the layout directly when creating the ticket. If this is not possible, my question would be how can I change it afterwards? Best regards, Sven
    • How to Move Behavior, Acquisition, Polls & Forms Data from Zoho PageSense to Zoho Analytics?

      Hi Zoho Community, I'm looking for a way to transfer data from Zoho PageSense to Zoho Analytics, specifically: Behavioral data (clicks, scrolls, heatmaps, etc.) Acquisition data (traffic sources, campaigns, etc.) Polls and forms data As far as I can tell:
    • Why can't I see images uploaded by other users in the Library for Campaigns

      We are several users of zoho Campaign. I have uploaded visuals of our company, but my team members can't see them.
    • zoho sheet stuck

      I Need help. ZOHO sheets stuck on the loading screen. I've already deleted the system cache and cookies of my browser (google chrome) but it's still not opening. 
    • Turn off Knowlege Base Follow options and Follower lists

      Is there a way to hide or turn off the option in the Knowledge Base for users to follow specific departments/categories/sections/articles? If not, is there a way to turn off the public list of followers for each of those things? Otherwise, customer names
    • Future Orders - Due Date

      Hi In my role, I can receive tickets where the work required is requested months in advance. Using a Future Orders option, which I believe was setup under the On Hold status type, hides the Due Date, in all views/ticket etc. Whilst I understand the reasoning
    • Tip of the Week #78 – Cut response time with multichannel shared inboxes

      If you’ve ever felt your team juggling between multiple email accounts, social pages, and chat apps just to reply to customers, you’re not alone. Managing conversations in multiple channels can quickly turn messy. Important messages across inboxes, replies
    • Need a way to run a client script longet than 10 seconds

      By The Grace of G-D. Hi, Currently, Client Scripts are Timing out at 10 seconds. We have complex logics that needs more time. Can you add a feature request to increase the timeout?
    • FSM - Associating and selecting Contacts based on Service Addresses

      Hi FSM team, I've come across an FSM limitation I wanted to share for improvement. I'm currently configuring FSM for a client who provides heating system install and maintenance services. The are often sub contracted by building management companies to
    • Exciting Updates to the Kiosk Studio Feature in Zoho CRM!

      Hello Everyone, We are here again with a series of new enhancements to Kiosk Studio, designed to elevate your experience and bring even greater efficiency to your business processes. These updates build upon our ongoing commitment to making Kiosk a powerful
    • FSM Improvement Idea - Show an Import button when there is no data

      I am setting up FSM for a client and I noticed that there is no option to import data, see screenshot below. Even when you click Create Contact there is only an option to Import from Zoho Invoice. It is only after you add at lease 1 record that the Import
    • Duplicate customers being created in Desk

      Hi I've trying to work out why I've getting duplicated customers being created in my desk. I have an external booking system that generates an email when I get a customer booking a job. A booking email gets sent to Desk where I manage the booking and
    • Unable to Send Different Email Templates for Different Documents in Zoho Sign

      Hello Zoho Community, I am facing a limitation with Zoho Sign regarding email notifications sent to customers when a document is sent for signing. Currently, whenever I send any template/document for signing, the email notification that goes to the customer
    • 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.
    • How to change position button transtition of Blueprint?

      Hi Everyone, Look at my screenshoot, it is possible move the reject button to the right? I couldn't find that setting in the blueprint. Thank you.
    • UI Improvement - Ability to Collapse Flow

      The UI for Flow is generally pretty good. However, when multiple decision trees are used, the layout can get pretty convoluted and hard-to-follow (see one of my Flows below): In these cases, even the auto-arrange fails to make this something that a normal
    • Tasks Statuses

      Hi, The task status "Completed" is a final status which closes the task. We need to have a status "Cancelled". However, when the status is set to "Cancelled", the task prompt still has a blue button to Close Task. When the customer clicks that and closes
    • Add Lookup Field in Tasks Module

      Hello, I have a need to add a Lookup field in addition to the ones that are already there in the Tasks module. I've seen this thread and so understand that the reason lookup fields may not be part of it is that there are already links to the tables (
    • Create New Tasks Layout in CRM

      I am able to do this in Leads, Contacts, Meetings, Calls - every other module, but cannot create a new layout in tasks. I have the appropriate access but it's simply not appearing as an option. Only "Standard" option shows. Please help!
    • Whatsapp Connection Status still "Pending" after migration

      Hello, I migrated my WhatsApp API to Zoho from another provider a day ago. So far the connection status is still “Pending”. There is a problem? How long does it usually take?
    • Meet Canvas' Grid component: Your easiest way to build responsive record templates

      Visual design can be exciting—until you're knee-deep in the details. Whether it's aligning text boxes to prevent overlaps, fixing negative space, or simply making sure the right data stands out, just ironing out inconsistencies takes a lot of moving parts.
    • Multi file upload

      Hi, I just wonder if one could upload multiple files in one shot, say between one and three files, without adding multiple File Upload fields? Thanks, Alalbany
    • Using IMAP configuration for shared email inboxes

      Our customer service team utilizes shared email boxes to allow multiple people to view and handle incoming customer requests. For example, the customer sends an email to info@xxxx.com and multiple people can view it and handle the request. How can I configure
    • Auto-Invite Users to Portals in Zoho CRM based on Conditions

      Hello Everyone, You can now automate portal invitations in Zoho CRM with the new Auto-Invite users feature in Portal management. No more manually enabling portal access one by one. With this enhancement, you can automatically send invites for users to
    • Zoho CRM for Everyone's NextGen UI Gets an Upgrade

      Hello Everyone We've made improvements to Zoho CRM for Everyone's Nextgen UI. These changes are the result of valuable feedback from you where we’ve focused on improving usability, providing wider screen space, and making navigation smoother so everything
    • Auto-sync field of lookup value

      This feature has been requested many times in the discussion Field of Lookup Announcement and this post aims to track it separately. At the moment the value of a 'field of lookup' is a snapshot but once the parent lookup field is updated the values diverge.
    • Zoho Recruit Subscription

      Hello Zoho Recruit Team, Good day! I would like to inquire about your recruitment subscription plans and would also like to verify the current subscription our company is enrolled in under Zoho Recruit. Thank you, and I look forward to your response.
    • Keyboard shortcut M key

      I'm trying to customize my keyboard shortcuts and assign the "m" key. But it says the key is already assigned. I've looked through all my shortcuts and can't see any assigned "m". When I select an email and press the M key, nothing happens. What is the
    • Is it possible to create a meeting in Zoho Crm which automatically creates a Google Meet link?

      We are using Google's own "Zoho CRM for Google" integration and also Zoho's "Google Apps Sync" tools, but none of them provide us with the ability to create a meeting in Zoho CRM that then adds a Google Meet link into the meeting. Is this something that
    • Ensure Consistent Service Delivery with Comprehensive Job Sheets

      We are elated to announce that one of the most requested features is now live: Job Sheets. They are customizable, reusable forms that serve as a checklist for the services that technicians need to carry out and as a tool for data collection. While on
    • Automatic Portal invite

      We have numerous customers we move through a blueprint in deals, when they get to a certain point we need to give them portal access, how can this be done through deluge or a workflow? Latest Update (December 2025): The option to automate portal invitations
    • Next Page