Extension Pointers for Integrating Zoho CRM with Zoho services #2: Handle and manage your Zoho CRM cases efficiently by integrating Zoho Projects and associating cases with tasks

Extension Pointers for Integrating Zoho CRM with Zoho services #2: Handle and manage your Zoho CRM cases efficiently by integrating Zoho Projects and associating cases with tasks

Integrating customer relationship management and project management contributes to the development of an overall effective business management strategy. 

You can integrate Zoho CRM and Zoho Projects through extensions to achieve your desired functionalities and manage your business from a single location. The previous post in the 'Integrating Zoho CRM with Zoho services' series described how to register your Zoho application and retrieve the client credential in order to connect Zoho CRM to the Zoho service of your choice through an extension. In this post, we'll look at how to integrate Zoho CRM with Zoho Projects, along with an example.

Let's consider a scenario in which support representatives handling cases in Zoho CRM need to forward cases that are registered as feature requests to the development team for further consideration and analysis. The representatives can create a task in Zoho projects with the necessary details from the Zoho CRM Cases module by clicking a button from within Zoho CRM. This will make the transition process easier and help to handle cases more efficiently. Now, let's see how this can be achieved using extension.

Creating a connector for Zoho Projects and adding connector APIs
  • Create a new connector in your extension for Zoho Projects using the Connectors feature under Utilities in the left panel of the Zoho Developer console. 
Note: Zoho Projects follows OAuth2.0 protocol for authentication mechanism. You can refer to this post to understand the steps to register Zoho Projects and retrieve your client credentials.


The connector details for our example are:

Request Token URL
https://accounts.zoho.com/oauth/v2/auth?scope=ZohoProjects.portals.READ,ZohoProjects.users.READ,ZohoProjects.tasks.CREATE,ZohoProjects.projects.READ,ZohoProjects.tasks.READ&access_type=offline
Access Token URL
https://accounts.zoho.com/oauth/v2/token?
Refresh Token URL
https://accounts.zoho.com/oauth/v2/token?
Scopes
ZohoProjects.portals.READ,ZohoProjects.users.READ,ZohoProjects.tasks.CREATE,ZohoProjects.projects.READ,ZohoProjects.tasks.READ


The Zoho Projects REST APIs added for our example are mentioned below.

Connector API Name
Method type
URL
Get Portals
GET
https://projectsapi.zoho.com/restapi/portals/
Get Project Users
GET
https://projectsapi.zoho.com/restapi/portal/${portalid}/projects/${projectid}/users/
Create task
POST
https://projectsapi.zoho.com/restapi/portal/${portalid}/projects/${projectid}/tasks/?name=${name}&description=${description}&priority=${priority}&person_responsible=${person_responsible}
Add comment for task
POST
https://projectsapi.zoho.com/restapi/portal/${portalid}/projects/${projectid}/tasks/${taskid}/comments/?content=${content}

Note: You can refer to this post to understand the detailed steps involved in creating a connector, adding the connector APIs, and associating it with the extension.

Creating a button in Cases module and associating the custom function to it
  • Create a button called "Create Task for Case" using the Links & Buttons feature available in the Componentssection of the Zoho Developer console, then associate a custom function to perform the desired action. 
Create Task for Case - Button function code

//Fetching the current record details and retrieving the necessary field information
response = zoho.crm.getRecordById("Cases",case.get("Cases.ID").toLong());
Name = response.get("Subject");
Name = zoho.encryption.urlEncode(Name);
Description = response.get("Description");
Description = zoho.encryption.urlEncode(Description);
Priority = response.get("Priority");
Comments = response.get("Internal_Comments");
Comments = zoho.encryption.urlEncode(Comments);
dynamic_map = Map();
/*Fetching the values for Portal ID and Project ID CRM variables which are obtained as part of the settings widget*/
portalid = zoho.crm.getOrgVariable("xxx__Portal_Id");//The api name of the CRM variable for Portal_Id
projectid = zoho.crm.getOrgVariable("xxx__Project_Id");//The api name of the CRM variable for Project_Id
dynamic_map.put("portalid",portalid);
dynamic_map.put("projectid",projectid);
//Invoking the connector API to retrieve the users present in the project 
resp1 = zoho.crm.invokeConnector("xxx.zohoprojects.getprojectusers",dynamic_map);
response1 = resp1.get("response");
users = response1.get("users");
rolelist = List();
/*retrieving the ID of the user with admin role in the project to be assigned as the person responsible for the task*/
for each value in users
{
if(value.get("role") == "admin")
{
id = value.get("zpuid");
}
}
dynamic_map = Map();
portalid = zoho.crm.getOrgVariable("xxx__Portal_Id");
projectid = zoho.crm.getOrgVariable("xxx__Project_Id");
dynamic_map.put("portalid",portalid);
dynamic_map.put("projectid",projectid);
dynamic_map.put("name",Name);
dynamic_map.put("description",Description);
dynamic_map.put("priority",Priority);
dynamic_map.put("person_responsible",id);
/*Invoking the connector API with the necessary parameters passed to create a project task */
resp = zoho.crm.invokeConnector("xxx.zohoprojects.createtask",dynamic_map);
response2 = resp.get("response");
tasks = response2.get("tasks");
//Retrieving the task id from the response of create task API
for each ids in tasks
{
id1 = ids.get("id");
}
dynamic_map = Map();
portalid = zoho.crm.getOrgVariable("xxx__Portal_Id");
projectid = zoho.crm.getOrgVariable("xxx__Project_Id");
dynamic_map.put("portalid",portalid);
dynamic_map.put("projectid",projectid);
dynamic_map.put("taskid",id1);
dynamic_map.put("content",Comments);
//Invoking the connector API to add a comment to the task 
response3= zoho.crm.invokeConnector("xxx.zohoprojects.addcommentfortask",dynamic_map);
caseinfo = {"Solution":url};
response4 = zoho.crm.updateRecord("Cases",case.get("Cases.ID").toLong(),caseinfo);
return resp;

