Custom Function for Milestone Auto-Complete

Custom Function for Milestone Auto-Complete

A custom function is a piece of software code that can help automate a process. Users can write their own Custom Functions using deluge and call them from a workflow. Let us take a look at how custom functions can help organizations manage their workflow.

Custom Functions can be used by organizations that want to automatically mark their milestones as complete once all of the tasks within the milestone have been completed. First we need to establish a connection, define a workflow rule and then associate a custom function to that workflow rule.

Create a new connection
  1. Navigate to the Setup icon and select Marketplace.
  2. Click Connections under Marketplace and then Create Connection.
  3. Click Default Services under Pick your service.
  4. Select Zoho Projects.
  5. Enter ZP MS Autocomplete as the Connection name and select the scopes ZohoProjects.milestones.UPDATE, ZohoProjects.bugs.READ, ZohoProjects.tasks.READ, and Zoho Projects.milestones.ALL

  6. Click the Create and Connect button.

  7. You will be prompted to connect to the newly established connection
  8. Click the Proceed button.

  9. The connection will be created once the accept button is clicked.

Note : Remember that 'Use Credentials of Login User' has to be switched off.

Workflow rule for automatically completing a milestone
  1. Click in the top navigation bar.
  2. Navigate to Task Automation and click Workflow Rules.
  3. Click New Workflow Rule.
  4. Enter the workflow name, description, and select the required layout.
  5. Under Execute on, choose 'Update' then Choose 'Field Specific and Select 'Status' from drop down menu.
  6. Click Next.

Create and associate the custom function to the workflow

Next, we will create a custom function and associate it with the workflow rule.
  1. Click on Add Action and then select Associate Custom Function.
  2. Click Create Custom Function in the Associate Custom Function page.

  3. In the Create Custom Function page type in the function name as Milestone Auto Complete.
  4. Add Arguments for project id, portal id, and milestone id as shown in the image below.

  5. Use this as the Sample Code and click Save.
  6. Associate the created Custom Function.

Click Save Rule.


  1. Sample Code: 
    1. // Construct parameter to filter the open tasks
      taskParam = Map();
      taskParam.put("status","notcompleted");
      taskParam.put("milestone_id",milestoneId);
      // Invoke get tasks API
      //Add your connection name as last parameter
      taskResponse = zoho.projects.getRecords(portalId,projectId,"tasks",taskParam,1,"zpmsautocomplete");
      info taskResponse;
      // Variable declaration and assign value , Endpoint of the API
      // This Varibale used to decide the milestone completion
      isMilestoneUpdate = false;
      // If task response is empty it will check any open bugs are available
      if(taskResponse.isEmpty())
      {
      // construct parameter for filter only open bugs
      milestoneList = list();
      milestoneList.add(milestoneId);
      bugParam = Map();
      bugParam.put("statustype","open");
      bugParam.put("milestone",milestoneList);
      info "bugParam:" + bugParam;
      //Add your connection name as last parameter
      bugResponse = zoho.projects.getRecords(portalId,projectId,"bugs",bugParam,1,"zpmsautocomplete");
      info bugResponse;
      if(bugResponse.isEmpty())
      {
      isMilestoneUpdate = true;
      }
      }
      info "TaskResponse Is Empty :" + taskResponse.isEmpty() + ", isMilestoneUpdate:" + isMilestoneUpdate;
      info "---------------------";
      if(!milestoneId.isNull() && isMilestoneUpdate)
      {
      //Modify the status of the milestone.(1 - notcompleted, 2 - completed)
      milestoneParam = Map();
      milestoneParam.put("status",2);
      info milestoneParam;
      info "---------------------";
      // Enter The Connection option Example : connection:"your_conection_name"
      updateMilestoneResponse = invokeurl
      [
      url :projectsAPIEndPoint + "/portal/" + portalId + "/projects/" + projectId + "/milestones/" + milestoneId + "/status/"
      type :POST
      parameters:milestoneParam
      connection:"zpmsautocomplete"
      ];
      info updateMilestoneResponse;
      info "-------------------------------------";
      } 
      return "success";
