Sample Customization

The following sample is a fully customized Data Set Service File in C# of a custom Menu Component.

Copy
using System;
using System.Collections.Generic;
using System.Data;
using System.Data.Common;
using System.Globalization;
using System.IO;
using System.Linq;
using Microsoft.CSharp;
using OneStream.Finance.Database;
using OneStream.Finance.Engine;
using OneStream.Shared.Common;
using OneStream.Shared.Database;
using OneStream.Shared.Engine;
using OneStream.Shared.Wcf;
using OneStream.Stage.Database;
using OneStream.Stage.Engine;
using OneStreamWorkspacesApi;
using OneStreamWorkspacesApi.V800;

namespace Workspace.__WsNamespacePrefix.__WsAssemblyName
{
    public class WsasDataSet : IWsasDataSetV800
    {
        public object GetDataSet(SessionInfo si, BRGlobals brGlobals, DashboardWorkspace workspace, DashboardDataSetArgs args)
        {
            try
            {
                if ((brGlobals != null) && (workspace != null) && (args != null))
                {
                    if (args.DataSetName.XFEqualsIgnoreCase("MainMenu"))
                    {
                        var menu = new XFMenuItemCollection();
                        
                        // Top-level Menu Item #1
                        var topLevelMenuItemOne = new XFMenuItem("1", "Menu Item #1", "White", "SlateGray", false, false, true, false, double.NaN, double.NaN, double.NaN, double.NaN, double.NaN, double.NaN, XFImageFileSourceType.Unknown, null, 0, "menuItem1", null, null);
                        
                        topLevelMenuItemOne.Children = new List<XFMenuItem>();
                        topLevelMenuItemOne.Children.Add(new XFMenuItem("2", "Child #1", "White", "SlateGray", false, false, true, false, double.NaN, double.NaN, double.NaN, double.NaN, double.NaN, double.NaN, XFImageFileSourceType.Unknown, null, 0, "child1", "Tooltip #1", null));
                        topLevelMenuItemOne.Children.Add(new XFMenuItem("3", "Child #2", "White", "SlateGray", false, false, true, false, double.NaN, double.NaN, double.NaN, double.NaN, double.NaN, double.NaN, XFImageFileSourceType.Unknown, null, 0, "child2", "Tooltip #2",
                            new List<XFMenuItem>()
                            {
                                new XFMenuItem("4", "Grandchild #1", "White", "SlateGray", false, false, true, false, double.NaN, double.NaN, double.NaN, double.NaN, double.NaN, double.NaN, XFImageFileSourceType.Unknown, null, 0, null, null, null),
                                new XFMenuItem("5", "Grandchild #2", "White", "SlateGray", false, false, true, false, double.NaN, double.NaN, double.NaN, double.NaN, double.NaN, double.NaN, XFImageFileSourceType.Unknown, null, 0, null, null, null)
                            }
                        ));
                        
                        // Top-level Menu Item #2
                        var topLevelMenuItemTwo = new XFMenuItem("6", "Menu Item #1", "White", "SlateGray", false, false, true, false, double.NaN, double.NaN, double.NaN, double.NaN, double.NaN, double.NaN, XFImageFileSourceType.Unknown, null, 0, "menuItem2", null, null);
                        
                        menu.MenuItems.Add(topLevelMenuItemOne);
                        menu.MenuItems.Add(topLevelMenuItemTwo);
                        
                        return menu.CreateDataSet(si);
                    }
                }

                return null;
            }
            catch (Exception ex)
            {
                throw new XFException(si, ex);
            }
        }
    }
}

This is how this sample Menu Component displays in a dashboard:

The following sample is a fully customized Data Set Service File in C# of a custom Menu Component.

Copy
using System;
using System.Collections.Generic;
using System.Data;
using System.Data.Common;
using System.Globalization;
using System.IO;
using System.Linq;
using Microsoft.CSharp;
using OneStream.Finance.Database;
using OneStream.Finance.Engine;
using OneStream.Shared.Common;
using OneStream.Shared.Database;
using OneStream.Shared.Engine;
using OneStream.Shared.Wcf;
using OneStream.Stage.Database;
using OneStream.Stage.Engine;
using OneStreamWorkspacesApi;
using OneStreamWorkspacesApi.V800;

namespace Workspace.__WsNamespacePrefix.__WsAssemblyName
{
    public class MenuSvc : IWsasDataSetV800
    {
        public object GetDataSet(SessionInfo si, BRGlobals brGlobals, DashboardWorkspace workspace, DashboardDataSetArgs args)
        {
         try {
                if ((brGlobals != null) && (workspace != null) && (args != null)) {
                    
                    // sample menu 
                    if (args.DataSetName.XFEqualsIgnoreCase("MainMenu"))
                    {
                        // create the menu object
                        XFMenuItemCollection menu = new XFMenuItemCollection();

                        // create top-level items
                        XFMenuItem parentMenuItemOne = new XFMenuItem("1", "Parent 1"
                            "White", "SlateGray", false, false, true, false, null);
                        // create items for the second level
                        XFMenuItem childMenuItemOne = new XFMenuItem("1.1", "Child 1"
                            "Black", "White", true, true, true, false, null);
                        XFMenuItem childMenuItemTwo = new XFMenuItem("1.2", "Child 2"
                            "Black", "White", true, true, true, false, null);
                        // create items for the third level
                        XFMenuItem grandChildMenuItemOne = new XFMenuItem("1.1.1", "Grandchild 1"
                            "White", "SlateGray", true, true, true, false, null);

                        // create the hierarchy by adding children to direct parents as a List
                        childMenuItemOne.Children = new List<XFMenuItem>(){
                            grandChildMenuItemOne
                        };
                        parentMenuItemOne.Children = new List<XFMenuItem>(){
                            childMenuItemOne
                        };

                        // you can also manipulate the list once created
                        parentMenuItemOne.Children.Add(childMenuItemTwo);

                        // add top-level items to the menu object
                        menu.MenuItems.Add(parentMenuItemOne);

                        // generate the dataset and return it
                        return menu.CreateDataSet(si);
                    }
                }

                return null;
                
            } catch (Exception ex) {
                throw new XFException(si, ex);
            }
        }
    }
}

This is how this sample Menu Component displays in a dashboard: