Nieuw in Lotus Notes 8.5: ID Vault

Er was eens een tijd waar Notes beheerders het zwaar hadden….

Nu worden we verwend met nieuwe functies die het werk wel erg makkelijk maken.
Neem nu het in Notes 8.5 geïntroduceerde ID Vault (of vrij vertaald in het Nederlands een kluis om Notes ID’s in te bewaren).
Pfff, hoor ik de die-hard-domino beheerder al roepen, dat hadden we altijd al, eerst de Escrow agent in versie 4 en vanaf versie 5 Password Recovery.

Wat is er dan zo belangrijk aan dat ID Vault?

Welnu, eindelijk hebben beheerders de mogelijkheid om zelf wachtwoorden te resetten.
Vergeten wachtwoord, iets dat bij de meeste bedrijven als erg vervelend wordt ervaren.
Zeker als (altijd de zelfde) personen na hun vakantie het Notes wachtwoord (alweer) vergeten zijn.
Meestal was de oplossing om een oud ID met het initiële wachtwoord terug te plaatsen, met kans op verlies van certificaten en sleutels of inmiddels verlopen geldigheidsduur, of door middel van de ernstig vermoeiende Password Recovery procedure.

Is dit niet herkenbaar? Lees dan niet verder.

Anders is het volgende wellicht toch interessant.

Instellen ID Vault.

Het opzetten van een ID Vault is een eenvoudige taak:

Start de Domino Administrator.
Open de server waar de ID Vault moet komen.
Klik het tabblad configuration, selecteer de server en klik rechts op Tools > ID Vaults > Create

ineco-lotus-domino-aanmaken-id-vault

Een dialoogvenster geeft uitleg over de ID Vault.
0-ineco-lotus-domino-aanmaken-id-vault-splash

Klik Next om door te gaan.

Geef een naam voor de Vault, dit mag niet de zelfde naam als de Notes Organisatie naam zijn.
1-ineco-lotus-domino-aanmaken-id-vault-naamgeving

Geef eventueel een omschrijving op.
Klik Next.

Geef een nieuw wachtwoord op voor het Vault ID en controleer de locatie aan waar het ID opgeslagen wordt.
2-ineco-lotus-domino-aanmaken-id-vault-wachtwoord

Klik Next

Controleer nogmaals of de server juist is.
3-ineco-lotus-domino-aanmaken-id-vault-server
Klik Next.

Selecteer de beheerders voor deze Vault.
Dit zijn overigens niet de personen die wachtwoorden mogen resetten, dit komt later.
4-ineco-lotus-domino-aanmaken-id-vault-beheerder

Klik Next.

Geef op welke Organisaties of Units met deze Vault mogen werken.
In het voorbeeld is dat er slechts 1 organisatie (/INECO).
5-ineco-lotus-domino-aanmaken-id-vault-organisatie

Klik Next.

Nu komen de personen aan bod die wachtwoorden mogen resetten.
Ook als er ID’s zijn waarmee applicaties gesigneerd worden die wachtwoorden mogen herstellen, en de server waarop zo’n applicatie draait dienen hier toegevoegd te worden.
Natuurlijk is dit later allemaal nog aan te passen.
6-ineco-lotus-domino-aanmaken-id-vault-terugzetten
Klik Next.

Geef op of er een bestaande Policy bijgewerkt moet worden, een nieuwe moet worden gemaakt, of dat je dit later handmatig wilt aanpassen.
7-ineco-lotus-domino-aanmaken-id-vault-policy
In ons geval kiezen we om een bestaande aan te passen.
Klik Next.

Hier de gekozen Master policy in beeld.
8-ineco-lotus-domino-aanmaken-id-vault-policy-toevoegen
Klik Add Vault Name om het Security settings formulier automatisch aan te passen.
Klik Next.

Selecteer het certifier ID van de organisatie.
9-ineco-lotus-domino-aanmaken-id-vault-certifier
Klik OK
Klik Next

Controleer of alles naar wens is in het dan volgende overzicht.
9-ineco-lotus-domino-aanmaken-id-vault-overzicht
Klik Create Vault wanneer je door wilt gaan.

In de volgende dialoog kan een tekst worden ingegeven die aan een gebruiker wordt getoond wanneer deze klikt op wachtwoord vergeten.
9-ineco-lotus-domino-aanmaken-id-vault-vergeten-prompt
Type de tekst en klik OK.

Wanneer alles goed is komt er een dialoog met een samenvatting van alle handelingen die zijn verricht.
10-ineco-lotus-domino-aanmaken-id-vault-gereed
De ID Vault is klaar voor gebruik!

ID bestanden van de gebruikers worden periodiek overgezet in de ID vault wanneer de gebruiker verbonden is met de server.
Het is dus belangrijk dat de gebruiker eerst een keer verbinding heeft gemaakt alvorens er een poging wordt ondernomen om het wachtwoord te resetten omdat het ID bestand anders niet aanwezig is!
Wanneer een ID in de Vault aanwezig is kan de beheerder via de Administrator Client naar de weergave Personen gaan, het slachtoffer selecteren, en rechts een keuze maken uit de nu beschikbare acties zoals Reset Password en Extract ID from Vault:
ineco-lotus-notes-wachtwoord-reset-persoon
De meest voorkomende actie zal zijn Reset Password, een simpele dialoog verschijnt:

ineco-lotus-notes-wachtwoord-resetten
Vul de velden in en het wachtwoord is gereset.

Leuker kunnen we het niet maken, wel makkelijker was de leus van belastingdienst, die ook hier goed past.

LotusScript en Excel import van tekst bestand

Om 12000 documenten te exporteren naar Excel was een LotusScript agent te lang bezig met het vullen van de cellen.
Daarom is er gekozen om het bestand naar een comma gescheiden bestand weg te schrijven.
De klant vond het echter lastig om dit weer te openen in Excel, vandaar dat er een stukje code moest komen om dit te automatiseren.
Een stukje van de code:

Sub Initialize

Dim OfficeApplication As Variant
Dim workbook As Variant
Dim xlsheet As Variant
Dim ar() As Integer
Const xlNone = -4142
Const xlAutomatic = -4105
Const xlUnderlineStyleNone = -4142
Const xlThemeFontNone = -4142
Const xlInsertDeleteCells = 1
Const xlDelimited = 1
Const xlTextQualifierDoubleQuote = 1
Const xlTextFormat = 2

….. declareer dingen …

fList(“Form”) = “Form”
…. etc…

Set ws = New NotesUIWorkspace
filenames = ws.SaveFileDialog(False,”File name”,, “c:\”, “export” & Format(Today,”ddmmyyyy”) & “.txt”)
If (Isempty(filenames)) Then
Exit Sub
End If

Set curDB = Session.CurrentDatabase
Set View = curDB.GetView(“myView”)
View.AutoUpdate = False

fileNum% = Freefile()
Open filenames(0) For Output As fileNum%

Forall i In fList
mString$ = mString$ & “,” & i
End Forall
Print #fileNum%, Strright(mString$,”,”)

Set Doc = View.GetFirstDocument
Do Until Doc Is Nothing
mString$ = “”

Forall i In fList
If Doc.HasItem(Listtag(i)) Then
Set item = Doc.GetFirstItem(Listtag(i))
Select Case item.Type
Case 768
mString$ = mString$ & “,” & Replace(Doc.GetFirstItem(Listtag(i)).Text,”,”,”.”)
Case 1024
mString$ = mString$ & “,” & Replace(Format(item.Values(0),”dd-mm-yyyy”),”-“,”/”)
Case Else
mString$ = mString$ & “,” & Replace(Doc.GetFirstItem(Listtag(i)).Text,”,”,”;”)
End Select
Else
mString$ = mString$ & “,”
End If
End Forall
Print #fileNum%, Strright(mString$,”,”)

Set Doc = View.GetNextDocument(Doc)

Loop

Close fileNum%

con = “TEXT;” & filenames(0)
If Not (setOfficeApplication(“Excel.application”)) Then Exit Sub ‘ start Excel met een functie

rgbColor& = xlNone

x = 0
Forall i In fList
Redim Preserve ar(x) As Integer
ar(x) = xlTextFormat
x = x + 1
End Forall

