In den letzten Wochen hat unser Admin Torben die folgenden IBM Neuerungen unter die Lupe genommen:

1. Notes/Domino 10.0.1 Fix Pack 1 – Ja, es heißt jetzt wieder Fix Pack ;)

2. Verse on-Premises 1.0.7

3. den deutschen 10er-Notes-Client / Language Pack Re-Release

Laut Torben könnt ihr euch diese Updates getrost herunterladen und installieren , bei uns gab es mit den Versionen keine Probleme. Übrigens haben wir zum vorherigen Domino 10.0.1 Release-Paket schon einen Blogartikel veröffentlicht. Hier kommen unserer gesammelten Testergebnisse im Detail:

 

1       Notes/Domino 10.0.1 Fix Pack 1

IBM empfiehlt, das Fix Pack zu installieren, wenn ihr N/D 10.0.1 im Einsatz habt. Wir haben es bei uns selbst getestet und es läuft. Ob es jetzt noch besser läuft als vorher können wir nicht sagen, da wir die gefixten Probleme vorher nicht hatten.

Ihr könnt die Details zu den gefixten Problemen von Client, Designer bzw. dort verwendete Programmiersprachen, Server und iNotes in den folgenden Fix Lists nachlesen:

 

1.1      Client Fixes

SPR #

Description

DDOOB69PP9

Fixed the issue where ViewColumn painter was unable to paint the ViewColumnHeader labels. This is a regression beginning in 9.0.1FP10.

JOHNAXJGW9

Fixed a Notes startup issue after a widget is installed by a non-admin user, in a multi-user notes setup. This is a regression beginning in Notes 901FP10.  

RTAJB6VCN7

Fixed a tab selection issue where after moving a tab, the selection changes to a previous tab.  This is regression beginning in 901FP10.

PALTB6KRVW

Fix for REDIM of lotus script long arrays causing subscript out of range errors.  This regression was introduced in 10.0.

RTAJB6VCN7

Fixed a tab selection issue where after moving a tab, the selection changes to a previous tab.  This regression was introduced in 901FP10.

PHAN8A2EHH

Fixed an issue where opening an XPages application in the Notes client (XPiNC) takes too long for the first launch. This regression was introduced in 9.0.1 FP10.

JPKRB76U2X

Fixed an issue with Mac client crashing when running any java agent/code.  This is a regression beginning in Notes 10.0.1.

SSIRB75N2S

Fix to retain the default font set by end user, which used to get reset.

MMNDB7JV7N

Fixed a Notes client crash when the user opens a document in an application and clicks the Next button for the next document.

PPUEB6ULGR

Fixed a problem where "Entry Not Found In Index" error was seen on first launch of Notes Client after upgrading to 10.0.1 from 10.0.

PPRNB6ZGTB

Fixed an error on Mac Client where re-selecting one Sametime Meeting room after closing the same meeting room showed "Cannot connect to meeting Server".

STAAB9J78T

Fixed an issue where the database Repair function didn't work after Japanese Language Pack was applied.

JVEKBA2LVL

10.0.1 FP1 for MAC & Windows fail to install on a 10.0.1 G1 Notes Client.  This is documented under Technote #0879631.

Quelle: http://www-10.lotus.com/ldd/fixlist.nsf/WhatsNew/b1df4042fb8a980c852583b40067a7be?OpenDocument

 

1.2      Programmability Fixes

SPR #

Description

PALTB87SDQ

Fixed an issue with Lotus Script Redim not working correctly on Lotus Script Long arrays which were causing functional failures.  This is regression beginning in 901FP10.

PALTB6KRVW

Fix for REDIM of lotus script long arrays causing subscript out of range errors.  This regression was introduced in 10.0.

PALTB87PXJ

Fixed an issue in LotusScript NotesRichTextNavigator FindAndReplace method where it would fail if run more than one time after upgrading to 10.0.1. This is a regression beginning in 10.0.1.

SKSWB89MGH

Fixed an issue where LotusScript function NotesJsonArray.getNthElement(index) always returned the first element.

MKENB75H4A

Fixed a race condition in LSX Module handling that may lead to a crash with invalid Critical Section Handles.

