Forum Discussion

Jorrit's avatar
Jorrit
Regular Visitor
8 years ago
Solved

Questions regarding breadcrumbs/title in my custom visual

Hi all,   I have been building some nice custom visuals. Onething I can't figure out yet in my D3 visuals is how I can disable the breadcrumbs row telling me what category and measure I selected fr...
  • v-viig's avatar
    v-viig
    8 years ago

    You should implement enumerateObjectInstances method in the class that implements IVisual interface.

    Basic implementation might look something like this:

    enumerateObjectInstances?(options: EnumerateVisualObjectInstancesOptions): VisualObjectInstanceEnumeration {
        return [];
    }

    Ignat Vilesov,

    Software Engineer

     

    Microsoft Power BI Custom Visuals

    [email protected]

  • Jorrit's avatar
    Jorrit
    8 years ago

    Pfff that was a while ago :) I looked in my code and I think for me this did the job!

     

     

    Add an additional file : objectEnumerationUtility.ts to the project with the following code: 

     

    module powerbi.extensibility.visual {
    /**
    * Gets property value for a particular object.
    *
    * @function
    * @param {DataViewObjects} objects - Map of defined objects.
    * @param {string} objectName - Name of desired object.
    * @param {string} propertyName - Name of desired property.
    * @param {T} defaultValue - Default value of desired property.
    */
    export function getValue<T>(objects: DataViewObjects, objectName: string, propertyName: string, defaultValue: T ): T {
    if (objects) {
    let object = objects[objectName];
    if (object) {
    let property: T = <T>object[propertyName];
    if (property !== undefined) {
    return property;
    }
    }
    }
    return defaultValue;
    }

    /**
    * Gets property value for a particular object in a category.
    *
    * @function
    * @param {DataViewCategoryColumn} category - List of category objects.
    * @param {number} index - Index of category object.
    * @param {string} objectName - Name of desired object.
    * @param {string} propertyName - Name of desired property.
    * @param {T} defaultValue - Default value of desired property.
    */
    export function getCategoricalObjectValue<T>(category: DataViewCategoryColumn, index: number, objectName: string, propertyName: string, defaultValue: T): T {
    let categoryObjects = category.objects;

    if (categoryObjects) {
    let categoryObject: DataViewObject = categoryObjects[index];
    if (categoryObject) {
    let object = categoryObject[objectName];
    if (object) {
    let property: T = <T>object[propertyName];
    if (property !== undefined) {
    return property;
    }
    }
    }
    }
    return defaultValue;
    }
    }

     

    Then update visual.ts 

     

    add this fuction:

     

    /**
    * Enumerates through the objects defined in the capabilities and adds the properties to the format pane
    *
    * @function
    * @param {EnumerateVisualObjectInstancesOptions} options - Map of defined objects
    */

    public enumerateObjectInstances(options: EnumerateVisualObjectInstancesOptions): VisualObjectInstanceEnumeration {
    let objectName = options.objectName;
    let objectEnumeration: VisualObjectInstance[] = [];


    return objectEnumeration;
    }

     

    My contructor looked like this:

     

    constructor(options: VisualConstructorOptions) {
    this.mainContainer = $('<div>');
    this.host = options.host;
    this.selectionManager = options.host.createSelectionManager();

    $(options.element)

    .append(this.mainContainer);

    }