From 13c4cac690e49c550b5e6bf534b8b6ada4b46355 Mon Sep 17 00:00:00 2001 From: Yusheng Shu Date: Fri, 9 Aug 2024 17:18:27 +1000 Subject: [PATCH 1/5] Updated embed generated with report selection feature --- .../PBIEmbedGenerator/Program.cs | 270 ++++++------------ .../PBIPayloadGenerator/PBIPageDefinition.cs | 6 +- .../PBIPayloadGenerator/input.xlsx | Bin 18362 -> 18347 bytes 3 files changed, 88 insertions(+), 188 deletions(-) diff --git a/samples/PowerBi/EmbedYourPBIApp/PBIEmbedGenerator/Program.cs b/samples/PowerBi/EmbedYourPBIApp/PBIEmbedGenerator/Program.cs index 5d1cf7ce..6d957dff 100644 --- a/samples/PowerBi/EmbedYourPBIApp/PBIEmbedGenerator/Program.cs +++ b/samples/PowerBi/EmbedYourPBIApp/PBIEmbedGenerator/Program.cs @@ -250,206 +250,106 @@ public static string GeneratePBIRCExtensionActionCode(XmlNode action, StringBuil public static string GeneratePBIEmbedPageCode(string alNamespace, XmlNode query, Version version) { StringBuilder sb = new StringBuilder(); - string context = query.Attributes["id"].Value + "-" + query.Attributes["name"].Value; - /* - // Auto-generated al file for PBI embed page - // - // Adding a PBI embed page for this PBI content: - // PBI ReportId = '' - // PBI ReportName = '' - - namespace Microsoft.PowerBIApps - - page "" - { - UsageCategory = ReportsAndAnalysis; - Caption = ''; - AboutTitle = ''; - AboutText = ''; - - layout - { - area(Content) - { - part(EmbeddedReport; "Power BI Embedded Report Part") - { - Caption = 'Financial Overview'; - SubPageView = where(Context = const('-')); - ApplicationArea = All; - } - } - } - */ - - sb.AppendLine("// Auto-generated al file for PBI embed page " + query.Attributes["id"].Value); - sb.AppendLine("// "); - sb.AppendLine("// Adding a PBI embed page for this PBI content:"); - sb.AppendLine("// PBI ReportId = '" + query.Attributes["PBIReportId"].Value); - sb.AppendLine("// PBI ReportName = '" + query.Attributes["PBIReportName"].Value); + sb.AppendLine($"// Auto-generated al file for PBI embed page {query.Attributes["id"].Value}"); + sb.AppendLine($"// Report: {query.Attributes["PBIReportName"].Value}"); + sb.AppendLine($"// Page: {query.Attributes["PBIReportPage"].Value}"); sb.AppendLine(""); - - sb.AppendLine("namespace " + alNamespace); + sb.AppendLine($"namespace {alNamespace};"); sb.AppendLine(""); - - sb.AppendLine("page " + query.Attributes["id"].Value + " \"" + query.Attributes["name"].Value + "\""); + sb.AppendLine("using Microsoft.PowerBIReports;"); + sb.AppendLine("using System.Integration.PowerBI;"); + sb.AppendLine("using System.Environment.Configuration;"); + sb.AppendLine(""); + sb.AppendLine($"page {query.Attributes["id"].Value} \"{query.Attributes["name"].Value}\""); sb.AppendLine("{"); - - indentAppendLine(sb, 1, "UsageCategory = ReportsAndAnalysis;"); - indentAppendLine(sb, 1, "Caption = '" + query.Attributes["caption"].Value + "';"); - indentAppendLine(sb, 1, "AboutTitle = '" + query.Attributes["aboutTitle"].Value + "'; "); - indentAppendLine(sb, 1, "AboutText = '" + query.Attributes["aboutText"].Value + "'; "); + sb.AppendLine(" UsageCategory = ReportsAndAnalysis;"); + sb.AppendLine($" Caption = '{query.Attributes["caption"].Value}';"); + sb.AppendLine($" AboutTitle = '{query.Attributes["aboutTitle"].Value}';"); + sb.AppendLine($" AboutText = '{query.Attributes["aboutText"].Value}';"); sb.AppendLine(""); - - indentAppendLine(sb, 1, "layout"); - indentAppendLine(sb, 1, "{"); - - indentAppendLine(sb, 2, "area(Content)"); - indentAppendLine(sb, 2, "{"); - - indentAppendLine(sb, 3, "part(EmbeddedReport; \"Power BI Embedded Report Part\")"); - indentAppendLine(sb, 3, "{"); - - indentAppendLine(sb, 4, "ApplicationArea = All;"); - indentAppendLine(sb, 4, "Caption = '" + query.Attributes["caption"].Value + "';"); - indentAppendLine(sb, 4, "SubPageView = where(Context = const ('" + context + "'));"); - - indentAppendLine(sb, 3, "}"); - - indentAppendLine(sb, 2, "}"); - - indentAppendLine(sb, 1, "}"); + sb.AppendLine(" layout"); + sb.AppendLine(" {"); + sb.AppendLine(" area(Content)"); + sb.AppendLine(" {"); + sb.AppendLine(" usercontrol(PowerBIAddin; PowerBIManagement)"); + sb.AppendLine(" {"); + sb.AppendLine(" ApplicationArea = All;"); sb.AppendLine(""); - - /* - trigger OnOpenPage() - var - PowerBIDisplayedElement: Record "Power BI Displayed Element"; - PowerBIServiceMgt: Codeunit "Power BI Service Mgt."; - begin - EnsureUserAcceptedPowerBITerms(); - - // Cleanup previously added reports for this context - PowerBIDisplayedElement.SetRange(Context, vContext); - PowerBIDisplayedElement.DeleteAll(); - PowerBIDisplayedElement.SetRange(Context); - - // Add the report - PowerBIServiceMgt.AddReportForContext(vReportId, vContext); - - // Customize page and other settings - PowerBIDisplayedElement.Get(UserSecurityId(), vContext, PowerBIDisplayedElement.MakeReportKey(vReportId), - PowerBIDisplayedElement.ElementType::Report); - PowerBIDisplayedElement.ReportPage := vReportPage; - PowerBIDisplayedElement.ShowPanesInExpandedMode := true; - PowerBIDisplayedElement.ShowPanesInNormalMode := true; - PowerBIDisplayedElement.Modify(); - - CurrPage.EmbeddedReport.Page.SetFullPageMode(true); - end; - */ - indentAppendLine(sb, 1, "trigger OnOpenPage()"); - indentAppendLine(sb, 1, "var"); - - indentAppendLine(sb, 2, "PowerBIDisplayedElement: Record \"Power BI Displayed Element\";"); - indentAppendLine(sb, 2, "PowerBIServiceMgt: Codeunit \"Power BI Service Mgt.\";"); - - indentAppendLine(sb, 1, "begin"); - - indentAppendLine(sb, 2, "EnsureUserAcceptedPowerBITerms();"); + sb.AppendLine(" trigger ControlAddInReady()"); + sb.AppendLine(" begin"); + sb.AppendLine(" InitializeAddIn();"); + sb.AppendLine(" end;"); sb.AppendLine(""); - indentAppendLine(sb, 2, "// Cleanup previously added reports for this context"); - indentAppendLine(sb, 2, "PowerBIDisplayedElement.SetRange(Context, vContext);"); - indentAppendLine(sb, 2, "PowerBIDisplayedElement.DeleteAll();"); - indentAppendLine(sb, 2, "PowerBIDisplayedElement.SetRange(Context);"); + sb.AppendLine(" trigger ErrorOccurred(Operation: Text; ErrorText: Text)"); + sb.AppendLine(" begin"); + sb.AppendLine(" ShowErrorNotification(Operation, ErrorText);"); + sb.AppendLine(" end;"); + sb.AppendLine(" }"); + sb.AppendLine(" }"); + sb.AppendLine(" }"); sb.AppendLine(""); - indentAppendLine(sb, 2, "// Add the report"); - indentAppendLine(sb, 2, "PowerBIServiceMgt.AddReportForContext(vReportId, vContext);"); + sb.AppendLine(" actions"); + sb.AppendLine(" {"); + sb.AppendLine(" area(processing)"); + sb.AppendLine(" {"); + sb.AppendLine(" action(FullScreen)"); + sb.AppendLine(" {"); + sb.AppendLine(" ApplicationArea = All;"); + sb.AppendLine(" Caption = 'Fullscreen';"); + sb.AppendLine(" ToolTip = 'Shows the Power BI element as full screen.';"); + sb.AppendLine(" Image = View;"); + sb.AppendLine(" Visible = false;"); sb.AppendLine(""); - indentAppendLine(sb, 2, "// Customize page and other settings"); - indentAppendLine(sb, 2, "PowerBIDisplayedElement.Get(UserSecurityId(), vContext, PowerBIDisplayedElement.MakeReportKey(vReportId), PowerBIDisplayedElement.ElementType::Report);"); - indentAppendLine(sb, 2, "PowerBIDisplayedElement.ReportPage := vReportPage;"); - indentAppendLine(sb, 2, "PowerBIDisplayedElement.ShowPanesInExpandedMode := true;"); - indentAppendLine(sb, 2, "PowerBIDisplayedElement.ShowPanesInNormalMode := true;"); - indentAppendLine(sb, 2, "PowerBIDisplayedElement.Modify();"); + sb.AppendLine(" trigger OnAction()"); + sb.AppendLine(" begin"); + sb.AppendLine(" CurrPage.PowerBIAddin.FullScreen();"); + sb.AppendLine(" end;"); + sb.AppendLine(" }"); + sb.AppendLine(" }"); + sb.AppendLine(" }"); sb.AppendLine(""); - - if (version == new Version() | version >= new Version("24.2")) - { - indentAppendLine(sb, 2, "CurrPage.EmbeddedReport.Page.SetFullPageMode(true);"); - } - - indentAppendLine(sb, 1, "end;"); + sb.AppendLine(" var"); + sb.AppendLine(" ReportId: Guid;"); + sb.AppendLine($" ReportPageTok: Label '{query.Attributes["PBIReportPage"].Value}', Locked = true;"); + sb.AppendLine(" ErrorNotificationMsg: Label 'An error occurred while loading Power BI. Your Power BI embedded content might not work. Here are the error details: \"%1: %2\"', Comment = '%1: a short error code. %2: a verbose error message in english';"); + sb.AppendLine(" PowerBIEmbedReportUrlTemplateTxt: Label 'https://app.powerbi.com/reportEmbed?reportId=%1', Locked = true;"); sb.AppendLine(""); - - /* - local procedure EnsureUserAcceptedPowerBITerms() - var - PowerBIContextSettings: Record "Power BI Context Settings"; - PowerBIEmbedSetupWizard: Page "Power BI Embed Setup Wizard"; - begin - PowerBIContextSettings.SetRange(UserSID, UserSecurityId()); - if PowerBIContextSettings.IsEmpty() then begin - PowerBIEmbedSetupWizard.SetContext(vContext); - if PowerBIEmbedSetupWizard.RunModal() <> Action::OK then; - - if PowerBIContextSettings.IsEmpty() then - Error(PowerBiNotSetupErr); - end; - - PowerBIContextSettings.CreateOrReadForCurrentUser(vContext); - if not PowerBIContextSettings.LockToSelectedElement then begin - PowerBIContextSettings.LockToSelectedElement := true; - PowerBIContextSettings.Modify(); - end; - end; - */ - indentAppendLine(sb, 1, "local procedure EnsureUserAcceptedPowerBITerms()"); - indentAppendLine(sb, 1, "var"); - - indentAppendLine(sb, 2, "PowerBIContextSettings: Record \"Power BI Context Settings\";"); - indentAppendLine(sb, 2, "PowerBIEmbedSetupWizard: Page \"Power BI Embed Setup Wizard\";"); - - indentAppendLine(sb, 1, "begin"); - - indentAppendLine(sb, 2, "PowerBIContextSettings.SetRange(UserSID, UserSecurityId());"); - indentAppendLine(sb, 2, "if PowerBIContextSettings.IsEmpty() then begin"); - - indentAppendLine(sb, 3, "PowerBIEmbedSetupWizard.SetContext(vContext);"); - indentAppendLine(sb, 3, "if PowerBIEmbedSetupWizard.RunModal() <> Action::OK then;"); + sb.AppendLine(" trigger OnOpenPage()"); + sb.AppendLine(" var"); + sb.AppendLine(" PowerBIReportsSetup: Record \"PowerBI Reports Setup\";"); + sb.AppendLine(" begin"); + sb.AppendLine(" PowerBIReportsSetup.EnsureUserAcceptedPowerBITerms();"); sb.AppendLine(""); - indentAppendLine(sb, 3, "if PowerBIContextSettings.IsEmpty() then"); - - indentAppendLine(sb, 4, "Error(PowerBiNotSetupErr);"); - - indentAppendLine(sb, 2, "end;"); + sb.AppendLine(" // Replace with your own report id"); + sb.AppendLine($" ReportId := PowerBIReportsSetup.GetReportIdAndEnsureSetup(CurrPage.Caption(), PowerBIReportsSetup.FieldNo(\"{query.Attributes["PBIReportIdFieldName"].Value}\"));"); + sb.AppendLine(" end;"); sb.AppendLine(""); - indentAppendLine(sb, 2, "PowerBIContextSettings.CreateOrReadForCurrentUser(vContext);"); - indentAppendLine(sb, 2, "if not PowerBIContextSettings.LockToSelectedElement then begin"); - - indentAppendLine(sb, 3, "PowerBIContextSettings.LockToSelectedElement := true;"); - indentAppendLine(sb, 3, "PowerBIContextSettings.Modify();"); - - indentAppendLine(sb, 2, "end;"); - - indentAppendLine(sb, 1, "end;"); + sb.AppendLine(" local procedure ShowErrorNotification(ErrorCategory: Text; ErrorMessage: Text)"); + sb.AppendLine(" var"); + sb.AppendLine(" PowerBIContextSettings: Record \"Power BI Context Settings\";"); + sb.AppendLine(" NotificationLifecycleMgt: Codeunit \"Notification Lifecycle Mgt.\";"); + sb.AppendLine(" Notify: Notification;"); + sb.AppendLine(" begin"); + sb.AppendLine(" Notify.Id := CreateGuid();"); + sb.AppendLine(" Notify.Message(StrSubstNo(ErrorNotificationMsg, ErrorCategory, ErrorMessage));"); + sb.AppendLine(" Notify.Scope := NotificationScope::LocalScope;"); sb.AppendLine(""); - - /* - var - PowerBiNotSetupErr: Label 'Power BI is not set up. You need to set up Power BI in order to see this report.'; - vReportId: Label '', Locked = true; - vReportPage: Label '', Locked = true; - vContext: Label '-', MaxLength = 30, Locked = true, Comment = 'IMPORTANT: keep it unique across pages. Also, make sure this value is the same used in the SubPageView above.'; - */ - indentAppendLine(sb, 1, "var"); - - indentAppendLine(sb, 2, "PowerBiNotSetupErr: Label 'Power BI is not set up. You need to set up Power BI in order to see this report.';"); - indentAppendLine(sb, 2, "vReportId: Label '" + query.Attributes["PBIReportId"].Value + "', Locked = true;"); - indentAppendLine(sb, 2, "vReportPage: Label '" + query.Attributes["PBIReportPage"].Value + "', Locked = true;"); - indentAppendLine(sb, 2, "vContext: Label '" + context + "', MaxLength = 30, Locked = true, Comment = 'IMPORTANT: keep it unique across pages. Also, make sure this value is the same used in the SubPageView above.';"); - + sb.AppendLine(" NotificationLifecycleMgt.SendNotification(Notify, PowerBIContextSettings.RecordId());"); + sb.AppendLine(" end;"); + sb.AppendLine(""); + sb.AppendLine(" local procedure InitializeAddIn()"); + sb.AppendLine(" var"); + sb.AppendLine(" PowerBIServiceMgt: Codeunit \"Power BI Service Mgt.\";"); + sb.AppendLine(" begin"); + sb.AppendLine(" PowerBiServiceMgt.InitializeAddinToken(CurrPage.PowerBIAddin);"); + sb.AppendLine(" CurrPage.PowerBIAddin.SetSettings(false, true, false, false, false, false, true);"); sb.AppendLine(""); + sb.AppendLine(" CurrPage.PowerBIAddin.EmbedPowerBIReport("); + sb.AppendLine(" StrSubstNo(PowerBIEmbedReportUrlTemplateTxt, ReportId),"); + sb.AppendLine(" ReportId,"); + sb.AppendLine(" ReportPageTok);"); + sb.AppendLine(" end;"); sb.AppendLine("}"); return sb.ToString(); diff --git a/samples/PowerBi/EmbedYourPBIApp/PBIPayloadGenerator/PBIPageDefinition.cs b/samples/PowerBi/EmbedYourPBIApp/PBIPayloadGenerator/PBIPageDefinition.cs index dc540d6f..f1ae8241 100644 --- a/samples/PowerBi/EmbedYourPBIApp/PBIPayloadGenerator/PBIPageDefinition.cs +++ b/samples/PowerBi/EmbedYourPBIApp/PBIPayloadGenerator/PBIPageDefinition.cs @@ -18,7 +18,7 @@ internal class PBIPageDefinition string caption { get; set; } string aboutTitle { get; set; } string aboutText { get; set; } - string PBIReportId { get; set; } + string PBIReportIdFieldName { get; set; } string PBIReportName { get; set; } string PBIReportPage { get; set; } @@ -33,7 +33,7 @@ public PBIPageDefinition( this.caption = caption; this.aboutTitle = aboutTitle; this.aboutText = aboutText; - this.PBIReportId = PBIReportId; + this.PBIReportIdFieldName = PBIReportId; this.PBIReportName = PBIReportName; this.PBIReportPage = PBIReportPage; } @@ -48,7 +48,7 @@ public XElement asXElement() new XAttribute("caption", caption), new XAttribute("aboutTitle", aboutTitle), new XAttribute("aboutText", aboutText), - new XAttribute("PBIReportId", PBIReportId), + new XAttribute("PBIReportIdFieldName", PBIReportIdFieldName), new XAttribute("PBIReportName", PBIReportName), new XAttribute("PBIReportPage", PBIReportPage) ); diff --git a/samples/PowerBi/EmbedYourPBIApp/PBIPayloadGenerator/input.xlsx b/samples/PowerBi/EmbedYourPBIApp/PBIPayloadGenerator/input.xlsx index 363b60ec44ae890fab4aedcef706040077f5293d..83a139e4f8ee6cd2a4fd93351f765dbaa093be5d 100644 GIT binary patch delta 5776 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 M^}8fZivMi=2i3Zx(*OVf From 1c1fe512b71607b5d3ce7fb0b1952c423ea2b81e Mon Sep 17 00:00:00 2001 From: Yusheng Shu Date: Tue, 13 Aug 2024 10:29:08 +1000 Subject: [PATCH 2/5] Updated generated names --- .../PBIEmbedGenerator/Program.cs | 19 ++++++++++++------ .../PBIPayloadGenerator/Program.cs | 3 ++- .../RCExtensionDefinition.cs | 9 +++++++-- .../PBIPayloadGenerator/input.xlsx | Bin 18347 -> 19725 bytes 4 files changed, 22 insertions(+), 9 deletions(-) diff --git a/samples/PowerBi/EmbedYourPBIApp/PBIEmbedGenerator/Program.cs b/samples/PowerBi/EmbedYourPBIApp/PBIEmbedGenerator/Program.cs index 6d957dff..d73906d0 100644 --- a/samples/PowerBi/EmbedYourPBIApp/PBIEmbedGenerator/Program.cs +++ b/samples/PowerBi/EmbedYourPBIApp/PBIEmbedGenerator/Program.cs @@ -154,7 +154,9 @@ pageextension 50100 BusinessManagerRoleCenterExt extends "Business Manager Role } sb.AppendLine(""); - sb.AppendLine("namespace " + alNamespace); + sb.AppendLine($"namespace {alNamespace};"); + sb.AppendLine(""); + sb.AppendLine($"using {rcExt.Attributes["rolecenternamespace"].Value};"); sb.AppendLine(""); sb.AppendLine("pageextension " + rcExt.Attributes["id"].Value + " \"" + rcExt.Attributes["name"].Value + "\" extends \"" + rcExt.Attributes["extends"].Value + "\""); @@ -220,7 +222,7 @@ public static string GeneratePBIRCExtensionActionCode(XmlNode action, StringBuil sb.AppendLine(""); indents(sb, 4); - sb.AppendLine("action(" + action.Attributes["name"].Value + ")"); + sb.AppendLine($"action(\"{action.Attributes["name"].Value}\")"); indents(sb, 4); sb.AppendLine("{"); @@ -246,7 +248,6 @@ public static string GeneratePBIRCExtensionActionCode(XmlNode action, StringBuil return sb.ToString(); } - public static string GeneratePBIEmbedPageCode(string alNamespace, XmlNode query, Version version) { StringBuilder sb = new StringBuilder(); @@ -380,7 +381,7 @@ permissionset 50120 "Power BI Finance App - Objects" indentAppendLine(sb, 0, "// Auto-generated al file for PBI permissions " + permSet.Attributes["id"].Value); indentAppendLine(sb, 0, ""); - indentAppendLine(sb, 0, "namespace " + alNamespace); + indentAppendLine(sb, 0, $"namespace {alNamespace};"); indentAppendLine(sb, 0, ""); indentAppendLine(sb, 0, "permissionset " + permSet.Attributes["id"].Value + " \"" + permSet.Attributes["name"].Value + "\""); indentAppendLine(sb, 0, "{"); @@ -390,8 +391,14 @@ permissionset 50120 "Power BI Finance App - Objects" foreach (XmlNode page in pages.SelectNodes("page")) { - indentAppendLine(sb, 2, "page \"" + page.Attributes["name"].Value + "\" = X,"); - } + if (page.Attributes["name"].Value == pages.LastChild.Attributes["name"].Value) + { + indentAppendLine(sb, 2, "page \"" + page.Attributes["name"].Value + "\" = X;"); + } else + { + indentAppendLine(sb, 2, "page \"" + page.Attributes["name"].Value + "\" = X,"); + } + } indentAppendLine(sb, 0, "}"); diff --git a/samples/PowerBi/EmbedYourPBIApp/PBIPayloadGenerator/Program.cs b/samples/PowerBi/EmbedYourPBIApp/PBIPayloadGenerator/Program.cs index 66279ede..09bc1f86 100644 --- a/samples/PowerBi/EmbedYourPBIApp/PBIPayloadGenerator/Program.cs +++ b/samples/PowerBi/EmbedYourPBIApp/PBIPayloadGenerator/Program.cs @@ -267,7 +267,8 @@ static private void ExcelRowstoRCExtensionDefinitions(List RCExtension row[2], row[3], row[4], - row[5] + row[5], + row[6] ); if (!row[0].Equals("id")) diff --git a/samples/PowerBi/EmbedYourPBIApp/PBIPayloadGenerator/RCExtensionDefinition.cs b/samples/PowerBi/EmbedYourPBIApp/PBIPayloadGenerator/RCExtensionDefinition.cs index 485ede42..6078f911 100644 --- a/samples/PowerBi/EmbedYourPBIApp/PBIPayloadGenerator/RCExtensionDefinition.cs +++ b/samples/PowerBi/EmbedYourPBIApp/PBIPayloadGenerator/RCExtensionDefinition.cs @@ -17,6 +17,8 @@ internal class RCExtensionDefinition string where { get; set; } string tooltip { get; set; } + string rolecenternamespace { get; set; } + //id = "50140" //name = "BusinessManagerRoleCenterExt" //filename = "BusinessManagerRoleCenterExt.PageExtension" @@ -36,7 +38,8 @@ public RCExtensionDefinition( string filename, string extends, string where, - string tooltip + string tooltip, + string rolecenternamespace ) { this.id = id; @@ -45,6 +48,7 @@ string tooltip this.extends = extends; this.where = where; this.tooltip = tooltip; + this.rolecenternamespace = rolecenternamespace; } @@ -56,7 +60,8 @@ public XElement asXElement() new XAttribute("filename", filename), new XAttribute("extends", extends), new XAttribute("where", where), - new XAttribute("tooltip", tooltip) + new XAttribute("tooltip", tooltip), + new XAttribute("rolecenternamespace", rolecenternamespace) ); foreach(ActionDefinition action in actions) diff --git a/samples/PowerBi/EmbedYourPBIApp/PBIPayloadGenerator/input.xlsx b/samples/PowerBi/EmbedYourPBIApp/PBIPayloadGenerator/input.xlsx index 83a139e4f8ee6cd2a4fd93351f765dbaa093be5d..4e170fd3375061afbab37a4d66bc3c103fff4624 100644 GIT binary patch delta 8588 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 delta 7373 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 From 7132a7995cbbb758094b37b7773e0810940343bb Mon Sep 17 00:00:00 2001 From: Yusheng Shu Date: Fri, 16 Aug 2024 14:06:14 +1000 Subject: [PATCH 3/5] Updated report id and page code --- .../PBIEmbedGenerator/Program.cs | 8 ++++---- .../PBIPayloadGenerator/input.xlsx | Bin 19725 -> 19589 bytes 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/samples/PowerBi/EmbedYourPBIApp/PBIEmbedGenerator/Program.cs b/samples/PowerBi/EmbedYourPBIApp/PBIEmbedGenerator/Program.cs index d73906d0..55eb07b2 100644 --- a/samples/PowerBi/EmbedYourPBIApp/PBIEmbedGenerator/Program.cs +++ b/samples/PowerBi/EmbedYourPBIApp/PBIEmbedGenerator/Program.cs @@ -312,7 +312,7 @@ public static string GeneratePBIEmbedPageCode(string alNamespace, XmlNode query, sb.AppendLine(""); sb.AppendLine(" var"); sb.AppendLine(" ReportId: Guid;"); - sb.AppendLine($" ReportPageTok: Label '{query.Attributes["PBIReportPage"].Value}', Locked = true;"); + sb.AppendLine(" ReportPage: Text;"); sb.AppendLine(" ErrorNotificationMsg: Label 'An error occurred while loading Power BI. Your Power BI embedded content might not work. Here are the error details: \"%1: %2\"', Comment = '%1: a short error code. %2: a verbose error message in english';"); sb.AppendLine(" PowerBIEmbedReportUrlTemplateTxt: Label 'https://app.powerbi.com/reportEmbed?reportId=%1', Locked = true;"); sb.AppendLine(""); @@ -322,8 +322,8 @@ public static string GeneratePBIEmbedPageCode(string alNamespace, XmlNode query, sb.AppendLine(" begin"); sb.AppendLine(" PowerBIReportsSetup.EnsureUserAcceptedPowerBITerms();"); sb.AppendLine(""); - sb.AppendLine(" // Replace with your own report id"); - sb.AppendLine($" ReportId := PowerBIReportsSetup.GetReportIdAndEnsureSetup(CurrPage.Caption(), PowerBIReportsSetup.FieldNo(\"{query.Attributes["PBIReportIdFieldName"].Value}\"));"); + sb.AppendLine(" // Replace with your own report id and page"); + sb.AppendLine($" PowerBIReportsSetup.GetReportIdAndEnsureSetup(PowerBIReportsSetup.FieldNo(\"{query.Attributes["PBIReportIdFieldName"].Value}\"), Enum::\"Embedded Report Type\"::\"{query.Attributes["PBIReportPage"].Value}\", ReportId, ReportPage);"); sb.AppendLine(" end;"); sb.AppendLine(""); sb.AppendLine(" local procedure ShowErrorNotification(ErrorCategory: Text; ErrorMessage: Text)"); @@ -349,7 +349,7 @@ public static string GeneratePBIEmbedPageCode(string alNamespace, XmlNode query, sb.AppendLine(" CurrPage.PowerBIAddin.EmbedPowerBIReport("); sb.AppendLine(" StrSubstNo(PowerBIEmbedReportUrlTemplateTxt, ReportId),"); sb.AppendLine(" ReportId,"); - sb.AppendLine(" ReportPageTok);"); + sb.AppendLine(" ReportPage);"); sb.AppendLine(" end;"); sb.AppendLine("}"); diff --git a/samples/PowerBi/EmbedYourPBIApp/PBIPayloadGenerator/input.xlsx b/samples/PowerBi/EmbedYourPBIApp/PBIPayloadGenerator/input.xlsx index 4e170fd3375061afbab37a4d66bc3c103fff4624..edd0667cc7c0c4ed3b8eb6641b08c90be84e2fc1 100644 GIT binary patch delta 5223 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 F{{i~^$4LMH From a43aabe14a668db548fabdb35846b22bb18db1a8 Mon Sep 17 00:00:00 2001 From: Yusheng Shu Date: Tue, 20 Aug 2024 10:42:44 +1000 Subject: [PATCH 4/5] Revert "Updated report id and page code" This reverts commit 7132a7995cbbb758094b37b7773e0810940343bb. --- .../PBIEmbedGenerator/Program.cs | 8 ++++---- .../PBIPayloadGenerator/input.xlsx | Bin 19589 -> 19725 bytes 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/samples/PowerBi/EmbedYourPBIApp/PBIEmbedGenerator/Program.cs b/samples/PowerBi/EmbedYourPBIApp/PBIEmbedGenerator/Program.cs index 55eb07b2..d73906d0 100644 --- a/samples/PowerBi/EmbedYourPBIApp/PBIEmbedGenerator/Program.cs +++ b/samples/PowerBi/EmbedYourPBIApp/PBIEmbedGenerator/Program.cs @@ -312,7 +312,7 @@ public static string GeneratePBIEmbedPageCode(string alNamespace, XmlNode query, sb.AppendLine(""); sb.AppendLine(" var"); sb.AppendLine(" ReportId: Guid;"); - sb.AppendLine(" ReportPage: Text;"); + sb.AppendLine($" ReportPageTok: Label '{query.Attributes["PBIReportPage"].Value}', Locked = true;"); sb.AppendLine(" ErrorNotificationMsg: Label 'An error occurred while loading Power BI. Your Power BI embedded content might not work. Here are the error details: \"%1: %2\"', Comment = '%1: a short error code. %2: a verbose error message in english';"); sb.AppendLine(" PowerBIEmbedReportUrlTemplateTxt: Label 'https://app.powerbi.com/reportEmbed?reportId=%1', Locked = true;"); sb.AppendLine(""); @@ -322,8 +322,8 @@ public static string GeneratePBIEmbedPageCode(string alNamespace, XmlNode query, sb.AppendLine(" begin"); sb.AppendLine(" PowerBIReportsSetup.EnsureUserAcceptedPowerBITerms();"); sb.AppendLine(""); - sb.AppendLine(" // Replace with your own report id and page"); - sb.AppendLine($" PowerBIReportsSetup.GetReportIdAndEnsureSetup(PowerBIReportsSetup.FieldNo(\"{query.Attributes["PBIReportIdFieldName"].Value}\"), Enum::\"Embedded Report Type\"::\"{query.Attributes["PBIReportPage"].Value}\", ReportId, ReportPage);"); + sb.AppendLine(" // Replace with your own report id"); + sb.AppendLine($" ReportId := PowerBIReportsSetup.GetReportIdAndEnsureSetup(CurrPage.Caption(), PowerBIReportsSetup.FieldNo(\"{query.Attributes["PBIReportIdFieldName"].Value}\"));"); sb.AppendLine(" end;"); sb.AppendLine(""); sb.AppendLine(" local procedure ShowErrorNotification(ErrorCategory: Text; ErrorMessage: Text)"); @@ -349,7 +349,7 @@ public static string GeneratePBIEmbedPageCode(string alNamespace, XmlNode query, sb.AppendLine(" CurrPage.PowerBIAddin.EmbedPowerBIReport("); sb.AppendLine(" StrSubstNo(PowerBIEmbedReportUrlTemplateTxt, ReportId),"); sb.AppendLine(" ReportId,"); - sb.AppendLine(" ReportPage);"); + sb.AppendLine(" ReportPageTok);"); sb.AppendLine(" end;"); sb.AppendLine("}"); diff --git a/samples/PowerBi/EmbedYourPBIApp/PBIPayloadGenerator/input.xlsx b/samples/PowerBi/EmbedYourPBIApp/PBIPayloadGenerator/input.xlsx index edd0667cc7c0c4ed3b8eb6641b08c90be84e2fc1..4e170fd3375061afbab37a4d66bc3c103fff4624 100644 GIT binary patch delta 5366 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 F{{i~^$4LMH delta 5223 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 u(!jiyJa}CeVAYlZK> Date: Tue, 20 Aug 2024 10:58:29 +1000 Subject: [PATCH 5/5] Updated for moved functions --- samples/PowerBi/EmbedYourPBIApp/PBIEmbedGenerator/Program.cs | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/samples/PowerBi/EmbedYourPBIApp/PBIEmbedGenerator/Program.cs b/samples/PowerBi/EmbedYourPBIApp/PBIEmbedGenerator/Program.cs index d73906d0..af4345bd 100644 --- a/samples/PowerBi/EmbedYourPBIApp/PBIEmbedGenerator/Program.cs +++ b/samples/PowerBi/EmbedYourPBIApp/PBIEmbedGenerator/Program.cs @@ -319,11 +319,12 @@ public static string GeneratePBIEmbedPageCode(string alNamespace, XmlNode query, sb.AppendLine(" trigger OnOpenPage()"); sb.AppendLine(" var"); sb.AppendLine(" PowerBIReportsSetup: Record \"PowerBI Reports Setup\";"); + sb.AppendLine(" SetupHelper: Codeunit \"Setup Helper\";"); sb.AppendLine(" begin"); - sb.AppendLine(" PowerBIReportsSetup.EnsureUserAcceptedPowerBITerms();"); + sb.AppendLine(" SetupHelper.EnsureUserAcceptedPowerBITerms();"); sb.AppendLine(""); sb.AppendLine(" // Replace with your own report id"); - sb.AppendLine($" ReportId := PowerBIReportsSetup.GetReportIdAndEnsureSetup(CurrPage.Caption(), PowerBIReportsSetup.FieldNo(\"{query.Attributes["PBIReportIdFieldName"].Value}\"));"); + sb.AppendLine($" ReportId := SetupHelper.GetReportIdAndEnsureSetup(CurrPage.Caption(), PowerBIReportsSetup.FieldNo(\"{query.Attributes["PBIReportIdFieldName"].Value}\"));"); sb.AppendLine(" end;"); sb.AppendLine(""); sb.AppendLine(" local procedure ShowErrorNotification(ErrorCategory: Text; ErrorMessage: Text)");