DCONB5MKZL

Fixed the issue in Lotus script editor where newly added Lotusscript classes were appearing in ALLCAPS.

JCUSB75MMC

Fixed an issue with DQL when the range (<, ,+, >, >=) term ANDed with at least one other term finds all documents when it should find none.

JCUSB76KF4

Fixed an issue with coupled DQL range (<, ,+, >, >=) term (with both high and low bounds provided) ANDed with at leat one other term finds all documents when it should find none.

JCUSB7DR5L

Fixed an error with DQL with the substition variables used in the IN ALL (<viewname>) syntax fail with a compile error.

JCORB93PEY

Fixed an issue with DQL where calling Database.createDominoQuery on Linux resulted in Unsatisfied Link Error.

Quelle: http://www-10.lotus.com/ldd/fixlist.nsf/WhatsNew/b1df4042fb8a980c852583b40067a7be?OpenDocument

 

1.3      Server Fixes

SPR #

Description

RJTOB9ANCA

Fixed an issue where Delete Person action in Domino Directory request with the option "Delete mail replicas on all others server" may fail with a File Does Not Exist error listing admin4.nsf.".   This occurs if the server is not part of a cluster. This is documented under Technote #0872404 This is a regression beginning in 10.0.

SMOYB9JMCN

Adminp was incorrectly creating a Monitor Stub request for a Create Replica request, in effect treating it as a Move request.  This has been corrected.  A workaround is to disable the exchange unread marks option or manually create the replica from the UI.  This is a regression beginning in 10.0.1

AGUDB6JNUX

Fixed an issue with "AUTCAT java class not found" error.

VMRUB6LR6X

Fixed a server crash that could occur in a nifnsf enabled database having a corrupt .ndx file.

HPUTB5PEKZ

Fixed a missing online meeting password in an update notice when a meeting with online meeting details is updated by Chair.

GRHEB7ET5U

Fixed an issue where two domino servers saving the same attachment to DAOS with DAOS encryption *disabled* create files with the same name but different file headers (and therefore different checksums).  While this does not cause any problems for Domino or DAOS, it prevented some 3rd party de-duplication storage devices from being able to eliminate redundant copies of any given .nlo.  This change ensures that any new DAOS objects which are created will have a consistent file format and that an attachment stored to DAOS will have the same name and checksum regardless of which Domino server creates it.

LIBAB59NUY

The ability to enable the upload of a notes ID to the mail file via iNotes can now be enabled on the server using the notes.ini of ENABLE_IDUPLOAD_FOR_SAML=1.

JBUDB6NMJ6

Restrictions on the length of JVM arguments passed to the JVM on AIX / IBM i  platforms caused Tika attachment filtering to fail to load. This fix allows Tika to load though a side-effect is that some additional Tika-related debug may appear in the live server console only. The additional debug is not written to the console log file on disk.

RGAU9VLHT3

On the domino server set the following notes.ini (DISABLE_SAML_FLAG=1) to allow for an ID vault sync with a SAML user via the SecIdfget function.

Quelle: http://www-10.lotus.com/ldd/fixlist.nsf/WhatsNew/b1df4042fb8a980c852583b40067a7be?OpenDocument

 

1.4      iNotes

SPR #

Description

RRENB6SK4D

Fixed an issue in Firefox that spell check inserts unexpected new line into sentences with misspelled words and misspelled words cannot be replaced if signature is already inserted into rich text editor.  

NKEYB6WPCR

Fixed a problem that suggested words in spell check dialog is not selectable when using Internet Explorer 11 on Windows 7.

TKAAB6F58P

Fix a problem where the focus is not set when a new mail notification appears on IE11.

ASHHB55CB6

Fixed a problem where a special type of nested folders disappears in the dialog box of a folder operation.

SAHEB6SEQB

When using INI iNotes_WA_AmbigDefNoSelection, the OK button will not be initially focused and no candidate will be initially selected on an ambiguous dialog box.

JALAAQZLBL

Fixed a problem where a line break is lost in the body text when a mailto link is clicked on the received message.

 

 

