Lotus Notes stores the currently used client version for each user in the user’s person record in the Domino Directory.
It also stores the client version previously used. The information is automatically updated by the Notes client.
One of many new feature in Notes / Domino 8 is a Notes client version view in the Domino Directory.
The Domino Directory contains a People – by Client Version view that you can use to quickly see what versions of the Notes client are deployed on users’ computers in your domains. ( from: What’s new in IBM Lotus Domino 8 and 8.0.1? )
The view looks like this
Indeed, it shows the client versions in your domain. But can it really be used to “quickly see what versions of the Notes client are deployed on users’ computers in your domains”? NO. The view displays ALL releases ever used in your domain. Not very useful.
I changed the view to only display the currently used client version as category. The main problem when designing the view was the fact the the client version information is stored in different fields in the person record. In addition to this, it is stored unsorted.
So a simple @Subset command to get the first ( or last ) entry of the ClntBld field does not neccessarily return the Notes Client version that is currently used by a user.
A great function which is available from version 6 on is @Sort. @Sort can be used in view columns and the greatest trick is custom sorts using the [CustomSort] keyword.
The first column ( categorized, descending ) of the new view contains the following formula.
_list:= ClntBld + " - " + @Text(@ToTime(ClntDate)) ; _Sorted:=@Sort(_list; [CustomSort]; @ToTime( @Trim(@RightBack($A; " - ")) ) < @ToTime( @Trim(@RightBack($B; " - ")) ) ); @Subset(@LeftBack(_Sorted; " - ");1)
Parts of this formula are 'stolen' from Rocky Olivers presentation 'AD 304 - Formula Follies and LotusScript Lunacy: Coding Feats that Will Amaze'.
The "All Releases" column contains the same formula, except the last @Subset command. The option for multiple values is set to "New Line".
The result looks like this.
This gives you a better overview about the client versions currently in use than the original view shipped with release 8 of Lotus Notes / Domino.
The database (json.nsf) contains LotusScript classes for parsing and creating JSON text.
These classes are contained in five script libraries: ls.snapps.JSONArray, ls.snapps.JSONObject, ls.snapps.JSONReader, ls.snapps.JSONWriter, and ls.snapps.JSONWrapperConverters.
The JSONArray and JSONObject classes are wrapper classes that are used by the JSONReader class. Additional information can be found in the “Help – About This Database” document.
The JSON LotusScript Classes are also available on OpenNTF.
You can use @ServerAccess to check if a specified user has a specified administrative access level to a server. For a list of keywords to represent the access level you want to check for take a look at the designer help either on your local client or on the web.
But what to do if you want to check the server access level using Lotus Script? The help document does not give you a cross reference to Lotusscript.
In this case, the Evaluate statement is your friend.
For further information about how to use Evaluate I recommend to read the following article on DeveloperWorks: “Simplifying your LotusScript with the Evaluate statement”
The following function uses evaluate and @ServerAccess to make the @function available in LotusScript.
Function atServerAccess ( sAction As String, sUserName As String, sServerName As String ) As Boolean Dim vAccess As Variant vAccess = Evaluate(|@ServerAccess(| + sAction + |; "| + sUserName_ + |"; "| + sServerName + |")|) atServerAccess = Cbool(vAccess(0)) End FunctionHere is a sample of how to call the function
Sub Click(Source As Button) Dim sUser As String Dim sServer As String Dim sAction As String sUser = "Bill Gates/Microsoft" sServer = "MyServer/foo" sAction = "[RemoteAccess]" ' returns TRUE of FALSE Msgbox atServerAccess ( sAction, sUser, sServer ) End Sub
2008 is a leap year again. The Gregorian calendar, the current standard calendar in most of the world, adds a 29th day to February in 97 years out of every 400, a closer approximation than once every four years. This is implemented by making every year divisible by 4 a leap year unless that year is divisible by 100. If it is divisible by 100 it can only be a leap year if that year is also divisible by 400.
So, in the last millennium, 1600 and 2000 were leap years, but 1700, 1800 and 1900 were not. In this millennium, 2100, 2200, 2300, 2500, 2600, 2700, 2900 and 3000 will not be leap years, but 2400 and 2800 will be. You can find numerous examples in almost every programming language of how to determine if a year is a leap year or not.
In LotusScript as well as with @Formula you can “adjust” a given date to another date depending on the parameters you use. So the easiest method to determine a leap year is to set the date to March, 1st of the given year and “substract” one day. If the resulting date is Feb., 29th, the year is a leap year.
Here is my @Formula
_date:=[01.03.1700]; @Prompt([Ok];"Last Day";@Text( @Day( @Adjust( _date; 0;0;-1;0;0;0 ) ) ) )
I expected a 28 in the message box, but it prompted 29 ! Oups …
I tried the same using LotusScript and the NotesDateTime class
Sub Click(Source As Button) Set dt = New NotesDateTime( Datenumber( 1700 ,3, 1) ) Call dt.AdjustDay (-1) Msgbox dt.Localtime End Sub
Guess what it returns. 29.02.1700 ! Another oups …
Seems that IBM / Lotus uses another calender than the Gregorian calendar. No surprise is that 🙂
You might want to try the next piece of code and watch what happens …
Sub Click(Source As Button) Set dt = New NotesDateTime( Datenumber( 1700 ,3, 1) ) Call dt.AdjustDay (-1) Msgbox Day (dt.Localtime) End Sub
An error message occurs, stating that there is a “Type mismatch”. I guess that some subroutines deep in the core code are not sure which calendar to use; Gregorian or IBM calendar. By the way, you get the same error when replacing the 1700 by 1500, 1400, 1300, 1100 and 1000.
If you happen to travel to the year 1700 using a time machine, be careful when planning a meeting at the end of February …
RIM) announced a series of updates for its BlackBerryÂ® platform that include enhanced messaging and collaboration, simpler management, enhanced security and expanded application development support.
These new BlackBerry platform enhancements are scheduled to be phased in to new software releases during the first half of 2008.
My favorites are
- Remote Search for Messages â?? Users will be able to search for and retrieve email messages from their email server even if the message is no longer stored on their BlackBerry smartphone.
- Over-the-Air Device Software Upgrades â?? Organizations will be able to update a user’s BlackBerry device software wirelessly, delivering a fast, cost-effective method for remotely supporting users and managing BlackBerry device software lifecycles
For more information, read this press release
Although the Form property “Merge Replication Conflicts” is enabled, and the Form contains a $ConflictAction field, a replication conflict occurs when modifications are made to different fields in a database.
1. Create a Form that contains two fields.
2. Enable the Form property, “Merge Replication Conflicts”.
3. Create a document based on the new Form.
4. Create a replica of the database.
5. Modify one field in one replica and the other field in the other replica.
6. When replication occurs, no conflict is generated and the later modified document is what is replicated to all other servers. The modifications made in other replicas documents are lost.
Thanks to Gabor for the hint
This white paper describes user-interface design and interaction guidelines for designers and developers who are building IBMÂ® LotusÂ® NotesÂ® applications, IBM Lotus SametimeÂ® V7.5 or later plug-ins, IBM Lotus Symphonyâ?¢ plug-ins, IBM Lotus Expeditor plug-ins, or composite applications (assembling any mixture of plug-ins, Lotus Notes applications, and components built with IBM Lotus Component Designer).
[via Mary Beth Raven]
Richard Hogan of 6wSystems released ddCharts v5.0 – Beta 1(b) which displays the charts also in a Notes client, and as, it doesn’t need to access the server using http, it solves the double login issue. Performance with very large views has also been improved.
If you are looking for a solution to display your data as a pie-, line- or bar-chart ( or as gauge as well ) then download your free evaluation copy of ddCharts now.
There will be another download available on the 6wSystems website in a few days which let you create charts from !!HELP!!.
!!HELP!! is an open source trouble ticket solution for Lotus Notes / Domino. Visit OpenNTF.org to get your copy of !!HELP!!.
OpenProj is a free, open source project management solution. OpenProj is a complete replacement of Microsoft Project and other commercial project solutions.
The OpenProj solution is the most advanced project solution ever provided to the open source community. Projity has open sourced the entire OpenProj solution including the most advanced scheduling, resource and cost algorithms in the industry. Projity provides the source code and OpenProj solution free of charge. OpenProj runs on Linux, Unix, Mac or Windows desktops.
You can find a lot of stuff on the internet like Chris Blatnick’s ” Using Color Columns To Make A Gantt Chart” to display column values either as color or as picture ( you might take a look at “A Splash of Color” as well ).
Today I would like to share my solution on how to build a view to display a date range like it is used in group calendar applications.
I tried to keep the view design as simple as possible to avoid performance impacts. As you can see in the sample database there are no formulas in the columns. All necessary information is stored in a “collector” document.
The form contains one field for each day in a month ( Day_1 … Day_31 ). All fields are of type text with multiple values enabled. To colorize Day_1 ( and all subsequent colums ) simply put 0 : 255 : 255 into Day_1 which results in an aquamarine color.
Surfing the web for more information about view column colors I found this article on breakingpar.com.
Instead of using 6 decimal numbers for foreground and background color, you can use hexadecimal values as well. This would make it easier to handle the data when passing it via LotusScript to the collector document.
We can now build a list of colorcodes.
' Declaration Dim ColorCode List As String Sub Initialize ColorCode("Alice_Blue") = "F0F8FF" ColorCode("Antique_White") = "FAEBD7" ColorCode("Aqua") = "00FFFF" ColorCode("Aquamarine") = "7FFFD4" ColorCode("Azure") = "F0FFFF" ColorCode("Beige") = "F5F5DC" ColorCode("Bisque") = "FFE4C4" ColorCode("Black") = "000000" ColorCode("Blanched_Almond") = "FFEBCD" ColorCode("Blue") = "0000FF" ColorCode("Blue_Violet") = "8A2BE2" ... End Sub
You can call the following function and pass a colorcode from the list as a parameter. You can use any hexadecimal value that is not in the list as well.
Function SetMarker ( doc As NotesDocument, user As String,_ DateFrom As NotesDateTime, DateTo As NotesDateTime, color As String ) As Integer On Error Goto ERR_HANDLE SetMarker = 0 Dim item As NotesItem Dim i As Integer Dim MarkerBegin As Integer Dim MarkerEnd As Integer Dim MarkerColor (1) As String If Iselement(ColorCode( color)) Then MarkerColor(0) = ColorCode( color) MarkerColor(1) = ColorCode( color) Else MarkerColor(0) = color MarkerColor(1) = color End If MarkerBegin = Day ( DateFrom.DateOnly ) MarkerEnd = Int ( Day ( DateTo.DateOnly )) + 1 Set Item = doc.ReplaceItemValue ( DAY_FLD_PREFIX + Cstr( MarkerBegin ), MarkerColor) If MarkerEnd - MarkerBegin > 1 Then For i = (MarkerBegin +1) To (MarkerEnd -1) Set Item = doc.ReplaceItemValue ( DAY_FLD_PREFIX + Cstr ( i ), "" ) Next End If If Not ( MarkerEnd > 31 ) Then Set Item = doc.ReplaceItemValue ( DAY_FLD_PREFIX + Cstr ( MarkerEnd ), "FFFFFFF" ) End If Call doc.Save ( False, False ) EXITPOINT: Exit Function ERR_HANDLE: SetMarker=1 End Function
The function writes the necessary values to the document. It translates the DateFrom and DateTo parameters and writes the according colorcodes. As you can see in the next screenshot, only two fields are needed to build a bar for a date range.
Notes colorizes the column displaying the colorcode from the document and subsequent columns as long as you do not set the column to another color. Any hexadecimal value longer than 6 will reset the column color to default.
I’ve recently downloaded “IBM Lotus Notes Client 7.0.3 for Windows 2000, XP and Vista German (C180SDE)” from passport advantage. After upgrading my 7.0.2 de client to the 7.0.3 the views in the IBM standard templates do no longer display multi value entries as expexted.
The problem is reproducable. With a little help from the Lotus Notes Community, it was found that this issue only occurs when you use Umlauts in your view columns.
It seems to be a regression bug described here.
To solve this issue, you can replace your umlauts with the corresponding ue, ae etc. or simply add
to the client’s notes.ini.
P.S. There already exists an SPR ( # JKEY79CGTE ). I hope it will be fixed in 7.0.4.
Where: Lotusphere2008, Orlando, Florida
When: Monday, Jan 21, 1 – 5 pm
Need more Information? Read this.
Today I had a lot of calls in our helpdesk regarding Out Of Office. Users complained that the had enabled the agent before Christmas and it worked fine but when they tried to disable the agent it does not disable. Instead the Out Of Office profile shows the following message:
Even it is in German, I think I do not have to translate the blue text as you might know that this is the message that is displayed when a user has editor access to his mail file and tries to enable / disable the Out Of Office agent.
With editor access an administration request is created that will enable / disable the agent on behalf of the user.
Well, nothing special so far. Except the fact that this message is displayed to the user all day long and I could not find any administration request on the server.
I tried to reproduce the error on my workstation but failed. I opened the users desktop remotely and there it was. An error message occurred in the statusbar stating that there is a
“Notes error: 182 Instance member CONFIGUREMAILAGENTTEXT does not exist.”
I searched the Knowledge Base for CONFIGUREMAILAGENTTEXT and found this technote
In Lotus Notes®, you attempt to enable the Out Of Office (OOO) agent in your mail file. The agent does not enable and you notice the following error message in the status bar of the Notes client:
“Notes error: 182 Instance member CONFIGUREMAILAGENTTEXT does not exist.”
This issue only occurs for users with Editor access to their mail file and only occurs in Notes, regardless of the mail template design being used. The issue does not occur when using Lotus Domino® Web Access (DWA) mail.
So, what has happened?
On December, 29th, 2007 I did a mass change on the users mail files to ensure that all ACL only have editor access with all options set except ‘Can Create personal agents’.
We use Domino server version 7.0.3 and Notes Client version 7.0.2 with a slightly modified dwa7.ntf mail template. The changes do not touch the Out Of Office profile !
Reading the technote mentioned before, I found the following hint:
NOTE: The DWA7 client that ships with the Notes/Domino 7.0.2 release is incompatible with all previous versions of Notes.
All previous versions of Notes? Does this mean version 7.0.1, too ?
To make a long story short; yes it means that version 7.0.1 is not compatible with dwa7.ntf shipped with client version 7.0.2.
And yes, we have some clients still using this version. Exactly the same users who are not able to disable the Out of Office agent are on this ‘old’ client version.
To solve the puzzle, I will have to update the clients ASAP J
Another option ( according to the technote ) is to grant designer access. I used the following code to do the changes out of the Domino Directory.
Create a new agent in the DD ( Select from menue, All selected documents ) and copy the following code into the agent.
Option Public Option Declare 'Use "OpenLogFunctions" Sub Initialize 'On Error Goto Errorhandler Dim ws As New NotesUIWorkspace Dim session As New NotesSession Dim db As NotesDatabase Dim dc As NotesDocumentCollection Dim doc As NotesDocument Dim total As Long Dim docnum As Long Set db = session.CurrentDatabase Set dc = db.UnprocessedDocuments total = dc.Count docnum = 0 Set doc = dc.GetFirstDocument While Not doc Is Nothing docnum = docnum + 1 Call UpdateStatusBar(docnum, total) Call ProcessPersonDoc(doc) Set doc = dc.GetNextDocument(doc) Wend Call ws.ViewRefresh 'Exit Sub Errorhandler: 'Call LogError 'Exit Sub End Sub Sub UpdateStatusBar(x As Long, total As Long) 'This will display the percentage complete in the status bar as the agent runs Print "Working..." & Cstr(Round((x / total), 2)*100) & "% done" End Sub Sub ProcessPersonDoc(doc As NotesDocument) 'On Error Goto stackError Dim s As New NotesSession Dim profile As NotesDocument Dim owner As String Dim ACL As NotesACL Dim ACLEntry As NotesACLEntry Dim nn As NotesName Dim Maildb As New NotesDatabase( doc.MailServer(0), doc.MailFile(0) ) If Maildb.IsOpen Then Print( "Succesfully opened " & Maildb.Title ) Set profile = Maildb.GetProfileDocument("CalendarProfile") Set nn = s.CreateName ( profile.Owner(0) ) Set ACL = MailDB.ACL Set ACLEntry = ACL.GetEntry ( profile.Owner(0) ) If Not ( ACLEntry Is Nothing ) Then ACLEntry.Remove ACL.Save End If 'Set OWNER access to DESIGNER Set ACLENtry = New NotesACLEntry ( ACL, profile.Owner(0), 5 ) ACLENtry.CanDeleteDocuments = True ACLENtry.CanCreateLSOrJavaAgent = True ACLENtry.IsPerson = True ACL.Save End If EXITPOINT: 'Exit Sub stackError: 'Call LogError() 'Resume EXITPOINT End Sub
Now you can select one or more persons and run the agent against their mail file. The agent will read the calendar profile to determine the mail file owner and then changes the ACL.