Extension pointers for integrating Zoho CRM with Zoho products #8: Upload and manage Zoho Workdrive folders and files from within Zoho CRM

Extension pointers for integrating Zoho CRM with Zoho products #8: Upload and manage Zoho Workdrive folders and files from within Zoho CRM

Keeping records on your customers and business prospects is essential for tracking data, conducting follow-ups, and running a business smoothly. When you use two separate applications, and store relevant data in each, checking and tracking data becomes more difficult.
 
Integrating applications that contain customer data is an effective solution for easily synchronizing and managing data across both applications. In this post, we'll look at how to integrate Zoho CRM with Zoho Workdrive in order to synchronize and manage Workdrive files and folders associated with a CRM contact across both applications.
 
Consider the following scenario: You've converted a lead to a contact in Zoho CRM. Now, you must associate files with that contact, such as legal documents or proofs. To do this, you can create a team folder where every team member can access and manage the contact's folders and files. 
 
In order to store contact-specific files, you can create a new folder (within the team folder) for each WorkDrive contact by clicking a button within their CRM record. You can even create a widget for uploading files to the contact's Workdrive folder from within CRM. 
 
Create a connector for Zoho Workdrive and add connector APIs
  • Create a new connector in your Zoho Workdrive extension using the Connectors feature under Utilities in the left-side panel of the Zoho Developer console. 
Note: Zoho Workdrive follows OAuth 2.0 protocols for authentication. You can learn how to register Zoho products and retrieve your client credentials here.
 
                                                
 
The connector details for the above example are as follows:

Request Token URL
https://accounts.zoho.com/oauth/v2/auth?scope=,WorkDrive.users.READ,WorkDrive.files.CREATE,
WorkDrive.teamfolders.CREATE&access_type=offline
Access Token URLhttps://accounts.zoho.com/oauth/v2/token
Refresh Token URLhttps://accounts.zoho.com/oauth/v2/token
Scopes
WorkDrive.users.READ,WorkDrive.files.CREATE,
WorkDrive.teamfolders.CREATE
                                                 
 
The Zoho Workdrive REST APIs we added for our example are as follows:
 
Connector API NameMethod typeURL
Get ZUIDGEThttps://www.zohoapis.com/workdrive/api/v1/users/me
Get all teams of a userGEThttps://www.zohoapis.com/workdrive/api/v1/users/${zuid}/teams
Create team folderPOSThttps://www.zohoapis.com/workdrive/api/v1/teamfolders
Create new folderPOSThttps://www.zohoapis.com/workdrive/api/v1/files
File uploadPOSThttps://www.zohoapis.com/workdrive/api/v1/upload?filename=${file_name}&parent_id=${file_parent_id}&override-name-exist=true
 
Note: You can refer to this post to see the detailed steps involved in creating a connector, adding the connector APIs, and associating them with the extension.
 
Create a settings widget to build team folder and assign them to Workdrive teams 
  • Create a settings widget to select a team to manage a contact's folders and files.
  • We'll also create a CRM variable called "Team Folder ID" to store the assigned team's ID information for future operations.