2       Verse on-Premises 1.0.7

Aktuell nutzen wir bei uns schon VoP 1.0.7. Im Folgenden stellen wir euch einige der neuen Features vor.

- Erweiterung des Imports von Kalendereinträgen: Ab diesem Release können Kalendereinträge aus dem Web als .ics-Datei importiert werden, wenn sie als Mail-Anhang mitgeschickt wurden. Auf diese Weise können bis zu 100 Einträge aus einer .ics-Datei importiert werden. Das vorherige Limit war 50 Einträge.

- Automatischer Betreff bei Mails mit Anhang: Falls ihr über VoP eine Mail mit Anhang verschickt und nichts in den Betreff eintragt, wird ab dem neuen Release automatisch der Name des mitgeschickten Dokuments im Betreff übernommen.

- Sammel-Download von Anhängen: Mit der Version 1.0.7 habt ihr nun die Möglichkeit bei einer Mail mit mehreren Anhängen, alle Anhänge auf einmal herunter zu laden. Die „Alle herunterladen“-Option funktioniert allerdings nicht bei verschlüsselten Nachrichten.

- Anzeigen ungelesener Nachrichten nach Suche: Ab dem neuen Release könnt ihr euch in gefilterten Nachrichten nur die ungelesenen Nachrichten Anzeigen lassen. Zuvor konnte man sich die ungelesenen Nachrichten nur für den gesamten Posteingang oder einen kompletten Ordner anzeigen lassen.

- Verbesserte Ansicht für Webzugriff über Mobilgeräte: Dieses Feature muss auf eurem Server aktiviert werden. Sobald es aktiv ist, sind die Verbesserungen sofort nach dem Browser-Login über euer Mobilgerät auf Verse verfügbar. Dieses Feature ist auf iOS-Geräten über Safari und auf Android-Geräten über Chrome verfügbar (Über unseren ITWU-Launcher funktioniert es übrigens auch ;) ) Etwas schwerlich findet man die Doku, in der die Vorgehensweise zur Aktivierung beschrieben ist. Letztendlich sind wir doch darauf gestoßen: Kopiert einfach den folgenden Code in die notes.ini Datei eures Domino Server, welcher Verse bei euch hostet:

VOP_GK_FEATURE_160=1

- Verbesserungen für Entwickler: Mit der Version 1.0.7 von Verse on-Premises wurden einige Erweiterungen hinzugefügt. Die genauen Infos könnt ihr hier nachlesen.

Weitere Infos und eine komplette Liste der neuen Features findet ihr hier.

 

 

3       Deutscher 10er-Notes-Client & Language Pack Re-Release

Auch das Re-Release des deutschen 10er-Notes-Clients und des Language Packs haben wir getestet. Die Kombi FP1 und Language Pack läuft bei uns problemlos. Allerdings haben wir das Language Pack und den deutschen Client noch nicht in einer größeren Umgebung ausgerollt. Dementsprechend können wir zu diesem Fall noch nichts sagen.

Falls ihr euch schon das alte Release des Notes/Domino language kits installiert habt, solltet ihr dieses unbedingt deinstallieren und stattdessen, das neue nutzen.

Fix List des Notes/Domino language kits

Notes/Domino Language issues impacting Notes/Domino 10.0.1 Group 1 Language Kits

 

  • Keyboard shortcut keys not working as expected in German, French, Italian, and Spanish
  • Infobox, properties, and other dialogs truncate text or are misaligned in language releases
  • Action bar buttons not grouped properly in mail and pernames templates
  • Domino Server commands that should have remained in English were translated, causing issues with console commands and some admin client areas
  • Various incorrect or missing translations, in some cases causing a feature to be missing or not work
  • Translated templates had replica id that matched English
  • Numerous interoperability issues with Notes/Domino Fixpacks that would result in hangs during install, inability to install, or incorrect version number reported TN #0879631

Quelle: https://www-01.ibm.com/support/docview.wss?uid=ibm10870434

 

Habt ihr Fragen oder Anregungen? Ruft uns an unter 05251-288160 oder schreibt uns eine Mail an info@itwu.de.

 

Problem Description

