This site uses cookies. By continuing you accept the use of cookies.I Accept

During January we successfully renewed our Gold Certification with Microsoft. Our focus competency is Application Development.

_MG_5823

Our firm Mindbite AB has been a partner with Microsoft for over 10 years. In 2009 we a became Silver Certified Partner (Independent Software Vendor), and in 2011 we decided to shoot for the gold-level. Which we succeeded with. In 2012 we managed to maintain our gold-level status.

In 2013 we decided to certify our main product SiteFactory CMS for Microsoft Windows Server 2012. This was a major task, since it’s a complicated procedure to certify an application for gold-level. We upgraded our physical and virtual environments to Windows Server 2012 and using only MinShell on the Test Server, we installed and ran our product flawlessly.

After this certification we were able to continue with our Gold Partner Certification which we completed late December 2013. The Certification Process includes our Gold Certified product SiteFactory CMS, Customer References and a Customer Survey where we scored about twice as high Customer Satisfaction than the average Swedish Partner.

Our Gold Partnership with Microsoft is of great value to both us and our customers. It grants us access to the latest tools before our non-partner competition, and we get first class support from Microsoft during our Product Development.

There are only about 70 companies, that are Gold Certified Partners for Application Development in Sweden. Only five of those are in our greater region, including us.

For the second year we have reached the gold status level in our partnership with Microsoft. Mindbite AB is now a Microsoft Gold Partner in the Application Development competency.

Gold

We completed the competency requirements a month ago, which means that we’ve been a Gold Certified Partner for about 13 months (including last years achievements). The competency we’ve been working with was formerly called Independent Software Vendor (ISV).

The competency has now been merged with the following competencies and is now called Application Development

  • Software Development
  • Web Development

We are very happy with this transformation and we believe that our customers and future customers will have a better understanding about the meaning of this partnership. Simply put, it means that we are the best at Application Development. And this is important since we work with both Web Development and Software Development for several platforms, including computers, tablets and phones.

The requirements for this competency are tough, so we are very proud of our achievements. And we will continue our hard work to keep our gold partnership with Microsoft.

As a Microsoft Gold Certified Partner Company we place ourselves in the top 5% of Microsoft Partners worldwide. In Sweden we are currently one out of 36 companies with this competency. Worldwide we are one out of 908 companies. In our region “Småland” we share this competency with only two companies; Visma SPSC AB and Litium Affärskommunikation AB.

About two weeks ago we released a new major version of SiteFactory CMS. One of the main features is “Isolated Modules”.

The Isolated Modules functionality is a great leap from our traditional way of developing modules. They work more like “Apps” in modern cell phones. They can utilize all functionality that exists in the core library, and other parts of the system can read information from each module.

What is Isolated Modules?

Every module has its own configuration file. The configuration file can be filled with module specific settings. It also defines the appearance of the module in SiteFactory CMS. The module can also contain CSS- and JScript files. When the module is loaded into the system, it collects and implements any found CSS- and/or JScript files.

Web forms and translation resources are also packaged within the module and are structured as defined in the configuration files. Since each module has its own translation resources there can never be a collision between system translation and module translation. An Isolated Module can easily be packaged and deployed in any SiteFactory CMS implementation. Since every part of the module is very structured it’s easy to write deployment scripts. From the Developer Central in SiteFactory CMS we can manage every Isolated Module and deploy them on the site.

When developing an Isolated Module, you often need to get configuration values, translation resource values and other module specific data. So we developed a base class that every module can inherit from. The class knows exactly which module the developer is working with and therefor it’s easy to work with the module.

image

Some examples

image

GetConfigurationValue reads from the specific module’s configuration file.

image

GetTranslationValue reads from the module’s translation resource. The module is aware of the current user’s culture and picks the value from the correct translation file based on that culture.

These are just two of many module-related functions and methods that the system provides to the developers.

Widgets can also be developed for each module and the widgets get the same possibilities as the Web Forms, to read its module specific information. When adding a widget to a module, the Dashboard automatically discovers it and makes it available for the users.

Why do we call it Isolated Modules?

As you have read, this kind of module comes with their own forms, css, scripts, settings and translation resources. Even though they can consume assets from the entire site, they are also very isolated. A module cannot ever read information from another module by accident. For instance, when a translation resource is requested in a module, the system only looks in that particular module.

