Del via


Opret en dialogboks til din Power BI-visualisering

Når du opretter en visualisering, er det nogle gange nyttigt at vise yderligere oplysninger til kunden i et separat vindue. Det kan f.eks. være, at du vil:

  • Vis yderligere oplysninger – f.eks. en tekstnote eller en video
  • Vis en dialogboks med inputdata – f.eks. en datodialogboks

Til dette formål kan du oprette et pop op-vindue til dialogboksvisualisering, der kaldes en dialogboks i denne artikel.

Overvejelser i dialogboksen

Når du opretter en dialogboks til din visualisering, skal du være opmærksom på, at:

  • Under udviklingen kan du angive størrelsen og placeringen af dialogboksen.
  • Når dialogboksen udløses, er rapportbaggrunden nedtonet.
  • Dialogboksoverskriften indeholder ikonet for visualiseringen og dets viste navn som en titel.
  • Dialogboksen kan have op til tre handlingsknapper. Du kan vælge, hvilke knapper der skal vises fra en given markering.
  • Dialogboksen bruger en RTF-kode iframe.
  • Mens dialogboksen vises, kan der ikke udføres nogen handling i rapporten, før den er afvist.
  • Dialogbokskoden kan bruge eksterne npm-biblioteker på samme måde som visualiseringen.

Vigtigt

Dialogboksen bør ikke udløses spontant. Det skal være det øjeblikkelige resultat af en brugerhandling.

Design en dialogboks til din visualisering

Hvis du vil konfigurere en dialogboks, skal du føje to komponenter til din kode:

Opret implementeringsfilen til dialogboksen

Vi anbefaler, at du opretter en implementeringsfil for hver dialogboks, du opretter. Placer dine dialogboksfiler i mappen src :

Skærmbillede, der viser placeringen af en dialogboksimplementeringsfil med navnet DatePickerDialog.ts i et Power BI-visualiseringsprojekt.

Hver dialogboksimplementeringsfil skal indeholde følgende komponenter:

Opret en dialogboksklasse

Opret en dialogboksklasse til dialogboksen. Parameteren initialState i openModalDialog overføres til dialogentreprenøren, når den oprettes. Brug objektet initialState til at overføre parametre til dialogboksen for at påvirke funktionsmåden eller udseendet.

Dialogbokskoden kan bruge følgende IDialogHost metoder:

  • IDialogHost.setResult(result:object) – Dialogbokskoden returnerer et resultatobjekt, der sendes tilbage til den kaldende visualisering.
  • IDialogHost.close(actionId: DialogAction, result?:object) – Dialogbokskoden kan lukke dialogboksen programmatisk og levere et resultatobjekt tilbage til den kaldende visualisering.

Importerer oven på filen:

import powerbi from "powerbi-visuals-api";
import DialogConstructorOptions = powerbi.extensibility.visual.DialogConstructorOptions;
import DialogAction = powerbi.DialogAction;
// React imports as an example
import * as ReactDOM from 'react-dom';
import * as React from 'react';
import reactDatepicker from 'react-datepicker';
import 'react-datepicker/dist/react-datepicker.css';

Dette eksempel kræver, at du installerer disse pakker:

    npm i react-dom react react-datepicker

Klasserealisering:

export class DatePickerDialog {
    static id = "DatePickerDialog";

    constructor(options: DialogConstructorOptions, initialState: object) {
        const host = options.host;
        let pickedDate: Date;
        const startDate = new Date(initialState['startDate']);
        
        // Dialog rendering implementation
        ReactDOM.render(
            React.createElement(
                reactDatepicker,
                {
                    inline: true,
                    openToDate: startDate,
                    onChange: (date: Date) => {
                        pickedDate = date
                        host.setResult({ date: pickedDate })
                    }
                },
                null),
            options.element
        );

        document.addEventListener('keydown', e => {
            if (e.code == 'Enter' && pickedDate) {
                host.close(DialogAction.Close, {date: pickedDate});
            }
        });
    }
}

Opret en resultatklasse

Opret en klasse, der returnerer resultatet af dialogboksen, og føj den derefter til dialogboksens implementeringsfil.

I eksemplet nedenfor DatePickerDialogResult returnerer klassen en datostreng.

export class DatePickerDialogResult {
    date: string;
}

Føj dialogboksen til registreringsdatabaselisten

Alle dialogboksimplementeringsfiler skal indeholde en reference i registreringsdatabasen. Tilføj de to linjer i eksemplet nedenfor til slutningen af implementeringsfilen for dialogboksen. Den første linje skal være identisk i alle dialogboksimplementeringsfiler. I den anden linje vises dialogboksen. ændre den i henhold til navnet på din dialogboksklasse.

globalThis.dialogRegistry = globalThis.dialogRegistry || {};
globalThis.dialogRegistry[DatePickerDialog.id] = DatePickerDialog;

Aktivér dialogboksen

Før du opretter en dialogboks, skal du beslutte, hvilke knapper den skal indeholde. Power BI-visualiseringer understøtter følgende seks dialogboksknapper:

export enum DialogAction {
        Close = 0,
        OK = 1,
        Cancel = 2,
        Continue = 3,
        No = 4,
        Yes = 5
    }

Hver dialogboks, du opretter, skal aktiveres i visual.ts filen. I dette eksempel er dialogboksen defineret med to handlingsknapper.

import powerbi from "powerbi-visuals-api";
import DialogAction = powerbi.DialogAction;
const dialogActionsButtons = [DialogAction.OK, DialogAction.Cancel];

