Please follow these steps to embed multiple dashboards and widgets in your application.
In your .html page, you need to add the following Embed SDK URL to the head
tag of your page.
<head>
<script type="text/javascript" src="https://cdn.boldbi.com/embedded-sdk/v7.11.24/boldbi-embed.js"></script>
</head>
In the body
tag, you need to create the div
elements with your own id names. These elements will be used for embedding multiple dashboards and widgets.
<body>
<div id="dashboard_container"></div>
<div id="widget1_container"></div>
<div id="widget2_container"></div>
</body>
NOTE: If you use hyphens in IDs, your code may become more prone to errors and be harder to read while using Jquery. Instead, use underscores or camelCase if you are in control of the IDs.
In the body
tag, you need to add the function to create a BoldBI instance with the following properties and call that function in the body using the onload
attribute as follows. Also, call the loadDashboard()
function for every dashboard and widget.
<body onload="embedSample();">
<div id="dashboard_container"></div>
<script>
function embedSample() {
var dashboardInstance = BoldBI.create({
serverUrl: "http://localhost:51777/bi/site/site1",
dashboardPath: "/Sales/Sales Analysis Dashboard",
embedContainerId: "dashboard_container",
embedType: BoldBI.EmbedType.Component,
mode: BoldBI.Mode.View,
height: "800px",
width: "1200px",
authorizationServer: {
url: "http://example.com/embeddetail/get"
},
expirationTime: "100000",
});
dashboardInstance.loadDashboard();
var widget1Instance = BoldBI.create({
serverUrl: "http://localhost:51777/bi/site/site1",
dashboardPath: "/Sales/Sales Analysis Dashboard",
embedContainerId: "widget1_container",
embedType: BoldBI.EmbedType.Component,
mode: BoldBI.Mode.View,
height: "800px",
width: "1200px",
authorizationServer: {
url: "http://example.com/embeddetail/get"
},
expirationTime: "100000",
});
widget1Instance.loadDashboardWidget("Top 10 Products By Sales");
var widget2Instance = BoldBI.create({
serverUrl: "http://localhost:51777/bi/site/site1",
dashboardPath: "/Sales/Sales Analysis Dashboard",
embedContainerId: "widget2_container",
embedType: BoldBI.EmbedType.Component,
mode: BoldBI.Mode.View,
height: "800px",
width: "1200px",
authorizationServer: {
url: "http://example.com/embeddetail/get"
},
expirationTime: "100000",
});
widget2Instance.loadDashboardWidget("Sales By Country");
}
</script>
</body>
NOTE: By default,
BoldBI.Environment.Enterprise
is used for the Environment API member. For Cloud sites, you must set the Environment member value toBoldBI.Environment.Cloud
.
Please refer to the following table for the values of the previous properties based on your application.
serverUrl | Use your Bold BI server url (http://localhost:[portno]/bi/site/site1) |
dashboardId | Use item id of the dashboard, which needs to be edited in embedded designer in your application. |
dashboardPath | dashboardPath will be like `/{category_name}/{dashboard_name}` Use item id of the dashboard, which needs to be edited in embedded designer in your application. |
embedContainerId | Id of the created div element in your body. |
embedType | BoldBI.EmbedType.Component |
height | Height of the dashboard designer in your page |
width | Width of the dashboard designer in your page |
authorizationServer | Use your authorization URL |
expirationTime | Token expiration time |
Copy the previous embedSample() function and paste it in your page. You need to update your values to the properties.
NOTE: The embedContainerId should be the same as the value of your div element’s id.
NOTE: To use Bold BI v5.2.48 or a lower version, you need to add the following dependent scripts and also reference the Embed SDK URL of the respective Bold BI version.
https://cdn.boldbi.com/embedded-sdk/v5.2.48/embed-js.js
Bold BI Version |
Dependent Scripts |
---|---|
v5.2.48 or Lower |
|
v5.3.53 |
|
v7.11.24(latest) |
|
You need to implement an authorization endpoint in your application. This endpoint will serve as the bridge between your application and the Bold BI server. Additionally, you need to update the secure details, such as email and group-based access. To learn more about the authorize server, please refer to the provided authorization server.
To create an authorization-server action method, copy the following snippet into your controller. You can use the currently logged-in user’s email, which is user@domain.com
or their username
. However, this user must have access to the dashboard.
[HttpPost]
[Route("embeddetail/get")]
public string GetEmbedDetails(string embedQuerString, string dashboardServerApiUrl)
{
// Use your user-email as embed_user_email
embedQuerString += "&embed_user_email=user@domain.com";
// Use your username as embed_user_email
//embedQuerString += "&embed_user_email=username";
//To set embed_server_timestamp to overcome the EmbedCodeValidation failing while different timezone using at client application.
double timeStamp = (int)DateTime.UtcNow.Subtract(new DateTime(1970, 1, 1)).TotalSeconds;
embedQuery += "&embed_server_timestamp=" + timeStamp;
var embedSignature = "&embed_signature=" + GetSignatureUrl(embedQuerString);
var embedDetailsUrl = "/embed/authorize?" + embedQuerString + embedSignature;
using (var client = new HttpClient())
{
client.BaseAddress = new Uri(dashboardServerApiUrl);
client.DefaultRequestHeaders.Accept.Clear();
var result = client.GetAsync(dashboardServerApiUrl + embedDetailsUrl).Result;
string resultContent = result.Content.ReadAsStringAsync().Result;
return resultContent;
}
}
Please add the GetSignatureUrl method, and make sure to call this method from the previous GetEmbedDetails action. Refer to the following section for instructions on obtaining the EmbedSecret key from the Bold BI application.
public string GetSignatureUrl(string queryString)
{
// Get the embedSecret key from Bold BI.
var embedSecret = "8apLLNabQisvriG2W1nOI7XWkl2CsYY";
var encoding = new System.Text.UTF8Encoding();
var keyBytes = encoding.GetBytes(embedSecret);
var messageBytes = encoding.GetBytes(queryString);
using (var hmacsha1 = new HMACSHA256(keyBytes))
{
var hashMessage = hmacsha1.ComputeHash(messageBytes);
return Convert.ToBase64String(hashMessage);
}
}
In the authorization endpoint, you can pass both types of filters (Dashboard Parameter/Filter Parameter) simultaneously.
To pass filters to the embed_datasource_filter
parameter in the authorization endpoint, refer to the following sample in C# (the syntax may vary depending on your platform language). In this example, we have set both types of filters to the embed_datasource_filter
property in the endpoint.
[HttpPost]
[Route("embeddetail/get")]
public string GetEmbedDetails(string embedQuerString, string dashboardServerApiUrl)
{
// Use your user-email as embed_user_email
embedQuerString += "&embed_user_email=user@domain.com" + "&embed_datasource_filter=" + "[{&&Parameter=Value&Parameter=Value}]";
//To set embed_server_timestamp to overcome the EmbedCodeValidation failing while different timezone using at client application.
double timeStamp = (int)DateTime.UtcNow.Subtract(new DateTime(1970, 1, 1)).TotalSeconds;
embedQuery += "&embed_server_timestamp=" + timeStamp;
var embedSignature = "&embed_signature=" + GetSignatureUrl(embedQuerString);
var embedDetailsUrl = "/embed/authorize?" + embedQuerString + embedSignature;
using (var client = new HttpClient())
{
client.BaseAddress = new Uri(dashboardServerApiUrl);
client.DefaultRequestHeaders.Accept.Clear();
var result = client.GetAsync(dashboardServerApiUrl + embedDetailsUrl).Result;
string resultContent = result.Content.ReadAsStringAsync().Result;
return resultContent;
}
}
The Dashboard Parameter
filter must be started with a double ampersand &&
in the endpoint. Refer to the configuring dashboard parameters for more details.
The URL Parameter
filter must be started with a single ampersand &
in the endpoint. Please refer to the URL Filter for more details.
Please refer to the following table for the values of the filter properties based on your filter.
Scenario | Appending Query |
---|---|
If passing Dashboard Parameter only | "&embed_datasource_filter=[{&&Parameter=Value}]" |
If passing URL Parameter only | "&embed_datasource_filter=[{&Parameter=Value}]" |
If passing multiple Dashboard Parameters | "&embed_datasource_filter=[{&&Parameter=Value&&Parameter1=Value1}]" |
If passing multiple URL Parameters | "&embed_datasource_filter=[{&Parameter=Value&Parameter1=Value1}]" |
If passing both Dashboard Parameter and URL Parameter | "&embed_datasource_filter=[{&&Parameter=Value&Parameter=Value}]" |
If passing both URL Parameter and Dashboard Parameter | "&embed_datasource_filter=[{&Parameter=Value&&Parameter=Value}]" |
NOTE: The filter value should be enclosed with square and curly brackets, as mentioned above.
You can obtain your Embed Secret key from the administrator settings section. Please refer to the Embed Settings for further information.
If you are using multi-tenant Bold BI server sites and are looking to embed multiple dashboards and widgets on the same page in your application, we recommend using the common embed secret instead of separate embed secrets for each site. Please refer to this link to obtain the common embed secret.