In this article I will show you how to elegantly link documents in a Notes database with the use of event handlers. At first glance linking documents together seems to be a very trivial task. It is something we all implemented hundreds of times already, either using built-in Notes response hierarchies or through building document trees of our own design. Doing that programmatically while using backend classes is as trivial as it sounds, but letting the user do it interactively is something else entirely. Because then there are certain additional requirements that should be implemented to guarantee a consistent and hassle-free user experience.

So let us take a look at those requirements for the two standard use cases:

1. The user links an already existing document to the currently open document (through a dialog field or a view selection). The title of the linked document should be displayed in a field and the document can be opened through a hotspot.

Requirements

  • If the user doesn’t save the currently open document the link should be voided i.e. the field should be empty and the hotspot action should not execute.
  • The operation should not access backend classes to avoid replication and safe conflicts.

2. The user creates a new document from an already open document. The new document should be linked to the already opened one and its title should be displayed in a field (and can, after the initial save, opened through a hotspot).

Requirements

  • If the user doesn’t safe the new document AND the current document the link should be voided i.e. the field should be empty and the hotspot action should not execute, even if the new document has been saved.
  • The operation should not access backend classes to avoid replication and safe conflicts.
  • Every change the user performs on the new document should immediately be reflected in the old document.

 

Implementation

During the following demonstration I will call the document that provides the link the parent and the link target the child. I also will not make use of the Parent-Response-Hierarchy but will implement my own hierarchy using document IDs I generate myself programmatically. I am sure you know why that is . Of course you can use a Parent-Response Hierarchy instead and, if you are feeling lucky, you can even use Universal IDs to define the link.

 

Case 1: Linking to an existing document

The first case is more or less trivial. The child already exists and will not be opened during the linking operation hence we actually can (have to actually) access it using backend classes, specifically an instance of NotesDocument or built-in functions e.g. a dialog list field.
We create a dialog list field on the parent form and populate the choices with a column of a lookup view. The column formula should be something like the following:

doc_title + “|” + doc_id

Now make sure “Allow keyword synonyms” is checked in the field properties and you are done.

If you have to actually use backend classes, for example in conjunction with the NotesUIWorkspace Functions PicklistCollelction or PicklistStrings you can use the NotesUIDocument Function FieldSetText to set the value. And yes you can set computed and even hidden fields that way, too. I normally use a dialog list field even if the field is computed and set with FieldSetText. That way I can set the doc_id and after a NotesUIDocument.Refresh the displayed value is automatically translated to the title. For this to work you of course have to check the option “Refresh choices on document refresh” in the field properties.

The hotspot action performs a lookup in the same view (the first sorted column has obviously to be doc_id) and opens the document.

 

Case 2: Linking a new document

This case requires a little more work. So let us split the requirements into two steps to make it clearer.

For the purpose of code clarity and management we create persistent backend classes which serve as a wrapper for NotesUIDocument instances. We accomplish that through creating an instance of our wrapper in the PostOpen event and saving the reference in a variable declared in the Globals section of the form. For more details read my previous articles on the subject:

Event Handling mit LotusScript Teil I - Persistente Event-Handler

 

Step 1: Creating the child

In the backend class for the parent we first declare a private member variable:

Private childUIDoc As NotesUIDocument

 

And the following sub:

Public Sub actionCreateChild()

   Dim ws As New NotesUIWorkspace()
   Dim db As NotesDatabase
   Dim childDoc As NotesDocument

   Set db = ws.CurrentDatabase.Database
   Set childDoc = db.CreateDocument()

   Call childDoc.ReplaceItemValue( "Form", "childDoc" )
   Call childDoc.ComputeWithForm( False, False )

   Set me.childUIDoc = ws.EditDocument( True, childDoc )


End Sub

 

That sub will be called by the action which we use to create the child document. In effect our persistent instance of the parent wrapper class now has a handle on the NotesUIDocument instance of the just created child.
 

Step 2: Handling Child Events in the Parent-Wrapper

Next we want to notify the parent if and when the child gets saved or closed. For that purpose we bind the corresponding events, which are fired by the child NotesUIDocument instance, to event handlers we define in our parent wrapper.

Public Sub actionCreateChild()
    
    Dim ws As New NotesUIWorkspace()
    Dim db As NotesDatabase
    Dim childDoc As NotesDocument
    
    Set db = ws.CurrentDatabase.Database
    Set childDoc = db.CreateDocument()
    
    Call childDoc.ReplaceItemValue( "Form", "childDoc" )
    Call childDoc.ComputeWithForm( False, False )
    
    Set me.childUIDoc = ws.EditDocument( True, childDoc )

    On Event PostSave From me.childUIDoc Call OnPostSave_Child
    On Event QueryClose From me.childUIDoc Call OnQueryClose_Child

End Sub

 

All the PostSave event handler has to do is to set the doc_id and refresh the NotesUIDocument instance of the parent document. This way the current title of the document is always displayed.

Public Sub OnPostSave_Child( Source As NotesUIDocument )
    
    Call me.mUIDoc.FieldSetText( "child_id", _
                                  Source.FieldGetText( "doc_id" ) )
    Call me.mUIDoc.Refresh()
    
End Sub

 

In the QueryClose event handler we first check if the child has been saved. Since we created the document using backend classes we need to check the property IsNewNote on the backend document rather than the property IsNewDoc which is provided by the NotesUIDocument instance (and hence will always be false). If the child has been saved we do nothing, everything already has been taken care of by the PostSave event handler. If it has not been saved we reset the link field to the empty string, thus removing the link.

Public Sub OnQueryClose_Child( Source As NotesUIDocument, _
                               Continue As Variant )
    
    If childUIDoc.Document.IsNewNote Then
          Call me.mUIDoc.FieldSetText( "child_id", "" )
          Call me.mUIDoc.Refresh()
    End If
    
End Sub

 

And that is it. If the child doesn’t get saved the link will be empty. If the parent doesn’t get saved the link won’t change at all. If it was empty before the child was created it will obviously stay that way regardless whether or not the child has been saved.

 

Step 3: Opening the link

To keep the behavior consistent we also have to obtain the child NotesUIDocument instance when the user follows the link. For that we create a new sub for the sole purpose of opening the document.

Public Sub actionOpenChild()

    Dim ws As New NotesUIWorkspace()
    Dim db As NotesDatabase
    Dim view As NotesView
    Dim childDoc As NotesDocument
    Dim childID As String
    
    childID = me.mUIDoc.Document.GetItemValue( "child_id" )(0)
    
    If Not childID = ""  Then
          Set db = ws.CurrentDatabase.Database()
          Set    view = db.GetView( "lkpChildDoc" )
          Set childDoc = view.GetDocumentByKey( childID, True )
        
          If Not childDoc Is Nothing Then
                Set me.childUIDoc = ws.EditDocument( True, childDoc )
          End If
    End If
    
End Sub

 

So in theory we are done but what if the child gets opened end edited outside of the parent context? Well if we use the dialog list approach we are still done because when the child gets edited the view entry will change and the link title will be updated the next time you open the parent (into edit mode). But what if you want the parent to reflect changes in the child immediately?
 
There probably is a reason why you made one document the child and the other the parent and not the other way around. You built your hierarchy to reflect some piece of business logic or maybe even real logic .

In consequence it is highly likely that the user is already editing the parent when he opens the child. Hence updating the parent programmatically through the child without having the parent context invites all kinds of trouble. So don’t! Rather write an agent that runs once a night and performs a ComputeWithForm on all parent documents.


 

 

Normally, updating RichTextFields in an opened IBM Notes document requires saving, closing and then reopening the document. If you use the RichTextField to attach a file to the document even after doing all this closing and reopening, it is not guaranteed that the attachment is inserted where you want it to be. Another problem that is implicated with this is the necessity to save documents you do not want to save, yet.

Fortunately, there is an undocumented method in LotusScript that enables us to update RichTextFields on unsaved UIDocuments without the need for saving and reopening them.

It's called

NotesUIDocument.ImportItem( tmpDoc As NotesDocument, RichTextItem As NotesRichTextItem)

and it is part of in the NotesUIDocument class.

 

