Automating ZDK CLI commands using shell scripting

Automating ZDK CLI commands using shell scripting


Hello everyone,
Welcome back to Kaizen.  ZDK CLI's command-line nature allows you to easily incorporate it within a shell script, to achieve any custom action that you want to execute.  It allows you to execute multiple ZDK CLI commands seamlessly, enhancing productivity.

In this week's Kaizen post, we will discuss a shell script designed to automate the process of pushing locally modified metadata to our CRM environment. Before executing the push operation, ensure that the local metadata is up-to-date and conflicts (same file has been modified in both the local ZDK environment and the remote UI environment) are resolved. To achieve this, we will perform the following steps for files in conflict where manual intervention is required:
  • Retrieve the latest metadata from Zoho CRM to our local environment using zdk org:pull command
  • Address conflicts that may arise during the pull operation using zdk org:pull:resolve command 
  • Update our local directory with the newly pulled file using zdk org:pull:update command
  • Push changes from your local environment to the CRM using zdk org:push command
  • Update local directory and check status of push command using zdk org:push:result command
This script automates the sequential execution of these commands.

Prerequisites
  • ZDK CLI Version 1.0.2-beta
To update ZDK CLI, execute the following command in your terminal


  npm install -g @zohocrm/zdk-cli


This will initiate the installation process for the latest version.

Crafting the Shell Script

 
1.Create a new shell script file zdk_automation.sh in your ZDK project's root directory.
#!/bin/bash
touch stdout.txt
#This script is used to automate ZDK CLI conflict resolve flow
conflict_flag=false
# Clear stdout.txt at the start
> stdout.txt
#Step 1: Initial Push Command
echo "====Start of the script ====" >> stdout.txt
echo "**Executing the initial zdk org:push -j" >> stdout.txt
json_content=$(zdk org:push -j)
echo "Output  $json_content" >> stdout.txt
next_command=$(echo "$json_content" | jq -r '.next_command_sequence // empty')
echo "next_command after initial push  is $next_command">> stdout.txt
# Check if the JSON is valid
if echo "$json_content" | jq empty 2>/dev/null; then
#Step 2: Conflict Detection
    message=$(echo "$json_content" | jq -r '.message')
    echo "message: $message" >>stdout.txt
    if [[ "$message" == *"Merge Conflicts!"* ]]; then
        #Step 3: Resolving Conflicts
        conflict_flag=true
        # Pull changes to the local repository and store the output in a variable
        echo "**Executing zdk org:pull -j" >> stdout.txt
        json_content=$(zdk org:pull -j)
        echo "Output  $json_content" >> stdout.txt
        if echo "$json_content" | jq empty 2>/dev/null; then
            message=$(echo "$json_content" | jq -r '.result')
            echo "message $message" >>stdout.txt
            IFS=$'\n' read -r -d '' -a filenames <<< "$message"
            # Iterate over each filename and execute the resolve command
            for filename in "${filenames[@]}"; do
                echo "**Executing zdk org:pull:resolve for $filename" >> stdout.txt
                # Executing zdk org:pull:resolve 
                json_content=$(zdk org:pull:resolve -f "$filename" -j)
                echo "Output  $json_content" >> stdout.txt
            done
            echo "***Executing zdk org:pull:update" >> stdout.txt
            json_content=$(zdk org:pull:update -j)
            echo "Output  $json_content" >> stdout.txt
        fi
    fi
fi
#Step 4: Second Push Attempt after conflict
if [ "$conflict_flag" = true ]; then
# Push changes to the org and store the output in a variable again
echo "***Executing: zdk org:push -j after conflict resolution" >> stdout.txt
json_content=$(zdk org:push -j)
echo "Output  $json_content" >> stdout.txt
# Extract the line containing "next_command_sequence" from the push output
next_command=$(echo "$json_content" | jq -r '.next_command_sequence')
echo "Next command $next_command " >> stdout.txt
fi
#Step 5: Push result command
# Execute the next command if it exists
counter=0  # Initialize a counter
if [ -n "$next_command" ]; then
    while true; do
    # Execute the command stored in next_command and capture the output
    echo "***Executing: $next_command -j"  >> stdout.txt
    output=$(eval "$next_command -j")
    echo "Output $output" >>stdout.txt
    # Check if the output contains "Process in progress"
    if echo "$output" | grep -q "Process in progress"; then
        echo "Push process in progress. Waiting for 5 seconds..."  >> stdout.txt
        sleep 5  # Wait for 5 seconds
    else
        # If not found, break the loop and handle the output
        echo "Command executed successfully or completed."  >> stdout.txt
        break
    fi
     # Increment the counter
    counter=$((counter + 1))

    # Break the loop after 10 iterations
    if [ "$counter" -ge 10 ]; then
        echo "Maximum number of attempts(10) reached. Exiting the loop." >> stdout.txt
        echo "Try executing $next_command after some time" >> stdout.txt
        break
    fi
