Exemplo n.º 1
0
        /// <summary>
        /// Get Embed token for multiple reports, datasets, and an optional target workspace
        /// </summary>
        /// <returns>Embed token</returns>
        public EmbedToken GetEmbedToken(IList <Guid> reportIds, IList <Guid> datasetIds, [Optional] Guid targetWorkspaceId)
        {
            // Note: This method is an example and is not consumed in this sample app

            PowerBIClient pbiClient = this.GetPowerBIClient();

            // Convert report Ids to required types
            var reports = reportIds.Select(reportId => new GenerateTokenRequestV2Report(reportId)).ToList();

            // Convert dataset Ids to required types
            var datasets = datasetIds.Select(datasetId => new GenerateTokenRequestV2Dataset(datasetId.ToString())).ToList();

            // Create a request for getting Embed token
            // This method works only with new Power BI V2 workspace experience
            var tokenRequest = new GenerateTokenRequestV2(

                datasets: datasets,

                reports: reports,

                targetWorkspaces: targetWorkspaceId != Guid.Empty ? new List <GenerateTokenRequestV2TargetWorkspace>()
            {
                new GenerateTokenRequestV2TargetWorkspace(targetWorkspaceId)
            } : null
                );

            // Generate Embed token
            var embedToken = pbiClient.EmbedToken.GenerateToken(tokenRequest);

            return(embedToken);
        }
        public static ReportEmbeddingData GetReportEmbeddingDataUsingV2TokenRequest()
        {
            PowerBIClient pbiClient = TokenManager.GetPowerBiClient();

            var report     = pbiClient.Reports.GetReportInGroup(workspaceId, reportId);
            var embedUrl   = report.EmbedUrl;
            var reportName = report.Name;

            // create token request object
            IList <GenerateTokenRequestV2Dataset>         datasetRequests   = new GenerateTokenRequestV2Dataset[] { new GenerateTokenRequestV2Dataset(report.DatasetId) };
            IList <GenerateTokenRequestV2Report>          reportRequests    = new GenerateTokenRequestV2Report[] { new GenerateTokenRequestV2Report(report.Id) };
            IList <GenerateTokenRequestV2TargetWorkspace> workspaceRequests = new GenerateTokenRequestV2TargetWorkspace[] { new GenerateTokenRequestV2TargetWorkspace(workspaceId) };


            GenerateTokenRequestV2 tokenRequest =
                new GenerateTokenRequestV2(datasets: datasetRequests,
                                           reports: reportRequests,
                                           targetWorkspaces: workspaceRequests);


            // call to Power BI Service API and pass GenerateTokenRequest object to generate embed token
            string embedToken = pbiClient.EmbedToken.GenerateToken(tokenRequest).Token;

            return(new ReportEmbeddingData {
                reportId = reportId.ToString(),
                reportName = reportName,
                embedUrl = embedUrl,
                accessToken = embedToken
            });
        }
Exemplo n.º 3
0
        /// <summary>
        /// Get Embed token for single report, multiple datasets, and an optional target workspace
        /// </summary>
        /// <returns>Embed token</returns>
        public EmbedToken GetEmbedToken(Guid reportId, IList <Guid> datasetIds, [Optional] Guid targetWorkspaceId)
        {
            PowerBIClient pbiClient = this.GetPowerBIClient();

            // 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: datasetIds.Select(datasetId => new GenerateTokenRequestV2Dataset(datasetId.ToString())).ToList(),

                targetWorkspaces: targetWorkspaceId != Guid.Empty ? new List <GenerateTokenRequestV2TargetWorkspace>()
            {
                new GenerateTokenRequestV2TargetWorkspace(targetWorkspaceId)
            } : null
                );

            // Generate Embed token
            var embedToken = pbiClient.EmbedToken.GenerateToken(tokenRequest);

            return(embedToken);
        }
