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.
    • Recent Topics

    • Help Center IFrame Issue

      I have had a working Help Center on my website using an iframe for a while. But now for some reason the sign in page gets a refused to connect error. Can someone please help. If I go to the url manually it works correclty
    • Comment Templates

      Is it possible to add a template option for comments? We have some agents in the process who's responses require a pre-formatted layout. It would be incredibly handy to have a template for them where they can insert the template and then add their responses
    • [ZohoDesk] Improve Status View with a new editeble kanban view

      A kanban view with more information about the ticket and the contact who created the ticket would be valueble. I would like to edit the fields with the ones i like to see at one glance. Like in CRM where you can edit the canvas view, i would like to edit
    • Adding Markdown text using Zoho Desk API into the Knowledge Base

      Hi Zoho Community members, We currently maintain the documentation of out company in its website. This documentation is written in markdown text format and we would like to add it in Zoho Knowledge Base. Do you know if there is REST API functionality
    • An Exclusive Session for Zoho Desk Users: AI in Zoho Desk

      A Zoho Community Learning Initiative Hello everyone! This is an announcement for Zoho Desk users and anyone exploring Zoho Desk. With every nook and corner buzzing, "AI's here, AI's there," it's the right time for us to take a closer look at how the AI
    • Shared values: From classroom lessons to teaching moments in customer service

      While the world observes Teachers’ Day on October 5, in India, we celebrate a month earlier, on September 5, to mark the birth anniversary of Dr. Sarvepalli Radhakrishnan, a great teacher, renowned scholar, educationist, and advocate for empowerment.
    • Create a list of customers who participated in specific Zoho Backstage events and send them an email via Zoho CRM

      How to create a list of customers who participated in specific Zoho Backstage events and send them an email via Zoho CRM? I was able to do a view in CRM based on customer that registered to an event, but I don't seems to be able to include the filter
    • Zoho Desk blank page

      1. Click Access zoho desk on https://www.zoho.com/desk/ 2. It redirects to https://desk.zoho.com/agent?action=CreatePortal and the page is blank. Edge browser Version 131.0.2903.112 (Official build) (arm64) on MacOS
    • I hate the new user UI with the bar on the left

      How can I reverse this?
    • Question regarding import of previous deals...

      Good afternoon, I'm working on importing some older deal records from an external sheet into the CRM; however, when I manually click "Add New Deal" and enter the pertinent information, the deal isn't appearing when I look at the "Deals" bar on the account's
    • Client Script also planned for Zoho Desk?

      Hello there, I modified something in Zoho CRM the other day and was amazed at the possibilities offered by the "Client Script" feature in conjunction with the ZDK. You can lock any fields on the screen, edit them, you can react to various events (field
    • One person/cell phone to manage multiple accounts

      Hi. I have a personal Free account to keep my own domain/emails. Now I need to create a Business account to my company's own domain, but I have only one mobile phone number I use to everything. How do I do to manage this? Can I manage a Free domain and
    • Tracking KPIs, Goals etc in People

      How are Zoho People users tracking employee targets in People? For example, my marketing assistant has a target of "Collect 10 new customer testimonials every month". I want to record attainment for this target on a monthly basis, then add it to their
    • Zoho Desk: Ticket Owner Agents vs Teams

      Hi Zoho, We would like to explore the possibility of hiding the ‘Agents’ section within the Ticket Owner dropdown, so that we can fully utilise the ‘Teams’ dropdown when assigning tickets. This request comes from the fact that only certain agents and
    • Can not Use Attachment Button on Android Widget

      this always pops up when I touch the attach button on android widget. going to settings, there is no storage permission to be enabled. if I open the app, and access the attach feature there, I can access my storage and upload normally.
    • Announcing new features in Trident for Mac (1.24.0)

      Hello everyone! Trident for macOS (v.1.24.0) is here with interesting features and thoughtful enhancements to redefine the way you plan and manage your calendar events. Here's a quick look at what's new. Create calendar events from emails. In addition
    • Vendor Master Enhancements for Faster Purchase Entry

      I’d like to suggest a few features that will improve accuracy and speed during purchase voucher entry: Automated Item Tax Preference in Vendor Master Add an option to define item tax preference in the vendor master. Once set, this preference should automatically
    • Mass Mail Statistics - Number of unsent emails

      How do I find out which emails were not sent?
    • Est-il possible d'annuler l'envoi d'un mail automatique ?

      Bonjour, Lorsque je refuse un candidat, il reçois un mail dans les 24h pour l'informer que sa candidature n'est pas retenue. J'ai rejeté un candidat par erreur. Savez-vous s'il possible d'annuler l'envoi de ce mail ? Merci d'avance pour votre aide.
    • embed a form in an email

      Hello, how to embed a form in an email that populates Zoho CRM cases? I would like to send emails to a selected audience offering something. In the same email the recipients - if interested - instead of replying to can fill in a Zoho CRM form that creates
    • Zoho Bookings - Reserve with Google

      Does Zoho Bookings plan to to integrate with Reserve with Google?
    • How to add Zoho demo site page designs to my Zoho Sites website

      Hi, I would like to add the design from the following demo URLs into my current Zoho website. I have already created two new pages on my site, named “Menu2” and “Menu3.” For the “Menu2” page, I want to use the design from this demo: https://naturestjuice-demo.zohosites.com/menu
    • Digest Août - Un résumé de ce qui s'est passé le mois dernier sur Community

      Bonjour chère communauté ! Voici le résumé tant attendu de tout ce qui a marqué Zoho le mois dernier : contenus utiles, échanges inspirants et moments forts. 🎉 Découvrez Zoho Backstage 3.0 : une version repensée pour offrir encore plus de flexibilité,
    • Text snippet

      There is a nice feature in Zoho Desk called Text Snippet. It allows you to insert a bit of text anywhere in a reply that you are typing. That would be nice to have that option in Zoho CRM as well when we compose an email. Moderation Update: We agree that
    • Kaizen #206 - Answering your Questions | Displaying Related Purchase Orders from Zoho Books in CRM Deals using Queries

      Hello everyone! We're back with another post in the Kaizen series. We're grateful for the feedback we received from all of you! One of the questions we received was "I would like to see the list of Purchase Orders in Zoho Books for a Deal in CRM." We
    • Add Analytics function for Title case (capitalising each word in a string)

      At present, you can only capitalise each word in a string in Analytics during data import. It would be really useful to be able to do this with a formula column, but there is no Title Case function.
    • How to conditionally embed an own internal widget with parameters in an html snippet?

      Hello everyone, I'm trying to create a dynamic view in a page using an HTML snippet. The goal is to display different content based on a URL parameter (input.step). I have successfully managed to conditionally display different forms using the following
    • Where can I find rejected inbound mails and their reason for rejection

      Hi, I was recently made aware by a mailing list which I am subscribed to (ffmpeg-devel@ffmpeg.org) that my Zoho mail Mail account is rejecting some emails. If I look under Admin Panel > Security & Compliance > Quarantine > Incoming, the list there is
    • Sync more than one Workdrive

      Hello Please I'm facing some difficulties since some days. In my company we have many zoho accounts in different organisations. And I have to find a way to sync all these Workdrives. I spend many hours to search it on zoho Workdrive but no solution. Could someone help me ? Any idea how I can achieve it ? Thanks in advance. Regards
    • Zoho writer unable to merge documents to PDF with basic fonts in Hebrew or fonts from my computer

      I created several forms that will be merged into PDF files through Zoho Writer and I am unable to receive the PDF in the basic fonts of the Hebrew language or in the fonts I have on my computer. The writer exports to PDF an exchange font that looks very
    • Base Currency Adjustment Reversal

      Two questions surrounding the base currency adjustments (BCA). I recently ported over from QB so I need to enter the base currency adjustments. In QB, it will calculate the BCA for you at the end of the year and then reverse it at the top of the following year. Makes sense. Does Zohobooks not do this as well? I created a BCA for Dec 31, 2016 but no reversing entry was made Jan 1, 2017. Am I supposed to manually do a reversal? I'm not even allowed to post journals directly to the 'exchange gain loss'
    • Please implement UAE Central Bank FX rates

      Hello, as I understand from your knowledge base, any UAE business account created from September 15, 2018 does not have foreign exchange rates fetched automatically. This is a serious inconvenience and I am not sure why ZOHO has not looked into the ways
    • Search Records returning different values than actually present

      Hey! I have this following line in my deluge script: accountSearch = zoho.crm.searchRecords("Accounts","(RS_Enroll_ID:equals:" + rsid + ")",1,200,{"cvid":864868001088693817}); info "Account search size: " + accountSearch.size(); listOfAccounts = zoho.crm.searchRecords("Accounts","(RS_Enroll_ID:equals:"
    • Super Admin Access to All Courses and Spaces in Zoho Learn

      Dear Zoho Learn Team, We hope this message finds you well. We are using Zoho Learn extensively for internal and agent training. While managing our courses and spaces, we encountered a significant limitation regarding admin access and course management.
    • Print checks for owner's draw

      Hi.  Can I use Zoho check printing for draws to Owner's Equity?  This may be a specific case of the missing Pay expenses via Check feature.  If it's not available, are there plans to add this feature?
    • [New Release 2024] Create and embed custom capabilities across CRM with Kiosk Studio, our latest no-code tool

      [Update | New series] We've started publishing a series of posts on Kiosk Studio. It's called Kiosk Studio Sessions and you can check out the first one here! [Update | 15 Oct} Session #2 is live! This one will look at how to create a kiosk for your call
    • Revenue Management: #10 Common Mistakes while Recognizing Revenue

      We are at the end of the series on Revenue Management, covering how different businesses recognise revenue. Even with clear standards like ASC 606 and IFRS 15 in practice, businesses often struggle with the nuances of revenue recognition. Especially growing
    • Windows Desktop App - request to add minimization/startup options

      Support Team, Can you submit the following request to your development team? Here is what would be optimal in my opinion from UX perspective: 1) In the "Application Menu", add a menu item to Exit the app, as well as an alt-key shortcut for these menus
    • integarting attachments from crm to creator

      when i tried to integrate pdf attachments from crm to creator via deluge i am getting this error {"code":2945,"description":"UPLOAD_RULE_NOT_CONFIGURED"} the code i used is attachments = zoho.crm.getRelatedRecords("Attachments","Sales_Orders",203489100020279XXX8);
    • Search Option

      🚫 Current Limitation: As of now (September 2025), Zoho FSM lacks a global search functionality, which makes it difficult to quickly: Find specific Work Orders by number or keyword Search for customer records or contact info Locate assets, jobs, or service
    • Next Page