I dette eksempel aktiveres dialogboksen ved at klikke på en visualiseringsknap. Visualiseringsknappen er defineret som en del af den visuelle konstruktør i visual.ts filen.

Definer størrelsen og placeringen af dialogboksen

Fra API version 4.0 eller nyere kan du definere størrelsen og placeringen af dialogboksen ved hjælp af DialogOpenOptions parameteren for openModalDialog. Hvis du vil finde ud af, hvilken version du bruger, skal du se apiVersion i filen pbiviz.json .

    export interface RectSize {
        width: number;
        height: number;
    }

    export interface DialogOpenOptions {
        title: string;
        size?: RectSize;
        position?: VisualDialogPosition;
        actionButtons: DialogAction[];
    }

Med positionsparameteren kan du bestemme, hvor dialogboksen skal åbnes på skærmen. Du kan vælge at åbne dialogboksen midt på skærmen, eller du kan definere en anden placering i forhold til visualiseringen.

    const enum VisualDialogPositionType {
        Center = 0,
        RelativeToVisual = 1
    }

    export interface VisualDialogPosition {
        type: VisualDialogPositionType;
        left?: number;
        top?: number;
    }
  • Hvis der ikke er angivet en type, er standardfunktionsmåden at åbne dialogboksen i midten.
  • Placeringen angives i pixel i forhold til det øverste venstre hjørne af visualiseringen.

I dette eksempel vises en dialogboks med datovalg på 250 x 300 pixel 100 pixel til venstre og 30 pixel under toppen af visualiseringen:

export class Visual implements IVisual {
    private target: HTMLElement;
    private host: IVisualHost;
 
    constructor(options: VisualConstructorOptions) {
        this.host = options.host;
        this.target = options.element;
        const dialogActionsButtons = [DialogAction.OK, DialogAction.Cancel];

        const sectionDiv = document.createElement("div");

        const span = document.createElement("span");
        span.id = "datePicker";

        let button = document.createElement("button");
        button.id = "DateButton";
        button.innerText = "Date";

        button.onclick = (event) => {
            const initialDialogState = { startDate: new Date() };
            const position = {
                    type: VisualDialogPositionType.RelativeToVisual,
                    left: 100,
                    top: 30
            };

            const size = {width: 250, height: 300};
            const dialogOptions = {
                actionButtons: dialogActionsButtons,
                size: size,
                position: position,
                title: "Select a date"
            };
            this.host.openModalDialog(DatePickerDialog.id, dialogOptions, initialDialogState).
                then(ret => this.handleDialogResult(ret, span)).
                catch(error => this.handleDialogError(error, span));
        }
        sectionDiv.appendChild(button);
        sectionDiv.appendChild(span);
        this.target.appendChild(sectionDiv)
    }

    // Custom logic to handle dialog results
    private handleDialogResult( result: ModalDialogResult, targetElement: HTMLElement){
        if ( result.actionId === DialogAction.OK || result.actionId === DialogAction.Close) {
            const resultState = <DatePickerDialogResult> result.resultState;
            const selectedDate = new Date(resultState.date);
            targetElement.textContent = selectedDate.toDateString();
        }
    }

    // Custom logic to handle errors in dialog
    private handleDialogError( error: any, targetElement: HTMLElement ) {
        targetElement.textContent = "Error: " + JSON.stringify(error);
    }
}

Definer, hvordan dialogboksen skal lukkes

Den foretrukne metode til lukning af dialogboksen er, at slutbrugeren klikker på knappen [x], en af handlingsknapperne eller rapportens baggrund.

Du kan også programmere dialogboksen til automatisk at lukke ved at kalde lukkemetoden IDialogHost . Denne metode blokeres i fem sekunder, efter at dialogboksen er åbnet, så den tidligste, du automatisk kan lukke dialogboksen, er fem sekunder efter, at den blev startet.

Vis ikke dialogboks

Dialogboksen vises med et afkrydsningsfelt, der giver brugeren mulighed for at blokere dialogbokse.

Skærmbillede, der viser et afkrydsningsfelt, der giver mulighed for at blokere dialogbokse.

Dette afkrydsningsfelt er en sikkerhedsfunktion, der forhindrer visualiseringen i at oprette modale dialogbokse (enten bevidst eller ej) uden brugerens samtykke.

Denne blokering er kun i kraft for den aktuelle session. Så hvis en bruger blokerer cv-modale dialogbokse, men senere skifter mening, kan vedkommende aktivere dialogerne igen. Hvis de vil gøre det, skal de starte en ny session (opdatere rapportsiden i Power BI-tjeneste eller genstarte Power BI Desktop).

Overvejelser og begrænsninger

  • Fra og med powerbi-visuals-API 3.8 bestemmes dialogboksens ikon og titel af visualiseringens ikon og viste navn og kan ikke ændres.

  • Størrelsesbegrænsningerne i dialogboksen er beskrevet i tabellen nedenfor.

    Maks./min. Width Height
    Maksimum 90 % af browserbredden 90 % af browserhøjden
    Minimum 240 px 210 px
  • Når du definerer placeringen af dialogboksen, kan den vandrette placering være et positivt eller negativt heltal, afhængigt af hvilken side af visualiseringen feltet skal være. Den lodrette placering kan ikke være negativ, da den ville blive placeret over visualiseringen.

  • Følgende funktioner understøtter ikke dialogboksen Power BI-visualiseringer:

    • Integreret analyse
    • Publicer på internettet
    • Dashboards

Du kan programmere din visualisering til at registrere, om det aktuelle miljø tillader åbning af en dialogboks, ved at kontrollere den booleske this.host.hostCapabilities.allowModalDialog.