Creating a Custom Smart part .. Go whole hog or go home

I get to work on a lot of SalesLogix web client projects. From time to time I get to take over a project that another developer has started. During that time I find places where the solution created is using methods that are less then optimal. One of the biggest issues I can see is when a developer decides that their needs for a smart part exceeds the capability of the designer and they need to go custom.

Now going custom in itself is not a bad thing and there are many reasons where it just makes sense from a delivery point of view. Where I get a bit disjointed is when the developer in going custom does not clean up after themselves.

What I mean about clean up comes with some of the artifacts that are generated out of application architect. When a smart part is generated a new form interface is created representing all of the controls on the form. This interface is then implemented at the control level and used in the C# code snippet form rules.

In deployment the AA based smart parts will be copied first across and then all the custom ones. If a developer inadvertently changes the  AA smart part and not the custom smart part they will not see their changes and more so the interface definition that might be implemented in the custom smart part will become invalid and could effectively break the page loading.

Since it will be difficult to keep these smart parts in sync without adding work to the process one of 2 items should be done if possible.

1. Delete the base smart part (in AA) and do all future work in the custom smart part

2. In the custom smart part delete all of the form interface code and go it alone.

When you decide to go custom, you should really be ready to take complete ownership of the smart part and its up keep. Cleaning up in this way will ensure that you do not have conflicts that may be difficult to determine.

Happy Coding …

iPod blogging

When the iPad came to Canada i immediately purchased one. Being a developer and small business owner I wanted to understand the the appeal and determine if there was some form of business opportunity to be had. Since then I have used the device mostly for reading blogs and PDF books.
Since I have very little time during the day I have started to think about the blogging capabilities of the device. I am usually using it at night when the rest of the family are watching tv. This post is the first post written on the iPad using the word press application and so far I am generally happy about the simplified posting capability. My typing ability seems good though I miss the tactile feedback I get from a normal keyboard. But whole in whole it seems like a viable way to get some of my thoughts posted.
Hopefully with this new found method for getting words out there I will be
Posting more often.

It Gets worse before it Gets Better

As is the Season and many are getting sick I have been hit with a pretty bad sinus infection. I have none of the external symptoms but do have the constant feeling like I got punched in the face. Its not a pleasant thing and something that I need to slug though. Being a small business owner it seems that its hard to take the time to rest and recoup properly. Couple the sickness with a new desire to get in shape ( a constant battle ) I have taken any of the comfort foods out of my diet. No more coffee, pop’s or sweets of any kind. I find when i feel ill I migrate back to eating, however this time I have stayed the course and I am sure when this is all said and done I will be much happier.

Now being sick I did what most do, visit my family Dr. He prescribed be some drugs that I have to take for 10 days. During the conversation he listed out some of the side effects and the frequency that they occur. When I had the prescription filled the pharmacist also listed out some of the side effects and their frequency.

It seems while taking this drugs I happen to be in the group of 1 in 10 that get them so its been an uncomfortable recovery so far.

Where is all this sickness talk going, well I was thinking about how ironic it is to get better sometimes we need to get worse. This matches up well when it comes to managing legacy development projects where you are getting the code as a tangled mess.

During the process of fixing defects, and micro re-architecture the actual product can be come more unstable. However, with further iterations and a more disciplined approach the application can be be managed back into health.

In my experience I have found that many an application needs such care. A large portion have been written in such a way or with tools that did not promote good architectural design, or lead to maintainability or future extensibility. 

I am very happy that we as a developer community have tools now that allow us to shape and morph the legacy code into a more elegant design. Removing redundancies, adding logging, cleaning up resources, and refactoring to patterns are all tasks when taking on a legacy development project.

I have to say I do like re-architecture work. It allows me to take a important system for a business and make it better in the long run.

The power of the Web

I have been working on an update of an integration engine that our company has built for a company in Denmark and currently focused on adding Office capabilities (Outlook, Excel …). Work has been going exceptionally well on the core infrastructure and I wrote the outlook connector during stops and plane trips back from Vegas on Saturday. Part of integrating with Office is the COM interop interfaces you have to use. Since the engine is supposed to be generic I wanted to write as little property access code as possible and determined that Reflection would be my best bet for the simplest code to do what is required.

So I rolled up my sleeves and worked away with PropertyInfo to get and set the object properties. To my dismay I was unable to get access to the underlying properties and no amount of casting or whining would work. Unfortunately I did not have internet access to see if anyone had gone to this dark place before me so I did what so many others have done before, Kludged a solution that worked but took way too many lines of code to implement and made me a little sick, but it worked and allowed me to prove out my design.

