有谁获得了有关如何从PowerBi Embeded v2升级到v3的指南?还是v3的教程?

问题描述 投票:0回答:1

这似乎是一场噩梦,请确保将nuget软件包轻松升级到3.11,我认为这是最新的,但是根本没有编译。因此,您修复了编译错误,然后它不起作用。尝试创建PowerBI客户端时出现错误。

获取令牌并创建客户端似乎与v2完全不同。

这是我的代码:

   public PowerBiConfig GetPowerBiConfig(string reportId)
    {

        var result = new PowerBiConfig();
        try
        {
            if (!Guid.TryParse(reportId, out var _))
            {
                result.ErrorMessage = $"Invalid report guid: {reportId}";
                return result;
            }

            var credential = new UserPasswordCredential(_powerBiProMasterUsername, _powerBiProMasterPassword);

            var authenticationContext = new AuthenticationContext(AuthorityUrl);

            // Taken from https://stackoverflow.com/questions/5095183/how-would-i-run-an-async-taskt-method-synchronously
            var authenticationResult = authenticationContext.AcquireTokenAsync(ResourceUrl, dataArchiverSettings.PowerBiApplicationId, credential).GetAwaiter().GetResult();
            if (authenticationResult == null)
            {
                result.ErrorMessage = "Authentication Failed.";
                return result;
            }

            var tokenCredentials = new TokenCredentials(authenticationResult.AccessToken, "Bearer");

            using (var client = new PowerBIClient(new Uri(ApiUrl), tokenCredentials))
            {
                var report = client.Reports.GetReportInGroup(dataArchiverSettings.PowerBiWorkspaceId, reportId);
                if (report == null)
                {
                    result.ErrorMessage = $"No report with the ID {reportId} was found in the workspace.";
                    return result;
                }

                var datasets = client.Datasets.GetDatasetById(dataArchiverSettings.PowerBiWorkspaceId, report.DatasetId);
                result.IsEffectiveIdentityRequired = datasets.IsEffectiveIdentityRequired;
                result.IsEffectiveIdentityRolesRequired = datasets.IsEffectiveIdentityRolesRequired;

                GenerateTokenRequest tokenRequest;

                if (datasets.IsEffectiveIdentityRequired == true)
                {
                    var username = UserHelper.GetCurrentUser();
                    var roles = _userService.GetRolesForUser(username);
                    tokenRequest = new GenerateTokenRequest(accessLevel: "view",
                        identities: new List<EffectiveIdentity>
                        {
                            new EffectiveIdentity(username: username,
                                roles: new List<string> (roles.Select(x=> x.RoleName)),
                                datasets: new List<string> {datasets.Id})
                        });
                }
                else
                {
                    tokenRequest = new GenerateTokenRequest(accessLevel: "view");
                }

                var tokenResponse =
                    client.Reports.GenerateTokenInGroup(dataArchiverSettings.PowerBiWorkspaceId, report.Id,
                        tokenRequest);

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

                // Generate Embed Configuration.
                result.EmbedToken = tokenResponse;
                result.EmbedUrl = report.EmbedUrl;
                result.Id = report.Id.ToString();

                result.WorkloadResourceName = dataArchiverSettings.PowerBiWorkloadResourceName.Trim();
            }

        }
        catch (HttpOperationException exc)
        {
            result.ErrorMessage =
                $"Status: {exc.Response.StatusCode} ({(int)exc.Response.StatusCode})\r\n" +
                $"Response: {exc.Response.Content}\r\n" +
                $"RequestId: {exc.Response.Headers["RequestId"].FirstOrDefault()}";
        }
        catch (Exception exc)
        {
            result.ErrorMessage = exc.ToString();
        }
        return result;
    }
powerbi-embedded
1个回答
0
投票

最接近“升级指南”的是the announcement in Power BI blog。看来您的代码正在使用v2(例如,reportId为字符串,而在v3中则为Guid)。

这里是更改的简要摘要:

关于v3的知识

以下是此版本更新的主要更改:

