Use PDIs? Take our 5-minute survey to help shape the PDI roadmap.

SPM: color coding changing with SPM Portfolio planning Dashboards

ShaggyBern
Kilo Expert

Hi All,

is is possible to change the color coding within SPM OOTB Dashboards in the portfolio planning workspace section. I would like to change the color coding from the default to the customers defaults colors?

SPM Standard
Release Zurich

Thanks in advance

2 ACCEPTED SOLUTIONS

ShaggyBern
Kilo Expert

to be more precise: In the dashboards, I would like to customize the colors of the donut visualization type.

 

View solution in original post

vandanasaluja
Tera Expert

Hi we have the same requirement for our customer and we was able to achieve this with Data broker server script .There is a transform roadmap data  and you can change the OOB  script to 

function transform(input) {

    var alignmentPlannerData =
        input.roadmapData.data.snAlignWs
            .roadmapUIAPI
            .getRoadmapUIProperties;

    /*
     * Parse Roadmap color map.
     */
    if (
        alignmentPlannerData.roadmapMetadata &&
        alignmentPlannerData.roadmapMetadata.colorMap
    ) {
        alignmentPlannerData.roadmapMetadata.colorMap =
            parseJsonSafely(
                alignmentPlannerData.roadmapMetadata.colorMap,
                {}
            );
    }

    var roadmapMetadata =
        alignmentPlannerData.roadmapMetadata;

    /*
     * Preserve the OOTB state mapping and add a separate
     * mapping for sn_align_core_planning_item.status.
     */
    if (!roadmapMetadata.colorMap) {
        roadmapMetadata.colorMap = {};
    }

    if (!roadmapMetadata.colorMap.status) {
        roadmapMetadata.colorMap.status = {};
    }

    var statusColorMap =
        roadmapMetadata.colorMap.status;

    /*
     * Planning Item status value
     *            →
     * Roadmap theme token
     *
     * The left side must match the stored choice value
     * on sn_align_core_planning_item.status.
     */
    statusColorMap.green = 'green';
    statusColorMap.yellow = 'yellow';
    statusColorMap.red = 'critical';
    statusColorMap.purple = 'purple';
    statusColorMap.orange = 'orange';
    statusColorMap.teal = 'teal';
    statusColorMap.blue = 'blue';
    statusColorMap.grey = 'gray';
    statusColorMap.dark_blue = 'high';

    /*
     * Parse milestone type metadata.
     */
    if (
        alignmentPlannerData.roadmapData &&
        alignmentPlannerData.roadmapData.milestoneInfo &&
        alignmentPlannerData.roadmapData.milestoneInfo.milestoneMetadata
    ) {
        var milestoneMetadata =
            alignmentPlannerData
                .roadmapData
                .milestoneInfo
                .milestoneMetadata;

        milestoneMetadata.type =
            parseJsonSafely(
                milestoneMetadata.type,
                {}
            );

        milestoneMetadata.state =
            parseJsonSafely(
                milestoneMetadata.state,
                {}
            );
    }

    /*
     * Parse Roadmap item milestone data.
     */
    if (
        alignmentPlannerData.roadmapData &&
        alignmentPlannerData.roadmapData.milestoneInfo &&
        alignmentPlannerData.roadmapData.milestoneInfo.milestones
    ) {
        var milestones =
            alignmentPlannerData
                .roadmapData
                .milestoneInfo
                .milestones;

        milestones.roadmapItemMilestones =
            parseJsonSafely(
                milestones.roadmapItemMilestones,
                {}
            );
    }

    /*
     * Parse dependency information.
     */
    if (
        alignmentPlannerData.roadmapData &&
        alignmentPlannerData.roadmapData.dependenciesInfo
    ) {
        var dependenciesInfo =
            alignmentPlannerData
                .roadmapData
                .dependenciesInfo;

        if (dependenciesInfo.dependencies) {
            dependenciesInfo.dependencies =
                parseJsonSafely(
                    dependenciesInfo.dependencies,
                    []
                );
        }

        if (dependenciesInfo.dependenciesMetadata) {
            dependenciesInfo.dependenciesMetadata =
                parseJsonSafely(
                    dependenciesInfo.dependenciesMetadata,
                    {}
                );
        }
    }

    return alignmentPlannerData;

    /**
     * Parses a JSON string safely.
     *
     * If the supplied value is already an object,
     * it is returned without parsing.
     */
    function parseJsonSafely(value, fallbackValue) {

        if (
            value === null ||
            value === undefined ||
            value === ''
        ) {
            return fallbackValue;
        }

        if (typeof value !== 'string') {
            return value;
        }

        try {
            return JSON.parse(value);
        } catch (error) {
            return fallbackValue;
        }
    }
}

View solution in original post

4 REPLIES 4

ShaggyBern
Kilo Expert

