This discussion has been locked.
You can no longer post new replies to this discussion. If you have a question you can start a new discussion

Custom Dashboard - Custom Data & Object Display

Hi,

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.
	shellUI.Events.Register(
		Event_NewNormalShellFrame,
		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.
	shellFrame.Events.Register(
		Event_Started,
		getShellFrameStartedHandler( shellFrame) );
}

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

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

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

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

    rs.close;
    connection.close;

    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.
		shellFrame.Events.Register(
			Event_NewShellListing,
			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.
		shellListing.Events.Register(
			Event_SelectionChanged,
			function(selectedItems)
			{
				// 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