We hope you found this post to be helpful.
If you have any questions, please leave them in the comments section below or email us at support@zohoprojects.com.





      • Sticky Posts

      • Introducing the Zoho Projects Learning Space

        Every product has its learning curve, and sometimes having a guided path makes the learning experience smoother. With that goal, we introduce a dedicated learning space for Zoho Projects, a platform where you can explore lessons, learn at your own pace,
      • Update on V2 API End-of-Life Timeline

        Dear Users, Earlier this year, we shared the launch of the V3 APIs and requested users to migrate from the older V2 APIs by December 2025. We have received valuable feedback from our users and partners regarding their migration timelines. We are happy
      • Automation Series: Auto-update Phase Status

        Hello Folks! You can auto-update your phase's status based on status of underlying tasks using custom functions. In this series, we will showcase how to create and run custom functions, using Deluge, with ease. Follow the steps below and automate your
      • Automate Timesheet Approvals with Multi-level Approval Rules

        Introducing Approval Rules for Timesheets in Zoho Projects. With this automation, teams can manage how timesheets are reviewed and approved by setting up rules with criteria and assigning approvers to handle submissions. Timesheet, when associated to
      • Accessibility Spotlight Series - 1

        Every user interacts with products differently, what feels intuitive to one may be challenging for another. Addressing this, accessibility is built into Zoho Project's design philosophy. This helps users navigate and perform actions with ease irrespective

        • Recent Topics

        • Tracking Emails sent through Outlook

          All of our sales team have their Outlook 365 accounts setup with IMAP integration. We're trying to track their email activity that occurs outside the CRM. I can see the email exchanges between the sales people and the clients in the contact module. But
        • Fetch ALL items from Inventory and send to Google Sheet using Flow

          The title says it all -- I want to fetch the Item name, SKU, Purchase rate, and Sales rate for ALL items in Zoho Inventory and have them populate a tab in an existing Google Sheet. I have already successfully made this work for one item, so the flow is
        • Why Document Integrity Matters at Every Stage of the Contract Lifecycle

          Contracts are legal records that must stay authentic and traceable from creation to expiry or termination. In Zoho Contracts, several design decisions focus on protecting the integrity of every document. These measures ensure that no important details
        • affichage pièces jointes impossible

          Bonjour, aujourd'hui je n'arrive pas à afficher ni à télécharger les pièces jointes dans ZOHO CRM. J'utilise Chrome, j'ai vidé les caches et les cookies. Mais cela ne change rien. Merci de votre aide
        • Reminder to renew subscription.

          Whenever I try to add to one of my notes a " renew your subscription" window pops out and won't Close disallowing me to edit. Why should I renew my subscription on an application with at best such bugs and at worse such underhanded ways to force ren
        • Fields not coming through, not pulling data

          Forgive the noviceness of my vocabulary. I am in Zoho flow connecting CRM and Projects. When an opportunity hits a certain stage, it will create the project in Projects, and bring in data from the opportunity. Everything is working, except for two fields
        • Smartsheet Integration

          Has any in the community been able to integrate Zoho Desk with Smartsheets using Zoho Flow? I am trying to get the Smartsheet Row ID based on ticket data and cannot find documentation on the Get Row function for Smartsheet. It is asking for a Query String
        • CRM Campaign - how to mass remove contacts?

          Does anyone have a solution for removing all contacts from a CRM campaign. Seems that one by one is the only option. 
        • Send out follow-up email in the same thread (threaded conversations in individual emails) from Zoho CRM

          Hi, I'm new to Zoho. I'm trying to send individual emails to my leads one by one. And I'll send out follow up email if I don't hear back from them later. However, instead of sending a new email, I want to reply in the same email thread so that the recipients
        • Cadence Support in Zoho Vertical Studio

          We would like to know whether it is possible to create and configure Cadences in Zoho Vertical Studio, similar to the Cadence feature available in Zoho CRM. Please confirm if Vertical Studio supports creating cadences for modules and users, and whether
        • Removing "Products" as mandatory field from Sales Order creation page

          Hello, friends According to our workflow, we should: 1) create Sales Order (Stage "New") 2) call and discuss the Products with a customer (Stage "Communication") 3) add the Products to the Sales Order during the call However, "Products" is mandatory to
        • Zoho Books says "The customer "Hakimuddin P A Ali" already exists. Please specify a different name.""

          One of my transaction is not getting posted from Stripe to Zoho books. I already checked in Zoho books that there is no customer already present in Zoho books with the same name (as the error mentions) I already raised this complaint on Zoho flow portal,
        • Is it possible to automate a file to be directly uploaded to a specific subfolder in Zoho Workdrive?

          I am establishing a workflow so that when a new task is marked "complete", the document submitted in the task (under the "Documents" tab) is automatically uploaded to a specific subfolder in the associated WorkDrive for the project. However, the dilemma
        • Steuerberater der Zoho benutzt in Deutschland

          I write in English because the issue is related to German regulations. Wir sind ein Unternehmen, welches aktuell keine Pflicht zur doppelten Buchführung hat. Aktuell bucht unser Steuerberater jeden Beleg, auch unsere Auslagen. Wir würden dies gerne selbst
        • Why are some folders not showing up as an action trigger in Zoho Flow?

          I am currently working on a flow that automates the process of creating a folder in WorkDrive once a Task List is created. When I am selecting a destination for the folder, some projects are not showing up. I intend to create a folder within a specific
        • Getting Date from PostgreSQL error

          I am pulling data from PostgreSQL table into a CRM record via FLOW but the field is coming out empty. Need some suggestions: Field Type in CRM: Date/Time Field value in PostgreSQL: 2024-12-05 21:06:32.479 Field value in FLOW "Fetch Row": created : "2024-12-05T21:06:32.479382000",
        • Zoho Flow to SendOwl API error

          SendOwl is listed in the apps list of Zoho Flow. When trying to connect through the API with valid key and secret, the error given is: SendOwl says "HTTP Basic: Access denied" It seems Zoho doesn't connect via HTTPS. I've already tried using webhooks,
        • decisions based on content of a ticket

          Hi, I need to create a flow that sends automated email based on the content of a ticket in zoho desk. I have certain tickets that are formatted in a particular way, and contain certain keywords. How can I filter (based on decisions) the tickets based
        • Newline Character "\n" parsing problem in webhooks

          Hi there, I am facing an issue in Zoho Flow (maybe a general issue or maybe only in Zoho Flow): I have this function: void sendListWebhook(string url, list array) { for each arrayElement in array { result = invokeurl [ url :url type :POST parameters:arrayElement.toString()
        • 3 year sick leave cycle

          How do you set up a sick leave cycle for South Africa? In SA the sick works like this for the first 6 months you get 0.83 paid sick days a month, then after 6 months you sick leave balance is reset to 30 days that can be used over a 36 month cycle.  This
        • One Company, multi branches, multi warehouses and I need to manage this in one organization

          Dears,  I'm a new user to zoho solutions,  however I found a lot of persons giving a nice feedback about it also a lot of good reviews. I though why we try to move to it in our company. I'm not sure if Zoho could give me all what I need or not that's why I'm going to post in this topic most of the things I know about managing our business to let you ,as zoho experts, tell me if Zoho will meet my business requirements or not. First of all we are a flowers and landscaping company we have like 6 to
        • Migration Evernote

          Bonjour Apres plus d'une dizaine d'année passer avec evernote j'ai décidé de franchir le pas . J'ai débuté par migrer mes notes vers zoho et depuis la migration est bloquée. Impossible d'avoir un retour du support malgré plusieurs mails et tentative d'appel
        • Pushing GCLID info from Gravity Forms to ZohoCRM

          We are switching to Gravity Forms from Zoho Forms and I cannot find any good info on how to make sure my GCLID tracking info is pushed through to the CRM through my new forms. There was an article in the documentation about placing something within the
        • Zoho OAuth Connector Deprecation and Its Impact on Zoho Desk

          Hello everyone, Zoho believes in continuously refining its integrations to uphold the highest standards of security, reliability, and compliance. As part of this ongoing improvement, the Zoho OAuth default connector will be deprecated for all Zoho services
        • On Zoho Flow, Record deleted trigger from Zoho Creator

          On creating flow in Zoho Flow, when we select app Zoho created, it provides 3 trigger options - Record created, Record updated and Record created or updated We need trigger on "Record Delete" as well, We have a use case to fire our system api if record
        • Zoho Flow Switch On Not Working

          I have created a flow which is when the mailbox address received the email that meet the condition will auto fetch the contact, account and finally create the ticket by using Zoho Desk. When I do a test and debug on my flow it work well as what I expect
        • MS Teams Flow Integration Question

          Where can I find the chat ID for the "Post message to chat" target?
        • Zoho Flow - Access denied to recover recording from call module - OpenAI

          Hi, I am trying to build a Flow to recover recoding when a new call is saved in my CRM. I have integrated my CRM with ringcentral and the recordings are saved in the event. Trigger: When new module entry Step 2: Fetch module entry (Zoho CRM says "permission
        • Unable to send price in big commerce from zoho flow.

          I am creating a flow from zoho flow to create a product in zoho inventory and sending this to big commerce. But the problem is like when ever i send the price its getting error. it require decimal format value if i am sending ${trigger.sales_rate} the
        • Not sending mail to new lead in zoho flow

          I have created a flow in zoho flow and triggered an action to send email notification when the new lead is created but even after user entering the mail id the email is not going to them
        • Access query string from incoming webhook URL in Zoho Flow

          I have a fairly straightforward use case, but cannot find anything conclusive on this subject. How can I simply access the query string of the incoming webhook request in Zoho Flow? I am attaching the Deal ID to the end of the request like: https://flow.zoho.com/762439902/flow/webhook/incoming?zapikey=1001.0dec2d7dd15080c464a13925275f0129.448c23ee219c545c89f5a178456cfc8b&isdebug=false&dealID=${Deals.Deal
        • Unable to access my Zoho forms account

          For some days now, I haven't had access to my Zoho Forms account. I keep getting an error that says, "You are an inactive user in your organization" via the mobile app and "You don't have permission to access this organization" via the web. I was removed
        • Custom Fonts in Zoho CRM Template Builder

          Hi, I am currently creating a new template for our quotes using the Zoho CRM template builder. However, I noticed that there is no option to add custom fonts to the template builder. It would greatly enhance the flexibility and branding capabilities if
        • Identify Unused Deluge Functions in Zoho CRM

          Hello Zoho Support Team, I would like to request a feature that helps administrators identify unused or rarely used Deluge functions in Zoho CRM. Currently, Deluge functions are distributed across different areas, and there is no centralized overview
        • User Automation: User based workflow rules & webhooks

          User management is an undeniable part of project management and requires adequate monitoring. As teams grow and projects multiply, manual coordination for updating users & permissions becomes difficult and can give way to errors. User automation in Zoho
        • Update on V2 API End-of-Life Timeline

          Dear Users, Earlier this year, we shared the launch of the V3 APIs and requested users to migrate from the older V2 APIs by December 2025. We have received valuable feedback from our users and partners regarding their migration timelines. We are happy
        • Run a workflow after record merge

          Hello, We are wondering if there is a way to trigger a workflow after two records are merged? We have a sms service that use to text back and forth with Prospects and Contacts. To make it easy for our users, we automatically create them in this other
        • Zoho Books' 2025 Wrapped

          Before we turn the page to a new year, it’s time to revisit the updates that made financial management simpler and more intuitive. This annual roundup brings together the most impactful features and enhancements we delivered in 2025, offering a clear
        • Live webinar | The Evolution of Zoho Show: 2025 Feature Recap

          2025 has been a year of exciting updates and features for Zoho Show. From advanced design and formatting tools to smarter presentation delivery, enhanced collaboration, and AI-powered features—along with the launch of our desktop apps, Show has continued
        • Batch Tracking custom function

          Hi fellow zoho users, We have our ecommerce site setup to shopify. I have some products I want to add batch tracking too, my only issue is that it breaks our shopify workflow (create sales order, invoice, payment, package) because it requires us to manually
        • Next Page