Custom Dashboard - Custom Data & Object Display


I am using an activex object to create custom data for my dashboard using sql. It looks like you cannot return an adodb recordset as the data source. Should I be creating JSON from the adodb.recordset? I am assuming that in order to access the data properly and be able to filter the data and parse through it that it will need to be in a JSON format. Is this assumption correct? 

I also want to only display this dashboard tab when someone has selected a "SalesOrder" object within M-Files. I'm not quite sure how to do this.

Below is my js code thus far with the connection string replaced with ""

"use strict";
function OnNewShellUI( shellUI )
	// Register to be notified when a new normal shell frame (Event_NewNormalShellFrame) is created.
	// We use Event_NewNormalShellFrame rather than Event_NewShellFrame as this won't fire for history (etc.) dialogs.
		handleNewShellFrame );

function handleNewShellFrame(shellFrame)
	// Register to be notified when the shell frame is started.
	// This time pass a reference to the function to call when the event is fired.
		getShellFrameStartedHandler( shellFrame) );

function getCustomData() {
    //database connection
    var connection = new ActiveXObject("ADODB.Connection");
    var connectionstring = "";

    var rs = new ActiveXObject("ADODB.Recordset");
    var results = '';

    rs.Open("SELECT top 10 * FROM SalesOrders", connection);

    //move through recordset. Create JSON?
    while (!rs.eof) {
        results = results + ' ' + rs.fields(0).value.toString();


    return results;
function getShellFrameStartedHandler(shellFrame)
	/// <summary>Returns a function which handles the OnStarted event for an IShellFrame.</summary>
    // This is the ID of the dashboard, as declared in the appdef.xml file.
    var dashboardId = "soDashboard";
    var customData = getCustomData()
	return function() {
		// The shell frame is now started and can be used.
		var tab = shellFrame.RightPane.AddTab( "mySalesOrderDashboard", "SO Details", "_last" );
		// Load the content into the tab.
		tab.ShowDashboard( dashboardId, customData );
        // Show the tab.
		tab.visible = true;
        // Register to be notified when new shell listings are created.
			getNewShellListingHandler( shellFrame, tab ) );

		// Is there already a listing?  If so then we need to hook into it as well.
		if (null != shellFrame.Listing)
			getNewShellListingHandler( shellFrame, tab, dashboardId )( shellFrame.Listing );

    function getNewShellListingHandler(shellFrame, tab, dashboardId)
	/// <summary>Gets a function to handle the NewShellListing event for shell frame.</summary>
	/// <param name="shellFrame" type="MFiles.ShellFrame">The current shell frame object.</param> 
	/// <returns type="MFiles.Events.OnNewShellListing">The event handler.</returns>

	// Return the handler function for NewShellListing event.
	return function(shellListing)
		// Listen for selection change events on the listing.
				// Sanity.
				if (false == shellListing.IsActive)
					return false;

				// Show our dashboard.
				tab.ShowDashboard(dashboardId, selectedItems);

				// We succeeded; return true.
				return true;
			} );

Parents Reply Children
No Data