UNPKG

node-red-contrib-powerbi

Version:

A PowerBI API interaction node-red module which allows to interact with PowerBI service.

299 lines (256 loc) 9.01 kB
var request = require('request'); module.exports = function(RED) { function PowerBIReports(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) { if (response !== undefined) { 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 !== 'importreport' && config.operation !== 'getreports' && IsInvalidParameter(msg.report)) { msg.payload = "Missing target report id"; node.send([null, msg]); return; } switch (config.operation) { case "clonereport": if (IsInvalidParameter(msg.workspace) == false && msg.target.report !== undefined && msg.target.report.name !== undefined && msg.target.report.name.length > 0 && IsInvalidParameter(msg.target.report.model) == false && IsInvalidParameter(msg.target.workspace) == false) { request({ json: true, method:'POST', url: 'https://api.powerbi.com/v1.0/myorg/groups/' + msg.workspace.id + '/reports/' + msg.report.id + '/Clone', body: { 'name': msg.target.report.name, 'targetWorkspaceId' : msg.target.workspace.id, 'targetModelId': msg.target.report.model.id }, headers: { 'Authorization': 'Bearer ' + node.connection.accesstoken }}, ProcessResponse); } else { request({ json: true, method:'POST', url: 'https://api.powerbi.com/v1.0/myorg/reports/' + msg.report.id + '/Clone', body: { 'name': msg.report.name, 'targetWorkspaceId' : msg.workspace.id, 'targetModelId': msg.report.model.id }, headers: { 'Authorization': 'Bearer ' + node.connection.accesstoken }}, ProcessResponse); } break; case "deletereport": if (IsInvalidParameter(msg.workspace) == false) { request({ method:'DELETE', url: 'https://api.powerbi.com/v1.0/myorg/groups/' + msg.workspace.id + '/reports/' + msg.report.id, headers: { 'Authorization': 'Bearer ' + node.connection.accesstoken }}, ProcessResponse); } else { request({ method:'DELETE', url: 'https://api.powerbi.com/v1.0/myorg/reports/' + msg.report.id, headers: { 'Authorization': 'Bearer ' + node.connection.accesstoken }}, ProcessResponse); } break; case "exportreport": if (IsInvalidParameter(msg.workspace) == false) { request({ method:'GET', url: 'https://api.powerbi.com/v1.0/myorg/groups/' + msg.workspace.id + '/reports/' + msg.report.id + '/Export', headers: { 'Authorization': 'Bearer ' + node.connection.accesstoken, 'Accept': 'multipart/form-data' }}, ProcessResponse); } else { request({ method:'GET', url: 'https://api.powerbi.com/v1.0/myorg/reports/' + msg.report.id + '/Export', headers: { 'Authorization': 'Bearer ' + node.connection.accesstoken, 'Accept': 'multipart/form-data' }}, ProcessResponse); } break; case "importreport": if (IsInvalidParameter(msg.workspace) == false) { request({ json: true, method:'POST', url: 'https://api.powerbi.com/v1.0/myorg/groups/' + msg.workspace.id + '/imports', body: msg.payload, headers: { 'Authorization': 'Bearer ' + node.connection.accesstoken, 'Content-Type': 'multipart/form-data' }}, ProcessResponse); } else { request({ json: true, method:'POST', url: 'https://api.powerbi.com/v1.0/myorg/imports', body: msg.payload, headers: { 'Authorization': 'Bearer ' + node.connection.accesstoken, 'Content-Type': 'multipart/form-data' }}, ProcessResponse); } break; case "getimportreport": if (IsInvalidParameter(msg.imports)) { msg.payload = 'Missing import information'; node.send([null, msg]); return; } if (IsInvalidParameter(msg.workspace) == false) { request({ method:'GET', url: 'https://api.powerbi.com/v1.0/myorg/groups/' + msg.workspace.id + '/imports/' + msg.imports.id, headers: { 'Authorization': 'Bearer ' + node.connection.accesstoken, 'Content-Type': 'application/json' }}, ProcessResponse); } else { request({ method:'GET', url: 'https://api.powerbi.com/v1.0/myorg/imports/' + msg.imports.id, headers: { 'Authorization': 'Bearer ' + node.connection.accesstoken, 'Content-Type': 'applcation/json' }}, ProcessResponse); } break; case "getreports": if (IsInvalidParameter(msg.workspace) == false) { request({ method:'GET', url: 'https://api.powerbi.com/v1.0/myorg/groups/' + msg.workspace.id + '/reports', headers: { 'Authorization': 'Bearer ' + node.connection.accesstoken }}, ProcessResponse); } else { request({ method:'GET', url: 'https://api.powerbi.com/v1.0/myorg/reports', headers: { 'Authorization': 'Bearer ' + node.connection.accesstoken }}, ProcessResponse); } break; case "getreport": if (IsInvalidParameter(msg.workspace) == false) { request({ method:'GET', url: 'https://api.powerbi.com/v1.0/myorg/groups/' + msg.workspace.id + '/reports/' + msg.report.id, headers: { 'Authorization': 'Bearer ' + node.connection.accesstoken }}, ProcessResponse); } else { request({ method:'GET', url: 'https://api.powerbi.com/v1.0/myorg/reports/' + msg.report.id, headers: { 'Authorization': 'Bearer ' + node.connection.accesstoken }}, ProcessResponse); } break; case "rebindreport": if (IsInvalidParameter(msg.report.dataset)) { msg.payload = "Missing report dataset to rebind into."; node.send([null, msg]); return; } if (IsInvalidParameter(msg.workspace) == false) { request({ json: true, method:'POST', url: 'https://api.powerbi.com/v1.0/myorg/groups/' + msg.workspace.id + '/reports/' + msg.report.id + '/Rebind', body: { "datasetId": msg.report.dataset.id }, headers: { 'Authorization': 'Bearer ' + node.connection.accesstoken }}, ProcessResponse); } else { request({ json: true, method:'POST', url: 'https://api.powerbi.com/v1.0/myorg/reports/' + msg.report.id + '/Rebind', body: { "datasetId": msg.report.dataset.id }, headers: { 'Authorization': 'Bearer ' + node.connection.accesstoken }}, ProcessResponse); } break; case "updatereportcontent": if (IsInvalidParameter(msg.source.report) || IsInvalidParameter(msg.source.workspace)) { msg.payload = 'Missing source information'; node.send([null, msg]); return; } if (IsInvalidParameter(msg.workspace) == false) { request({ json: true, method:'POST', url: 'https://api.powerbi.com/v1.0/myorg/groups/' + msg.workspace.id + '/reports/' + msg.report.id + '/UpdateReportContent', body: { "sourceType": "ExistingReport", "sourceReport": { "sourceReportId": msg.source.report.id, "sourceWorkspaceId": msg.source.workspace.id } }, headers: { 'Authorization': 'Bearer ' + node.connection.accesstoken }}, ProcessResponse); } else { request({ json: true, method:'POST', url: 'https://api.powerbi.com/v1.0/myorg/reports/' + msg.report.id + '/UpdateReportContent', body: { "sourceType": "ExistingReport", "sourceReport": { "sourceReportId": msg.source.report.id, "sourceWorkspaceId": msg.source.workspace.id } }, headers: { 'Authorization': 'Bearer ' + node.connection.accesstoken }}, ProcessResponse); } break; }; }); } RED.nodes.registerType('powerbi-reports', PowerBIReports); }