About IBM Domino and more...


Fredrik Malmborg  2016 August 26 08:43:49
Ed Brill is pretty clear about that IBM will make changes to the IBM Notes/Domino offerings that will not be status quo.

The less good alternative is if they decide to just leave it as it is after the "Verse release". Giving us 5 years to migrate not just the client but also the backend. It is a reasonable time span to fix things.

If I may speculate and dream then I would see the "Rich client" and its components in designer go away and the Domino Designer being vitalized in the latest Eclipse release. The "Notes browser plugin" will be enough for traditional client access. I don´t think they need to do much with the Domino Administrator. This way the openNTF way of extending Domino/XPages will get even more focus and IBM would get rid of the burden to maintain obsolete offerings. Customer would still have 5 years to move away from the fat client.

Domino is too good to abandon, but the fat Notes client should get an honorable goodbye.


Simple update of parent view when posting with WQS

Fredrik Malmborg  2016 April 8 16:34:23
Here is a dirty trick to update the view that you opened a document from on the web. Useful if you open documents in a new browser window.

You put this code in the WebQuerySave agent of the form and it will update the window you opened the form/document from.

Image:Simple update of parent view when posting with WQS

Collecting agent schedule information from DXL

Fredrik Malmborg  2016 March 31 12:02:04
I have made an application to collect agent information from multiple Domino servers and domains. For the basic information you can use properties of the NotesAgent class but for schedule details you can´t.

I find going via DXL to be the best way to get it. Here is parts of the code that lives in a class. Don't think you need all code to understand how to use it. I might share the complete application later.

The format of the datetime node values may need to be reformatted after reading them from the DXL for your presentation needs.

     Dim session As New NotesSession
     Dim domparser As NotesDOMParser
     Dim exporter As NotesDXLExporter
     Dim nc As NotesNoteCollection
     Dim agent As NotesAgent
     Dim strDXL As String
     Dim stream As NotesStream
     On Error GoTo eh                
     If (me.agent Is Nothing) Then Exit Sub
     Set nc = me.SourceDb.CreateNoteCollection(False)
     Call nc.Add(me.agent)
     'Using a stream as output and not using pipelining makes it rather simple to process/read the DXL. No external file needed.
     Set stream = session.CreateStream

     Set exporter = session.CreateDXLExporter(nc)
     strDXL = exporter.export
     Set domParser  = session.CreateDOMParser(strDXL)
     On Event PostDOMParse From domParser Call ProcessDOM
     Call domParser.SetOutput(stream)
     Call domParser.Parse
     'Do something with the returned data that now is in the Type "schedule"
     Delete stream
     Exit Sub
     MsgBox "<" & session.currentagent.name & "> (" & GetThreadInfo(1) & ") error " & Err & " line " & Erl & ". "& Error$
     Exit Sub        

Sub ProcessDom(domParser As NotesDOMParser)
     Dim rootnodelist As NotesDOMNodeList
     Dim agentnodelist As NotesDOMNodeList
     Dim triggernode As NotesDOMElementNode
     Dim agentnode As NotesDOMElementNode
     Dim domdoc As NotesDOMDocumentNode
     Dim node As NotesDOMElementNode
     Dim nodelist As NotesDOMNodeList
     Dim subnode As NotesDOMNode
     Dim i As Long
     On Error GoTo eh
     Set domDoc = domParser.Document
     Set rootnodeList = domDoc.GetElementsByTagName("agent")
     For i = 1 To rootnodeList.NumberOfEntries
             Set agentNode = rootnodeList.GetItem(i)
             Set agentnodelist = agentNode.GetElementsByTagName ("trigger")
             Set triggernode = agentnodelist.GetItem(1)
             Set nodelist = triggernode.GetElementsByTagName("schedule")
             'If a schedule node was found
             If nodelist.NumberOfEntries > 0 Then
             'There is only one schedule node
                     Set node = nodelist.GetItem(1)
                     'Puts the schedule data in a custom Type "schedule"
                     schedule.strType = node.GetAttribute("type")
                     schedule.strHours = CStr(node.GetAttribute("hours"))
                     schedule.strMinutes = CStr(node.GetAttribute("minutes"))
                     schedule.strRunLocation = node.getAttribute("runlocation")
                     schedule.bOnWeekends = (node.GetAttribute("onweekends") = "true")
                     'Look for starttime element, followed by optional endtime, startdate, and enddate
                     If node.HasChildNodes Then
                             Set subnode = node.FirstChild
                             While Not subnode.IsNull
                                     'Each contains a datetime node
                                     Select Case subnode.NodeName
                                     Case "starttime": schedule.starttime = subnode.FirstChild.FirstChild.NodeValue
                                     Case "endtime": schedule.endtime = subnode.FirstChild.FirstChild.NodeValue
                                     Case "startdate": schedule.startdate = subnode.FirstChild.FirstChild.NodeValue
                                     Case "enddate": schedule.enddate = subnode.FirstChild.FirstChild.NodeValue
                                     End Select
                                     Set subnode = subnode.NextSibling
                     End if
             End If                
     Exit Sub
     MsgBox "(" & GetThreadInfo(1) & ") error " & Err & " line " & Erl & ". "& Error$
     Exit Sub        