Settings widget.js code snippet
Util={};
var teamidvalue;
 
   //Subscribe to the EmbeddedApp onPageLoad event before initializing the widget 
   ZOHO.embeddedApp.on("PageLoad",function(data)
  {
var data =  {
    }
 
//Invoking the 'Get ZUID' API to retrieve the user's ZUID
ZOHO.CRM.CONNECTOR.invokeAPI("xxx.workdrive.getzuid",data)
.then(function(dataa){
    console.log(dataa);
    response = dataa.response
    responsejson=JSON.parse(response);
    zuiddata=responsejson.data;
    zuid=zuiddata.id;
 
    var data =  {
          "zuid" : zuid
    }
//Invoking the 'Get all teams of a user' API to fetch all the teams of a user
ZOHO.CRM.CONNECTOR.invokeAPI("xxx.workdrive.getallteamsofauser",data)
.then(function(dataa){
    console.log(dataa);
    response = dataa.response;
    responsejson=JSON.parse(response);
    teamdata=responsejson.data;
 
  for (i = 0; i < teamdata.length; i++) 
    {
 
      teamid=teamdata[i].id;
      attributes=teamdata[i].attributes;
      teamname=attributes.name;
      var teamlist = document.getElementById("teamlist");
      var option = document.createElement("OPTION");
      option.innerHTML = teamname;
      option.value = teamid;
      teamlist.appendChild(option);
    }
    })
})  
})
    Util.getvalues=function()
    {
//Retrieving the value chosen in the teamlist
      teamidvalue=document.getElementById("teamlist").value;
/*Constructing data and passing to 'Create team folder' API to create a team folder called "CRM Contacts test"*/
var data =  {
 
          "extension_team_folder_name" : "CRM Contacts test",
          "parent_id":teamidvalue
    }
ZOHO.CRM.CONNECTOR.invokeAPI("xxx.workdrive.createteamfolder",data)
.then(function(dataa){
    console.log(dataa);
    response = dataa.response;
    responsejson=JSON.parse(response);
    teamfolderdata=responsejson.data;
    teamfolderid=teamfolderdata.id;
 
//Set the ID of the team selected in the teamlist to the "Team Folder ID" CRM variable
          var variableMap = { "apiname": "xxx__Team_Folder_ID", "value": teamfolderid};
ZOHO.CRM.CONNECTOR.invokeAPI("crm.set", variableMap);
 
ZOHO.CRM.API.getOrgVariable("xxx__Team_Folder_ID").then(function(data){
  console.log(data);
});
});
    }

 
Create a button in the Contacts module to make a new Workdrive folder for a contact
  • Create a button called "Create a new workdrive Folder" using the Links & Buttons feature available in the Components section of the Zoho Developer console. Then, write a function to perform the desired action.
  • For our use case, since we're creating a new folder specific to a contact inside a WorkDrive team folder, we'll create the folder with the Full Name of the Zoho CRM contact.
  • We'll also create a custom field in the Contacts module called "Folder ID" to store the ID of the new Workdrive folder to perform future operations.
Create a new Workdrive folder: Function code snippet

//Fetching the current contact details and retrieving the Full Name and custom field folder ID of the contact
response = zoho.crm.getRecordById("Contacts",contact.get("Contacts.ID").toLong());
Fullname = response.get("Full_Name");
contactfolderid = response.get("xxx__Folder_ID");
if(contactfolderid == null)
{
/*Invoking the 'Create new folder' API to get create a folder in Workdrive for the Zoho CRM contact with the name as their Full Name*/
parentfolderid = zoho.crm.getOrgVariable("xxx__Team_Folder_ID");
dynamic_map = Map();
dynamic_map.put("name",Fullname);
dynamic_map.put("folder_parent_id",parentfolderid);
 
newfolderresp = zoho.crm.invokeConnector("xxx.workdrive.createnewfolder",dynamic_map);
newfolderresponse = newfolderresp.get("response");
newfolderdata = newfolderresponse.get("data");
newfolderid = newfolderdata.get("id");
contactinfo = {"xxx__Folder_ID":newfolderid};
/* Updating the 'Folder ID' custom field in contact's record with the new folder ID obtained from the response*/
folderresponse=zoho.crm.updateRecord("Contacts",contact.get("Contacts.ID").toLong(),contactinfo);
 
return "A new workdrive folder has been created with the ID - " + newfolderid;
}
else
{
return "Folder already present for contact in Workdrive";
}
  • The above code snippet fetches the record details for the current contact to retrieve the customer's Full Name. 
  • The Workdrive parent folder ID (set using the settings widget), where the new folder for the contact will be created, is then retrieved using the getOrgVariable deluge task . 
  • The parent folder ID and the contact's Full Name are delivered to the Create new workdrive folder API to create a new folder for the contact in Workdrive.
  • The ID of the new folder is then updated in the "Folder ID" custom field using updateRecord task. 
