The Lotusscript class map is back

OpenNTF has done it again they have created an interactive class map of LotusScript like the one we all know from the old days as a poster on our office wall. Now you can buy a big touch screen and mount on you office wall displaying the classes. If you do have one post a comment with an image showing the new poster on your office wall.

you can find the map here https://openntf.org/ls/index.html and the annoncement here OpenNTF reintroduce the Lotusscript class map

Empty categories in views still visible

Views in HCL Domino can look clean or confusing depending on how you handle categories. A common issue is empty categories that appear for some users and disappear for others. This happens when the view depends on documents the user cannot read.

Domino shows a category only when at least one document in that category is visible. If all documents are restricted by Readers or Authors fields, the category stays hidden.

The problem starts when a response document is readable but the main document is not. The user can open the response through a link or lookup. The user cannot see the main document in the view. The category that the main document belongs to stays hidden. Domino treats the category as empty even if the response document exists. The response document does not create a category on its own.

You will notice this when users report that they see a response but cannot find it in the view. They think the category is missing. The real issue is access control on the main document.

You can reduce this problem with some simple checks.

• Keep Readers fields aligned across main and response documents.
• Avoid workflows where main documents are more restricted than their responses.
• Review the view selection so it includes documents users can read.
• Test with different user roles to see how categories collapse.

If you want to expose response documents even when the main document is hidden. Change so response documents is not displayed in a hierarchy . If you want predictable category behavior, give the parent and response documents the same visibility thru the readers and authors fields.

This keeps your views stable. It keeps users from wondering why a category disappears even when they know a response exists.

Quick LLM Access via 4 Lines of Code

4 lines of code to call a LLM, with zero maintenance in the future with DominoIQ.
Can you find any devtool that make it simpler to use LLM:s like
OpenAI, Claude, Llama, Mistral code setup?

This is the code that makes the magic happens

Dim LLM As NOTESLLMREQUEST,llmresp As NOTESLLMRESPONSE,resp as string
Set LLM=session.Createllmrequest()
Set llmresp=llm.Completion(db.server, "StdReplyEmail", “This is the text you want to respond to”)
resp=llmresp.Content

StdReplyEmail is the predefined LLM prompt to be used (This one is delivered with DominoIQ). Resp will hold the response from the LLM that you can use for your purpose.

Start testing with DominoIQ today, if you need to help with the setup check out Serdars great post

@Formula debug time saver snippets

If you are working with applications that is using Forms directly in the client but especially on the Webb here is some handy tips how to avoid debugging your code for hours.

  1. Always use @iserror or [FailSilent] with @DBLookups
    @dblookup(“”:”recache”;@dbname;”test view”;”test value”;1;[FailSilent])
    or
    Ret:=@dblookup(“”:”recache”;@dbname;”test view”;”test value”;1)
    @if(@iserror(Ret);@return(“”);””);

    And you code continues
    or use
    Ret:=@dblookup(“”:”recache”;@dbname;”test view”;”test value”;1);
    validatedRet:=@if(@iserror(Ret);””;Ret);

    And your code continues
  2. @DBColumn doesn’t have fail silent so use the @iserror way instead
  3. When you are using @DocGetField(Document UNID;”FieldName”)
    if you are getting a document that has readers and authors fields always use
    Ret:=@if(@iserror(@DocGetField(UNID;FieldName));””;@DocGetField(UNID;FieldName));
    If you don’t use that your code will crash on the webb if you can’t access or the document you are getting data from is deleted


    Update 2025-08-20:
    Thanks Knud Erik Højslet for pointing out that @iferror is a deprecated command, the code above is updated. Also updated from nocache to recache pointed out by Vladislav Tatarincev.

Domino IQ and OpenAI

Check out this great write up by Serdar Basegmez about how to use Domino IQ with an external LLM provider. And you could follow the same guide with any other provider, because almost everybody is using the same API syntax as OpenAI.

https://lotusnotus.com/2025/07/connecting-domino-iq-external-llm-providers

Read html from a docx file

If you are using the OpenNTF Poi extension this is quite simple to preform because there is an bean called poiBean that have a function called buildHTMLFromDocX this function takes an InputSteam and you can get an input stream from a NotesEmbeddedObject.

a simple example where you have stored an attachment in a richtext field called attachment and this doc is shown in hte view attachment. The code below is placed on an xpage button and the Xpage as an computed text that will show the Extracted viewScope data.

var v:NotesView=database.getView("test")
var doc:NotesDocument=v.getFirstDocument()
var rt:NotesRichTextItem=doc.getFirstItem("Attachment")
var att:NotesEmbeddedObject=rt.getEmbeddedObjects()[0]
var is:java.io.InputSteam=att.getInputStream()
var oi:java.io.ByteArrayOutputStream=poiBean.buildHTMLFromDocX(is)
viewScope.Extracted=oi.toString()

If you want to parse the HTML jsoup is a great library

Check out my other Poi example published several year ago

Single Sign-On configuration is invalid

If you are getting this error when adding a SAML or Multi server SSO configuration
HTTP Server: Error loading Web SSO Cookie Names Configuration ‘LtpaToken’ for Web Site ‘xxxx)’ (Single Sign-On configuration is invalid)

There is an technote article about this, but I don’t know if that help so much. Check if the server is added to participating server field in the LTPAToken document, because otherwise will not the server be able to see the document.
For other SAML problems check out my SAML article Debugging SAML setups in HCL Domino

Connect with multiple tenants using a single ip

With the ENABLE_SNI=1 notes.ini parameter you can have multiple host names and they can use https with with and without Let’s Encrypt certs. but the good thing is that this is also supported using SAML.

This means that if you company have multiple tenants in Office 365 or if you are using Okta you can add them and use SAML as login thru two different hostnames.

This isn’t a new thing probably worked since the parameter was introduced in Domino 11 only that I haven’t tested this until now 🙂

Once again does Domino simplify admin work in a complex it environment.

Check out my summary post about SAML in Domino if you haven’t

XPages: No component found with ID

If you are doing XPage development and are getting an error that there is no component handling the submit event. In my case it was when saving new documents but it could happen otherwise also.
The solution was in my case to not save the NotesDocument, use the XSP Datasource instead.

So I did
var doc:NotesDocument =document1.getDocument(true)
Created some reader and author fields and did
doc.save(true,false)
And did a full refresh on the button and got the crash but only on new documents.
What I did was changing the doc.save to document1.save()
Also check any visible or disable ssjs if you are checking a value in the ssjs doc or the notes document.
due to the update events they do not always sync. So make sure that you check the value in the same context as the value is set if the document is new.
i.e doc.replaceItemValue(“Status”,”Open”) try changing this to document1.replaceItemValue(“Status”,”Open”) if that solves you issue.

CLFAD0380E: No component found with ID $$xspsubmitid=<some random id> to handle the submit event.

Check out my XPAGE Error page for more

Agent(s) do not run on server

If you see this error on the server
AMgr: Error executing agent ‘Agentname’ in ‘Database’. Agent signer ‘Servername’: You are not authorized to perform that operation

These are the things you need to check

  1. Database ACL, what are the access rights for the user
  2. Server document, security section and Programmability Restrictions
  3. Check the agent and security tab if run on behalf of has a user that doesn’t have access rights

Feel free to drop a comment if you have some more great troubleshooting tips for agents