Well, I just got back to the engine now (3:25 am) and after looking at the code and knowing that it was not the right way to go I “Bing’d” Reflection of a COM object and lo and behold a post by Rick Strahl back in 2004 had the answer to my question.

Thanks Rick, you made my tummy happy and I can now feel more confident that I indeed have implemented the solution in a more elegant way.

Sage SalesLogix 7.5.3 is now available

Hey all you Sage SalesLogix users, guess what. The Sage SalesLogix team has release 7.5.3 update last week. Now is a great time to upgrade to the latest version of fixes and enhancements. We will be doing some upgrades this week and are looking forward to moving customers to the new version.

My Busy mind drop-kicked my desire for Sleep

As happens from time to time my capability to sleep is greatly effected by my active mind. Sometimes I think it a curse that I am very incapable of clearing out all though and just letting go for even 6 or more hours a night. I therefore find myself back in the office pounding away at the keyboard getting caught up from a week away on a family trip to Las Vegas.

With my Tim Hortons coffee in hand and ready to prepare for the days meetings (start in 7 hours) I decided to pause and get a blog written with some of the thoughts that have been churning in my head.

So lets begin the brain dump!

Recently Microsoft announced LightSwitch a rapid application development platform based on the Visual Studio development tool and some of their latest technology stack components (Silverlight, ADO.net Entity Framework ..). The tool is supposed to target non programmers to create line of business applications. My initial thoughts was that MS was watering down and trying to commoditize the development community where companies we have to work harder to justify their worth in  the development of great solutions. I believe that if it had come from an other vendor this would not have been such a questionable thought as the introduction of a tool such as this would have to compete on a fair and even playing field with the rest of the ecosystem. Microsoft introducing the tool muddy the water and made the decision making process slightly more difficult, or so I thought.

I think more so for me is that through the years I have had many of the same ideas that Microsoft is putting into play now and I failed to act on those decisions for one reason or another.

I was believing that LightSwitch was a technology disrupter at least in the MS development space but I am somewhat less inclined to believe that after spending the evening with the tool.

The fact is the tool is very similar (in my opinion) to other tools in the market (Access for example) when it comes to the generation of a application skeleton. I know that many squash the comparison, but the fact is even though it is sitting the new MS stack, the target audience it is the same, the experience for creating your shell is simpler (it seems). Less properties, less options and the UI is a forced one where you have to download/purchase new skins to get a look and feel that is unique.

Its a nice sandbox and I was able to get in and do enough work to see search and add/edit of a simple entity fairly quickly.

For basic CRUD applications LightSwitch could be a good thing. I can see several places where we at BITtelligent can use it to augment our process to give the customer some extra value add especially around administration processes however I cannot see it being the everyday tool for a development house.

Some of the things I liked from LightSwitch;

1. Easy to get in and start a project

2. Simple Data model development

3. Utilizes Silverlight, ADO.net

Some of the things I do not like

1. Seemed like the designers were MDI based

On a data model screen, click add a new View and the data model screen seemed to disappear

2. No control on how the UI is composed.

The framework composes the screen based on the controls you select. Every tool that I have worked with allow for precise layout and going back to a tool that does not seems outdated

3. Easy for non-programmer to get complex errors.

For example I can easily add in one of my button’s action event :

MessageBox.Show(“Hello World”);

When invoked this gives a cross thread error. In a non-programmer tool to see such an advanced error (threading) seems to be problematic and still displays the need for good debugging skills which the target audience may or may not have.

4. Constraints.

So this is the big one, since its a sandboxed environment options are limited to what the framework and tooling exposes. Generally all applications will look the same and to truly get a customized look or feel you will either need to obtain skins which I suspect will be a purchase from a 3rd party vendor like Infragistics, DevExpress or that free skins will be made available through the kindness of the community, or alternatively learn how to extend the product to create your own look and feel that I suspect is not targeted at the non-programmer.

Also their is quite the limitation of properties/settings. This could be either a good thing or a bad thing depending on the business need at hand but I have to believe that even MS cannot predict the usage scenarios of all the possible consumers.

5. Reporting, Distribution

I did not see anything in the box to address these items but I suspect if there is nothing there now, MS will address in the future.

Final thoughts

So from a competitive play against the current visual studio product, and the enterprise developers/consultants that work with the toolset it does feel like a threat to me. It lacks the breath/depth that so many applications required and to get the penultimate solution there will be so much more work that the non-developer will not be able to do.

However for small MS based consulting companies having knowledge and skills for utilizing SwitchLight might open up some new opportunities to add value to their current and new customers.