Security

Security settings are configured in each module and these settings are read by the system so that the administrators can allow or prohibit users from accessing whole or parts of the module. By default, only administrators can access modules.

Closing comments

The way we develop modules in SiteFactory CMS has always been one of our most powerful features. With the Isolated Modules we made them even more powerful. Existing modules at out customers' sites are not to be considered out-dated, they are only developed in a different way.

The new functionality gives the developer a more manageable way to develop modules as every asset is placed in a better structure. An isolated structure.

Last week I started developing a solution for a customer, with the target of creating an Excel Workbook programmatically.

Since we use Microsoft .Net Framework for all our solutions everything is familiar and it’s easy to get started with development against Office applications.

The solution gathers a huge amount of data and fills around 20-30 Worksheets with tables and charts. Everything is based on several filters sent to our application. So the data, number of Worksheets and the design of the charts are designed based on this.

I came across several obstacles in this solution that I want to share.

Debugging

It’s hard to debug an application that is communicating with the Excel Interop. The application simply crashes and the Excel Instance is not killed automatically. So I used one of my screens for the Task Manager, which made it easy for me to kill the instances every time my app crashed.

I still haven’t figured out how to debug this yet.

Performance

When working with the cells in your Worksheet, you must define a Range to work with. The range consists of cells and you can read and write data to them. It didn’t take long before I noticed that every time you put a value in a cell, a call is made to the Excel Interop. Even when putting small amounts of data in a small amount of cells you get slow performance.

The solution is working with Multi Dimensional Arrays, and putting the data into the array. When all data is in its place, you simply write the array to a designated Range in the Worksheet.

image

The example above is an array that works as a matrix. Since I  want to put numbers, strings, dates and formulas in the cells I use object in the array.

After declaring my array I put the data into it:

image

When it’s time to put the data into the Worksheet I do as follow:

image

This performance workaround may seem a little odd, and it’s nothing you’re used to when working with .net. In this case it’s completely necessary.

Using hidden data sources for Charts

In our case we must create several charts based on data that we don’t want to visualize for the person who opens the Excel Workbook. Our solution holds around 150 charts spread over around 25 Worksheets, and the data source for each Chart is unique.

Since (by what I know) you must use cell data as a data source for any chart in Excel we had to create around 150 “tables” containing the data. We felt it would be ugly to display this data in a Worksheet, displayable for any reader.

The solution we used was to create a Worksheet and filling it with data. Then we created the chart and used the data as a Data Source. The last thing we did was to hide the Worksheet that held the data.

You can hide a Worksheet in two ways:

image

This hides the Worksheet, but the user is able to make it visible in the Workbook. So we used the following instead:

image

This completely hides the Worksheet, and the user is unable to make it visible (maybe there is some way but I haven’t found it yet).

Compatibility

This isn’t really an obstacle, other than that a user may use an old version of Office Excel. But when calling the Excel Interop to Save the document to disk, you can provide the version of Excel you want to save for.

image

In our solution, that will be used by any Internet user, we target an older version of Microsoft Excel.

Closing comments

It’s both fun and interesting to work with Visual Studio Tools for Office, and it gives us a great chance to develop better business applications.

The solution we are working on now isn’t made public yet, but I will follow up with more blog posts about this later on.
I will dedicate at least one future blog post to code examples and tips.

As we say in Sweden; Swim Calm!

This is my first blog post in my brand new blog!

My name is Robin Månsson and I'm Head of Development at the company Mindbite AB. Me and my friend Marcus started the company way back in the spring of year 2000. We currently have two employees with great skills in both design and programming.

My primary focus is programming web applications in Microsoft .Net. I started building web sites in the middle of the 90's, and I began programming somewhere around 1998. My first IDE was Visual Studio 3.0 and I haven't left Visual Studio since.

Not only am I a full time programmer, I'm also a full time family man and father. In november 2009 we gave birth to our wonderful daughter Nelly.

By the way, I live in Hultsfred, Sweden. A town most famous for starting one of the first rock festivals in Sweden, but also for having the first northern desert; "Kira's Desert".

Why do I want to blog?

I want to make my way into the community, sharing my experiences and knowledge. But most importantly I want to gain more knowledge by other professional’s feedback on my future posts.

The reason this blog is entirely in English, is because I want a bigger audience for my posts.