Error 404 - Item Not Found Exception after upgrade to Domino 12.0.2  

By Oliver Busse | 2/2/23 2:21 AM | Development - Notes / Domino | Added by Roberto Boccadoro

For a customer we also set up a dev environment using our application platform Aveedo where we are creating a brand new CRM system. Very soon we faced the problem, that pages were not loaded properly (404 error) at random occurrence. After some testing with various XPages memory settings etc. I opened a case, and it turned out: there is a problem in the com.ibm.xsp.core_12.0.2.20221101-2131 plugin lib, which means in the XPages core. HCL support immediately forwarded this to the dev team and they were able to create a testfix for us which solved the problem. The fix is addressed for FP1 of 12.0.2.

Introducing Bali Unit Testing Framework  

By Paul Withers | 2/2/23 2:18 AM | Development - Notes / Domino | Added by Roberto Boccadoro

Today we’ve released two projects, one on HCL’s GitHub and a fork on OpenNTF’s GitHub. It will be useful to give a bit of background, as well as an introduction the the project. The version on HCL’s GitHub is the original, Bali Unit Testing Framework, a unit testing framework written in and for VoltScript, the evolution of LotusScript currently in development for Volt MX Go. The documentation, as usual, is available on GitHub. There are a number of places where the code leverages new language functionality from VoltScript. As a result, although the code will be usable from VoltScript, the code cannot be used as-is by Domino developers. Therefore a fork has also been created on OpenNTF’s GitHub and adapted for LotusScript, Bali Unit Testing Framework. The documentation is available also on GitHub. This can be used by Domino developers. The documetation has also been slightly modified, to be relevant to LotusScript developers.

A new tool for creating rich text  

By Andre Guirard | 1/26/23 7:32 AM | Development - Notes / Domino | Added by Roberto Boccadoro

I’ve used an earlier version of this in other applications, but now it’s greatly improved and expanded. This is an API for creating rich text, including all the variations of sections, tables, image backgrounds, links, borders… This is an initial 0.1 release, so there will almost certainly be more changes coming, but I need y’all to drive this. Download it, try it out, respond here with questions and suggestions

More thoughts on Content Assist  

By Andre Guirard | 1/24/23 3:34 AM | Development - Notes / Domino | Added by Roberto Boccadoro

Recently I write about best practices for commenting for content assist. I’ve been writing a lot of LotusScript recently (I’m making a present for you), and in trying to make the content assist as helpful as possible, I’ve had some additional thoughts.

Download: Simple App Starter  

By Andre Guirard | 1/16/23 5:58 AM | Development - Notes / Domino | Added by Roberto Boccadoro

I was creating yet another HCL Notes demo client application recently and was hunting for an existing application I could copy the basic navigation features from without having too many unique things to get rid of. Strange hide formulas, Queryopen code, etc. It occurred to me there should be a template for that. So I created it and here it is (also available on the Downloads page).

Best practice error trapping in LotusScript  

By Andre Guirard | 1/13/23 10:31 AM | Development - Notes / Domino | Added by Roberto Boccadoro

The handling of unexpected errors is one of the headaches we have to deal with while coding. By their nature, you don’t have a specific strategy for handling that error, or it would be an expected error. But you don’t want to present the end user with the uninformative default error dialog. Default type mismatch error dialog.What line, please? Also, end user, please DON’T click the link. We’d hope the end user never sees the system error message, but if they do, we should at least have enough information for a developer to locate the code line that generated the error. That means we want a stack with line numbers, such as Java generates by default. In this article, I discuss three “levels” of error handling. You can choose how far to take it based on your needs and the amount of effort you want to put in.

Users don't read your dialogs   

By Andre Guirard | 1/12/23 3:02 AM | Development - Notes / Domino | Added by Roberto Boccadoro

You know how you open a dialog to ask for confirmation or additional information, or to warn them what’s about to happen? Yeah. People don’t read that stuff. The dialogbox is just an obstacle to completing their task. They may press Enter or do whatever it takes to get past it — especially if they routinely encounter other dialogs in the application. This article discusses best practices and tooling to get people’s attention where it’s needed and to avoid negative consequences of inattention.

Close & Reopen Database, and Ad Hoc Stored Form   

By Andre Guirard | 1/9/23 9:09 AM | Development - Notes / Domino | Added by Roberto Boccadoro

I’ve been working on a Notes client application recently where I ran into the problem that I needed to create a design element and then immediately use it. This ran afoul of the Notes client’s design element cache — it wouldn’t recognize the new design element until I closed the application and reopened it. There’s no “close and reopen” command in any Notes scripting language, and if you close the current application completely, your code in that application stops running, so you can’t then execute a command to reopen it. Here’s my solution. Someone will probably comment about some much simpler solution I’ve missed, such as a secret command to reload the design element cache, but this way works.

Creating random names for test data  

By Andre Guirard | 1/9/23 9:07 AM | Development - Notes / Domino | Added by Roberto Boccadoro