命名空间重命名:

  • Microsoft.PowerBI.Api.V2更改为Microsoft.PowerBI.Api。>]

  • [Microsoft.PowerBI.Api.Extensions.V2

  • 更改为Microsoft.PowerBI.Api.Extensions]
  • Microsoft.PowerBI.Api.V1

  • 命名空间已删除。
  • SetAllConnections

  • SetAllConnectionsInGroup操作已弃用并标记为过时。您应该改用UpdateDatasourcesUpdateParameters API。
  • [PowerBI工件ID的键入方式已从字符串更改为* Guid,我们建议尽可能使用Guid。

  • *数据集ID是一个例外,它的键入将保留字符串。

  • ODataResponse[List[Object]]类型更改为Objects,因此在响应中返回对象集合。例如,ODataResponse [List [Report]]类型的响应现在将返回Reports集合作为返回类型。

  • 新的凭证类使创建credentialDetails更容易。新类包括:BasicCredentialsWindowsCredentialsOAuth2Credentials等。阅读Configure credentials文章以了解更多信息。

  • 新的加密帮助程序类,在创建CredentialDetails时可以更轻松地进行加密。例如,将AsymmetricKeyEncryptor类与网关公共密钥一起使用:

GatewayPublicKey publicKey = new GatewayPublicKey
{
    Exponent = "...",
    Modulus = "..."
};
CredentialsBase credentials = new BasicCredentials("<USER>", "<PASSWORD>");
var credentialsEncryptor = new AsymmetricKeyEncryptor(publicKey);
var credentialDetails = new CredentialDetails(credentials, PrivacyLevel.None, EncryptedConnection.Encrypted, credentialsEncryptor);

阅读Configure credentials文章以了解更多信息。

  • 字段名称的一致性。
  • 例如,将reportKey,datasetKey,dashboardKey和tileKey更改为reportId,datasetId,dashboardId和tileId。

  • 操作名称的一致性。
  • 例如,使用GetDataset而不是GetDatasetById。受影响的操作名称是导入,数据集,网关和数据源。

  • 对于枚举类型,使用枚举类而不是字符串。
  • 例如,在generateTokenRequest中,我们建议使用TokenAccessLevel.View,而不是显式使用“ view”作为值。

  • [必填字段已标记-一些字段已更改为必填字段,不能再为空。
  • 示例

如果WorkspaceId是字符串,则更改Get Reports调用:

无功报告=等待client.Reports.GetReportsInGroupAsync(WorkspaceId);

var report = await client.Reports.GetReportsInGroupAsync(new Guid(

WorkspaceId );

如果需要字符串,则更改响应处理:

报告= reports.Value.FirstOrDefault(r => r.Id.Equals(ReportId,StringComparison.InvariantCultureIgnoreCase));

报告= reports.Value.FirstOrDefault(r => r.Id 。ToString()

.Equals(ReportId,StringComparison.InvariantCultureIgnoreCase));

更改生成令牌:

var tokenResponse =等待客户端。Reports.GenerateTokenInGroupAsync(WorkspaceId,report.Id,generateTokenRequestParameters);

var tokenResponse =等待客户端。Reports.GenerateTokenInGroupAsync(新Guid(

WorkspaceId ,report.Id,generateTokenRequestParameters);

如果需要字符串,请更改生成令牌响应处理:

m_embedConfig.Id = report.Id;

m_embedConfig.Id = report.Id 。ToString()

;

必填字段不可为空,即过期不可为空,应删除Value属性:

var minutesToExpiration = EmbedToken.Expiration 。Value

– DateTime.UtcNow;

var minutesToExpiration = EmbedToken.Expiration – DateTime.UtcNow;

操作名称的一致性,即使用GetDataset代替GetDatasetById:

var数据集=等待client.Datasets.GetDataset ById

InGroupAsync(WorkspaceId,report.DatasetId);

var数据集=等待client.Datasets.GetDatasetInGroupAsync(new Guid(WorkspaceId),report.DatasetId);

© www.soinside.com 2019 - 2024. All rights reserved.