to be more precise: In the dashboards, I would like to customize the colors of the donut visualization type.

 

Hi @ShaggyBern  the colours can be defined in following table [sys_report_color]

Alpa82_1-1785351640112.png

If you need multi-color palettes representing customer branding across grouped charts: then these can be configured in the [pa_chart_color_schemes] table (Chart Color Schemes). There define a sequence of comma-separated Hex codes. This custom  palette then should appear under the Color palette dropdown when configuring multi-series or grouped visualizations in the report

Alpa82_2-1785351850239.png

 

 

 

Hi Alpa82,

 

Thanks allot for your support. I applied your solution and it worked. Greatly appreciated

vandanasaluja
Tera Expert

Hi we have the same requirement for our customer and we was able to achieve this with Data broker server script .There is a transform roadmap data  and you can change the OOB  script to 

function transform(input) {

    var alignmentPlannerData =
        input.roadmapData.data.snAlignWs
            .roadmapUIAPI
            .getRoadmapUIProperties;

    /*
     * Parse Roadmap color map.
     */
    if (
        alignmentPlannerData.roadmapMetadata &&
        alignmentPlannerData.roadmapMetadata.colorMap
    ) {
        alignmentPlannerData.roadmapMetadata.colorMap =
            parseJsonSafely(
                alignmentPlannerData.roadmapMetadata.colorMap,
                {}
            );
    }

    var roadmapMetadata =
        alignmentPlannerData.roadmapMetadata;

    /*
     * Preserve the OOTB state mapping and add a separate
     * mapping for sn_align_core_planning_item.status.
     */
    if (!roadmapMetadata.colorMap) {
        roadmapMetadata.colorMap = {};
    }

    if (!roadmapMetadata.colorMap.status) {
        roadmapMetadata.colorMap.status = {};
    }

    var statusColorMap =
        roadmapMetadata.colorMap.status;

    /*
     * Planning Item status value
     *            →
     * Roadmap theme token
     *
     * The left side must match the stored choice value
     * on sn_align_core_planning_item.status.
     */
    statusColorMap.green = 'green';
    statusColorMap.yellow = 'yellow';
    statusColorMap.red = 'critical';
    statusColorMap.purple = 'purple';
    statusColorMap.orange = 'orange';
    statusColorMap.teal = 'teal';
    statusColorMap.blue = 'blue';
    statusColorMap.grey = 'gray';
    statusColorMap.dark_blue = 'high';

    /*
     * Parse milestone type metadata.
     */
    if (
        alignmentPlannerData.roadmapData &&
        alignmentPlannerData.roadmapData.milestoneInfo &&
        alignmentPlannerData.roadmapData.milestoneInfo.milestoneMetadata
    ) {
        var milestoneMetadata =
            alignmentPlannerData
                .roadmapData
                .milestoneInfo
                .milestoneMetadata;

        milestoneMetadata.type =
            parseJsonSafely(
                milestoneMetadata.type,
                {}
            );

        milestoneMetadata.state =
            parseJsonSafely(
                milestoneMetadata.state,
                {}
            );
    }

    /*
     * Parse Roadmap item milestone data.
     */
    if (
        alignmentPlannerData.roadmapData &&
        alignmentPlannerData.roadmapData.milestoneInfo &&
        alignmentPlannerData.roadmapData.milestoneInfo.milestones
    ) {
        var milestones =
            alignmentPlannerData
                .roadmapData
                .milestoneInfo
                .milestones;

        milestones.roadmapItemMilestones =
            parseJsonSafely(
                milestones.roadmapItemMilestones,
                {}
            );
    }

    /*
     * Parse dependency information.
     */
    if (
        alignmentPlannerData.roadmapData &&
        alignmentPlannerData.roadmapData.dependenciesInfo
    ) {
        var dependenciesInfo =
            alignmentPlannerData
                .roadmapData
                .dependenciesInfo;

        if (dependenciesInfo.dependencies) {
            dependenciesInfo.dependencies =
                parseJsonSafely(
                    dependenciesInfo.dependencies,
                    []
                );
        }

        if (dependenciesInfo.dependenciesMetadata) {
            dependenciesInfo.dependenciesMetadata =
                parseJsonSafely(
                    dependenciesInfo.dependenciesMetadata,
                    {}
                );
        }
    }

    return alignmentPlannerData;

    /**
     * Parses a JSON string safely.
     *
     * If the supplied value is already an object,
     * it is returned without parsing.
     */
    function parseJsonSafely(value, fallbackValue) {

        if (
            value === null ||
            value === undefined ||
            value === ''
        ) {
            return fallbackValue;
        }

        if (typeof value !== 'string') {
            return value;
        }

        try {
            return JSON.parse(value);
        } catch (error) {
            return fallbackValue;
        }
    }
}