Set workbook = OfficeApplication.Workbooks.Add ()
Set xlsheet = OfficeApplication.Workbooks(1).Worksheets(1)
With xlsheet.QueryTables.Add(con,xlsheet.Range(“A1″) )
.Name = Strright( filenames(0),”\”)
.FieldNames = True
.RowNumbers = False
.FillAdjacentFormulas = False
.PreserveFormatting = True
.RefreshOnFileOpen = False
.RefreshStyle = xlInsertDeleteCells
.SavePassword = False
.SaveData = True
.AdjustColumnWidth = True
.RefreshPeriod = 0
.TextFilePromptOnRefresh = False
.TextFilePlatform = 1252
.TextFileStartRow = 1
.TextFileParseType = xlDelimited
.TextFileTextQualifier = xlTextQualifierDoubleQuote
.TextFileConsecutiveDelimiter = False
.TextFileTabDelimiter = False
.TextFileSemicolonDelimiter = False
.TextFileCommaDelimiter = True
.TextFileSpaceDelimiter = False
.TextFileColumnDataTypes = ar
.TextFileTrailingMinusNumbers = True
.Refresh
End With

ExcelClose:

On Error Resume Next
OfficeApplication.Cells.EntireColumn.Autofit
OfficeApplication.Rows(“1:1″).Select
OfficeApplication.Selection.AutoFilter
OfficeApplication.Visible = True

Exit Sub
ErrorHandler:
Msgbox Lsi_info(2) & ” ” & Error & ” (” & Err & “) on line ” & Erl
Resume ExcelClose

End Sub

PDFCreator aansturen met LotusScript

Voor een klant moest er een export gemaakt worden van alle Notes documenten in een database.
Dit moest gebeuren door deze als PDF af te drukken.
Als PDF printer heb ik gekozen voor de open source applicatie PDFCreator, dat makkelijk aan te sturen is en erg nette afdrukken maakt.
Omdat er geen tijd was om te onderzoeken of dit op de achtergrond kon gebeuren heb ik gekozen om een eenvoudig script te maken dat via de Notes cliënt door een weergave loopt, elk document opent, de bestandsnaam aan PDFCreator doorgeeft via COM, afdrukt naar de default (PDF) printer, en het document sluit.

Code

Sub Initialize
On Error GoTo ErrorHandler
'....... Declare And Set items.....

sPDFPath$ = "C:\"
If Dir(sPDFPath$,16) = "" Then
MsgBox sPDFPath$ & " kan niet worden geopend",16,"Export"
End If

Set PDFCreator = CreateObject("PDFCreator.clsPDFCreator")
If Not PDFCreator.cStart("",True) Then
MsgBox "PDF printer kan niet worden gestart",16,"Export"
GoTo TheEnd
End If

Set Doc = View.GetFirstDocument
Do Until Doc Is Nothing

sPDFName$ = doc.NoteID & ".pdf"
FileName$ = sPDFPath$ & sPDFName$
If Not Dir(FileName$) = "" Then
Kill FileName$
End If

With PDFCreator
.cOption("UseAutosave") = 1
.cOption("UseAutosaveDirectory") = 1
.cOption("AutosaveDirectory") = sPDFPath$
.cOption("AutosaveFilename") = sPDFName$
.cOption("AutosaveFormat") = 0
.cClearCache
End With

Set uiDoc = ws.EditDocument(False,Doc,True,"",True,True)
Call uiDoc.Print(1)
Call uiDoc.Close(True)
Set uiDoc = Nothing

If Not isFileCreated(FileName$) Then
'Foutafhandeling
End If
Set Doc = View.GetNextDocument(Doc)
Loop

TheEnd:
On Error Resume Next
PDFCreator.cClose
Set PDFCreator = Nothing
Exit Sub

ErrorHandler:
MsgBox GetThreadInfo(1) & " " & Error & " (" & Err & ") op regel " & Erl & "."
Resume TheEnd
End Sub

Function isFileCreated ( filePath As String ) As Boolean
On Error GoTo errorHandler
Dim counter As Integer
Dim fSize As Long

isFileCreated = False
Do While Dir$(filePath$, 0) = ""
If counter > 30 Then
Exit Function
End If
Sleep 1
counter = counter + 1
Loop

fSize = FileLen(filePath$)
Counter = 0
Do While (FileLen(filePath$) = 0 Or FileLen(filePath$) > fSize)
fSize = FileLen(filePath$)
If counter > 30 Then
Exit Function
End If
Sleep 1
counter = counter + 1
Loop

