Kinda Back

its been a while since I last blogged. Unfortunately life gets in the way and its has been very busy with the company. I am hoping to be able to blog more often as I get back on track of sharing information on development and now Infor CRM (formally Saleslogix). Shortly I will be heading to Build 2016, the Microsoft developer conference and I am looking forward to see the direction of the platform (OS) as well as the development tools. Just recently Xamarin announced it was acquired by Microsoft, and as a certified Xamarin developer I am also looking for more information with regards to Microsofts direction of the tooling. Finally I have been accepted into the Hololens developer program, and will be attending a developer session while in San Francisco. It will be great to kick the tires on some actual equipment.

Not much to add at the moment, other then Infor CRM 8.3 should be released really soon …


Posting Quotes in MAS from ERPLink

One of our customers required posting quotes from Saleslogix into MAS. Though the transaction type was available it was not possible to actually post anything except for a standard order. It seems that the spSOApiSalesorderIns stored procedure had a fixed transaction type of 801 (order) where as quote would have needed a value of 840.

We have updated the stored procedure to now accept a transaction type (801, 840) and when selecting either an ‘Order’ or ‘Quote’ the correct type will be passed down and processed as expected.

This updated will be in the next version of ERPLink 2014.

Dynalink 2014 – Small Changes

I’ve been working on a update to Dynalink 2014 and sometimes the smallest changes mean the most.

Change 1 – Job Status Window

Dynalink use to show each of the jobs in separate windows for each configuration. The more I thought about it the less it made sense. The window also would show some internal ids (task and map id) which does not actually make sense for a customer facing view. I have updated the window to now consolidate all running jobs on a given server and changed the columns to make more sense.


I have also moved the stop job menu item from the configuration list to the job status list.

Change 2 – Toast Messages

I have been playing around with the notion of making some of the notifications less intrusive. The one place that I was not happy about was when a job was started from the Administrator. When started a a modal message box was displayed that the user would have to close to continue on. Though not a bad thing I was annoying me enough that I wanted it changed.

As such we have added a Toast Service to our architecture that can be called in place of some of the dialog popups to remove the extra step of closing a status dialog.


I am sure there will be other changes over the next few weeks as we continue to improve Dynalink

ERPLink for Saleslogix 8.1

Currently it looks that there is an issues with the Saleslogix .net extensions that brings an incompatibility to any previous versions of a compiled extension. We can get around this issue by explicitly targeting the version of .net extensions that are supplied with 8.1. We are working on a solution but In the meantime if you are upgrading to Saleslogix 8.1 and require a copy of ERPLink get in contact of support and we can provide you a custom build (If you are a Bittelligent customer)

The Great Path Issue .. Crystal Sucks

wow its 2014 and we are still having problems with the path variable. I have installed ERP 2013/2014 to do some development and testing of ERPLink and was getting the Launcher could not be found error. I tried to Google the issue, and even use Sage KB/Sage city to get an indication why the issue would occur. Unfortunately I could not readily find an answer however a thought dawned on me and I decided to look at the path just for giggles and of course it was well over its usable limit. The biggest culprit was crystal reports/business objects. I resolved the issue by creating a new environment variable for CrystalPath and copied all of the business object path parts into the new variable. I tacked ;%CrystalPath% at the end of the Path variable and now ERP 2014 client opens and runs as expected.

Make sure you check your path if your having load issues with the client after an install!

Pruning the Bushes

From time to time we need to cut back the bushes and trees to make them more manageable in our garden. This also helps ensure that they do not grow too big for their surroundings. Once done we can sit back on our deck and have a nice cold drink and just enjoy the view.

With Saleslogix 8 some changes to the way of the product got delivered made be think of this analogy. Within that timeframe a decision was made to include several localizations out of the box (French, Italian, Russian, and Danish I believe). The VFS (where all the customizations were stored) grew from approximately 200 MB all the way to a whopping 1GB when exported to the file system. Now though I think for the community as a whole this is a good thing to ensure that all localized versions are rolled out at the same time it does have a cost for organizations that really only need one targeted language.

Interesting enough a solution is fairly simple before you start your development/upgrade scenario. Lets just do some pruning. Basically I recommend after backing up your VFS for safe keeping going in and purging the non needed localizations


The easiest way to start is to export the VFS to a file based model (FLS) through the workspace manager.This allows us to work locally and use simple search/delete from windows explorer.

The main resource files are scattered throughout the model so I will start at the root and of the model and using the search look for all the files that end with *.[locale].resx


I complete this search for the following terms:

  • *.de.resx
  • *.ru.resx
  • *.it.resx
  • *.fr.resx

Each search should return approx 1522 files. After each search select all the files and [delete]. Once you delete all of the resource files you have removed about 40MB of extra assets.

The next step I do is visit each of the portals in the model. There are 2 sub folders in each portal that we need to be thinking of.

  1. SupportFiles\Bin
  2. SupportFiles\Help

Each of these folders contain specific sub folders for each of the extra Lanages. In these folders select the \RU, \IT, \FR, \DE sub folders and delete them as well. Deleting the sub folders in the bin folder will save several MB however the real win is in deleting the localized help folders. In the SalesLogix client portal the help saves more then 350MB.

Ultimately once this is all done the size of the VFS goes down from 1.04GB to 448MB. Quite the savings and ultimately will aid in deployment times and storage backup needs. This should also lower the memory requirements in depoyment as your removing 6+ K of files that need to be inspected for changes.

As always good development means good practices.

Small Business – Ebbs and Tides

The dreaded question, why should I renew my M&S – What do I get for it?

We all would like our businesses to run like well oiled machines. Software is built, and sold, M&S’s renewed, PSG group continues to grow as your name gets out is the dream but the path to the successful software business is paved with sleepless night, crunch times, mental exhaustion and exhilaration of seeing someone using your product and/or services and being so happy to recommend you to everyone you know. I have to say most days I love what I do, I get to work with lots of amazing people and to this day I actively develop tons of production code while growing BITtelligent.

For most of the history of the company we were and continue to be primarily services based. Having a long term relationship with Sage and more specifically the Saleslogix team I got to know and work with them with several of the Saleslogix technologies. I was asked to take over the Dynalink and ERPLink products and more then a year and half a go I acquired the IP rights to continue to move the products forward.

Its been a interesting year to say the least. During this time Saleslogix was acquired by Swiftpage and we have been lucky to be part of the NetSuite integration project and various other. I do really cherish  not only the working relationship but the friendships I have made with the teams over the years. We have been moving forward Dynalink and ERPLink in a slow and pragmatic way. I followed this approach as we had yet to identify the market of users and there was no transition plan of current Sage customers over to BITtelligent.

As much as we took a slower approach we had made material investments in tooling (3rd party libraries, equipment, licensing solutions), rebranded the product. Spent hours, days, weeks reworking UI, fixing defects, testing customer scenarios and adding new versions to the compatible list.

When it came to Dynalink we not only changed up the UI but we completely reworked the services engine, updated the scheduler, fixed defects, added custom actions, removed crystal reports so that we no longer had to deal with version conflicts and brought MAS 500 one way sync back in.

ERPLink went a bit differently as it really has a smaller community. The problem with synchronization platforms that are tied to specific endpoints is that your customer pool is much smaller then if you have a generic sync engine. Initially we had build (me specifically) a completely new administrator to remove any requirement on the Saleslogix sales client. To this day it remains about 90% complete but after much deep thought It was difficult to continue on without seeing a growing community. The fact is about the same time I took over ERPLink Sage put MAS 500’s future in doubt. I loved the workbench and what it offered but I could not see it providing a ROI even close to break even and had to make the heartbreaking decision to shutter it.

Interestingly not all is lost. We have been on a bit of a journey behind the scenes for the last little while and still have a ways to go to consolidate our applications (Dynalink, ERPLink, + Custom Platforms) into a more common synchronization platform so the initial vision of the workbench and consolidating our efforts will come to light.

That being said back to the initial line (what do I get for my M&S), being that we are hitting anniversaries for our first customers on M&S, the question arose. The standard answer is that for the M&S dollars the company has access to the latest builds of the product and access to submit defects and within a reasonable time obtain a resolution. The more complex answer is that the M&S dollars contribute to ensuring that the product continues to move forward, newer versions are built and compatibility is addresses before it is needed.

The reality is that M&S is rarely enough to cover the yearly costs as we really do not charge that much but it does help a bit.

Determining Features

Part of developing software is determining the right feature mix for the broadest customer base. The features are there to make it easier for the users, the internal support team or sales to generate new business. Finding the right feature that drives adoption and delights the end customer is a hard task indeed. This is more difficult when you have a smaller customer base as you now need to make sure that you can accurately cost the feature as well. Any small company needs to determine if the cost of developing and supporting the feature will be paid for within their sales and support base. As you can imagine there are a ton of features that never bear any return on investment.

BITtelligent tries its best to determine the right mix for Dynalink, Erplink and our next generation Sync platform. Unfortunately time from time a Feature does not get into the product because the cost of the feature is to high for our team to implement and current M&S/Sales will not pay for the development effort. It’s the reality of business that software development works this way and as a product vendor its difficult continue to build if there ultimately no financial reason to do this.

These decisions ultimately effect customers that may have certain business cases, or extensibility needs that could benefit with the addition of these one-off features. I have been thinking for a while how to address these needs while ensuring that we (BITtelligent) can justify the development costs. To that end I believe we are going to introduce the ‘Integration’ customization program where we can offer custom builds of our integration products allowing businesses to build off of the base functionality and where it makes most sense extending into their custom business domain. I have yet to work out the details however I believe a 2 tier method depending on if the customizations are owned by the customer or BITtelligent where the second choice would be a discount to the project rate.

Ultimately we would like to be as flexible as possible while being fair to all parties.

What do you think?

Saleslogix Conference Wrap up

As I prepare to leave the hotel to head home I am writing this. This week I attended the first Swiftpage run Saleslogix conference in Scottsdale, Arizona. I love the state, and the location always is a easy choice to host our group of Saleslogix partners, developers and Swiftpage employees.

For many of us in the community this was the first time to interact with the upper management, and hear the story behind the acquisition. The conference crossed a 2 1/2 day period and covered a myriad of topics. I was able to provide a talk on ‘.net extensions and SData’ . Although the time of my session was compressed as the earlier session ran on, I believe it was received positively. I hope to blog on the subject in the future.

I was happy to see a lot of old faces from the Saleslogix community past, and the story’s were abound by the fire pit over drinks. A lot of laughs were had, new friends made and the goal of networking succeeded.

The fact that Swiftpage had the conference with the  amount of work that each and every swifty has was incredible and should be commended. The primary importance this year was not content, or entertainment or any other indicator. The only importance here was for us, the most loyal of partners and those who invest their livelihood on the success of the platforms was  to meet the team who is running the company and understand how this story that began in May will play out. I feel in that respect I am more enlightened and can start to steer my company in the right direction.

I am hoping that there is a conference next year, and we can all sit by the fire and talk about how successful we and Swiftpage have become as partners in this journey together.

I raise a beer to the Swiftpage nation