Exemplo n.º 4
0
        public EmbedToken GetEmbedToken(Guid reportId, IList <Guid> datasetIds, [Optional] Guid targetWorkspaceId)
        {
            PowerBIClient pbiClient    = this.GetPowerBIClient();
            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>()
            {
                new EffectiveIdentity(
                    username: "******",
                    roles: new List <string>()
                {
                    "SalesPerson"
                },
                    datasets: datasetIds.Select(datasetId => datasetId.ToString()).ToList())
            }
                );
            var embedToken = pbiClient.EmbedToken.GenerateToken(tokenRequest);

            return(embedToken);
        }
        public async Task <EmbeddedReportViewModel> GetReportWithRlsV2(string UserName, string[] Roles, bool CustomizationEnabled)
        {
            PowerBIClient pbiClient = GetPowerBiClient();

            // call to Power BI Service API to get embedding data
            var report = await pbiClient.Reports.GetReportInGroupAsync(WorkspaceId, RlsReportId);

            // generate read-only embed token for the report
            var datasetId = report.DatasetId;

            // generate V2 embed token requests for dataset report and workspace
            IList <GenerateTokenRequestV2Dataset> datasetRequests = new List <GenerateTokenRequestV2Dataset>();

            datasetRequests.Add(new GenerateTokenRequestV2Dataset(datasetId));

            IList <GenerateTokenRequestV2Report> reportRequests = new List <GenerateTokenRequestV2Report>();

            reportRequests.Add(new GenerateTokenRequestV2Report(report.Id, allowEdit: CustomizationEnabled));

            var workspaceRequests = new List <GenerateTokenRequestV2TargetWorkspace>();

            if (CustomizationEnabled)
            {
                workspaceRequests.Add(new GenerateTokenRequestV2TargetWorkspace(WorkspaceId));
            }

            // create EffectiveIdentity object
            var datasetList = new List <string>()
            {
                report.DatasetId
            };
            IList <EffectiveIdentity> effectiveIdentities =
                new List <EffectiveIdentity> {
                new EffectiveIdentity(UserName, datasetList, Roles)
            };

            /// create top-level V2 token request
            GenerateTokenRequestV2 tokenRequest =
                new GenerateTokenRequestV2 {
                Datasets         = datasetRequests,
                Reports          = reportRequests,
                TargetWorkspaces = workspaceRequests,
                Identities       = effectiveIdentities
            };

            // call to Power BI Service API and pass GenerateTokenRequestV2 object to generate embed token
            var embedTokenResponse = pbiClient.EmbedToken.GenerateToken(tokenRequest);
            var embedToken         = embedTokenResponse.Token;

            // return report embedding data to caller
            return(new EmbeddedReportViewModel {
                Id = report.Id.ToString(),
                EmbedUrl = report.EmbedUrl,
                Name = report.Name,
                Token = embedToken,
                CustomizationEnabled = CustomizationEnabled
            });
        }
Exemplo n.º 6
0
        public async Task <string> GetEmbeddedViewModel(string appWorkspaceId = "")
        {
            var           accessToken      = this.tokenAcquisition.GetAccessTokenForAppAsync(RequiredScopes[0]).Result;
            var           tokenCredentials = new TokenCredentials(accessToken, "Bearer");
            PowerBIClient pbiClient        = new PowerBIClient(new Uri(urlPowerBiServiceApiRoot), tokenCredentials);

            Object viewModel;

            Guid workspaceId      = new Guid(appWorkspaceId);
            var  workspaces       = (await pbiClient.Groups.GetGroupsAsync()).Value;
            var  currentWorkspace = workspaces.First((workspace) => workspace.Id == workspaceId);
            var  datasets         = (await pbiClient.Datasets.GetDatasetsInGroupAsync(workspaceId)).Value;
            var  reports          = (await pbiClient.Reports.GetReportsInGroupAsync(workspaceId)).Value;

            IList <GenerateTokenRequestV2Dataset> datasetRequests = new List <GenerateTokenRequestV2Dataset>();

            foreach (var dataset in datasets)
            {
                datasetRequests.Add(new GenerateTokenRequestV2Dataset(dataset.Id));
            }
            ;

            IList <GenerateTokenRequestV2Report> reportRequests = new List <GenerateTokenRequestV2Report>();

            foreach (var report in reports)
            {
                reportRequests.Add(new GenerateTokenRequestV2Report(report.Id, allowEdit: true));
            }
            ;


            IList <GenerateTokenRequestV2TargetWorkspace> workspaceRequests =
                new GenerateTokenRequestV2TargetWorkspace[] {
                new GenerateTokenRequestV2TargetWorkspace(workspaceId)
            };


            GenerateTokenRequestV2 tokenRequest =
                new GenerateTokenRequestV2(datasets: datasetRequests,
                                           reports: reportRequests,
                                           targetWorkspaces: workspaceRequests);


            // call to Power BI Service API and pass GenerateTokenRequest object to generate embed token
            string embedToken = pbiClient.EmbedToken.GenerateToken(tokenRequest).Token;


            viewModel = new
            {
                workspaces       = workspaces,
                currentWorkspace = currentWorkspace.Name,
                datasets         = datasets,
                reports          = reports,
                token            = embedToken
            };

            return(JsonConvert.SerializeObject(viewModel));
        }
        /// <summary>
        /// Generate Embed token and Embed URL
        /// </summary>
        /// <returns></returns>
        public EmbedParams GenerateEmbedParams(string username = null, string role = null)
        {
            // Get report info
            var pbiReport = pbiClient.Reports.GetReportInGroup(workspaceId, reportId);

            // Create list of datasets
            var datasets = new GenerateTokenRequestV2Dataset[] { new GenerateTokenRequestV2Dataset(pbiReport.DatasetId) };

            // Create list of reports
            var reports = new GenerateTokenRequestV2Report[] { new GenerateTokenRequestV2Report(reportId) };

            // Create list of workspaces
            var workspaces = new GenerateTokenRequestV2TargetWorkspace[] { new GenerateTokenRequestV2TargetWorkspace(workspaceId) };

            // Create effective identity for current user
            List <EffectiveIdentity> identities = null;

            if (!string.IsNullOrWhiteSpace(username) || !string.IsNullOrWhiteSpace(role))
            {
                identities = new List <EffectiveIdentity> {
                    new EffectiveIdentity(username: username, roles: new List <string> {
                        role
                    }, datasets: new List <string> {
                        pbiReport.DatasetId
                    })
                };
            }

            // Create a request for getting Embed token
            var tokenRequest = new GenerateTokenRequestV2(datasets: datasets, reports: reports, targetWorkspaces: workspaces, identities: identities);

            // Get Embed token
            var embedToken = pbiClient.EmbedToken.GenerateToken(tokenRequest);

            // Capture embed parameters
            var embedParams = new EmbedParams
            {
                Id         = pbiReport.Id,
                EmbedUrl   = pbiReport.EmbedUrl,
                Type       = "report",
                EmbedToken = new EmbedToken
                {
                    Token      = embedToken.Token,
                    TokenId    = embedToken.TokenId,
                    Expiration = embedToken.Expiration
                },
                DefaultPage = null
            };

            return(embedParams);
        }
