Thursday, 19 April 2018

Replay Webinar Your Guide to Modern Defense Tactics and Risk Mitigation for a Secure IBM Domino Environment


Yesterday I followed the mind blowing webinar Your Guide to Modern Defense t\Tactics and Risk Mitigation for a Secure IBM Domino Environment by Ytria. In case you have missed the webinar below the replay. I am very pleased that we are using these great Ytria tools (EZ Suite complete) in our daily work.

Content
Enterprise IT security has never been more important in light of recent, high-profile cyber attacks—as well as the looming European GDPR (General Data Protection Regulation) that comes into effect on May 25—and Domino Infrastructures are no exception.
In this fast-paced webinar, we'll walk through most important threats against Domino environments. And you'll learn what you can do to strengthen both your internal and external Domino security posture by using the Ytria tools. We'll discuss topics such as:
External Domino security and all that's involved (ACLs, Domino Web server configurations, hashing algorithms).
Mass-managing ACLs and effective access to critical applications—including proper reporting and documentation.
Mitigating internal risks from application design flaws to agent security.
Demonstrating real-life attack scenarios and how to defend yourself against them.
Interesting security configuration worst practices, and myths regarding ACL settings, readers and authors items, and more.



Watch also the previous webinar GDPR Considerations for Your IBM Domino Environment.
For more information see my previous blog post, Replay Webinar GDPR Considerations for Your IBM Domino Environment (Ytria) including the slides and the link to the scripts used in this great webinar.

Friday, 13 April 2018

Your Guide to Modern Defense Tactics and Risk Mitigation for a Secure IBM Domino Environment


The will be another very interesting Webinar by Ytria on April 18, Your guide to modern defense tactics and risk mitigation for a secure IBM Domino environment. Enterprise IT security has never been more important in light of recent, high-profile cyber attacks—as well as the looming European GDPR (General Data Protection Regulation) that comes into effect on May 25—and Domino Infrastructures are no exception. Registration for the webinar is open through this link.

Content
In this fast-paced webinar, we'll walk through most important threats against Domino environments. And you'll learn what you can do to strengthen both your internal and external Domino security posture by using the Ytria tools. We'll discuss topics such as:
External Domino security and all that's involved (ACLs, Domino Web server configurations, hashing algorithms).
Mass-managing ACLs and effective access to critical applications—including proper reporting and documentation.
Mitigating internal risks from application design flaws to agent security.
Demonstrating real-life attack scenarios and how to defend yourself against them.
Interesting security configuration worst practices, and myths regarding ACL settings, readers and authors items, and more.

See also the previous webinar GDPR Considerations for Your IBM Domino Environment.



For more information see my previous blog post, Replay Webinar GDPR Considerations for Your IBM Domino Environment (Ytria) including the slides and the link to the scripts used in this great webinar.
I am very pleased that we are using these great Ytria tools (EZ Suite complete) in our daily work.

Wednesday, 11 April 2018

Webinar Domino App Modernization - Learn How to Modernize your Domino Apps in less than an hour!


On Thursday, April 19 there will be a very interesting webinar, Destination Domino: Domino App Modernization: How to modernize your apps in less than an hour. Registration for the webinar is open through this link.

Content
We know that organizations have invested large sums of money, time and effort in building solutions in Domino to meet their explicit business needs.
For some giving their apps a "facelift" by re-developing those apps in Xpages, or technologies such as JavaScript, is not an option.
As part of our Domino App Dev vision, teamWorkr is a quick way to extend the life of your applications with a modern HTML 5 look and feel that any administrator, savvy business user, or student can be taught to do.
During the webcast, you will learn how companies such as Strabag, Panasonic, and German Statutory Pension Insurance were able to modernize thousands of their Domino applications with very little to no effort for their desktops and mobile devices.
Specifically, hear from the German Pension what their business users are saying and the ROI they are delivering to their organization based on their use of TeamWorkR.
Lastly, we know you have questions. Join us for the Q&A session at the end.

Speakers are Andrew Manby, Director of Offering Management IBM Collaboration Solutions and Thilo Volprich Managing Director & Founder Team Technology GmbH.

Overview
Title: Domino: Domino App Modernization:  Learn how to modernize your Domino apps in less than an hour!
Date: Thursday, April 19, 2018
Time: 10:00 AM Eastern Daylight Time
Duration: 1 hour

For more information about teamWorkr: How it works - Build beautiful mobile Notes apps

Monday, 9 April 2018

The Power of LotusScript Part IV - CurrentView.DeselectAll

Last Friday I came again across the problem that documents remained selected after a View Action was executed. In the view were repeatedly a number of documents selected to be processed. The problem concerned a LotusScript agent using the UnprocessedDocuments method. As before I initially tried, by using the UpdateProcessedDoc method, to provide the documents of a 'processed stamp' so that these documents would not be processed  by the same Agent again. Unfortunately, this had no effect and the documents remained selected when the View Action was executed again for the next documents. The strange thing was that the documents were no longer visible in the view after they were processed but nevertheless remained selected. Eventually I found the solution on my own blog. In order not to forget this in the future I added the solution to my blog series as a reminder for myself.

The Power of LotusScript
Part I - Create New Document From UIdocument Using LotusScript
Part II - LotusScript Agent Send Email to Multiple Receipients (Per Recipient) Including a Doc Link Based on a Search Formula
Part III - Quick Tip - OpenDocumentInUI - OpenDocumentOtherDBInUI
Part IV - CurrentView.DeselectAll

On the IBM Support site I came across the following Technote (FAQ), View actions leave documents selected after execution in which my problem was described

Question
After executing a View action in Notes/Domino, documents that were selected prior to running the View action are still selected, even when one or more documents no longer appear in the view. This can have adverse effects because a user may not realize that documents in other views may be selected when they execute the same action, a second action, or an agent that acts on currently selected documents.

Example of an adverse effect
An action uses LotusScript to act on selected documents using the UnprocessedDocuments property of the NotesDatabase class. If the action modifies documents so that they no longer appear in the view, a user would not realize that the documents were still selected after running the action. If the same View action is executed again (or another action that also uses the UnprocessedDocuments property), then documents in other views could be acted upon without the user realizing it.

The final solution (workaround) consists of the addition of CurrentView.DeselectAll in de LotusScript Agent.

Sub Click(Source As Button)
Dim s As New notessession
Dim db As notesdatabase
Dim col As notesdocumentcollection
Dim w As New notesuiworkspace

Set db=s.CurrentDatabase
Set col=db.UnprocessedDocuments
Set doc=col.GetFirstDocument
While Not (doc Is Nothing)
...
Set doc=col.GetNextDocument(doc)
Wend
Call w.CurrentView.DeselectAll
End Sub

I hope that the above solution will help someone with the same problem that I encountered now for the second time. In my next blog posts more LotusScript Functions and Agents that I have implemented during the past period in various Notes applications.

Friday, 6 April 2018

The Power of LotusScript Part III - Quick Tip - LotusScript Routines OpenDocumentInUI - OpenDocumentOtherDBInUI


In this third part of the new blog series 'The Power of LotusScript' a handy tip to open a document in the current database using LotusScript as well as to open a document in another database using LotusScript. In my Notes applications I use the LotusScript routines below for this which I added in a Script Library. Below a short description and the sample code of the LotusScript routines.
On the Notes Form I initially add a field including an Action Hotspot in which eventually the LotusScript is added in the click event for opening the document in the current database or other database. In the (Options) of the Action Hostspot I add the name of the Script Library where the LotusScript routines have been added (Use 'NameScriptLibrary').
Finally in the current database and the other database in which the relevant document must be opened a (hidden lookup) View must be present sorted by the field name (key) used in the LotusScript code in the Action Hotspot (click event) of the added Field  for opening the document .
Remark: In the example below to open a document in another Notes database I use the value of a field on a Profile Form in the current database, the replicaID of the other Notes database.

The Power of LotusScript
Part I - Create New Document From UIdocument Using LotusScript
Part II - LotusScript Agent Send Email to Multiple Receipients (Per Recipient) Including a Doc Link Based on a Search Formula
Part III - Quick Tip - OpenDocumentInUI - OpenDocumentOtherDBInUI

A. Open Document in UI
As mentioned above we need to add a little bit of LotusScript code in the click event of the Action Hotspot of the added field on the Notes form to open the document in the current database. The Lotusscript code which has to be added in the click event of the Action Hotspot is as follows:

Sub Click(Source As Button)
' init
Dim s As New NotesSession
Dim db As NotesDatabase

Set db = s.CurrentDatabase

' open link in ui
Call openDocumentInUI( "($LookupViewCurrentDatabase)", "FieldName")
End Sub

Add the LotusScript sample code below in a Script Library in the Notes application.

Sub openDocumentInUI(viewName As String, fieldName As String)

' init
Dim ws As New NotesUIWorkspace
Dim uidoc As NotesUIDocument
Dim s As New NotesSession
Dim db As NotesDatabase
Dim view As NotesView
Dim doc As NotesDocument
Dim fieldValue As Variant

' check if document is selected
If Not ws.CurrentDocument Is Nothing Then

' document is selected
Set uidoc = ws.CurrentDocument

' open db and view
Set db = s.CurrentDatabase
Set view = db.GetView(viewName)
fieldValue = uidoc.Document.GetItemValue(fieldName)

' get document
Set doc = view.GetDocumentByKey(fieldValue(0))

' check if document has been found
If Not doc Is Nothing Then

' open document in workspace
Call ws.EditDocument(False, doc)
End If
End If

End Sub

B. Open Document in Other Database in UI
For opening a document in another Notes database we also need to add a little bit of LotusScript code in the click event of the Action Hotspot of the added field on the Notes form. The Lotusscript code which has to be added in the click event of the Action Hotspot is as follows:

Sub Click(Source As Button)
' init
Dim s As New NotesSession
Dim db As NotesDatabase
Dim pdoc As NotesDocument
Set db = s.CurrentDatabase
Set pdoc = db.GetProfileDocument("ProfileForm")
' open link in ui
Call openDocumentOtherDbInUI(pdoc.FieldReplicaIDNotesOtherDatabase(0), "($LookupViewOtherDatabase)", "FieldName")
End Sub

Add the LotusScript sample code below in a Script Library in the Notes application.

Sub openDocumentOtherDbInUI(repID As String, viewName As String, fieldName As String)
' error handler
On Error GoTo errorHandler
' init
Dim ws As New NotesUIWorkspace
Dim uidoc As NotesUIDocument
Dim s As New NotesSession
Dim db As NotesDatabase
Dim otherDb As New NotesDatabase("", "")
Dim view As NotesView
Dim doc As NotesDocument
Dim fieldValue As Variant
' check if document is selected
If Not ws.CurrentDocument Is Nothing Then
' document is selected
Set uidoc = ws.CurrentDocument
' open db's and view
Set db = s.CurrentDatabase
Call otherDb.Openbyreplicaid(db.server, Replace(repID, ":", ""))
Set view = otherDb.GetView(viewName)
fieldValue = uidoc.Document.GetItemValue(fieldName)
' get document
Set doc = view.GetDocumentByKey(fieldValue(0))
' check if document has been found
If Not doc Is Nothing Then
' open document in workspace
Call ws.EditDocument(False, doc)
End If
End If
Exit Sub
errorHandler:
Call AddToStackTrace()
End Sub

I hope that someone can (re)use these routines for their own applications or at least got an idea based on these routines for their own development. In my next blog posts more LotusScript Functions and Agents that I have implemented during the past period in various Notes applications. At this moment I am considering a Demo application with the different Functions, Agents and Routines that will be discussed in this blog series. If there is a need for this, please let me know.

Thursday, 5 April 2018

LotusScript Agent Send Email to Multiple Receipients Per Recipient Including a Doc Link Based on a Search Formula


As I mentioned on Twitter yesterday I created a LotusScript Agent for sending emails to multiple receipients (per receipient) including found documents and a doclink based on a search formula. In response to the Tweet I received the request to publish the Agent. Below a short description and the sample code of the LotusScript Agent.
In the LotusScript Agent first all documents are collected that meet the conditions in the search formula. In the next step in the script the various recipients are put into an array. Next all duplicates are removed from the Array using the ArrayUnique function. To obtain an optimal and correct Array, a FullTrim is also performed on the Array. Given an array, FullTrim eliminates "empty" entries and eliminates duplicate, trailing and leading whitespace within entries; and given a string, eliminates duplicate, trailing and leading whitespace in the string. As the next step the email is compiled. For my own specific requirements I have built in a comparison between two date fields . Based on the outcome of the number of days, a document including a doc link is included in the email or not (based on the documents found in the search formula). In the last step the found receipients in the array are per reciepient placed in the SendTo field including the found documents and a doc link based on the outcome of the comparison of the two date fields. Finally the emails per reciepient are send.