isFileCreated = True

Exit Function
ErrorHandler:
MsgBox GetThreadInfo(1) & " " & Error & " (" & Err & ") op regel " & Erl & "."
Exit Function
Resume Next
End Function

Aantal dagen in een bepaalde periode met LotusScript

Voor een applicatie moest herhaaldelijk uitgerekend worden hoeveel dagen er in een bepaalde periode zitten.
De volgende functie voldeed hier goed:

Input: getDaysBetween(“31-12-2007″,”01-01-2007”, “1,7” ,”25/12/07 – 26/12/07,05-12-2007″,Doc)  

Output: 258

Function getDaysBetween(strStart As String, strEnd As String,daysToExclude As String , datesToExclude As String ,Doc As NotesDocument) As Long
On Error GoTo ErrorHandler
Dim Formula As Variant
Dim dLow As String
Dim dHigh As String

If strStart = “” Or strEnd = “” Then GoTo ErrorHandler

strStart = {@TextToTime(“} & strStart & {“)}
strEnd= {@TextToTime(“} & strEnd & {“)}

If daysToExclude = “” Then
dLow = {;0}
Else
dLow = {;@TextToNumber(@Explode(“} & daysToExclude & {“;”,”))}
End If

If Not datesToExclude = “” Then
dLow = dLow & {;@TextToTime(@Explode(@TextToTime(@Explode(“} & datesToExclude & {“;”,”))))}
End If

dHigh$ = {@BusinessDays(} & strStart$ & {;} & strEnd$ & dLow & {)}
dLow$ = {-@BusinessDays(} & strEnd$ & {;} & strStart$ & dLow & {)}

Formula = Evaluate({@If(} & strStart & {>} & strEnd & {;} & dLow$ & {;} & dHigh$ & {)} ,Doc)

getDaysBetween = CLng(Formula(0))

Exit Function
ErrorHandler:
MsgBox GetThreadInfo(1) & ” ” & Error & ” (” & Err & “) op regel ” & Erl & “.”
getDaysBetween = 0
Exit Function
Resume Next
End Function

Kleurfuncties zoals RGB en Webkleuren

Soms is het nodig om kleuren te vertalen naar andere formaten.
Excel wil bijvoorbeeld graag een RGB kleur als type Long zien, in style sheets e.d. gebruik je de Webkleuren in Hex formaat e.d.
Meestal gebruik ik het kleurenpallet van Notes om een kleur te bepalen, en gebruik de RGB waarden om verder te werken.

Een aantal LotusScript functies die ik dan gebruik zijn de volgende:

Van RGB waarden naar Long (gelijk aan VBA functie, bijv. voor export naar Excel) :

Function RGB(Byval lRed As Long, Byval lGreen As Long, Byval lBlue As Long) As Long
‘input 255,255,255
Dim tmpLong As Long
tmpLong = lRed
tmpLong = tmpLong + (lGreen*256)
tmpLong = tmpLong + (lBlue*Clng(65536))
RGB = tmpLong
‘Output 16777215
End Function

Van HEX naar RGB String (met kleine aanapssing voor bijv. weergavekolommen e.d.) :