Explanation standard method:

The standard method to embed files or document links etc. into RichTextFields is the use of

NotesRichTextItem.embedObject

 

Example Code:

    Dim ws As New NotesUIWorkspace
    Dim db As NotesDatabase
    Dim doc As NotesDocument
    Dim rtitem As NotesRichTextItem
    
    Set doc = ws.CurrentDocument.Document
    Set rtitem = New NotesRichTextItem(doc, "RichTextField")
    Call rtitem.EmbedObject( EMBED_ATTACHMENT, "", "C:\Desktop\Document.docx")

 

Fig. 1: Notes form with buttons for the standard method and our workaround for attaching files in the RichTextField

 

After using the standard method the problems stated above become obvious. When the document is saved and reopened the file is attached at the end of the document, but not in the RichTextField where it should be.

Fig. 2: Result of the standard method EmbedObject of LotusScript

 

Explanation workaround:

Now we will use the ImportItem method.

 

Example Code:

    Dim sess As New NotesSession
    Dim ws As New NotesUIWorkspace
    Dim db As NotesDatabase
    Dim tmpdoc As NotesDocument
    Dim rtItem As NotesRichTextItem
    Dim uiDoc As NotesUIDocument
    
    'uiDoc contains the RichTextField we want to import our file into             
    Set uiDoc = ws.CurrentDocument
    
    'Create a support NotesDocument (tmpDoc)       
    Set db = sess.currentDatabase
    Set tmpdoc = db.CreateDocument
    
    'Create a RichTextItem on the support document to embed the desired file into
    Set rtItem = New NotesRichTextItem(tmpdoc, "RichTextField")
    
    'embed the desired file into the created RichTextItem
    Call rtItem.EmbedObject( EMBED_ATTACHMENT, "", "C:\Desktop\Document.docx")
    Call rtItem.update
    
    '!!Using computeWithForm ensures that the attachment is completely embed into the RichTextField before
    'we try to import it into our uiDoc. It works even though we have no form specified!!

    Call tmpdoc.ComputeWithForm(False, False)
    
    'Put Cursor into the RichTextField --> precondition for the file's import
    Call uiDoc.GoToField("RichTextField")
    
    'finally import the desired file into the RichTextField on the uiDoc.
    Call uiDoc.ImportItem(tmpDoc, "RichTextField")

 

Fig. 3: Result of the workaroung method ImportItem

 

As you can see, right after using the workaround button, the file is attached into the RichTextField of our opened document as desired. No saving and reopening needed!

!Please keep in mind that this workaround method is undocumented an could be removed from LotusScript by IBM!
 
I hope this workaround helped you as much as it helped me!
If you have any questions or suggestions do not hesitate to contact us.
 

 

Today I found a strange sideeffect in LotusScript. After calling the method

       NotesDocument.convertToMIME()

I used the @Function

        @ClientType

some times later in my IBM Notes Standard Client. The result from this @Formula was "Web" <- which is obviously not true ;)

Only after restarting the Notes Client @ClientType seems to be 'resetted'. I tested this behaviour on Notes 8.5.3 FP6 and Notes 9.0.1 with the same effect. I realized times ago that @ClientType does not work correctly, but I didn´t see a pattern. Now I could explain why sometimes the formula results the wrong value.

I just opened a PMR at IBM, perhaps there is someone who could tell me in the meantime if there is a possibility to 'reset' the @ClientType to normal after using NotesDocument.convertToMIME() ;) (notes.ini, other script function or so)

Many thanks!

Carl

Here is a little code for testing. Just paste it in a view action or button:

        Dim ws As New NotesUIWorkspace
        Dim session As New NotesSession
        Dim db As NotesDatabase        
        Dim doc As NotesDocument
        Dim vRes As Variant
        
        vRes =  Evaluate({@ClientType})
        Print "Client Type before: " & Cstr(vRes(0))
        
        Set db = session.CurrentDatabase
        Set doc = db.CreateDocument
        Call doc.ConvertToMIME()
        
        vRes =  Evaluate({@ClientType})
        Print "Client Type after: " & Cstr(vRes(0))