Exemplo n.º 8
0
        public static ReportWithDynamicBinding GetReportEmbeddingDataDynamicBinding()
        {
            PowerBIClient pbiClient = TokenManager.GetPowerBiClient();

            var report     = pbiClient.Reports.GetReportInGroup(workspaceId, reportId);
            var embedUrl   = "https://app.powerbi.com/reportEmbed";
            var reportName = report.Name;

            // create token request object
            IList <GenerateTokenRequestV2Dataset> datasetRequests =
                new GenerateTokenRequestV2Dataset[] {
                new GenerateTokenRequestV2Dataset(datasetId.ToString()),
                new GenerateTokenRequestV2Dataset(dataset2Id),
                new GenerateTokenRequestV2Dataset(dataset3Id)
            };

            IList <GenerateTokenRequestV2Report> reportRequests =
                new GenerateTokenRequestV2Report[] {
                new GenerateTokenRequestV2Report(reportId)
            };

            IList <GenerateTokenRequestV2TargetWorkspace> workspaceRequests =
                new GenerateTokenRequestV2TargetWorkspace[] {
                new GenerateTokenRequestV2TargetWorkspace(workspaceId)
            };


            GenerateTokenRequestV2 tokenRequest =
                new GenerateTokenRequestV2(datasets: datasetRequests,
                                           reports: reportRequests,
                                           targetWorkspaces: workspaceRequests);


            // call to Power BI Service API and pass GenerateTokenRequest object to generate embed token
            string embedToken = pbiClient.EmbedToken.GenerateToken(tokenRequest).Token;

            return(new ReportWithDynamicBinding {
                reportId = reportId.ToString(),
                reportName = reportName,
                embedUrl = embedUrl,
                embedToken = embedToken,
                dataset1Id = datasetId.ToString(),
                dataset2Id = dataset2Id,
                dataset3Id = dataset3Id
            });
        }
