Extending Security Entities

This morning I needed to add a new business rule method to the User entity for team inclusion. I followed all of the regular steps such as create the functionality in my external library, create the new business rule method on the user entity, ensure the new assembly was in the VFS, build interfaces, and build the web application. When I compiled and deployed I was getting an error that the method was not within the User entity (was in the interface correctly) but not the actual user entity. 

When you declare an business rule it does a few things (hopefully I get this right)

1. Update the entity interface with a method signature that matches the new rule

2. Adds a method to the entity that dispatches the call for the business rule. The actual rule is not contained within the entity but within one of the appropriate external assembly.

3. Adds a method entry to the dynamicmethods.xml . This file is the mapping file for the dynamic invocation of method. You can see the assembly, type and method that will be invoked.

So, extending the User entity does not work the same way as the assembly is really a support assembly and is not generated at compile time. To get around this limitation I more specifically just called into my rule directly instead of using the infrastructure. This is another example where external development comes in handy.

– Mark

A Case for an External Business Rule

For the last few days I have been working on a LAN to 7.2.2 customization for a customer.  I have had several issues with the way the VFS handles business rules but have been able to trudge through and get most of the work done. I had a small bit left that I decided to tackle this morning before the kids got up so I fired up AA and started to jump in. The task I had to complete was to create a custom property that would calculate some time based metrics around a ticket. Seemed pretty simple. Not so it seems with my configuration. I added a new property (C#) and saved. When I tried to compile I got a duplicate error where basically 2 snippet items were inserted in the VFS with the same item path. So I went over to the VFS explorer and started to drudge though the model. I located the 2 snippet items with the same item path and discovered that I had to manipulate not only the snippet but also potentially modelindex.xml and also Ticket.TICKET.entity.xml to get my business entities to compile correctly.

Now I wrote the code for my calculation which used the IDataService.GetConnection() method. Once the code was completed I tried to compile. Compile failed with a type resolution error (System.Data .. not known).  Ok, so to fix this issue I should go and edit my CodeSnippets.xml file and add a default assembly reference. I add a new node to the references XML section System.Data.dll, does not work. Ok try System.Data, again does not work. It is trying to resolve the references in the folder path of AA. Since this is a system reference it will not be there, UGH does not work.

So I decide to create an external rule assembly where there are no reference constraints to worry about. 5 minutes later all is good.

So if you need a business rule, or property that needs some system level functionality they you may want to consider using an external assembly instead of C#/VB.net code internal to the model.

– Mark

Microsoft the root of all Evil?

One of the recurring themes in the software world is that Microsoft, and its practices stifles innovation. Through predatory tactics they close down markets and destroy competitors. Debate goes on to this day on how they still are a threat and that the outside world software world combined does not contain the capability of standing up to that threat without the use of legal force. As a software developer and small business owner I want to contrast that thought with what alternatives I see we have.


When I peer into the Linux world I see fragmentation, no clear sign of a winner in the desktop space. Given that anything I develop has an inherent cost to it (time, family, wages, brain pain) having some assurance that a platform would be generally accepted and installed is a great indication on my decision to adopt. I honestly do not have a desire to build/compile my own kernel and I suspect most of the general population does not as well.  The other tangible item I like is a single line of responsibility where you can go to a specific vendor and get some answer to an issue, and lay the responsibility of fixing it squarely on their shoulders. Note that I have installed Ubuntu onto a VM to dig deeper but have not gotten very far as of yet.

Apple OSX

Now looking at Apple (I own an iMac) the one thing I have to say is the hardware is for the most part beautiful. I have replaced the mouse with a Logitech one and I still find the keyboard layout a little ‘wonky’ for me when I use the system. Lets start out with the first issue I have with Mac, the stupid Mac vs. PC commercials. I know it may sound stupid for this to be a problem, but it is. Why, because for the most part it is extremely untrue. I have had PCs that run for years with very little problem and effort, where as I had my Mac and within a week it was screaming at me with a fault error (unseated ram BTW). Macs do break down, their covers get discoloured, their batteries get recalled, and other failures do happen. PCs can be used for every type of software imagined from Animation, music controllers, graphics design, video editing, office productivity and so much more.

Another thing that I ponder is when we contrast Steve Jobs and Bill Gates, are their character types so dissimilar. On the one side Bill is vilified on how he has run Microsoft and forced customers, vendors and competitors to his desire. On the other side Steve is look upon as a hero by creating ‘Innovative’ products and new markets. What seems strange to me is on the outset is not Steve acting the same way when it comes to iTunes, the store and its delivery and DRM as it is a very closed system and is at near monopoly adoption rates. Development on the Mac and IPhone and its closed tool environment where apple controls it where there is no real competition for that tool set. Delivery of  custom iPhone applications and the revenue sharing model adopted were 30% (I believe this #) is changed for service through iTunes as well. Another issue that I see is the general high cost of the ‘Innovative’ apple hardware. Sure they look nice but does the nice really contribute to a 100% or more increase in the cost of the hardware. RAM is another money grab in my opinion, where guying PC ram is trivial, buying it for a MAC is outrageously expensive. I really like the fact that I can go down to my local Future Shop/Best Buy and purchase some commodity hardware to get the job done that is affordable. A Prime example is a couple of weeks ago I was starting a new project on a older version of a web platform. I was trying to decide between a VM or purchasing a second PC development machine for these types of jobs. I do not mind a VM for small workloads but the effort was 200+ hours of paid development time. So I went to the best buy, purchased a HP Slimline ($499)  Windows installed, 500 GB HD, 4 GB of memory and could handle 1920×1200 resolution and brought it home. Less the 1/2 hour later it was up and running with a VS2008 instance ready to go. For the same configuration for an Apple I expect I would be pretty close to 2 grand.

Steve is really from the old world of thinking and continues to have huge control over the aspects of Apple.

Look at it this way your software goes up on iTunes with hundreds, if not thousands of other titles. To sell your product you will still have to pay for advertising, on top of all of the R&D to get it to market. So for 30% you are getting attached to a list of other products and get to host the download on iTunes. Does not see quite right to me.


I do not personally believe that Microsoft stifles innovation. I actually would attribute this problem more with the broken patent system where even the most nonsensical ‘brain fart’ can be approved and the litigation process that ensues. The fact that businesses have been created on purchasing these ‘ideas’ and suing the crap out of smaller companies is just ridicules. If we as a society want true innovation, remove or reduce the roadblocks in creating new and compelling software products and allow the customer to decide.


Linux does not have enough penetration in the desktop OS to make it viable business case for the small development shops

OSX is a shift to the way I develop and the general costs are extremely high.

Windows is the devil I know and love and at times love to hate, but it has the adoption. The platform is standard and the software I write can have exposure to a large enough community that I can build a viable business on.

BITtelligent Dev, Mobility and Embracing the Inner Qualities

I started actively soliciting the services of my company several months ago. BITtelligent has been running for years and work done for Corum and Castle  have been based on services that I provide. I provide development services to business partners and the Sage community as a whole, and of course to companies outside of the Sage community. In all counts the company has been very successful, and making the full-time transition was the right time. I attribute this to many factors such as needed skills, affordable price point, and availability. We are already looking to hire the right developers to join us in our Cambridge, On office.

Embracing History

As I was the Chief Architect and Director of the Corum Mobile Platform, and later Sage Mobile I am seen in the community as the ‘Mobile’ guy. For the last few months I have been trying to lower that vision of my skills to spread out understanding of the capabilities that I can offer. However, based on conversations with people that I greatly respect It only makes sense to ‘Embrace’ these capabilities and support the community (BPs and end customers) moving forward. To that end if you have any Sage Mobile, or mobile development needs, do not hesitate to contact me and I will be your ‘Mobile Guy’ 🙂

Training anyone

I am looking to gauge interest in advanced Mobile or General development training in the community. If you or your company has such an interest please email me at mark.dykun@bittelligentdev.com . If there is enough interest I will setup some training classes (online or onsite) .  Previously at Corum I trained many, many classes in Canada, the US, Australia, and the UK.

Supporting the Business Partner

One of the focuses of my company (www.bittelligentdev.com) is Business Partner development support where I can augment the partners development team and bring in skills and services that may not be available otherwise.  I provide full product development support (mobile or otherwise) and Sage SalesLogix platform customization support (Windows, Web and Mobility). If you are embarking on a large project and need to augment your existing team please consider BITtelligent as a viable solution.

– Mark

Mobile Navigation

I really think the writing is on the wall. The way we navigated within or mobile sets across the board will shift between touch/multi-touch and tactile keyboard as a standard across all mobile manufacturers. iPhone was not the first to provide touch capabilities to a phone/PDA however the way it works is very natural to the average joe and brings the navigation to the figures with gestures, and flicks. Samsung is releasing their ‘Instinct’ phone that also provides touch capabilities. I read yesterday that Windows Mobile 7 will introduce new UI and touch capabilities merging the SmartPhone OS with the PPC OS finally 🙂 Also with the next version of Windows multi-touch capabilities will be introduced into the OS and support will exist even for existing tablet PCs. The only device provider that I have not heard much about when it comes to touch support is RIM but I suspect that as the playing field levels it is only a natural direction for them to go in.

Development Environments

Given all of the shifts to touch on these devices it really bodes well for technologies like Silverlight/WPF and other Rich UI development environments.

One of the things I have been thinking about lately is mobile navigation. For example in the Sage Mobile Platform you drill down from form to form to see the information you are looking for be contacts, accounts, or opportunities. The forms are tab bases so you further drill down to a tab and navigating back and forth is through a collection of menu/tool button choices and popping screens.

My Ideas of Next Generation Navigation

The platform follows a pretty specific pattern and is more the likely shared by other menu platforms. Login->Select a Menu Item->Search for your data->view/change your data->save->close search->Start again. I am starting to think in a more view port methodology where composed entities are snapped together end to end and these entities are bound by a central context.  If I can be clearer, there is no reason that a screen of data needs to display completely related material, or if it does it can display it in completely different ways. An individual ‘View’ is made up of many interchangeable pieces that can be snapped together end to end. This takes away the ‘TAB’ UI metaphor and allow gesture navigation between tiles where the navigation shape can be box, or linear based. Tying the movements from one tile to another tile would be handled by the transition engine (Scrolling, replace, .. kinds of transitions) .

Given that these views are created by snapping together individual tiles the level of composition increases and allows for individual control over navigation and flow. For example say to me my contact information for a given user is the most important thing. Right now I have to do one of 2 things, select contacts->search for the contact->edit the contact or add the contact->Navigate to the Favorites->edit contact. Ok, I now have decided that I am going into see that contact, instead of searching for the contact again and again (review address to get there, while waiting for the meeting, potentially in meeting to review details) I can ‘Tear’ off the contact  and associated it to my main view where the details of that contact are up-front and central.

This approach also opens up the capabilities around dashboards, and reports on mobile devices as you can easily navigate around a much larger view simply by gesturing.

view SWF demo of PPC navigation

– Mark

Sage Mobile Plug-in Types

There are 20 distinct plug-in types used currently in the Sage Mobile platform. They are broken into device based categories. Supported is windows mobile PPC, SmartPhone and BlackBerry. Plug-ins whose type number is less then 10o target the windows mobile platform whereas 101 and greater is targeted towards Blackberry

Windows Mobile Plug-in types

  • VB.net Code (Business Entities, Action Code, ..) – Type 1
  • PPC Form – Type 2
  • Database Table – Type 6
  • Navigation Panel – Type 9
  • Action Bar – Type 10
  • Server 2 Client Map – Type 11
  • Client Query – Type 12
  • Client 2 Server Map – Type 13
  • Server Code Behind – Type 14
  • Detail Panels – Type 15
  • SmartPhone Form – Type 20
  • SmartPhone Detail Panel – Type 21
  • SmartPhone ActionBar – Type 22

BlackBerry Plugin-Types

  • Java Code – Type 101
  • BlackBerry Form –  Type 102
  • Database Table – Type 106
  • Action Bars – Type 110
  • Queries – Type 112
  • Detail Panels – Type 115
  • Table Relationships – Type 116

Plug-ins are store as a mixture of XML and code (VB.net or java) and are also versioned. The last non-deleted version will be used within a compilation and deployment.

Plug-ins that have Changed in Mobile 5.0 SP1

The a .pkm file in Sage Mobile is nothing more then an xml package that describes any plug-in changes/language string additions that should be applied to a designer. Sage Mobile 5.1 includes a designer upgrade package that includes the following changed plugins/languages strings. If you have made any changes to these files in your customizations please be aware of a update of your code may be required.

Client 2 Server Maps

  • Client2ServerMap (BlackBerry)
  • Client2ServerMap_Blackberry_SLX7

Sever 2 Client Maps

  • Server2Client Map (BlackBerry)
  • Server2Client Map_BlackBerry_SLX7

BlackBerry Queries

  • All_Seccode
  • All_Tickets
  • All_Urgencies
  • Open_Tickets

BlackBerry Action Bars

  • Standard Action Bars

BlackBerry Code Files

  • BaseActivity
  • BaseAllTicketsClientQueries
  • BaseOpenTicketsClientQueries
  • BaseOpportunity
  • BaseTicket
  • SystemStringProvider
  • TicketIDGenerator

BlackBerry Tables

  • Ticket
  • User_Activity

BlackBerry Forms – Type

  • Account
  • Activity
  • Ticket

Windows Mobile Code Behind – Type 1

  • ActivitiesForm
  • BaseActivity
  • BaseHistory
  • BaseHistorySP
  • CalendarPanelSP
  • SetingsFormSP

SmartPhone Forms – Type 20

  • Opportunity_Product

Windows Mobile Table – Type 6

  • Ticket Problem

Windows Mobile PPC Forms – Type 2

  • Opportunity
  • Opportunity_product

Windows Mobile Detail Panel

  • AccountDetailPanel
  • ContactDetailPanel

Language Statements

  • Added Seccode


On a side note when thinking about plug-in naming conventions I cannot say I like the Base prefix on the plug-ins and believe that the ‘base’ should be applied to the end of the plug-in name. This is truly from an organization stand point where the plug-ins could be displayed grouped/categorized in a simple to locate method such as;

  • AccountEntity
  • AccountEntityBase
  • AccountForm
  • AccountDetailPanel
  • AccountAllQuery
  • AccountCompetitorsQuery

– Mark