New inspiration to blog

Fredrik Malmborg  2016 March 12 14:29:24
Almost two years have gone since last blog post, a lot has happened since then.

First of all I got employed by PSK Syd AB in December 2014. So good to be part of a team again and this one specifically. We got loads of work to be done that can look overwhelming but we are a positive crew with some great ideas and inspiration.

As this was not enough we just started on our journey to go from traditional adhoc Domino development to using JIRA for our projects. We also decided to give Sencha ExtJS a chance to show what it can give us. Looks very promising. And no we are not leaving IBM Domino behind us, we still want our data to be there and there will still be applications running with Domino forms for many years ahead. The company has been using IBM Notes and Domino almost since it was established in 1988. Found an original package of Notes 3 here the other day.

We got some nice things to share with you so I will be doing that further on. The intention is also to tell you about our experiences from giving Sencha, JIRA, BitBucket and Confluence a go.

Watching what is happening within IBM Collaboration Solutions makes me glad and inspired. It is fresh and promising. Seeing Ed Brill back is like a rebirth of a lost friend professionaly.

I will be joining Engage in Eindhoven together with a collegue of mine, looking forward to see you !

IBM Domino and Open Source #codefortim

Fredrik Malmborg  2014 May 21 15:42:10
Since the early days of Notes, when it was developed by the company Lotus, it has been a tradition to share solutions with the community. Maybe you have heard about notes.net or Lotus sandbox. Lotus sandbox is still available even if the content is rather old.

Today most of the sharing is administered by the OpenNTF community. It was launched in 2002 and today it hosts about 400 different projects and about 1000 shared snippets. There are about 65 000 registered users. IBM invests in the organization by providing staff working for the community and releasing code as open source.


This article was originally written in Swedish. I am making it available in English to honor the spirit of Tim Tripcony, a very talented man that recently passed away. He was eagerly sharing his knowledge and was always ready to support the community.

How to share code with IBM Notes/Domino

An application is a database, which is a file. A solution can contain multiple applications/databases. Earlier they were just called databases, but IBM changed it to be called applications instead.
There is a built in system for template management. Templates are simply copies of applications that can be used to create new instances of the application. Normally you only save design and code in templates, but you can also include data in the form of Notes documents and attached file resources.
Because of the fact that an application/template is a file, it is very easy to distribute it. There are also connections to systems for source control like Git.

License used for sharing is important

When you want to share code or solutions, it is important to select and announce under which license it is being published. If you fail to provide that information then you stop further development and sharing. The reason for that is that if you want to publish something as open source, all parts used in your solution must also be covered by the license you want to publish your new solution under. If you used some code that was not published with a suitable license, you cannot share your new solution with open source license.

The most used licenses are Apache License Version 2. (ALv2) and GPL Licensing.
Usually ALv2 is easier to use than GPL, because the later has a more complex set of rules when third part is included.
If you are interested in learning more about licenses for open source, you find information at OpenNTF. You find the address in the resources list below.

Social intranet developed by a Swede

A couple of years ago Thomas Adrian launched his project ”Intrapages”. It is a social intranet built with the XPages framework on IBM Domino. He has chosen to share his work and maintains it with updates, fixes and new features.

It is a file that you can download for free and put on your IBM Domino server. When you have done that you have your own social intranet with a lot of features like:

–        Sharing of files, photos and other internal or external information.
–        Easy access and security management. You can use the Domino account to login, but also possible to use your Facebook,  Linkedin or Twitter account.
–        Solution to the problem with users mailing files. You now got a place to share files.
–        Every user got his own profile and can create content.
–        Separate teamrooms for projects, departments, countries...
–        Common calendar for bookings, adverts, meetings, events and more.

