Extension pointers for integrating Zoho CRM with Zoho products #6: Handle and track your Zoho Bugtracker issues easily from within Zoho CRM

Extension pointers for integrating Zoho CRM with Zoho products #6: Handle and track your Zoho Bugtracker issues easily from within Zoho CRM

Switching between multiple applications to keep track of data is a time-consuming and laborious process. Having visibility into all related data in one application makes work easier and more efficient, and helps mitigate errors.

Zoho Projects and Zoho Bugtracker are integrated in multiple ways. Syncing data between Zoho CRM and Zoho Projects or Zoho Bugtracker enables you to track all project-related data—including issues—across both applications. In a previous post, we showed how to integrate the Cases module in Zoho CRM with Zoho Projects. You can find the full post here.

In this post, we'll look at how to access and manage Zoho Bugtracker issue-related data within Zoho CRM. Let's say you manage your company's sales process and handle your software application deliverables using Zoho CRM, and that one of your leads has been converted to a deal and has therefore successfully moved to the Qualification stage.

Assume that whenever a deal is qualified in Zoho CRM, a new project with the same name is created in Zoho Bugtracker, and the newly created Bugtracker project's ID is updated in a custom field on the deal's details page in Zoho CRM. This helps users keep track of and have full control over the continuous process of implementing deal requirements.

Note: In order to proceed with the use case described below, the project creation scenario detailed above must be implemented with the necessary scopes of Bugtracker. You can view a similar example implemented for Zoho Projects here for reference.

Following implementation—during testing—there may be one or more issues that need to be resolved, which will be recorded as issues in Zoho Bugtracker. In our example, let's retrieve all the bugs associated with the project and add them as a related list in our specific Zoho CRM deal so that all relevant data is available in a single window.

Creating a connector for Zoho Bugtracker and adding connector APIs
  • Create a new connector in your extension for Zoho Bugtracker using the Connectors feature under Utilities in the left panel of the Zoho Developer console. 
Note: Zoho Bugtracker follows OAuth 2.0 protocols for authentication. You can see how to register Zoho products and retrieve your client credentials here.

                                                

The connector details for our example are as follows:

Request Token URL
https://accounts.zoho.com/oauth/v2/auth?scope=ZohoBugTracker.portals.READ,ZohoBugTracker.projects.READ,ZohoBugTracker.bugs.READ,ZohoBugTracker.bugs.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
ZohoBugTracker.portals.READ,ZohoBugTracker.projects.READ,ZohoBugTracker.bugs.READ,ZohoBugTracker.bugs.READ



The Zoho Bugtracker REST APIs we added for our example are as follows:

Connector API Name
Method type
URL
Get Portals
GET
https://bugtracker.zoho.com/restapi/portals/
Get Projects
GET
https://bugtracker.zoho.com/restapi/portal/${portalid}/projects/
Get Bugs
GET
https://bugtracker.zoho.com/restapi/portal/${portalid}/projects/${projectid}/bugs/

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.

Obtaining the portal ID
  • Per our example, the new projects will be created in Zoho Bugtracker under a specific portal. Because the portal ID variable's value is user-specific, it can be obtained from the user during extension installation and saved in a CRM variable to be easily retrieved when needed.
  • The variable Portal ID is therefore created as a CRM variable with the Variable Status set as Hidden in the extension. Here's how the value is obtained:



➤ Creating a settings widget: We have created a settings widget in our extension in order to retrieve the user-specific portal ID, and to set the value of the CRM variable.

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 the user's portal IDs and populate them in a select list
ZOHO.CRM.CONNECTOR.invokeAPI("xxx.bugtracker.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);
}
})

//*Updating the value of the portal ID selected in the select list to the CRM variable
Util.getvalues=function()
{
portalidvalue=document.getElementById("portallist").value;
var variableMap = { "apiname": "xxx__Portal_ID", "value": portalidvalue};
ZOHO.CRM.CONNECTOR.invokeAPI("crm.set", variableMap);

}
})

Creating a related list in the Deals module and associating a custom related list to it
  • Create a related list called Bugs using the Add Related List button under Related Details, available in the Components section of the Zoho Developer console. Then write a function to perform the desired action.
