Here's a sample JSON descriptor file for your reference.
Now we'll see how to define the properties of this file.
The language the extension supports. Currently, we support the locale "en" (English) only.
Name of the Zoho product for which the extension is created. Here, it is "PROJECTS".
If this setting is true, storage space will be allocated in the product for this extension. By default, the value will be false.
The domains specified in this array can be called from the extension. Calls to other domains, except the ones with which a connection is established, will not be handled from the extension. If your extension doesn't use any third-party service, then this array can be declared empty.
Defines who fills the configuration section in the extension settings page.
When 'type' is "org", only an administrator can fill the configuration parameters on a first-come-first-serve basis.
Say, there are three administrators in a portal and if the first admin fills the config parameters, the other two will be able to only edit the parameters.
When 'type' is "personal", every user in the organization has to fill the configuration parameters. Unlike the org type, these parameters will be unique for every user.
Modules of the extension. We support widgets currently.
This key holds an array of objects. Every object has three keys - 'location', 'name', and 'URL'.
|location||String||Places where the extension has to be rendered in the product.|
|name||String||The name of the widget.||Example: Checklist|
|url||URL||The relative path of the file that loads the widget.||/app/index.html|
An extension can have multiple widgets.
Like widgets, this key also holds an array of objects. A connector helps to integrate an extension with a third-party service. Authorization of such third-party services is usually handled by Zoho Projects.
|connectionLinkName||String||Link name generated for the third-party service connection|
The value of the connectionLinkName param generated in the JSON tab of the connection summary.
Note: The connection name must be unique.
|connectionName||String||Name of the connection||The value of the connectionName param generated in the JSON tab of the connection summary.|
|serviceName||String||Name of the third-party service||The value of the serviceName param generated in the JSON tab of the connection summary.|
|userAccess||Boolean||This parameter decides whether the extension has to be authorized by each user individually or it has to be authorized only by the admin.|
|isUserDefinedService||Boolean||Is the connection established with a custom service?|
|Scope||JSONArray||The access privilege set for the users/admins.||Example: ["https://www.googleapis.com/auth/drive.readonly"]|
This key can be used when you have to get more inputs from the user to operate the extension. Say, you need the user's domain name of a third-party service for your extension to function. To fetch it, you can use this key to get input from the user accordingly.
|name*||String||Name of the parameter.||The name should be unique.|
|type*||String||The data type of the parameter|
|options||JSON array||Options are mandatory if select box is chosen as the type.||Example ["New feature", "Enhancement"]|
|is_secure*||Boolean||Setting this to "true" prevents the developer from accessing this configuration from the extension.|
|is_mandatory||Boolean||Is the configuration mandatory?|
|description||String||A brief description of the configuration||Note: This parameter is optional.|
"Locations" is the key that defines where the extension’s widgets should render in the product. An extension can be rendered in multiple locations. In Zoho Projects, an extension can be rendered in the following locations:
- Task details tab
- Issue details tab
- Extension settings
This location refers to the last tab in the bottom panel of a task's details page. One can reach this location in the product by clicking a task and scrolling down to its bottom panel. By scrolling to the right of the bottom panel, the extension's name will show up as the last tab in the panel. If there are multiple extensions, an ellipsis icon will be shown [...]. By clicking the ellipsis, all the extensions will be listed.
Similar to the task details tab discussed above, this location refers to the last tab in the bottom panel of an issue's details page. One can reach this location by clicking an issue and scrolling down to its bottom panel. By scrolling to the right of the bottom panel, the extension's name will show up as the last tab in the panel. If there are multiple extensions, an ellipsis icon [...] will be shown as the last tab. By clicking the ellipsis, all the extensions will be listed.
This location refers to the last tab in the extension's settings page. It can be navigated via Settings -> Integration -> Extensions -> Installed. The list of all the installed extensions will be displayed. Click the extension you want and the widget will be loaded as the last tab alongside the 'General' settings in this page. Only administrators can access this widget.