Here at BITtelligent Peter, Cory and Myself will be actively looking at the new toolsets (LightSwitch, MVC3/Razor, WP7) and thinking of ways to make ourselves more available to a broader group of customers and their needs.

SQL 2008 Removal Dialog

while removing SQL2008 off my development machine I noticed the dialog.

Note the icon is the standard .net Win forms Icon. Did that really get through QA. I am wondering if this is a UI design standard and I can spend that much less time prettying up forms. 🙂

Make Sure you Apply your Patches

I work with SalesLogix and support development on the Web Platform. With the introduction of 7.5.2 Sage started to introduce their fixes as web rollups, which consolidated several HF’s into one cohesive package. Each rollup builds upon the last and brings enhancements to the platform in areas such as speed and stability.  Like windows, or Mac or any other critical platform/application SalesLogix benefits from this from these patches being applied. The problem with patches within SalesLogix is there is the possibility that some Business Partner intervention is required, and probably recommended to ensure that the patch was applied correctly and that any of the customizations that have been created have not been overwritten or if required re-tweaked to work with any of the new changes. Given that this level of support is required you may very well hesitant on getting the patches applied but in the long run the costs on not applying the patches may outweigh the cost and effort of keeping them up to date.

Here are some of my recommendations to help mitigate the patch risk and keep things running as efficiently as possible.

1. Have your BP/Development partner have a backup of your latest VFS and a test\development database to work off of

2. Do not share Production with Testing/Development environments

3. Have your BP apply the patches after determining the impact areas and making the required changes. Note this bodes well with #1 if you have advanced customizations as the partner is more prone to have a toolset to solve any integrations issues more effectively instead in a Test/Production Environment.

4. Work off of project Backups. Even though the partner will be working against the bundles supplied by Sage you should expect a full project backup. This will ensure that you get everything that is working and only have to apply one or 2 things to production (.sxb possibly)

Depending on the scope of the HF the effort from the Business Partner will change however by following the steps outline you will be assured that the rollup can be installed and applied into product with a lower risk and a shorter window of downtime.

Currently there are 5 rollups available for 7.5.2. Are you up to date?

– Mark

Exciting Times indeed

This week marks the next milestone in the journey we are taking at BITtelligent Software. and this post marks the official announcement that we have a moved into a corporate office space. While we were more then capable of delivering on our customers projects in the home office that we had set up in we felt it was now time to move out and provide another level of credibility behind the business. Its been a hard week in both completing the move as well as continuing to deliver to our customers but we got through it unscathed.

I would also like to officially welcome Peter Wallace and Cory Fowler to the team. If you don’t know Peter yet he comes to us from Sage Mobile where his role was Software Architect. Peter brings a calm and balanced approach to software development and is always thinking of the critical path and ensuring that the software has the needed infrastructure for the enterprise environment.

Cory is a younger developer with a passion for community. He regularly blogs and is an advocate for Microsoft’s Azure platform. Cory has presented at many events and is always keen to discuss current technologies. Focused on web and Silverlight, and a flair for JQuery, Cory nicely augments the team with desired skills.

Both offer experience and skills that will benefit our customers in the months and years to come.

Over the next little while we will introduce web site revamp (so overdue) to reflect the new place and identify our core competencies. Though we have grown we will continue to hold true to our value system and work diligently with our customers to provide the right services and approaches tailored to each individual’s needs. If your in need of some custom development, or your a Sage SalesLogix business partner looking to augment your development team from time to time or on an ongoing basis please do consider us at BITtelligent. We are always open and willing to discuss ongoing opportunities and partnerships.

It is my hope that now that the team is filling out I will be able to spend some more time on the blogs and we each of our customers ensuring that we continue to meet and as possible exceed the needs in both skill and delivery.

Thanks to all of our customers, and partners, without your support we would not be here. We are looking forward to working with you all for years to come.

With gratitude

Mark

SalesLogix .net Extension issue

I was doing some work on a product today that uses .net extensions in SalesLogix. A problem was reported that one of the dependent assembly interfaces could not be located. I jumped on a gotomeeting to confirm that all of the assemblies were being registered from the correct location and had the right version numbers. Confusingly the assemblies looked correct but when registered one of the assemblies did not have the right version number. I decide to search the machine for other instances of the assembly and found that there were versions located in the program files\SalesLogix directory that had the suspicious version number. Once we deleted these rogue assemblies the extension manager resolved the child assemblies correctly. So if you have a problem with your assembly versions not matching up look in your saleslogix folder to see if an old version exists there.