node-red-contrib-powerbi
Version:
A PowerBI API interaction node-red module which allows to interact with PowerBI service.
137 lines (110 loc) • 4.41 kB
JavaScript
var request = require('request');
module.exports = function(RED) {
function PowerBIDatasetRefresh(config) {
RED.nodes.createNode(this,config);
// Retrieve the connection node.
this.connection = RED.nodes.getNode(config.connection);
var node = this;
function IsInvalidParameter(p) {
return (p === undefined ||
p.id === undefined ||
p.id.length === 0);
}
node.on('input', function(msg) {
function ProcessResponse(error, response, body) {
msg.status = response.statusCode;
msg.headers = response.headers;
msg.payload = body;
response !== undefined &&
response.statusCode !== undefined &&
response.statusCode === 200 ? node.send(msg) : node.send([null, msg]);
}
if (config.operation !== 'getdatasets' && IsInvalidParameter(msg.dataset)) {
msg.payload = 'Missing dataset id';
node.send([null, msg]);
return;
}
switch(config.operation) {
case 'bindtogateway':
// POST https://api.powerbi.com/v1.0/myorg/datasets/{dataset_id}/BindToGateway
// POST https://api.powerbi.com/v1.0/myorg/groups/{group_id}/datasets/{dataset_id}/BindToGateway
// Body : { "gatewayId": "c8aae8cf-9de8-4934-9b99-ff45302291ce" }
break;
case 'createdataset':
// POST https://api.powerbi.com/v1.0/myorg/datasets
// POST https://api.powerbi.com/v1.0/myorg/datasets?defaultRetentionPolicy={None | basicFIFO}
// POST https://api.powerbi.com/v1.0/myorg/groups/{group_id}/datasets
// Header:
// Content-Type: application/json
// Docs:
// https://msdn.microsoft.com/en-us/library/mt203562.aspx
break;
case 'getdatasets':
if (IsInvalidParameter(msg.workspace) == false)
{
request({
method:'GET',
url: 'https://api.powerbi.com/v1.0/myorg/groups/' + msg.workspace.id + '/datasets',
headers: {
'Authorization': 'Bearer ' + node.connection.accesstoken
}}, ProcessResponse);
} else {
request({
method:'GET',
url: 'https://api.powerbi.com/v1.0/myorg/datasets',
headers: {
'Authorization': 'Bearer ' + node.connection.accesstoken
}}, ProcessResponse);
}
break;
case 'getdataset':
if (IsInvalidParameter(msg.workspace) == false)
{
request({
method:'GET',
url: 'https://api.powerbi.com/v1.0/myorg/groups/' + msg.workspace.id + '/datasets/' + msg.dataset.id,
headers: {
'Authorization': 'Bearer ' + node.connection.accesstoken
}}, ProcessResponse);
} else {
request({
method:'GET',
url: 'https://api.powerbi.com/v1.0/myorg/datasets/' + msg.dataset.id,
headers: {
'Authorization': 'Bearer ' + node.connection.accesstoken
}}, ProcessResponse);
}
break;
case 'getdatasetrefreshhistory':
// GET https://api.powerbi.com/v1.0/myorg/datasets/{dataset_id}/refreshes/?$top={N}
// GET https://api.powerbi.com/v1.0/myorg/groups/{group_id}/datasets/{dataset_id}/refreshes/?$top={N}
if (IsInvalidParameter(msg.workspace) == false)
{
request({
method:'GET',
url: 'https://api.powerbi.com/v1.0/myorg/groups/' + msg.workspace.id + '/datasets/' + msg.dataset.id + '/refreshes/?$top=' + (msg.dataset.refreshcount || 1),
headers: {
'Authorization': 'Bearer ' + node.connection.accesstoken
}}, ProcessResponse);
} else {
request({
method:'GET',
url: 'https://api.powerbi.com/v1.0/myorg/datasets/' + msg.dataset.id + '/refreshes/?$top=' + (msg.dataset.refreshcount || 1),
headers: {
'Authorization': 'Bearer ' + node.connection.accesstoken
}}, ProcessResponse);
}
break;
case 'refreshdataset':
// POST https://api.powerbi.com/v1.0/myorg/datasets/{dataset_id}/refreshes
// POST https://api.powerbi.com/v1.0/myorg/groups/{group_id}/datasets/{dataset_id}/refreshes
break;
case 'takeover':
// POST https://api.powerbi.com/v1.0/myorg/datasets/{dataset_id}/takeover
// POST https://api.powerbi.com/v1.0/myorg/groups/{group_id}/datasets/{dataset_id}/takeover
break;
};
});
}
RED.nodes.registerType('powerbi-dataset', PowerBIDatasetRefresh);
}