The solution is configurable. You can change look and feel, and select what parts should be active for users. If you are curious about it, there is a demo site where you can create your own account and try out the features.


When IBM released version 8.5 of Notes/Domino there was a new framework included called XPages. It is a totally new way of building web and mobile applications hosted by Domino.
A key component are the Custom Controls. It is configurable parts that can be put together in an XPage. Simply put it enables drag and drop to build a page with connections to relational databases, integrate with Twitter, Facebook and much more. There are even templates for layouts like Twitter.
Most of the time you use JavaScript to code in XPages. Both client side and server side. At OpenNTF you find loads of code and information in the category XPages.


Archived Lotus Sandbox




OpenNTF - Intellectual Property Policy (licensing)


Intrapages demo


Categorized links/news related to IBM Collaboration Solutions


IBM Domino och öppen källkod

Fredrik Malmborg  2014 April 11 19:21:39
Då var min andra artikel för Data3 - Common Sweden publicerad i Medlemsbladet Nr 216. Denna gången har jag skrivit om traditionen att dela med sig av lösningar baserat på IBM Notes/Domino.

Image:IBM Domino och öppen källkod

Länk till hela numret som PDF:  Medlemsbladet Nr 216

Länk till min artikel på Data3:s webb: IBM Domino och öppen källkod

Om Data3

Data3 är användarföreningen för Power System, (tidigare System i, iSeries & AS/400) i Sverige.
Data3 är en förlängning av COMMON, den USA- och Europabaserade användarorganisation som finns i samarbete med IBM.
Villkor för medlemskapet är att företaget arbetar med ett IBM datorsystem i allmänhet och IBM Power i, i synnerhet.

Recycling in Java, or The importance of not cutting the branch you sit on

Fredrik Malmborg  2014 April 7 14:41:13
I have been coding rather advanced Java applications a couple of years ago. It was then totally out of the Domino sphere.
Recently I have began to code some Java agents for Domino, and the basic principles are not that hard to get. Anyway I did hit an issue with recycle and response documents.

It started off with a "NotesException: Object has been removed or recycled". I examined the code over and over again and could not understand what was the problem. Decided that I had to read up on Java on Domino in general and recycle in particular.

Luckily I found a page written by Bob Balaban (Geek-o-Terica 5: Taking out the Garbage (Java)) about the recycle mechanism and what to keep in mind. When reading it I did not directly connect it with my problem but it did finally ring a bell. I also had help from a Technote. In fact it was this that got the bell ringing: "recycling a parent document also recycles its children". My problem was not exactly that but related to responses.