Sub NAME (db As NotesDatabase, doc As NotesDocument)
' error handler
On Error GoTo errorHandler

' init
Dim s As New NotesSession
Dim dc As NotesDocumentCollection
Dim searchFormula As String
Dim md As MailData
Dim i As Integer
Dim x As Integer
Dim maildoc As NotesDocument
Dim addresses As NotesName
Dim rtitem As NotesRichTextItem
Dim days As Variant
Dim ds As Variant
Dim d1 As NotesDateTime
Dim d2 As NotesDateTime
Dim numdays As Double
Dim resultArr As Variant
Dim day1 As NotesDateTime
Dim day2 As NotesDateTime
Dim noofdays As Double
Dim ownerresultArray As Variant
ReDim addressto(0) As String

Set s = New NotesSession
Set db = s.CurrentDatabase
Set maildoc = New NotesDocument(db)

' search support calls impact high
searchFormula = {(Form = "Form" & Field = "Value" & (Field2 = "Value" | Field 3 = "Value"))}
Set dc = db.Search(searchFormula, Nothing, 0)

i=0
Set doc = dc.GetFirstDocument
While Not(doc Is Nothing)
ReDim Preserve addressto(i)
Set d1 = New NotesDateTime(Today())
Set d2 = New NotesDateTime(doc.Lastmodified)
ds = d2.TimeDifference(d1)
numdays= Abs(ds/(86400))
If numdays > 0 And numdays < 8 Then
addressto(i) = (doc.Receipient(0))
i = i + 1
End If
Set doc = dc.GetNextDocument(doc)
Wend

resultArr = ArrayUnique(addressto,0)
ownerresultArray = FullTrim(resultArr)

x = 0
ForAll v In ownerresultArray
'- prepare mail
maildoc.Form = "Memo"
maildoc.CopyTo = "Name"
maildoc.Subject = "Subject text"
Set rtitem = New NotesRichTextItem(maildoc, "Body")
Call rtitem.AppendText("First Text Line Body Email Message")
Call rtitem.AddNewLine(1)
Call rtitem.AddNewLine(1)

' email
Set doc = dc.GetFirstDocument
Set rtitem = New NotesRichTextItem(maildoc, "Body")
While Not(doc Is Nothing)
If doc.Field(0) = resultArr(x) Then
Set day1 = New NotesDateTime(Today())
Set day2 = New NotesDateTime(doc.Lastmodified)
days = day2.TimeDifference(day1)
noofdays= Abs(days/(86400))
If noofdays > 0 And noofdays < 8 Then
'- Append descriptive text, link and new line
Call rtitem.AppendText(doc.Field(0) & "  " & doc.Field(0) & " " & doc.Field(0) &" ")
Call rtitem.AppendDocLink(doc, "Link")
Call rtitem.AddNewLine(1)
End If

'- Set recipient
Set addresses = New NotesName(resultArr(x))
maildoc.SendTo = addresses.abbreviated
End If
Set doc = dc.GetNextDocument(doc)
Wend

'- send mail
Call maildoc.Send( True )
x = x + 1

End ForAll

errorHandler:
Call AddToStackTrace()
End Sub

I hope that those who have requested to publish the Agent on my blog can use the Agent for their own applications or at least have received a handle for their own development. In my next blog posts more LotusScript Functions and Agents that I have implemented during the past period in various Notes applications.

Tuesday, 3 April 2018

Get All IBM Think 2018 Presentations


Think 2018 was not a typical tech conference. It was the first-of-its kind event, with 40,000 of the best minds in the business. IBM Collaboration Solutions brought together the world’s most inspiring innovators, leaders and thinkers—all in one place.
IBM has made all presentations of IBM Think 2018 available.


The presentation can be viewed or downloaded via this link.