• Notes and Domino v12 is here!

    HCL Software is launching the new version of the collaboration platform HCL Domino on June 7, together with the latest version of the meeting platform Sametime. If you already are a customer with entitlement to the products, you can already download them from FlexNet today.

    Some of the new features in Domino v12:

    • Support for storing DAOS files in Amazon S3, to offload your own servers
    • Active directory password sync
    • Two-factor authentication and additional enhancements to internet security
    • New mobile capabilities
    • New icons and view list styling options
    • Hide fields or view columns on devices with lower resolution
    • Bootstrap 4 for XPages
    • Support for formula language in DQL queries
    • Aggregate document collections (e.g. from a search) across Domino databases
    • Button in Administrator client to find all groups a user belongs to
    • Enhancements to mail-in databases

    And much more. Find out at the launch!

    It is not only the Domino server and the Notes client that is being launched. The latest version of HCL’s no-code/low-code development tool Domino Volt is also available, as is a new version of the AppDev Pack that allows node.js developers to work directly with data stored in the Domino NoSQL-database. But wait, there is more!

    A very exciting product HCL will present at the launch is Nomad Web, a client for Domino built for the browser with no downloads or plugins required. The client is written in Web Assembly, so it runs native in modern browsers. It can execute formulas and Lotusscript code, everything you can do in the regular client can be done (with a few exceptions like XPages). There has even been new classes added to Lotusscript to access hardware common in mobile devices and laptops, e.g. the camera and GPS. Nomad for iOS and Android has already been released, but with this zero footprint web client it is incredibly easy to deploy existing Domino application without having to convert them to true web applications. They will simply work as-is. This is truly an impressive engineering feat by HCL.

    If you haven’t done it yet, sign up for the launch of the new Domino and Sametime on June 7.

  • NTF Needs Your Help

    Anyone who has been in the Notes/Domino community for some time knows Nathan T Freeman, also known as NTF. He was one of the founders of OpenNTF back in 2001, and has been blogging and presenting on Notes and Domino related subjects for many years. I have learned a lot from him over the years.

    Nathan T Freeman (center) at ConnectED 2015.

    Nathan has always been a very colorful person in the community. I just found out that Nathan is having some serious health issues. His wife Lisa created a GoFundMe to get some help with the medical cost. If you have ever benefitted from something Nathan wrote on his blog or talked about at one of his many presentations over the years, or if you used OpenNTF as a source for code, consider donating to help Nathan and Lisa.

    Update on 04/11/2021 by Bob Kadrie: “Nathan was readmitted to the hospital today with unstable vitals, including low blood pressure and oxygen. His heartbeat is also unstable, so they cannot transport him to a larger hospital that may be better equipped to treat him at this point. His doctors are now saying he most likely has a week or less to live.”

    Update 2 on 04/12/2021 by Bob Kadrie: “Nathan has was moved to a larger hospital earlier Sunday evening in order to receive more specialized care. Once he was examined, it was determined he was experiencing complete organ failure.
    He was then given Fentanyl and placed in a medically induced coma to make him comfortable,
    Nathan just passed with his family by his side. He was an incredibly dedicated husband and father. He was also generous, funny. and the best intellectual sparring partner I’ve ever had.
    He touched a lot of people in his short time here. He will be missed by many.
    Please continue your generous donations in order to assist his family with the massive medical expenses they’ve incurred and in their transition during the days ahead.
    Thank you all for bringing a little security to Lisa, Lillian, Meta, Axiom, and Ira Belle. Sandy and I are so sorry for everyone’s loss.”

    The GoFundMe goal has been increased, to help Lisa and the children. They will need all the support they can get.

  • Helpful Tools – Ytria EZ Suite (part 2)

    Two weeks ago I wrote about Ytria EZ Suite, a set of tools for HCL Domino that I have been using for years. Unfortunately there were so much to write about the tools that I had to split it up into multiple blog posts. This is the second article about the tools that comprise EZ Suite. In that first post I covered scanEZ, consoleEZ, actionBarEZ and viewEZ, and if you haven’t read it yet, you can find it here.

    Most of the tools I previously covered were aimed more towards developers, especially actionBarEZ and viewEZ. The consoleEZ tools can also be very useful for a developer who needs to keep an eye on the server console for potential error messages from agents being executed on the server. But Ytria offer tools directly geared towards administrators as well, so today we will take a look at them.

    The first of these tools is aclEZ, and as the name indicates it is used to manager the ACL (Access Control List) of Domino databases. You get an overview of who has access to the databases, and you can modify, create and of course delete entries. You are of course not limited to displaying one database, you can select multiple databases and compare the ACL settings between the different databases. You can also copy ACL settings between databases, so you can setup one database with the proper security settings and then copy them to as many databases as you like on your server.

    Ytria is using a configurable grid to display columns in all their tools. This is making it easy to view just the info you are looking for. Columns can be hidden or displayed, sorting can be set, and much more. I find this flexibility very helpful, there are often columns I am not even remotely interested in and now I can just prevent them from being displayed.

    In addition you can sort the columns in the grid, and also apply filters so only values matching a specific criteria are displayed.

    This is just a couple of examples of the many details I enjoy with the Ytria tools. They have over 20 years of experience creating tools for Notes and Domino professionals, and that shows. Everything is well thought through, and the tools offers great flexibility.

    A tool I find extremely useful is databaseEZ. It allows me to get a high level view of all databases on a server, check things like the ODS version, if they are full-text indexed or not, the database size,, when they were last compacted, and also look at the size of the view index for each view in a database.

    All this information helps me for example if I need to find out why a Domino application is slow, or which databases needs maintenance first. Almost this information can be accessed from the Domino Administrator client, but not in this easy to read format. Instead you need to open a number of different views and dialog boxes in each database. This is a huge time saver!

    The last tool I want to mention today is replicationEZ. As the name states, this is a tool to locate and compare replicas of databases on different servers. Like in the other tools from Ytria, there are too many functions to list them all. I would like to mention a few that I find very useful.

    Here I have loaded two of my servers into the replicationEZ grid, and it is now easy to see that there are a couple of databases I don’t have replicas of on my secondary server. I am also loading and comparing the number of documents and deletion stubs in two replicas of a database, and you can see there is a discrepancy on the number of deletion stubs between them (highlighted in red).

    It is of course easy to create new replicas, or rather a replication stub. This is another example of how Ytria added functionality that I miss in the native Domino Administrator. Instead of having to sit and wait for a new replica to be created and all documents replicated to the new server (or start the replication, cancel out after a few documents have been replicated, and then let the Domino server finish the replication in the background), replicationEZ creates a replication stub, and I can continue to work while the full replica is created.

    There are a few more tools from EZ Suite that I want to talk about, so check back in a few days for the last blog post.

  • Busy, busy – But wait: There is help!

    For the last year and a half I have been very busy with different projects, and this blog had to be put on the back burner. And no, despite a number of blog posts about Microsoft Flight Simulator, I have actually not had much time to play it, less than 10 hours since it was released last August. But this leads me to today’s topic: tools that can help you save time.

    As a Notes/Domino developer, administrator or power user, you often need to go deeper into the Domino database. This could be tasks like finding and resolving replication contacts, look closer at the fields (including hidden fields) in a document, or quickly locate all documents of a particular type, or matching a particular criteria that you don’t already have a view for. As an administrator you maybe would like to keep several Domino consoles visible side by side, so you can watch what is happening on all your servers at the same time. As a developer, what if you could copy the design of a view or an action bar to numerous other views to make all views look consistent, without having to edit and update every single view manually? Things like that makes your life easier and makes you more efficient, but you don’t have that in the native product.

    One set of tools that stands in a class by itself is EZ Suite from Ytria. The EZ Suite tools are extremely powerful, and there is no way I will be able to cover all of them in one blog post. I will focus on some of the functions that have been useful to me, and even with that limitation I have to split this up in multiple blog posts.

    The first tool from Ytria I ever tried was scanEZ. We had some issues with a database at my old work (I don’t remember the details anymore), so we purchased a time limited version of scanEZ. I think it was valid for a week, enough for us to salvage the documents in the database. My boss thought the tool could be useful in the future, so he immediately purchased a full license of it for himself. Eventually he purchased a license of EZ Suite for me, and I made frequent use of the tools, both while doing development and server administration, as well as when I had to troubleshoot database issues or replication conflicts.

    You can purchase the full suite , or one of several bundles of tools geared to different types of users (developers, administrators or developer with some administration needs). Each tool can also be purchased individually.

    The latest version is EZ Suite 20. This version contains a number of new functions and enhancements. Since I haven’t used the tool in the last couple of years, after my license expired, I have not been keeping up with all the new features, but as always Ytria is supporting the latest version of Notes and Domino.
    Disclaimer: Ytria generously provided me with a license for the latest version, but I was previously a paying customer, and I have recommended their products for many years.

    Let’s start with the first tool from Ytria I was ever exposed to, scanEZ. This tool makes it possible to explore a Domino database in depth, not only the documents but design elements, settings and even deletion stubs (the remains of deleted documents used to delete the document in replicas). Fields can be added, deleted and their content can be changed. You can even change the data type of a field, as well as many other attributes.

    In scanEZ you can also look at and modify profile documents and replication conflicts, which often comes in very handy. But there is also a dedicated Conflict Solver tool within scanEZ. It will analyze the database, which can take a little bit of time, but then you can compare the conflict document with the parent and see which fields differs. This may even help you figuring out how the conflict was created, and how you can prevent that in the future.

    This only scratched the surface of what scanEZ is capable of. I have not even mentioned the different ways to view and analyze data. You can for example dynamically categorize the documents through drag-and-drop, and even present the data in charts, thanks to the extensive capabilities of scanEZ.

    The next tool I want to mention is consoleEZ. The easiest way to describe it is the Domino server console on steroids. You can view multiple consoles simultaneously, and also see a list of the tasks running on them. Your console commands are saved, and you can view them later if you like. It has many features you wish were in Domino Administrator out of the box, and even more features you did not even know you wanted.

    You don’t have to be a hard-core administrator to appreciate consoleEZ. It was first released about six years ago, so it is one of the latest additions to EZ Suite. It quickly became one of my favorite tools.

    I do quite a bit of modernization of Notes and Domino applications. Often this involves web enabling them, including creating a modern UI using HTML, CSS, and often a framework like Bootstrap. But there are still many Notes databases that works well, and instead of rewriting a lot of the existing logic for the web, a refresh of the Notes client UI is sufficient. This often involves adding a nicer background to the action bars, as well as changes to the views. Just a few small changes can make a huge difference, and make an old application look fresh again.

    But even after you come up with a nice, more modern looking design, you have to duplicate it across all the action bars and views in your application. This is where actionBarEZ and viewEZ comes in. Those two tools makes it a breeze to apply a design to many action bars or views or copy the design from one view/action bar and apply it to any view or action bar you want.

    Using actionBarEZ you select a number of view, pages or form, and change the properties across all the elements just like you would have done in Domino Designer, but there you can only make the changes on one view, form or page at a time. But the function I found the most useful function is that you can design a nice action bar in one view, then select that design and with the click of one button apply it to any views, forms or pages you like. This has saved me countless hours of work. The functionality of viewEZ is pretty much identical.

    Stay tuned for the next part to be published in the next few days.

  • Semantic UI – An alternative to Bootstrap?
    Bootstrap is currently undisputedly the most popular CSS library. I have been using Bootstrap since 2012, starting with version 2.3. The current version is 4.5, with version 5 is under development and expected at the end of this year. So why is Bootstrap so popular? There are several reasons, but perhaps the most important one is that it is very easy to get started and create attractive webpages, most components you need are available out-of-the-box, and there are  number of different themes to change the visual look of the sites. But perhaps the biggest reason for the popularity is its popularity. There are countless code snippets, samples and plugins available, as well as tutorial and a huge community you can tap into for help. There are currently over 98,000 questions on Stack Overflow for all versions of Bootstrap, and over 21,000 for the latest version. But Bootstrap is of course not unchallenged. There are a number of other CSS frameworks available today, some more complete than others. One interesting framework I recently found is Semantic UI. It uses simple phrases, called behaviors, to trigger functions. Below is an example with a select box where the code is selecting two values from the list.
        .dropdown('set selected', ['meteor', 'ember'])
    The resulting website looks very similar to one created in Bootstrap, if you use the default theme. One difference you might notice quickly is that the grid system is using 16 as the base, not 12 as Bootstrap does. Semantic UI also contains several component you will not find natively in Bootstrap. On of them is dividers, which are available in horizontal and vertical variants. The list component can very easily be configured in a multitude of different ways. To create the horizontal list, the markup looks like this:
    Top Contributor
    Christian Rocha
    Top Rated User
    Take a look at Semantic UI, maybe it will come in handy for your next web project!
  • Microsoft Flight Simulator – First Impressions
    The highly anticipated new version of Microsoft Flight Simulator was released on August 18,, and I have been playing with it for a few days in my spare time, and I wanted to share my first impression. This simulator is impressive. You can fly anywhere you like on Earth, thanks to Bing Maps. Microsoft partnered with Austria-based Blackshark.ai to enhance the satellite images using AI software. The result is a great looking world. The AI is taking 2D satellite images and trying to figure out what the buildings would look like in 3D, and it will of course not always get it right. But as long as you fly at a realistic altitude (say above 1000 ft), it looks very real. There are certain cities where photogrammetry is available, for example New York City, and there the result is astounding. Many famous landmarks and buildings around the world received manual attention, and a number of iconic airports have been handcrafted to look extremely realistic. The Basic Edition contains 30 of those airports, the Deluxe Edition contains 5 additional airports, and finally the Premium Deluxe Edition (which is the one I purchased) contains 10 more airports. You can change the tail number of the planes, and even change your call-sign used by the Air Traffic Control. You can fly a number of different airplanes and variants of them, everything from Cessna 152 to Boeing 747.  The airliners in the game (Airbus 320Neo, Boeing 747 and Boeing 787 Dreamliner) all come with a company livery, but there are already liveries to download for free, created by the Flight Simulator community. As I write this there are 40 liveries to Airbus A320Neo available for free, including the British Airways one you can see in the screenshot below. Update: a new version was released during the afternoon and evening, while I was still working on this review. There are now 70 liveries, including several for other airplanes in the game. Download it here: https://www.msfsaddons.org/liveries/liveries-megapack-v6 The simulator also includes a store where you can purchase add-ons like additional airplanes, airports and buildings. There were a handful products available already at launch, and I choose to purchase the London Landmark pack, with about 200 buildings for $7.95. If you viewed Buckingham Palace as it appears by default, it looks like an office building, and HMS Belfast, next to Tower Bridge, is flat and appears to be under the water in the original scenery. After installing the add-on, London looks much better. What about the hardware needed? Surely you need a top-of-the-line computer? Yes, if you want to fly in 4K in Ultra settings (the best quality), you need a top-of-the-line graphics card. But my 4 year old system with an Intel i7-6700K and AMD Radeon RX 580 can play using the high settings, even if certain areas with a lot of buildings gets a low frame rate. Lowering the resolution from 4K would help, as well as setting the quality settings to medium, improves the framerate, but I really like the 4K experience on my 43″ monitor, so I see myself getting a new graphics card in the near future.   There are  many details in the game that amazes me. On the airliners you see the heat distortion from the engines, the sun reflects in the aircraft, and when you change the time, the sun, moon and stars move. When the sun moves, you can see the shadows from buildings move. Clouds casts shadows as well. If you are interested in flying, or if you just want to do virtual sightseeing, Microsoft Flight Simulator is a great piece of software.  
  • HCL Volt – A real life use case
    The first update to HCL Volt is now available for download. In version 1.0.1 there are a number of improvements, so if you already have Volt installed, get this update from Flexnet. But this post is not about the technical details of Volt. No, it is an example of how I used the product the other day to quickly put together a small application to help with a very specific task. Last month my wife and I went on a trip to Estes Park in Colorado, where we enjoyed sleeping with open windows, enjoying the fresh cool mountain air. We started talking about getting an RV, to allow us to leave the Texas heat during the summer. My wife started doing some research on different camping trailers, but soon there was too many models, weights, dimensions and features to keep track of easily. I started to create a spreadsheet in Excel to keep track of everything, but a few minutes later I realized I had a much better tool available: HCL Volt. I started my browser and went to the Volt Application Manager, where I created a new application by importing the Excel spreadsheet I had started on. Within a few seconds I had the beginning of my application. I added some additional fields, for example to upload images of the floorplans and to store links to the manufacturers webpages with more information. It took me about 10 minutes to put the whole thing together. I sent my wife the links, and she logged in and started entering data, as she was researching. A little bit later she asked if it would be possible to add some more checkboxes to the list of features I had created. I gave her the access to modify the application, showed her where she needed to go, and she fixed it herself without me having to show her anything. That’s how intuitive Volt is! We now have a simple but functional tool to record details about any camping trailer we find, and where we can later go back and review the different alternatives. There is even a built-in summary page where we can see statistics of the different trailers. This is created automatically from the data entered, no code needed. As a matter of fact, I have not written one single line of code in this application.
    This is just one example of how you can create a useful application in a few minutes. But don’t take my word for it. Try it yourself for free, no download required! If you want to get this very affordable add-on product to HCL Domino, contact your HCL Business Partner.
  • Microsoft Flight Simulator – videos

    In the 24 hours or so a number of videos from the upcoming Microsoft Flight Simulator has been showing up on YouTube, and I want to share some of them with you. These are not my videos. 










  • Microsoft Flight Simulator – Arriving August 18

    In June 2019 I blogged about the upcoming Microsoft Flight Simulator, often dubbed Flight Simulator 2020. I have been following the development, even if I have not been part of the alpha testing group.

    Microsoft worked closely with the Flight Sim community, and posted a series of videos where they talk about different aspects of the game. I think most people (including me) expected the game to be released in late November or early December, to coincide with the holiday season.

    But just a two weeks ago, it was announced that the game will be available on August 18.

    There will be three different editions: Standard ($60), Deluxe ($90) and Premium Deluxe ($120). The more expensive editions contains more airplanes and additional handcrafted Airports. Pre-orders are already open.

    Airplanes available in the different editions
    Available hand crafted airports

    The graphics is spectacular, Microsoft has recreated the whole Earth using satellite images and aerial photography, together with AI to create 3D buildings and trees from flat images. Weather is simulated in detail, and you can even get real-time weather. The airplanes are simulated in detail, in one of the videos from the developers they said that when you turn on landing lights, you see the Ampere meter move.

    You can also fly together with other people, and in the most realistic settings real life air traffic will be available in the simulator.

    I started playing Flight Simulator 3.0 back in 1988, and I don’t think I could even imagine backbthen what the game would look like 32 years later…

    Flight Simulator 3.0 (1988)
    Flight Simulator (2020)

  • HCL Volt – A new Leap for Domino!
    This Monday HCL released HCL Volt for Domino, their entry into the no-code/low-code market. This is a tool that allows the non-developers (a.k.a. Citizen Developers) at a company to build their own applications without having to write any code at all. Later the application can be enhanced with code, perhaps by someone in IT, but a power user, or even a regular user with some knowledge of Excel will quickly feel at home in Volt. Volt for Domino requires a server with Domino 11 or higher, but the user and developer only needs a web browser, no development tools needs to be installed. I have created a short video where I am demonstrating how you in a few minutes can take a spreadsheet someone sent you and automagically transform it into a real database application, without one single line of code! Please let me know what you think about the video, it is my first attempt in this format. I was originally planning comments as voice-over, but I was unable to get my microphone to be loud enough. So I decided to put my comments as sub-titles instead. https://youtu.be/O0B_xZogmwM  
  • Domino 11.0.1 is available!
    HCL has released Domino 11.0.1, which includes updates to not only the server but also the Notes and Designer client. So what is new? The version number makes it sound like this is just a version with bug fixes, but nothing could be further from the truth. There are a number of improvements and new capabilities, including new functions as well as enhancements in Domino Designer. Let’s take a quick look at some of the most interesting new functionality. Part of your entitlement is a Docker-compatible image of Domino 11.0.1. It is available for download through the HCL Licensing Portal (FlexNet). HCL Domino 11.0.1 is pre-installed on this image, which allows you to deploy Domino server containers very quick and easy. You can now register multiple Active Directory users using the Directory Sync feature, the Domino web server supports Server Name Indication (SNI) and there is support for Subject Alternative Name (SAN) in X.509 certificates. There are also enhancements to DAOS tier 2 storage, where you can move attachments to AWS for longer term storage. SwiftFile, a tool that automatically sorts incoming mail into different folders based on the content is now finally integrated into the client, not a separate add-on as previously. The administrator can disable SwiftFile through a setting in notes.ini. A new Java Runtime Environment is also included, as well as an updated version of MarvelClient Essentials from panagenda. There are some changes to the underlying software used to import and view attachments. On the security side, the Notes client can now use 128-bit AES for local database encryption, and new Notes IDs must have 1024-bit keys (or stronger). For my fellow developers out there I want to mention the new method CreateDocumentCollection in the NotesDatabase class. Finally a native method, no more need for a hack to get an empty document collection. There are also improvements to DQL (Domino Query Language), for exaple numeric and date-only terms in queries. A new version of AppDev Pack is also released, version 1.0.4, where domino-db now supports rich text items and running agents in Domino databases. Your can real more on the HCL Domino Blog.
  • Keep up with COVID-19 though Domino!
    Are you are suddenly sitting at home with nothing to do, due to the corona virus COVID-19? You can’t go to the gym. You can’t go to your favorite computer store to browse all the latest hardware and plan for your next water-cooled build. You can’t go out to eat. But what you can do is to try out some of the new functionality in HCL Notes and Domino. Today I started a little project where I try to incorporate a number of the latest and coolest functions in a simple but useful application. I hope to be able to create several blog posts about this project over the next few days. I came up with the idea for this app when someone sent me a link to a web page where information about COVID-19 is aggregated from all US states. I thought it was a neat page, but then I noticed that they have a public API where the numbers are served up. Now things started to become much more interesting! This is what the JSON data looks like:
        "state": "AK",
        "positive": 6,
        "negative": 400,
        "pending": null,
        "death": null,
        "total": 406,
        "lastUpdateEt": "3/18 16:30",
        "checkTimeEt": "3/19 15:12"
        "state": "AL",
        "positive": 68,
        "negative": 28,
        "pending": null,
        "death": 0,
        "total": 96,
        "lastUpdateEt": "3/19 10:45",
        "checkTimeEt": "3/19 15:15"
        "state": "AR",
        "positive": 46,
        "negative": 310,
        "pending": 113,
        "death": null,
        "total": 469,
        "lastUpdateEt": "3/19 11:23",
        "checkTimeEt": "3/19 15:16"
        "state": "AS",
        "positive": 0,
        "negative": null,
        "pending": null,
        "death": 0,
        "total": 0,
        "lastUpdateEt": "3/14 00:00",
        "checkTimeEt": "3/19 16:18"
        "state": "AZ",
        "positive": 44,
        "negative": 175,
        "pending": 130,
        "death": 0,
        "total": 349,
        "lastUpdateEt": "3/19 00:00",
        "checkTimeEt": "3/19 15:18"
        "state": "CA",
        "positive": 924,
        "negative": 8787,
        "pending": null,
        "death": 18,
        "total": 9711,
        "lastUpdateEt": "3/19 14:25",
        "checkTimeEt": "3/19 15:20"
    So what could I do with this data? Why not bring it into a Domino database to start with, and then retrieve the data on a schedule, say every hour? We should then be able to chart the data for each state over time. In order to not store the same data over and over again, I want to check if the data has been modified since the last time the agent ran. I will just use the lastUpdateEt date and time stamp in combination with the state abbreviation to perform a lookup. If I get any result(s) back, the data was already stored. So how do you read the JSON from the API? In the past I would have used my own HTTP Request class, but this is not needed anymore. This is thanks to the NotesHTTPRequest class, first introduced in Domino 10 and then improved in Domino 11. In Domino 11 the wizards at HCL in Chelmsford added classes to parse JSON. The NotesJSONNavigator is the base of the parser, then you use NotesJSONArray, NotesJSONObject and NotesJSONElement to traverse through a JSON payload. When you get the hang of it, this is much easier than it maybe sounds at first. So let’s take a look at my code. This is a scheduled agent, running once an hour:
      Agent Retrieve Data
      Created Mar 19, 2020 by Karl-Henry Martinsson/DBS
    %END REM
    Option Public
    Option Declare
    Sub Initialize
      Dim session As New NotesSession
      Dim db As NotesDatabase
      Dim view As NotesView
      Dim http As NotesHTTPRequest
      Dim json As NotesJSONNavigator
      Dim element As NotesJSONElement
      Dim stateArray As NotesJSONArray
      Dim state As NotesJSONObject
      Dim response As Variant
      Dim url As String
      Set db = session.CurrentDatabase
      Set view = db.GetView("LookupExisting")
      Call view.Refresh()
      Set http = session.CreateHTTPRequest()
      url = "https://covidtracking.com/api/states"
      response = http.get(url)
      Set json = session.CreateJSONNavigator(response)
      Set element = json.GetFirstElement()
      Do Until element Is Nothing
        Set state = element.Value
        Call processState(state, db, view)
        Set element = json.GetNextElement()
    End Sub
    Function processState(state As NotesJSONObject, db As NotesDatabase, view As NotesView)
      Dim doc As NotesDocument
      Dim col As NotesViewEntryCollection
      Dim values List As String 
      Dim element As NotesJSONElement
      Dim key As String
      Dim value As String
      Dim stateName As String
      Dim lastUpdate As String 
      Set doc = New NotesDocument(db)
      doc.Form = "StateData"
      Set element = state.GetFirstElement()
      Do Until element Is Nothing 
        key = element.Name
        value = element.Value
        If key="state" Then
          stateName = value
        End If
        If Right$(key,2)="Et" Then
          lastUpdate = Format$(CDat(value),"mm/dd/yyyy hh:nn AM/PM")
          Call doc.ReplaceItemValue("lastUpdated", lastUpdate)
          Call doc.ReplaceItemValue(key, value)	
        End If
        Set element = state.GetNextElement()
      Set col = view.GetAllEntriesByKey(stateName+"^"+lastUpdate)
      If col.count=0 Then
        Call doc.Save(True,False)
      End If
    End Function
    This is all the code you need. Yes, I am serious. You can now consume any data on the web, served up by any system with a REST API, straight into Domino, with just a few lines for code. The NotesHTTPRequest is very straight forward, so there is not much to say about it. But the classes used to parse JSON may need some explanation. You start with the NotesJSONNavigator. You then use the value property of the NotesJSONElement class to get a value, an array or an object. The array or object is put into a NotesJSONArray or NotesJSONObject object, and you can then traverse down into the JSON structure. This is very powerful and useful, we have all been asking IBM for this functionality for many years. Now HCL delivers! I created a hidden view for the lookup to avoid the same data stored multiple times. It only contains one (sorted) column, which is used by the lookup:
    That is pretty much it. I also created a view to display the data: Soon we will do something more fun with the data. I will just let the scheduled agent run for a while and build up my database first. Keep your eyes open for the next post about this project!
  • 100 years ago today
    Exactly 100 years ago today, on December 20, 1919 my uncle Karl-Heinz Groeling was born in Subowitz, in what was then Germany. Today the town, located just south of Gdansk (Danzig in German), belongs to Poland and is called Sobowidz. His parents were Robert Groeling (1890-1984) and Elsa Groeling (nee Hecke, 1893-1978). Karl-Heinz had three younger sisters: my mom Marie-Luise (1926-1987), Anneliese (1928-1946) and finally Katja (born 1932).
    Karl-Heinz, Marie-Luise, Anneliese and Katja in 1934
    Karl-Heinz and Robert Groeling
    Following Germany’s defeat in World War I, the Versailles Treat forbid Germany from having an Air Force. After Adolf Hitler came to power in 1933, Germany started training pilots in secret. In addition, a program started to prepare young men for future pilot training, by using gliders and sail planes. My uncle started flying in 1936 or 1937, probably through the German Air Sports Association (Deutscher Luftsportverband, or DLV e. V.), an organization set up by the Nazi Party in March 1933 to establish training of military pilots. I was told he once flew over the market in the center of Lauenburg, where the family now was living, with a sail plane, which caused some complaints from the city and an earful from his mother. He was probably lucky that his father was already in the Wehrmacht (Army) at this time, and not at home.
    Elsa Groeling surrounded by (left to right) Marie-Luise, Katja and Anneliese
    In addition to enjoying flying, Karl-Heinz was also a gifted musician. He played violin, piano, organ and trombone. He was, however, not allowed to practice the trombone at home, due to complaints from the neighbors. When I was a child my mother spoke about the time when he played as a member of a band on a cruise ship. The Nazi dignitaries on this cruise were served the best food, and the band was allowed to eat the same food. According to my mother, her brother hollowed out the breakfast rolls (“Brötchen” in German) and feed the innards to the seagulls. Then he filled the cavity in the bread with butter and enjoyed his self-made delicacy. To him the butter was the luxury and he took full advantage. In September 1939 Karl-Heinz had just passed his entrance exams for the university (“abitur”) when WW2 broke out. He volunteered for the Luftwaffe (Air Force), however, he was rejected at first for being “too tall”. A month later the decision was reversed and he received order to join the Luftwaffe.
    In front of a Ju-52
    Karl-Heinz flew Fieseler Fi-156 “Storch”, a light forward observation and medical evacuation aircraft, as well as Junkers Ju-52 transporters. Using the Ju-52, he took part in the Battle of Stalingrad, attempting to supply the German 6th Army with food and other supplies after it was cut off and surrounded, as well as evacuation of wounded soldiers out of the city. He served as Unteroffizier, an NCO (Non-commissioned Officer) rank that is most similar to Sergeant (OR-5). He was acting as a squadron leader (“Staffelkapitän“), a position which normally is held by a major. Incidentally his father, who was a lieutenant by the end of WW1, ended up with the rank of major during WW2. Towards the end of the war, Germany was lacking both aircrafts and fuel for them. Karl-Heinz was assigned to an anti-aircraft artillery regiment, in German called Flak (from Flugabwehrkanone).  In Germany during WW2 both anti-aircraft artillery and airborne troops belonged to the Air Force, not the Army as in most other countries. My uncle served in the 6th battery, Flak Regiment Hermann Göring (a.k.a Fallschirm-Flakregiment Hermann Göring) , which was part of Fallschirm-Panzerkorps Hermann Göring. I have been able to find a chart showing the organization of the unit at the beginning of 1945, and according to it my uncle would have been in the 1st battalion (the triangular flag with a 1 next to it).
    Fallschirm-Panzerkorps Hermann Göring in January 1945
    I am not an expert on German WW2 organizational charts. Normally the numbering is from right to left. I was once told that the 6th battery is most probably the symbol all the way to the right, which indicates a towed battery equipped with the German 8.8cm anti-aircraft gun. It was probably towed by a half-track, e.g. Sd.Kfz. 7, or possibly a truck. (video) However, if you count the batteries from right to left, he would been in the left-most battery under 1st battalion, which is a Flakvierling, four 2cm auto-cannons combined into one unit. (video) In the beginning of 1945 Karl-Heinz was in East Prussia fighting the advancing Red Army. The 88mm anti-aircraft gun was not only used against aircrafts, it had been found to be efficient against armored vehicles and tanks as well, so he was serving in an anti-tank role. German units were encircled in the Heiligenbeil Pocket or Heiligenbeil Cauldron (German: Heiligenbeiler Kessel), after they were denied their requests to retreat. Zinten (now known as Kornewo, Kaliningrad Oblast) was the scene of bloody battles. Both sides paid a heavy price in terms of casualties. Karl-Heinz Groeling was one of those casualties. He was wounded on February 23, 1945, shot through the left lung. He was moved to a field hospital, then a hospital ship and finally to a hospital in German-occupied Denmark, where he arrived on March 10.
    Medical Records from hospital
    In the early hours of March 16, 1945, at 3.10am, Karl-Heinz Groeling passed away, just 25 years old. He is buried at the beautiful Vestre Kirkegård in Copenhagen.
    Final resting place.
    My parents named me after my uncle, something I consider an honor.    
  • HCL Master Class of 2020
    Yesterday I received a mail from HCL, informing me that I had been selected as one of the HCL Masters for 2020. As IBM Champion I automatically transferred to the HCL Master program earlier this year, but it means more to me this time, as HCL actually did the selection. I am very honored and proud to be in the company of all these brilliant women and men, many of which I count as close friends. Thank you HCL!
  • CollabSphere 2019 – Less than five weeks left!
    If you haven’t registered yet for CollabSphere in Boston, time is starting to run out. The conference starts in less than five (5)  weeks, and the special price for the rooms at the conference hotel is only guaranteed until October 4. If you haven’t been to CollabSphere, or its predecessor MWLUG, you have been missing out. It is a very inexpensive confernece (only $100 this year, thanks to generous sponsors), with high quality speakers for the sessions and workshops. The opportunity to network with other customers, business partners and representatives from IBM/HCL is incredibly valuable, in my opinion. There are both organized and impromptu social events during the conference, as well as before and after for the ones arriving early or leaving late. If you are in the New England area, there is no reason you should not attend CollabSphere, now when it is taking place on HCL’s home turf, where many of the developers live and work. With Domino 11 coming out at the end of the year, I am sure we can expect some very interesting and exciting announcements at this year’s conference. And don’t miss HCL Day on Monday, with a large number of sessions covering everything from their Cloud Program, the changes to licensing, the HCL Customer Advocacy Program, and much more. I hope to see you at CollabSphere, especially at my session on Tuesday at 2.00pm, where I will talk about Node-RED and show some cool things you can do with it.      
  • Switch between Edit and Read-Only mode on web form
    A question on Stack Overflow made me remember some code I wrote a few years ago. It allows you switch a form between regular edit mode and read mode, without having to reload the page. It works just like you are used to in the Notes client. So I thought I would post it here on my blog as well. It is not very complicated. I am using jQuery, but you can of course use plain Javascript if you like. What the code does is to locate all INPUT fields you want to make read-only. It then creates a regular DIV element and set the content of it to the value of the INPUT field. The id and a couple of other attributes are also copied over, then the new DIV is inserted in front of the INPUT field. Finally the INPUT field is deleted. To make the DIV editable again, the same process is done in reverse. Below is the jQuery code to make all elements with the data-attribute dominofield read-only. I am using this data-attribute to map input fields to fields in a Domino database. It makes it very easy to create HTML forms and submit them to a Domino database, with one generic agent that will process the Ajax call. The field names and values will be provided in the JSON payload, and the Domino document can then be created or updated and the fields populated with the proper values.
      // Get all input fields used for Domino
      var inputs = $('[data-dominofield]');
      // Process each field
      inputs.each(function() {
        // Build new DIV element
        var input = $(this);
        var div = '
    '; div += input.val() + '
    '; // Insert ther new div element in front of input field input.before(div); // Remove input field input.remove(); });
    I also created a fiddle where you can test it yourself. If you are using Bootstrap, you can also use the readonly attribute and the class .form-control-plaintext to get the same result. This is documented here.  
  • CollabSphere 2019 – Submission deadline is closing soon!
    CollabSphere_2019 The deadline to submit an abstract for sessions at CollabSphere 2019 is tomorrow, Sunday August 18. If you want to speak at the conference, you don’t have much time to act. So why would you like to speak at CollabSphere? Perhaps your reason is the same as mine was when I started speaking at conferences: I wanted to give back to the community from which I had learned so much over the years. I wanted to share my knowledge with other developers, and perhaps inspire them by showing what could be done with Notes and Domino. What if you are afraid of public speaking? That is absolutely normal. With practice you get more used to it, and one place where you can practice it in a safe and encouraging environment is at Toastmasters, an international organization focused on public speaking and leadership. There are local Toastmasters clubs all over the world, and you can join at any time. Even if you are not speaking, you can still register to attend the conference. This year it is held in Boston, close to the HCL office in Chelmsford, and we can expect a lot of exciting news about Notes and Domino 11 (which is due in the end of the year), and perhaps even about Domino 12. This is a can’t-miss conference!
  • HCL Software Creates Portal for Customers and Partners
    HCL_Software_PortalHCL Software today launched a brand new portal for customers and partners. HCL Software is a part of HCL Technologies, and this new division was announced as late as yesterday (June 1, 2019) at the same time as HCL announced that the purchase of IBM’s collaboration products had been completed. The new portal is built using Domino and Portal, and provides customers and partners a place where they can receive product information, learn about purchasing software, get support, connect with partners, and much more. If you are a customer of IBM Notes, Domino, Sametime, Verse or Connections, or if you are a Business Partner, go to http://bit.ly/mlnHCLw3 and sign up. At the moment the sign-up is disabled, due to the acquisition. But I would suggest to check back in a few days.
  • The deal is done: HCL takes over Notes, Domino, Connections and more
    Today the announcement we have been waiting for arrived. HCL and IBM closed the acquisition that was announced back in December. HCL now owns (among other products) the collaboration products Notes, Domino, Sametime, Verse and Connections.
    As part of the deal’s close, HCL takes full ownership of the research and development, sales, marketing, delivery, and support for AppScan, BigFix, Commerce, Connections, Digital Experience (Portal and Content Manager), Notes Domino, and Unica. HCL is also formally introducing HCL Software, a new division that will operate this enterprise software product business and meet customer demand. A Business Unit of “Products and Platforms” (Mode 3), HCL Software has successfully delivered more than 340 partner releases and more than 90 HCL releases, including such popular products as Informix 14.10, Domino 10, Workload Automation 9.5. The division aspires to reshape the enterprise software business, focused on innovation and cutting-edge delivery for customer success.
    Read the full announcement at http://bit.ly/HCLSoftware Over the last few months we have seen a number of IBM:ers who has been working with the collaboration products move over to HCL. In the last few days we have seen even more people at IBM announce their moves to HCL, including Mat Newman who will become Director of HCL Digital Solutions, Asia Pacific and Stephan Wissel, the new Solution Director at HCL PnP. As a developer, it is very exciting and encouraging to see that Maureen Leland, who was in charge of Domino Designer for over a decade and have been with Lotus, Iris and now IBM since 1992, is now at HCL. Security expert Dave Kern is also moving to HCL, as is Wes Morgan, Adam Gartenberg and many others. The fact that HCL is bringing over all the brilliant minds from IBM is also encouraging. The investments in Notes and Domino that HCL already has made should show everyone that they see the products for what they are, amazing technologies and products that were decades ahead of the competitors. Just the other day (June 18, 2019), Mongo DB announced field level encryption. This is a feature Notes and Domino has had since day one, 30 years ago… I believe the future for Notes, Domino, Sametime and Connections is very bright. The developers are ecstatic that they finally get to implement new features, make improvements and even bring the Notes client to mobile devices (iPad, iPhone and Android). We have already seen some great things come from HCL, like the new Domino Query Language created by John Curtis, as well as the node.js integration. I cannot wait to see what HCL will deliver in the future. Notes and Domino 11 is planned already for the end of this year.  
  • Call 32-bit COM Objects from 64-bit Domino
    We all know that when you upgrade your Domino environment from 32-bit to 64-bit, any COM objects you use will not work anymore. You thn need to get and install a 64-bit version of the COM object. But what if there is no 64-bit version? Do you have to stay on 32-bit Domino forever? Or rather, stay on Domino 9.x, since Domino 10 (and probably also the upcoming version 11) are 64-bit only. Perhaps not. I found this article that describes how to use a 32-bit COM object in a 64-bit environment, like Domino 10. I have not had time to test it myself, but I will probably try it this weekend. Read all the details at https://techtalk.gfi.com/32bit-object-64bit-environment/.
  • Microsoft Flight Simulator – It will be back!
    I am not a gamer, but there are a couple of games I do enjoy. One of them is Microsoft Flight Simulator, which I have been playing since 1988 or so. Yes, since version 3.0 for PC. With each version it became more and more realistic looking, you could even buy third-party maps that used satellite images. I was able to fly over my house and identify it. The graphics was good, but not spectacular compared to the games of today. Then in 2009 Microsoft closed down the studio that had been developing the game, to the big upset of the flight sim community. The last version, Flight Simulator X (version 10) was to be the last. There are a couple of alternatives today, the two major ones are X-Plane and DCS World. I recently started looking at DCS World, and it is pretty impressive. It also supports Virtual Reality headsets out-of-the-box. The game itself is free, you get a couple of airplanes and one region where you can fly. You then purchase the planes and regions you like, over time. The graphics in the game is stunning. Recently, during the E3 trade show, Microsoft announced that there will be a new version of Flight Simulator in 2020. A 4K video was shown, and the graphics is amazing. The terrain is generated from satellite images, and the environment (ground vehicles, animals on the ground, etc) are controlled by AI. Looking at the video, the graphics is way ahead of anything I have seen. I really hope Microsoft will be able to deliver, and that it really will be available in the end of 2020. I have been planning to build a new computer for a while, but now I will probably hold off until closer to the Flight Simulator release, in order to get the best and newest components. I have a feeling the game will use every ounce of power available for this level of realism. https://youtu.be/ReDDgFfWlS4
  • CollabSphere 2019 – Registration and Call for Abstracts
    The registration for CollabSphere in Boston this fall is now open. This conference, formerly known as MWLUG, is a great opportunity to learn more about the future of the IBM/HCL Collaboration products (Notes, Domino, Sametime, Connections, and more) directly from the product managers and executives at HCL. When CollabSphere takes place on October 28 to 30, the HCL acquisition of the products should have taken place, but you will still see many familiar faces on stage and at the round-table discussions, as a large number of IBM:ers followed the products over to HCL. This is obviously a sign that they belive in the future of the collaboration tools under HCL’s control. In addition there will be many other sessions from business partners and customers, where you will learn the latest and greatest, as well as best practices, for everything related to the platforms. I have attending MWLUG and CollabSphere for several years, and the sessions are always top notch. Not only do I always learn new things, I also get inspired and energized to do new things with Notes and Domino. This is also a great opportunity to network, both with HCL executives, product managers and developers, and with other customers and business partners. The cost of the conference is only $100, which is a steal if you look at what you get. Most of the cost for the conference is covered by sponsors. If you want to share your knowledge at CollabSphere, the call for abstracts is also open now. Submit your session, and perhaps you get to present to your peers in Boston in the end of October! I hope to see you in Boston!
  • Run Notes applications on iPad!
    IBM and HCL has released an amazing product, IBM Domino Apps for iPad. They have been showing early versions at IBM Think and other events for the last year, but now it is here, and you can download it in the Apple App Store! I have seen earlier versions of the product, and I have to say that the developers at HCL did an excellent job. Your existing Notes applications can now run right out of the box with full fidelity and functionality, including formula language and Lotusscript, with no changes needed. Even features like replication to a local database and working offline works. It is simply a full Notes application client for the iPad. This is something that people have been asking IBM to develop for at least a decade. And finally we have it available. There is a version for Android in the works as well, but no official release date has been set for it yet. So what does this mean? It means that not only can you run your current applications on an iPad, you can develop new applications specifically for tablets. The applications can be styled to work better on tablets, for example larger fonts and buttons. HCL even added some tablet specific functions, like camera integration, to the core Notes functionality. There are a couple of limitations in the first versions, most notable that there is no support for the mail template, and no support for Xpages in the Notes client. If you are using Notes and have users with iPads, install IBM Domino Apps for iPad and be prepared to be amazed!
  • HCL has impressed me!
    It has now been just over four months since it was announced that HCL would purchase the IP (intellectual property) of Notes, Domino, Sametime, Connections, Verse, Traveler, and several other products from IBM. When the announcement was made in 2017 that HCL would take over development and support of Notes and Domino, many IBM:ers with long experience of developing the products moved over to HCL. I talked to several of them back then, and also at the Factory Tour in July 2018. The excitement was amazing to see, it took me back to the days of Lotusphere in the early 2000’s. They were all very excited about the new opportunity to create new functions and expand/modernize the products. Very quickly the development of Domino 10 took off. Another thing that impress me is how HCL seeks feedbacks from customers and business partners. Even as HCL is hiring on a large number of new developers, there are still limitations on what they can accomplish. It is very clear that they want to build a product for the customers, and they need to know where to focus their development efforts.  HCL and IBM held a number of jams during the first half of 2018, both online and physically around the world, where customers and business partners could give feedback on functionality and priorities. On October 10, 2018 Domino 10 was released, with many of the improvements requested implemented. Some additional functions, like the support for node.js, were released a few months later.  I think the decision not to rush out everything is the right one. As a developer, I want all the functions right now, or even better yesterday. But at the same time, I want it to work properly. HCL has done a good job at balancing this, at least this far. I want HCL to continue working this way. The development of Notes and Domino 11 has already started. As a matter of fact, HCL started working on that version even before Domino 10 was released. Several Domino 11 jams have been taking place already, withmore to come. Version 11 will focus on the client, while version 10 had the focus on the server and development functionality. But we developers have things to look forward to in Notes 11 as well. One of the items IBM and HCL have been talking about is low-code/no-code rapid development. This is something that we are promised to be available in Domino 11, as a browser-based development environment. It would bring the power of Notes and Domino development back to the “citizen developers”, allowing regular business users to be able to build custom applications/solution without writing any code. This used to be a strength of Notes in earlier versions, but in the late 1990’s IBM moved the development functions from the regular Notes client into a separate IDE, Domino Designer. This took away the ability for regular users to build their own solution, and made them have to rely on the IT department or dedicated developers to build applications. Bringing this back would give a new generation of users access to this powerful platform. I think it is very important that the new low-code development functionality work seamlessly with traditional Domino development, like HCL is aiming for. Imagine a user in the accounting department who comes up with an ide for an application that would improve their efficiency. The user begins to build a simple application using the Domino low-code/no-code environment. Perhaps a form or two, some simple views and a simple workflow. The development is done in a sectioned off part of the server, as the regular users don’t have access to create database/applications in the general Domino data location. Data is then loaded though an import from an Excel spreadsheet, When the first iteration of the application is done, the user shows the result to the CFO, who loves it. But there are a couple of functions that would be nice to have, like integration with another, existing Domino application. This is something that the IT department and their developers need to handle. So the application is handed over to them. IT takes a look at the application, and either leaves it in the end-user area on the server or move it over to the general data storage. The assigned developer then opens up Domino Designer or perhaps even Visual Studio Code, and add the code needed. The developer only spends a fraction of the development time previously needed, as the end user already built much of the infrastructure of the application. Another benefit is that the developer does not need to collect requirements for how the full application needs to work, only the small part they are modifying/adding. The application is updated, and the users can start using it. The IT manager is happy, as the developer only spent an hour or two on the project instead of a couple of days, and can now be moved on to the next project. The CFO and end-users are happy because they got their application built quickly, without having to wait for IT to get the bandwidth to develop a complete application, and they can improve their efficiency and get more done quicker. If HCL can deliver a low-code/no-code solution like this, perhaps with data storage not only in Domino .NSF files but also with connections to other data stores like perhaps SQL and Mongo DB, this could be an amazing collaborative development platform, where end-users and professional developers work together on improving the application landscape of their company. I can’t wait to see what HCL delivers later this year!      
  • We live in interesting times.
    Yesterday it was announced that HCL Technologies will purchase the IP (intellectual property) of seven IBM-owned products, including Notes/Domino, Sametime and Connections, for a total of 1.8 billion dollar. HCL and IBM already had a partnership on the product development side, with HCL doing the development and support with IBM still owning the products and handling sales and marketing. Now HCL is fully in charge of the product, and is not tied down by what IBM decides. As soon as the HCL-IBM agreement was announced last year, HCL aggressively went on the offensive. They announced not one but two additional versions of Notes and Domino. Domino 10 was delivered just two months ago, and version 11 is promised in 2019. HCL reached out to business partners and IBM Champions, as well as to the rest of the user community, to get feedback about what features were the most critical. Despite the quick release of Domino 10, a number of suggested features were included, as were several other impressive improvements. Notable among these features is the new (and extremely fast) Domino Query Language as we as support for node.js through the domino-db module. On the administration side there were several improvements that will lower the TCO (total cost of ownership). HCL has already announced several so called Jams in the near future to collect feedback on what the users want to see in the upcoming Domino 11. So what does yesterday’s announcement mean for the future of Notes, Domino and Connections? I belive it will be extremely beneficial. HCL can take the products where they want them, adding functions requested by small and medium sized businesses instead of focusing on what a few very large customers wants, which is what IBM seemed to do. By adding back low-code/no-code development into the core product, the citizen developers can again be engaged to create simple applications for their own or their department’s use. If they then need more advanced functions they can hand the application over to a traditional developer for further enhancements. This is what Notes looked like in the beginning, back in the early to mid 90’s. This is the strength of the platform, and what brought it its success. The weakness of Notes and Domino has always been IBM:s (seemingly) lack of understanding of the product, and how it fits smaller and medium sized businesses. By going back to the original use of Domino, combined with HCL:s focus on on-premises (as opposed to IBM:s attempt to move everything to the cloud, despite what the customers want), I think HCL can bring a new life to Notes and Domino, and combine Collaborations into the mix. I can see an upcoming release of Collaboration where the data lives in a Domino database. So for any Domino and Connections customers and business partners, I think the future looks bright. My belief is that HCL will bring new life and new functionality into the products.
  • Free Code – Wrapper for searches in NetSuite
    About a year ago I wrote a SuiteScript 1.0 class as a wrapper around the search functionality in NetSuite. I have updated the code over time, and I want to share the latest version. Among the new features is support for formulas and search expressions. The class should be backwards compatible with the original version, but in addition you can also pass an object to most functions, instead of passing separate parameters. This makes it more flexible and allows me to add more functionality. Enjoy!  
     * Encapsulate NetSuite search functionality in an easy-to-use object for SuiteScript 1.0.
     * Version    Date            Author           Remarks
     * 1.0        11 Nov 2016     kmartinsson      Initial version
     * 1.5        06 Jul 2017     kmartinsson      Added record type to constructor
     * 2.0        23 Aug 2017     kmartinsson      Added Search2 function, with support for objects and adding multiple columns/filters
     * 2.0.1      01 Sep 2017     kmartinsson      Bug-fixes
     * 2.0.2      01 Sep 2017     kmartinsson      Fixed issue with join not being null, added hasOwnProperty check 
     * 3.0        20 Nov 2017     kmartinsson      Removed v1.x code stream, renamed Search2 to Search
     * 3.0.1      06 Dec 2017     kmartinsson      Added JSDoc style comments, updated comments to new JSDoc style
     * 3.0.2      28 Feb 2018     kmartinsson      Fixed bug in sort key which prevented proper sorting. Added alternative keys.
     * 3.0.3      15 Jul 2018     kmartinsson      Added filter expression support
     * 3.0.4      01 Oct 2018     kmartinsson      Added method removeColumns() for use on (external) saved search
     * Search object
     * @constructor
     * @param {string} recordtype - Optional NetSuite recordtype (internalid)
    function Search(recordtype) {
        this.recordType = null;
        this.columns = [];
        this.filters = [];
        this.filterExpressions = [];
        // Set internal id of saved search to null
        this.internalId = null;
        this.noSavedColumns = false;
        // If record type/ID is supplied, set it now, otherwise default to null
        if (recordtype != null && recordtype != "") {
            this.recordType = recordtype;
        // Helper function to verify the value is empty or null
        function isNullOrEmpty(val) {
            if (val == null || val == '' || val ==[] || val == {}) {
                return true;
            } else {
                return false;
         * Remove all columns included in the search
         * @param none
        this.removeColumns = function() {
            this.noSavedColumns = true;
         * Add a column to include in the search
         * @param {object}|{string} column - Object specifying a column to return or string containing columnId
         * @param {string} join - Joined record (internalid) (optional)
         * @param {boolean}|{string} sorting - Sorting (optional)
         *         Options: true = descending, false = ascending, empty/null = no sorting, "yes" (ascending), 
         *         "no", "ascending", "descending" (can be abbreviated "a" and "d" respectively).
        this.addColumn = function(column, join, sorting) {
                var nsSearchColumn = null;
                var paramColName = null;
                var paramJoin = null;
                var paramSummary = null;
                var paramSorted = null;
                // Check if first argument is string or object
                if (typeof column == "string") {
                    paramColName = column;
                    // Check if second argument is null (for no join)
                    if (isNullOrEmpty(join)) {
                        paramJoin = null;
                        // Check if arguent for sorting was provided
                        if (!isNullOrEmpty(sorting)) {
                            paramSorted = sorting;
                    } else {
                        // Check if second argument is boolean, then it is not 'join' but 'sorting'
                        if (typeof join == "boolean") {
                            paramSorted = join;
                            paramJoin = null;
                        } else {
                            paramSorted = sorting;//sorted;
                            paramJoin = join;
                    // Now paramJoin and paramSorted are assigned properly
                    if (typeof paramSorted == "boolean") {
                        if (paramSorted == true) {
                            paramSorted = "des";
                        } else {
                            paramSorted = "asc";
                    } else if (typeof paramSorted == "string") {
                        // Get first character of string, in lower case
                        var tmp = paramSorted.slice(0, 1).toLowerCase();
                        // y = ascending sorting, n = no sorting, a = ascending, d = descending
                        if (tmp == 'y' || tmp == 'a') {
                            paramSorted = "asc";
                        } else if (tmp == 'd') {
                            paramSorted = "des";
                        } else {
                            paramSorted = null;
                } else {
                    if (column.hasOwnProperty("name") && column.name != null) {
                        paramColName = column.name;
                    } else if (column.hasOwnProperty("columnName") && column.columnName != null) {
                        paramColName = column.columnName;
                    } else if (column.hasOwnProperty("columnname") && column.columnname != null) {
                        paramColName = column.columnname;
                    } else if (column.hasOwnProperty("column") && column.column != null) {
                        paramColName = column.column;
                    } else {
                        throw nlapiCreateError('search.addColumn() - Required Argument Missing', 'The required argument columnName is missing. This argument is required.
    Received: ' + JSON.stringify(column)); } if (column.hasOwnProperty("join") && column.join != null) { paramJoin = column.join; } if (column.hasOwnProperty("summary") && column.summary != null) { paramSummary = column.summary; } } nsSearchColumn = new nlobjSearchColumn(paramColName, paramJoin, paramSummary); // Check if 'sorted' value exists in object if (column.hasOwnProperty("sorted") && column.sorted != null) { // Get first 3 characters as lower case paramSorted = column.sorted.toLowerCase().substring(0, 3); } else if (column.hasOwnProperty("sorting") && column.sorting != null) { // Get first 3 characters as lower case paramSorted = column.sorting.toLowerCase().substring(0, 3); } else if (column.hasOwnProperty("sort") && column.sort != null) { // Get first 3 characters as lower case paramSorted = column.sort.toLowerCase().substring(0, 3); } if (paramSorted!= null && paramSorted!="") { if (paramSorted == "asc") { nsSearchColumn.setSort(false); } else if (paramSorted == "des") { nsSearchColumn.setSort(true); } else { } } // Check if 'formula' value exists in object, then add to column object if (column.hasOwnProperty("formula") && column.formula != null) { nsSearchColumn.setFormula(column.formula); } // Check if 'functionId' value exists in object, then add to column object if (column.hasOwnProperty("functionId") && column.functionId1 != null) { nsSearchColumn.setFunction(column.functionId); // Push new nlobjSearchColumn into array } // Check if 'label' value exists in object, then add to column object if (column.hasOwnProperty("label") && column.label != null) { nsSearchColumn.setLabel(column.label); } this.columns.push(nsSearchColumn); return nsSearchColumn; } // end function addColumn /** * Add multiple columns to include in the search * @param {array} columns - array of column objects */ this.addColumns = function(columns) { for (var i = 0; i < columns.length; i++) { this.addColumn(columns[i]); } } // end function addColumns /** * Add a search filter * @param {object}|{string} filter - filter object or string containing fieldId * @param {string} fieldJoinId - field to use for join (optional) * @param {string} operator - operator for filter (optional) * @param {string} value - value to filter for (optional) */ this.addFilter = function(filter, fieldJoinId, operator, value) { if (typeof filter == "object") { var obj = filter; var fieldId = obj.field; var fieldJoinId = null; if (filter.hasOwnProperty("join")) { fieldJoinId = obj.join; } var operator = obj.operator; var value = obj.value; // Create filter object var nsSearchFilter = new nlobjSearchFilter(fieldId, fieldJoinId, operator, value); // Check if 'formula' value exists in object, then add to filter object if (obj.hasOwnProperty("formula") && obj.formula != null) { nsSearchFilter.setFormula(obj.formula); } // Check if 'functionId' value exists in object,then add to filter object if (obj.hasOwnProperty("functionId") && obj.functionId != null) { nsSearchFilter.setFunction(obj.functionId); } this.filters.push(nsSearchFilter); } else { var fieldId = filter; this.filters.push(new nlobjSearchFilter(fieldId, fieldJoinId, operator, value)); } } // end function addFilter /** * Add multiple search filters * @param {array}filters - array of filter objects */ this.addFilters = function(filters) { for (var i = 0; i = 900); return results; } // end function getResults } // end class search
  • Are you a Champion? Nominate yourself or someone else!
    The yearly nomination of IBM Champions is once again open. Do you know someone who deserves to be recognized for their contributions to the community or to IBM? Nominate that person! Do you think you deserve to be an IBM Champion? Nominate yourself! I know it feels strange to nominate yourself, but you are the one that knows best what you have been contributing. There is no way for IBM to know what everyone out there have been doing during the last year, not even if they enlisted IBM Watson… So how are the IBM Champions selected? Here is the list of criteria IBM published:
    We want IBM Champions who:
    • Demonstrate both expertise in and extraordinary support and advocacy for IBM technology, communities, and solutions.
    • Share advocacy and influence within and outside their organizations or customer engagements.
    • Influence and mentor to help others make the most of investments in IBM software, solutions and services.
    [Significant] contributions [over the last 12 months] must be above and beyond a nominee’s job duties, but may be internal or external. The list below is just a few examples:
    • Regularly blogging or creating other technical content
    • Speaking at multiple events
    • User Group Conference Committee member (involves the planning and execution of one or more conferences, events, or meetups)
    • President, Leader, or Board member of a worldwide or local user group
    • Providing customer references
    • Regularly being an advocate for IBM products inside your organization, making connections, and educating users
    Now is your opportunity to recognize people for what they have been doing during the last 12 months. And don’t be shy, submit a self nomination as well, if you think you deserve it. Nominations are open until October 22 at https://www.ibm.com/developerworks/community/blogs/ibmchampion/entry/2018ChampionNominations. Don’t miss the deadline!  
  • Thirty Years – What A Ride!
    Thirty years. It can feel like an eternity, or like just yesterday. That is how long I have been working in the IT industry, as of 2 weeks ago. When I graduated the Swedish equivalent of High School in the spring of 1988, I did not know what lay ahead. If anyone would have told me where I would be 30 years later, I am not sure I would have believed them. Computers, and especially programming, was my big interest. I had spent every available hour in the computer room in school. I went there during breaks between classes (if only 15-20 minutes) as well as during lunch break (usually 1 hour long. I learned to eat really fast, to maximize my time in front of the computer… Then after school I often spent 4-5 hours learning to program, either from books, magazines, or from other students. After I graduated, I was not really motivated to go to college. But I found an intensive one-year college level education in systems programming and computer science. It would be classes 8am to 5pm, 5 days a week. Today you would probably call it boot-camp… Unfortunately the class did not make, it needed a couple more students. So in the beginning OS September 1988,after about 2 weeks of classes, we were told to come back in January. We were encouraged to find a job or internship in the mean time. So I started to call around to different companies I found in the yellow pages. After a few days I got a hit, a company was looking for a first line support technician. I sent in my application (I did not even have a formal resume) and a copy of my high school grades. A week later (on a Friday) I had an interview, and the following Monday I started working there. This company was Microsoft. Needless to say, I learned a lot at Microsoft. I return to the class during the spring semester, worked at Microsoft during the summer break and then again after I graduated at Christmas. After a year in the Air Force for the (then) mandatory military service, I intended to go back to Microsoft, but I was offered a job as a programmer at another company, and I jumped at that option. From there it just continued, via 5 years as an IT journalist and then over 20 years working mainly with Lotus (later IBM) Notes and Domino. There are times when it feels it was just like yesterday I was writing Pascal code for a computer running CP/M-86 as operating system. Or when my coworker and I, who lived in the same apartment building (but on different floors and in different ends of the building) decided to run RG58 coax cable between out apartments, so we could network our computers. Or when I went scuba diving in Egypt and brought an IBM ThinkPad 701C (the model with the expanding keyboard) and a digital camera with me, so I could write a diary to publish on my personal website. Yes, it was pretty much a blog, way back in 1995… But when I look at how technology has changed, it feel like the middle ages. Our network at school (yes, we actually has one!) had a hard disk the size of a small shoebox, and with a capacity of 30 MB, to be shared between students and teachers. Yes, it’s not a typo. 30 Megabyte! Today most hard drives have at least twice that amount of memory just for cache… Compare that with my mobile phone, on which I am writing this post while riding a bus from Dallas to Houston. It has 2185 times that memory (64 GB) built in. I have an additional 200 GB in the form of a micro SD card. This amount of storage would have been unfathomable 30 years ago. Today we have internet access everywhere. I can sit in my car, in a restaurant or on a bus in the middle of nowhere and still have access to all the knowledge (not to mention cat videos) in the world. In fractions of a second I can perform a search that would have been virtually impossible 30 years ago. I can turn on and off the lights at home, no matter where in the world I am. I can check the temperature in the different rooms and change the AC settings, if needed. I get an automatic alert if there is smoke I the house, or water where it is not supposed to be. And I can check the status of my laundry remotely. I can talk to the computer, phone and other devices and have them turn lights on or off, tell me what the weather will be later that day or the next few days, or play any music I ask it to play. This is just like in Star Trek or 2001, except it is for real. I can buy anything I need from the comfort of my home, or from anywhere in the world, and get it delivered within a day or two, sometimes even the same day. At the same time I do miss the days back when I started with computers. It was like a new frontier, an unknown area where you had no idea what could happen next. I still remember the excitement when I managed to create something new and cool, and I got it to work after spending countless hours working on it and troubleshooting the code. It is rare that I feel that excitement today, in the same way. But it still happens. . I am very fortunate to be able to work with what I love, and have been able to do it for this long. I am looking forward to the next 30 years with great excitement.
  • #DominoForever – Release Day
    Finally it is here, the new version of IBM Domino. After the world premiere yesterday in Frankfurt, the world-wide launch is taking place today. The focus in this release is on application development and administration. Features like self-healing of databases and increase of the maximum database size to 256 GB are among the most popular with administrators, while developers have a number of exciting additions. The two most talked about features are the new Domino Query Language and node.js integration with Domino. Domino Query Language has been written from the bottom up to be fast, and the demonstrations I have seen confirms this. It is fast, very fast! And it can handle searches that would not only take a long time to create in earlier versions of Domino, but would take forever to run. Now the result comes back in a second, or even less. This really blew my mind when I first saw it earlier this year. John Curtis, the engineer that pretty much single handed wrote this code, did an amazing job, fully on par with when Damien Katz rewrote the formula language in ND6 and increased the performance several times over. The second big feature of Domino 10 is the integration with node.js through the domino-db connector. It will be delivered in a separate application development pack, which will enter beta this week. This is a slight disappointment, I had been hoping this functionality would be available at the launch. But I rather wait the time that is needed for IBM and HCL to make it a fully stable product, instead of rushing something unfinished to the market. Another product announced today was Notes for iPad, which makes it possible to run existing Notes applications unmodified on an iPad. All the functions we know and love are supported, like replication, offline access to applications, Lotusscript, Formula language, and more. To support mobile Notes applications, there are enhancements in Lotusscript, for example camera and GPS support. Lotusscript has also been extended with other new classes, for HTTP requests and JSON parsing directly in native Lotusscript. No need to call Java or system API:s anymore! HCL has done an amazing job in a short time, and Domino is on its way to become a very powerful and extendable platform for modern web development. A company can now not only deploy their existing business applications on iPads, they can also hire young developers who have experience of node.js and modern frameworks/libraries like Angular and React, and have them develop new solutions that can access existing data in Domino databases. Why use Mongo DB for data storage, when you have the much more secure Domino server available? Domino 10 is not the end point. Domino 11 will be out next year, and IBM/HCL have committed to a long future for Domino. Forget #domino2025, now it is #DominoForever! If you were not able to attend any of the launch events, here is the live stream from Frankfurt : https://m.facebook.com/story.php?story_fbid=310707186390803&id=111720058922703
  • 8 hours left to Domino 10
    It is now just 8 hours until IBM and HCL will unveil the brand new version of the collaboration platform Domino. On October 9, at 10:15 CEST, the audience at Think Germany in Frankfurt, Germany will be the first to see the new version of Domino and Notes 10. The next day, October 10,there will be launch events all around the world. Personally I am very excited about this launch. It has been 5 years since the last major version was released. In 2017 IBM switched from numbered releases to feature releases, keeping the version number 9.0.1 even when new features were added. This of course confused customers, who got the impression that Notes and Domino were in maintenence mode, with plans to eventually disbanding the product. After HCL took over the development of the platform last year, the (in my opinion) smart decision was made to change the version number, to make it clear to the market that it is a brand new version, and that development is continuing. A number of the new features in Domino 10 have already been demonstrated and talked about, but I am sure IBM and HCL have been holding out on some exciting features, and I am looking forward to hear about it tomorrow and on Wednesday. Join the live streams, if you can’t attend in person. You can find them at https://www.ibm.com/collaboration/ibm-domino.
  • Domino 10 – Almost here!
    [ujicountdown id=”Countdown to Domino V10 ” expire=”2018/10/09 03:15″ hide=”false” url=”” subscr=”Countdown to Domino V10″ recurring=”” rectype=”second” repeats=””] In just a few days, on October 9, IBM and HCL will unveil the new version of IBM Notes and Domino at an event in Frankfurt, Germany. The next day, October 10 (or 10/10, if you so like), there will be events in cities around the world. You can attend in person or watch a live stream. Find out all the details at https://www.ibm.com/collaboration/ibm-domino.  
  • A New Badge
    A few years ago IBM started using Open Badges from Acclaim to indicate accomplishments, and as an IBM Champion I was awarded several over the years. Yesterday I received another one, I am now an IBM Domino 10 Sales Advisor V1. This is how IBM describes it:

    This badge earner has shown a detailed understanding of IBM Domino 10 and the #domino2025 roadmap and has successfully demonstrated, through taking an online exam, how customers can benefit from the advances in Domino 10.   They will have achieved a passing score of 75% or higher in the online exam.

    There are rumors that IBM is considering to move away from traditional certifications and replace them with badges. This may not be a bad idea, if done right it will be much more granular, and your skills will be better defined. I expect more certification tests and badges to become available as we get near the launch of IBM Domino V10 in less than a month and a half.
  • Domino V10 – The Countdown Is On!

    The release date for Notes and Domino V10 has been announced. On October 9, at 10:00 CET, there will be a live unveiling of the brand new version during IBM Think in Frankfurt, Germany.

    There will be a number of other release events around the world in the days following. For a deep-dive inte the new features I would highly recommend attending ICON UK. This year this conference is taking place in Birmingham, UK on September 13 and 14.

    Learn more at https://www.ibm.com/collaboration/ibm-domino.

  • Six Days Left…
    I have finished the slides for my presentation at CollabSphere in Ann Arbor next week. I just have a little more code to add to demo database, and perhaps throw in a bonus or two… My session will be next Wednesday (July 24) at 9am in Grande III.  There are still a few seats available for CollabSphere 2018. The cost is only $100 for 3 days of presentations, workshops, and networking, This is great value for the money! Don’t miss the latest from IBM and HCL on Notes and Domino 10, Nomad and probably a surprise or two.    
  • I’ve Seen Things You People Wouldn’t Believe…
    This last week about 50 other specially invited people visited HCL America in Chelmsford, MA for a tour of their Collaboration Workflow Platforms (CWP) office. I was one of the lucky ones, and for two days we got to meet many of the engineers at HCL and see what they were working on around Notes and Domino. There are some parts that are under NDA, but I will talk about what I am allowed to mention. We got to play with the latest build of Notes 10, compiled that same morning. It included some of the new Lotusscript classes we have heard about before, like the NotesHTTPRequest class and NoteJSONParser class. That functionality had just been added in right before our visit (it is not available in the private beta that was released a few weeks ago), but when I tested it (yes, we got to play with the code right there!) it worked perfectly. This is a testament to the skills of the HCL developers. Most of them came over from IBM, and you probably know many by name. But there were also new-hires, and HCL is looking to fill many more positions in the US. The investments HCL is doing in this is impressive, and the whole atmosphere was extremely positive and filled with excitement. We were split up into smaller groups and were treated to a number of very interactive presentations of the directions taken in different areas. The biggest focus was on application development, and with the addition of support for node.s to the platform and the new classes in Lotusscript, the engineers were visibly excited to be able to show off what they have accomplished. The HCL developers have the right to be excited and proud. We were treated to two major announcements. The first one is a new extremely fast query language called DGQF (Domino General Query Facility). It is not an add-on, but part of the core code. It will be available in Notes/Domino 10, and can be called from everywhere, using Lotusscript, Java, Formula, and Javascript. Initially the searches can be made only in one database at a time, but in the future there will be support for multi-database searches. At CollabSphere 2018 in just over a week, there will be presentations on DGQF. If you have’t registered yet, do it now. You don’t want to miss this! The second announcement is under NDA for now, but I would expect for something exciting to be announced at CollabSphere, as well as at later conferences like ICON UK in September. So stay updated by attending user group conferences during the fall, leading up to the release of Domino 10 at some day in some month, who may or may not contain a 10. I am very excited about the future of Notes and Domino!  
  • My session at CollabSphere 2018
    My session Elementary! – Consume Watson Services using Node-RED and Domino 10 has been accepted at CollabSphere 2018. It has been scheduled for first thing in the morning on Wednesday, July 25 at 9.00 am. During my presentation, I will show how you can integrate IBM Watson into both Notes applications and web applications. You will see how you can use the new Lotusscript classes for HTTP and JSON in Notes/Domino 10. These classes will be used to connect to IBM Cloud, where a Node-RED instance will be used to consume Watson services. By using just a few lines of Javascript, we will translate text between different languages, as well as converting text to speech. CollabSphere will be a great learning opportunity, especially if you are interested in node.js and how it will be integrated into the upcoming Domino 10. There are a number of sessions focusing on Node.js and Node-RED, and I highly encourage every Notes developer to attend them. Here are just some of the sessions: This three-day conference will immerse you in an intensive exchange of knowledge and fun with other members of the ICS community. If you have not registered yet, it is about time.  Note that the guaranteed room rate will only be available for one more week. I hope to see you in Ann Arbor, MI in a few weeks.
  • Come see me at CollabSphere 2018!
    I will be presenting my session Elementary – Consume Watson Services using Node-RED and Domino 10 at CollabSphere 2018, taking place in Ann Arbor, MI inn just a little over a month (July 23-23). If you haven’t registered yet, hurry up! This amazing conference that Richard Moy have been arranging for 10 years now will be full of news and sessions about Domino 10. If you are a developer, you should be very excited. There are a large number of session focusing on everything from classic Lotusscript and the new improvements coming in Domino 10 to sessions about Node.js and how it is supported in Domino 10. There are even introductions to Node.js and Node-RED, and how you can use them in your Domino environment as well as making yourself more marketable. In addition to all the technical sessons you also have networking and social events. Don’t miss out on this great and inexpensive ($75) conference!
  • You can now sign up for Beta 1 of Domino 10!
    June 25 is the date when the first beta version of IBM Notes and Domino version 10 will be released to a selected group of testers. If you are interested in testing this beta version, you can apply to be a part of the closed beta program here. This first beta version will be Windows only, and will not contain the DominoDB NPN package for node.js. The second beta, due in the second half of July, will include clients for MacOS, server for Linux, Verse-on-Premises and DominoDB for node.js. The support for node.js in Domino 10 is something I am looking forward to. This is huge, not only can you integrate Domino with other solutions and components available through NPM, but any developers can now take advantage of Domino and it’s secure data storage. Products like Mongo DB does not have the built-in security we are used to from IBM Domino, but now developers can build secure applications using DominoDB, and not have to worry about building their own security solutions. I will be checking my mail on June 25!
  • CollabSphere 2018 – Still time to submit abstracts
    The deadline for submissions of session abstracts for CollabSphere 2018 has been extended to Sunday, June 3. This is your opportunity to share your knowledge with the community. Register on the brand new CollabSphere website. The link is http://collabsphere.org/ug/collabsphere2018.nsf/sessionabstract.xsp. This year we can expect a number of session on technologies more or less new to the Domino community, for example Node.js and React.js, as well as what’s new in the upcoming Notes and Domino 10. So if you haven’t registered for Collabsphere yet, take this opportunity to register and experience the learning atmosphere, networking and a lot of fun. Hope to see you in Ann Arbor in July for the 10th MWLUG/CollabSphere conference!    
  • LEGO meets IKEA
    This evening I stumbled upon a Kickstarter from a Swedish company called Cribble. It was posted in a Facebook group for furniture carpentry, and as soon as I saw it I thought that this is a very cool product. The easiest way I can describe it is LEGO meet IKEA. Here is how it is described on Kickstarter:
    Cribble is a kit of building pieces to create your own mini house. A blank canvas for your craftyness. Plan and build the foundation, wallpaper the walls, place the floors and put together some furniture according to plan, or your very own way. This is an inclusive project and it’s meant to integrate with other toys, crafts and stuff you find around the house.
    The two founders, Josefin and Anna, realized that most toys for girls miss the construction and engineering aspects that toys aimed at boys usually have. So they set out to create a modular construction set to allow children to build a house, using the similar construction techniques as in real life.
    So we think that if we increase the opportunity for girls to delve into building and technology they won’t just have a much more fun playtime but also even out one of the biggest mediators for the wage gap between men and women. Cribble is dipping into the traditional girl play area and giving opportunity for all genders to play around with technology, room and space without overwhelming them with signals that this are meant for boys.
    Now they are looking for help to get this product going. Take a look at the video and read more on Kickstarter. I think this is an amazing toy! And I think it is priced very nicely, when you think about what you get.