Note: In our example, the project's administrator is assigned as the person responsible for the task that is to be created in Zoho Projects. We have considered that there is only one admin for a project, who can then assign the task to the appropriate developer.

Obtaining Portal ID and Project ID

According to our example, cases from Zoho CRM need to be associated as a task to a particular project in Zoho Projects. You can find in the above code that the variables Portal ID and Project ID (dynamic variables used in connector APIs) are used while invoking APIs. The values of these variables are specific to a user and thus these values can be obtained from the user during extension installation and stored in CRM variables to be easily retrieved when required.

The variables Portal ID and Project ID are created as CRM variables with the Variable Status as Hidden in the extension.Their values are obtained as follows:



Creating a Settings Widget: We have created a settings widget in our extension in order to retrieve the user-specific portal ID and project ID, and to set the values to the CRM variables.

Settings Widget js code snippet

Util={};
var portalidvalue;
var projectidvalue;
//Subscribe to the EmbeddedApp onPageLoad event before initializing the widget 
ZOHO.embeddedApp.on("PageLoad",function(data)
{
var data = {
}
//Invoking the connector API to get portals of the user and populate them in a select list
ZOHO.CRM.CONNECTOR.invokeAPI("testextensioncrm.zohoprojects.getportals",data)
.then(function(dataa){
response = dataa.response;
responsejson=JSON.parse(response);
portal=responsejson.portals;

for (i = 0; i < portal.length; i++) 
{
portalid=portal[i].id_string;
portalname=portal[i].name;
var portallist = document.getElementById("portallist");
var option = document.createElement("OPTION");
option.innerHTML = portalname;
option.value = portalid;
portallist.appendChild(option);
}
})

/*Fetching the projects associated to the portal selected on click of the "Get Projects" button*/
Util.getproject=function()
{
portalidvalue=document.getElementById("portallist").value;

var data = {

"portalid" : portalidvalue
}
/*Invoking the connector API to get projects of the user with respect to the portal chosen and populate them in a select list*/
ZOHO.CRM.CONNECTOR.invokeAPI("testextensioncrm.zohoprojects.getprojects",data)
.then(function(dataa){
response = dataa.response;
responsejson=JSON.parse(response);
project=responsejson.projects;
$('#projectlist').empty();
for (j = 0; j < project.length; j++) 
{
projectid=project[j].id_string;
projectname=project[j].name;
var projectlist = document.getElementById("projectlist");
var option = document.createElement("OPTION");
option.innerHTML = projectname;
option.value = projectid;
projectlist.appendChild(option);
}
})
}
/*Updating the values of the portal ID and project ID selected in the select list to the CRM variables*/
Util.getvalues=function()
{
portalidvalue=document.getElementById("portallist").value;
projectidvalue=document.getElementById("projectlist").value;
var variableMap = { "apiname": "testextensioncrm__Portal_Id", "value": portalidvalue};
ZOHO.CRM.CONNECTOR.invokeAPI("crm.set", variableMap);
var variableMap = { "apiname": "testextensioncrm__Project_Id", "value": projectidvalue};
ZOHO.CRM.CONNECTOR.invokeAPI("crm.set", variableMap);
});
});
}
})

Now that the functionality is defined, the extension is published and installed in Zoho CRM account using the private installation URL.


Sample output:

Upon installation of the extension, click the Settings button to go the Settings Widget page, then choose your portal and project where you want the task to be created.



Choose the portal of your choice, then click the Get Projects button to fetch the projects associated with that portal.



Next, click Update Values to set the chosen portal and project ID values to the CRM variables Portal_ID and Project_ID,respectively.



Go to the Cases module. A case of type feature request is present in Cases module.



Click the Create Task for Case button available in the view page of the case detail page.



The necessary details as per the code logic are fetched and created as a task in projects.



The detailed task details page with all the information fetched from the case in Zoho CRM Cases module.



Using this method, you can integrate Zoho CRM and Zoho Projects via an extension and perform functionalities as per your business requirements. We hope you find this information useful. Keep following this space for more inputs!


SEE ALSO



    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