Function HEX2RGB(Byval HexColor As String) As String
‘Input #FFFFFF
HexColor = Replace(HexColor, “#”, “”)
HEX2RGB = Val(“&H” & Mid(HexColor, 1, 2))  & “,” & Val(“&H” & Mid(HexColor, 3, 2)) & “,” & Val(“&H” & Mid(HexColor, 5, 2))
‘Output 255,255,255
End Function

Van RGB waarden naar Hex (voor Web, css e.d.):

Function RGB2HEX(Byval lRed As Long, Byval lGreen As Long, Byval lBlue As Long) As String
‘ input 255,255,255
RGB2HEX = Right(Cstr(Hex(lBlue + 256*(lGreen+256*lRed))),6)
‘ Output FFFFFF
End Function

RGB kleur naar Notes kleuren (Richtext item e.d.):

Function RGB2NOTES(Byval lRed As Long, Byval lGreen As Long, Byval lBlue As Long) As Integer
Dim session As New NotesSession
Dim color As NotesColorObject
Set color = session.CreateColorObject
RGB2NOTES = color.SetRGB(lRed,lGreen,lBlue)
End Function

Aantal dagen in een maand

In een applicatie was het nodig om van een willekeurige maand het aantal dagen te kunnen tonen.
Met de formule @BusinessDays( startDates ; endDates ; daysToExclude ; datesToExclude ) is dat goed mogelijk.
Voor startDates kan simpelweg de eerste van de maand worden genomen, voor endDates zou je kunnen werken met @Adjust(@Adjust(startDates;0;1;0;0;0;0);0;0;-1;0;0;0) waarmee je dus eerst een maand opteld bij de startdatum en daarna een dag terug gaat.

Voor LotusScript zou je de formule kunnen evalueren met de Evaluate functie.

Wat is IBM Notes

IBM Notes is de client van de client-server groupware-toepassing gemaakt in 1989 door het bedrijf Lotus Development Corporation in samenwerking met Iris Associates waar in de tijd Ray Ozzie de eigenaar van was.
In 1995 werd Lotus gekocht door IBM en omgedoopt in de Lotus Development afdeling van IBM, tegenwoordig onderdeel van de IBM Software Group.

Tot begin 2013 was IBM Notes bekend onder de naam Lotus Notes.
De producten hadden soms de naam Lotus nog, bijvoorbeeld IBM Lotus Domino, maar in maart 2013 heeft IBM de naam Lotus laten vervallen.

Eind december 2018 is bekend gemaakt dat IBM een aantal producten, waar onder IBM Notes, verkocht heeft aan het Indiase HCL Technologies.

Notes is vooral bekend als e-mail programma, en wordt daarom vaak in één adem genoemd met Microsoft Outlook.
Dit is niet helemaal terecht omdat Notes in combinatie met de krachtige server, Domino genaamd, veel meer kan dan alleen mail verwerken.
Met Domino en Notes halen bedrijven een compleet samenwerkingsplatform in huis met een zeer lage Total Cost of Ownership.

De Notes client software is beschikbaar voor Linux, MacOS en natuurlijk MicroSoft Windows.
De software kan geïsoleerd gebruikt worden, maar meestal in combinatie met de Domino server.
Voor ontwikkelaars van Notes applicaties is er een gratis op Eclipse gebaseerde versie van Notes beschikbaar, de Domino Designer.

Domino is dus de server software en draait op Windows, Linux, IBM iSeries, IBM zSeries en diverse Unix-varianten.

Wat kunnen Domino en Notes?

Mail

Domino is onbetwistbaar een eersteklas mail server. De server ondersteunt IMAP, POP3, SMTP en Notes Mail.
Notes is de mail client software, maar de mail kan ook gelezen worden via een webbrowser of een mail client die IMAP of POP3 ondersteunt.
Als mail server is Domino een goed alternatief voor Microsoft Exchange.

Agenda

De Notes client kunt u gebruiken als agendabeheersysteem, vergelijkbaar met Microsoft Outlook.
De Domino server zorgt ervoor dat u uw agenda kunt uitwisselen met collega’s en vergaderingen kunt plannen, zalen kunt reserveren, taken kunt delegeren.

GroupWare

IBM is de ‘uitvinder’ van GroupWare, software die teams helpt om efficiënter samen te werken. IBM bood organisaties al een ‘Intranet’ voor die term uitgevonden was.
Met de Notes client kunnen bijgeleverde toepassingen snel geïmplementeerd worden (discussieforums, blogs, documentenbeheer, groep samenwerking enzovoort.
Eindgebruikers kunnen eenvoudig eigen toepassingen bouwen (indien toegestaan door de beheerder), maar met het voordeel dat de software via de server door iedereen kan gebruikt worden.

(Web) Applicatie Server

De Domino server biedt een volwaardige programmeeromgeving (LotusScript of Java) om toepassingen te bouwen die draaien in de Notes client of in een webbrowser.
Ook is er een groot aanbod aan software, waarvan ook open source, verkrijgbaar voor Notes. Tevens zijn er diverse koppelingen denkbaar met andere systemen en databases.

Traveler

Als er in combinatie met de Domino server ook nog eens Traveler geïnstalleerd is (gratis voor Domino gebruikers), kunnen berichten, agenda afspraken en taken, ook met Apple iOS, Android,  en Windows Phone gesynchroniseerd worden.