Notes/Domino applications don’t just have code — they also store data, often a lot of it. But it can take years for them to accumulate enough documents for any performance issues to start seriously impacting users. When designing an application, especially a brand new one, it’s important to performance test it with an unreasonable amount of sample data so any performance issues become evident immediately.

Coding for translatability in Domino  

By Andre Guirard | 1/5/23 3:13 AM | Development - Notes / Domino | Added by Roberto Boccadoro

This is partly for organization which, like HCL, use Domino Global Workbench to do translations of their Notes/Domino applications. But also, even if you do translations manually, or even if you don’t do them at all, it makes sense to learn good habits for creating applications in a way that makes translations simple, because it’s not that hard and you never know.

HCL Notes V12.0.2 and embedded views / UPDATED !!  

By Rainer Brandl | 1/4/23 4:35 PM | Development - Notes / Domino | Added by Oliver Busse

After migrating a Domino environment to 12.0.2 and upgrading the Notes Clients we could see the following issue. In an application where documents from another application should have been displayed in an embedded view the embedded view was not filled and kept empty.

Workstation-specific user application settings  

By Andre Guirard | 1/3/23 6:23 AM | Development - Notes / Domino | Added by Roberto Boccadoro

For a couple of applications, I’ve needed a way to store values specific to the combination of a user and workstation. These are personal settings, in other words, but the same person may need different settings if they use the application on a different workstation. This would mostly be local filepaths, things like the last folder the user selected for a particular file-open prompt, or the path of an external tool the user has to launch in a given situation. A list of recently accessed files. These would be different on different workstations.

Lazy code  

By Andre Guirard | 1/2/23 4:12 AM | Development - Notes / Domino | Added by Roberto Boccadoro

You may be familiar with “lazy loading” on webpages. That’s where the browser doesn’t request images from the server until the page is scrolled to the point where they would be visible. The general principle is to not do work until you have to, both to speed up initial loading and because who knows, you might not have to do it at all. The same principle can be applied to writing code. For best performance of your code, try to avoid time-consuming operations altogether. In the LotusScript context, an example would be that you sometimes need to look things up in a view, but sometimes not. You don’t open the view and create a NotesView object until it’s first needed, and then once you have opened it, you don’t discard the object until you know you’re done with it. You can create your own cache.

Wonderful List datatype in LotusScript  

By Andre Guirard | 12/29/22 2:55 AM | Development - Notes / Domino | Added by Roberto Boccadoro

The general term for it is “associative array” — a collection of values indexed by a string rather than a numeric index. You might be thinking you already know about the List datatype in LotusScript, but there are a few tricks you might not have thought of.

NotesStream performance  

By Andre Guirard | 12/27/22 1:19 AM | Development - Notes / Domino | Added by Roberto Boccadoro

Lars Berntrop-Bos posted a comment concerning the LotusScript NotesStream class and his practice of reading as large a block as he possibly could to optimize performance. I decided to run a test to see how much difference that made. The results are as follows:

By Value, By Reference  

By Andre Guirard | 12/27/22 1:17 AM | Development - Notes / Domino | Added by Roberto Boccadoro

This is about how function and subroutine parameters are passed in LotusScript, and how to use that intentionally in consideration of code maintainability and performance.

Best Practices: Commenting for content assist  

By Andre Guirard | 12/19/22 8:16 AM | Development - Notes / Domino | Added by Roberto Boccadoro

When coding in LotusScript, please pay attention to your comments so the information needed by a developer making calls to your code, is available in the editor popups. Consistent “to do” flagging It’s easy, in the midst of writing code, to think you’ll come back and document something later, then forget to do it. To help me remember, I have one consistent string to flag all the locations I need to follow up on. Something I can put in my comment templates in the editor, and also short enough to type manually in comments within a module.

LotusScript Linked List data structure  

By Andre Guirard | 12/19/22 8:15 AM | Development - Notes / Domino | Added by Roberto Boccadoro

I previously published two linked list data structures for objects in the LotusScript Gold Collection. These are in script libraries ObjectList and ObjectListLite. They’re actually — despite the “lite” — both a more complex implementation than you need for most purposes. Here I present a new, simpler class that does only the basics of a doubly-linked list. The Queue class I wrote about previously is a variant of the linked list, but a list with limited functionality.

New download: Domino error list  

By Andre Guirard | 12/16/22 2:26 AM | Development - Notes / Domino | Added by Roberto Boccadoro

Rhis is a Notes database containing a list of Notes/Domino error messages and their corresponding number codes and symbolic names, and other string resources ditto, compiled from scanning the header files in the Notes/Domino source pack.

LotusScript Stack data structure  

By Andre Guirard | 12/15/22 3:36 AM | Development - Notes / Domino | Added by Roberto Boccadoro

The stack data structure is a collection of items that supports “last in, first out” access. You have two operations: “Push” an item onto the stack, and “Pop” to retrieve and remove the most recently added item. It’s like the stack of plates in a buffet restaurant, where unless you’re a rule-breaking savage, you can only take the plate on top, which was added last. Compare to a queue, where when you get a value from it, you’re getting the oldest thing it contains.

Andre's Directories Challenge  

