I keep getting this error ReferenceError: Can't find variable: Set file: http://localhost:1337/bundle.min.js line: 33098
It looks like window.tableau.getSchema() and myConnector.getData() have never been called. I add a log message, but it has never been executed. Solution from @redec is to add polyfill for react. But I still got error. Here is my html
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<meta http-equiv="X-UA-Compatible" content="ie=edge">
<title>Dashboard</title>
<link rel="shortcut icon" href="favicon.ico">
</head>
<body>
<div id="app">
</div>
<script src="https://connectors.tableau.com/libs/tableauwdc-2.3.latest.js" type="text/javascript"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/babel-polyfill/7.2.5/polyfill.min.js"
type="text/javascript"></script>
</body>
</html>
Here is the component that will display on Tableu WDC, the route will be enter via WDC on Tableu Desktop app is http://localhost:1337/tableau/wdc
import React, { Component } from 'react';
class TableauWDC extends Component {
constructor(props, context) {
super(props, context);
this.state = {
isScriptLoaded: false
};
}
componentDidMount() {
// Create the connector object
var myConnector = window.tableau.makeConnector();
// Define the schema
myConnector.getSchema = function (schemaCallback) {
window.tableau.log("getSchema")
var cols = [{
id: "id",
dataType: window.tableau.dataTypeEnum.string
}, {
id: "mag",
alias: "magnitude",
dataType: window.tableau.dataTypeEnum.float
}, {
id: "title",
alias: "title",
dataType: window.tableau.dataTypeEnum.string
}, {
id: "location",
dataType: window.tableau.dataTypeEnum.geometry
}];
var tableSchema = {
id: "earthquakeFeed",
alias: "Earthquakes with magnitude greater than 4.5 in the last seven days",
columns: cols
};
schemaCallback([tableSchema]);
};
// Download the data
myConnector.getData = function (table, doneCallback) {
window.tableau.log("getData")
this.loadJSON('https://earthquake.usgs.gov/earthquakes/feed/v1.0/summary/4.5_week.geojson',
function (data) {
var feat = data.features,
tableData = [];
// Iterate over the JSON object
for (var i = 0, len = feat.length; i < len; i++) {
tableData.push({
"id": feat[i].id,
"mag": feat[i].properties.mag,
"title": feat[i].properties.title,
"location": feat[i].geometry
});
}
table.appendRows(tableData);
doneCallback();
},
function (xhr) { console.error(xhr); }
);
};
window.tableau.registerConnector(myConnector);
}
loadJSON(path, success, error) {
var xhr = new XMLHttpRequest();
xhr.onreadystatechange = function () {
if (xhr.readyState === XMLHttpRequest.DONE) {
if (xhr.status === 200) {
if (success)
success(JSON.parse(xhr.responseText));
} else {
if (error)
error(xhr);
}
}
};
xhr.open("GET", path, true);
xhr.send();
}
submit() {
window.tableau.connectionName = "USGS Earthquake Feed"; // This will be the data source name in Tableau
window.tableau.submit(); // This sends the connector object to Tableau
}
render() {
return (
<div style={{
display: "flex",
justifyContent: "center",
alignItems: "center",
height: "calc( 90vh - 65px)"
}}>
<button onClick={() => this.submit()} className="btn btn-success" >Get Earthquake Data!</button>
</div>
);
}
}
export default TableauWDC;
I keep getting these errors.
A snippet from the error is below here
The web data connector has reported an unrecoverable error and cannot proceed. If the connector has reported details of the error, they are displayed in the pane below.
Script error. file: line: 0

Unfortunately the browser that tableau uses is not es6 compliant so it is missing some es6 components that react needs (such as Set and Map)...so you need to polyfill them. Add this after your tableau <script> tag:
<script src="https://cdnjs.cloudflare.com/ajax/libs/babel-polyfill/7.2.5/polyfill.min.js" type="text/javascript"></script>�
Currently tableau uses an old version of QtWebKit, but rumors say they'll be switching to chromium within the next couple of releases.
It is also a little weird that your registration is being done from a click handler on a div? I would expect that to be done on componentDidMount so it is done as soon as the WDC loads (otherwise tableau will display a warning banner)
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With