Anteckning
Åtkomst till den här sidan kräver auktorisering. Du kan prova att logga in eller ändra kataloger.
Åtkomst till den här sidan kräver auktorisering. Du kan prova att ändra kataloger.
Formatering på objekt gör det möjligt för användare att snabbt och enkelt ändra formatet för visuella objekt genom att välja de element som de vill ändra direkt. När ett element har valts navigerar formatfönstret automatiskt och expanderar den specifika formateringsinställningen för det markerade elementet. Som en del av formateringen på objektet används undermarkeringstjänsten för att skicka undermarkeringar och dispositioner till Power BI.
Så här använder du API:et för undermarkering
SubSelection-tjänsten innehåller två metoder:
Delmarkera
Skickar undermarkeringen för Power BI som ska användas när en användare väljer ett element som tillåter undermarkeringar.
subSelect(args: visuals.CustomVisualSubSelection | undefined): void
CustomVisualSubSelection
interface CustomVisualSubSelection {
customVisualObjects: CustomVisualObject[];
displayName: string;
subSelectionType: SubSelectionStylesType;
selectionOrigin: SubSelectionOrigin;
/** Whether to show the UI for this sub-selection, like formatting context menus and toolbar */
showUI: boolean;
/** If immediate direct edit should be triggered, the ID of the sub-selection outline to edit */
immediateDirectEdit?: string;
metadata?: unknown;
}
interface CustomVisualObject {
objectName: string;
selectionId: powerbi.visuals.ISelectionId | undefined;
}
Den här metoden har följande parametrar:
- customVisualObjects: en matris som innehåller
customVisualObjects
, objektets objectName ska vara samma som det som deklareras i capabilities.json och selectionId för den valda datapunkten, om den finns. - displayName: Visningsnamnet ska lokaliseras om det visuella objektet stöder lokalisering.
- subSelectionType: typen av undermarkering (form, text eller numerisk text).
- selectionOrigin: koordinaterna för det undermarkerade elementet.
- showUI: Om användargränssnittet ska visas för den här undermarkeringen, till exempel formatering av snabbmenyer och verktygsfält.
- immediateDirectEdit: Om omedelbar direktredigering ska utlösas ska ID:t för undermarkeringsdispositionen som ska redigeras.
Om du inte använder HTMLSubSelectionHelper
måste du hantera undermarkeringarna.
Exempel på undermarkering
I det här exemplet lägger vi till en händelselyssnare i värdelementet för snabbmenyhändelserna med högerklicka.
constructor(options: VisualConstructorOptions) {
this.hostElement = options.element;
this.subSelectionService = options.host.subSelectionService;
….
}
public update(options: VisualUpdateOptions) {
if (options.formatMode) {
// remove event listeners which are irrelevant for format mode.
…
this.hostElement.addEventListener('click', this.handleFormatModeClick);
this.hostElement.addEventListener('contextmenu', this.handleFormatModeContextMenu);
} else {
this.hostElement.removeEventListener('click', this.handleFormatModeClick);
this.hostElement.removeEventListener('contextmenu', this.handleFormatModeContextMenu);
…
// add event listeners which are irrelevant for format mode
}
}
private handleFormatModeClick(event: MouseEvent): void {
this.subSelectFromEvent(event, true /**showUI */);
}
private handleFormatModeContextMenu(event: MouseEvent): void {
this.subSelectFromEvent(event, false);
}
private subSelectFromEvent(event: MouseEvent, showUI: boolean): void {
//find the element which was selected and fill the needed fields
const cVObject: powerbi.visuals.CustomVisualObject = {
objectName: 'myObject',//the object name that is relevant to the clicked element
selectionId: undefined
};
const subSelection: CustomVisualSubSelection = {
customVisualObjects: [cVObject],
displayName: 'myObject',
selectionOrigin: {
x: event.clientX,
y: event.clientY
},
subSelectionType: SubSelectionStylesType.Shape,// choose the relevant type
showUI
};
this.subSelectionService.subSelect(subSelection);
}
updateRegionOutlines
Den här metoden skickar dispositioner till Power BI för återgivning. Använd den i update
metoden för det visuella objektet eftersom det är där Power BI skickar undermarkeringen som det visuella objektet skickade tidigare. Du kan också använda den när du vill återge en disposition för ett hovrade element.
updateRegionOutlines(outlines: visuals.SubSelectionRegionOutline[]): void
SubSelectionRegionOutline
interface SubSelectionRegionOutline {
id: string;
visibility: SubSelectionOutlineVisibility; // controls visibility for outlines
outline: SubSelectionOutline;
}
Om du inte använder HTMLSubSelectionHelper
måste du manuellt hantera konturerna och deras tillstånd (om de är aktiva, hovrade eller inte synliga).
Exempel på uppdateringsregiondispositioner
I det här exemplet förutsätter vi att vi har ett objekt med namnet myObject
, och vi vill återge en rektangeldisposition när det relevanta elementet hovras. Vi använder koden i föregående exempel för subSelect.
I uppdateringen måste vi också lägga till en händelselyssnare pointerover
för händelsen.
Vi vill hantera våra dispositioner med hjälp av en post.
private subSelectionRegionOutlines: Record<string, SubSelectionRegionOutline > = {};
public update(options: VisualUpdateOptions) {
if (options.formatMode) {
// remove event listeners which are irrelevant for format mode.
…
this.hostElement.addEventListener('click', this.handleFormatModeClick);
this.hostElement.addEventListener('contextmenu', this.handleFormatModeContextMenu);
this.hostElement.addEventListener('pointerover', this.handleFormatModePointerOver);
} else {
this.hostElement.removeEventListener('click', this.handleFormatModeClick);
this.hostElement.removeEventListener('contextmenu', this.handleFormatModeContextMenu);
this.hostElement.removeEventListener('pointerover', this.handleFormatModePointerOver);
…
// add event listeners which are irrelevant for format mode
}
}
private handleFormatModePointerOver(event: MouseEvent): void {
// use the event to extract the element that was hovered.
// in this example we assume that we found the element and it is related to object called myObject.
// we need to clear previously hovered outlines before rendering
const regionOutlines = getValues(this.subSelectionRegionOutlines);
const hoveredOutline = regionOutlines.find(outline => outline.visibility === SubSelectionOutlineVisibility.Hover);
if (hoveredOutline) {
this.subSelectionRegionOutlines[hoveredOutline.id] = {
...this.subSelectionRegionOutlines[hoveredOutline.id],
visibility: powerbi.visuals.SubSelectionOutlineVisibility.None
};
}
// now we will build the outline for myObject relevant element.
let element: HTMLElement;// assume we found the relevant element.
const domRect = element.getBoundingClientRect();
const { x, y, width, height } = domRect;
const outline: powerbi.visuals.RectangleSubSelectionOutline = {
height,
width,
x,
y,
type: powerbi.visuals.SubSelectionOutlineType.Rectangle,
};
const regionOutline: powerbi.visuals.SubSelectionRegionOutline = {
id: 'myObject',
visibility: powerbi.visuals.SubSelectionOutlineVisibility.Hover,
outline
};
this.subSelectionRegionOutlines[regionOutline.id] = regionOutline;
this.renderOutlines();
// you need to remove the hovered outline when the element is not hovered anymore
}
private renderOutlines(): void {
const regionOutlines = getValues(this.subSelectionRegionOutlines);
this.subSelectionService.updateRegionOutlines(regionOutlines);
}