Who can use this feature?
- Global admins or users with advanced permissions
- Available on all plans
Once you have a virtual collection connection established continue where you left off to complete the remaining settings.
1. Enter a title
The name of the widget that you are creating.
2. Define the connection (source)
The connector you want to use for the widget data.
3. Define the API query endpoint
Define the query API endpoint, which is where the data comes from.
- You can include any Totango account attributes as parameters for the query. Use curly braces to specify parameters (i.e.,
{parameter}
). - The account identifier must be included in the API query endpoint output; it allows Totango to correctly associate the relevant information in the account profile.
- You can use any query API that returns a JSON format and includes an array of objects. These objects will become rows in the collection.
- The virtual collection supports direct API query, API query with filters, and even full query language API query. Examples:
-
Salesforce opportunities virtual collection API query (full query language API query):
https://na1.salesforce.com/services/data/v20.0/query?q=select+AccountId,Amount,CloseDate,Name,StageName +from+Opportunity+Where+AccountId='{sf_id}'
-
SAP C4S ticket information API query (API query with filters):
https://remotequery.hana.ondemand.com/api/v1/c4s/query?query=[your_C4S_query_name]&systemTier=PROD&filter=ERP_ID eq '{Account Id}'&orderBy=Priority
-
Zendesk ticket list API query (direct API query):
https://[your_sub_domain].zendesk.com/api/v2/organizations/{Support System Account id}/tickets.json
See examples below for common endpoints and more examples.
-
4. Define the list mapping
Define the path in the JSON response that contains the main array of objects. This list will turn to the rows in the collection (the individual items), so make sure to map the main objects you want to display.
The mapping is done by typing the list place in the JSON hierarchy while dot sign (“.”) represents a level in the hierarchy. For example in the below JSON response, the list mapping is Componentdata.tickets
:
5. Define the column mapping
Map the JSON keys to virtual collection columns. You can define any JSON key to appear as a column in your virtual collection.
The mapping includes the column title, JSON key mapping, and the value format. The value format will determine how it looks in the virtual collection.
In the following example, notice we have chosen to capture only the id, issuer and created_at keys, and removed the rest of the keys in the mappings:
These JSON elements are supported as virtual collection columns: String, number, date, string array, array of numbers, array of dates, booleans, null. You cannot map a JSON object as a column.
6. Add virtual collection summaries (optional)
Virtual collection summaries are aggregations of the widget information. These summaries can be generated by a numeric column aggregation or by selecting a pre-calculated account attributes (this attribute should be pre-defined in Totango). You can select up to 3 summaries.
Only numeric columns and attributes are presented in the drop-down.
7. Add an external link (optional)
When the external link is defined, a user can click on a collection widget row to open a link to the origin system. For example, it can open the support ticket details in your support application once a user clicks on a support ticket collection row.
You can define an external link by mapping one of the existing keys in the JSON
or define a custom URL. The custom URL can include any JSON response key in curly braces ie: {json_key_name}
.
Examples:
- Zendesk ticket details:
https://<your_company_domain>.zendesk.com/agent/tickets/{id}
- Salesforce opportunities:
https://<your_company_domain>.lightning.force.com/lightning/r/Opportunity/{id}/view
8. Enable the widget
After saving and previewing the widget, enable the widget on the account profile for the related account type (Ellipses > Settings).
Common endpoints
Salesforce examples
To retrieve data from Salesforce, we are using the data/v20.0/query REST API. Salesforce opportunities virtual collection API query (full query language API query): https://na1.salesforce.com/services/data/v20.0/query?q=select+AccountId,Amount,CloseDate,Name,StageName
+from+Opportunity+Where+AccountId='{sf_id}'
- API query endpoint production Salesforce (if using custom Domain replace na1 with your info):
https://na1.salesforce.com/services/data/v20.0/query?q=select+AccountId,Amount,CloseDate,Name,StageName+from+Opportunity+Where+AccountId='{sf_id}'
- API query endpoint sandbox Salesforce (if using custom Domain replace na1 with your info):
https://test.salesforce.com/services/data/v20.0/query?q=select+AccountI
- List mapping (main object): records
Zendesk examples
Zendesk ticket list API query (direct API query): https://[your_sub_domain].zendesk.com/api/v2/organizations/{Support System Account id}/tickets.json
- API query endpoint to retrieve the open tickets, based on the Organization id:
https://[your_sub_domain].zendesk.com/api/v2/search.json?query=type:ticket status:new status:open status:pending organization_id:{Support System Account id}&sort_by=status&sort_order=desc
- List mapping (main object): results
SAP example
SAP C4S ticket information API query (API query with filters): https://remotequery.hana.ondemand.com/api/v1/c4s/query?query=[your_C4S_query_name]&systemTier=PROD&filter=ERP_ID
eq '{Account Id}'&orderBy=Priority
Jira cloud examples
- Set the API Query Endpoint to https://api.atlassian.com/oauth/token/accessible-resources.
- Click View JSON Response.
- Copy the Cloud ID from the JSON response.
- Use the cloud ID and set the API Query to https://api.atlassian.com/ex/jira/<CLOUD_ID>/rest/api/2/search?jql=<JBL SEARCH>
- Replace the
<CLOUD_ID>
with your Cloud ID. - Replace the
<JBL SEARCH>
with the search query (learn more).
- Replace the
For example, the following API return all the tickets based on Jira field 'organizations' mapped to Totango attribute 'Jira Org' (which will hold the name of the organization in Jira):
https://api.atlassian.com/ex/jira/a195d1c4-912e-4b01-88f0-d57b5f919e58/rest/api/2/search?jql=organizations = "{Jira Org}" order by created DESC
Expand result
{
"expand": "schema,names",
"startAt": 0,
"maxResults": 50,
"total": 8,
"issues": [
{
"expand": "operations,versionedRepresentations,editmeta,changelog,renderedFields",
"id": "10007",
"self": "https://api.atlassian.com/ex/jira/a195d1c4-912e-4b01-88f0-d57b5f919e58/rest/api/2/issue/10007",
"key": "DEMO-8",
"fields": {
"statuscategorychangedate": "2020-07-15T14:20:45.325+0300",
"issuetype": {
"self": "https://api.atlassian.com/ex/jira/a195d1c4-912e-4b01-88f0-d57b5f919e58/rest/api/2/issuetype/10004",
"id": "10004",
"description": "An IT problem or question.",
"iconUrl": "https://api.atlassian.com/ex/jira/a195d1c4-912e-4b01-88f0-d57b5f919e58/secure/viewavatar?size=medium&avatarId=10554&avatarType=issuetype",
"name": "IT Help",
"subtask": false,
"avatarId": 10554
},
"timespent": null,
"project": {
"self": "https://api.atlassian.com/ex/jira/a195d1c4-912e-4b01-88f0-d57b5f919e58/rest/api/2/project/10001",
"id": "10001",
"key": "DEMO",
"name": "Demo desk",
"projectTypeKey": "service_desk",
"simplified": false,
"avatarUrls": {
"48x48": "https://api.atlassian.com/ex/jira/a195d1c4-912e-4b01-88f0-d57b5f919e58/secure/projectavatar?pid=10001&avatarId=10420",
"24x24": "https://api.atlassian.com/ex/jira/a195d1c4-912e-4b01-88f0-d57b5f919e58/secure/projectavatar?size=small&s=small&pid=10001&avatarId=10420",
"16x16": "https://api.atlassian.com/ex/jira/a195d1c4-912e-4b01-88f0-d57b5f919e58/secure/projectavatar?size=xsmall&s=xsmall&pid=10001&avatarId=10420",
"32x32": "https://api.atlassian.com/ex/jira/a195d1c4-912e-4b01-88f0-d57b5f919e58/secure/projectavatar?size=medium&s=medium&pid=10001&avatarId=10420"
}
},
"customfield_10031": {
"id": "3",
"name": "Time to resolution",
"_links": {
"self": "https://totangodev2a.atlassian.net/rest/servicedeskapi/request/10007/sla/3"
},
"completedCycles": [],
"ongoingCycle": {
"startTime": {
"iso8601": "2020-07-15T14:20:45+0300",
"jira": "2020-07-15T14:20:45.043+0300",
"friendly": "15/Jul/20 2:20 PM",
"epochMillis": 1594812045043
},
"breachTime": {
"iso8601": "2020-07-17T14:20:45+0300",
"jira": "2020-07-17T14:20:45.043+0300",
"friendly": "17/Jul/20 2:20 PM",
"epochMillis": 1594984845043
},
"breached": true,
"paused": false,
"withinCalendarHours": true,
"goalDuration": {
"millis": 57600000,
"friendly": "16h"
},
"elapsedTime": {
"millis": 2292888096,
"friendly": "636h 54m"
},
"remainingTime": {
"millis": -2235288096,
"friendly": "-620h 54m"
}
}
},
"customfield_10032": {
"id": "4",
"name": "Time to first response",
"_links": {
"self": "https://totangodev2a.atlassian.net/rest/servicedeskapi/request/10007/sla/4"
},
"completedCycles": [],
"ongoingCycle": {
"startTime": {
"iso8601": "2020-07-15T14:20:45+0300",
"jira": "2020-07-15T14:20:45.043+0300",
"friendly": "15/Jul/20 2:20 PM",
"epochMillis": 1594812045043
},
"breachTime": {
"iso8601": "2020-07-16T14:20:45+0300",
"jira": "2020-07-16T14:20:45.043+0300",
"friendly": "16/Jul/20 2:20 PM",
"epochMillis": 1594898445043
},
"breached": true,
"paused": false,
"withinCalendarHours": true,
"goalDuration": {
"millis": 28800000,
"friendly": "8h"
},
"elapsedTime": {
"millis": 2292888123,
"friendly": "636h 54m"
},
"remainingTime": {
"millis": -2264088123,
"friendly": "-628h 54m"
}
}
},
"customfield_10033": null,
"fixVersions": [],
"aggregatetimespent": null,
"resolution": null,
"customfield_10035": {
"languageCode": "en",
"displayName": "English"
},
"customfield_10027": null,
"customfield_10028": null,
"customfield_10029": null,
"resolutiondate": null,
"workratio": -1,
"lastViewed": "2020-11-03T22:13:12.173+0200",
"watches": {
"self": "https://api.atlassian.com/ex/jira/a195d1c4-912e-4b01-88f0-d57b5f919e58/rest/api/2/issue/DEMO-8/watchers",
"watchCount": 0,
"isWatching": false
},
"created": "2020-07-15T14:20:45.043+0300",
"customfield_10020": null,
"customfield_10021": null,
"customfield_10022": null,
"priority": {
"self": "https://api.atlassian.com/ex/jira/a195d1c4-912e-4b01-88f0-d57b5f919e58/rest/api/2/priority/3",
"iconUrl": "https://api.atlassian.com/ex/jira/a195d1c4-912e-4b01-88f0-d57b5f919e58/images/icons/priorities/medium.svg",
"name": "Medium",
"id": "3"
},
"customfield_10023": null,
"customfield_10024": null,
"customfield_10025": null,
"customfield_10026": [],
"labels": [
"demo-desk"
],
"customfield_10016": null,
"customfield_10017": null,
"customfield_10018": {
"hasEpicLinkFieldDependency": false,
"showField": false,
"nonEditableReason": {
"reason": "PLUGIN_LICENSE_ERROR",
"message": "The Parent Link is only available to Jira Premium users."
}
},
"customfield_10019": "0|i0001j:",
"timeestimate": null,
"aggregatetimeoriginalestimate": null,
"versions": [],
"issuelinks": [],
"assignee": null,
"updated": "2020-11-03T21:52:35.175+0200",
"status": {
"self": "https://api.atlassian.com/ex/jira/a195d1c4-912e-4b01-88f0-d57b5f919e58/rest/api/2/status/10001",
"description": "This was auto-generated by Jira Service Desk during workflow import",
"iconUrl": "https://api.atlassian.com/ex/jira/a195d1c4-912e-4b01-88f0-d57b5f919e58/images/icons/status_generic.gif",
"name": "Waiting for support",
"id": "10001",
"statusCategory": {
"self": "https://api.atlassian.com/ex/jira/a195d1c4-912e-4b01-88f0-d57b5f919e58/rest/api/2/statuscategory/4",
"id": 4,
"key": "indeterminate",
"colorName": "yellow",
"name": "In Progress"
}
},
"components": [],
"timeoriginalestimate": null,
"description": "Stay on top of your team's performance by seeing the metrics you care about in *Reports*. Track performance over time to spot problems early and celebrate wins when they happen.\nh3. Try it out\nVisit *Reports* to get started (you may need to click *Back to project* to get out of your queues menu).\n\nTry our existing reports, including:\n * Created vs resolved\n * Team workload\n * Satisfaction (CSAT)\n\n..or build a *custom report* to track the metrics you care about.",
"customfield_10010": {
"_links": {
"jiraRest": "https://totangodev2a.atlassian.net/rest/api/2/issue/10007",
"web": "https://totangodev2a.atlassian.net/servicedesk/customer/portal/2/DEMO-8",
"self": "https://totangodev2a.atlassian.net/rest/servicedeskapi/request/10007",
"agent": "https://totangodev2a.atlassian.net/browse/DEMO-8"
},
"requestType": {
"_expands": [
"field"
],
"id": "9",
"_links": {
"self": "https://totangodev2a.atlassian.net/rest/servicedeskapi/servicedesk/2/requesttype/9"
},
"name": "IT help",
"description": "Get general tech support, like help with the Wi-Fi or printing.",
"helpText": "",
"issueTypeId": "10004",
"serviceDeskId": "2",
"groupIds": [
"2"
],
"icon": {
"id": "10491",
"_links": {
"iconUrls": {
"48x48": "https://totangodev2a.atlassian.net/secure/viewavatar?avatarType=SD_REQTYPE&avatarId=10491&size=large",
"24x24": "https://totangodev2a.atlassian.net/secure/viewavatar?avatarType=SD_REQTYPE&avatarId=10491&size=small",
"16x16": "https://totangodev2a.atlassian.net/secure/viewavatar?avatarType=SD_REQTYPE&avatarId=10491&size=xsmall",
"32x32": "https://totangodev2a.atlassian.net/secure/viewavatar?avatarType=SD_REQTYPE&avatarId=10491&size=medium"
}
}
}
},
"currentStatus": {
"status": "Waiting for support",
"statusCategory": "INDETERMINATE",
"statusDate": {
"iso8601": "2020-07-15T14:20:45+0300",
"jira": "2020-07-15T14:20:45.043+0300",
"friendly": "15/Jul/20 2:20 PM",
"epochMillis": 1594812045043
}
}
},
"customfield_10014": null,
"customfield_10015": null,
"customfield_10005": null,
"customfield_10006": null,
"customfield_10007": null,
"security": null,
"customfield_10008": null,
"aggregatetimeestimate": null,
"customfield_10009": null,
"summary": "Demo 8 description",
"creator": {
"self": "https://api.atlassian.com/ex/jira/a195d1c4-912e-4b01-88f0-d57b5f919e58/rest/api/2/user?accountId=5f0ee3415ee2c3002378e34f",
"accountId": "5f0ee3415ee2c3002378e34f",
"emailAddress": "sh.golan@gmail.com",
"avatarUrls": {
"48x48": "https://secure.gravatar.com/avatar/f8b9b3ebb87fafc145e3365c329a7e0e?d=https%3A%2F%2Favatar-management--avatars.us-west-2.prod.public.atl-paas.net%2Finitials%2FSG-3.png",
"24x24": "https://secure.gravatar.com/avatar/f8b9b3ebb87fafc145e3365c329a7e0e?d=https%3A%2F%2Favatar-management--avatars.us-west-2.prod.public.atl-paas.net%2Finitials%2FSG-3.png",
"16x16": "https://secure.gravatar.com/avatar/f8b9b3ebb87fafc145e3365c329a7e0e?d=https%3A%2F%2Favatar-management--avatars.us-west-2.prod.public.atl-paas.net%2Finitials%2FSG-3.png",
"32x32": "https://secure.gravatar.com/avatar/f8b9b3ebb87fafc145e3365c329a7e0e?d=https%3A%2F%2Favatar-management--avatars.us-west-2.prod.public.atl-paas.net%2Finitials%2FSG-3.png"
},
"displayName": "Shmulik Golan",
"active": true,
"timeZone": "Asia/Jerusalem",
"accountType": "atlassian"
},
"subtasks": [],
"reporter": {
"self": "https://api.atlassian.com/ex/jira/a195d1c4-912e-4b01-88f0-d57b5f919e58/rest/api/2/user?accountId=qm%3Ac0adbfae-3004-49bb-8c30-e60fa2c9e656%3Ac06063eb-e6da-4a71-ac40-47dd8fd049c4",
"accountId": "qm:c0adbfae-3004-49bb-8c30-e60fa2c9e656:c06063eb-e6da-4a71-ac40-47dd8fd049c4",
"emailAddress": "example@atlassian-demo.invalid",
"avatarUrls": {
"48x48": "https://avatar-management--avatars.us-west-2.prod.public.atl-paas.net/default-avatar.png",
"24x24": "https://avatar-management--avatars.us-west-2.prod.public.atl-paas.net/default-avatar.png",
"16x16": "https://avatar-management--avatars.us-west-2.prod.public.atl-paas.net/default-avatar.png",
"32x32": "https://avatar-management--avatars.us-west-2.prod.public.atl-paas.net/default-avatar.png"
},
"displayName": "Example Customer",
"active": true,
"timeZone": "Asia/Jerusalem",
"accountType": "customer"
},
"customfield_10000": "{}",
"aggregateprogress": {
"progress": 0,
"total": 0
},
"customfield_10001": null,
"customfield_10002": [],
"customfield_10003": null,
"customfield_10004": null,
"customfield_10038": "org 1",
"environment": null,
"duedate": null,
"progress": {
"progress": 0,
"total": 0
},
"votes": {
"self": "https://api.atlassian.com/ex/jira/a195d1c4-912e-4b01-88f0-d57b5f919e58/rest/api/2/issue/DEMO-8/votes",
"votes": 0,
"hasVoted": false
}
}
},
{
"expand": "operations,versionedRepresentations,editmeta,changelog,renderedFields",
"id": "10006",
"self": "https://api.atlassian.com/ex/jira/a195d1c4-912e-4b01-88f0-d57b5f919e58/rest/api/2/issue/10006",
"key": "DEMO-7",
"fields": {
"statuscategorychangedate": "2020-07-15T14:13:06.525+0300",
"issuetype": {
"self": "https://api.atlassian.com/ex/jira/a195d1c4-912e-4b01-88f0-d57b5f919e58/rest/api/2/issuetype/10004",
"id": "10004",
"description": "An IT problem or question.",
"iconUrl": "https://api.atlassian.com/ex/jira/a195d1c4-912e-4b01-88f0-d57b5f919e58/secure/viewavatar?size=medium&avatarId=10554&avatarType=issuetype",
"name": "IT Help",
"subtask": false,
"avatarId": 10554
},
"timespent": null,
"customfield_10031": {
"id": "3",
"name": "Time to resolution",
"_links": {
"self": "https://totangodev2a.atlassian.net/rest/servicedeskapi/request/10006/sla/3"
},
"completedCycles": [],
"ongoingCycle": {
"startTime": {
"iso8601": "2020-07-15T14:13:06+0300",
"jira": "2020-07-15T14:13:06.263+0300",
"friendly": "15/Jul/20 2:13 PM",
"epochMillis": 1594811586263
},
"breachTime": {
"iso8601": "2020-07-16T10:13:06+0300",
"jira": "2020-07-16T10:13:06.263+0300",
"friendly": "16/Jul/20 10:13 AM",
"epochMillis": 1594883586263
},
"breached": true,
"paused": false,
"withinCalendarHours": true,
"goalDuration": {
"millis": 14400000,
"friendly": "4h"
},
"elapsedTime": {
"millis": 2293346881,
"friendly": "637h 2m"
},
"remainingTime": {
"millis": -2278946881,
"friendly": "-633h 2m"
}
}
},
"project": {
"self": "https://api.atlassian.com/ex/jira/a195d1c4-912e-4b01-88f0-d57b5f919e58/rest/api/2/project/10001",
"id": "10001",
"key": "DEMO",
"name": "Demo desk",
"projectTypeKey": "service_desk",
"simplified": false,
"avatarUrls": {
"48x48": "https://api.atlassian.com/ex/jira/a195d1c4-912e-4b01-88f0-d57b5f919e58/secure/projectavatar?pid=10001&avatarId=10420",
"24x24": "https://api.atlassian.com/ex/jira/a195d1c4-912e-4b01-88f0-d57b5f919e58/secure/projectavatar?size=small&s=small&pid=10001&avatarId=10420",
"16x16": "https://api.atlassian.com/ex/jira/a195d1c4-912e-4b01-88f0-d57b5f919e58/secure/projectavatar?size=xsmall&s=xsmall&pid=10001&avatarId=10420",
"32x32": "https://api.atlassian.com/ex/jira/a195d1c4-912e-4b01-88f0-d57b5f919e58/secure/projectavatar?size=medium&s=medium&pid=10001&avatarId=10420"
}
},
"customfield_10032": {
"id": "4",
"name": "Time to first response",
"_links": {
"self": "https://totangodev2a.atlassian.net/rest/servicedeskapi/request/10006/sla/4"
},
"completedCycles": [],
"ongoingCycle": {
"startTime": {
"iso8601": "2020-07-15T14:13:06+0300",
"jira": "2020-07-15T14:13:06.263+0300",
"friendly": "15/Jul/20 2:13 PM",
"epochMillis": 1594811586263
},
"breachTime": {
"iso8601": "2020-07-15T16:13:06+0300",
"jira": "2020-07-15T16:13:06.263+0300",
"friendly": "15/Jul/20 4:13 PM",
"epochMillis": 1594818786263
},
"breached": true,
"paused": false,
"withinCalendarHours": true,
"goalDuration": {
"millis": 7200000,
"friendly": "2h"
},
"elapsedTime": {
"millis": 2293346908,
"friendly": "637h 2m"
},
"remainingTime": {
"millis": -2286146908,
"friendly": "-635h 2m"
}
}
},
"fixVersions": [],
"customfield_10033": null,
"aggregatetimespent": null,
"customfield_10035": {
"languageCode": "en",
"displayName": "English"
},
"resolution": null,
"customfield_10027": null,
"customfield_10028": null,
"customfield_10029": null,
"resolutiondate": null,
"workratio": -1,
"watches": {
"self": "https://api.atlassian.com/ex/jira/a195d1c4-912e-4b01-88f0-d57b5f919e58/rest/api/2/issue/DEMO-7/watchers",
"watchCount": 0,
"isWatching": false
},
"lastViewed": "2020-11-03T22:12:59.297+0200",
"created": "2020-07-15T14:13:06.263+0300",
"customfield_10020": null,
"customfield_10021": null,
"customfield_10022": null,
"customfield_10023": null,
"priority": {
"self": "https://api.atlassian.com/ex/jira/a195d1c4-912e-4b01-88f0-d57b5f919e58/rest/api/2/priority/1",
"iconUrl": "https://api.atlassian.com/ex/jira/a195d1c4-912e-4b01-88f0-d57b5f919e58/images/icons/priorities/highest.svg",
"name": "Highest",
"id": "1"
},
"customfield_10024": null,
"customfield_10025": null,
"labels": [
"demo-desk"
],
"customfield_10026": [],
"customfield_10016": null,
"customfield_10017": null,
"customfield_10018": {
"hasEpicLinkFieldDependency": false,
"showField": false,
"nonEditableReason": {
"reason": "PLUGIN_LICENSE_ERROR",
"message": "The Parent Link is only available to Jira Premium users."
}
},
"customfield_10019": "0|i0001b:",
"aggregatetimeoriginalestimate": null,
"timeestimate": null,
"versions": [],
"issuelinks": [],
"assignee": null,
"updated": "2020-11-03T22:13:06.279+0200",
"status": {
"self": "https://api.atlassian.com/ex/jira/a195d1c4-912e-4b01-88f0-d57b5f919e58/rest/api/2/status/10001",
"description": "This was auto-generated by Jira Service Desk during workflow import",
"iconUrl": "https://api.atlassian.com/ex/jira/a195d1c4-912e-4b01-88f0-d57b5f919e58/images/icons/status_generic.gif",
"name": "Waiting for support",
"id": "10001",
"statusCategory": {
"self": "https://api.atlassian.com/ex/jira/a195d1c4-912e-4b01-88f0-d57b5f919e58/rest/api/2/statuscategory/4",
"id": 4,
"key": "indeterminate",
"colorName": "yellow",
"name": "In Progress"
}
},
"components": [],
"timeoriginalestimate": null,
"description": "Track the priority of requests to spot problems quickly and set tighter *Service Level Agreement (SLA)* goals. Customers can set their own priority when raising a request, or you can hide it from customers and let your team decide.\nh3. Try it out\nAssign yourself and add a comment to stop the *Time to First Response* SLA from counting down. Resolve the request to stop all SLAs completely.",
"customfield_10010": {
"_links": {
"jiraRest": "https://totangodev2a.atlassian.net/rest/api/2/issue/10006",
"web": "https://totangodev2a.atlassian.net/servicedesk/customer/portal/2/DEMO-7",
"self": "https://totangodev2a.atlassian.net/rest/servicedeskapi/request/10006",
"agent": "https://totangodev2a.atlassian.net/browse/DEMO-7"
},
"requestType": {
"_expands": [
"field"
],
"id": "10",
"_links": {
"self": "https://totangodev2a.atlassian.net/rest/servicedeskapi/servicedesk/2/requesttype/10"
},
"name": "Computer support",
"description": "If you have problems with your laptop, let us know here.",
"helpText": "",
"issueTypeId": "10004",
"serviceDeskId": "2",
"groupIds": [
"2"
],
"icon": {
"id": "10467",
"_links": {
"iconUrls": {
"48x48": "https://totangodev2a.atlassian.net/secure/viewavatar?avatarType=SD_REQTYPE&avatarId=10467&size=large",
"24x24": "https://totangodev2a.atlassian.net/secure/viewavatar?avatarType=SD_REQTYPE&avatarId=10467&size=small",
"16x16": "https://totangodev2a.atlassian.net/secure/viewavatar?avatarType=SD_REQTYPE&avatarId=10467&size=xsmall",
"32x32": "https://totangodev2a.atlassian.net/secure/viewavatar?avatarType=SD_REQTYPE&avatarId=10467&size=medium"
}
}
}
},
"currentStatus": {
"status": "Waiting for support",
"statusCategory": "INDETERMINATE",
"statusDate": {
"iso8601": "2020-07-15T14:13:06+0300",
"jira": "2020-07-15T14:13:06.263+0300",
"friendly": "15/Jul/20 2:13 PM",
"epochMillis": 1594811586263
}
}
},
"customfield_10014": null,
"customfield_10015": null,
"customfield_10005": null,
"customfield_10006": null,
"security": null,
"customfield_10007": null,
"customfield_10008": null,
"aggregatetimeestimate": null,
"customfield_10009": null,
"summary": "Help! This is a high priority request",
"creator": {
"self": "https://api.atlassian.com/ex/jira/a195d1c4-912e-4b01-88f0-d57b5f919e58/rest/api/2/user?accountId=5f0ee3415ee2c3002378e34f",
"accountId": "5f0ee3415ee2c3002378e34f",
"emailAddress": "sh.golan@gmail.com",
"avatarUrls": {
"48x48": "https://secure.gravatar.com/avatar/f8b9b3ebb87fafc145e3365c329a7e0e?d=https%3A%2F%2Favatar-management--avatars.us-west-2.prod.public.atl-paas.net%2Finitials%2FSG-3.png",
"24x24": "https://secure.gravatar.com/avatar/f8b9b3ebb87fafc145e3365c329a7e0e?d=https%3A%2F%2Favatar-management--avatars.us-west-2.prod.public.atl-paas.net%2Finitials%2FSG-3.png",
"16x16": "https://secure.gravatar.com/avatar/f8b9b3ebb87fafc145e3365c329a7e0e?d=https%3A%2F%2Favatar-management--avatars.us-west-2.prod.public.atl-paas.net%2Finitials%2FSG-3.png",
"32x32": "https://secure.gravatar.com/avatar/f8b9b3ebb87fafc145e3365c329a7e0e?d=https%3A%2F%2Favatar-management--avatars.us-west-2.prod.public.atl-paas.net%2Finitials%2FSG-3.png"
},
"displayName": "Shmulik Golan",
"active": true,
"timeZone": "Asia/Jerusalem",
"accountType": "atlassian"
},
"subtasks": [],
"reporter": {
"self": "https://api.atlassian.com/ex/jira/a195d1c4-912e-4b01-88f0-d57b5f919e58/rest/api/2/user?accountId=qm%3Ac0adbfae-3004-49bb-8c30-e60fa2c9e656%3Aaf1aedcb-05be-4125-a2d5-85c6f199cdb8",
"accountId": "qm:c0adbfae-3004-49bb-8c30-e60fa2c9e656:af1aedcb-05be-4125-a2d5-85c6f199cdb8",
"emailAddress": "tester@customer1.test",
"avatarUrls": {
"48x48": "https://avatar-management--avatars.us-west-2.prod.public.atl-paas.net/default-avatar.png",
"24x24": "https://avatar-management--avatars.us-west-2.prod.public.atl-paas.net/default-avatar.png",
"16x16": "https://avatar-management--avatars.us-west-2.prod.public.atl-paas.net/default-avatar.png",
"32x32": "https://avatar-management--avatars.us-west-2.prod.public.atl-paas.net/default-avatar.png"
},
"displayName": "tester@customer1.test",
"active": true,
"timeZone": "Asia/Jerusalem",
"accountType": "customer"
},
"aggregateprogress": {
"progress": 0,
"total": 0
},
"customfield_10000": "{}",
"customfield_10001": null,
"customfield_10002": [
{
"id": "2",
"name": "Customer 1",
"_links": {
"self": "https://totangodev2a.atlassian.net/rest/servicedeskapi/organization/2"
}
}
],
"customfield_10003": null,
"customfield_10004": null,
"customfield_10038": null,
"environment": null,
"duedate": null,
"progress": {
"progress": 0,
"total": 0
},
"votes": {
"self": "https://api.atlassian.com/ex/jira/a195d1c4-912e-4b01-88f0-d57b5f919e58/rest/api/2/issue/DEMO-7/votes",
"votes": 0,
"hasVoted": false
}
}
}
]
}
- List mapping (main objects): Issues
- The following mapping is just an example; each Jira will have its own fields settings:
- key: Jira issue key
- fields.issuetype.name: issue type
- fields.priority.name: Jira issue priority
- fields.summary: Jira issue Title (Summary)
- fields.reporter.displayName: Reporter name
- fields.customfield_10010._links.agent: link to Jira issue (use this for external link)
Limitations
- The virtual collection is limited to 1000 rows per response per account. If the API query brings more than 1000 rows, only the first 1000 rows will be used. It means that only the first 1000 rows will be used in presenting the information, sorting, and summaries. In this case, it is recommended to sort the data within the client query.
- The virtual collection supports REST API with JSON response only.
- The virtual collection supports OAuth2.0 authentication scheme only.
- The virtual collection supports only a single object array for the list mapping. In case you have several object arrays, you should choose the right object array for the list mapping.
- In the column definition, you cannot map a JSON object as a column.
- Virtual collection can only be consumed in account profile.