done
fi

Explanation of the script

Step 1: Initial Push Command
  • The script starts by executing the zdk org:push -j command. 
  • The commands executed using -j option ensures that the output is in a machine-readable JSON format, which facilitates easier parsing and processing.
  • The conflict_flag is set to false.
Step 2: Conflict Detection
  • The script checks the output for any merge conflicts. 
  • If conflicts are detected, it executes the zdk org:pull -j  command to retrieve the latest changes from the organization. The conflict_flag is set to true.
  • If conflicts are not present, the script proceeds to Step 5: Executing the push:result command.
Step 3: Resolving Conflicts
  • If conflicts are present, the script extracts a list of filenames associated with these conflicts. 
  • It iterates through this list and executes the zdk org:pull:resolve -j command for each filename, allowing for manual resolution of conflicts as needed. 
  • This opens a three-way editor in the browser where the conflicts can be resolved.
Step 4: Second Push Attempt after conflict
  • Once all conflicts are resolved, the script attempts to push any changes back to Zoho CRM by executing the zdk org:push -j command. 
Step 5: Executing push:result command 
  • This command should be followed by zdk org:push:result --jobid {id} command (indicated by a next_command_sequence) which displays the result of the push process with the mentioned job id and updates the local directory. 
  • During this process, if the result is shown as "Process in progress", a subsequent push:result command is required. In this case, the script waits for five seconds before trying again to ensure that operations complete successfully. 

2.Make the script executable
chmod +x zdk_automation.sh

3.Run your script
./zdk_automation.sh & tail -f stdout.txt

Logging ActionsAll actions taken by the script are logged in stdout.txt. This serves as a record for later reference and troubleshooting.







Using ZDK CLI with shell script ensures that your ZDK CLI operations are automated daily, minimizing manual intervention while effectively managing conflicts. 
Notes
For the current beta release, ZDK CLI is exclusively available for Sandbox environment and is not operational in Production environments. 

We hope you found this post useful. We will meet you next week with another interesting topic!
If you have any questions, let us know in the comment section.

