Versions Compared

Key

  • This line was added.
  • This line was removed.
  • Formatting was changed.

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
languagec#
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
languagec#
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);
}