Exemplo n.º 9
0
        private GenerateTokenRequestV2 CreateTokenRequestForReports(IEnumerable <PBIReport> pbiReports)
        {
            var requestReports = pbiReports.Select(pbiReport => new GenerateTokenRequestV2Report()
            {
                Id = pbiReport.Report.Id
            }).ToList();
            var requestDatasets = pbiReports.GroupBy(pbiReport => pbiReport.Report.DatasetId)
                                  .Select(group => new GenerateTokenRequestV2Dataset(group.First().Report.DatasetId)).ToList();
            var requestWorkspaces = new List <GenerateTokenRequestV2TargetWorkspace>()
            {
                new GenerateTokenRequestV2TargetWorkspace(new Guid(this.powerBIOptions.WorkspaceId)),
            };

            var request = new GenerateTokenRequestV2()
            {
                Reports          = requestReports,
                Datasets         = requestDatasets,
                TargetWorkspaces = requestWorkspaces
            };

            return(request);
        }
        public static ReportEmbeddingData GetReportEmbeddingDataAllDatasets()
        {
            PowerBIClient pbiClient = TokenManager.GetPowerBiClient(PowerBiPermissionScopes.TenantReadWriteAll);

            var datasets = pbiClient.Datasets.GetDatasetsInGroup(workspaceId);
            IList <GenerateTokenRequestV2Dataset> datasetRequests = new List <GenerateTokenRequestV2Dataset>();

            foreach (var dataset in datasets.Value)
            {
                datasetRequests.Add(new GenerateTokenRequestV2Dataset(dataset.Id));
            }


            var report     = pbiClient.Reports.GetReportInGroup(workspaceId, reportId);
            var embedUrl   = report.EmbedUrl;
            var reportName = report.Name;

            // create token request object
            IList <GenerateTokenRequestV2Report>          reportRequests    = new GenerateTokenRequestV2Report[] { new GenerateTokenRequestV2Report(report.Id) };
            IList <GenerateTokenRequestV2TargetWorkspace> workspaceRequests = new GenerateTokenRequestV2TargetWorkspace[] { new GenerateTokenRequestV2TargetWorkspace(workspaceId) };


            GenerateTokenRequestV2 tokenRequest =
                new GenerateTokenRequestV2(datasets: datasetRequests,
                                           reports: reportRequests,
                                           targetWorkspaces: workspaceRequests);


            // call to Power BI Service API and pass GenerateTokenRequest object to generate embed token
            string embedToken = pbiClient.EmbedToken.GenerateToken(tokenRequest).Token;

            return(new ReportEmbeddingData {
                reportId = reportId.ToString(),
                reportName = reportName,
                embedUrl = embedUrl,
                accessToken = embedToken
            });
        }
        /// <summary>
        /// Get Embed token for multiple reports, datasets, and optional target workspaces
        /// </summary>
        /// <returns>Embed token</returns>
        /// <remarks>This function is not supported for RDL Report</remakrs>
        public static async Task <EmbedToken> GetEmbedToken(IList <Guid> reportIds, IList <Guid> datasetIds, [Optional] IList <Guid> targetWorkspaceIds)
        {
            // Note: This method is an example and is not consumed in this sample app

            using (var pbiClient = await GetPowerBiClient())
            {
                // Convert report Ids to required types
                var reports = reportIds.Select(reportId => new GenerateTokenRequestV2Report(reportId)).ToList();

                // Convert dataset Ids to required types
                var datasets = datasetIds.Select(datasetId => new GenerateTokenRequestV2Dataset(datasetId.ToString())).ToList();

                // Convert target workspace Ids to required types
                IList <GenerateTokenRequestV2TargetWorkspace> targetWorkspaces = null;
                if (targetWorkspaceIds != null)
                {
                    targetWorkspaces = targetWorkspaceIds.Select(targetWorkspaceId => new GenerateTokenRequestV2TargetWorkspace(targetWorkspaceId)).ToList();
                }

                // Create a request for getting Embed token
                // This method works only with new Power BI V2 workspace experience
                var tokenRequest = new GenerateTokenRequestV2(

                    datasets: datasets,

                    reports: reports,

                    targetWorkspaces: targetWorkspaceIds != null ? targetWorkspaces : null
                    );

                // Generate Embed token
                var embedToken = pbiClient.EmbedToken.GenerateToken(tokenRequest);

                return(embedToken);
            }
        }
        /// <summary>
        /// Generates an embed token for multiple reports, datasets and target
        /// workspaces. Reports and datasets do not have to be related. The binding of
        /// a report to a dataset can be done during embedding. Target workspaces are
        /// workspaces where creation of reports is allowed.&lt;br/&gt;This API is
        /// relevant only to ['App owns data' embed
        /// scenario](https://docs.microsoft.com/power-bi/developer/embed-sample-for-customers).
        /// </summary>
        /// <remarks>
        /// &lt;br/&gt;**Required scope**: &lt;ul&gt;&lt;li&gt;Content.Create -
        /// required only if a target workspace is specified in
        /// [GenerateTokenRequestV2](/rest/api/power-bi/embedtoken/generatetoken#generatetokenrequestv2)&lt;/li&gt;&lt;li&gt;Report.ReadWrite.All
        /// or Report.Read.All - required only if a report is specified in
        /// [GenerateTokenRequestV2](/rest/api/power-bi/embedtoken/generatetoken#generatetokenrequestv2)&lt;/li&gt;&lt;li&gt;Report.ReadWrite.All
        /// - required if allowEdit flag is specified for at least one report in
        /// [GenerateTokenRequestV2](/rest/api/power-bi/embedtoken/generatetoken#generatetokenrequestv2)&lt;/li&gt;&lt;li&gt;Dataset.ReadWrite.All
        /// or Dataset.Read.All&lt;/li&gt;&lt;/ul&gt;To set the permissions scope, see
        /// [Register an
        /// app](https://docs.microsoft.com/power-bi/developer/register-app).&lt;/br&gt;&lt;/br&gt;When
        /// using service principal for authentication, refer to [Service Principal
        /// with Power
        /// BI](https://docs.microsoft.com/power-bi/developer/embed-service-principal)
        /// document along with considerations and limitations section.
        /// &lt;h2&gt;Restrictions&lt;/h2&gt;&lt;li&gt;All the reports and datasets
        /// must reside in workspace V2. All the target workpaces must be workspace
        /// V2.&lt;/li&gt;&lt;li&gt;Maximum number of reports, datasets and target
        /// workspaces is 50 each.&lt;/li&gt;&lt;li&gt;Generating Embed Token with RLS
        /// may not work for AS Azure or AS OnPrem live connection reports for several
        /// minutes after a
        /// [Rebind](/rest/api/power-bi/reports/RebindReport).&lt;/li&gt;&lt;br/&gt;
        /// </remarks>
        /// <param name='requestParameters'>
        /// Generate token parameters
        /// </param>
        /// <param name='customHeaders'>
        /// Headers that will be added to request.
        /// </param>
        /// <param name='cancellationToken'>
        /// The cancellation token.
        /// </param>
        /// <exception cref="HttpOperationException">
        /// Thrown when the operation returned an invalid status code
        /// </exception>
        /// <exception cref="SerializationException">
        /// Thrown when unable to deserialize the response
        /// </exception>
        /// <exception cref="ValidationException">
        /// Thrown when a required parameter is null
        /// </exception>
        /// <exception cref="System.ArgumentNullException">
        /// Thrown when a required parameter is null
        /// </exception>
        /// <return>
        /// A response object containing the response body and response headers.
        /// </return>
        public async Task <HttpOperationResponse <EmbedToken> > GenerateTokenWithHttpMessagesAsync(GenerateTokenRequestV2 requestParameters, Dictionary <string, List <string> > customHeaders = null, CancellationToken cancellationToken = default(CancellationToken))
        {
            if (requestParameters == null)
            {
                throw new ValidationException(ValidationRules.CannotBeNull, "requestParameters");
            }
            // Tracing
            bool   _shouldTrace  = ServiceClientTracing.IsEnabled;
            string _invocationId = null;

            if (_shouldTrace)
            {
                _invocationId = ServiceClientTracing.NextInvocationId.ToString();
                Dictionary <string, object> tracingParameters = new Dictionary <string, object>();
                tracingParameters.Add("requestParameters", requestParameters);
                tracingParameters.Add("cancellationToken", cancellationToken);
                ServiceClientTracing.Enter(_invocationId, this, "GenerateToken", tracingParameters);
            }
            // Construct URL
            var _baseUrl = Client.BaseUri.AbsoluteUri;
            var _url     = new System.Uri(new System.Uri(_baseUrl + (_baseUrl.EndsWith("/") ? "" : "/")), "v1.0/myorg/GenerateToken").ToString();
            // Create HTTP transport objects
            var _httpRequest = new HttpRequestMessage();
            HttpResponseMessage _httpResponse = null;

            _httpRequest.Method     = new HttpMethod("POST");
            _httpRequest.RequestUri = new System.Uri(_url);
            // Set Headers


            if (customHeaders != null)
            {
                foreach (var _header in customHeaders)
                {
                    if (_httpRequest.Headers.Contains(_header.Key))
                    {
                        _httpRequest.Headers.Remove(_header.Key);
                    }
                    _httpRequest.Headers.TryAddWithoutValidation(_header.Key, _header.Value);
                }
            }

            // Serialize Request
            string _requestContent = null;

            if (requestParameters != null)
            {
                _requestContent      = Rest.Serialization.SafeJsonConvert.SerializeObject(requestParameters, Client.SerializationSettings);
                _httpRequest.Content = new StringContent(_requestContent, System.Text.Encoding.UTF8);
                _httpRequest.Content.Headers.ContentType = System.Net.Http.Headers.MediaTypeHeaderValue.Parse("application/json; charset=utf-8");
            }
            // Set Credentials
            if (Client.Credentials != null)
            {
                cancellationToken.ThrowIfCancellationRequested();
                await Client.Credentials.ProcessHttpRequestAsync(_httpRequest, cancellationToken).ConfigureAwait(false);
            }
            // Send Request
            if (_shouldTrace)
            {
                ServiceClientTracing.SendRequest(_invocationId, _httpRequest);
            }
            cancellationToken.ThrowIfCancellationRequested();
            _httpResponse = await Client.HttpClient.SendAsync(_httpRequest, cancellationToken).ConfigureAwait(false);

            if (_shouldTrace)
            {
                ServiceClientTracing.ReceiveResponse(_invocationId, _httpResponse);
            }
            HttpStatusCode _statusCode = _httpResponse.StatusCode;

            cancellationToken.ThrowIfCancellationRequested();
            string _responseContent = null;

            if ((int)_statusCode != 200)
            {
                var ex = new HttpOperationException(string.Format("Operation returned an invalid status code '{0}'", _statusCode));
                if (_httpResponse.Content != null)
                {
                    _responseContent = await _httpResponse.Content.ReadAsStringAsync().ConfigureAwait(false);
                }
                else
                {
                    _responseContent = string.Empty;
                }
                ex.Request  = new HttpRequestMessageWrapper(_httpRequest, _requestContent);
                ex.Response = new HttpResponseMessageWrapper(_httpResponse, _responseContent);
                if (_shouldTrace)
                {
                    ServiceClientTracing.Error(_invocationId, ex);
                }
                _httpRequest.Dispose();
                if (_httpResponse != null)
                {
                    _httpResponse.Dispose();
                }
                throw ex;
            }
            // Create Result
            var _result = new HttpOperationResponse <EmbedToken>();

            _result.Request  = _httpRequest;
            _result.Response = _httpResponse;
            // Deserialize Response
            if ((int)_statusCode == 200)
            {
                _responseContent = await _httpResponse.Content.ReadAsStringAsync().ConfigureAwait(false);

                try
                {
                    _result.Body = Rest.Serialization.SafeJsonConvert.DeserializeObject <EmbedToken>(_responseContent, Client.DeserializationSettings);
                }
                catch (JsonException ex)
                {
                    _httpRequest.Dispose();
                    if (_httpResponse != null)
                    {
                        _httpResponse.Dispose();
                    }
                    throw new SerializationException("Unable to deserialize the response.", _responseContent, ex);
                }
            }
            if (_shouldTrace)
            {
                ServiceClientTracing.Exit(_invocationId, _result);
            }
            return(_result);
        }
 /// <summary>
 /// Generates an embed token for multiple reports, datasets and target
 /// workspaces. Reports and datasets do not have to be related. The binding of
 /// a report to a dataset can be done during embedding. Target workspaces are
 /// workspaces where creation of reports is allowed.&lt;br/&gt;This API is
 /// relevant only to ['App owns data' embed
 /// scenario](https://docs.microsoft.com/power-bi/developer/embed-sample-for-customers).
 /// </summary>
 /// <remarks>
 /// &lt;br/&gt;**Required scope**: &lt;ul&gt;&lt;li&gt;Content.Create -
 /// required only if a target workspace is specified in
 /// [GenerateTokenRequestV2](/rest/api/power-bi/embedtoken/generatetoken#generatetokenrequestv2)&lt;/li&gt;&lt;li&gt;Report.ReadWrite.All
 /// or Report.Read.All - required only if a report is specified in
 /// [GenerateTokenRequestV2](/rest/api/power-bi/embedtoken/generatetoken#generatetokenrequestv2)&lt;/li&gt;&lt;li&gt;Report.ReadWrite.All
 /// - required if allowEdit flag is specified for at least one report in
 /// [GenerateTokenRequestV2](/rest/api/power-bi/embedtoken/generatetoken#generatetokenrequestv2)&lt;/li&gt;&lt;li&gt;Dataset.ReadWrite.All
 /// or Dataset.Read.All&lt;/li&gt;&lt;/ul&gt;To set the permissions scope, see
 /// [Register an
 /// app](https://docs.microsoft.com/power-bi/developer/register-app).&lt;/br&gt;&lt;/br&gt;When
 /// using service principal for authentication, refer to [Service Principal
 /// with Power
 /// BI](https://docs.microsoft.com/power-bi/developer/embed-service-principal)
 /// document along with considerations and limitations section.
 /// &lt;h2&gt;Restrictions&lt;/h2&gt;&lt;li&gt;All the reports and datasets
 /// must reside in workspace V2. All the target workpaces must be workspace
 /// V2.&lt;/li&gt;&lt;li&gt;Maximum number of reports, datasets and target
 /// workspaces is 50 each.&lt;/li&gt;&lt;li&gt;Generating Embed Token with RLS
 /// may not work for AS Azure or AS OnPrem live connection reports for several
 /// minutes after a
 /// [Rebind](/rest/api/power-bi/reports/RebindReport).&lt;/li&gt;&lt;br/&gt;
 /// </remarks>
 /// <param name='operations'>
 /// The operations group for this extension method.
 /// </param>
 /// <param name='requestParameters'>
 /// Generate token parameters
 /// </param>
 /// <param name='cancellationToken'>
 /// The cancellation token.
 /// </param>
 public static async Task <EmbedToken> GenerateTokenAsync(this IEmbedTokenOperations operations, GenerateTokenRequestV2 requestParameters, CancellationToken cancellationToken = default(CancellationToken))
 {
     using (var _result = await operations.GenerateTokenWithHttpMessagesAsync(requestParameters, null, cancellationToken).ConfigureAwait(false))
     {
         return(_result.Body);
     }
 }
 /// <summary>
 /// Generates an embed token for multiple reports, datasets and target
 /// workspaces. Reports and datasets do not have to be related. The binding of
 /// a report to a dataset can be done during embedding. Target workspaces are
 /// workspaces where creation of reports is allowed.&lt;br/&gt;This API is
 /// relevant only to ['App owns data' embed
 /// scenario](https://docs.microsoft.com/power-bi/developer/embed-sample-for-customers).
 /// </summary>
 /// <remarks>
 /// &lt;br/&gt;**Required scope**: &lt;ul&gt;&lt;li&gt;Content.Create -
 /// required only if a target workspace is specified in
 /// [GenerateTokenRequestV2](/rest/api/power-bi/embedtoken/generatetoken#generatetokenrequestv2)&lt;/li&gt;&lt;li&gt;Report.ReadWrite.All
 /// or Report.Read.All - required only if a report is specified in
 /// [GenerateTokenRequestV2](/rest/api/power-bi/embedtoken/generatetoken#generatetokenrequestv2)&lt;/li&gt;&lt;li&gt;Report.ReadWrite.All
 /// - required if allowEdit flag is specified for at least one report in
 /// [GenerateTokenRequestV2](/rest/api/power-bi/embedtoken/generatetoken#generatetokenrequestv2)&lt;/li&gt;&lt;li&gt;Dataset.ReadWrite.All
 /// or Dataset.Read.All&lt;/li&gt;&lt;/ul&gt;To set the permissions scope, see
 /// [Register an
 /// app](https://docs.microsoft.com/power-bi/developer/register-app).&lt;/br&gt;&lt;/br&gt;When
 /// using service principal for authentication, refer to [Service Principal
 /// with Power
 /// BI](https://docs.microsoft.com/power-bi/developer/embed-service-principal)
 /// document along with considerations and limitations section.
 /// &lt;h2&gt;Restrictions&lt;/h2&gt;&lt;li&gt;All the reports and datasets
 /// must reside in workspace V2. All the target workpaces must be workspace
 /// V2.&lt;/li&gt;&lt;li&gt;Maximum number of reports, datasets and target
 /// workspaces is 50 each.&lt;/li&gt;&lt;li&gt;Generating Embed Token with RLS
 /// may not work for AS Azure or AS OnPrem live connection reports for several
 /// minutes after a
 /// [Rebind](/rest/api/power-bi/reports/RebindReport).&lt;/li&gt;&lt;br/&gt;
 /// </remarks>
 /// <param name='operations'>
 /// The operations group for this extension method.
 /// </param>
 /// <param name='requestParameters'>
 /// Generate token parameters
 /// </param>
 public static EmbedToken GenerateToken(this IEmbedTokenOperations operations, GenerateTokenRequestV2 requestParameters)
 {
     return(operations.GenerateTokenAsync(requestParameters).GetAwaiter().GetResult());
 }