We need to handle the Power BI section XML for the Dataverse before update the table systmeform (attribute "formxml") : prepare the dataverse object to be sent to the database.
Creating the SystemForm object
Code Block |
---|
|
public static DataverseModel.SystemForm HandleReportXmlForDataverse(BuilderObjects.Report report, ValidatedContext validatedContext)
{
var groupId = report.GroupIdInPP;
var reportId = report.ReportIdInPP;
var pbiUrl = report.URLInPP;
etc ...
var powerBiSectionXml = "<section id=\"" + report.SectionIdInPP + "\" locklevel=\"0\" showlabel=\""
+ report.SectionShowLabel.ToString().ToLower() + "\" IsUserDefined=\"0\" name=\""
+ str6 + "\" labelwidth=\"115\" columns=\"1\" layout=\"varwidth\" showbar=\"false\"><labels><label description=\""
+ text4 + "\" languagecode=\"1033\" /></labels><rows><row>"
+ string.Format("<cell id=\"{0:B}\" showlabel=\"true\" rowspan=\"{1}\" colspan=\"1\" auto=\"false\">", (object)Guid.NewGuid(), (object)rowspan)
+ "<labels><label description=\"Power BI Report\" languagecode=\"1033\" /></labels><control id=\"filteredreport\" classid=\""
+ classId + "\"><parameters><PowerBIGroupId>"
+ groupId + "</PowerBIGroupId><PowerBIReportId>" + reportId + "</PowerBIReportId><TileUrl>"
+ pbiUrl + "/reportEmbed?reportId=" + reportId + "</TileUrl>" + aliaddataverse + "</parameters></control></cell></row></rows></section>";
string _fetchXml = string.Empty;
_fetchXml = _fetchXml.Replace(new Regex("<section[^>]+" + report.SectionIdInPP + ".*?<\\/section>").Match(_fetchXml).Value, powerBiSectionXml);
return new DataverseModel.SystemForm()
{
FormId = new Guid(validatedContext.formAccountId),
FormXml= _fetchXml
};
} |
Publishing the SystemForm Object in Dataverse
Code Block |
---|
|
foreach(var r in reportsDmpps)
{
var sf = ManagerObject.HandleReportXmlForDataverse(r, validatedContext); //function called above
serviceProvider.GetRequiredService<DataverseRepository<DataverseModel.SystemForm>>().Save(sf);
var parameterXml = Util.Util.GenerateParameterEntity(ObjectTypeCode.systemform);
var publishRequest = Util.Util.CreatePublishXmlRequest(parameterXml);
serviceProvider.GetRequiredService<DataverseRepository<DataverseModel.SystemForm>>().Execute(publishRequest);
} |