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:
- Create and edit CRM metadata (modules, fields, roles, profiles, and widgets)
- Define relationships between modules (lookups, multi-select lookups)
- Push and sync metadata changes to sandbox.
- 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".
Then, login to the sandbox environment for Zenith using zdk auth:login command.
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.

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.
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:
- Conference – Stores details of each event.
- Attendees – Tracks participants, whether leads, contacts, or external.
- ConferenceAttendees (Linking Module, not created) – Connects conferences and attendees with registration status.
- Venues – Captures details of event locations.
- Speakers – Stores details of invited speakers.
This has been visualized in the data model below.
To create a module, use the command
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
Conference module:
Conference modules's fields are:
- Attendees (multiselectlookup to Attendee module)
- Speakers (multiselectlookup to Speakers module)
- Venue (lookup to Venue module)
- Date (datetime)
- Duration(double)
- Description (textarea)
- 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, add 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
- Phone (phone)
- Company (text)
- EventsAttended (multi-select lookup to Conference module)
- Attendee Type (picklist with options Lead, Contact, External)
- Leads (lookup to Lead module)
- Contacts (lookup to Contact module
Venue Module
- Location (text)
- Capacity (integer)
- Contact erson (text)
- ContactNumber(phone)
- Description(textarea)
Speakers Module
- Phone (phone)
- Company (text)
- SpeakerStatus (picklist with options Confirmed, Pending, Canceled)
Step 3: Create a Custom Role
To create a field, use the command
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
Monthly timesheet, consolidation of time by project
I have time logs for various jobs for project. Is it possible to consolidate the time spent for each job, when I am generating a timesheet for a month? I am getting the entries of jobs done on each day when I generate a timesheet for a month For example
Building a Strong Online Identity with G-Tech Solutions
In today’s fast-moving world, having a strong online identity is essential for every business. https://gtechsol.com.au helps businesses establish a digital presence that reflects their vision and values. By focusing on innovation and quality, they create
Sending emails from an outlook account
Hi, I need to know if it's possible to send automatic emails from an Outlook account configured in Zoho CRM and, if so, how I can accomplish that. To give you some context, I set up a domain and created a function that generates PDF files to be sent later
Struggling with stock management in Zoho CRM – is Zoho Inventory the solution?
My biggest pain point today with Zoho is inventory management. I run a retail business and reliable stock management is absolutely critical. Obviously, I need this inventory to be visible inside the CRM. At first, I tried handling it through custom modules
Nimble enhancements to WhatsApp for Business integration in Zoho CRM: Enjoy context and clarity in business messaging
Dear Customers, We hope you're well! WhatsApp for business is a renowned business messaging platform that takes your business closer to your customers; it gives your business the power of personalized outreach. Using the WhatsApp for Business integration
can't login Kiosk URGENT
already try, can't login pls help to support. thanks.
【Zoho CRM】CRM for Everyoneに関するアップデート:関連データ機能
ユーザーの皆さま、こんにちは。コミュニティチームの中野です。 今回は「Zoho CRM アップデート情報」の中から、CRM for Everyoneの新機能「関連データ機能」をご紹介します。 関連データ機能は、あるタブのデータを別のタブに柔軟に関連付け、異なるタブで管理されている情報を1か所にまとめて表示できます。 たとえば、組織タブとチームタブのデータを関連付けることで、必要な情報に効率よくアクセスでき、顧客理解を深めながら他チームとの連携もスムーズに行えます。 目次 1. 関連データの設定方法
Zoho Books
How do I manually insert opening balance?
Profit / margins on Sales orders / Invoices / Estimates
When we select an SKU or item name in any of these documents, much info such as invoice.line_items.rate is pulled from the item & filled into the document being worked on. If we had another lineItem DB field (hidden) auto filled at the same time: invoice.line_items.purchase_rate
Inventory to Xero Invocie Sync Issues
Has anyone had an issue with Invoices not syncing to Xero. It seems to be an issue when there is VAT on a shipping cost, but I cannot be 100% as the error is vague: "Unable to export Invoice 'INV-000053' as the account mapped with some items does not
How to activate RFQ? What if a price list has ladder price for items?
Where can I find the option to activate request for quotation? How does it work? If the item has ladder price, does it gets calculated depending on how many items are in the cart?
Mailk got blocked / Inquiry About Email Sending Limits and Upgrade Options
Dear Zoho Support Team, My name is Kamr Elsayed I created this account to use for applying for vocational training in Germany. As part of this process, I send multiple emails to different companies. However, after sending only 8 emails today, I received
Can't join canal Developers Zoho User
Hello, I received an invitation to join this channel, but I get an error when I try to join it, and I get the same error when I go to the Zoho Cliq interface > Search for a channel. Is this because I don't have a license linked to this email address?
Desk Email reply - set default font / use custom font
Hello, in our e-mails, which we send to our customers, a certain font must be used (Corporate Design): Segoe UI https://en.wikipedia.org/wiki/Segoe#Segoe_UI How can this be included? How can this be set as the default font to ensure that this font is
PDF Templates - Checkbox Borders
Is there a way to remove the border of a radio/checkbox on a PDF? I'd like to use the function of checkbox but if there's no easy way to remove the border (the PDF form already has a rectangle so it gets cluttered), then I'm forced to create a single
Settings Icon No Longer in ZOHO Desk?
In ZOHO desk, there has been a gear icon for settings. as of yesterday, it is no longer there. I showed up briefly this morning but is gone again. Anybody else experiecing this?
Introducing the all-new email parser!
Greetings, We are pleased to introduce to you, a brand-new, upgraded version of the Zoho CRM Email Parser, which is packed with fresh features and has been completely redesigned to meet latest customers needs and their business requirements. On that note,
Tip #43 - Track, Review, and Analyze Your Assist Sessions with Reports-'Insider Insights'
Did you know you can generate detailed reports for both remote support sessions and unattended access sessions in Zoho Assist? This makes it easy to monitor technician activity, measure efficiency, and review customer interactions. Let us now take a closer
Function #20: Custom calculation in item table of invoices
When you create an invoice in Zoho Books, the 'Amount' of a line item is typically calculated as the product of the "Quantity" and the "Rate" of the item. For instance, if an item has a sales rate of $50 and a quantity of 5 is sold, then the amount would
CBSA - GST CHARGES on imports
Hi there, We have a questions about landed cost categorization. We received a shipment from overseas. CBSA invoiced us for the GST on the items. Now we entered the CBSA-GST as a separate bill and attached it as landed cost to the main invoice based on
Simplified Call Logging
Our organization would like to start logging calls in our CRM; however, with 13 fields that can't be removed, our team is finding it extremely cumbersome. For our use case, we only need to record that a call happened theirfor would only need the following
Sub form doesn't as formula field
Is it possible to get formula field in sub form in futures?
Week date range in pivot table
Hello, I need to create a report that breakouts the data by week. I am using the pivot table report, and breaking out the date by week, however the date is displayed as 'Week 1 2014' format. Is there anyway to get the actual dates in there? ex. 1/6/2014-1/12/2014 Thanks,
How do I get Status History data of my Projects?
I want to build a table in Zoho Analytics that Groups by Date, when Projects entered a certain status. I cannot find Status History or any such useful data available in the Setup of my Data Source sync. Please advise how I can achieve this?
Is it possible to hide fields in a Subform?
Since layout rules cannot be used with Subforms, is there another way, or is it even possible, to hide fields in a subform based on a picklist fields within said subform? For example, if the Service Provided is Internet, then I do not want to see the
Weekly Tips :Instantly find what you need with Attachment Viewer
Your inbox must be packed with project emails, shared notes, and scattered attachments. You are looking for one specific file—a presentation slide or maybe a media clip from a team update—but don’t want to dig through endless email threads or switch between
Putting Watermark on Zoho Sheet
Can this be done?
Missing Zoho Desk integration option for form workflows
According to the help page "Configure Zoho Desk integration in form workflows" we should be able to select Zoho Desk as an integration target but when I open the integrations list then Zoho Desk is not being listed in it. We are on the Premium plan which should already support Zoho Desk integrations.
Gantt for 2 or more projects
Hello, I'm trying the free version of your produtc. It is veryyy good!!!! I don't know if in the Standard plan, I can overview a Gantt Graph for 2 or more Projects Milestone. This would be very helpfull for managing teams and taking decisions about who I will assign a task to. In the paid plan Do I have this possibility? Thank you.
Integrating a Zoho Project Gantt Chart into Reports
Is is possible to integrate a Zoho Project Gantt Chart into a Zoho Report Dashboard. I am in the process of creating Project Status Dashboards for the projects that we track in Zoho Projects and I would like to incorporate the gantt chart within Reports. Please let me know! Thanks
ZOHO BOOKS - EXCESSIVELY SLOW TODAY
Dear Zoho Books This is not the first time but it seems to be 3 times per week now that the system is extremely slow. I work on Zoho Books 95% of my day so this is very frustrating. Zoho you need to do something about this. I have had my IT guy check
Gantt Chart - Zoho Analytics
Are there any plans to add Gantt Charts capabilities to Zoho Analytics?
Displaying related quotes in sales order and back
Hi, My colleague liked to see to which sales orders, the quote has been converted. Quote shows Invoices, but not SO. Same, they would like to see the quotes in the sales order, as they can see invoices, packages, shipment, How can we achieve this ? Thank
Tip of the Week #71–Auto-move incoming messages to the right inboxes with keywords
We all know that customer-facing teams, especially your sales and support teams, can’t afford to miss even a single customer conversation. But sometimes, sales queries or support requests can easily get lost in a crowded inbox or even end up in the wrong
Clearing Fields using MACROS?
How would I go about clearing a follow-up field date from my deals? Currently I cannot set the new value as an empty box.
Migrating a Zoho Forms form into Zoho Creator
Hi, How can I migrate my Zoho Forms form into Zoho Creator? Thanks. Truly, Emad
Is there any way to recall an email sent using Zoho CRM?
If an email is sent using Zoho Mail, there is a recall option/functionality that is available to the sender. Is there any way to recall an email if it was sent using Zoho CRM? I can't seem to find that option. Any help would be appreciated.
Quick Create needs Client Script support
As per the title. We need client scripts to apply at a Quick Create level. We enforce logic on the form to ensure data quality, automate field values, etc. However, all this is lost when a user attempts a "Quick Create". It is disappointing because, from
Problem with reports due to "Connected" items change - Yes this IS a problem
Now that the change has been made to use "connected" items I can no longer run the reporting I need in CRM. I should be able to start with Deals as the parent, connect down to the Account (Account_Name) on the deal as the child, then to any child items
Introducing notifications in the vendor portal
Imagine this: You're a recruiter working with multiple vendors on a high-volume hiring project. You’ve just updated a job description after a last-minute change from the hiring manager. One of your vendors, however, is still working off the older version
Next Page