Bugs related list code

//Retrieving the deal record and fetching the deal name
response = zoho.crm.getRecordById("Deals",deal.get("Deals.ID").toLong());
dealprojectid = response.get("xxx__Project_ID");
info dealprojectid;
dynamic_map = Map();
portalid = zoho.crm.getOrgVariable("xxx__Portal_ID");
dynamic_map.put("portalid",portalid);
//Invoking the Get Project API to fetch the project ID
response1 = zoho.crm.invokeConnector("xxx.bugtracker.getprojects",dynamic_map);
projectresponse = response1.get("response");
projectdata = projectresponse.get("projects");
finalresponse = "";
for each item in projectdata
{
projectid = item.get("id");
info projectid;
if(dealprojectid == projectid)
{
dynamic_map = Map();
portalid = zoho.crm.getOrgVariable("xxx__Portal_ID");
dynamic_map.put("portalid",portalid);
dynamic_map.put("projectid",projectid);
// Invoking the Get Bugs API to fetch the bug-related data 
response2 = zoho.crm.invokeConnector("xxx.bugtracker.getbugs",dynamic_map);
bugresponse = response2.get("response");
bugdata = bugresponse.get("bugs");
info bugdata;
count = 1;
if(bugdata != null)
{
recordsXmlStr = "<record>";
for each value in bugdata
{
status = value.get("status");
recordsXmlStr = recordsXmlStr + "<row no='" + count + "'>";
recordsXmlStr = recordsXmlStr + "<FL val='Title'>" + value.get("title") + "</FL>";
recordsXmlStr = recordsXmlStr + "<FL val='Assignee Name'>" + value.get("assignee_name") + "</FL>";
recordsXmlStr = recordsXmlStr + "<FL val='Reported Person'>" + value.get("reported_person") + "</FL>";
recordsXmlStr = recordsXmlStr + "<FL val='Reported Email'>" + value.get("reporter_email") + "</FL>";
recordsXmlStr = recordsXmlStr + "<FL val='Status Type'>" + status.get("type") + "</FL>";
recordsXmlStr = recordsXmlStr + "</row>";
count = count + 1;
}
recordsXmlStr = recordsXmlStr + "</record>";
finalresponse = finalresponse + recordsXmlStr;
}
else
{
finalresponse = finalresponse + "<error>=><message>No bugs associated with this project.</message></error>";
}
}
}
return finalresponse;

  • The ID of the new project created in Zoho Bugtracker is fetched and added to the custom field "Project ID" inside the Deals module for that particular deal according to the premise of this example. 
  • As a result, the project ID in the custom field is compared to the project retrieved from the "Get Projects" API.
  • Based on the result of the comparison, the bugs are retrieved and displayed in the related list, or the appropriate error message is displayed. 
  • Now that the functionality is defined, the extension is published and installed in Zoho CRM account using the private installation URL.


Sample output
  • After installing the extension, authorize the Zoho Bugtracker connector and click the Settings button to navigate to the Settings Widget page, where you can select the portal where project and bug details are available. 
  • Select the portal of your choice, then click the Set Portal ID button to assign the portal ID to the appropriate CRM variable.
                                                      
  • Once the portal ID is set, go to the Deals module. Click on the Bugs related list. The relevant details of the bugs that were fetched through the code are displayed in the form of a related list.


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

SEE ALSO





    Zoho Marketing Automation

              Zoho Pagesense Resources

                Zoho SalesIQ Resources



                      Zoho TeamInbox Resources

                        Zoho DataPrep Resources



                          Zoho CRM Plus Resources

                            Zoho Books Resources


                              Zoho Subscriptions Resources

                                Zoho Desk Resources

                                  Zoho Projects Resources


                                    Zoho Sprints Resources


                                      Qntrl Resources


                                        Zoho Creator Resources


                                          Zoho WorkDrive Resources




                                              Zoho Campaigns Resources

                                                Zoho CRM Resources

                                                        Design. Discuss. Deliver.

                                                        Create visually engaging stories with Zoho Show.

                                                        Get Started Now