By Paul Withers | 12/14/22 2:14 AM | Development - Notes / Domino | Added by Roberto Boccadoro

I am sure that anyone who uses LotusScript has been following the excellent blog posts of Andre Guirard. Recent blog posts on large arrays and queues have been particularly interesting for those of us working on VoltScript. His blog post on a Queue data structure ended with a challenge. The root of the problem is that the LotusScript Dir() function is not recursive. Without a parameter it gives the next file or directory relative to its last call. So you can’t have one loop using Dir() and an inner loop that also uses Dir(). Andre uses a Queue class to perform FIFO (First In First Out), which achieves what’s needed, but not as required For this task, if you care about the order of the returned results, this probably isn’t what you want. You’d prefer all the files in a given folder to be grouped together with the files from its subfolders, so those last two should be switched. Exercise for the reader: what data structure could be used instead of a queue to track the work and give the result in the desired order?

Larger arrays in LotusScript  

By Andre Guirard | 12/12/22 2:30 AM | Development - Notes / Domino | Added by Roberto Boccadoro

The array datatype in LotusScript supports arrays containing up to 216 elements (215 if you don’t use negative index values). This is fine for most purposes, but what if you need a larger indexed collection? In this first of a series of posts about different specific data structures in LotusScript, I show how to create super large arrays via custom classes

LotusScript Data Structures Basics  

By Andre Guirard | 12/8/22 6:39 AM | Development - Notes / Domino | Added by Roberto Boccadoro

What are these data structures of which you speak? In computer science, the term “data structure” refers to a way of organizing data into an arrangement you can navigate in specific ways, depending on the needs of your application. There are LotusScript implementations of the basic data structures in the LotusScript Gold Collection project on openntf.org. You can just take those and use them. But as noted above, often you need to modify the “classic” data structures for your specific requirements, or even create entirely new, specialized stuff. So I want to discuss the basic principles.

LotusScript Variants: EMPTY, NULL, Nothing  

By Paul Withers | 12/7/22 2:07 AM | Development - Notes / Domino | Added by Roberto Boccadoro

One of the great things about working on VoltScript with our team are the regular discussions about the inner workings of the language. Of course it’s also nice how easy it is to write and run a test script with the language, to quickly test various scenarios. Recently, because of two separate initiatives we’ve been working on, the topic of conversation has been Variants, and the potential values that denote a variant without a value.

XPages class-loader memory leak  

By Martin Pradny | 12/6/22 11:51 AM | Development - Notes / Domino | Added by Oliver Busse

We have recently experienced OutOfMemory crashes of XPages app server. The server was recently upgraded to 12.0.1FP1, but we were getting some panic crashes in HTTP even before the upgrade (it was 9.0.1FP10). Our hopes were that the upgrade would stabilize the server, but it's not the case. At least now I start to see what's the problem.

HCL Domino Christmas Calendar App stimulates festive mood at the office  

By Soehnke Grams | 12/5/22 11:21 AM | Development - Notes / Domino | Added by Oliver Busse

It is that time of the year again. December has arrived and, with it, the Christmas countdown has started. Much has changed in the world in the last years but some things stay the same. For the CEIR team at the University of Koblenz, the Domino Christmas Calendar App makes sure that the festive season is not forgotten.

The forgotten logical operators  

By Andre Guirard | 12/5/22 3:08 AM | Development - Notes / Domino | Added by Roberto Boccadoro

Here’s something I notice in a lot of other people’s code I look at, which has always bothered me. This isn’t language-specific — I see it everywhere. Programmers create logical expressions with the boolean operators And, Or, and Not. It seems to require a sort of sideways view of things to apply the additional operators that work with boolean values, Eqv and Xor (or to use their non-bitwise counterparts which more people might recognize offhand, = and != (<> in LotusScript).

Overhead of error trapping in LotusScript   

By Andre Guirard | 12/1/22 6:22 AM | Development - Notes / Domino | Added by Roberto Boccadoro

Having a little fun with the performance monitoring code from a previous post. Okay I have a warped idea of fun. I’m always interested in performance, so I decided to analyze the overhead of using an error trap (On Error statement) to handle edge cases as opposed to an “if” statement or other branch.

OpenNTF and Community Updates For Notes/Domino 12.0.2  

By OpenNTF | 11/28/22 10:52 AM | Development - Notes / Domino | Added by Oliver Busse

A few weeks ago, HCL released Notes and Domino 12.0.2, bringing with them a number of good features for users, developers, and administrators. To go along with these changes, the community at OpenNTF released new versions of several projects within a few days.

Setting up an environment to develop OSGi plugins for HCL Domino – 2022 edition  

By Mark Leusink | 11/27/22 2:51 PM | Development - Notes / Domino | Added by Oliver Busse

While testing the v12 version of the org.openntf.domino library I found a bug that stopped me from deploying it to v12.0.x Domino servers. I found out what the cause for the issue was, so I decided to take a shot at fixing it myself. There was just one problem: I didn’t have a development setup for OSGi plugins anymore. Online I could find most of the steps involved, but the guides could use an update here and there.