Create a button in the Contacts module to upload files to a contact's Workdrive folder and associate it with a widget
  • Create a button called "Upload file to Workdrive" using the Links & Buttons feature available in the Components section of the Zoho Developer console, then associate a widget to perform the desired action.
Upload file to workdrive - widget.html - Please find the attachment for the widget html code.
  • The code snippet fetches the record details of the current contact, from which the custom field 'Folder ID' value is retrieved. 
  • The input file selected is also checked for its file type and name.
  • The Folder ID and the file name are then constructed and passed as parameters to invoke the 'Upload File to Workdrive' API.
Sample output
  • After installing the extension, authorize the Zoho Workdrive connector.
  • Go to Settings on the extension configuration page.
  • Choose a team to manage the contact's folders and files. Click Save.
                                    
  • A new team folder, CRM Contacts test, is created in Zoho Workdrive for the chosen team.                                    
  • Go to the Contacts module. Click on the Create a new workdrive folder button on the record's view page.                                     
  • A new folder is created in workdrive with the name of your contact.                          
  • Once the folder is created, the custom field, Folder ID is also automatically updated with the new folder ID value.                         
  • Now, click on the Upload file to Workdrive button on the record's view page.                    
 
  • The widget appears. Choose a file and click the Upload file to Workdrive button. The file will be uploaded to Workdrive.
                                     
Using this method, you can integrate Zoho CRM with Zoho Workdrive through an extension to perform necessaryfunctionalities for your business. We hope you find this information helpful! 
 
In our next post, we will show you how to track, view, and access these Workdrive files within Zoho CRM. Keep following this space for more advice!