I was updating a document from sibling responses created from a specific form. The sibling responses was looped and data collected.
DocumentCollection dc = currentDocument.getResponses();
doc = dc.getFirstDocument();
while (doc != null) {
       if (doc.isValid() && !doc.isDeleted()) {
               formName = doc.getItemValueString("Form");
               if (!doc.hasItem("$Conflict") && formName.equals("formIngredient")) {
                       stringList.add(doc.getItemValueString("ingredient_id") + "#" + doc.getItemValueString("ingredient_percent"));
       tmpdoc = dc.getNextDocument(doc);
       doc = tmpdoc;

The problem is that I recycled every response, and one of the responses is the target for the collected data from the siblings with form = "formIngredient". Thus I got the "NotesException: Object has been removed or recycled" when trying to access the response where I want to store the collected data.

I solved it by moving the recycle call to only be done on specific sibling responses.
while (doc != null) {
       tmpdoc = dc.getNextDocument(doc);
       if (doc.isValid() && !doc.isDeleted()) {
               formName = doc.getItemValueString("Form");
               if (!doc.hasItem("$Conflict") && formName.equals("formIngredient")) {
                       stringList.add(doc.getItemValueString("ingredient_id") + "#" + doc.getItemValueString("ingredient_percent"));
       doc = tmpdoc;

Finally I want to highlight another vital point made by Bob Balaban in his article:

"Of course, even when you leak megabytes of memory in this way, Notes (and the operating system) get it all back when the Agent terminates. Why? Because the CurrentDatabase and the Session objects that Notes created for your Agent to use get recycled automatically when the Agent is done, and therefore all other objects "owned" by that Session and Database (i.e., all of them) get recycled automatically. Of course, if you run out of memory before that point, you're screwed. "

My conclusion is be very careful with how you recycle documents in a parent/child/siblings perspective.

IBM Connect 2014 - replay index

Fredrik Malmborg  2014 January 28 13:34:57
There are things to wish for regarding the web experience (reminds me I have to do something about the experience on THIS site) on the IBM Connect 2014 site.
To make the streamed content easier to find I made my own list of links below.

Update: I have added links for recordings added by IBM on day 3 but I get confused by the titles. Not sure if they have added recordings from earlier days on day 3 or they just messed up with the titles.

Day 1

Opening Session Edited http://livestre.am/4KUXe

Social Next: The evolution of Collaboration to the Leading Social Platform http://livestre.am/4KU4q

IBM Messaging and Collaboration: Innovations and Priorities for Today and Tomorrow http://livestre.am/4KUnO

IBM Mobile Collaboration Strategy and Advancements for a Mobile World http://livestre.am/4KUz4

The IBM Sametime Roadmap: Because Social isn't Social if you can't communicate http://livestre.am/4KV4O

CONNECTING THE ECOSYSTEM: Sandy Carter Live http://livestre.am/4KVxg

Avoid Being a Social Zombie in a Global World http://livestre.am/4KWwT

Day1_Talking_Social_Mobile_Analytics_Cloud2014 http://livestre.am/4KWx1

Day 2

Opening Session http://livestre.am/4KWTd

Scott Adams http://livestre.am/4KWTe

Key107 Building Exceptional and Visionary Digital Experiences for Better Business Results http://livestre.am/4KWYv

IBM Collaboration Solutions Application Development Strategy - Key 109 http://livestre.am/4KX6U

The Power of Social Software in the Enterprise Key 103 http://livestre.am/4KXqj

SwanSB205 - Strategies for Connecting the Global Workforce Through The Cloud http://livestre.am/4KXUY

CONNECTING THE ECOSYSTEM: Sandy Live Show Tuesday http://livestre.am/4KY7c

Day 3
General Session http://livestre.am/4L02p

Smarter Workforce Mythbusters http://livestre.am/4L0wE

BrkOut - SW403 - Put the Smarter in Your Workforce with the IBM Social Learning Solution http://livestre.am/4L0Tw

Social Business in the Context of IBM's Overall Strategy http://livestre.am/4L0wD

IBM Worklight for IBM Domino Developpers http://livestre.am/4L0wC

What's New in IBM iNotes Social Edition http://livestre.am/4L0W0

IBM Notes Traveler: 2013 and Beyond http://livestre.am/4L0VZ

Ethan McCarty 1749-1 http://livestre.am/4L0W1

Patterns in Achieving Social Business Success http://livestre.am/4L0W2

The Domino Effect - What is it?

Fredrik Malmborg  2013 December 25 19:35:01
Recently version 9.0.1 of IBM Notes / Domino was released. We have a modern interface that is available for both the traditional Notes client, web, and mobile devices.The development environment is Eclipse. Much of the new development is done in Java and JavaScript, but LotusScript and @ Formulas / @ Functions are still powerful tools. XPages has matured, a new development environment as a complement to the traditional. Support for integration with IBM Lotus Connections, Facebook, Twitter, etc. are added continuously. In contrast to other solutions, we have fantastic platform and backward compatibility. Upgrading a Domino Server and all its services are normally ridiculously easy and fast accomplished. It is a fact that IBM is investing heavily in this software, even if it drowns a bit in the gigantic portfolio of solutions they bring to market.

The Bad News

There's no need to lie about Lotus Notes losing quite a few users recent years. There are several reasons for that. Unfortunately it is often the result of ignorance and herd behavior. The same goes for the big consulting firms. Today few of those have relevant knowledge of IBM Notes / Domino in their staff. In the public sector and public authorities in Sweden have a large shift occurred from Notes / Domino email to Outlook / Exchange. Microsoft's targeted efforts, including "Microsoft Municipality Design" (MSKD) has paid off. Smarter Planet and Smarter Cities are some of IBM's efforts to meet the challenges for the public sector and government. They have not a primary focus on solutions based on Notes / Domino.

The Good News

With a single server installation, you get access to an entire application platform that can
deliver to virtually all currently available systems and devices. Name an industry standard, and you can almost be sure that the Domino server supports it, or will very soon. There are solutions for social intranet, logistics, budgeting, quality documentation, contract management and much more. If you look 10 years back, it was common that even end users built solutions with Notes for effective management of any routine / documentation. Unfortunately this opportunity is often forgotten. Today even the developer license is included in the Notes User license. Consider the possibility that a user with fairly rudimentary knowledge can build an effective application with built-in security management, that can be easily shared with colleagues. It can also be made available offline with a few clicks. And with some more knowledge you can build a web interface. Everything is connected and requires only one server. That server could be an IBMi, but that is just one of the supported OS. And of course there are mail functionality built in for those that wants to consilidate or utilize even more. Do not forget that the email feature is just a tiny part of what is offered. For those that for different reasons prefer Outlook as mail client, the good news is that IBM is developing a completely new connection between Outlook and Domino. It uses ActiveSync within the Notes Traveler service and will provide a very thight integration for mail and calendar.

Ingenious Concepts

There are a number of concepts in IBM Notes / Domino which is relatively unique . Categorization is one. It can be compared to ”tags” used widely on the Web. The principle is that a document can belong to one or more categories. One does not define categories in advance, the structure is created by entering one or more keywords in one or several  documents. In this way, one can introduce a single document in one or more categories simultaneously without copying data.
Replication is one of the most valuable concepts. It's about allowing update of documents on different servers and also locally without being online. Then it synchronizes manually or scheduled between the sites so that all have the same information. What we really are talking about is applications. You can deploy an application and run it on several sites independently, with synchronization of data.
Views are a way to gather and present collections of documents. Documents are not stored in the views and a document can live in multiple views simultaneously. What I see in companies today is that they still have not resolved document management properly. They are stuck in the ”File Explorer swamp” with several different versions of the same documents scattered as copies in different folders on different servers . They need to rethink. Think views, replication and categories.

The Tech - How things are stored in a Notes application.

One note is the smallest unit of data in Notes. There are a number of different types of these data units with their specific properties and methods, and each note has a name that is used to communicate with it. We package several notes in a document. The documents a put in a file with the extension .nsf. We put the file in the data directory on a Domino server or locally in Note Client. This file contains not only the data but also the definition of how data should be presented and organized. Even the code for business logic, etc. are in this file, now termed Notes Application. Formerly simply called a Notes
Database. When you copy or move an application it is by "normal" file management. You now realize how portable and manageable a Notes Application is. Of course, the content can be encrypted in several ways.
What is unique compared to many other solutions is that these data units - notes, do not have hard bound relations, except that they are together in a specific document. Nor is it that all documents in an application needs to have the same set of notes. A note can also be added to or removed afterwards, per document. Each document in a application can thus be quite different in structure and set of data units.
To get some structure in this we use forms, folders and views . The forms defines how we want our data to be fed into the document and how it is presented. They also contain logic. Each document is linked to a form, but this link may easily be changed. Thus, we can easily replace the entire definition of a document by replacing the assigned form. This can be done for just a single display of the document, need not to be permanent. Note that we do not affect saved data somehow when we change form in a document. In the form we use fields to define the relationship with the underlying data units ( notes ).
The views we use to display a collection of documents based on a specific condition. For example, all documents related to a specific form and have a note with name "Status" containing the text "Published". Folders are just as it sounds, a collection of documents that the user has selected. There is no condition defined, all documents contained in the application is qualified to end up in one or more folders . Important to remember is that neither views or folders are solid structure that defines data. They only display custom content from a number of documents.

Want to know more?

Below you find a list of some valuable resources and information related to IBM Notes and Domino.
Do not forget that there are a lot of professionals in the community that are more than happy to help you into the world of IBM Notes and Domino.








Dominoeffekten 9.0.1

Fredrik Malmborg  2013 December 5 22:31:22
På uppdrag av Data3 har jag skrivit en artikel om IBM Notes/Domino. Målet med artikeln är att sprida kunskap om plattformen och dess unika egenskaper.

Image:Dominoeffekten 9.0.1

Länk till hela numret som PDF:  Medlemsbladet Nr 214

Länk till min artikel på Data3:s webb: Dominoeffekten

Om Data3

Data3 är användarföreningen för Power System, (tidigare System i, iSeries & AS/400) i Sverige.
Data3 är en förlängning av COMMON, den USA- och Europabaserade användarorganisation som finns i samarbete med IBM.
Villkor för medlemskapet är att företaget arbetar med ett IBM datorsystem i allmänhet och IBM Power i, i synnerhet.