Table 6318 Power BI Deployment Buffer, source in 29

Source29

src/Layers/W1/BaseApp/Modules/System/PowerBI/APIs/ReportDeployments/PowerBIDeploymentBuffer.Table.al132 lines, Copyright (c) Microsoft Corporation. MIT

namespace System.Integration.PowerBI;

/// <summary>
/// Temporary table used by the Power BI Report Deployments page to display
/// the list of deployable reports with their current status.
/// All population and status-derivation logic is in table procedures.
/// </summary>
table 6318 "Power BI Deployment Buffer"
{
    Caption = 'Power BI Deployment Buffer';
    TableType = Temporary;
    Access = Public;
    DataClassification = SystemMetadata;

    fields
    {
        field(1; "Report Id"; Enum "Power BI Deployable Report")
        {
            Caption = 'Report Id';
            DataClassification = SystemMetadata;
        }
        field(2; "Report Name"; Text[200])
        {
            Caption = 'Report Name';
            DataClassification = SystemMetadata;
        }
        field(3; "Deployment Status"; Enum "Power BI Deployment Status")
        {
            Caption = 'Deployment Status';
            DataClassification = SystemMetadata;
        }
        field(4; "Deployed Version"; Text[100])
        {
            Caption = 'Deployed Version';
            DataClassification = SystemMetadata;
        }
        field(5; "Available Version"; Integer)
        {
            Caption = 'Available Version';
            DataClassification = SystemMetadata;
        }
        field(6; "Last Deployed"; DateTime)
        {
            Caption = 'Last Deployed';
            DataClassification = SystemMetadata;
        }
        field(7; "Current Step"; Text[100])
        {
            Caption = 'Current Step';
            DataClassification = SystemMetadata;
        }
        field(8; "Uploaded Report ID"; Guid)
        {
            Caption = 'Uploaded Report ID';
            DataClassification = SystemMetadata;
        }
    }

    keys
    {
        key(PK; "Report Id")
        {
            Clustered = true;
        }
    }

    procedure LoadReports()
    var
        PowerBIDeployment: Record "Power BI Deployment";
        LatestState: Record "Power BI Deployment State";
        DeployableReport: Interface "Power BI Deployable Report";
        ReportEnum: Enum "Power BI Deployable Report";
        Ordinals: List of [Integer];
        OrdinalValue: Integer;
        HasDeploymentRecord: Boolean;
    begin
        Rec.DeleteAll();
        Ordinals := Enum::"Power BI Deployable Report".Ordinals();

        foreach OrdinalValue in Ordinals do begin
            ReportEnum := Enum::"Power BI Deployable Report".FromInteger(OrdinalValue);
            DeployableReport := ReportEnum;

            Rec.Init();
            Rec."Report Id" := ReportEnum;
            Rec."Report Name" := DeployableReport.GetReportName();
            Rec."Available Version" := DeployableReport.GetVersion();

            HasDeploymentRecord := PowerBIDeployment.Get(ReportEnum);
            if HasDeploymentRecord then begin
                if PowerBIDeployment."Deployed Version" <> 0 then
                    Rec."Deployed Version" := Format(PowerBIDeployment."Deployed Version");

                Rec."Uploaded Report ID" := PowerBIDeployment."Uploaded Report ID";
                Rec."Last Deployed" := PowerBIDeployment.GetLatestCompletedState()."Reached At";
                if PowerBIDeployment.GetLatestStateRecord(LatestState) then
                    Rec."Current Step" := Format(LatestState."Status Reached");
            end;
            Rec."Deployment Status" := DeriveDeploymentStatus(PowerBIDeployment, HasDeploymentRecord);
            Rec.Insert();
        end;

        if Rec.FindFirst() then;
    end;

    local procedure DeriveDeploymentStatus(PowerBIDeployment: Record "Power BI Deployment"; HasDeploymentRecord: Boolean): Enum "Power BI Deployment Status"
    var
        UploadStatus: Enum "Power BI Upload Status";
    begin
        if not HasDeploymentRecord then
            exit(Enum::"Power BI Deployment Status"::"Not Installed");

        UploadStatus := PowerBIDeployment.GetUploadStatus();

        if UploadStatus = Enum::"Power BI Upload Status"::Failed then
            exit(Enum::"Power BI Deployment Status"::Error);

        if PowerBIDeployment."Deployed Version" = 0 then
            case UploadStatus of
                Enum::"Power BI Upload Status"::NotStarted:
                    exit(Enum::"Power BI Deployment Status"::Queued);
                else
                    exit(Enum::"Power BI Deployment Status"::Installing);
            end;

        if Rec."Available Version" > PowerBIDeployment."Deployed Version" then
            exit(Enum::"Power BI Deployment Status"::"Update Available");

        exit(Enum::"Power BI Deployment Status"::"Up to Date");
    end;
}