SEE ALSO


    • Recent Topics

    • Show ordered quantity on packing slips and invoices

      Hello Is there any way possible to show the original ordered quantity of an item (as recorded in the sales order) on subsequent package slips and sales invoices, so that these documents can show the customer the ordered qty vs the qty being currently
    • Search Zoho Inventory Items module via API

      How can I search Zoho Inventory Items by custom fields, categories, etc using the API? This is not documented. Is there an advanced search function like CRM's COQL search available via the Zoho API? If there is an undocumented way to search Items via
    • How can I get my images to display correctly on mobile site?

      I have just created a site and uploaded images, which look perfect on the desktop version. However when I view the site on my mobile device some of the images are not displaying correctly. They are all blurry. Anyone else experience this?
    • Does Creator support HTMX?

      I love the Zoho ecosystem and Zoho Creator does a lot of things really well. However, I'm needing more real-time interactivity in my forms. Is the only option to create a JS widget? How about HTMX?
    • My fix for "This report is not accessible" in published pages

      Hi Community, after having the same issue as many others here and going through the community's posts, i found a solution on my own. Again, the quality of support from Zoho is pretty awful: if you cannot help yourself, you're lost. I really like Zoho,
    • Tip of the Week #59– Enhance team collaboration with multichannel shared inboxes!

      Struggling with scattered customer conversations and missed follow-ups across your team? When messages are everywhere, it's easy for them to fall through the cracks—leading to delays, duplicate replies, and miscommunication among team members. Zoho TeamInbox
    • Subforms in stateless forms

      I think the title says it all. We need to be able to add subforms to stateless forms. Currently the only workaround is to create a Form and delete each record upon submission of the form. I need to build an interface to update our inventory. Basically
    • Delete standard e-mailtemplate

      Hello, Is it possible to delete or hide a standard e-mailtemplate? I would only like to show my own created e-mailtemplates to my staff. I only find a 'delete' option at my custom made e-mailtemplates, but the standard e-mailtemplates do not show this
    • Add values to Countdown Mode

      Is it possible to add values to the countdown mode drop down? The longest is 2 days. I would like values for 5 days, 10 days, 15 days...
    • RSS feed from a Zoho site blog?

      Does the Zoho Site blog have an RSS feed associated with it? I would like to have this picked up on a business Facebook page. thanks
    • Refresh token not appearing

      Hello, I was wondering if there is another way of obtaining a refresh token, as following the usual 60-second-code procedure generates a new access token, but not the refresh token, and so i have to repeat everything to get a new token every hour or so,
    • How would I collect a signature in person on Zoho sign?

      Suppose I have a customer show up at my office and we close a deal. I have an iPad ready to go, and I need to have the customer sign the document right there. How would I do it?
    • What's New in Zoho Analytics - June 2025

      Hello Users, We're delighted to bring you new features and enhancements designed to make your analytics experience smarter and more powerful than ever. AutoML Enhancements We’re thrilled to introduce powerful new AutoML enhancements, making machine learning
    • CRM Client scripts via extension?

      I've made a lot of industry specific customization to zoho CRM, using custom modules, workflows/automations, deluge scripts, api calls, and client scripting. I have had organic interest explaining what i've done to other small business owners in my industry.
    • How to import data via Excel for a multi-select lookup field?

      In the Accounts module, I have a multi-select lookup field to the Contacts module. When I import Accounts data via Excel, I want to enter the contact email address (which is used as the identifier) under the column name for the multi-select lookup field.
    • Need better way to tie Undeposited Funds to Invoice Payments to make it easy to reconcile Undeposited Funds account

      Hello, Request to have Zoho create tighter integration between Undeposited Funds and Invoice Payments.  Currently reconciling the undeposited funds account is a fairly tedious process for us.  Since the deposits and payments are just thrown into a "bucket"
    • Customized folder permissions in web Zoho WorkDrive won't apply to Sync

      Hi, within the 'Deals' macro-folder I created a folder for each Sales person (att. 1). Within each Sales person's folder a subfolder is automatically generated via function every time a new deal record is created in Zoho CRM, i.e. 1 deal record = 1 deal
    • What happens after trial period

      Dear Support, We are planning to use ZOHO CRM for our organization. We are now registered for a 15 days trial version. I would like to know what happens with our account and our data after these 15 days. Will it automatically change into a 'free' account
    • Forte's Extra Costs

      Hello everyone in the Zoho community, I wanted to share some information about Forte in case anyone wanted to look into them as a processor.  I currently use Stripe, but wanted to use Forte's ACH to pay vendors and take ACH payments for our products.  This is one of the only ACH processors that Zoho accepts. They state their cost is $25/month plus their transaction fees for ACH.  However, after signing up and going through their approval process, I found this out they work with a PCI compliance service
    • SEPA stripe vs gocardless

      Hi, we want to use Zoho Books - but as we are a company that is based in Germany we are using SEPA mandates. I know that its possible to use GoCardless - but the fees are extremly high (15 EUR fee for a 5000 EUR transaction). Is there any other way to
    • Zoho Commerce - Zoho Shop (Multilanguage)

      hi there we have a shop in zoho commerce, can I change the language in the shop, i mean, can I create a German and a French version, as an instance or something? If yes, how it works? thanks for your answers greetings prisca
    • French Tutorials

      Is there any Zoho projects tutorials, ebook, video or else in french? If so, where can I fin it please? Thx
    • My zoho mail has been disabled and cannot send email

      I’m the super admin for my company’s email accounts, but my own email address has been unexpectedly locked. I’m seeing the following error message: Could you please assist in unlocking my account so I can resume sending emails?
    • SMTP error

      I am using SMTP from Zoho the account is accounts@khlaklaeeb.com it was working fine then started to have Error and unable to delivery messages SMTP host SMTP.zoho,com SMTP user: accounts@khlaklaeeb.com SMTP port 465 PAssword: App Password it was working
    • Zoho Books Roadshows are back in the UAE!

      Hello there, Business owners and accounting professionals of the UAE, we’re coming to your cities! FTA accredited Zoho Books is now officially one of the Digital Tax Integrators in the UAE. With the newly launched direct VAT filing capabilities, we're
    • Automatically creating a ticket in Zoho Desk when an invoice is created in Zoho Books

      I need to find a way to create a ticket automatically (i.e. using workflow) in Zoho Desk whenever an invoice is created in Zoho Books. Please advise if there is a way of doing that?
    • Been getting this error, every now and then "Get count limit exceeded, please try again after 3 mins"

      it is really annoying.
    • Co-existing with Google Workspace

      We currently use GWS and due to legacy practices, we cannot migrate away from it. Not easily anyway. The issue we have is that while we have Zoho Mail, we get duplicate copies of emails. Our setup is that GWS is our primary. We have Zoho MX records in
    • Stop Zoho Projects From Automatically Adding Client Users

      I have a custom function that creates a Zoho Project for every Quote attached to a Deal when it moves to Closed Won. Everything works fine, except for the fact that connecting a Zoho Project to the CRM automatically takes the Contact associated with the
    • dd Linked Note to Comments & History via Custom Function + Zoho Document View Feature

      Hi all, I have a couple of custom functions running in Zoho (specifically in Inventory/Books), and I'm trying to streamline it. Here’s the scenario: When a Purchase Receive is processed, my custom function automatically creates a Package. I'd like to
    • How to break line in zohoCRM

      Hello everyone, I'm currently working with Deluge scripting language and encountering an issue with newline characters (\n). My goal is to format a string with multiple lines, but the newline characters are not being interpreted correctly. Instead of
    • Marketer’s Space: Supercharged Workflow with Zoho CRM Integration

      Hello Marketers! Welcome back to another post in Marketer’s Space. Today, we’ll explore how integrating Zoho CRM with Zoho Campaigns can help you create smarter, more personalized Workflow. In this post, we’ll look at a specific use case to demonstrate
    • Zoho Live chat doesnt chat on CRM Contact page????

      We have used Salesforce Live Agent for the last 8 years and the chat comes in on the Contact record which is logical and intuitive as the chat agent can see the customers sales history and open opportunities...etc... We just migrated to Zoho CRM and I
    • Image Quality Issue on Zoho Assist

      Hello, For the past two days, I've been experiencing a significant image quality issue on Zoho Assist when connecting to one of my computers. I’ve tried reinstalling the application, but the issue persists across multiple devices. The internet connection
    • New views to manage activities within a record

      Dear customers, We hope you're well! Today, we're here with a useful update to the Activities related list. As you might be aware, parent records display related information from other modules as related lists. This helps you get a 360-degree view of
    • Sent Mail not in "Sent" IMAP folder

      I have configured ZOHO to use IMAP. When I send an email from within Zoho, the email does not show up in my "Sent" IMAP folder. Every email client I have ever used, stores sent mails in the "Sent" folder. This is a serious flaw!  Please fix this ASAP! Oliver
    • Add additional field to quick search results

      IN the advanced search, we can add any field to the columns. In the regular search results (before you press enter, there is no option to modify the results. It would be super useful to include a custom field where it currently displays the pipleine
    • Admin Control for Subscribing Users to Bots in Zoho Cliq

      Hello, I would like to request an enhancement to Zoho Cliq, specifically related to subscribing users to bots. Current Issue: When using the Zoho Desk integration with Cliq, notifications such as Mentions, Happiness Ratings, and Pending Blueprint Transitions
    • Eighth Insight - Oversee module relationships with Lookups

      The Wheels of Ticketing - Desk Stories Oversee module relationships with Lookups ‌Learning about lookups A lookup field provides a powerful way to display and utilize data from another module directly within a field of your current module. This functionality
    • New capabilities for custom buttons: Elevate UX and CX with just a click!

      -------------------------------------------------Post moderated on 24th May-------------------------------------------------------------- Dear all, The feature is now available for all users in all DCs. Dear Customers, We hope you're well! We're happy
    • Next Page