2. What Virus scanning packages are available for Notes?
3. What can be done to optimize database performance?
4. How do you make a list of all groups a person is in?
5. Can you run console commands from a server program document?
6. How do you set up S/MIME?
7. Why does a Mail Rule seem to keep running even after it's deleted?
8. Can users recall messages they've sent?
9. Can you forward a copy of a user's mail and keep it in their mailbox?
10. How Do You Set Up Failover for Outbound SMTP Mail?
11. Why is my Notes client having trouble replicating over satellite links?
12. Can you find out how long views take to rebuild?
13. Can you have an Apache server handle Domino URLs on a different box?
14. How do you enable folder references for a database?
15. How do you get a list of inactive databases?
16. Why Can't I Edit My Migrated Resource?
17. What events cause the user ID to be backed up into the recovery database?
18. What can I check if my server is running too slow?
19. Does Domino Support Wildcard SSL Certificates?
20. How Do You Rebuild Busytime?
21. How Do You Fix the "Error connecting to server
22. How do you import a wildcard domain certificate into Domino?
23. Does "Optimize document table map" Cause View Index Corruption?
24. Why do I get the "Maximum allowable documents exceeded for a temporary index" in the Notes Log?
1. How do you track who deleted a document?
2. How Do You Run Console Commands From Lotuscript?
3. How do you find out if a document has been foldered?
4. How do you import HTML so it's displayed properly in the Notes client?
5. How do you export to an OpenOffice Calc spreadsheet?
6. How do you open a File Dialog in LotusScript?
7. How do you edit a rich text field in an open document and redisplay it?
8. How do you find out if there is default view?
How do you run the Compact process on a schedule?
Here is an example program document you can use. Make sure the Notes directory is in your system PATH.
Basics
Program name: $COMPACT.EXE
Command line: -S 5
Server to run on: ServerName/Domain
Comments: Compact databases with more than 5 percent whitespace.
Schedule
Enabled/disabled: ENABLED
Run at times: 10:10 PM each day
Repeat interval of: 0 minutes
Days of week: Wed, Sat
Note that if you are running DAOS in Domino 8.x+, you'll have to add the -B flag for the database to shrink free space properly.
What Virus scanning packages are available for Notes?
McAfee's GroupShield and GroupScan (includes AIX)
Trend Micro's ScanMail for Lotus Notes (includes AIX support)
Group-WG's WatchDog
Cheyenne's InnocuLAN for Notes
Symantec's Norton Antivirus for Notes (includes Unix, AS/400 and S/390; Linux soon)
Command AntiVirus for Lotus Notes
Panda AntiVirus for Lotus Notes
Sophos Mail Monitor
Die Avast! Domino Edition
Kaspersky AntiVirus (includes Linux)
ESET's NOD32 for Lotus Domino
What can be done to optimize database performance?
1. Don't have too many views - each time you change/add a document Notes will need to update every appropriate view.
2. Keep views simple - more columns means more calculation. It gets worse if the columns are sorted and worse still if the columns are categorized.
3. Don't use @Today or @Now in selection formulas - the views will never be up to date and the server will be forever recalculating them. If you need to use today's date in a selection formula then have a background macro running each day to set an environment variable in the server's notes.ini and reference this.
4. If you want to display compound information in a view column from multiple fields then calculate it in a hidden document field. The column should then reference this single field rather than carrying out the calculation.
5. To avoid the @DBColumns/@DBLookups used to generate keyword lists, etc.,
being generated at read time use something like:
@If(@IsDocBeingLoaded & !@IsNewDoc; @Unavailable; @DbColumn(""; ""; "By _Category (Main View)"))
6. Use column numbers not field names for lookups
7. If you are doing lots of lookups to multiple columns in a single view then append all of the data in a single column with a unique delimiter string and do a single lookup. The value returned can then be parsed with @Left/@Right/@Mid or @Explode to give you the separate field values.
8. Put 64 Mb of RAM in the server and push the buffer pool sizes to their limits. This is documented in the Knowledge Base.
An IBM Redbook is also available: Performance Considerations for Domino Applications.
A developerWorks article is also available: Troubleshooting Application Performance
How do you make a list of all groups a person is in?
Create view in the NAB with a selection formula of "Select (Form = "Group").
Add the field 'Members' in first column.
In the propeties box for the first column, select sorting type 'categorized' and select 'show multiple values as separate entries'.
In the second column, put the field 'ListName'.
This is not recursive, so it won't show a person in a nested group.
An alternative way (from chowell@epd.renold.com) is to:
1) Load the Name & Address Book D/Base and select the "Groups" view
2) Enable the Search Bar (View, Search Bar) - the NAB has to be full text indexed
3) Key in the name of the person you are seeking - the Groups of which they are a member are identified in the view
or use the search string:
FIELD Members contains "username or groupname"
Declare Function NSFBuildNamesList Lib "NNOTES" Alias "NSFBuildNamesList" _ ( Byval S As String, Byval F As Long, hNL As Long) As Integer Declare Function OSLockObject Lib "NNOTES" Alias "OSLockObject" _ ( Byval H As Long) As Long Declare Sub OSUnlockObject Lib "NNOTES" Alias "OSUnlockObject" _ ( Byval H As Long) Declare Function OSMemFree Lib "NNOTES" Alias "OSMemFree" _ ( Byval Handle As Long) As Integer Declare Function ReadInteger Lib "MSVCRT" Alias "memcpy" _ ( N As Integer, Byval P As Long, Byval B As Long) As Long Declare Function ReadString Lib "MSVCRT" Alias "memcpy" _ ( Byval S As String, Byval P As Long, Byval B As Long) As Long Sub Initialize Dim session As New NotesSession Dim x As String Dim m As String Dim p As Integer Dim I As Integer Dim n As Integer Dim hNL As Long Dim GroupCount List As Integer Dim a As String Dim abook As NotesDatabase Dim aview As NotesView Dim doc As NotesDocument On Error Goto oops Set abook = session.GetDatabase("", "names.nsf") Set aview = abook.GetView("People") Set doc = aview.GetFirstDocument Do Until doc Is Nothing a = doc.FullName(0) ' Get Names List handle (fails on R4) 'On Error Resume Next NSFBuildNamesList a$, 0, hNL 'On Error Goto 0 If hNL = 0 Then Print "Failed" Exit Sub End If ' Get memory pointer Dim pNL As Long pNL = OSLockObject(hNL) ' Get number of entries, skip to first entry ReadInteger n%, pNL, 2 pNL = pNL + 14 ' Read the entries For i% = 1 To n% x$ = String$(256, " ") ReadString x$, pNL, 256 p% = Instr(x$, Chr$(0)) pNL = pNL + p% If Not p% = 0 Then x$ = Left$(x$, p% - 1) ' each group is listed in x$ in this loop Next ' Discard the Names List OSUnlockObject hNL OSMemFree hNL 'Exit Do Set doc=aview.GetNextDocument(doc) Loop
Exit Sub
Can you run console commands from a server program document?
From kanellopoulos@byte.gr who found it in the notes.net discussion:
This Win32 program is used in program docs to execute any console command on schedule such as:
Tell http restart Show tasks
Example:
Program name: nconsole.exe Command line: SERVER/ACME "tell smtpmta compact all" Server to run on: SERVER/ACME
You also have to have the server name in the Administrator section of the server document in the name and address book.
How do you set up S/MIME?
There is a good article on Developerworks that describes the setup process and tradeoffs: "Lessons in secure messaging using Domino 6".
Why does a Mail Rule seem to keep running even after it's deleted?
In a user's mail file, they should be disabling a mail rule before deleting it. That's because the actual ruleset lives in the CalendarProfile document and you have to update this ruleset by using the enable/disable buttons in the mail rule view. To get rid of an old rule that is still running, add a new rule, then use the view buttons to enable/disable it. Then delete the rule and all rules should be disabled.
Can users recall messages they've sent?
Gregg Eldred provided the nice agent below to do this. Caveats are that the user must ask an administrator to run the agent and the administrators have to have access to everyone's mail file. A copy of the sent message must be selected for the agent to run on:
Sub Initialize Code: Dim db As NotesDatabase, mailDb As NotesDatabase
Can you forward a copy of a user's mail and keep it in their mailbox?
You can use R6 Mail Rules in their mailbox, but the problem is that all the forwarded mail looks like it comes from you.
As an alternative, you can use this Before New Mail Arrives agent. However, it cannot include the Cc list directly; it has to be part of the mail message so a duplicate copy of the forwarded mail doesn't get sent to the original Cc list. This nice thing about this agent is that it retains the original "From" address so the user can reply to the sender directly.
Sub Initialize
How Do You Set Up Failover for Outbound SMTP Mail?
In your server configuration document, there is a field for setting the relay host for messages leaving the Internet domain. If you put a comma separated value in there (can be IP addresses or hostnames), the SMTP router will try all the outbound relay hosts you specify when trying to send outbound SMTP mail.
Why is my Notes client having trouble replicating over satellite links?
There is a lot more latency on satellite links. Craig Wiseman suggested these parameters for your TCP/IP adapter that connects to your satellite modem:
TCP RECEIVE WINDOW : 224360 WINDOWS SCALING : YES TIME STAMPING : NO SELECTIVE AKS : YES PATH MTU DISCOVERY : YES BLACK HOLE DETECTION : NO MAX DUPLICATE AKS : 3 TTL : 64 MTU : 900
You can use DrTCP to make these changes.
Can you find out how long views take to rebuild?
Here is some general logging info you can enable in your notes.ini. The first entry will log the start of each view rebuild by the updall task so you can calculate the time it took a view by comparing two messages:
; Show some log entries when the updall/update runs
LOG_UPDATE=2
; show the number of transactions
SHOW_PERFORMANCE=1
; Show logfile entries when semaphore waits time out
DEBUG_SHOW_TIMEOUT=1
; Show the thread ids
debug_threadid=1
; And show a semaphore wait log entry after ten seconds waiting.
debug_capture_timeout=10
debug_sem_timeout=10000
Can you have an Apache server handle Domino URLs on a different box?
You can use something called "reverse proxy" to map the Domino URLs to an internal machine:
http://www.apacheweek.com/features/reverseproxies
How do you enable folder references for a database?
You have to do this programmatically and via the convert task.
Programmatically, you have to enable the folder references property on the database. E.g.
Dim session as NotesSession Dim db As NotesDatabase Set db = session.CurrentDatabase db.FolderReferences = True
This enables Notes to track which folders documents are put into after you enable this flag. However, all the foldered documents before setting this flag will be missing their folder references. To determine which folders documents are in, you have to run this on the server console:
load convert -m <database>(R6 or R7)
load convert -e <database>(R5)
How do you get a list of inactive databases?
From Thomas Kennedy:
view1 tab number newline
view2 tab number newline
and so on. If you extract this information to another database, and there extract the text of the rich text field, and split it into an array based on newline, and then split each element of this array based on tab, you will have the name of each view and the size of the index.
Because Notes discards the view index after 45 days of disuses, this gives you a very simple and more or less accurate way of identifying unused apps. If, for example, 95% of the views have a size of zero you can flag that app for a closer look.
The rich text data is not perfectly consistent, so the call to split() should be in an error trap.
Sample code: ' ********************************************************** ' Split the item's data into an array based on Newline. ' This gives us an array whose values are like: ' ' {viewname tab number; viewname tab number} ' ********************************************************** v1 = Split(activity_richtext.GetUnFormattedText, Chr$(13)&Chr$(10), -1,5) total_views = 0 total_populated_views = 0 ' ********************************************************** ' Split each element of that array based on tab. This ' gives us an array whose values are like: ' {viewname;number} ' ********************************************************** For c = 0 To Ubound(v1) v2 = Split(v1(c), Chr$(9), -1,5) ' ********************************************************** ' Some documents will contain "No views" or something ' similar in their rich text item. The resulting ubound will ' be 0, not 1. We step over these. The marker will be ' ACTIVITY_MARKER_UNKNOWN. ' ********************************************************** If Ubound(v2) < 1 Then Goto NextView ' ********************************************************** ' We keep track of two numbers: the number of views, ' and the number of non-zero view sizes. These tell us ' what percentage of the views have an index, and thus ' indirectly whether the db is in use or not. ' ********************************************************** total_views = total_views + 1 ' ********************************************************** ' Inconsistencies in the way the data is stored may ' result in a value that we cannot convert to a number, ' so this cast may raise an exception. ' ********************************************************** On Error Resume Next tmp_double = Cdbl( v2(1) ) On Error Goto 0 ' ********************************************************** ' If it does we just skip to the next view. ' ********************************************************** If Err <> 0 Then Err = 0 Goto NextView End If If tmp_double > 0 Then total_populated_views = total_populated_views+1 End If nextView: Next c
Why Can't I Edit My Migrated Resource?
From Steven_Murray@hesc.com:
R7's resource names can only contain alphanumeric characters, so resources with fancy names such as "Conference B (Room #23)" cannot be edited. To fix this, remove the special characters from the resource document's CommonNameResourceName field using an agent.
What events cause the user ID to be backed up into the recovery database?
These events will cause the Notes client, after a 5min idle period, to send an encrypted copy of the user's ID file into the user ID recovery database:
Accepting new Notes keys into the ID file
Accepting a name change into the ID file
Initiating a change request
Updating the recovery information
Inserting a document encryption key (NEK) into the ID file
What can I check if my server is running too slow?
These are a few resources you can check:
- The Domino Performance Cookbook
- The Domino Performance Redbook
- Domino Performance Best Practices
- Troubleshooting TCP/IP Issues
- if you are running a cluster, do "show stat replica.cluster*" and check your cluster queue (if it's too high, your network bandwidth is too low)
Does Domino Support Wildcard SSL Certificates?
Thanks to Joe Walters for putting up this detailed description of how to set this up:
Configuring a wildcard certificate with Domino is very similar to configuring a single-host SSL certificate.� So, most of the process below you'll already be familiar with if you've ever set up SSL on Domino.� Here's how I would configure a new wildcard certificate in my test environment.� I'll include some caveats and comments at the end, so save your questions. :-)
My scenario:
I have a Domino 7.0.x server, Kakadu/WashU, running on Windows Server 2003.� It's Program directory is C:\Lotus\Domino and it's Data directory is D:\Lotus\Domino\Data.� I want to configure an SSL certificate for Kakadu, but I know later, I'll be asked to configure SSL certificates on other Domino servers, so I opt to implement a wildcard certificate. �
To save some time and hassle later, I picked an unused local drive letter (V:) and mapped a drive to Kakadu's D: drive (from a windows cmd prompt, I type net use V: \\kakadu\d$). �
Creating a Key Ring File:
The first thing I need to do to configure any SSL certificate in Domino is create a key ring file.�
I open the Domino Server Certificate Administration (CERTSRV.NSF) database on Kakadu (at this point, you may have to escape out of the About Database document), then click on Create Key Ring.
�
The key ring file is used to store the certificates and it ultimately needs to reside in the Domino server's data directory.� (This is where my mapped drive helps me out a little.) �
In the Key Ring File Name: field, I enter the path to where I want my key ring file to reside (in my Domino server's data directory, via my locally mapped V: drive).
Next, I enter a password and confirm it.� (Document and secure this password somewhere.� Do this now.� If you're like me, you won't remember it five minutes from now.)
I then select the Key Size I want to use for my key ring.� There's no reason for me not to choose 1024 for a more secure encryption strength.
Everything's been normal SSL configuration to this point.� But now, in the Common Name field, I need to use the wildcard notation instead of the fully qualified domain name (FQDN) of my server, as I normally would.� My Domino server's FQDN is actually kakadu.wustl.edu, so the proper wildcard notation should be *.wustl.edu.
The rest of the fields (organization, Organizational Unit, City or Locality,� State or Province, and Country) should be filled in just as you would if you were configuring a single server SSL certificate.
When I've finished filling out this form, I click the Create Key Ring button at the bottom.
�
A dialog box pops up indicating I've successfully created my key ring file.� I click OK and at this point, if I were to go out to Kakadu's Domino data directory, I would see my .kyr file (wildcard1024.kyr).� I should also see a wildcard1024.sth file in the data directory.� The .kyr file is password-protected in a binary format (not encrypted).� The .sth file is the Stash file, and it stores the password to the .kyr file so the server can use it unattended.
�
Generating a CSR:
Now that I have a key ring file to store my certificates, I need to generate a CSR (Certificate Signing Request).� Still in certsrv.nsf, I now click on Create Certificate Request.
�
A Create Server Certificate Request form opens, and I confirm that the Key Ring File Name path includes the full path to the key ring file I created previously.� All of this auto-filled for me, so I just click the Create Certificate Request button.�
�
Now a Certificate Request Created dialog box will pop up.� Here you'll need to copy to the clipboard everything you see in the bottom window including the -----BEGIN NEW CERTIFICATE REQUEST----- text at the beginning and the -----END NEW CERTIFICATE REQUEST----- text at the end.� (I suggest you paste this into a text file for temporary safe keeping as well.� You can safely delete it once you've finished the whole process.)� Click OK once you've copied the certificate to the clipboard.
�
Acquire your Wildcard SSL Certificate from a Third-Party Certificate Authority:
Now that you have a CSR, you can go to a third-party SSL provider's website to get a wildcard certificate.� Each provider's process will be a little bit different, but they will all want four things from you.
1) You need to be the owner of the domain name for which you want to get the wildcard certificate, so be prepared to provide some type of proof to the third-party CA that you're authorized to request the certificate.
2) You'll also need to provide some type of proof that your organization is a legitimate one.
3) You'll need to have the CSR you generated a moment ago.
4) Lastly, you'll need to pay for the certificate.� If you have a credit card, preferably a company card, this is definitely the easiest way to go.� I've had to pay for certificates with a purchase order in the past and the delay was irritating.� In fact, some CAs may not accept anything but a credit card anyway.
In this example, I'm purchasing my wildcard certificate from Digicert, but the process is very similar between Verisign, Thawte, Digicert, and I imagine most other third-party CAs.
Installing the Wildcard Certificate into your Key Ring file:
Once you've finished purchasing your wildcard certificate, your CA will let you know how to retrieve your certificate.� (Typically, you'll create a login account to their website where you can retrieve them.) �
Depending on who you purchase your certificate from, the key ring file may or may not already have Trusted Root and Intermediate certificates installed.� So the best bet is to install the Trusted Root and Intermediate certificates, assuming they're not already there.� You'll want to install the Trusted Root certificate first, then any Intermediate certificates, and lastly, install your wildcard certificate into the key ring file.
I open the Domino Server Certificate Administration (CERTSRV.NSF) database on Kakadu, then click on Install Trusted Root Certificate into Key Ring.
�
In the Install Trusted Root Certificate form that opens, I make sure the path to my key ring file is correct (this should autofill for me).� A label is required, so I enter a label appropriate to the cert I'm installing.� I also select Clipboard for the certificate source, and paste the certificate into the form.� Lastly, I clicked the Merge Trusted Root Certificate into Key Ring button.
�
A confirmation window appears, which reads the certificate data and presents it in a human readable format.� Everything looks correct, so I click OK.
�
In this case, the Trusted Root certificate I just attempted to install was already in the key ring.� No problem.� I just move on to the install any other trusted root/intermediate certificates I may need.
�
Again, I select Install Trusted Root Certificate into Key Ring.
�
And again, I verify the path to my key ring file, enter an appropriate label, paste the certificate into the form, and click the Merge Trusted Root Certificate into Key Ring button
�
Again, a confirmation pop-up appears and everything looks fine.� I click OK.
�
This time, I see that I did not have this certificate in the key ring yet, so it's good that I did this.� Having this intermediate certificate installed completes the certificate chain from the trusted root CA, through the intermediate certificate, and then to my wildcard SSL certificate.
�
Now I'm finally� able to install my wildcard certificate into my key ring file.� This time, I choose Install Certificate into Key Ring.
�
Again, I verify the path to my key ring file.� This time, however, I don't need to enter a label.� I still select the Clipboard option, paste the certificate into the form, then click the Merge Certificate into Key Ring button.
�
A confirmation dialog appears, and it's important to verify everything's correct.� It all looks good, so I click OK.
�
WOOHOO!! I've merged a wildcard certificate into my key ring file! Click OK.
�
Now you can configure domino for SSL as you would before.� Configuring SSL via web configuration or internet site documents is no different with wildcard certs than single-server certs.� To use the wildcard certificate on a different server, I only need to copy my key ring file (wildcard1024.kyr) and a stash file (wildcard1024.sth) located in Kakadu's data directory to the data directory of another Domino server.
Additional Notes:
Because this is a wildcard certificate, you need to take precautions to keep the certificate secure.� Of course, you should be protecting your file system from inappropriate access anyway.
I chose to use the clipboard method to merge certificates into my key ring file.� The other option is to specify a file (e.g. TrustedRoot.crt, DigiCertCA.crt and your_domain_name.crt).� Both options work equally well.� This is a personal preference.
I chose to map a drive to my Domino server's data directory.� The reason I did this was to avoid having to later copy my key ring file (wildcard1024.kyr) and stash file (wildcard1024.sth) up to my Domino server.� Again, a personal preference thing.� If you don't have a windows server, you could possibly mount a samba share, or just do everything with your local Notes client and copy everything up when you're done.� Personal preference again.
Now that I have a wildcard certificate, I'll store both the .kyr and .sth files in a highly secured database in Notes for safe keeping.� I also document when the certificate will expire in a central change managment database, then add a reminder on my personal calendar to send me a reminder a month or two prior to the expiration date, so I don't have any expiration surprises.
Lastly, the gobbledy gook text above for the certificates is not legit.� It's fictitious, but I think the screen shots are a fair representation of the process you'll encounter if you choose to configure a wildcard certificate in Domino.
An extra word of caution:
Depending on your browser, Wildcard certificates may work at only one domain level only.� For instance with my *.wustl.edu certificate, I can secure any website whose FQDN is in the format of domainlevel3.wustl.edu (e.g. kakadu.wustl.edu, dipperu.wustl.edu, etc.).� Regardless of the browser, these domain names will all have a valid certificate chain.� Things get trickier if I try to secure a website whose FQDN is in the format of domainlevel4.domainlevel3.wustl.edu (for instance, www.kakadu.wustl.edu).� www. is now a fourth level domain name, and my wildcard is specifically registered as *.wustl.edu, not *.*.wustl.edu.� Mind you, the last I checked, Firefox, Opera, and Mozilla had no problems applying a wildcard certificate to multiple levels in this way, but Microsoft IE and Safari throw warnings to the end user when they encounter this.
The cleanest way to do this is to shut down the server and delete busytime.nsf and let the server rebuild this if your busytime database is corrupted. If you have a clustered setup, you have to shut down the servers in your cluster and delete the clubusy.nsf DB.
An alternative way that may not require server reboots:
- shut down the calconn, sched, and rnrmgr tasks
- delete all documents in the busytime.nsf or clubusy.nsf DBs or just delete the DB after a "dbcache flush"
- restart the calconn, sched, and rnrmgr tasks
- instead of restarting the tasks, you may be able to do "tell sched validate" and "tell rnrmgr validate" from the console
How Do You Fix the "Error connecting to server
The Domino server when it has multiple network cards, sometimes doesn't know how to contact itself and you get messages of the form "Error connecting to server <itself>: Remote system no longer responding". Even though DNS has the IP address for the server, Domino sometimes needs this IP address put in the local hosts file directly. On Windows, this is in the \windows\system32\drivers\etc directory.
How do you import a wildcard domain certificate into Domino?
From Ninke Westra:
Create a server keyring (.kyr) file, for example using the certsrv.nsf database that's present on just about every server, doesn't matter if it's on the server that you want to use the keyring with or not since the keyring file is created locally to your client, not on the server.
Select Create Key Rings & Certificates in the navigator and click 1. Create Key Ring
Under Keyring informationyou enter the filename (keyring.kyr) and password that you want to set for this keyring file.
For Keysizeyou can select a keysize that will be used when creating certificate requests using this keyring.
Disinguished Name has some mandatory fields
�� Common Name���your server's fully qualified hostname (when generating a certificate request or *.domainname for a wildcard request
� Organization��������� Organisation name
� Organizational Unit��� (optionall)
��� City������������������������ (optional)
��� State��� ����������������� Province/State
��� Country���������������� Two letter country code.
The next step is 3. Install Trusted Root Certificate into Key Ring
Enter Certificate Information an identifying label for the certificate signer's certificate
You can choose to either import the root certificate from a .crt/.cer file or paste from clipboard.
Click Merge Trusted Root Certificate into Key Ring
Enter the password you picked at step 1. (create key ring)
�
To import existing wild card certificates (pcks12 format, .pfx/.p12 file) into a Domino keyring file you need IBM's
GSK5 IKeyMan.
(I read somewhere that this tool might not work in Windows 2003/Vista+ but I can not confirm that).
Extract the gsk5-ikeyman.zip file into a directory that has no spaces in the name (I used C:\gsk5)
Start the command line shell, change directory to the directory where you extracted gsk5 to and execute the following command: gskregmod.bat Add
Next run IKeyman by executing runikeyman.bat.
Open the keyfile.kyr file that we created earlier and enter the keyring password.
Select Personal certificates and click Import
Select the wildcard certificate file (.pfx/.p12) and enter the certificate's password.
Shutdown IKeyman and copy the keyfile.kyr and matching keyfile.sth� to your Domino server's data directory.
Configure your Domino server to use this keyring file and restart the http task (or restart domino).
Does "Optimize document table map" Cause View Index Corruption?
This is a known issue that happens with workflow applications that change forms for the documents as the documents go through the workflow. As long as your database does not do this, you can use this to get faster view performance. This is documented well on Nathan Freeman's Blog.
Lotus knows about this and won't fix it until they hear enough complaints from customers, so if you have a maintenance plan and want to use up one of your support tickets, feel free to do so :-)
Why do I get the "Maximum allowable documents exceeded for a temporary index" in the Notes Log?
Usually, an agent has a document filter criteria that is causing a temporary full text index to be created.
Simplify the filtering criteria or full text index the database to take the load off your server.
You can work around the limit of 5000 documents by adding (as of Notes 6) this:
TEMP_INDEX_MAX_DOC=<
number>
IBM redbooks are documents written by technical specialists within IBM. The quality of the technical information is generally very good. This is a list of the available publications related to Notes:
Developing Applications with Lotus Notes Release 4, IBM form number SG24-4618-00
LotusScript for Visual Basic Programmers, IBM form number SG24-4856-00, Lotus part number 12498
Secrets to Running Lotus Notes: The Decisions No One Tells You How to Make, IBM form number SG24-4875-00, Lotus part number AA0424
Lotus Notes Release 4 in a Multiplatform Environment, IBM form number SG24-4649-00
IBM PC Server and Lotus Notes Integration Guide, IBM form number SG24-4857-00
Lotus Notes on AIX Systems Installation: Customization and Administration, IBM form number SG24-4694-00
Using ADSM to Back Up Lotus Notes, IBM form number SG24-4534-00
You can order these redbooks from the Redbook Web Site.
You can order any of these books from Amazon Books, who will give you a 20% discount on them. All you have to do is click on the ISBN number of the book in the tables below.
|
|
|
|
|
Enterprise.Com | Jeff Papows | Perseus Books | 0738200646 | Ken Yee |
Javascript : The Definitive Guide | David Flanagan | O'Reilly & Associates | 1565923928 | |
Java Servlet Programming | Jason Hunter, William Crawford, Paula Ferguson | O'Reilly & Associates | 156592391X | |
Dynamic HTML : The Definitive Reference | Danny Goodman | O'Reilly & Associates | 1565924940 |
The View, (800)810-1800 or (617)969-6666, $295/yr. Click here to send a mail message to The View.
Lotus Notes & Domino Advisor, (800)336-6060 or (619)483-9851, $69/yr. Click here to send a mail message to the Lotus Notes Advisor.
Lotus eBusiness Magazine (an on-line magazine)
Lotus Solutions Now! is a free publication on Lotus products published by Lotus.
Virtual Workgroups, (800)-227-1234, $40/yr. Not strictly a Notes magazine, but a good number of their articles describe how companies are using Notes.
netConnect, 011-44-171-221-7178, $225/yr for the printed version. This is a UK Groupware magazine with some articles on Lotus Notes. You can also email them for additional info.
Group Computing, (415)348-0579, free to qualified individuals. This is a magazine that covers Notes and other groupware tools (including web based tools). Contact them for more information.
Rupert's Lotus Business Week (Formerly Lotus eNews), free. A weekly email newsletter covering the business issues behind Lotus mail, groupware and web products. To subscribe, send email to rupert.b@virgin.net.
Domino Power Magazine is a free monthly journal with weekly tips and daily Notes and Domino-related news.
Can you display a text field as a TEXTAREA?
From Howard Katz (HKatz@FocusedManagement.com):
Simply code your text field as "Allow multi-values", then on the Options tab, check "New line" for "Separate values when user enters" and "Display separate values with". This plain text field will then be displayed as a TEXTAREA. You can set the HTML attributes of the field to adjust the size of the TEXTAREA.
From Justin Freeman:
Note that you'll need separate web and Notes forms to do this: Add some passthru HTML text where you want the textarea to show up:
Then create a hidden computed field at the bottom of the page. Set the value to "comments" (the same name as the field).
How do you add a Javascript button which validates the form and then submits it?
Your checkForm function should have the code to validate as well as submit. Your button should be of the type "button" and not submit. If the validation fails make an early exit from the function.
Add the following code in the $$HTMLHead field:
"<SCRIPT LANGUAGE=\"JavaScript\"> function checkForm() { if (document.forms[0].Name.value == \"\") { alert(\"You must enter your name\"); return false; } document.forms[0].submit(); return true; } </script>"
Add this code for a submit button as passthrough HTML or with the HTML style:
<INPUT TYPE="Button" VALUE="Submit" onClick="checkForm(0)">
Now that you've added a special button, you'll have to remove the default one that Domino generates via the FAQ on how to remove the submit button.
How do you get the relative path to the database for web URLs?
You can use:
nsfpath := @ReplaceSubstring(@Subset(@DbName; -1); "\\"; "/");
In R6+, you can just use @WebDbName.
Can You Do AJAX Applications with Domino?
Richard Schwartz has created a good collections of examples of this (including a link to a nice Name Picker example):
http://www.rhs.com/poweroftheschwartz/htdocs/LotusDominoAjax.htm
How do you get colored tabs in a tabbed table?
From Alan Lepofsky:
Each tab's color is the same as the background color for each row. However, you may not want the contents of each tab to have the background colour, so what I do is insert another 1*1 table with a white background, and fit the margins to 1% and 99%.
From Ben Langhinrichs:
Set the tabs to different colors (make sure there is only one column), and set all the cell borders to 0. Next, inside each tab, create a nested table which has a background color of white. A nice little touch I like to do is to have the cell borders on for the inside table, but change the cell border color to that of the tab.
Can You Run PHP Pages on a Domino Server?
You can install Apache with PHP and get them to run site by side on the same server. Mike Golding has written a nice article on how to do this.
How do you make a database open a form by default from the web?
Thanks to Carl Tyler:
Create a Navigator, call it WebNavigation it can be totally empty, as it doesn't really get used.
Create a form with the contents you want called $$NavigatorTemplateDefault
Now set the web launch options for the database to open the navigator WebNavigation and it will use the form $$NavigatorTemplateDefault
The following companies make Lotus Notes CBT courseware:
Self Test Software (770) 971-8940
Lotus (800)782-7876
CBT Systems
ReCor
Professor 3T (end-user training)
Headlight.com resells a few Notes courses
TLCC's R5 Developer courses including web development, Java, LotusScript and JavaScript (free demo course available)
TLCC's User courses for Release 5 and 6 (free demo course available)
Get re-certified as a Release 6 CLP with TLCC's Update course
TLCC's Notes Domino 6 courses
TLCC's Domino Admin 6 courses cover setup of Domino and find tuning the Domino infrastructure
Learn WebSphere and Java development with TLCC's WebSphere curriculum
TLCC has Notes/Domino 7 courses for developers and administrators; they cover using DB2 with Domino
Virtual Classes via the Internet
Virtual Training Center
Distance learning courses for Notes users, developers, and administrators. Courses available for R4, R5, R6, R7, Notes and Domino development, LotusScript, Websphere, Java, and JavaScript. Try a free demonstration course at TLCC's web site.
Ives Development (the makers of TeamStudio) offer a web-based best practices training course for Lotus Notes and Domino developers called "TeamStudio LifeCycle".
Lotus Education Helpline
The Lotus Education Helpline has an Exam Guide for Lotus Notes; the number is (800)346-6409. Lotus Fax Support also has sample exam questions at 617-253-9150.
John Buckman's Lotus Notes Phone Dialer
Alert! New Document Notifier
PutNote and GetNote
Notes Related Programs or Information
The LNOTES-L Archive
OS/2 Netware Requester Software
Lotus Internet Cookbook (.NSF format)
Notes Database Templates from Lotus
Lotus Notes Mobile Survival Kit
DGA Ltd. has a set of tools for migration and co-existence of SNADS-compatible mail systems, OfficeVision and DisplayWrite.
GlobalWare has a product called Pylon Conduit which does C&S and email sync w/ the PalmPilot. They also have a product called Pylon Pro that can even convert some Notes applications to run on the PalmPilot.
Puma Technology has IntelliSync.
Lotus has EasySync but the other products have more features.
Cadenza from CommonTime can synchronize mail, calendar, and contact info between Notes and a PalmOS device.
There are quite a few FAX gateways for Notes/Domino. All of these allow a user to e-mail a document to a FAX number.
Lotus' Domino Fax Server
Extracomm's ExtraFax
GFI Communication's Faxmaker for SMTP
Biscom's Fax for Notes
OMTOOL's Fax Sr.
Softlinx' Replix dominoFAX
V-Systems' VSI-FAX
Captaris' RightFAX
Redrock's FaxNow!
POP3Fido from KEY Enterprise Solutions is an integrated server task that delivers mail to Notes users from POP3 mailboxes. A 45 day trial version is available.
Pytheas' MailGate is a standalone POP3/SMTP gateway that works w/ Notes and Exchange.
cc:Mail (including DB8 support)
Creative Business Solutions has a cc:Mail migration tool that is more updated than Lotus'.
Lotus' Migration Tools now support DB8.
Outlook
Binary Tree has a tool which migrates mail, folder structure, appointments and meetings (including invitees and attendees), tasks, and notes.
Exchange
OpenOne has a tool called Direct-TO-1 that lets email be migrated between Notes, Exchange, and a few other email systems.
Linkage's Exchange-Notes Connector synchronizes directories, databases, and lets users send mail to each other while preserving attachments and rich-text formatting. Microsoft has bought Linkage; they bundle it for free with Exchange 5.5 and above.
MESA's JumpStart currently has does MS Exchange public folder to Notes database synchronization. They plan to have application and mail synchronization in the future.
Casahl's RA.GroupwareLink synchronizes Notes databases and MS Exchange folders.
Binary Tree's MailPort for MS Exchange migrates, mail, C&S schedules, and contacts to Notes.
Windows CE/Pocket PC/Windows Mobile
Cadenza from CommonTime can synchronize mail, calendar, and contact info between Notes and a WinCE/PPC/WM device; their mForms product also lets you do custom form application on this platform.
A freeware utility is provided by MorphaSys to let you sync your Notes address book and contact information and your most recent email with your Rex Organizer.
NOTE: this mailing list is dead as of 4/15/2007
The LNotes-L mailing list is maintained by
Joe Ashkar. It is a Listserver based email list for Notes programmers and administrators.
Contacting the Administrator
The administrator is Joe Ashkar (
lnotes-l@ashcom.net). Email him w/ any administration problems.
Subscribing
Send a message to
listproc@ozzie.notesnic.net. In the body of the letter, enter SUBSCRIBE LNOTES-L <your-name>. You will then be automatically added to the list.
To subscribe an address other than the one you are sending from, send a message to
lnotes-l-mgr@ozzie.notesnic.net. In the body of the letter, enter SUBSCRIBE LNOTES-L ADDRESS. Replace ADDRESS with the address to send messages to. Approval generally occurrs within one day.
Unsubscribing
Send a message to
listproc@ozzie.notesnic.net. In the body of the letter, enter SIGNOFF LNOTES-L. You will then be deleted from the list.
To unsubscribe an address other than the one you are sending from, send a message to
lnotes-l-mgr@ozzie.notesnic.net. In the body of the letter, enter UNSUBSCRIBE LNOTES-L ADDRESS. Replace ADDRESS with the address you wish to unsubscribe. Approval generally occurrs within one day.
Sending Mail to the Mailing List
Address your message to
lnotes-l@ozzie.notesnic.net. Write your message and send it. It will be automatically distributed to the members of the list.
Please make sure that you don't use Return Receipt Requested or Carbon Copy back to the list!
Temporarily Shutting Off Mail Delivery
If you don't want to receive messages for an extended period of time (e.g., you go on vacation), but want to reserve your place in the queue, send a message to
listproc@ozzie.notesnic.net with a body of SET LNOTES-L MAIL POSTPONE. When you return, send a message to
listproc@ozzie.notesnic.net with a body of SET LNOTES-L MAIL ACK.
Getting All Messages from a Specific Day
Send a message to
listproc@ozzie.notesnic.net with a body of GET LNOTES-L <yymmdd>.
Searching for a Specific Topic
Send a message to
listproc@ozzie.notesnic.net with a body of SEARCH LNOTES-L <topic>.
Threaded Archives
Turtle's Weightless Dog site archives the list.
Connectria archives the list.
DominoLinux is an open, unmoderated Internet mailing list about running the Lotus Domino Server on Linux.
Domino for Linux is an important development for the Domino community. Lotus's impending release of Domino for the popular Open Source platform is sure to introduce many people to Linux, as well as give existing Linux users access to a robust and scalable application server.
DominoLinux will be very focused on using Domino on the Linux operating system, so general questions about Domino and the Lotus Notes client are probably handled on the general Notes/Domino lists such as Domino-L (see http://www.nipltd.com/domino-l.htm) and LNOTES-L.
Archives of the list and other information is available at http://www.nipltd.com/dominolinux.htm
To join DominoLinux, send an email to
join-dominolinux@lyris.nipltd.com
Mail to the list itself should be sent to dominolinux@lyris.nipltd.com
For assistance etc. please mail owner-dominolinux@lyris.nipltd.com
Note: this mailing list is dead as of 4/15/2007
This is a Listserver mailing list that is not quite as popular as LNOTES-L, but it is nearly always operational.
Subscribing
To subscribe, send a mail message to:
LISTSERV@LISTSERV.OKSTATE.EDU.
Leave the subject line blank, and include on the first line of the message:
SUB NOTES-L first_name last_name
Unsubscribing
To unsubscribe, send the command UNSUBSCRIBE NOTES-L in e-mail to LISTSERV@listserv.okstate.edu.
Posting Articles
Send all articles to NOTES-L@listserv.okstate.edu.
Digest Mode
It is possible to receive the contents of this list as a "digest", a periodic collection of articles from the list traffic. After receiving your subscription confirmation, send the command SET NOTES-L DIGEST to
LISTSERV@listserv.okstate.edu.
Administrative Requests
Send all other list-related commands to LISTSERV@listserv.okstate.edu. For assistance, send the command HELP.
The list owners are:
James Alexander and
Konrad Brandemuhl.
Archives
This list has a threaded archive accessible by web browsers.
NOTESMTA is an open, unmoderated Internet mailing list for users and administrators of Macs running Lotus Notes/Domino.
Archives
Archives of the list, a web interface to the list server, and other information is available at http://lists.nipltd.com/cgi-bin/lyris.pl?enter=notesmac
Subscribing
To subscribe to NOTESMTA-L, send a regular email message to:
lyris@lyris.nipltd.com
subscribe notesmac <your name>
Unsubscribing
To unsubscribe from the list, send a message to lyris@lyris.nipltd.com with the body "unsubscribe notesmac" (without the quotes).
Posting
To post to the list, send a message to notesmac@lyris.nipltd.com.
Subscribing
Send an email message with "subscribe DOMINO-L" in the body to LISTSERV@LISTSERV.OKSTATE.EDU.
Unsubscribing
Send an email message with "signoff DOMINO-L" in the body to LISTSERV@LISTSERV.OKSTATE.EDU.
Sending messages to the list
Send mail to DOMINO-L@LISTSERV.OKSTATE.EDU.
Archives
This list has a threaded archive for access by web browsers.
NOTESMTA-L is an open, unmoderated Internet mailing list for administrators of MTAs and Mail gateways between Lotus Notes/Domino and other mail systems. The discussion focusses on the issues surrounding connecting Notes/Domino to other mail systems (for example the Internet, X.400, cc:Mail) using MTAs and mail gateways. Typical topics are the choice, configuration, and use of these gateways, as well as problems created by the interaction of different mailing systems.
Archives
Archives of the list, a web interface to the list server, and other information is available at http://www.nipltd.com/notesmta-l.htm
Subscribing
To subscribe to NOTESMTA-L, send a regular email message to:
lyris@lyris.nipltd.com
subscribe notesmta-l <your name>
Unsubscribing
To unsubscribe from the list, send a message to lyris@lyris.nipltd.com with the body "UNSUBSCRIBE NOTESMTA-L" (without the quotes).
Posting
To post to the list, send a message to notesmta-l@lyris.nipltd.com.
Portugese Notes Users Mailing List
To subscribe: "lotusnotes-br-subscribe@yahoogrupos.com.br"
David Stephens' Lotus Product/Event News
This is a Lotus support person that puts out great newsletters to keep his customers in touch with various Lotus info:
Send an e-mail to david_stephens@us.ibm.com with the subject line "Subscribe Lotus Product and Event News" (remove the quotes).
LNotes-J
This mailing list for Japanese Notes users. You can subscribe here:
http://www.iij-mc.co.jp/MLOnline/IIJ/98/lnotes-j.html
And there are archives here:
http://www.uisystem.co.jp/
Yahoo LNotes-L Group
This list is a replacement for the recently deceased LNOTES-L mailing list:
http://tech.groups.yahoo.com/group/lnotes-l-new/
Domino on iSeries (AS/400)
This is the Lotus Domino on the iSeries / AS400 (Domino400) mailing list
To post a message email: Domino400@midrange.com
To subscribe, unsubscribe, or change list options,
visit: http://lists.midrange.com/mailman/listinfo/domino400
or email: Domino400-request@midrange.com
Before posting, please take a moment to review the archives at http://archive.midrange.com/domino400.
Subscribing
You can get more info on the web site for this user group:
http://tech.groups.yahoo.com/group/lnotes-l-new/
Where can I find info on Mac-specific (not Notes-related) problems?
Check the following WEB sites:
The Macintosh Resource Page
The MacInTouch Home Page
The Cult of Macintosh
The EvangeList Web Site
If those don't have an answer to your Mac questions, they have links to numerous other sites for software downloads and other software and hardware questions. In addition, there is the I/O MUG - Internet ONLY Macintosh User's Group mailing list. To subscribe, send
SUBscribe IO-MUG <full name>
to
LISTSERV@UTARLVM1.UTA.EDU
Can you run the Notes Client on Linux?
Peter Leugner figured out to run the Notes 7.01 client on WINE:
- Get the latest wine from http://www.winehq.com (Version 0.9.19)
- Run the install: wine whatevertheinstalliscalled.exe
- Copy oleacc.dll and oleaccrc.dll from an existing windows to ~/.wine/drive_c/windows/system32 (depending on your settings this could be in windows/system, just copy them in both to be safe). Without this, you can't edit the preferences.
- Edit notes.ini and append the line
DisableUniscribe=1
This gets rid of a bunch of errormessages, I don't know, what it actually does.
- Start notes:
WINEDLLOVERRIDES="oleacc=n" ; wine "C:\Program Files\lotus\notes\nlnotes.exe"
There's a WINE wiki page on how to run the Win32 Notes client on Linux.
WINE (a windows emulator for Linux) has gotten good enough that it will run the R5 Notes client. Phil Colbourn (pcolbourn@argus.net.au) posted this helpful guide to getting it working:
Download and install Codeweavers Wine rpm. I used codeweavers-wine-20010112-1.i386.rpm
If you are mounting a dos partition, setup fstab and mount it. My /etc/fstab entry for my FAT32 partition is:
/dev/hda6 /mnt/e vfat noauto,owner,user 0 0
Run winesetup Programs-System-Wine Config under gnome. I set these options:
- Look & feel to Win95
- Window Mode to Managed
- Drive E HD /mnt/e (my FAT32 partition)
- Drive H network ${HOME}
- Drive Z network / to have access to the file system
- I added E:\lotus\notes;E:\lotus\notes\data to the Path
I'm using a Compaq Armada E500. I has a lucent winmodem (for the money I expected a self-contained modem). Fortunately a linmodem driver is available. It creates a /dev/ttyLT0 device. In the ports section I set this as a Coms port, but I have not tested it yet. I also have a network HP 8000 printer set as lp and lp4 (for printing 4 pages per page, full duplex)
My ~/.wine/config file is listed here:
WINE REGISTRY Version 2 ;; All keys relative to \\Machine\\Software\\Wine\\Wine\\Config ;; ;; MS-DOS drives configuration ;; ;; Each section has the following format: ;; [Drive X] ;; Path=xxx (Unix path for drive root) ;; Type=xxx (supported types are 'floppy', 'hd', 'cdrom' and 'network') ;; Label=xxx (drive label, at most 11 characters) ;; Serial=xxx (serial number, 8 characters hexadecimal number) ;; Filesystem=xxx (supported types are 'msdos'/'dos'/'fat', 'win95'/'vfat', 'unix') ;; This is the FS Wine is supposed to emulate on a certain ;; directory structure. ;; Recommended: ;; - "win95" for ext2fs, VFAT and FAT32 ;; - "msdos" for FAT16 (ugly, upgrading to VFAT driver strongly recommended) ;; DON'T use "unix" unless you intend to port programs using Winelib ! ;; Device=/dev/xx (only if you want to allow raw device access) ;; [Drive A] "Type" = "floppy" "Path" = "/mnt/floppy" "Label" = "/mnt/floppy" "Device" = "/dev/fd0" [Drive C] "Path" = "/home/pc901725/.wine/fake_windows" "Type" = "hd" "Label" = "/home/pc901725/.wine/fake_windows" "Filesystem" = "win95" [Drive E] "Type" = "hd" "Path" = "/mnt/e" "Label" = "/mnt/e" "FS" = "win95" [Drive Z] "Type" = "network" "Path" = "/" "Label" = "Root" "FS" = "win95" [wine] "Windows" = "C:\\Windows" "System" = "C:\\Windows\\system" "Path" = "C:\\Windows;C:\\Windows\\system;e:\\lotus\\notes;e:\\lotus\\notes\\data;C:\\Temp" "Temp" = "C:\\Temp" "GraphicsDriver" = "x11drv" ; Wine doesn't pass directory symlinks to Windows programs by default. ; Enabling this may crash some programs that do recursive lookups of a whole ; subdir tree in case of a symlink pointing back to itself. ;ShowDirSymlinks=1 "ShellLinker" = "wineshelllink" [DllDefaults] "DefaultLoadOrder" = "builtin, so, native" [DllOverrides] "kernel32" = "builtin" "gdi32" = "builtin" "user32" = "builtin" "krnl386" = "builtin" "gdi" = "builtin" "user" = "builtin" "toolhelp" = "builtin" "comdlg32" = "builtin" "commdlg" = "builtin" "version" = "builtin" "ver" = "builtin" "shell32" = "builtin" "shell" = "builtin" "shlwapi" = "builtin" "lz32" = "builtin" "lzexpand" = "builtin" "commctrl" = "builtin" "comctl32" = "builtin" "wsock32" = "builtin" "winsock" = "builtin" "advapi32" = "builtin" "crtdll" = "builtin" "ntdll" = "builtin" "mpr" = "builtin" "winspool.drv" = "builtin" "ddraw" = "builtin" "dinput" = "builtin" "dsound" = "builtin" "winmm" = "builtin" "mmsystem" = "builtin" "msvideo" = "builtin" "msvfw32" = "builtin" "mcicda.drv" = "builtin" "mciseq.drv" = "builtin" "mciwave.drv" = "builtin" "mciavi.drv" = "builtin" "mcianim.drv" = "builtin" "msacm.drv" = "builtin" "midimap.drv" = "builtin" "glide2x" = "so" "glide3x" = "so" "opengl32" = "builtin" "shfolder" = "builtin" "rpcrt4" = "builtin" "w32skrnl" = "builtin" "wnaspi32" = "builtin" "wow32" = "builtin" "system" = "builtin" "display" = "builtin" "wprocs" = "builtin" "wineps" = "builtin" "icmp" = "builtin" [x11drv] ; Number of colors to allocate from the system palette "AllocSystemColors" = "100" ; Use a private color map "PrivateColorMap" = "N" ; Favor correctness over speed in some graphics operations "PerfectGraphics" = "N" ; Color depth to use on multi-depth screens ;;ScreenDepth = 16 ; Name of X11 display to use ;;Display = :0.0 ; Allow the window manager to manage created windows "Managed" = "Y" ; Run Wine windows in desktop. Contains "N" or something like "800x600". "Desktop" = "N" ; Use XFree86 DGA extension if present "UseDGA" = "Y" ; Use XShm extension if present "UseXShm" = "Y" ; Enable DirectX mouse grab "DXGrab" = "N" ; Create the desktop window with a double-buffered visual ; (useful to play OpenGL games) "DesktopDoubleBuffered" = "N" ; Code page used for captions in managed mode ; 0 means default ANSI code page (CP_ACP == 0) "TextCP" = "0" ; Use this if you have more than one port for video on your setup ; (Wine uses for now the first 'input image' it finds). ;; XVideoPort = 43 [fonts] ;Read documentation/fonts before adding aliases "Resolution" = "96" "Default" = "-adobe-times-" [serialports] "Com1" = "/dev/ttyS14" "Com2" = "/dev/ttyLT0" "Com3" = "/dev/modem,38400" "Com4" = "/dev/ttyS14" [parallelports] "Lpt1" = "/dev/lp" "Lpt2" = "/dev/lp4" [spooler] "LPT1:" = "|lpr -P lp" "LPT2:" = "|lpr -P lp4" "LPT3:" = "/dev/lp3" "LPT4:" = "|gs -sDEVICE=bj200 -sOutputFile=/tmp/fred -q -" [ports] ;read=0x779,0x379,0x280-0x2a0 ;write=0x779,0x379,0x280-0x2a0 [spy] "Exclude" = "WM_SIZE;WM_TIMER;" [registry] ; Paths must be given in /dir/dir/file.reg format. ; Wine will not understand dos file names here... ;These are all booleans. Y/y/T/t/1 are true, N/n/F/f/0 are false. ;Defaults are read all, write to Home ; Global registries (stored in /etc) "LoadGlobalRegistryFiles" = "Y" ; Home registries (stored in ~user/.wine/) "LoadHomeRegistryFiles" = "Y" ; Load Windows registries from the Windows directory "LoadWindowsRegistryFiles" = "Y" ; TRY to write all changes to home registries "WritetoHomeRegistryFiles" = "Y" ; Registry periodic save timeout in seconds ; PeriodicSave=600 ; Save only modified keys "SaveOnlyUpdatedKeys" = "Y" [Tweak.Layout] ;; WineLook=xxx (supported styles are 'Win31'(default), 'Win95', 'Win98') "WineLook" = "Win95" [Console] ;Drivers=tty ;XtermProg=nxterm ;InitialRows=25 ;InitialColumns=80 ;TerminalType=nxterm [Clipboard] "ClearAllSelections" = "0" "PersistentSelection" = "1" [Drive D] "Path" = "/mnt/cdrom" "Type" = "cdrom" "Device" = "/dev/cdrom" [Drive H] "Path" = "${HOME}" "Type" = "network" "Device" = ""
==========
Installing Lotus Notes r506 (r504 upgraded to r506 using incremental installers under MS-Windows)
==========
I already had a r506 shared install on my Windows partition. It was an r504 full shared install upgraded to r506. If I had the CD handy, I could have installed it under Wine and applied the upgrades to r506 (as I have done this in the past)
I relocated the shared Notes install to E:\lotus\notes, and my data directory to E:\lotus\notes\data. Drive E: in MS-Windows 2000 is /mnt/e under Linux and I mapped this to drive E: under Wine. This way I can share my Notes program and data files between MS-Windows and Linux/Wine.
To setup the registry, I ran wine e:\lotus\notes\setup.
I had a lot of trouble getting Notes to work. I tried all sorts of DLL combinations (builtin v's native). Eventually I discovered it was some redistributed files in the Notes program directory that were causing me grief. I removed them and ... I don't need MS-Windows 2000 anymore.
The files I removed (renamed actually) were these:
- imagehlp.dll
- msvcrt.dll
- olepro32.dll
- rpcrt4.dll (I think)
If these don't exist in your Notes program directory, don't worry.
==========
Running Notes under Wine
==========
I made this small script and placed it into ~/bin/notes
echo preparing to start notes... if [ ! -f /mnt/e/lotus/notes/Notes.exe ]; then echo mounting /mnt/e... mount /mnt/e fi echo starting notes... wine e:\\lotus\\notes\\nlnotes.exe =e:\\lotus\\notes\\data\\notes.ini
It mounts my Wine E: drive if it is not already mounted, then starts Notes using nlnotes.exe rather than notes.exe. This is because notes.exe launches the Notes splash screen first and then runs nlnotes.exe (I think). But when you close Notes (nlnotes.exe actually), the splash screen does not get closed and seems to remain running under Wine even though you can not see it. I think this happens in MS-Windows as well except that it is closed when nlnotes is closed. From my experience, nlnotes is all you need, and it does not waste memory (under wine at least). I now run nlnotes.exe instead of notes.exe under MS-Windows.
NB: chmod u+x ~/bin/notes before using it
==========
WIN.INI Modifications
==========
To control the date and time format (to dd/MM/yyyy and 24 hour time) I added these entries into C:\Windows\WIN.INI since I could not get them to work in the registry.
[intl] iTLZero=1 iDate=1 sDate=/ sShortDate=dd/MM/yyyy sLongDate=dddd, MMMM dd, yyyy iTime=1 iTimePrefix=1 sTime=: s1159= s2359= sTimeFormat=HH:mm:ss
NB: These work but I do not know what consistutes the minimum set.
==========
NOTES.INI
==========
This is an annotated extract of my NOTES.INI file in E:\lotus\notes\data.
[Notes] Directory=e:\Lotus\Notes\Data - case does not seem to matter WinNTIconPath=e:\lotus\notes\data\W32 Timezone=-10 - Australia ClockType=24_HOUR - this did not do anything DST=0 - our parent org does not run DST, so we can not either TCPIP=TCP, 0, 15, 0 COM1=XPC,1,15,0,,12288, COM2=XPC,2,15,0,,12292,115200,16,_pcgend.mdm,60,15 - my own generic modem file COM3=XPC,3,15,0, COM4=XPC,4,15,0,,12302,57600,16,_pcgend.mdm,60,15 COM5=XPC,5,15,0,,12292,115200,16,_PCGEND.MDM,60,15 Ports=TCPIP,COM4 DisabledPorts=COM2,COM5,COM1,COM3 MailServer=CN=amber/O=RailCom - amber is a Linux Domino server! We are running two one on RH7.0 and another on Debian. The one on Debian is not very stable yet, but it also has a stallion multi-port serial card, and is our Notes dial-in server. The RH7.0 server runs well, but currently only as a mail/HTTP server and we are only running it on a non SMP 2.2 kernel (the box has two processors, SCSI RAID, and 1G RAM) SPELL_DIR=e:\lotus\notes\data DateOrder=DMY - this did not do anything either
==========
Well that is it. I'd be interested if this helps or if you find any improvements I can make.
Status for support can also be found here.
IBM has also released a Hanover native Linux Notes client.
John Smolenaers was nice enough to write up how to install it on Debian which isn't one of the supported platforms:
INSTALLING LOTUS NOTES 7.0.1 ON DEBIAN 3.1 (SARGE)
PREREQUISITES
This procedure is based on a standard Debian 3.1 (Sarge) Desktop installation using the Linux kernel 2.4 with Gnome as the default Desktop Environment.
PROCEDURE
1. Copy the directory Lotus Notes 7.0.1 for Linux Setup to /tmp or another location of your choice (if you do not know where Lotus Notes 7.0.1 for Linux Setup folder is, contact Internal IT for the location). You can either use your favourite GUI file browser or from a new terminal window by typing;
cp Source/Lotus Notes 7.0.1 for Linux Setup /tmp
2. From a terminal screen type in the following;
su root
apt-get install libmotif3
nano )w /etc/gre.conf
mkdir /opt/IBM
chmod 777 /opt/IBM
chmod 777 /tmp/Lotus\ Notes\ 7.0.1\ for\ Linux\ Setup/setup_wct_platform.bin
cd /tmp/ Lotus\ Notes\ 7.0.1\ for\ Linux\ Setup
./setup_wct_platform.bin
#!/bin/sh export NOTESBIN=/home/<username>/notes export NOTESDATA=/home/<username>/notes/data export NOTESDIR=/home/<username>/notes/data export LD_LIBRARY_PATH=$NOTESBIN:$NOTESBIN/jvm/bin/classic:$NOTESBIN/jvm/bin:$LD_LIBRARY_PATH export PATH=$NOTESBIN/jvm/bin:$NOTESBIN:$PATH export CLASSPATH=./:$NOTESBIN/:$CLASSPATH /opt/IBM/Workplace\ Managed\ Client/rcp/richclient -personality com.ibm.workplace.noteswc.standalone.linux.personalitythen save and close the file. If using nano as your text editor, you can save and close the file using the key sequence;
chmod 777 /home/<username>/.noteslauncher
How do you start/stop Domino on Linux automatically?
Daniel Nashed has put up a nice script on his web site that does this and also gives you the option to connect to the Domino console. You can request your own copy of it
here.
Do I have to install the Notes/Domino Server on Windows Server?
No, you do not need to install the Lotus Notes/Domino server on a Microsoft Windows Server if you are installing it on Windows. You can install it on Windows 2000, XP, etc. However, IBM/Lotus has a list of supported operating systems that they've tested on and may complain if you try to report a problem that happens on an unsupported platform.
How do you delete a profile document?
You have to use LotusScript:
Set doc = db.GetProfileDocument(profilename) Call doc.Remove
What HelpDesk products are available for Notes?
Thanks to Charles Ross for compiling this list :-)
Company | Product name |
Alvea | Help Desk |
Arcidea (bought out Synergistics) | helpdesk |
Ardexus | service CARE |
Automation Centre | Tracker Suite |
DataWatch | Visual Help Desk |
Cadence Solutions | Extended Reach�Helpdesk |
CogniCase | Maximizer Enterprise Helpdesk |
Eden | ProjectTrak Helpdesk |
GeoCom GmbH | HelpDesk |
groupapps.com | dispatch |
Groupsoft Systems | Groupsoft Help Desk for Domino |
GSX | GSX Help Desk |
GWI | c.support |
Mayflower | HelpDesk |
Relavis (sells OverQuota) | eService for Domino |
Techflow, Inc. | Enhanced Help Desk R4 |
Velocity Integration Software | VI Service Desk |
It's interesting that the PLATO Notes was originally created for a help desk application (see the History of Notes)
How do you calculate the week number in a year of a given date?
This formula satisfies ISO 8601:1988:
REM "This formula satisfies ISO 8601:1988"; REM "Formulae updated : 08.28.1997 "; REM "by Stephen P.R. Renton (sprenton@mcmail.com)"; REM "Version: 1.01"; REM "Tested on : Lotus Notes Release 4.5"; REM "D is the date of interest."; D := @TextToTime(@Prompt([OKCANCELEDIT]; "Enter Date"; "Please enter a date to convert to a week number:"; "")); REM "D := [31/12/95]"; FirstOfYear := @Date(@Year(D); 1; 1); LastOfYear := @Date(@Year(D); 12; 31); FirstDayNum := @Weekday(FirstOfYear); LastDayNum := @Weekday(LastOfYear); REM "ISO weeks start on Monday and ends on Sunday."; ISOFirstDayNum := @If(FirstDayNum = 1; 7; FirstDayNum - 1); ISOLastDayNum := @If(LastDayNum = 1; 7; LastDayNum - 1); REM "The first and last ISO week is the first"; REM "and last ISO week to include Thursday"; IsFirstWeek := 7 - ISOFirstDayNum > 2; IsLastWeek := 7 - ISOLastDayNum < 4; REM "The date of the first day of the first ISO week"; ISOFirstDay := @If(IsFirstWeek; @Adjust(FirstOfYear; 0; 0; 1 - ISOFirstDayNum; 0; 0; 0); @Adjust(FirstOfYear; 0; 0; 8 - ISOFirstDayNum; 0; 0; 0)); REM "The date of the last day of the last ISO week"; ISOLastDay := @If(IsLastWeek; @Adjust(LastOfYear; 0; 0; 7 - ISOLastDayNum; 0; 0; 0); @Adjust(LastOfYear; 0; 0; -ISOLastDayNum; 0; 0; 0)); REM "Date outside ISOFirstDay and ISOlastDay"; REM "are from the previous or next year"; REM "Return the ISO week number and exit"; FirstWeekNextYear := @If(D > ISOLastDay; @Return(@Prompt([OK]; "FWNY"; @Text(@Year(D)+1) + "W01")); NULL); REM "I suspect this is where Julian dates would be useful"; REM "A recursive call could be used in a real language"; LastWeekLastYear := (D - @Adjust(FirstOfYear; -1; 0; 0; 0; 0; 0))/60/60/24/7; AdjustLastWeek := 1 - (LastWeekLastYear - @Integer(LastWeekLastYear)); @Set("LastWeekLastYear"; LastWeekLastYear + AdjustLastWeek); @If(D < ISOFirstDay; @Return(@Prompt([OK]; "LWLY"; @Text(@Year(D) - 1) + "W" + @Text(LastWeekLastYear))); NULL); REM "If you get this far, the date falls into an ISO week this year"; REM "Convert the difference in seconds to weeks"; NumWeeks := (D - ISOFirstDay)/60/60/24/7; REM "Fractions indicate that the date falls"; REM "in the middle of the ISO week"; WeekAdjust := 1 - (NumWeeks - @Integer(NumWeeks)); ISOWeekNum := NumWeeks + WeekAdjust; REM "Conform to ISO 8601 format"; Pad:=@If(ISOWeekNum<10;"0";""); Result := @Text(@Year(D))+"W"+Pad+@Text(ISOWeekNum); @Prompt([OK];"Week number"; Result)
Here is another version that gives you a week number in another ISO format:
REM "Formulae Calculate the Week Number(01-53) for any Date. "; REM "The output follows the ISO 8601:1988 standard: ex 1997-W31-4 for 1997.07.31 "; REM "Formulae writer : Nikolai Aasen (nsaa@pvv.org), UNI Storebrand, Norway"; REM "Formulae written : 1997.07.30"; REM "Formulae updated : 1997.08.04"; REM "Version : 1.03"; REM "Tested on :Lotus Notes 4.6PreRelease2"; REM "This formulae is available in the"; REM "Lotus Notes FAQ: http://www.keysolutions.com/NotesFAQ/"; REM "More Calendar information in http://www.pip.dknet.dk/~pip10160/calendar.html"; REM "ISO 8601:1988 summary at: http://quake.stanford.edu/~lyle/ISOdate/Date.html"; REM "--------------------------------------------------------------------------------------------------"; REM "Replace D with the date of interest."; D := [1997.31.07];
REM "**************************"; REM"Calculate some data for this Year"; REM "**************************"; FirstOfYear := @Date(@Year(D); 1; 1); LastOfYear := @Date(@Year(D); 12; 31); FirstDayNum := @Weekday(FirstOfYear); REM "ISO weeks start on Monday and ends on Sunday."; ISOFirstDayNum := @If(FirstDayNum = 1; 7; FirstDayNum - 1);
REM " Week 1 of any year is the week that contains the first Thursday in January."; REM "=1 if 1. jan = man - thu. WeekNumber is then 1, else 0"; IsFirstWeek := 7- ISOFirstDayNum >2;
REM "The first Monday after 1. jan this Year"; FirstMonday := 9 - ISOFirstDayNum;
REM "Number of Days from 1. jan to D"; DaysToDateD:=(D-FirstOfYear)/60/60/24+1;
REM "Number of days in Year(either 365 or 366)"; DaysInYear:=(LastOfYear-FirstOfYear)/60/60/24;
REM "Number of Weeks in Year. Most years have 52 weeks, but years that start on a Thursday and leapyears that start on a Wednesday have 53 weeks."; NumberOfWeeksThisYear:=@If( (ISOFirstDayNum=4 | (ISOFirstDayNum=3 & DaysInYear=366));53;52 );
REM "***************************"; REM"Calculate some data for last Year "; REM "***************************"; FirstOfLastYear := @Date(@Year(D)-1; 1; 1); LastOfLastYear := @Date(@Year(D)-1; 12; 31); FirstDayNumLast := @Weekday(FirstOfLastYear); REM "ISO weeks start on Monday and ends on Sunday."; ISOFirstDayNumLast := @If(FirstDayNumLast = 1; 7; FirstDayNumLast - 1);
REM "Number of days in Year(either 365 or 366)"; DaysInYearLast:=(LastOfLastYear-FirstOfLastYear)/60/60/24;
REM "Number of Weeks Last Year. Most years have 52 weeks, but years that start on a Thursday and leapyears that start on a Wednesday have 53 weeks."; NumberOfWeeksLastYear:=@If( (ISOFirstDayNumLast=4 | (ISOFirstDayNumLast =3 & DaysInYearLast=366));53;52 );
REM "************************"; REM"Calculates the Week Number "; REM "************************";
DDayNum := @Weekday(D); ISODDayNum := @If(DDayNum = 1; 7; DDayNum - 1);
REM"Is D in the last Week of the last Year?"; DayInLastWeek := @If((DaysToDateD<FirstMonday & IsFirstWeek = 0); @Return( @Text(@Year(D)-1)+"-W"+@Text(NumberOfWeeksLastYear)+"-"+@Text(ISODDayNum)); NULL);
REM "Calculate number of Complete Weeks Between D and 1.jan"; ComplNumWeeks:=@Integer((DaysToDateD-FirstMonday)/7);
REM "Are there remaining days?"; RemainingDays:=@If( (DaysToDateD+1-(FirstMonday+7*ComplNumWeeks))>0);
NumWeeks:= IsFirstWeek+ComplNumWeeks+1;
Out := @If(RemainingDays; @If( (NumWeeks>52 & NumWeeks>NumberOfWeeksThisYear ); @Return(@Text(@Year(D)+1)+"-W01-"+ @Text(ISODDayNum)); @Return(@Text(@Year(D))+"-W"+@Right("0"+@Text(NumWeeks);2)+"-"+@Text(ISODDayNum))); @Return(@Text(@Year(D))+"-W"+@Right("0"+@Text(NumWeeks-1);2) +"-"+@Text(ISODDayNum))); Out
'CalculateWeekNumbers:
Option Declare
Sub Initialize %REM This short agent shows how the calendar week function can be implemented.
Christian Meis, 09.04.1999 E-Mail: Christian.Meis@mlc.de %END REM Dim dateval As Variant Dim test As String dateval = Cdat( Inputbox( "Please enter date: " ) ) test = GetCalendarWeek( dateval ) Messagebox( Cstr( dateval ) & " --> " & test ) End Sub
Function GetCalendarWeek( Byval inputdate As Variant ) As String %REM This function calculates the calendar week number (ISO standard) for a given date value. The format function of LotusScript (parameter "ww") does not solve this problem.
Monday is the first day of the week. Week #1 is the week that contains the 4th of January (ISO 8601). The week at the end/beginning of the year belongs to the next/previous year, if there are 3 days or less of that week in the year in question.
Christian Meis, 4.2.2000 %END REM Dim InputDateOffset As Integer Dim YearInQuestion As Integer Dim January4 As Variant Dim January4Offset As Integer Dim FirstMondayOfYear As Variant Dim January1Offset As Integer Dim December31Offset As Integer Dim weeknum As Integer ' The year value is preset with that of the input date YearInQuestion = Year( inputdate ) ' Calculate offset to monday from the input date InputDateOffset = CalculateIsoWeekday( inputdate ) ' Calculate offsets for the first/last day of the year January1Offset = CalculateIsoWeekday( Cdat( "01.01." & Cstr( YearInQuestion ) ) ) December31Offset = CalculateIsoWeekday( Cdat( "31.12." & Cstr( YearInQuestion ) ) ) ' If the input date is before the 4th of January and the year starts with ' a friday, saturday or sunday, the week belongs to the previous year ' if the entered date is not a monday or tuesday If Month( inputdate ) = 1 And Day( inputdate ) < 4 And January1Offset> 3 And InputDateOffset > 1 Then YearInQuestion = YearInQuestion - 1 End If ' If the input date is after the 28th of December and the year ends with ' a monday, tuesday or wednesday, then the week belongs to the following year ' if the entered date is not a saturday or sunday If Month( inputdate ) = 12 And Day( inputdate ) > 28 And December31Offset < 3 And InputDateOffset < 5 Then YearInQuestion = YearInQuestion + 1 End If ' The 4th of January defines week #1 January4 = Cdat( "04.01." & Cstr( YearInQuestion ) ) ' Offset to the monday of week #1 FirstMondayOfYear = Cdat( January4 - CalculateIsoWeekday( January4 ) ) ' The time range between the monday of week #1 and the monday ' of the week in question is divided by 7, plus 1 for the first week weeknum = ( inputdate - InputDateOffset - FirstMondayOfYear ) \ 7 + 1 ' The return value is a string with the week number and the year GetCalendarWeek = Cstr( weeknum ) & " " & Cstr( YearInQuestion ) End Function
Function CalculateIsoWeekday( tmpdate As Variant ) As Integer %REM This function converts the weekday-numbers from the standard function to an offset acc. to the ISO version monday -> 0, ... , sunday -> 6 %END REM Dim n As Integer n = Weekday( tmpdate ) If n = 1 Then ' sunday to end of week n = n + 7 End If CalculateIsoWeekday = n - 2 End Function
This version for 53 week years comes from Bill Westaway (Bill.Westaway@fmr.com):
The following "week of the year" formula was adopted from the set that shows on your web site.
It is for applications that require 53 week years because the last few days of the year still occur in a calendar year (government reporting or payroll support would be good examples). 2002 is a good example of a 53 week year.
(you can actually get a 54th week by this definition - this formula will also work then)
The formula works in views, fields, and agents and should work for every Notes/Domino release 3.0 and greater.
As was your formula -- it's "Monday" based.
I've used your padding concept for text conversion at the end. I normally leave it in numeric form and convert to text only when I need to combine with other text, as is done in the example below.
I've tried to keep this fairly efficient (I think I might be able to improve on the WeekOfYear_Gross variable formula)
REM { routine to figure out the week of the year a given date falls into --- for those applications that require a 53 week year}; REM { (i.e. those applications where the last week of the year is the first few days of the week that}; REM { splits across a year end boundary}; REM { it's also true that the first week of the year is defined as the last days of the week that splits across a year end boundary.}; REM { Its actually possible to get 54 week years by this definition!}; REM { Set the below Variable (SourceDate) to the value of the field that contains the date we will work on}; SourceDate := CompletedOnDist; REM {First fugure out what the first day of the year in question is.}; FirstOfYear := @Date(@Year(SourceDate); 1; 1); FirstDayNum_SundayBased := @Weekday(FirstOfYear); FirstDayNum_MondayBased := @If(FirstDayNum_SundayBased = 1; 7; FirstDayNum_SundayBased -1); REM {Then get the week of the year for this date}; WeekOfYear_Gross := @Integer(@Integer(((@Date(SourceDate) - FirstOfYear) / (86400)) + 1) / 7) +1; REM {Then adjust the week because the first day of they year may not fall on Monday}; DayOfWeek := @Weekday(SourceDate); WeekOfYearNum := @If(DayOfWeek >= FirstDayNum_MondayBased; WeekOfYear_Gross; WeekOfYear_Gross + 1); Pad := @If(WeekOfYearNum < 10; "0"; ""); "Week " + Pad + @Text(WeekOfYearNum)
REM { Returns the days at the start of the year up to Sunday as Week 1. Weeks start on Monday. FYI: 1984 is 54 weeks!
i.e. always returns week number for current year, rather than ISO week which can be week number for previous/next year. }
SourceDate := @Date(2009; 1; 11);
Jan1 := @Date(@Year(SourceDate); 1; 1);
DaysSinceJan1 := 1 + (SourceDate - Jan1) / 86400; Jan1Weekday_SundayIs1 := @Weekday(Jan1);
Jan1Weekday_MondayIs1 := @If(Jan1Weekday_SundayIs1 = 1; 7; Jan1Weekday_SundayIs1 - 1);
WeekNum := @Integer((5 + DaysSinceJan1 + Jan1Weekday_MondayIs1) / 7);
PadChar := @If(WeekNum < 10; "0"; "");
"Week " + PadChar + @Text(WeekNum)
How do you display a custom image in a Notes view?
Editor's note: this sounds like an unsupported "feature" in R5. Use at your own risk, as it may change in future versions.
This is from Sushanta Kumar Manna's Notes Advisor Tip:
1. In the PostSave Event of the form, get the RichText Filed and set the IsSummary Value to true (normally this is set to false for all RichText Items). This example uses an RTF named "Picture":
Sub Postsave(Source As Notesuidocument) Dim doc As NotesDocument Dim item As NotesItem Set doc = Source.Document Set item = doc.GetFirstItem("Picture") item.IsSummary = True Call doc.Save(False,True) End Sub
2. Compose the form.
3. Insert a image resource in a rich text field using the Create|Image Image Resource menu option. Do not just import an picture as this will give you the Red Box of Death (RBOD).
4. Save the document.
5. Now Create a view for the specific form and map the Rich text field "Picture" to the first column and don't forget to tick the column property "Display value as Icons".
6. Now you can view your image in the first column of the view.
Here's a tip from Stephen Knight on how to use image resources to do something similar:
You add an image resource then put the name of that resource in the column -- this can be a literal, i.e. "logo.gif" or a fieldname to make the image variable.� Then just tick the box "display as icon" and it appears....� the image needs to be the correct size and you have to extend the row height to a suitable number... shrink to fit doesn't work. You can also include multiple images using a multi-value field or list in the column, tick the box saying "display multiple values as separate entries", sort the column, and they all appear.
Can you stop the refresh view indicator for displaying if you use @Today in a view?
This is an undocumented workaround. If you use this formula code:
Today := @TextToTime("Today");
The view will still get updated daily, but the refresh view indicator will not be displayed.
How do you debug Notes/Domino Java Agents using Eclipse?
Ian Conner wrote a great article on this:
http://www-128.ibm.com/developerworks/lotus/library/notes-eclipse/
Bob Balaban also has an article on this:
How do you copy a view/folder's design into another view/folder?
You can use this function that is new to R6:
@UpdateViewDesign(targetView, sourceView)
This will copy the design from one view or folder to another view/folder.
How do you show the search bar automatically in a specific view?
In that view's PostOpen event, set the code type to @formula and use this:
@Command([ViewShowSearchBar]; "1")
This will put the focus on the search bar. If you want to put it on the view, add this line afterwards:
@Command( [OpenView]; "NameOfThisView" )
How do you specify database categories in Domain Full-Text Search?
In the query, you have to compare the "DbCategories" field to the categories you want to include. For example:
[DbCategories] Contains ("Category1" OR "Category2")) AND (<FTSearchExpression>)
What Are Domino's Field Size Limits?
You can find the answers in Mike Woolsey and Ben Langhinrichs' Domino Size Limits page.
How do you do an SSL POST from a Java Agent?
From Karl Merckel on the Notes forums:
This solution uses HttpClient and JSSE which you can download from these sources:
HttpClient:
http://jakarta.apache.org/commons/httpclient/index.html
Dependancies:
http://jakarta.apache.org/commons/httpclient/dependencies.html
JSSE1.3
http://java.sun.com/products/jsse/index-103.html
After downloading and unzipping the packages retrieve the following JAR files and put them in jvm\lib\ext
commons-httpclient-3.0.jar
commons-logging.jar
commons-codec-1.3.jar
junit.jar
jcert.jar
jnet.jar
jsse.jar
One last step and I am not sure if this is neccassary:
Modify the java.security document (in /jvm/lib/security) and add a security provider : com.sun.net.ssl.internal.ssl.Provider.
Example :
security.provider.1=sun.security.provider.Sun
security.provider.2=com.sun.net.ssl.internal.ssl.Provider
Modify the java.policy document (in jvm/lib/security) and add a permission :
permission java.util.PropertyPermission "java.protocol.handler.pkgs", "write";
This solution work in ND6+ because it needs JDK 1.3+.
Here is some sample code:
import lotus.domino.*; import java.io.IOException; import org.apache.commons.httpclient.methods.PostMethod; import org.apache.commons.httpclient.HttpClient; import org.apache.commons.httpclient.methods.GetMethod; import org.apache.commons.httpclient.*; import org.apache.commons.httpclient.methods.InputStreamRequestEntity; import java.io.File; import java.io.FileInputStream; public class JavaAgent extends AgentBase { public void NotesMain() { try { Session session = getSession(); AgentContext agentContext = session.getAgentContext(); HttpClient httpclient = new HttpClient(); PostMethod post = new PostMethod("https://yourdomain.com?action=login&username=whatever"); try { int result = httpclient.executeMethod(post); // Display status code System.out.println("Response status code: " + result); // Display response System.out.println("Response body: "); System.out.println(post.getResponseBodyAsString()); } finally { // Release current connection to the connection pool once you are done post.releaseConnection(); } } catch(Exception e) { e.printStackTrace(); } } }
Can you use Notes objects in LS2J Java code?
No. All Notes/Domino backend classes should only be accessed by Lotuscript when you call Java code using LS2J.
In Lotuscript code, all NotesSessions objects point to the same object as well (despite being created multiple times using New NotesSession), so there is no need to pass it to different functions.
However, in Java, you can have multiple JavaSession objects, so you should be passing a single JavaSession object to different Java methods to avoid wasting system resources.
How do you create a database that contains encrypted web-submitted documents?
You can do this two ways, depending on whether you can encrypt this for a specific list of users or if you need to allow a changing group of users to do it.
For a changing group of users, you can use a mail-in database set that is set to encrypt incoming mail:
1) Create a new key pair
2) Extract public key from this pair
3) Paste puclic key into the public key field of the mail-in DB document
4) For the mail-in DB, enable the option to automatically encrypt incoming mail
5) When the form is submitted, have your agent mail the document to the mail-in DB
6) Distribute the key pair to any user who needs to see the encrypted data
This has the problem of not being able to revoke the key from users who no longer should see the encrypted data (you can't guarantee the user didn't make a backup of their user.id file if you delete the encryption key from their current ID)
For a specific list of users, your webquerysave agent can do this:
'create empty secret and public encryption key items Set itemPublicKeys = New NotesItem(doc, "PublicEncryptionKeys", "") Set itemSecretKeys = New NotesItem(doc, "SecretEncryptionKeys", "") 'add public keys of users Call itemPublicKeys.AppendToTextList(<array of user names>) 'encrypt the note with the above public keys Call doc.Encrypt() 'remove the dummy SecretEncryptionKeys item and save Call doc.RemoveItem("SecretEncryptionKeys") Call doc.Save(True, False, True)
How do you output a PDF from Notes?
There are a few solutions for this:
- DominoPDF (uses the HTTP task to help convert documents to PDF)
- N2PDF (an export-filter add-in for Notes)
- PDF995 (a PDF driver with COM automation under Windows)
How do you create a NotesDocumentCollection?
A NotesDocumentCollection is useful for storing a set of documents that you later want to put into a folder or delete; it's a lot faster to make one call than to delete or folder documents one at a time. Unfortunately, there's no simple way to do this such as "Dim dc As NotesDocumentCollection" which is what most people would try. Instead, you have to get it by using one of the search collection APIs with a key that can't be found such as this:
Dim session As New NotesSession Dim dc As NotesDocumentCollection Set dc = session.CurrentDatabase.GetProfileDocCollection("nonexistingform")
or by doing this:
Dim session As New NotesSession Dim db As NotesDatabase Set db = session.CurrentDatabase Dim view As NotesView Set view = db.GetView("($All)") Dim dc As NotesDocumentCollection Set dc = view.GetAllDocumentsByKey("12345") ' non-existent key
How Do the C&S Forms/Fields Work Together?
You can find out from the documentation for the schema:
http://www.ibm.com/developerworks/lotus/documentation/dw-l-calendarschema.html
How do you create tables with rounded corners in Notes?
This is a popular thing to do in the web world, but you can do it by simply creating a gif image that is a rounded rectangle. Then you apply it to a table's properties as a border image. The Notes client will overlay this image over the borders of your table and you magically get a rounded table displayed in the Notes client.
This is covered in several blogs:
- nsftools
- Geniisoft
-
BizzyBee
How do you get the HTML for a Rich Text field?
Thanks to Mark Vincenzes:
This URL will give you the HTML for a specific field so you don't have to parse an HTML page for it:
/database.nsf/view-unid/doc-unid/ItemName?OpenField
However, the content may be slightly different because OpenField runs in a different context than viewing an entire document.
How do you disable NSD so exceptions go to Visual Studio?
If you add
APIDeveloper=1
to your Notes client's notes.ini, NSD will be disabled and the current JIT (Just In Time) debugger (usually Visual Studio) will be invoked.
You can also do "nsd -detach" if you're running Domino 8.x and above which uses a Windows service for NSD.
Why does my C API program crash when running on 64-bit Windows?
From Daniel Nashed:
Domino 7.0.2+ supports Windows 2003 64bit and can leverage more than 2 GB memory for local + shared memory.
What is still not widely known among ISVs is that you need to link your applications in Visual Studio with a new flag called /LARGEADDRESSAWARE. The flag allows a program to use more than 2 GB of memory (shared + local). Without this flag an application crashes when the 2 GB memory limit is reached. The Notes API samples up to 8.5 don't use this flag and they should.
What causes "Entry Not Found In Index" Errors?
This is generally caused by @DbLookup/@DbColumn on a view and the lookup key is not found.
However, it can also be caused by a save/replication conflict in the same view used for the lookups. If this is true, you can add "(!@IsAvailable($Conflict))" to the view selection formula to exclude conflicts.
It can also be caused by the view setting "Generate Unique Keys in Index for ODBC" if there's a replication conflict in the same view. In this case, you'll get an error if you try to open the view but you don't see any formulas or events that are doing any lookups.
How do you track who deleted a document?
From Dirk Hamilton:
This is used to log each document deletion. It creates a log document which is displayed in a "deletion log" view so users can clearly see who deleted each document instead of pointing fingers :-)
Sub Postdocumentdelete(Source As Notesuidatabase) Dim s As New notessession Dim db As notesdatabase Dim d3 As notesdocument Dim c As notesdocumentcollection Dim d As notesdocument Set db = s.currentdatabase Set c = source.documents Set d = c.getfirstdocument Do f = d.form If f(0) = "log" Then Goto skipper i = d.issue p = d.pkey 'create log entry Set d3 = db.createdocument d3.form = "log" d3.when = Now d3.who = Evaluate("@Name([CN];@V3UserName)") d3.what = "Deleted a document. Form = " + f(0) + " :: issue = " + i(0) + " :: pkey = " + p(0) Call d3.save(True,False) skipper: Set d = c.getnextdocument(d) Loop Until d Is Nothing End Sub
How Do You Run Console Commands From Lotuscript?
Here's an example of code (from Daniel Nashed) on how you can issue Remote Console commands from Lotuscript:
Dim rcmd_server As String Dim rcmd_command As String Dim rcmd_result as String
rcmd_server = "notes.nashcom.de" rcmd_command = "show server"
Dim remoteConsole As New RemoteConsole (rcmd_server)
recmd_result = remoteConsole.Execute (rcmd_command)
REM W32 De
clares
Declare Function W32_NSFRemoteConsole Lib "NNOTES.DLL" Alias "NSFRemoteConsole" (Byval server As Lmbcs String, Byval cmd As Lmbcs String, ret As Long) As Integer
Declare Function W32_OSLockObject Lib "NNOTES.DLL" Alias "OSLockObject" (Byval handle As Long) As Lmbcs String
Declare Sub W32_OSUnlockObject Lib "NNOTES.DLL" Alias "OSUnlockObject" (Byval handle As Long)
Declare Sub W32_OSMemFree Lib "NNOTES.DLL" Alias "OSMemFree" (Byval handle As Long)
Declare Function W32_OSLoadString Lib "NNOTES.DLL" Alias "OSLoadString" (Byval hModule As Long, Byval stringCode As Integer, _
Byval retBuffer As Lmbcs String, Byval bufferLen As Integer) As Integer
REM MAC Declares
Declare Function MAC_NSFRemoteConsole Lib "NotesLib" Alias "NSFRemoteConsole" (Byval server As Lmbcs String, Byval cmd As Lmbcs String, ret As Integer) As Integer
Declare Function MAC_OSLockObject Lib "NotesLib" Alias "OSLockObject" (Byval handle As Integer) As Lmbcs String
Declare Sub MAC_OSUnlockObject Lib "NotesLib" Alias "OSUnlockObject" (Byval handle As Integer)
Declare Sub MAC_OSMemFree Lib "NotesLib" Alias "OSMemFree" (Byval handle As Integer)
Declare Function MAC_OSLoadString Lib "NotesLib" Alias "OSLoadString" (Byval hModule As Integer, Byval stringCode As Integer, _
Byval retBuffer As Lmbcs String, Byval bufferLen As Integer) As Integer
REM Linux Declares
Declare Function LINUX_NSFRemoteConsole Lib "libnotes.so" Alias "NSFRemoteConsole" (Byval server As Lmbcs String, Byval cmd As Lmbcs String, ret As Long) As Integer
Declare Function LINUX_OSLockObject Lib "libnotes.so" Alias "OSLockObject" (Byval handle As Long) As Lmbcs String
Declare Sub LINUX_OSUnlockObject Lib "libnotes.so" Alias "OSUnlockObject" (Byval handle As Long)
Declare Sub LINUX_OSMemFree Lib "libnotes.so" Alias "OSMemFree" (Byval handle As Long)
Declare Function LINUX_OSLoadString Lib "libnotes.so" Alias "OSLoadString" (Byval hModule As Long, Byval stringCode As Integer, _
Byval retBuffer As Lmbcs String, Byval bufferLen As Integer) As Integer
REM AIX Declares
Declare Function AIX_NSFRemoteConsole Lib "libnotes_r.a" Alias "NSFRemoteConsole" (Byval server As Lmbcs String, Byval cmd As Lmbcs String, ret As Integer) As Integer
Declare Function AIX_OSLockObject Lib "libnotes_r.a" Alias "OSLockObject" (Byval handle As Integer) As Lmbcs String
Declare Sub AIX_OSUnlockObject Lib "libnotes_r.a" Alias "OSUnlockObject" (Byval handle As Integer)
Declare Sub AIX_OSMemFree Lib "libnotes_r.a" Alias "OSMemFree" (Byval handle As Integer)
Declare Function AIX_OSLoadString Lib "libnotes_r.a" Alias "OSLoadString" (Byval hModule As Integer, Byval stringCode As Integer, _
Byval retBuffer As Lmbcs String, Byval bufferLen As Integer) As Integer
REM Solaris Declares
Declare Function SOLARIS_NSFRemoteConsole Lib "libnotes.so" Alias "NSFRemoteConsole" (Byval server As Lmbcs String, Byval cmd As Lmbcs String, ret As Integer) As Integer
Declare Function SOLARIS_OSLockObject Lib "libnotes.so" Alias "OSLockObject" (Byval handle As Integer) As Lmbcs String
Declare Sub SOLARIS_OSUnlockObject Lib "libnotes.so" Alias "OSUnlockObject" (Byval handle As Integer)
Declare Sub SOLARIS_OSMemFree Lib "libnotes.so" Alias "OSMemFree" (Byval handle As Integer)
Declare Function SOLARIS_OSLoadString Lib "libnotes.so" Alias "OSLoadString" (Byval hModule As Integer, Byval stringCode As Integer, _
Byval retBuffer As Lmbcs String, Byval bufferLen As Integer) As Integer
Class RemoteConsole