zohoprojects.init().then(function(){});
zohoprojects.init().then(function () {
zohoprojects.get("portal.name").then(function (response)
});
zohoprojects.metadata().then(function(response)
{
/* output
{
"data": {
"configs": [
{
"name": "Name",
"type": "text",
"is_mandatory": true,
"is_secure": false,
"description": "Enter your name",
"value": "Helen Collins"
},
{
"name": "Employee ID",
"type": "text",
"is_mandatory": true,
"is_secure": false,
"description": "Enter your Emp. ID",
"value": "EMP08"
}
],
"payments_info": {
"edition": "trial"
},
"status": "success"
}
}
*/
});
zohoprojects.context().then(function(response)
{
/* output
{
"module_name": "tasks",
"entity_id": "27092000000031079"
}
*/
});
We do not give the entity ID for the widget location 'app_settings', 'attachment_picker', 'blueprint_during' and 'top_band' locations.
zohoprojects.get("task.id
").then(function(response)
{
/* output
{
"data": 27092000000031080,
"status": "success"
}
*/
});
zohoprojects.get("deployment_type").then(function() {
/* output
com
*/
});
zohoprojects.get("current_theme").then(function() {
/* output
{mode: "default", zpPrimary: "255, 100, 0", zpPrimaryHover: "255, 247, 243"}
*/
});
zohoprojects.get("blueprint_during").then(function(res) {
/* output
[ {field_id: "UDF_CHAR1", is_visible: true, is_pii: false, is_encrypted: false}
{field_id: "UDF_CHAR2", is_visible: true, is_pii: false, is_encrypted: false}]
*/
});
var nameObj={name:"Create a new checklist"};
zohoprojects.set("task",nameObj).then(function(response)
{
/* output
{
"data": {
"tasks": [
{
"milestone_id": "2*******************2",
"link": {
"timesheet": {
"url": "https://p*************e.********.com/restapi/portal/5******7/projects/2****************9/tasks/2****************9/logs/"
},
"self": {
"url": "https://p*************e.********.com/restapi/portal/5******7/projects/2****************9/tasks/2****************9/"
}
},
"description": "",
"duration": "0",
"last_updated_time_long": 1542193097398,
"details": {
"owners": [
{
"name": "JOHN MARSH",
"id": "5************3"
}
]
},
"id": 2************0,
"key": "WEUT-T1",
"created_person": "Steve Banks",
"created_time_long": 1525668983347,
"created_time": "05-07-2018",
"is_reminder_set": false,
"is_recurrence_set": false,
"created_time_format": "05-07-2018 10:26:23 AM",
"subtasks": false,
"work": "0:00",
"custom_fields": [
{
"column_name": "UDF_LONG1",
"label_name": "Expense Amount",
"value": "24573"
},
{
"column_name": "UDF_LONG3",
"label_name": "sample",
"value": "0"
},
{
"column_name": "UDF_LONG2",
"label_name": "test",
"value": "200"
}
],
"isparent": false,
"work_type": "work_hrs_per_day",
"completed": false,
"priority": "None",
"created_by": "5******3",
"percent_complete": "0",
"last_updated_time": "11-14-2018",
"name": "Create a new checklist",
"id_string": "2************9",
="last_updated_time_format": "11-14-2018 04:28:17 PM",
"tasklist": {
"name": "General",
"id": "2************7"
},
"order_sequence": 1,
"status": {
"name": "Open",
"id": "2************1",
"type": "open",
"color_code": ""
}
}
]
},
"status": "success"
}
*/
});
linkfiles=[{
"created_time": 1561028014712,
"id": "1LavBS5sauJ-AAFJZWp8Ch9Cp2ehydahk",
"type": "image/jpeg",
"created_by": "Patricia Boyle",
"permanent_url": "https://***************",
"size": 7409,
"preview_url": "https://******************",
"name": "sample-image.jpeg",
"download_url": "https://drive.google.com/a/web-mailhosting.com/uc?id=1LavBS5sauJ-AAFJZWp8Ch9Cp2ehydahk&export=download",
}]
zohoprojects.set('linkfiles', linkFiles).then(function (response) {
zohoprojects.invoke('attachment_picker.close');
});
var sample = [ {field_id: "UDF_CHAR1", is_visible: true, is_pii: false, is_encrypted: false}
{field_id: "UDF_CHAR2", is_visible: true, is_pii: false, is_encrypted: false}];
zohoprojects.set("blueprint_during", sample).then(function(res) {
/* output
[ {field_id: "UDF_CHAR1", is_visible: true, is_pii: false, is_encrypted: false}
{field_id: "UDF_CHAR2", is_visible: true, is_pii: false, is_encrypted: false}]
*/
});
let paramObj = {
"custom_data": {
"path": "G/pics",
"portal_id": "89031033",
"project_id": "185977000000199005"
},
"display_data" : [
{
"name": "Path",
"value": "G's Drive",
"link": "https://drive.google.com/drive/folders/1e1xWqREV"
}, {
"name": "App Name",
"value": "G- Drive"
}
]
zohoprojects.set('execute', paramObj);
var file = document.getElementById("inputbox").files[0];
var file_detail = {
type: "GET",
files: [{
uploaddoc : file
type : "binary" //If the file is uploaded as binary
}],
parameters: {
fields: "id,name, thumbnailLink, webViewLink, webContentLink"
}
};
var url = "https://www.googleapis.com/drive/v3/files/1-QabBt69U8myXYRDVU-1YiCo2k-JWRfu";
zohoprojects.request(url, file_detail, "google_drive").then(function (response)
/* Output
{
"result": {
"webContentLink": "https://drive.google.com/uc?id=1-QabBt69U8myXYRDVU-1YiCo2k-JWRfu&export=download",
"name": "Eiffel_Tower_01.jpg",
"webViewLink": "https://drive.google.com/file/d/1-QabBt69U8myXYRDVU-1YiCo2k-JWRfu/view?usp=drivesdk",
"id": "1-QabBt69U8myXYRDVU-1YiCo2k-JWRfu",
"thumbnailLink": "https://lh3.googleusercontent.com/nhyq9mHrGDOZfNdQUHRj_xVlOoNAP5PEYkW4X2svGXKjVt53MvMGfjhQ2PlTv4cmv5-PgbjrR-c=s220"
},
"status": "success"
}
*/});| Argument name | Data type | Description | ||
| URL | string | The third-party URL that has to be invoked from your extension. | ||
| object | JSONObject | Key | Data type | Value |
| type | string | "GET" / "POST" / "PUT" / "DELETE" / "PATCH" | ||
| parameters | JSONObject | The request params of the API. | ||
| headers | JSONObject | The headers of the API. | ||
| body | JSONObject |
The body of the API.
|
||
| files | JSONArray |
The parameters for uploading a file. Value: the actual file. *The body will be ignored if actual file is uploaded *If you mention the type as binary, the file will sent as binary. The body of the file will also be considered |
||
| replace_secure_config | Boolean |
If the is_secure parameter in the plugin-manifest.json file is true, set the value of this param to true. You can pass the values in the URL and object parameter in this format - {{name}} //name of the configuration
Zoho Projects will replace the configuration value |
||
| connection_link_name | string | The connection link name generated from the zapps website. You can get the connection link name from plugin-manifest. | ||
let customData = {"name":"Create a new checklist"};
zohoprojects.function.execute("c8a9e660-95e2-11ef-9d3c-2d653cc724d7", "1.0", customData).then(function(response){
/* output
{ "result":{"output":"{}","Tasks":[],"outputType":"void","message":{}},
"unique_id":"c8a9e660-95e2-11ef-9d3c-2d653cc724d7",
"code":3009,
"function_id":1234567890,
"message":"Function Executed Successfully",
"status":"Success"
}
*/
});

This section defines the theme color variables used across the application.
All colors are:
Defined using CSS variables (--zp*)
Consumed via rgb(var(--variable))
Designed to support Day Mode and Dark Mode
color: rgb(var(--zpOnData));
background-color: rgb(var(--zpSurface));
border-color: rgb(var(--zpFormElementBdr));
Day Mode: Light UI with dark text
Dark Mode: Dark UI with light text
Colour Tokens are listed below
|
|
Css Variable name |
Day Mode |
Dark Mode |
|
1 |
--zpPrimary |
255, 100, 0 |
|
|
2 |
--zpPrimaryHover |
255, 247, 243 |
40, 40, 40 !important |
|
3 |
--zpOnPrimary |
255, 255, 255 |
|
|
4 |
--zpBackground |
255, 255, 255 |
0, 0, 0 |
|
5 |
--zpOnBackground |
0, 0, 0 |
97, 97, 97 |
|
6 |
--zpSurface |
255, 255, 255 |
0, 0, 0 |
|
7 |
--zpOnSurface |
0, 0, 0 |
185, 185, 185 |
|
8 |
--zpSurfaceBdr |
230, 230, 230 |
18, 18, 18 |
|
9 |
--zpSecondary |
250, 250, 250 |
13, 13, 13 |
|
10 |
--zpOnSecondary |
70, 70, 70 |
158, 158, 158 |
|
11 |
--zpSecondaryBdr |
235, 235, 235 |
46, 46, 46 |
|
12 |
--zpData |
255, 255, 255 |
18, 18, 18 |
|
13 |
--zpOnData |
32, 33, 35 |
187, 187, 187 |
|
14 |
--zpOnDataLight |
85, 85, 85 |
102, 102, 102 |
|
15 |
--zpPopupBase |
255, 255, 255 |
30, 30, 30 |
|
16 |
--zpShadow |
0, 0, 0 |
0, 0, 0 |
|
17 |
--zpBorderGrey |
0, 0, 0 |
225, 225, 225 |
|
18 |
--zpMLTGroup |
248, 248, 248 |
25, 25, 25 |
|
19 |
--zpOnMLTHeader |
167, 169, 172 |
102, 102, 102 |
|
20 |
--zpOnMLTHeaderBdr |
242, 242, 242 |
40, 40, 40 |
|
21 |
--zpFormElement |
255, 255, 255 |
8, 8, 8 |
|
22 |
--zpFormElementBdr |
232, 238, 244 |
|
|
23 |
--zpMandatory |
255, 247, 247 |
39, 7, 7 |
|
24 |
--zpMandatoryBdr |
119, 28, 33 |
|
|
25 |
--zpFreeze |
50, 50, 50, .82 |
50, 50, 50, .82 |
|
26 |
--zpDisabled |
241, 241, 241 |
62, 62, 62 |
|
27 |
--zpOnDisabled |
142, 142, 142 |
152, 152, 152 |
|
28 |
--zpTooltip |
0, 0, 0 |
222, 222, 222 |
|
29 |
--zpOnTooltip |
242, 242, 242 |
0, 0, 0 |
|
30 |
--zpProgressGreen |
135, 211, 124 |
108, 156, 101 |
|
31 |
--zpBlackOpac |
0,0,0 |
255, 255, 255 |
|
32 |
--zpBulkUpdate |
40, 40, 40 |
|
|
33 |
--zpDropDownShadow |
-2px 0 15px rgba(0, 0, 0, .41) |
|
Colour Token Categories
Primary Colours (Used for: Buttons, Active states, Highlights )
--zpPrimary
--zpPrimaryHover
--zpOnPrimary
Surface & Background (Used for: Page background, Cards, Containers)
--zpBackground
--zpSurface
--zpSecondary
Text Colours (Used for: Labels, Input text, Secondary text)
--zpOnData
--zpOnSurface
--zpOnSecondary
--zpOnDataLight
Form Elements (Used for: Inputs, Selects, Validation states)
--zpFormElement
--zpFormElementBdr
--zpMandatory
--zpMandatoryBdr
State Colours
--zpDisabled
--zpOnDisabled
--zpMandatory
--zpProgressGreen
Overlays & Effects
--zpPopupBase
--zpShadow
--zpDropDownShadow
--zpFreeze
Consistent UI/UX across all form components
Theme-based styling using CSS variables
Support for accessibility and multiple states
Text (text)
Email (email)
Password (password)
Search (search)
Number (number)
<select> (native & custom)
<textarea>
Select2 dropdowns
Custom Checkbox (.c-checkbox)
Custom Radio (.cradio)
States & Behavior
Hover: Border color changes to light primary
Focus: Stronger border highlight, Outline applied
Usage: <input type="text" mandatory="yes">
Behavi our: Highlighted border (--zpMandatoryBdr), Light background tint
<div class="select-style">
<select>
<option>Option 1</option>
</select>
</div>
Custom dropdown arrow
Removes native browser styling
Fully responsive
<div class="c-checkbox">
<input type="checkbox" id="chk1">
<label for="chk1">Option</label>
</div>
Custom UI rendering
Supports:
Checked / Unchecked
Indeterminate
Disabled
Error state
<div class="c-checkbox">
<input type="checkbox" id="indChk">
<label for="indChk">Partially Selected</label>
</div>
<script>
document.getElementById("indChk").indeterminate = true;
</script>
<div class="cradio">
<input type="radio" id="r1" name="group">
<label for="r1">Option</label>
</div>
Custom circular UI
Smooth selection animation
Disabled state support
Disabled State Examples
<input type="text" value="Disabled Input" disabled>
<div class="select-style">
<select disabled>
<option>Disabled Select</option>
</select>
</div>
<textarea disabled>Disabled textarea</textarea>
<div class="c-checkbox">
<input type="checkbox" id="chk-disabled" disabled>
<label for="chk-disabled">Disabled Checkbox</label>
</div>
<div class="cradio">
<input type="radio" id="r-disabled" name="group" disabled>
<label for="r-disabled">Disabled Radio</label>
</div>
<div class="c-checkbox">
<input type="checkbox" id="chk2" checked disabled>
<label for="chk2">Checked & Disabled</label>
</div>
|
Class |
Purpose |
|
.formfield-style |
Wrapper for consistent field height |
|
.disabled-element |
Apply disabled styling manually |
Supports right-to-left layouts:
<body dir="rtl">
Supported classes:
.select2-container
.select2-choice
.select2-choices
<form>
<input type="text" placeholder="Name" mandatory="yes">
<div class="select-style">
<select>
<option>Select Country</option>
</select>
</div>
<textarea placeholder="Message"></textarea>
<div class="c-checkbox">
<input type="checkbox" id="agree">
<label for="agree">Agree</label>
</div>
<div class="cradio">
<input type="radio" id="r1" name="g">
<label for="r1">Option 1</label>
</div>
</form>