コード例 #1
0
        public async Task <EmbedConfig> EmbedReport(EmbedReportRequestVM embedReportRequest)
        {
            var embedRequest = new EmbedReportRequest
            {
                Credential = new UserData
                {
                    SecretId      = embedReportRequest.Credential.SecretId,
                    TenantId      = embedReportRequest.Credential.TenantId,
                    ApplicationId = embedReportRequest.Credential.ApplicationId
                },
                EmbedRoles     = embedReportRequest.EmbedRoles,
                ReportId       = embedReportRequest.ReportId,
                EmbedUserName  = embedReportRequest.EmbedUserName,
                WorkSpaceId    = embedReportRequest.WorkSpaceId,
                EmbedReportUrl = embedReportRequest.EmbedReportUrl,
                ParaMeters     = embedReportRequest.ParaMeters.Select(s => new EmbededReportDataSetParam {
                    ParaType = s.ParaType, ParamName = s.ParamName, ParamValue = s.ParamValue
                }).ToArray()
            };
            var result = await _powerService.ClientEmbedReport(embedRequest);

            var responseData = result;

            return(responseData);
        }
コード例 #2
0
        private async Task <bool> UpdateAndRefreshDataSet(PowerBIClient pClient, EmbedReportRequest embedReportRequest, string groupId, string reportId, string dataSetId)
        {
            try
            {
                var dataset = await pClient.Datasets.GetDatasetByIdInGroupWithHttpMessagesAsync(groupId, dataSetId);

                var data = await pClient.Datasets.GetParametersInGroupWithHttpMessagesAsync(groupId, dataSetId);


                var ParamList = new List <UpdateDatasetParameterDetails>();
                ParamList.Add(new UpdateDatasetParameterDetails
                {
                    Name     = "ConnectionUrl",
                    NewValue = embedReportRequest.EmbedReportUrl
                });

                await pClient.Datasets.UpdateParametersInGroupWithHttpMessagesAsync(groupId, dataSetId, new UpdateDatasetParametersRequest { UpdateDetails = ParamList });

                await pClient.Datasets.RefreshDatasetInGroupWithHttpMessagesAsync(groupId, dataSetId);

                await pClient.Reports.RebindReportInGroupWithHttpMessagesAsync(groupId, reportId, new RebindReportRequest { DatasetId = dataset.Body.Id });

                return(true);
            }
            catch (Exception exp)
            {
                return(false);
            }
        }
コード例 #3
0
        public async Task <EmbedConfig> ClientEmbedReport(EmbedReportRequest embedReportRequest)
        {
            if (string.IsNullOrWhiteSpace(embedReportRequest.EmbedReportUrl))
            {
                throw new ValidationException(PowerResource.EmbedReportUrlIsMissingError);
            }

            if (string.IsNullOrWhiteSpace(embedReportRequest.WorkSpaceId))
            {
                throw new ValidationException(PowerResource.ValidationError_EmbedWorkSpaceMissingForClone);
            }

            if (string.IsNullOrWhiteSpace(embedReportRequest.ReportId))
            {
                throw new ValidationException(PowerResource.ValidationError_EmbedReportsMissingError);
            }

            if (embedReportRequest.Credential == null)
            {
                throw new ValidationException(PowerResource.ValidationErrorCredentialMissingError);
            }

            return(await EmbedReport(embedReportRequest));
        }
コード例 #4
0
        private async Task <EmbedConfig> EmbedReport(EmbedReportRequest embedReportRequest)
        {
            var config = new EmbedConfig();

            UserCredential = embedReportRequest.Credential;
            try
            {
                var data = await AuthenticateAsync();

                using (var pClient = new PowerBIClient(new Uri(POWER_BI_API_URL), PTokenCredentials))
                {
                    var groups = await pClient.Groups.GetGroupsWithHttpMessagesAsync();

                    var group = groups.Body.Value.FirstOrDefault(s => s.Id == embedReportRequest.WorkSpaceId);
                    if (group == null)
                    {
                        throw new ValidationException(PowerResource.ValidationErrorParentGroupNotFoundError);
                    }
                    var reports = await pClient.Reports.GetReportsInGroupAsync(group.Id);

                    if (!reports.Value.Any())
                    {
                        config.ErrorMessage = PowerResource.EmbedReportNotFoundError;
                        return(config);
                    }

                    var embeddingReport = reports.Value.FirstOrDefault(s => s.Id == embedReportRequest.ReportId);
                    if (embeddingReport == null)
                    {
                        config.ErrorMessage = PowerResource.EmbedReportNotFoundError;
                    }

                    var dataSet = await pClient.Datasets.GetDatasetByIdInGroupAsync(group.Id, embeddingReport.DatasetId);


                    config.IsEffectiveIdentityRequired      = dataSet.IsEffectiveIdentityRequired;
                    config.IsEffectiveIdentityRolesRequired = dataSet.IsEffectiveIdentityRolesRequired;

                    var upDateResponse = await UpdateAndRefreshDataSet(pClient, embedReportRequest, group.Id, embeddingReport.Id, dataSet.Id);

                    if (upDateResponse)
                    {
                        GenerateTokenRequest generateTokenRequestParameters;
                        if (!string.IsNullOrWhiteSpace(embedReportRequest.EmbedUserName))
                        {
                            var rls = new EffectiveIdentity(embedReportRequest.EmbedUserName, new List <string> {
                                embeddingReport.DatasetId
                            });
                            if (!string.IsNullOrWhiteSpace(embedReportRequest.EmbedRoles))
                            {
                                var rolesList = new List <string>();
                                rolesList.AddRange(embedReportRequest.EmbedRoles.Split(','));
                                rls.Roles = rolesList;
                            }
                            generateTokenRequestParameters = new GenerateTokenRequest(accessLevel: "view", identities: new List <EffectiveIdentity> {
                                rls
                            });
                        }
                        else
                        {
                            generateTokenRequestParameters = new GenerateTokenRequest(accessLevel: "view");
                        }
                        var tokenResponse = await pClient.Reports.GenerateTokenInGroupAsync(group.Id, embeddingReport.Id, generateTokenRequestParameters);

                        if (tokenResponse == null)
                        {
                            config.ErrorMessage = "Failed to generate embed token.";
                            return(config);
                        }

                        config.EmbedToken = tokenResponse;
                        config.EmbedUrl   = embeddingReport.EmbedUrl;
                        config.Id         = embeddingReport.Id;
                        return(config);
                    }
                }
            }
            catch (Exception e)
            {
                Console.WriteLine(e);
                throw;
            }
            return(null);
        }