Oil Field Asset Management System

This project was essentially a major upgrade to an existing Microsoft CRM “application” to support the oil field services industry. The end client was a company providing logistics services to the oil drillers in the Bakken oil fields of North Dakota. As part of the hydraulic fracturing process, the client primarily delivered water to the well sites, but was also responsible for hauling out the used water and the production oil when the well began flowing. The client was using a different software package that had not been updated since the era of ActiveX controls running within Internet Explorer.


Besides the capabilities already built into Microsoft CRM, the client had need of geolocation of the wells they serviced and the trucks they owned. An iOS application built by another developer was installed on the devices used in each truck to provide the truck locations. In addition, when the trucks visited wells, the drivers were responsible for gauging the tanks to determine the current capacities. This data was used to calculate the average flow rates for each well, which could then be used to estimate the current tank levels in between gaugings. This estimation was performed using a background Windows Service written in C# interacting with the Microsoft CRM API/SDK.

Once the estimates were calculated, the well locations could be plotted using the Google Maps API to show a color-coded indicator to show the estimated tank levels. The goal was to never allow a tank to get close to “tipping”, or overflowing, and the map allowed this to be more easily seen. The map also showed the locations of their vehicles, enabling the dispatcher to create a work order for a nearby vehicle.

Creating a work order using the default Microsoft CRM interface was painful, at best. Everything had to be entered by hand, including the multiple sub-records for a work order. Instead, using ASP.NET MVC and KnockoutJS, we built a new interface that connected to the Google Maps display to automatically fill in information that was on the map. The dispatcher only had to pick the driver and enter in a few other optional pieces of information, such as who called in the work order or purchase order information, and that work order was created within CRM. At that point, the mobile device would receive the new work order and the driver could go to that location.

This project ran from August 2014 - June 2015 as part of my full-time employment with another consulting company. 

Tools and Technologies

  • Visual Studio 2013
  • C#
  • KnockoutJS
  • Microsoft CRM/CRM SDK
An error has occurred. This application may no longer respond until reloaded. Reload 🗙