Forum Discussion
Bad request when embeeding an analisys services based report
- 2 years ago
I´ve already came to the solution.
This is the idea:
public EmbedToken GetEmbedToken(Guid reportId, IList<Guid> datasetIds, [Optional] Guid targetWorkspaceId)
{
PowerBIClient pbiClient = this.GetPowerBIClient();// Define the user identity and roles. Use one of the following:
var rlsidentity = new EffectiveIdentity( // If no RLS
username: "User", // can also be [email protected]
datasets: new List<string> { datasetIds.First().ToString() }
);
// Create a request for getting an embed token for the rls identity defined above
// This method works only with new Power BI V2 workspace experience
var tokenRequest = new GenerateTokenRequestV2(
reports: new List<GenerateTokenRequestV2Report>() { new GenerateTokenRequestV2Report(reportId) },
datasets: datasetIds.Select(datasetId => new GenerateTokenRequestV2Dataset(datasetId.ToString())).ToList(),
targetWorkspaces: targetWorkspaceId != Guid.Empty ? new List<GenerateTokenRequestV2TargetWorkspace>() { new GenerateTokenRequestV2TargetWorkspace(targetWorkspaceId) } : null
,identities: new List<EffectiveIdentity> { rlsidentity}
);
tokenRequest.Datasets.First().Validate(EffectiveIdentity);// Generate an embed token
var embedToken = pbiClient.EmbedToken.GenerateToken(tokenRequest);return embedToken;
}The problem I've got now is how to detect if the dataset needs effective identity
- 2 years ago
Inthe end, this is the solution
public EmbedToken GetEmbedToken(Guid reportId, IList<Guid> datasetIds, [Optional] Guid targetWorkspaceId)
{
PowerBIClient pbiClient = this.GetPowerBIClient();
EmbedToken embedToken = new EmbedToken();// Define the user identity and roles. Use one of the following:
//Los reportes no utilizan roles
var rlsidentity = new EffectiveIdentity( // If no RLS
username: "[email protected]",
datasets: new List<string> { datasetIds.First().ToString() }
); ;// Create a request for getting an embed token for the rls identity defined above
// This method works only with new Power BI V2 workspace experience
//controlo que se necesite EffectiveIdentity. Para los reportes paginados o los modelos tabulares no hace falta
var dataset = pbiClient.Datasets.GetDatasetInGroup(targetWorkspaceId, datasetIds.First().ToString());
if( dataset.IsEffectiveIdentityRequired == true) {var tokenRequest = new GenerateTokenRequestV2(
reports: new List<GenerateTokenRequestV2Report>() { new GenerateTokenRequestV2Report(reportId) },
datasets: datasetIds.Select(datasetId => new GenerateTokenRequestV2Dataset(datasetId.ToString())).ToList(),
targetWorkspaces: targetWorkspaceId != Guid.Empty ? new List<GenerateTokenRequestV2TargetWorkspace>() { new GenerateTokenRequestV2TargetWorkspace(targetWorkspaceId) } : null
,identities: new List<EffectiveIdentity> { rlsidentity} //aquí es donde controlo
);
embedToken = pbiClient.EmbedToken.GenerateToken(tokenRequest);
}
else {
var tokenRequest = new GenerateTokenRequestV2(
reports: new List<GenerateTokenRequestV2Report>() { new GenerateTokenRequestV2Report(reportId) },
datasets: datasetIds.Select(datasetId => new GenerateTokenRequestV2Dataset(datasetId.ToString())).ToList(),
targetWorkspaces: targetWorkspaceId != Guid.Empty ? new List<GenerateTokenRequestV2TargetWorkspace>() { new GenerateTokenRequestV2TargetWorkspace(targetWorkspaceId) } : null
);
embedToken = pbiClient.EmbedToken.GenerateToken(tokenRequest);
}// Generate an embed token
return embedToken;
}
I´ve already came to the solution.
This is the idea:
public EmbedToken GetEmbedToken(Guid reportId, IList<Guid> datasetIds, [Optional] Guid targetWorkspaceId)
{
PowerBIClient pbiClient = this.GetPowerBIClient();
// Define the user identity and roles. Use one of the following:
var rlsidentity = new EffectiveIdentity( // If no RLS
username: "User", // can also be [email protected]
datasets: new List<string> { datasetIds.First().ToString() }
);
// Create a request for getting an embed token for the rls identity defined above
// This method works only with new Power BI V2 workspace experience
var tokenRequest = new GenerateTokenRequestV2(
reports: new List<GenerateTokenRequestV2Report>() { new GenerateTokenRequestV2Report(reportId) },
datasets: datasetIds.Select(datasetId => new GenerateTokenRequestV2Dataset(datasetId.ToString())).ToList(),
targetWorkspaces: targetWorkspaceId != Guid.Empty ? new List<GenerateTokenRequestV2TargetWorkspace>() { new GenerateTokenRequestV2TargetWorkspace(targetWorkspaceId) } : null
,identities: new List<EffectiveIdentity> { rlsidentity}
);
tokenRequest.Datasets.First().Validate(EffectiveIdentity);
// Generate an embed token
var embedToken = pbiClient.EmbedToken.GenerateToken(tokenRequest);
return embedToken;
}
The problem I've got now is how to detect if the dataset needs effective identity
- avendanof2 years ago
Helper I
Inthe end, this is the solution
public EmbedToken GetEmbedToken(Guid reportId, IList<Guid> datasetIds, [Optional] Guid targetWorkspaceId)
{
PowerBIClient pbiClient = this.GetPowerBIClient();
EmbedToken embedToken = new EmbedToken();// Define the user identity and roles. Use one of the following:
//Los reportes no utilizan roles
var rlsidentity = new EffectiveIdentity( // If no RLS
username: "[email protected]",
datasets: new List<string> { datasetIds.First().ToString() }
); ;// Create a request for getting an embed token for the rls identity defined above
// This method works only with new Power BI V2 workspace experience
//controlo que se necesite EffectiveIdentity. Para los reportes paginados o los modelos tabulares no hace falta
var dataset = pbiClient.Datasets.GetDatasetInGroup(targetWorkspaceId, datasetIds.First().ToString());
if( dataset.IsEffectiveIdentityRequired == true) {var tokenRequest = new GenerateTokenRequestV2(
reports: new List<GenerateTokenRequestV2Report>() { new GenerateTokenRequestV2Report(reportId) },
datasets: datasetIds.Select(datasetId => new GenerateTokenRequestV2Dataset(datasetId.ToString())).ToList(),
targetWorkspaces: targetWorkspaceId != Guid.Empty ? new List<GenerateTokenRequestV2TargetWorkspace>() { new GenerateTokenRequestV2TargetWorkspace(targetWorkspaceId) } : null
,identities: new List<EffectiveIdentity> { rlsidentity} //aquí es donde controlo
);
embedToken = pbiClient.EmbedToken.GenerateToken(tokenRequest);
}
else {
var tokenRequest = new GenerateTokenRequestV2(
reports: new List<GenerateTokenRequestV2Report>() { new GenerateTokenRequestV2Report(reportId) },
datasets: datasetIds.Select(datasetId => new GenerateTokenRequestV2Dataset(datasetId.ToString())).ToList(),
targetWorkspaces: targetWorkspaceId != Guid.Empty ? new List<GenerateTokenRequestV2TargetWorkspace>() { new GenerateTokenRequestV2TargetWorkspace(targetWorkspaceId) } : null
);
embedToken = pbiClient.EmbedToken.GenerateToken(tokenRequest);
}// Generate an embed token
return embedToken;
}