Folder Structure as following
. ├── manifest.json └── index.html
File Descriptions
HTML
1. Location: root/index.html
2. Content
– Must include /micro/app/base in script tag at the beginning of the file
<head>
<script src=”/micro/app/base”></script>
</head>
<body>
<script
// FUNCTION WITH CALLBACK
function getTicket() {
IZIHELP.get('TICKET', (error, ticket) => {
console.log('[getTicket] error', error)
console.log('[getTicket] ticket', ticket)
})
}
// FUNCTION WITH PROMISE
async function getTicketAsync() {
const [error, ticket] = await IZIHELP.get('TICKET')
console.log('[getTicketAsync] error', error)
console.log('[getTicketAsync] ticket', ticket)
}
// NESTED DATA
async function getTicketRequesterAsync() {
const [error, ticket] = await IZIHELP.get('TICKET:REQUESTER')
console.log('[getTicketRequesterAsync] error', error)
console.log('[getTicketRequesterAsync] ticket', ticket)
}
// TEST OFF EVENT
const listener1 = () => console.log('Never!!!')
IZIHELP.on('TICKET:routed', listener1)
IZIHELP.off('TICKET:routed', listener1)
// TEST APP CHANGED
IZIHELP.on('APP:changed', (data) => {
console.log('[APP:changed]', data)
})
IZIHELP.ready(() => {
console.log('on ready')
})
// TEST ON EVENT
const listener2 = async () => {
console.log('[listener2] area')
getTicket()
await getTicketAsync()
await getTicketRequesterAsync()
}
IZIHELP.on('TICKET:routed', listener2)
// TEST POPUP FUNCTIONS
// if there is a popup.html file
// IZIHELP.openPopup('popup.html')
// IZIHELP.closePopup('popup.html')
// TEST BASIC FUNCTIONS
function callback(err, result) { }
IZIHELP.get('TICKET', callback)
IZIHELP.get('TICKET:REQUESTER', callback)
IZIHELP.navigate('/ticket/123', callback)
IZIHELP.setStyle({ display: 'block' }, callback)
// IZIHELP.serverRequest({ url: 'http://myhost.com/api/user', method: 'GET' }, callback)
// IZIHELP.request({ url: '/anything/search', method: 'GET', params: { value: '110' } }, callback)
</script>
</body>
Methods:
- on(event, handler<(data)>)
- off(event, handler)
- get(property, [callback<(error, data)>]): Promise<[error, data]>
- set not supported yet
- openPopup(path, [options<{style}>, callback<(error, data)>]: Promise<[error, data]>
- closePopup(path | “self”, callback<(error, data)>]: Promise<[error, data]>
- navigate(url, callback<(error, data)>]: Promise<[error, data]>
- setStyle(style, callback<(error, data)>]: Promise<[error, data]>
- serverRequest(config, callback<(error, data)>]: Promise<[error, data]>
- request(config, callback<(error, data)>]: Promise<[error, data]>
Events:
- TICKET:routed
- TICKET:changed
Supported properties of get
- TICKET
- TICKET:REQUESTER
Popup
- path: “self” or a html file
- options: style property is a string of css
Server request config
- url: ‘https://some-domain.com/api/user’
- method: ‘post’ // methods are: GET POST PUT PATCH DELETE HEAD
- headers: {‘x-mytoken’: ‘mytoken123456’}
- params: { myid: 12345 } // ?mid=12345
- data: { firstName: ‘John’ } // body data for post, put, patch, delete
Internal Request config
- url: ‘/anything/search’
- method: ‘post’ // methods are: GET POST PUT PATCH DELETE HEAD
- params: { myid: 12345 } // ?mid=12345
- data: { firstName: ‘John’ } // body data for post, put, patch, delete
File: manifest.json
Contains the configuration descriptions for the application
1. Location: root/manifest.json
2. Content
{
"name": "IZIHelp Account Management",
"author": {
"name": "IZIHelp",
"email": "support@izihelp.com",
"url": "https://izihelp.com"
},
"defaultLocale": "en",
"location": "nav_bar",
"version": "1.0",
"frameworkVersion": "1.0",
"private": true,
"render": "MICRO_APP",
"logo": "assets/logo.png",
"request": {
"http://myhost.com": {
"params": { myid: 123456 }, // ?mid=123456
"headers": { "m-x-token": "bearer abcxyz"}
},
"http://myhost.com/abc": {
"params": {},
"headers": {}
}
}
}
Content details of the file can be one of the following:
– location: NAV_BAR | TOP_BAR | TICKET_SIDEBAR | NEW_TICKET_SIDEBAR | USER_SIDEBAR | PORTAL_SIDEBAR | IZICHANNEL_SIDEBAR
– render: MICRO_APP
– logo: path to the logo file from root directory of the application
– version: app version
– defaultLocale: default language
How to execute APIs on the server side
– ticketChanged function is used to listen to ticket change events. This function can only be used for application on the ticket_sidebar

Syntax details can be found at:
https://confluence.atlassian.com/bitbucketserver/markdown-syntax-guide-776639995.html
Sample integration for showing customer’s profile and purchase history from CRM and POS
