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 #222 - Client Script Support for Notes Related List

      Hello everyone! Welcome to another week of Kaizen. The final Kaizen post of the year 2025 is here! With the new Client Script support for the Notes Related List, you can validate, enrich, and manage notes across modules. In this post, we’ll explore how
    • 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.
      • Recent Topics

      • 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
      • Growth You can Count On: Zoho Billing's 2025 Journey

        As we wrap up 2025, we’re reflecting on a year rooted in steady progress and meaningful growth for Zoho Billing. Every enhancement we have introduced was built to support scalable and reliable billing growth for your business. From launching the Enterprise
      • Automating Employee Birthday Notifications in Zoho Cliq

        Have you ever missed a birthday and felt like the office Grinch? Fear not, the Cliq Developer Platform has got your back! With Zoho Cliq's Schedulers, you can be the office party-cipant who never forgets a single cake, balloon, or awkward rendition of
      • Need help with creating workflow with Bigin and Clickup

        Can you please help me with this? I am trying to create a workflow in Zoho Flow wherein a bigin Pipeline deal moves to Decision Closing, it will create a task and subtasks in Clickup, under the condition/filter that the Deal name contains the word Social
      • [Webinar] Automate generation of wills, trusts, POAs, and other estate planning documents with Zoho Writer

        Managing the lifecycle of the estate planning documents such as wills, trusts, and POAs, from client intake to final storage, can be complex and time-consuming. Join our live webinar to learn how Zoho Writer transforms this process by automating document
      • Create / Update Rule in TeamInbox when record is updated in ZohoCRM using flow?

        I'm currently evaluating options and trying to work out if the possible scenario is possible; If a record in ZohoCRM is updated, take 2 of the fields from that - lets call them 'OrderRef' and 'OrderTo'. Using flow, if a record is added or updated, add
      • Plans to allow more columns of monitoring, and monitoring not only your own channels?

        Are their any plans to allow more columns of monitoring, and monitoring not only your own channels? Here's why - I'm sure I'm not alone in that we sell other brands products, so not only am I interested in my own brand social channels, but also the social
      • Unwrapping the best practices for the Zoho Desk mobile app: Part 1

        In focus: Empowering the field and frontline customer support representatives Imagine having to carry your computer everywhere to respond to customers, handle escalations, and update your process. This series presents you with efficient tips to handle
      • dealing with post dated cheques

        Hi, can you help me please the best way to deal with this We sell an item of three months duration that is paid for with post dated cheques in monthly stages example - item is sold £3000 Cheque 1 is for £1000 due at time of sale (say Sept) cheque 2 is dated 25th of next month (Oct) cheque 3 is dated 25th of next month +1 (Nov) Now, with invoice number one it's simple - i send a standard invoice as usual But with the other two here's what i want zoho to do next month i want it to send an invoice on
      • Is there a way to sell in a practical method multiple subscriptions of the same product? i.e. domain names

        In evaluating Zoho Billing, a hurdle to adopting it is that Zoho Billing does not seem designed to support businesses that sell multiple subscriptions of the same product. In our case, we need to sell and manage several domain names per client. Am I right
      • Paid Support Plans with Automated Billing

        We (like many others, I'm sure) are designing or have paid support plans. Our design involves a given number of support hours in each plan. Here are my questions: 1) Are there any plans to add time-based plans in the Zoho Desk Support Plans feature? The
      • Bug Report: "Name A-Z" sorting fails when Note titles start with an Emoji

        Hello, I recently migrated from Evernote (~2600 notes across 23 notebooks). I use emojis at the start of my note titles for visual organization. The Issue: When I set the view to Sort by: Name (A to Z), the sorting logic breaks for any note starting with
      • Copy & Paste not working

        I could create and save 10 new documents but when I go to copy and paste content (just text) into them, only 1 of 10 would save the content. It would appear to save the content but when I go back into the documents, they are empty.
      • editing/applying online payments

        We have customers who pay part or all of an invoice and then cancel their service and want the payment as a credit to future work. It would be ideal if we could make it an excess payment and then void the invoice. I can't make it an excess payment because
      • Contacts per department

        Hello, Is it possible to limit Contacts to a Department? Thanks
      • This site can’t be reached mail.zoho.com took too long to respond

        In my office at any system, we couldnt able to login zoho email. it shows " This site can’t be reached mail.zoho.com took too long to respond". please fix it soon.
      • Can send email from zoho mail, but can't receive any.

        Hi, My domain is sattvameditationresort.com. I've updated MX records with those of Zoho. But i can't send any mails to this email id from gmail. I have checked the MX status with MXTOOLS, its showing the correct entry either. The error is as shown below:
      • My domain did not activate

        Hi, my domain (apsaindustrial.com.ar) did not activate, and the phone verification message never arrived. Please would you solve this problem? Thanks.
      • Host not found?

        Howdy! So i'm trying to add my custom domain for with the mail server. I have 100% control of my DNS and have tried every single option (TXT, CNAME, and even HTML) multiple times, ensuring i did it properly, to no luck. I get the same error message every
      • Emails are going to notification folder and not in inbox

        emails are going to notification folder and not into inbox
      • Error AS101 when adding new email alias

        Hi, I am trying to add apple@(mydomain).com The error AS101 is shown while I try to add the alias.
      • Report on opportunities showing only the last note added.

        Hi I need to create a report that shows the most recent note added to each opportunity. This is so management can see what the latest update is according to the assigned salesperson. One workaround is to use the status field but this implies added manual work and mistakes as the salesperson would have to copy the existing status to a note before adding the latest status... otherwise the activity history would be lost. My current workaround is a report on Notes with Opportunities as the related module.
      • Please add Zelle as an online payment option

        Hello, I would like to request Zelle be added to the online payment service providers for Zoho Invoice. Considering how ubiquitous Zelle has become as a way to pay people via the major banking institutions, I feel like many freelancers would benefit from
      • This user is not allowed to add in Zoho. Please contact support-as@zohocorp.com for further details

        Hello, Just signed up to ZOHO on a friend's recommendation. Got the TXT part (verified my domain), but whenever I try to add ANY user, I get the error: This user is not allowed to add in Zoho. Please contact support-as@zohocorp.com for further details I have emailed as well and writing here as well because when I searched, I saw many people faced the same issue and instead of email, they got a faster response here. My domain is: raisingreaderspk . com Hope this can be resolved.  Thank you
      • Getting Project Template List using the REST API

        I am trying to confirm that I can use the REST API to create a project using a project template. The API documentation indicates this is possible by providing the Template ID, but it is not clear at all how to get a list of available Project Templates
      • How to display the CONTACT ID in the Contact page

        Hi, I've seen this conversation below and it is exactly the same question I'm raising now, but unfortunately the last message is not solved https://help.zoho.com/portal/community/topic/show-contact-id-while-editing-contact-form I need to show the ContactId and I don't know how to do this. The last message included in the conversaton shows the way but not it is not completed. "I am sorry by default we do not have the option to show the record ID for the contacts in the field in a record. When you
      • How to change margins in templates

        Hi, I'm new to Zoho Campaigns, and am trying to figure out how to adjust the margins within an email template.  The default margins make the text go all the way to the edges of the page.  Please advise.
      • Create Canvas list view templates from images powered by Zia

        Currently available for all paid editions of Zoho CRM in the US, EU, IN, JP & CN DCs. Designing a personalized CRM interface just got even easier. In today’s fast-evolving digital landscape, AI is transforming the way we work by automating complex tasks
      • Painfully Slow Zoho mail

        Since yesterday Zoho Mail seems to have starting functioning very slowly and having a few bugs. It's slow to open mails, slow to send, slow to change between email accounts. Sometimes clicking on a particular folder (eg Sent folder) stops working and
      • "Wrong password or login" Problem to configure Zoho on MAIL App on my Macbook

        Hi, I'm having problems to configure my e-mail on my MAIL App(Macbook pro). My e-mail is hari@trespontoum.net Actually was working perfectly, and still working on my Iphone. My MAIL App prompt me that my login or password is wrong. I tried to change 3
      • "User already exist in your org"

        Hello, I've just read a discussion about this issue, which didn't solve my problem. I'm trying to add the following emails: sales@kiss-my-boutique.co.uk returns@kiss-my-boutique.co.uk orders@kiss-my-boutique.co.uk I'm getting an error message each time I try and add them. None of them are primary or secondary emails and none of them have been created as users before. I know this as when I try and login and do 'forgot my password' all I get is an error message saying 'user invalid'. Please advise.
      • Operation Not Permitted

        Hi, I have problem in adding user after verifying the domain but it seems like error appeared which is "operation not permitted". For your information, I had delete other domain before did it.
      • Email forwarding setup fails

        I'm trying to set up email forwarding from my Zoho email to my gmail address. I followed the directions to set up email forwarding here: https://www.zoho.com/mail/help/email-forwarding.html. I did only steps 1-6. After doing this, rather than setting
      • Passing the CRM

        Hi, I am hoping someone can help. I have a zoho form that has a CRM lookup field. I was hoping to send this to my publicly to clients via a text message and the form then attaches the signed form back to the custom module. This work absolutely fine when
      • Shopify store email issues- Not getting emails

        Hi We have migrated from Microsoft outlook to Zoho back in March, we have a shopify store, the domain is hosted on namesilo, not shopify, I have seen some people here complaining about not getting emails from customers who fill out the contact form on
      • How do I fix this? Unable to send message; Reason:554 5.1.8 Email Outgoing Blocked.

        How do I fix this? Unable to send message; Reason:554 5.1.8 Email Outgoing Blocked.
      • Invoice Discount Account

        Is there a way to change the account used for Discounts applied to an invoice? The current Discount account (ZB native account) type is an "Income" type. I would like to change it to "Other Income", but that is not possible, I am assuming because it contains
      • Need Inactive accounts to be visible in Reports in Zoho Books

        I N=need Inactive accounts to be visible in Reports in Zoho Books to do recons of the accounts but when i see the same they are not visible in the Accountant - Account Transactions report
      • API Support for Creating Invoices with Batch-Tracked Items

        Hi Zoho Community, I am working on an integration where we create invoices in ERPNext and push them to Zoho Books. I need to send batch-tracked items (batch numbers) when creating invoices. I could not find any reference in the Zoho Books API documentation.
      • javax.mail.authenticationfailedexception 535 authentication failed

        Hi, I am facing 535 authentication failed error when trying to send email from zoho desktop as well as in webmail. Can you suggest to fix this issue,. Regards, Rekha
      • Next Page