Happy Exploring!


    Access your files securely from anywhere

          Zoho Developer Community




                                    Zoho Desk Resources

                                    • Desk Community Learning Series


                                    • Digest


                                    • Functions


                                    • Meetups


                                    • Kbase


                                    • Resources


                                    • Glossary


                                    • Desk Marketplace


                                    • MVP Corner


                                    • Word of the Day



                                        Zoho Marketing Automation


                                                Manage your brands on social media



                                                      Zoho TeamInbox Resources

                                                        Zoho DataPrep Resources



                                                          Zoho CRM Plus Resources

                                                            Zoho Books Resources


                                                              Zoho Subscriptions Resources

                                                                Zoho Projects Resources


                                                                  Zoho Sprints Resources


                                                                    Qntrl Resources


                                                                      Zoho Creator Resources



                                                                          Zoho Campaigns Resources


                                                                            Zoho CRM Resources

                                                                            • CRM Community Learning Series

                                                                              CRM Community Learning Series


                                                                            • Kaizen

                                                                              Kaizen

                                                                            • Functions

                                                                              Functions

                                                                            • Meetups

                                                                              Meetups

                                                                            • Kbase

                                                                              Kbase

                                                                            • Resources

                                                                              Resources

                                                                            • Digest

                                                                              Digest

                                                                            • CRM Marketplace

                                                                              CRM Marketplace

                                                                            • MVP Corner

                                                                              MVP Corner





                                                                                Design. Discuss. Deliver.

                                                                                Create visually engaging stories with Zoho Show.

                                                                                Get Started Now


                                                                                  Zoho Show Resources


                                                                                    Zoho Writer Writer

                                                                                    Get Started. Write Away!

                                                                                    Writer is a powerful online word processor, designed for collaborative work.

                                                                                      Zoho CRM コンテンツ






                                                                                        Nederlandse Hulpbronnen


                                                                                            ご検討中の方





                                                                                                  • Recent Topics

                                                                                                  • Custom Deal Name in Lead Conversion Mapping

                                                                                                    I know there are ways to change the name of a Deal after conversion using a custom function, so no need to repost that information. I would like to see the CRM Improved with Deal Name Customisation and I think the Lead Conversion Mapping page would be
                                                                                                  • Within the Basic KPI component in Analytics, it is impossible to set "next" day range as a filter

                                                                                                    Hi there, I am currently setting up a deal dashboard for the Sales team. While it is possible to filter deal records to show records that were created LAST X days only, it looks like a NEXT X days Closing date filter is not available. Would it be possible
                                                                                                  • Invoice status on write-off is "Paid" - how do I change this to "Written off"

                                                                                                    HI guys, I want to write off a couple of outstanding invoices, but when I do this, the status of the invoices shows as "Paid". Clearly this is not the case and I need to be able to see that they are written off in the customer's history. Is there a way
                                                                                                  • For each loop with available time slots

                                                                                                    I am very new to Deluge, and this question was unable to be answered by Zoho Creator tech support upon request. Task at hand: I have a Form with 4 fields: - Date Start - Date End - Dropdown: Time Start: contains time slots (12:00PM, 12:15PM, etc) - Dropdown:
                                                                                                  • Can we have Backorder Management ?

                                                                                                    Can we have Backorder Management ?
                                                                                                  • Converting Amazon Sales Order to Invoice

                                                                                                    Hi there, We need  advice on the Amazon integration with Zoho Inventory. Now, we want to convert all the Sales orders synced from Amazon to Invoices. We want also to include and record the Amazon fees associated with the sales (Amazon fees, FBA fees, Cost of Advertising etc.) However, Sales order only captures the sales proceeds (Gross Sales) in Zoho Inventory. Does anyone currently work with Amazon and can suggest how to correctly process the sales and Amazon payments through Zoho Inventory and
                                                                                                  • Zoho Inventory | Can't uncheck/turn off Advance Tracking

                                                                                                    Hi, I wanted to know if there's a way to turn off Advanced Tracking (such as Serial Number or Batch Tracking) for an item in Zoho Inventory. I’ve read that you might need to delete associated transactions and clear the opening stock to disable these features.
                                                                                                  • Landed Cost application to Vendor Bills from dropship Purchase Orders

                                                                                                    When trying to apply a Landed Cost to a Vendor Bill generated from a dropship Purchase Order, the Landed Cost pop-up window generates a message that "Landed Cost cannot be applied to Bills from dropship Purchase Orders" when trying to save the landed
                                                                                                  • 2 serial numbers for 1 item (Mac address and Serial number)

                                                                                                    There is a way to track 2 serial number type for 1 Item. Ex: Some electronic devices have a MAC address and a serial number. I need to track those 2 numbers
                                                                                                  • Zoho Projects Roadshow, USA - 2024

                                                                                                    Dear Users, We are happy to announce the Zoho Projects Roadshows 2024 in USA. This is an excellent opportunity to learn more about Zoho Projects and gain in-depth knowledge of the advanced features. Our team will also discuss industry specific solutions
                                                                                                  • [Zoho Writer Webinar] Tips on collaboration control in Writer

                                                                                                    Hi Zoho Writer users, We're excited to announce the Zoho Writer webinar for the month of October 2023: Tips on collaboration control in Writer. This webinar will help you understand the various features available in Writer to control collaboration. We'll
                                                                                                  • [Zoho Writer Webinar] Working with tables in Zoho Writer

                                                                                                    Hi Zoho Writer users, We're excited to announce the Zoho Writer webinar for the month of September 2023: Working with tables. This webinar will help you understand the various ways you can use tables to meet your specific needs. The webinar will take
                                                                                                  • [Zoho Writer Webinar] Customize Writer to suit your business process

                                                                                                    Hi Zoho Writer users, We're excited to announce the Zoho Writer webinar for the month of August 2023: Customize Writer to suit your business process. This webinar will cover the various ways to customize Writer to streamline business processes and improve
                                                                                                  • Is there a way to print the dashboard?

                                                                                                    I would like the capability of printing the dashboard - is that possible?
                                                                                                  • Workflows for Timesheet

                                                                                                    Good day, Any way to have timesheet as triggers? I looked into Zoho Flow and into Zoho Project automation but no where can I have timesheet as a trigger. Basically, I would like to trigger something upon timesheet approval. Right now, the only way to
                                                                                                  • Linkedin - Recruiter System Connect

                                                                                                    Hi there! Does anyone here know how to connect Zoho Recruit to Linkedin Recruiter via Recruiter System Connect?
                                                                                                  • [Webinar] A recap of Zoho Writer in 2024

                                                                                                    Hi Zoho Writer users, We're excited to announce Zoho Writer's webinar for December 2024: A recap of Zoho Writer in 2024. This webinar will provide a recap of the features, enhancements, and integrations released in 2024 to enhance your productivity. There
                                                                                                  • Learn how to automate IT asset and incident management with Zoho Writer

                                                                                                    Hi Zoho Writer users, We're excited to announce the Zoho Writer webinar for November 2024: Learn how to use Zoho Writer's fillable forms for IT asset and incident management. This webinar will focus on how Zoho Writer can help you automate your organization's
                                                                                                  • [Webinar] Learn how Zoho Writer can streamline your finance and admin operations

                                                                                                    Hi Zoho Writer users, We're excited to announce the Zoho Writer webinar for October 2024: Streamlining finance and admin operations with Zoho Writer. This webinar will focus on how Zoho Writer can help you generate payslips and automate claim processes.
                                                                                                  • [Zoho Writer Webinar] Learn how Zoho Writer can enhance the productivity of sales teams

                                                                                                    Hi Zoho Writer users, We're excited to announce the Zoho Writer webinar for August 2024: Streamlining sales operations with Zoho Writer. This webinar will focus on how Zoho Writer can help you create sales documents and automate sales routines. There
                                                                                                  • [Zoho Writer Webinar] Learn how to simplify your HR operations: Part 2

                                                                                                    Hi Zoho Writer users, We're excited to announce the Zoho Writer webinar for July 2024: Learn how Zoho Writer can simplify your HR operations: Part 2. This webinar will focus on how Zoho Writer can help HR teams streamline and automate their entire hiring
                                                                                                  • [Zoho Writer Webinar] Learn how to simplify your day-to-day HR operations

                                                                                                    Hi Zoho Writer users, We're excited to announce the Zoho Writer webinar for June 2024: Learn how Zoho Writer can simplify your day-to-day HR operations. This webinar will focus on how to automate your entire hiring process and generate various types of
                                                                                                  • [Zoho Writer Webinar] Use formulas and conditions in Zoho Writer's document automation

                                                                                                    Hi Zoho Writer users, We're excited to announce the Zoho Writer webinar for May 2024: Learn how to use formulas and conditions in Zoho Writer. This webinar will focus on how to use formulas and conditions when automating document generation in Zoho Writer.
                                                                                                  • [Zoho Writer Webinar] Personalize Zoho Writer to suit your needs

                                                                                                    Hi Zoho Writer users, We're excited to announce the Zoho Writer webinar for April 2024: Learn how to personalize Zoho Writer to suit your needs. This webinar will focus on how to easily customize Writer's features at the user and organization level for
                                                                                                  • How to refresh/update module fields in

                                                                                                    Hi, I created a Workspace for CRM years ago. Since that time I've updated the layouts in several modules in CRM but Zoho Analytics displays the previous state fields only. How to refresh the module fields to reflect the actual state in Analytics? BR
                                                                                                  • Data update/pull from a specific field or module

                                                                                                    Hi Team, Currently, if I need a data from a newly added field on a product like Zoho CRM, I need to refresh the whole module to get the new field. This is taking much time for the data to be visible. If the data pull/refresh can be granularized to fetch
                                                                                                  • Lookup field in User module cannot look up to custom modules!

                                                                                                    Hi there, Expense has been great so far but it's sad to see that a simple thing such as allowing a lookup to custom modules from the Users module is not yet implemented. Hope to see this in the next release. Do you have any plan for that?
                                                                                                  • Trigger Zoho Cliq Channel Workflows for API Messages

                                                                                                    Dear Zoho Cliq Team, I hope this message finds you well. We have noticed that reminders or messages posted to Zoho Cliq channels via the API do not trigger channel-based workflows. This limitation means that any bot configured with a participation handler
                                                                                                  • Webhook Trigger for New Messages in Cliq Channels

                                                                                                    Hello, I would like to request a feature to enable webhook triggers when a new message is added to a Cliq channel. This functionality would allow us to seamlessly send important information from Cliq to other relevant systems. This webhook trigger can
                                                                                                  • Ability to Edit the "Current Job Title" dropdown field

                                                                                                    Current experience/Issue: When a user (candidate) uploads resume to Zoho Recruit candidate portal, some fields are prefilled with the info from the resume/cv correctly. However, we've observed that; 1. the "Current Job Title" dropdown field is usually
                                                                                                  • I'm getting an "Invalid_scope" error, even though I used an access token generated with the correct scope.

                                                                                                    I'm getting an "Invalid_scope" error, even though I used an access token generated with the correct scope. Here’s what I did in Postman: Generated the code to create an access token using the following URL: https://accounts.zoho.eu/oauth/v2/auth?scope=ZohoCampaigns.contact.UPDATE&client_id=<client_id>&response_type=code&access_type=offline&redirect_uri=https://1882-2-26-193-161.ngrok-free.app
                                                                                                  • Problem configuring/customizing sales pipeline steps

                                                                                                    Hello, I have created several sales pipelines with different stages in them. Unfortunately I forgot to properly configure these steps (conversion probability, forecast category). How can I modify and customize all these steps? Thnak you by advance M
                                                                                                  • workflow for bounced email gets triggered, but email is status = opened

                                                                                                    Hello, I have a workflow that sends me an email if outgoing email are bounced. Now I got some kind of this emails, but the corrosponding contacts have status = open at the email. Why this bounce-workflow is triggered? Reports > Email Reports > Bounce
                                                                                                  • Power of Automation :: Automatically start / pause / stop timer on task status update.

                                                                                                    Hello Everyone, A Custom function is a user-written set of code to achieve a specific requirement. Set the required conditions needed as when to trigger using the Workflow rules (be it Tasks / Project) and associate the custom function to it. Requirement:-
                                                                                                  • Website Access Blocked (from one pc only) when attempting unattended access to any device

                                                                                                    Hello From one of my laptops I cannot access any remote device using unattended access. A Zoho Assist error page didplays 'Website Access Blocked. See attached.
                                                                                                  • Zoho Analytics to Zoho Sheets - automatic update?

                                                                                                    Hi all, If I create a zoho sheet from an Analytics Report or Analytics Data, is there a way for the zoho sheet to automatically update as the Report / Data in analytics updates?
                                                                                                  • Fixed Assets Register

                                                                                                    Thank you Zoho Books for adding fixed assets register. BUT there are certian tweeks that needs to be implemented. I found the following issues and seek improvements. 1) Fixed Asset Register Report in the Report Section has columns which are so much confusing.
                                                                                                  • Link to Desk tickets

                                                                                                    Hello, We are using Analytics to analyze data in Desk. Is there a way to embed a link to a ticket in reports? We'd love to be able to see the drill down data, and click a value in a result row that would launch the Desk Ticket in another window/tab. Thanks
                                                                                                  • Announcing new features in Trident for macOS (v.1.11.0)

                                                                                                    Hello everyone! Trident for macOS (v.1.11.0) is here with interesting features and enhancements to elevate your workplace communication and productivity. Let's take a quick look at them. Export emails. You can now export emails in the .eml file format
                                                                                                  • Zoho Sign Product updates - H2 2024

                                                                                                    Hello! We have almost come to the end of 2024! Here's a list of features and enhancements that went live in the later half of the year. NOM 151 certification Witness signing Formula, conditional, and custom fields Zoho Sign's extension for Bigin by Zoho
                                                                                                  • Next Page