Forum Discussion
Paginated Report embedding using a Power BI Dataset - How to pass the xmlaPermissions parameter?
- 4 years ago
This code works:
public EmbedToken GetEmbedToken(PowerBIClient pbiClient, Guid reportId, Guid datasetId, Guid targetWorkspaceId) { EmbedToken embedToken = new EmbedToken(); try { // Create a request for getting Embed token // This method works only with new Power BI V2 workspace experience var tokenRequest = new GenerateTokenRequestV2( reports: new List<GenerateTokenRequestV2Report>() { new GenerateTokenRequestV2Report(reportId) }, datasets: new List<GenerateTokenRequestV2Dataset>() { new GenerateTokenRequestV2Dataset(datasetId.ToString(), "ReadOnly") }, targetWorkspaces: targetWorkspaceId != Guid.Empty ? new List<GenerateTokenRequestV2TargetWorkspace>() { new GenerateTokenRequestV2TargetWorkspace(targetWorkspaceId) } : null, identities: new List<EffectiveIdentity> { // This first EffectiveIdentity is needed only if // the Dataset uses Row Level Security new EffectiveIdentity( username: "[email protected]", roles: new List<string> { "A Role" }, datasets: new List<string> { datasetId.ToString() } ), new EffectiveIdentity( username: "[email protected]" , reports: new List<string> { reportId.ToString() } ) } ); // Generate Embed token embedToken = pbiClient.EmbedToken.GenerateToken(tokenRequest); } catch (Exception ex) { string errorMessage = ex.GetBaseException().Message; } return embedToken; }
I have tried to get the EmbedToken by referring to this example:
I created the PowerBIclient object in main function without problem, then pass into this function:
public void GetEmbedToken(PowerBIClient pbiClient, Guid reportId, Guid datasetId, Guid targetWorkspaceId)
{
try
{
// Create a request for getting Embed token
// This method works only with new Power BI V2 workspace experience
var tokenRequest = new GenerateTokenRequestV2(
reports: new List<GenerateTokenRequestV2Report>() { new GenerateTokenRequestV2Report(reportId) },
datasets: new List<GenerateTokenRequestV2Dataset>() { new GenerateTokenRequestV2Dataset(datasetId.ToString()) },
targetWorkspaces: targetWorkspaceId != Guid.Empty ? new List<GenerateTokenRequestV2TargetWorkspace>() { new GenerateTokenRequestV2TargetWorkspace(targetWorkspaceId) } : null
);
// Generate Embed token
var embedToken = pbiClient.EmbedToken.GenerateToken(tokenRequest);
}
catch (Exception ex)
{
string errorMessage = ex.GetBaseException().Message;
}
//return embedToken;
}
However, error returned when generate the token: Operation returned an invalid status code 'BadRequest'
Does any one has any idea?
This code works:
public EmbedToken GetEmbedToken(PowerBIClient pbiClient, Guid reportId, Guid datasetId, Guid targetWorkspaceId)
{
EmbedToken embedToken = new EmbedToken();
try
{
// Create a request for getting Embed token
// This method works only with new Power BI V2 workspace experience
var tokenRequest = new GenerateTokenRequestV2(
reports: new List<GenerateTokenRequestV2Report>()
{ new GenerateTokenRequestV2Report(reportId) },
datasets: new List<GenerateTokenRequestV2Dataset>()
{ new GenerateTokenRequestV2Dataset(datasetId.ToString(), "ReadOnly") },
targetWorkspaces: targetWorkspaceId != Guid.Empty ? new List<GenerateTokenRequestV2TargetWorkspace>() {
new GenerateTokenRequestV2TargetWorkspace(targetWorkspaceId) } : null,
identities: new List<EffectiveIdentity> {
// This first EffectiveIdentity is needed only if
// the Dataset uses Row Level Security
new EffectiveIdentity(
username: "[email protected]",
roles: new List<string> { "A Role" },
datasets: new List<string> { datasetId.ToString() }
),
new EffectiveIdentity(
username: "[email protected]" ,
reports: new List<string> { reportId.ToString() }
)
}
);
// Generate Embed token
embedToken = pbiClient.EmbedToken.GenerateToken(tokenRequest);
}
catch (Exception ex)
{
string errorMessage = ex.GetBaseException().Message;
}
return embedToken;
}