Your Development & Design Resource

Domino Flex Fields

The majority of off-the-shelf solutions are designed to meet certain needs, but anyone can tell you that shelfware will only give you 80-90% (on a good day) of the functionality and capability that you're business requires. Even vertical-specific shelfware is not designed to a given customer's requirements - Your company needs to track specific data and perform specific functionality based on your business requirements. This is the problem at the heart of the CIO plight: 3rd Party Shelfware or 3rd Party-or-In House Custom software?

The better software solutions on the market today allow you to expand the current solution via configuration controls, which conditionally allow either pre-built or custom functionality and data entry points. From the functionality standpoint, creating/expanding built-in functionality (especially in the Lotus software world) is often simple enough... provided the solution is architected properly and allows the Admin or Power User type of users to modify said functionality via a controlled environment such as a configuration console/dashboard UI. A solution that's user-friendly enough while giving it's author the ability to address their business requirements. I'll go into just how such a dashboard solution can be architected in a future publishing, and instead turn my attention to a much more common theme in "better software solutions".

Enter User Defined Fields (UDF) - something that the majority of even LND-based solutions use to allow a given Admin or Power User to define what content is stored and displayed in a document without the needs to re-write the application UI (read: customize the 3rd-Party solution, thus possibly voiding vendor support and at the very least making upgrades that much more difficult...). With UDFs, the solutions typically allow for the label to be changed to reflect the requested content, while the field is named something like "UserDefined01".

This works for individual deployments, but a problem arises when the solution is deployed across multiple business units, (or subsidiaries, etc.). UserDefined01 might be labelled "Eye Color" in one instance while it's labelled "Weight" in another. Now, if you're looking to consolidate the data across the entire organization into a Master Data Warehouse of sorts, or simply trying to do consolidated reporting... you've now got a nightmare on your hands: Half of your reports tell you that your customer weighs "blue"!

Someting else to consider is the daily overhead resultant from the configuration being checked, rechecked, and rechecked again each time the solution is launched. Consider this: When you open a given form, it needs to see what fields are to be shown and what fields are to be hidden. It needs to display a conditional label and possibly even a conditional data entry "widget". Once your solution is set, why do you need to constantly check and recheck and recheck again what the configuration should be? Again, more on that later. For now, back to our UDFs...

So what do we do? Well, a current SQL/.Net solution that I'm working on has an interesting architecture in place to account for future/further data requirements without modification to the backend data tables: Flex Fields.

Oracle defines the Flexfield as follows: (source:

"...a flexfield is a database field that has flexibility built into it so that users can define reporting structures that are relevant to their specific organizations."

The SQL/.Net solution adopted this methodology and created Flex Field records that store given data for the "parent" record for further usage, while maintaining the current application architecture. It's a pretty slick solution actually, and something that I in-turn stole adopted for usage in my LND-based solutions.

So, let's recap...

The issue:
UDFs don't work. For small shops and single-instance deployments, they're fine. Otherwise, it's a data integrity nightmare potentially storing ANY field data in general fields that's input criteria can only be defined by the change of a label.
The (suggested) solution:
Create Domino Flex Fields. Documents will have subordinate documents that contain the elective data, the elective unique data key (the fieldname if you will), and the elective data label. Take this a step farther (and as a Proof of Concept), we will modify a sample application UI (Notes based, as the Domino web implementation is so much easier) and allow limitless Flex Field creation, utilization, and modification.

In the next part of this article, we'll discuss the steps taken to create the Domino Flex Field POC.

About the author: Chris Toohey

Thought Leadership, Web & Mobile Application Development, Solutions Integration, Technical Writing & Mentoring

A published developer and webmaster of, Chris Toohey specializes in platform application development, solutions integration, and evangelism of platform capabilities and best practices.

More from is powered by IBM Notes Domino XPages & hosted by Prominic.NET

Contact Us

Use our Contact / Feedback form or one of these email addresses:

Creative Commons License

Except where otherwise noted, by Chris Toohey is licensed under a Creative Commons Attribution-ShareAlike 4.0 International License.