Lotus Notes FAQ Visit Our Sponsor!


Lotus Notes Frequently Asked Questions
(Notes/Domino 5.x)

A. Administration Tips


1. How do you update a Stored Form in old documents?

2. How do you get rid of inactive sessions on a server?
3. How do you convert Word files to Notes format?
4. Can Notes be attacked by Viruses?
5. Why is email address type-ahead so slow compared to R4?
6. When Are Database Subscriptions Checked?
7. How do you set the outgoing domain name in the SMTP MTA on a per user basis?
8. Why aren't laptop user's database designs being updated?
9. Is Notes Year 2000 Ready?
10. Why isn't my @DbLookup background macro running properly?
11. How do you bypass Enforce ACL DB security?
12. How do you run the Compact process on a schedule?
13. Can you support multiple SMTP domains using the SMTP MTA?
14. How do you warn users that a server will be shut down?
15. How do you revert the .nsf ODS back to R4?
16. How do you fix documents with bad ReaderNames fields?
17. How do you specify a new location for the desktop.dsk file?
18. What can the Lotus SMTP MTA do to prevent SPAM?
19. What Virus scanning packages are available for Notes?
20. How do you remove Stored Forms from documents?
21. Why do users get notified of new mail even though they don't have any?
22. What would change the list of servers I see in the Database Open dialog?
23. What TCP/IP port does Notes use?
24. How do you run Notes in "Kiosk" mode?
25. What can be done to optimize database performance?
26. Why can't users with Depositor access create documents even though I have enabled Public Access on the form?
27. How do you make a list of all groups a person is in?
28. Why do new documents not show up in views after a recent server crash?
29. How do you turn off Notes crash dumps (notes.rip files)?
30. How do you keep Notes from being started for mailto URLs?
31. Can you use the SMTP MTA over a dial-up link?
32. Can I set the default ACL on the N&A Book to Reader?
33. Can you keep multiple versions of Notes on the same system?
34. Can you add a database icon which launches a program?
35. What programs will back up Notes databases without needing a Notes server shutdown?
36. How do you get rid of all the deletion stubs in a database?
37. How do you get Notes to rebuild corrupted views?
38. Who can I call to find my local reseller and licensing information?
39. How do I get rid of the "Can't open view $DirectoryAssistance" error?
40. How do you fix the Mail Archiving Agent so it keeps documents in the right folders?
41. How do you manage ACL information across an organization?
42. Can fields be added to the N&A Book?
43. How do you make the infobox reappear if it doesn't show up?
44. How do you install the Notes client without user intervention?
45. How do you put a Notes Database on a CD?
46. Can you run Notes 4.6 and 5.x clients simultaneously?
47. What is involved in deploying Notes to International users?
48. How do you create a database that is usable as an address book for name lookup?
49. How do you move databases onto a different drive without the user knowing about it?
[<a href="#NT00000FC2">50. How can I use a POP3 client, such as Netscape or Eudora, to
access my mailbox in Notes?
</a>]
51. How do you unhide a database design?
52. How do you prevent groups from being expanded when sending mail?
53. How do I get rid of the encap2.ond attachment on outgoing Internet mail?
54. How do you shut the server down for backups?
55. How do I add additional N&A books to the address lookup dialog?
56. Are there any large-scale deployment guidelines?
57. How do you update the SmartIcons on all your users' workstations via LotusScript?
58. How do you add Quoted Reply support to Notes' mail templates?
59. Why won't the incremental installer work?
60. How can you have multiple users on one workstation?
61. Can you have specific notes.ini files per user?
62. How do you change how long logs are kept in log.nsf?
63. How do you limit the size of users' mail boxes?
64. How do you set up remote users with a local replica of a new database?
65. How do you refresh Private View designs on clients?
66. Why does my mail say it is sent from someone else?
67. How do you get the Notes R4 workspace in R5?
68. Can you run console commands from a server program document?
69. How do you add a disclaimer/signature to all outgoing SMTP mail?
70. Can you run scheduled server commands?
71. How do you convert an R5 database back to R4 format?
72. What are .IIB files?
73. Can Domino prevent MS viruses from getting into user's mailboxes?
74. Are agents failed over when clustering?
75. Can you force a messagebox for broadcast messages?
76. Why is a user not getting the proper roles?
77. Why do I get att1.unk or winmail.dat attachments?
78. Where is the R5.x fixlist?
79. What do I get "Database must be compacted to support the use of @AllChildren or @AllDescendents in a formula" errors?
80. How do you move a Domino server to new hardware?
81. Why do HTML/MIME messages arrive w/ images at the bottom of the message instead of inline?
82. What encryption is used by Notes?
83. How do you always show the preview pane in a user's mail database?

84. Why is outbound SMTP mail stuck in mail.box on my Windows Domino server?
85. How do you get the server to recognize changes to groups immediately?
86. Can you run SpamAssassin on a Notes server?
87. Can users recall messages they've sent?
88. Can you forward a copy of a user's mail and keep it in their mailbox?
89. How Do You Set Up Failover for Outbound SMTP Mail?
90. Why is my Notes client having trouble replicating over satellite links?
91. Can you have an Apache server handle Domino URLs on a different box?
92. How do you enable folder references for a database?
93. What can I check if my server is running too slow?

B. Books and Magazines


1. Books for Notes/Domino 5.x
2. IBM Redbooks
3. Helpful Non-Notes Books
4. Lotus Notes Magazines

C. Domino


1. Can you force a user to log in before using a database?
2. How do you replace the "No Documents Found" message in an empty view?
3. Is it possible to run a Domino server on a stand-alone PC?
4. How do you add a button that clears the fields in the form?
5. What URL do you use to create a new document in a database?
6. How do you reopen a saved new document in read mode?
7. Can you prevent the browser from prompting for a password when you use multiple web servers for your site?
8. How do you make parts of a document visible only to Web users or Notes users?
9. Can Domino use directory links to reach databases?
10. How do you customize error messages?
11. How do you display the number of search results on a page?
12. How do you reference view names with "/" and "\" in them?
13. Can you do a Query by Form?
14. Can you set Notes fields from JavaScript?
15. How do you use a URL to reference a specific document in a view?
16. How do you pass parameters to OpenAgent?
17. Why do Cascaded NABs no longer work for web authentication?
18. Can you customize the "Deleted" message?
19. Can you have Domino search a specific view instead of a database?
20. How do you delete the current document?
21. How do you validate and jump to fields which have validation errors?
22. How do you prevent people from deleting file attachments?
23. How do you remove the Domino-generated Navigation Bar from Views?
24. How do you decode parameters in URLs?
25. How do you set up Gnu JSP and Tomcat?
26. Can you create field help on a web browser?
27. Can an X.509 certificate from another CA be used with Domino?
28. How do you improve performance to web clients?
29. How do you decrease the download time for the Notes Java applets?
30. How do you remove Domino's default submit button?
31. Can you display a text field as a TEXTAREA?
32. Can you do banner ads with Domino?
33. How do you detach a file submitted by a web browser?
34. How do you add a logoff button for web users?
35. How do you make user registration immediate?
36. How do you refer to CGI variables in a $$Query*Agent?
37. How do you delete a document by the UNID?
38. How do you set up a field to autowrap when text is typed in a browser?
39. How would you secure a Domino server?
40. Can you automatically refresh when a keyword field is changed?
41. How do you prevent people from submitting a form multiple times?
42. How do you add a Javascript button which validates the form and then submits it?
43. How do you set a Cookie?
44. How do you make a field look like a password field?
45. Why is tabbed table data lost when I switch to a different tab?
46. When do you have to pay for Client Access Licenses (CALs)?
47. What @Command do you use to delete the current document?
48. Can you automatically expand sections in documents?
49. Can you change the Twistie graphics in Notes Views?
50. Are @PostedCommands Supported?
51. How do you access fields on a Parent document from an unsaved response doc?
52. How do you get rid of the margins in frames?
53. Why do you need Author access to do a search on a database?
54. Can you make a link that lets the user jump back two web pages?
55. Can Domino forms be mail-enabled?
56. Can you have a single URL that opens the user's mailbox?
57. How do you pass variables into a form via URL's?
58. Why do I get SSL errors when using MSIE?
59. Can you change the look of the search input form?
60. Can views be shown to web clients with the Notes V4 UI?
61. Can you get rid of Domino's tags?
62. How do you make a Domino site searchable by web search engines
63. How do you add context-sensitive help on Domino web pages?
64. What companies will host Domino web applications for a fee?
65. How do you open the About This Database document with a URL?
66. How do you select multiple documents in a view and run an action button on them?
67. How do you dynamically open a single category view?
68. How do you jump back to the current view from the current document?
69. How do you handle field inheritance when composing from the Web?
70. How do you create a document access counter?
71. Does Domino support Server-Side Includes (SSI)?
72. Can you attach files to a document using a web browser?
73. How do you make a button do a document refresh?
74. Can you control the HTTP headers for the output of an agent?
75. How do you re-enable WebSphere integration after a Domino upgrade?
76. Where is the API for the View and RTFapplets?
77. How do you log out a user and jump to a particular URL?
78. How do you hide attachments uploaded via the web upload file field?
79. How do you take full control of HTML generation from Domino?
80. How do you change the twistie graphics?
81. How do you check for the browser type using JavaScript?
82. How do you remove the Domino version number from the generated HTML?
83. How do you get the current user name in LotusScript?
84. Can you have custom login forms per database?
85. How do you create a DHTML Calendar Control?
86. How do you make onSubmit work with keyword refresh?
87. Can you launch the Notes client from a web page?
88. How do you display a list of response docs on the parent document?
89. Why won't views/richtext display using Java applets in MSIE?
90. How do you get rid of the ecblank.gif in generated HTML?
91. How do you switch tabs in tabbed tables?
92. How do you handle "Allow Values Not In List" dialogs on the web?
93. How do you get the relative path to the database for web URLs?
94. Can You Do AJAX Applications with Domino?
95. Can You Run PHP Pages on a Domino Server?
96. How do you make a database open a form by default from the web?

D. Education and Training


1. Computer Based Training
2. Virtual Classes via the Internet
3. Lotus Education Helpline

E. FTP Archives


1. Notes Utilities
2. Notes Related Programs or Information

F. Mail Gateways


1. OfficeVision and SNADS
2. PalmPilot
3. FAX
4. POP3
5. Migration Tools
6. MS Exchange <-> Lotus Notes
7. NetTalk (X.500, LDAP, IMAP, Exchange, cc:Mail)
8. Windows CE/Pocket PC/Windows Mobile
9. Notes <-> Rex Organizer
10. Outlook to Domino

G. Mailing Lists


1. LNotes-L
2. DominoLinux
3. Oklahoma State Notes-L
4. NotesMac
5. Oklahoma State Domino-L
6. NotesMTA-L
7. Portugese Notes Users Mailing List
8. David Stephens' Lotus Product/Event News
9. LNotes-J
10. Yahoo LNotes-L Group
11. Domino on iSeries (AS/400)
12. LNotes-L on Yahoo

H. Notes Platforms


1. How do you start Notes automatically on bootup in Solaris?
2. How do you set up a Digiboard under OS/2?
3. How do you change the new mail sound on a Mac?
4. How do you set up server proxying through MS Proxy Server?
5. Which file system should be used for the Notes server?
6. How do you install R5 on Linux?
7. How do you tune the operating system for running Notes?
8. Which platform is best for a Notes server?
9. How do you get NT to reboot automatically after the Blue Screen Of Death?
10. How do you generate a core dump for IBM to look at?
11. Where can I find info on Mac-specific (not Notes-related) problems?
12. What is a good entry-level AS/400 system?
13. How do you back up the server automatically?
14. How do you get the Notes server to run in the background?
15. Why can't Notes clients see my new Notes server running IPX?
16. How do you set up NetBIOS?
17. How do you change the new mail tune under NT?
18. How do you determine the NT Service Pack Level using LotusScript?
19. How do you set up the modem port for Solaris 2.x?
20. How do you run the Notes server in the background but still be able to control the console?
21. Can you run the Notes Client on Linux?
22. Can you run the R5 client on OS/2?
23. Why do I have a JVM problem running httpsetup?
24. How do you install and secure Domino on Linux?
25. What are common useful commands for the AS/400?
26. How do you get LS:DO working on Linux?
27. How big an AS/400 do I need for Domino?
28. Do I have to install the Notes/Domino Server on Windows Server?

I. Programming Tips


1. Where can I get the Notes 4.6 LotusScript Class Chart?
[<a href="#NT00000932">
2. Why don't bitmaps display properly on some systems?</a>]
3. How do you write DbLookups so they work on a local database and on the server?
4. How do you display a button next to a field only when editing?
5. How do you restrict a field to contain alphanumeric characters only?
6. How do you validate that a field has alpha characters only?
7. Can you have views based on the current user name?
8. How do you categorize and count the number of documents created in a particular week?
9. How do you reduce database size by deleting unused fields?
10. From a response document, how do you update a field in the parent document?
11. How do you delete a profile document?
12. Can you have an agent send mail as a specific person?
13. How do you get the directory the current database is in?
14. How do you automatically copy an ACL from a template into a new database?
15. How do you display a number field with leading zeroes?
16. How do you add more action buttons than fit on the display?
17. How do you prevent a form from prompting to save it?
18. How do you automatically filter mail in Notes?
19. How do you create a view action button that creates responses to only work on main documents?
20. Can you start a different navigator depending on the user role?
21. How can you tell if a field has been changed in LotusScript?
22. Can you inherit fields from parts of the same form?
23. How do you do a mail merge using info from existing documents?
24. How do you generate sequential document IDs?
25. Can you show FTSearch documents with a specific view?
26. How do you make a view to use for checking for replication conflicts?
27. How do you add an Internet-style signature at the bottom of your mail messages?
28. Can you access the Clipboard in Notes?
29. How do you save a document, then create a new document in its window?
30. How do you force the value of a field to be unique?
31. How do you find the positions of a string in a text list?
32. How do I get the week ending date for a specific day?
33. Why does @Explode only give me the first item?
34. How do you delete Environment variables from the notes.ini file?
35. How do you prevent people from viewing with a different form and saving the result?
36. Can you use @UserName in a view?
37. How do you sum number fields which have not been edited and initialized?
38. Can you work around some of the size limitations in LotusScript programs?
39. How do you synchronize fields between documents created with two different forms?
40. How do you automatically format phone numbers?
41. How do you select only Response documents in a view?
42. How do you validate a credit card number?
43. Can you make a popup calendar in Notes?
44. How do you get the current access level of a user?
45. Can you open a view in full screen mode from a Navigator?
46. How do you generate a subset of list values based on the contents of another list?
47. How do you keep a running history of all entries in an RTF field?
48. Can you use @Functions in LotusScript?
49. Can you use views from the Mail template in your own databases?
50. How do you compare date/time fields using Lotuscript?
51. How do you go to the last document in a category using Lotuscript?
52. Why does my agent fail on the server with a "Error loading USE or USELSX module" error?
53. How do you create mailing labels in Notes?
54. What are the Unix syntaxes for calling DLLs from LotusScript?
55. Can you dynamically select documents per user without using a ReaderNames field?
56. How do you display documents created with a form using a layout region?
57. Why doesn't NotesUIDocument.GetFieldText return the alias for a keyword selection?
58. Why doesn't my "If documents have been created or modified" agent execute immediately?
59. How do you insert a new line in a Rich Text field using a macro?
60. How do you set the server to run agents on with a hidden database design?
61. How do you sort a document collection?
62. What HelpDesk products are available for Notes?
63. How do you force a user to use a button to save a form?
64. Can you start a program in Notes and wait for it to finish?
65. How do you access a specific element of a multi-value field?
66. How do you prevent orphan response documents?
67. How do you find out what Roles a user has in the current database?
68. How do your control an OLE-VBA object in LotusScript?
69. How do you add a response's doclink to a parent document?
70. How do you track who changed a critical field?
71. How do you find the exact version number of Notes?
72. Where can I get more information on Java access to Notes?
73. How do you put a popup calendar in a layout region?
74. How do you operate on the currently selected documents in LotusScript?
75. In what order do @Commands execute?
76. How do you display progress to the user via LotusScript?
77. How do you convert a numerical value to the equivalent written text?
78. How do you open a document in edit mode if it exists?
79. How do I remove erased fields that keep appearing in the Add Fields window?
80. How do you retrieve a column total for a category?
81. How do you sort and categorize a view based on months in chronological order?
82. Can you dynamically change the color of the form?
83. Can you open a Navigator using Lotuscript?

84. How do you do @Explode in LotusScript?
85. Can you launch a URL without using InterNotes?
86. How do you get the date for Easter of a given year?
87. How do you hide the design of a database, but let the user see field names?
88. Can you access Win32 registry keys in LotusScript?
89. How do you launch an embedded object using LotusScript?
90. How do you debug into the QueryModeChange and QuerySave events in LotusScript?
91. How do I refresh a document's fields after one field is changed?
92. How do you change the title of a dialog box?
93. How do you remove an element from a Textlist field?
94. Is there any way to prevent the user from deleting parent documents with child documents?
95. How do you avoid error messages with DBLookup?

96. How do you find the elements which are unique to a list?
97. Why don't my changes to a Rich Text field show up immediately?
98. How do signatures and sections in a form work?
99. What does the @Db NoCache parameter do?
100. How do you generate unique document numbers?
101. What happened to Tools\RefreshFields that was in Notes 3.x?
102. How do you do a data import/merge using Lotuscript?
103. How do you lock a document that is being edited?
104. How can I see if the directory exists using LotusScript?
105. How can you tell if a view is Private?
106. How do you check if an RTF field is empty?
107. How do you log off a Notes user so you can force user revalidation?
108. Can you get MSIE to understand "notes://" URLs?
109. How do you calculate the week number in a year of a given date?
110. How do you create response documents from a navigator hotspot?
111. How do you provide context-sensitive help for your database?
112. Can you get a filename from the user in Lotuscript?
113. How do you make a Computed For Display Rich Text Field?
114. How do you look up all the people in a Group?
115. How do you make dynamically sized tables?
116. How do you send mail based on whether a field is modified?
117. How do you execute DOS commands from a formula?
118. How do I calculate the number of weekdays between two date fields?
119. Can I look up Multiple Keywords using @Db functions?
120. How do you prevent LotusScript errors when handling deletion stubs in document collections?
121. How do you monitor your own threads in a discussion database?
122. How do you notify users when documents are modified or added to a database?
123. How do you force the user to click an Edit action button to edit a document?
124. How do you copy all parts of a script from one form to another?
125. Can I lookup Rich Text using @Db functions?
126. How do you change fields based on the state of a separate keyword field?
127. How do you keep doc.send() from crashing a background agent?
128. How do you notify the author of a document when a response has been composed?
[<a href="#NT00001052">129. How do I make the "loser" of a replication/save conflict be the
"winner"?
</a>]
130. How can I control whether the @Db Function returns a list?
131. How do you return custom data types in LotusScript?
132. Can you create Shared Actions?
133. Can you use regular expressions for string matching?
134. Can you run an Agent from LotusScript?
135. How do you create Names, Readers, Authors fields in LotusScript?
136. Can you implement exclusive locking across replicated databases?
137. How do you do @MailSend in Lotuscript?
138. Can you dynamically hide/unhide sections of a form?
139. How do you update a field in response documents after it is changed in the parent document?
140. How do you refresh RichText fields in a UI document?
141. How do you create a preview pane in a framed UI?
142. How do you install COM?
143. How do you convert a time field to display as military time?
144. How do you display a custom image in a Notes view?
145. Can you stop the refresh view indicator for displaying if you use @Today in a view?
146. How do you load different LSX/DLLs based on which platform you are on?
147. How do you check if a document is a deletion stub?
148. Why do I get an "Object Variable Is Not Set" or "Variant is Not Set" error?
149. Is there a @Replace equivalent function in LotusScript?
150. How do you prevent jagged right table edges when merging/splitting cells?
151. How do you synchronize custom databases with PDAs?
152. What Are Domino's Field Size Limits?
153. How do you output a PDF from Notes?
154. How do you create a NotesDocumentCollection?

J. Programming Tips - LotusScript


1. Can LotusScript operate on Private Views?
2. Can you add a database to the replicator page?
3. Can you refresh a document in the Notes client after changing a rich text field?
4. How do you track who deleted a document?
5. How Do You Run Console Commands From Lotuscript?
6. How do you find out if a document has been foldered?
7. How do you open a File Dialog in LotusScript?

K. Programming Tips - @Formula


1. How do you scan an image into a rich text field using a button?

L. Web Sites


1. Companies with Notes Applications
2. Sources of Notes API Information
3. Local User Groups
4. Notes Related Web Sites
5. Mirrors Sites for the Notes FAQ
6. Non-Notes Web Sites
7. What Notes Related RSS Feeds Are There?


How do you update a Stored Form in old documents?

First, remove the old form using this technique.
Then, refresh all the affected documents using this technique.

How do you get rid of inactive sessions on a server?

On the server console, execute:

SHOW USERS DROP

This drops all inactive connections on the server. After you do that and do a regular Show Users, you will see no one or only the currently active users who are actually on the system right now. It should wipe out all the old connections, but if you do it and still see a connection with anything but 0 next to it, it's a bad or phantom session and is indicative of other problems.


How do you convert Word files to Notes format?

There is a product called Hyper*Ink (formerly called Lexstyle Publisher) from CoExtant (formerly Pantano Genesis) which can batch convert formatted Word document into hyperlinked Notes documents. Contact them at [email] sales@coextant.com.

Notes:Import Document from Pembroke International also will do this, but cannot automatically generate multiple linked Notes documents for each chapter of a Word document.


Can Notes be attacked by Viruses?

Here is a useful posting by [email] Christopher Feller:

"...Notes is an entirely different paradigm. One of the reasons viruses and attacks on internet-based systems happen so frequently, is that the initiators are anonymous. They don't have to worry about retribution or punishment. However, you don't attack a Notes server anonymously like a Firewall or FTP server. You can't even begin to touch a Notes server unless someone has created an ID for you. And as soon as an ID exists, there's an electronic trail to follow, I don't care what fields you delete.
Someone creates an anonymous mail-bomb? Fine. I'll just trace through all the servers listed in the RouteServers field to find where the initial mail came from. Then I'll check the RouteTimes/PostedDate and compare that to the Notes Log to see when it was routed through that server. Then I'll check to see who was logged in and bust them.
Worried about attacks on your N&A? Don't give anyone greater than reader access, and control the certifier tightly. Don't let just anyone create replicas/copies on the server. Also, place a mail-paste macro that does an @DocumentDelete in the N&A. (This will keep anyone from routing anything nasty to the N&A by using Mail-In database documents or by setting the mail database destination of a user in the main or secondary N&A book to be the N&A itself.) Finally, mark all documents in the
N&A as read and check the database for unread documents on a periodic basis from the local workspace. If anything new or changed is there (even if it doesn't show up in a view) you'll find it by pressing that Tab key. (For those people who are worried about a disgruntled employee making design changes to documents or forms, inherit the N&A design from an "approved" template nightly and run a nightly background macro to check for documents that have mysterious or "non-approved" form names). Oh, and don't forget to setup statistics and event reporting!

My point is simply this: due to the way Notes was designed, access is always "granted", not implicit. So, no matter what, there's always a record of activity somewhere and there always a way to deny that access.

If you have your security set up sensibly, your logging turned up to the max, and train your users to look at buttons before pressing them (highlight the button and choose Edit->Button) then you really don't have much to worry about. If you ever do encounter anything strange, you'll be able to trace it with the information contained in the offending document. Don't let panic mongers scare you away from Notes!"


Why is email address type-ahead so slow compared to R4?

There are two workaround for this so far:
1) install a directory catalog on the system and have it do lookups in this
2) type a comma (",") when you want it to auto-complete the name

It will hopefully be fixed in a future version of R5.

When Are Database Subscriptions Checked?

They are checked according to your mail poll interval.


How do you set the outgoing domain name in the SMTP MTA on a per user basis?

This technique, which can be used to host multiple domains provided you have unique names across all the domains, applies to the Lotus SMTP MTA 1.05 and higher:

You can edit the short name field in the user's Person document to include the domain name. For example, if your domain is "company.com", you can enter the user's name as "user@another.com" and the mail will be sent with that as a reply address.

To be able to receive mail from more than one domain, be sure to add the other domain to the Internet Domain Suffix field in the Global Domain document.


Why aren't laptop user's database designs being updated?

Check that the Server is given at least designer access to the Local database. A frequent error occurs like this. The database ACL is set up this way:

Default {Editor}
LocalDomainServers {Manager}
OtherDomainServers {Editor}
Admin {Manager}

Since the Server is usually in the group LocalDomainServers, it has manager
access when being evaluated against the Server's N&A Book. The problem occurs
when the Laptop user makes a replica of the DB. On the laptop, the user has a
local N&A book which is used to resolve Group Names when evaluating the ACL
when it replicates with the Server. The Server is usually not a member of the
group LocalDomainServers in that private N&A book, therefore no design changes
are passed when the replication occurs.


Is Notes Year 2000 Ready?

From Lotus' Knowledgebase Article#147238:

Lotus Notes is ready for the year 2000. In fact, support for the year 2000 has been part of the Notes architecture from the very beginning of its development. Therefore, all Notes releases, beginning with Release 1.0, fully support all year 2000 date functions, and no human intervention is necessary for Notes to continue functioning correctly when we move into the year 2000.

When discussing the impact of year 2000 dates in Lotus Notes, there are three areas of Notes date functionality to consider. These are:

1. Date entry.
2. Date calculations.
3. Notes server time synchronization.

Below are descriptions of each of these areas and explanations of how Notes handles each:

1. Date entry.

Since Release 1.0 of Notes, it has been possible to enter dates for the year 2000 and beyond simply by typing all four digits of the year. For example, "1 1 2000".

For all Notes releases prior to Release 4.5, if only two digits are typed in for the year, Notes assumes that the user means the date within the base century 1900. For example:

If the date entered is "1 1 20", Notes releases prior to Release 4.5 will internally store the year as "1920".

Beginning in Notes Release 4.5, if only two digits are typed in for the year and the two digits are a value between 50 and 99, then Notes will assume that the year is within the base century 1900. If the two digit year value entered is between 00 and 49, then Notes will assume that the century is base 2000. For example:

If the date entered is "1 1 97", Notes will internally store the year as "1997". If the date entered is "1 1 00", Notes will internally store the year as "2000".

This new feature in Notes Release 4.5 will allow data entry to be more intuitive for users as we move into the next millennium.

The only place where Notes does not make this assumption is with the @Date function. If you enter an @Date formula with a year as two digits, Notes assumes you mean the literal year that is entered. For example, @Date(94;3;16) will evaluate as 03 16 0094, when you probably intended @Date(1994;3;16) which will evaluate as 03 16 94. This is true in all Notes releases, including Notes Release 4.5.

2. Date calculations.

All calculations using pre- and post-year 2000 dates in Notes will execute correctly. Notes' internal TIMEDATE structure stores the dates in such a way that they can be manipulated in formulas in anyway, regardless of the year or any other part of the date.

Notes internally supports up to the year 32767 on 16-bit operating systems (limited by a 15-bit year quantity in our TIME structure), and the year 41247 on 32-bit operating systems (limited by a 24-bit Julian date quantity in our TIMEDATE structure), so it is well prepared not only for the year 2000 but for many millenniums beyond that.

3. Notes server time synchronization.

When a Notes server is started for the first time, it picks up the time from the operating system it is running on and then keeps its own time from then on until the server is brought down again. The Notes server already knows how to manage the year 2000, so it will automatically roll its time from December 31, 1999 at 11:59:59 PM to January 1, 2000 at 12:00:00 AM. The Notes server also knows how to work with leap years and daylight savings time, so both of these will also be handled correctly during the year 2000.


Why isn't my @DbLookup background macro running properly?

For any @DbLookup or @DbColumn that is run from a backgound macro, you need to put the ReplicaID of the database where the macro is being run into the ACL of the database which is being used for the source of the lookup.

A background macro is executed by $Chronos which doesn't have an ID by itself. That's why it uses the replica ID of the database containing the macro for authentication.

How do you bypass Enforce ACL DB security?

You can add

Disable_Local_Access_Control=1

to your notes.ini file and restart the server. The server restart is required for the setting to go into effect.


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


Can you support multiple SMTP domains using the SMTP MTA?

Yes, look at the FAQ on changing the outgoing domain name for the SMTP MTA.


How do you warn users that a server will be shut down?

Use the Broadcast message from the server console:

  Broadcast "Server will be shut down in 10 minutes"

This will send the warning message to all users using the server.


How do you revert the .nsf ODS back to R4?

To convert the file format (On Disk Structure) of .nsf databases back to R4's, use "compact -r <filename>". This will convert the database back. The ODS format of template files are the same so this is not needed for templates.


How do you fix documents with bad ReaderNames fields?

If you access the database locally on the server, you can reset all the bad ReaderNames fields by using an agent. ReaderNames fields are only enforced when you access the database from the server. This also applies to AuthorNames.


How do you specify a new location for the desktop.dsk file?

You can add a line to the NOTES.INI file telling Notes where to find the DESKTOP.DSK file. By default it looks in the Notes Data Directory. E.g., the following line :

  DESKTOP=C:\NEWDIR\DESKTOP.DSK

will look for the desktop.dsk file in c:\newdir.


What can the Lotus SMTP MTA do to prevent SPAM?

From a member of Lotus' SMTP team:

The term 'SPAM' covers such a broad spectrum of SMTP mail 'attacks' that there is no easy solution to the prevention of 'SPAM'. The MTA provides rudimentary capabilities to deal with 2 types of 'attack'.

1. Relays
These are messages sent to your SMTP server from an outside source that are not destined for a local recipient, but are for another external SMTP address. This results in your SMTP server 'relaying' the message onto the external destination. Before the explosion of the Internet and the use of DNS to provide 1 hop source to destination routing of messages this was an acceptable practice on the Internet. Infact the original concepts relied on it to provide source to destination routing across many interconnected hosts. However the ability to accept and transfer 'Relay' messages brings 2 problems to the modern Internet SMTP host administrator. Firstly it results in the local organization incurring transfer costs to handle messages that have no relation to that organization. Secondly, as SMTP is in general an unauthenticated protocol, it became a mechanism for the distribution of 'SPAM' mail. A host that was available to relay mail could be used as the 'distribution' point for a broadcast/offensive 'SPAM' message. Often the message would be constructed to make it look like it originated from that host domain, making to original distributor virtually anonymous. As a result, most SMTP servers directly connected to the Internet are configured to provide some measure of protection to deny the ability to relay messages through them. The initial SMTPMTA option to prevent relays was provided as a quick 'band-aid' to a growing problem.

The MTA was designed to accept and support the concept of Relay messages. This was achieved by allowing the Inbound message converter to pass any message that is not destined for a local user to the Outbound Work Queue so that the Outbound Transport could route it out. The first 'band-aid' solution was an ini variable, SMTPMTA_REJECT_RELAYS=1. This ini variable switched off the Inbound Converters ability to perform relays. If the converter found a message that was supposed to be relayed, instead it would flag an error and place the message in state that the DRTask could generate a Non-Delivery report. This solution has a number of limitations:
It cannot distinguish relays from external originators that need to be blocked and messages from local POP/IMAP clients that need to be relayed.
Often the Originator address on a Spam relay message is bogus, so the NDRs often failed an ended up DEAD in either the Inbound or Outbound WQ's, which meant more work for the Administrator to have to monitor and clean up after.
The check only occurred after the entire message has been received, which results in the hosting server incurring the cost of reading in the message.
The check only looks for messages that were destined for the Outbound WQ from the Inbound WQ. There is a mechanism of addressing that can cause an MTA to deliver the message to mail.box, and the Router to deliver it back to smtp.box. This method of addressing circumvents this relay check, and is referred to in the internet as '% hack' addressing.

The MTA team had been aware of the potential of '% hack' addressing prior to the need to reject relays, and the MTA already had an .ini variable to handle messages that had an SMTP address that results in a Notes message that will be delivered back to SMTP. This is another 'band-aid' solution. It works, but there are drawback. The ini variable is SMTP_OCH_REJECT_SMTP_ORIGINATED_MESSAGES=1. When the MTA Inbound Converter creates a message in Mail.Box it writes a field called SMTPOriginator to hold the SMTP specific Originator information for NDR purposes. This .ini variable plays off of this functionality.

It causes the Outbound converter to reject any message in SMTP.BOX that has an SMTPOriginator field (i.e originally came from SMTP). This will block the '% hack' relay case in SMTP.BOX. The downside is due to the way Notes does NDRs. When Notes sends back an NDR for a failed delivery it does not send back a new message. It will send back the original message, with all the original fields, but it adds additional information. This means that Notes NDRs to incoming SMTP messages will have an SMTPOriginator field and will be blocked by this .ini variable.


To overcome most of the limitations of the Reject_Relays ini variable the MTA implemented a new mechanism to handle the denial of relays. This is controlled by the SMTPMTA_ALLOW_KNOWN_DOMAINS=1 .ini variable. This allows the MTA to refuse any message which is deemed to be a Relay during the inbound transport session rather than in the Inbound Converter. For each incoming connection, and each incoming recipient the MTA makes a determination regarding the nature of the Connection and the nature of the Recipient, each can either be 'External' or 'Internal'. An 'Internal' Connection can send messages to both 'Internal' and 'External' Recipients. An 'External' Connection can only send to 'Internal' recipients, 'External' recipients will be rejected. The MTA determines the states as follows. The MTA knows which Internet Domains it is responsible for, from the Internet Domain Suffix list in the Global Domain Document. The Inbound Sessions Handlers have access to this list of domains. When an incoming connection is received the Session Handler can obtain the IP address of the host that is connecting to it from the IP stack. The Session Handler then uses the DNS to resolve the IP address into a host name. Once it has got the host name, it compares it to the list of 'local' domains. If the connecting host is in one of the 'local' domains, then the Connection is deemed 'Internal'. If the host name is not in a 'local' domain, or the DNS was unavailable, or unable to provide a hostname, then the Connection is not to be trusted and is deemed 'External'. As the connecting host goes through the SMTP protocol exchange, the Inbound Session handler checks each recipient address against it's list of 'local' domains. If the recipient is for one of the local domains, then it is considered 'Internal', anything else is 'External'. Once both states are know the Inbound Session handler can decide if it will accept that recipient or reject that recipients. This mechanism solves the previous problems:
It has an ability to distinguish between external relays and internal POP/IMAP clients.
It does not need to accept the message content before decided whether it is a relay or not. This reduces the network traffic and means no NDRs to clean up for the Admin.

There are, however, still some potential limitations:
Because it uses DNS reverse lookups to 'validate' an incoming connection, if local POP/IMAP clients have IP addresses that are not in the local DNS, then they cannot be seen as 'Internal'
If the incoming connection is through some Proxy Servers, this may mask the true IP address of the connecting host from the MTA, so that the MTA always sees the incoming host being the Proxy Server. If the Proxy Servers IP address resolves to a local host name, then all incoming connections are considered 'Internal'
Because the Inbound Sessions handlers do not have access to the Router Routing tables, they cannot make a further determination as to whether a '%hack' type address to a local domain is truly an inbound message or a 'Relay'. As a result this option will not prevent inbound relays using a '%hack' address to a local domain, so the previous .ini variable may need to still be implemented to prevent these relays.

2. Attacks
Whilst a Relay is technically an attack, it is primarily an attack against another system, using the local SMTP host as an unwitting carrier. It is also possible that a connecting system may attempt to deliver a message to a local address that is considered an attack. This maybe in the nature of an offensive message, or perhaps an unwanted message. Oftentimes these messages are repeated over and over continually, resulting in a degradation of the local mail service.
These types of attack are harder to prevent ahead of time, as they often have no distinguishing features that separate them from ordinary acceptable messages. There are 2 possibilities to help combat them though.

The first is to attempt to authenticate the connecting host to determine that it is a 'real' SMTP host and not an Internet client attempting to attack the server. Until true Server-Server authentication using a PKI setup is available there are a couple of mechanisms. The MTA provides one of these, however its usefulness is somewhat in question. When a host connects to the MTA, it provides a HELO/EHLO command with it's own hostname as a parameter. Early on it was thought that this could be used to 'authenticate' the connection, as most 'SPAM' attacks used a bogus name at this point. A number of vendors including the MTA implemented a check of this parameter by taking the incoming IP address, looking it up in DNS to get a host name and comparing the result to the HELO parameter. If they did not match then the connecting host is not to be trusted. Over time it has become obvious that this check is only of little value as there is no requirement that Internet SMTP hosts have the necessary reverse lookup entry in DNS. As a result this type of check can reject connections from otherwise perfectly valid SMTP hosts. Each Admin needs to bear this in mind when considering to implement this option. It is enables via the SMTPMTA_HELO_DOMAIN_VERIFY=1 ini variable.

The second option is the provide a mechanism for admins to 'blacklist' connecting hosts/domains that have previously caused problems so that they cannot cause problems in the future. The MTA provides this via the SMTPMTA_Denied_Domains ini variable. This variable takes the path to a text file as a parameter. That text file should contain a list of hosts that the Admin wishes to refuse connections from, one per line. When this is enabled, the first Inbound Session Handler will take this list and perform DNS lookups to turn it into a list of IP addresses, which is then shared with all the other handlers. Each incoming connection is then compared to the 'blacklist' of IP addresses and the connection refused if there is a match.


As can be seen the MTA provides some basic measures for 'Anti-Spam' however it is by no means complete and Admins should look to R5 for a more complete implementation and ongoing mechanisms. Please check the Release Notes for exact details of all the .ini variables, including correct spelling and in what version they were first supported in.


You can also set up ASSP as an anti-spam proxy by following Andrew Pollack's Blog Entry.


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


How do you remove Stored Forms from documents?

Create an agent with the following code:

SELECT $TITLE="Form Name";
FIELD $TITLE:=@DeleteField;
FIELD $INFO:=@DeleteField;
FIELD $WINDOWTITLE:=@DeleteField;
FIELD $BODY:=@DeleteField;
FIELD $ACTIONS:=@DeleteField;
FIELD FORM:="Form Name";

Notes V4 has a new $ACTIONS field that must be also deleted.


Why do users get notified of new mail even though they don't have any?
The database compaction process on the server will cause the new mail flag to be set incorrectly. Turn this off and the false new mail signals should stop.

If the new mail notification indicator stays on, the NewMailSeqNum=X variable in the Notes.ini file also may have gotten out of sync with the server. Shut down Notes, erase the "X" part of the variable and then restart Notes.


What would change the list of servers I see in the Database Open dialog?

When you do a File/Database/Open, Notes will show you the servers for any database replica icons on your workspace. If you have renamed a server, it will continue to show up as long as you have an old replica icon from the old server on your workspace.
If you select "Other...", it will show you all servers known by your home server.


What TCP/IP port does Notes use?

Port 1352


How do you run Notes in "Kiosk" mode?

Adding "/kiosk" to the Notes command line will bring Notes up without menus. Unfortunately, this clips the top of action buttons currently and you can still use the mouse to grab the Notes window, so it is not as useful as it could be.
This appears to be fixed in Notes 4.61 and above.


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)"))

for the formula. Editing documents will take just as long but document readers will notice a big improvement. The example above is from a keyword format formula.

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

Why can't users with Depositor access create documents even though I have enabled Public Access on the form?

This can happen if you have any @DbLookups in fields on the form. Even if you enable users to have Public Access to the form and to the views used by @DbLookup, you will have to give Reader access to the Replica ID in the database to the ACL. For example, you would add an ACL entry of "85255CEB:0032AC04" with Reader access.


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" 

so you avoid false hits on the ListOwner and LocalAdmin fields.

And another way using the Notes API from agorlenko@manu.com but this only works on R5+:

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


Why do new documents not show up in views after a recent server crash?

Running UPDALL -R should fix these views. However, this doesn't work all the time.

When a server crashes, views that were marked for re-indexing and were queued for UPDATE tend to not be re-indexed. That can be a lot of views. Apparently they think they're indexed and don't mark themselves to be indexed again.

Tell anyone who thinks something hasn't been updated to do a SHIFT-F9 while in the view that seems affected (not from their workspace).


How do you turn off Notes crash dumps (notes.rip files)?

Disable Quincy (the crash dump program) by renaming the executable, QNC.EXE in the Notes directory. You can also uninstall Quincy using the command line "qnc -u".


How do you keep Notes from being started for mailto URLs?

This applies only to Windows95 and Windows NT (from a MS tech support article).

Set Microsoft Internet Explorer Options
1) In Microsoft Internet Explorer, on the View menu, click Internet Options.
2) On the Programs tab in the Messaging section, click to select Microsoft Outlook as the default mail program, and then click OK.

Set the Mailto Protocol
1) Double-click the My Computer icon.
2) On the View menu, click Options.
3) On the File Types tab click to select, URL:MailTo Protocol from the Registered File Types, and then click Edit.
4) In the Edit File Type dialog, click Edit.
5) Under Actions, click to select Open, and then click Edit.
6) Verify that the "Application used to perform action" reads "<drive>:\<path>\Outlook.exe" -c IPM.Note /m "%1". For example:

  "C:\Program Files\Outlook\Office\OUTLOOK.EXE" -c IPM.Note /m "%1"

NOTE: This is only an example of an Outlook.exe application path. Your may vary. Check to make sure it is correct on each PC.).
7) Click OK, Close, and Close.


Set the Notes.ini File Entry
1) Click the Start, point to Find, and then click Files or Folders.
2) In the Named box, type Notes.ini, and then click Find Now.
3) Double-click to open the Notes.ini file in the Search Results window.
4) Type the following line after the [Notes] header:

  NotDefaultMailTo=1

5) Close and save the Notes.ini file.


Can you use the SMTP MTA over a dial-up link?

If you have a dedicated IP address and don't have to worry about leaving your phone line connected all the time, this is no problem. You just have to set up NT or Win95 to automatically redial if the line gets disconnected. Your system is essentially on the Internet.

However, if you have a dialup PPP account with dynamic IP (what most ISP's provide), it is more complicated. You have do several things:
1) Set up Win95 or NT to automatically dial when your Notes server needs to connect to the Internet. Do this by testing it with MSIE or Netscape.
2) Configure the SMTP MTA. Test sending mail and see if Win95 or NT automatically dials up and sends mail to an Internet address.
3) Ask you ISP to save all your mail in a multidrop POP3 account at their site. Your ISP should virtual host your domain (company.com) and hold all mail going to it. Get a copy of POP3Fido and configure it to retrieve mail (this should cause Win95 or NT to autodial when needed).

If you use OS/2 or are having problems with step (1), it is easier to use a Windows-based proxy such as WinProxy. These proxies can be set up to automatically dial the Internet. An additional benefit of this method is that they will also give your company dial-on-demand access to the web or to Usenet newsgroups.

Notes R4.6 and R5 include dialup SMTP support via the ETRN command. However, it is not documented clearly that your ISP has to give you a static IP address and your ISP also has to support ETRN on their mail server.

The reason this is so complicated is that SMTP is a "push" protocol (in Notes parlance). One of the destination SMTP servers is always expected to be available. Usually, your ISP's will set up their SMTP server as a backup in case your system is down. If you bring up your connection "for long enough", the ISP's SMTP server will send all the mail it has collected for you, but this still requires a dedicated IP address. This technique is not as reliable as a "push" (outgoing mail via SMTP MTA), "pull" (via a POP3 account) technique.


Can I set the default ACL on the N&A Book to Reader?
Notes has been designed to have the default ACL set to Author with no create or delete privileges. Without this, people cannot edit the items in their person document like phone number, location, signature, picture, etc. They also cannot delete the ID file from the N&A book after installation. And worst of all, they cannot edit any groups that they have been given ownership of. You should make the default ACL set to Author (with both delete and create turned off).

Can you keep multiple versions of Notes on the same system?

Yes. On an install of a new version, you should:
1) Put the \Notes directory in your PATH.
2) For major revisions (3.x -> 4.x -> 5.x, etc.), keep a separate copy of the \Notes\Data directory because the Notes internal database format changes between each version; new major versions will upgrade old database versions to the latest which can then no longer be read by the old versions. You can point to the appropriate data directory by editing your notes.ini file; you will only need one per major revision (NoteData.3, NoteData.4, etc.)
3) After the install, move the notes.ini file into the \Notes directory.
4) Before installing a new version, rename the directory of the old version to something else (e.g., \Notes to \Notes.463).
5) Install into the same non-renamed directory (e.g., \Notes), but before doing this, copy your desktop.dsk file into this directory so it can be upgraded if needed.

To use a specific version:
1) Make sure you are not running anything from \Notes (e.g., Notes Single Logon which is nsl.exe, the mail check in R5, the Notes client, etc.)
2) Rename the current \Notes directory to whatever version (e.g., \Notes to \Notes.463) it was.
3) Rename the directory with the version you want to \Notes (e.g., \Notes.50 to \Notes).
4) Start Notes.

You have to keep the same directory structure because in later versions of Notes, there is information in the registry related to OLE automation. If you use separate directories for each version, OLE automation may not function correctly.

With the caveat about OLE automation, you can run multiple versions simultaneously if you:
1) do not put the \Notes directory in your PATH
2) run the nlnotes.exe (or the appropriate executable for your platform be replacing the first character in the filename) instead of running notes.exe
From Olivér Zsigmond (Oliver_Zsigmond@lotus.com) comes this tip on how to run the R5 server locally with multiple clients:

Rename dirs of your existing versions of Notes R3, R4.x as described above.
Move your NOTES.INI into the appropriate NOTES.EXE dir.
Modify the Directory line in NOTES.INI to show the appropriate DATA dir.

Install Domino R5 to \lotus\domino
Install Notes R5 All Clients to \lotus\notes

Both directories will have their own NOTES.INI file and DATA dir.

Start Domino server and complete the setup.
Start any of the Notes clients (R3,R4 or R5) from its directory and you can use the local R5 server. You can stop the client and start any other one without stopping the server. The new rules are that you can start only one client and you can't start the client from \lotus\domino because if you stop this client, it will stop the Domino server as well.
Because of Windows Logo requirements, the \data directory structure in R6 is more confusing. There are some files in \lotus\notes\data underneath where you installed the main \lotus\notes executables, but there are also NSF files and the notes.ini file in "\winnt\profiles\<username>\local settings\application data\lotus\notes\data". You can change to a similiar structure as R3/R4/R5 by moving the files and then changing the Directory attribute in the notes.ini to point to the new directory.

In the registry, you should update the DATADIR value in the "HKEY_USERS\<userid>\Software\Lotus\Notes\Installer" key to point to the data directory you used so that the installer knows how to uninstall and update your current files.
In addition, the following two keys should point to the data directory:
"HKEY_LOCAL_MACHINE\SOFTWARE\Lotus\Notes\6.0\DataPath"
"HKEY_LOCAL_MACHINE\SOFTWARE\Lotus\Notes\DataPath"

Note that this will probably break R6's roaming user support. Installing multiple versions of Notes is something usually done by developers, so this should be a reasonable caveat.
Mike Kemp (MikeJKemp@aol.com) uses this technique for running multiple simultaneous versions on NT/Win2K:

So I could respond quickly to user's 'phone queries I had my desktop 'admin' workstation set up so I could run several Notes clients concurrently.˙ The OS had to be NT (or W2K) - definitely not W9x.˙ The set up is along the same lines as in your article, with the difference that the start-up shortcut preferences point to the appropriate nlnotes.exe (rather than the more usual notes.exe) similar to this:

for R4.5 client :-˙ C:\NotesR45\nlnotes.exe =D:\NotesR45\Data\notes.ini

for R4.6 client :-˙ C:\NotesR46\nlnotes.exe =D:\NotesR46\Data\notes.ini

for R5.x client (my main admin tool):- C:\R5Client\Notes.exe =D:\R5Client\Data\notes.ini.

and even (as an experiment):- C:\NotesR33\_lnotes.exe =D:\Notes33\Data\notes.ini.

Note that the R5 shortcut pointed to the Notes.exe and MUST be started first.

With this structure in place I could <Alt>+<Tab> between the various clients at will and so be able to 'talk my callers' through a problem quite rapidly.˙ I could also check the operation of a database development intended for the environment.

The only drawback was the occasional entire machine 'lock-up' if I tried to use the Admin console in more than one client at a time - but this did not affect the servers.

I have not had the opportunity yet to try out this procedure involving ND6.


Can you add a database icon which launches a program?

There are several things you can do to run programs from the Notes desktop:

1) Use a smarticon or a button to launch a program:

  @Command([Execute]; "D:\\dir\\subdir\\executable.EXE"; "parameters")

2) If you are running a program, add this to the PostOpen event of the database script:

  Sub Postopen(Source As Notesuidatabase)
    Dim taskId As Integer
    taskId% = Shell("CALC.EXE", 1)
  End Sub

3) If your application is an OLE program, create a single document (with an embedded OLE object) in the database and set the form to automatically launch the first object in the form. Add this to the PostOpen event of the database script:
  Sub Postopen(Source As Notesuidatabase)
    Dim workspace As New NotesUIWorkspace
    Dim uidoc As NotesUIDocument
    Set uidoc = workspace.EditDocument(0)
  End Sub

What programs will back up Notes databases without needing a Notes server shutdown?

* Cheyenne ArcServe has a Notes agent which lets it back up open databases. The agent requires a "work area" of the size of your largest Notes database because it creates a replica of a database into a separate directory before backing up that database.
* Tivoli TSM (formerly IBM's ADSM) will back up open files and can back up databases incrementally.
* Veritas's Backup Exec with the Open File Option (they also have a Domino agent).
* Quadratec's Time Navigator can do full and incremental backups
* Unix's tar (and ports of it to other platforms like NT and OS/2) will back up open files.


How do you get rid of all the deletion stubs in a database?

All document deletion stubs in a database can be purged by selecting File/Database/Information/Replication and setting the cutoff date ahead two days. Once this is done, the deletion stubs are purged immediately.

NOTE: Depending upon the Notes platform, it may also be necessary to set the purge interval to one day as well as setting the cutoff date ahead. This is not required for all Notes platforms.


How do you get Notes to rebuild corrupted views?

From the server window, run:

load updall dbname -C
load updall dbname -R

Dbname is optional. If omitted it will operate on all db's.
-C builds indexes for all views that have not already been built.
-R rebuilds indexes for all views that have already been built.


Who can I call to find my local reseller and licensing information?

You can call Lotus at 1-800-782-7876 in the United States.


How do I get rid of the "Can't open view $DirectoryAssistance" error?

This was a feature added in Notes 4.5 to enable servers to provide a single person/group directory for multiple Notes domains. However, it is a common mistake to put the standard names.nsf file in the Master Address Book field of the server document. The result is the error message above.
To correct this problem, either remove names.nsf from this field, or create a new database named mab.nsf from the mab.ntf template and put mab.nsf in this field. If you really do have NABs for multiple domains on your server, you can set up Directory Assistance as specified in the on-line help.


How do you fix the Mail Archiving Agent so it keeps documents in the right folders?

There is a sample modified database on The View's web site. What it does is create a categories field with a list of the folders the document belongs in so it can carry the folder location information with the document when it is moved into the archive.

Pawel Bartuzi (pawel.bartuzi@kir.com.pl) suggested fixing Lotus' archiving agents instead.
Modifications made to mail archiving agent ("Periodic Archive", Notes 4.6.5):

In the Declarations section added:

  'PB start
  Dim strlstFolders_g List As String
  'PB end

In the ProcessDocuments procedure added an the very beginning::

  'PB start
  Dim doc_l As NotesDocument
  Dim strUNID_l As String
  Dim lngCount_l As Long

  Forall a In dbSource.Views
    If a.IsFolder Then
      If (Not a.Name Like "(*)") Or (a.Name = "($Inbox)") Then
        Set doc_l = a.GetFirstDocument
        Do While Not doc_l Is Nothing
          strUNID_l = doc_l.UniversalID
          If Iselement(strlstFolders_g(strUNID_l)) Then
            strlstFolders_g(strUNID_l) = strlstFolders_g(strUNID_l) & ";" & a.Name
          Else
            strlstFolders_g(strUNID_l) = a.Name
            lngCount_l = lngCount_l + 1
            If Not session.IsOnServer Then  Print "Reading documents... " & a.Name & " - " & lngCount_l
          End If
          Set doc_l = a.GetNextDocument(doc_l)
        Loop
      End If
    End If
  End Forall
 'PB end

and, an the beginning of the for...loop:

 'PB start
 If Not session.IsOnServer Then Print "Checking documents... " & i & " of " & numDocs
 'PB end

In the ArchiveDocument procedure, add at the very end:

 'PB start
 Dim strFolders_l As String
 Dim strFolder_l As String
 Dim intPos_l As Integer

 If Iselement(strlstFolders_g(docSource.UniversalID)) Then
   strFolders_l = strlstFolders_g(docSource.UniversalID)
   intPos_l = 0
   Do While Not Len(strFolders_l) = 0
     intPos_l = Instr(1, strFolders_l, ";")
     If intPos_l = 0 Then
       strFolder_l = strFolders_l
       strFolders_l = ""
     Else
       strFolder_l = Left$(strFolders_l, intPos_l - 1)
       strFolders_l = Right(strFolders_l, Len(strFolders_l) - (intPos_l))
     End If
     Call docArchive.PutInFolder(strFolder_l)
   Loop
 End If
 'PB end

Remarks:

- Further optimizations can be done to minimize the size of the strlstFolders_g list by creating something like a "folder dictionary": then only folder IDs would be put in the list, it could be beneficial on very large mailboxes with very long folder names.
- Modifications to the "Archive selected documents" agent are basically the same, with the exception that some global variable names differ (docSource->note, docArchive->newnote, session->s, dbSource->sourcedb), also you have to be more careful where you place modifications as there are fewer procedures in "Archive selected..." than in "Periodic Archive" and they are longer.


How do you manage ACL information across an organization?

Notes R4 allows you to set a database's properties so that ACL's are consistent across all replicas.
Notes R5 has built in tools for updating the ACL's across multiple databases.

Percussion Software has a product called Server Admin Plus that will also let you manage and audit ACL information.

Candle also has a system administration tool.

IVES Technologies has a product called ACL Reporter Updater which is a platform independent administration tool that provides security management for enterprise-wide Lotus Notes/Domino networks.


Can fields be added to the N&A Book?

There's no problem with adding fields and views, but don't change anything that is pre-existing. Do all your work in a template, and be very careful with the management of that template. There are two dangers:
(a) losing your modified template due to inadvertant replication from a newly installed server that has a standard NAMES.NTF that is newer than your custome version, and
(b) having two different templates for the NAB on different servers such that $DESIGN on each server re-inherits conflicting designs every night causing a "Design Storm" that can bring your whole network down.

Do not name it NAMES.NTF, or it may be overwritten by a software upgrade. Make sure that the template name is not the default (StdNotesAddressBoook). You can either make it a replica of the original NAMES.NTF, or a copy.

If it is a replica, be sure to remove the original, be sure to let it replicate to all servers, and be especially sure that any time a new Notes version is loaded that you merge any changes in the new version's NAMES.NTF into your template and then delete that NAMES.NTF from your server before you allow the upgraded server to replicate with any other server.

If it is a copy instead of a replica, it is best that you uncheck the setting that allows replication of the template name for your NAB and make sure that only one server in your organization is set up to inherit the NAB design from your modified template.
Just for insurance it might be a good idea to use the ACL or selective replication to insure that your main hub server never accepts NAB design changes from any other server.

For Notes R4 and R5, the preferred way of adding fields to the NAB is to use subforms.


How do you make the infobox reappear if it doesn't show up?

From Lawrence Wagner (lwagn2@dwp.ci.la.ca.us):

METHOD #1:

Using the keyboard:

1. Select File, Database Properties.
2. Hold down the ALT key and press the spacebar.
3. If a menu appears, select Move. If not, type the letter "m".
4. Use the arrow keys (i.e., the up arrow) on the keyboard to move the InfoBox back onto the screen. You should eventually see a dotted line in the form of a rectangle. Once you do, press ENTER. The InfoBox will reappear on the screen.

METHOD #2:

The NOTES.INI variable that is responsible for the position of the InfoBox on the screen is:

Win32InfoboxPos=

If you cannot find the InfoBox, modifying the values in the NOTES.INI to will also make it reappear. The values in this parameter refer to x, y coordinate locations. By changing these to numbers that fit within the pixel resolution (for example, 800x600), the InfoBox will reappear. Examples:

Win32InfoboxPos=441 79

or
Win32InfoboxPos=333 261


How do you install the Notes client without user intervention?

Thanks to mvanlone@bigfoot.com for pointing me at this IBM tech support article:

To automate an install, you create an install response file that includes all the options you want users to have. ˙After you create the response file, you package it with the install files and copy the files to a network for users to download.

These steps describe how to set up a workstation installation so that users only need to click a shortcut to launch SETUP.EXE, with defined parameters in the command line, to install Notes with all the customizations you choose.

1. From the Install directory, type SETUP -R. ˙This action creates the response file, SETUP.ISS, which is stored in your system directory. ˙(Depending on the operating system, this file will be placed in the˙WINDOWS or WINNT directory.)
2. Go through the user setup dialogs, actually completing a normal˙installation. ˙The response file records all the settings you specify.
3. Copy the entire Install directory to a network drive.
4. Copy the response file (SETUP.ISS) into the Install directory on the˙network. ˙The SETUP.ISS file must be in the same directory as the rest˙of the installation files.
5. Right-click the SETUP.EXE file in the installation directory, and˙from the pop-up menu, select Create Shortcut. ˙This will create a shortcut˙to SETUP.EXE in the installation directory.
6. Right-click the new shortcut, and from the pop-up menu, select˙Properties. ˙In the Target field, enter the following at the end of the˙path and file name, making sure to place a space between the SETUP.EXE˙at the end of the path before the below text is added:

  -s -f1 <location of SETUP.ISS file>

where <location of SETUP.ISS file> is replaced with the full path to the file, including the filename.
This action creates a shortcut to run the Notes install program with the automated file. ˙The shortcut can be renamed as desired, but keep in mind that the original SETUP.EXE will still be visible in the installation directory as well. ˙You will want to somehow direct users as to which item in the directory they need to double-click on to run the Notes installation with the automated feature. ˙Although all the installation files must be in one directory, the shortcut can be placed in a different directory if desired.

Alternately, the full command can be entered into the Windows Start -->Run command window as follows:

  <Path>\SETUP.EXE -s f1 <Path>\SETUP.ISS

Note: ˙There is also a -f2 switch which is used to specify the location of˙the log file. ˙The log file is created during the installation˙process and if no location is specified, the log file will be put in the same directory where the .iss file was found.

Please note that the syntax is very important. ˙Extraneous spaces and˙characters will either cause the switch to not work or to be˙misinterpreted. ˙One customer reported that spaces between the switch˙"-f1" and the start of the path caused the switch to not work˙properly.

Example of Correct Syntax: ˙ setup.exe -s -f1c:\myresponse.iss˙-f2c:\logdir\mylog.log

Supporting Information:

When the Notes Installation is run silently using the steps detailed in this document, you will see no indication that the install is running. ˙No program windows are opened, and no dialog boxes or progress bars are displayed. ˙When the installation is completed, the Lotus Product Registration windows will appear on the screen, to be filled out or closed by the user.

Note: ˙For an in-depth look at the methods and options of the˙InstallShield Silent Install, refer to the following URL, at the InstallShield (http://www.installshield.com) web site:

http://support.installshield.com/kb/default.asp?action=Display&documents_id=101901&productname=&category=&code=&documentnumber=Q101901&selectproductname=InstallShield__5&selectcategory=&selectkeyword=&documentnumber2=&old_document_number=&rn_descriptor=&contents=Creating%20a%20Silent%20Installation%20&org=search&onlyOne=yes&date_published=1/1/90


How do you put a Notes Database on a CD?

From Glenn.Thibert@thehartford.com:

The following steps are necessary to put a database onto a CD or other read-only media:

1. Select the database and choose Design - Views and make sure that all views are unhidden (i.e. do not have parentheses around their names). It is important to temporarily unhide the hidden views so that the view indexes for these views can be created (see Step 2 below).

2. Open the database and press CTRL+SHIFT+F9. This key combination will rebuild all of the views in the database. This includes both open and hidden views, as well as server-based or local databases. It is important to build the view indexes before copying the database to the CD or other read-only media as, if they are not created and stored in the NSF file prior to adding it
to the read-only media, Notes will attempt to create them and will not be able to because it cannot write to the media.

Note: If a view is not built, pressing CTRL+SHIFT+F9 will cause Notes to build the view. If the view is already built, pressing CTRL+SHIFT+F9 will cause Notes to update the view, not rebuild it.

3. Create the full-text index for the database if you intend for the database to be queried using Notes' full-text indexing capabilities. You can do this using the File - Full Text Search - Create Index command. This index must be created prior to putting the database on the read-only media for the same reason described for view indexes in Step 2 above.

Note: Most CD mounting software conforms to the ISO 9660 standard which does not allow for periods in directory names. When creating full-text indexes in Notes, it by default creates a directory with the extension .FT (period - FT) which is against the ISO 9660 regulations. For example, if your database is called DATABASE.NSF, then Notes will create a subdirectory called \DATABASE.FT underneath the directory which contains the file DATABASE.NSF.

To workaround this issue, do the following

a. Create another directory which has the same name as the database, but with no extension (i.e. \DATABASE instead of DATABASE.FT). This new directory name must be the same as the database name.

b. Copy all of the files created for the full-text index from the original directory into the new directory.

c. Delete the full-text index files from the old directory name (the name with the .FT extension) and remove the directory from the system.

Notes will now see the new directory and use the full-text index files inside of it. It does not require the .FT extension to be on the directory name. The .FT is only used as a naming convention when creating the directory for full-text indexes so that those directory names wouldn't show up along with the other directory names in the File - Open Database dialog box.

4. Do an operating system level copy (such as using the DOS or OS/2 COPY command) of the .NSF file from the writeable media which you are currently using onto the media which will be used to press the CD or other read-only media. Be sure that you do an operating system level copy during this step and not a File - Database - Copy from within Notes as using Notes to copy the
database will remove the view indexes.


Also, be aware that Notes databases on a CD can only be viewed by the same major version of Notes that the Notes database was indexed with. The view index and full text index are improved with each major version, i.e., R5 can't read R4 DB on CD, etc. To work around this with old CDs you may still want to view, you can copy the .nsf file to your local system, follow the procedure above, then copy all the files onto a new CDR because CDRW drives are so inexpensive now.


Can you run Notes 4.6 and 5.x clients simultaneously?

Yes, you can type these on the command line and change the paths appropriately:
SET NOTESPARTITION=1
START c:\notes\program\nlnotes.exe =c:\notes\data\notes.ini

Note that this is unsupported by Lotus. Use at your own risk, etc.


What is involved in deploying Notes to International users?

From a posting by [email] Kevin Urbanek:

"There are some questions you will need to answer before a decision can be made. First the legal stuff. Legally, a NA ID file can not leave the US or Canada (unless the US State Dept grants you an exception). NA Notes servers can talk to Non-NA Notes servers just fine with one exception, encrypion keys (all keys would need to be International for them to be used worldwide). Note that not all countries allow encrypted data or have rules/laws governing encryption.

Some questions:
1. Do your applications and/or users use encryption regurally? BTW: make sure to check out encryption laws in the different countries (France,Russia South Korea and others have laws governing encryption and the keys)
2. Do your users travel internationally? (i.e a NA Notes ID travels to Europe)

If you want to keep your NA setup that you currently have, when you setup the International users/servers, you will need to create a new Organizational certifier that is International. Even though you can create an International ID from a NA certifier, this International ID still carries enough of the NA encryption info (I do not know exactly what part) to make it illegal to export. So, you would end up with 2 Organizational certifiers, which means you need to cross certify the organizations. You can still use one Domain if you wanted. Depending on number of users, you may want to look at 2 Domains, one NA and one International.

If you answered "Yes" to the above questions, then you might want to think about migrating to World Wide Security (International version) or appy to the US State Dept. for an exemption. If you look to migrating, make sure you plan the migration of IDs and also review the Notes applications you have for encyption and sections. If you keep the naming conventions you have in place, Reader and Author names should not be a problem."


How do you create a database that is usable as an address book for name lookup?
You only need to have the views ($Users), ($PeopleGroupsFlat), and ($PeopleGroupsHier) in your database. You also need the ($NamesFieldLookup) view if you want people to be able to begin typing the name in the To: field and have Notes find it automatically in the address books and fill in the rest.

In the person form, you must include the following fields:

  FirstName (Type: Text)
  LastName (Type: Text)
  FullName (Type: Names)
  MailAdress (Type: Text)
  Type (Type: Text) with default value "Person"

Then add the database to the notes.ini file as a cascaded address book.


How do you move databases onto a different drive without the user knowing about it?

You can use a directory link to put all the databases into what the user sees as a subdirectory in the Notes client. In the Notes data directory, create a file named <subdir>.dir where <subdir> is the name of your subdirectory. The first line in the file is a directory name which can include a drive letter (e.g., "e:\data2"). Lines after the first line are hierarchical names for people that can go through this directory link ("e.g., */MyCompany") so you can use directory links as a security tool.

You can also use a database link. To do this, move the database to your new directory. In the Notes directory where the database used to be, create a file with the same filename as the old database. In this file, put the path to the new location of the database (e.g., "e:\data\db.nsf"). When Notes accesses this file, it will automatically look for the database using the path you specify.

If you are using OS/2, you can install the Toronto Virtual File System (TVFS) from one of the many OS/2 ftp archives. This file system allows you to merge directories and files into a "virtual" directory that you can then use for the Notes data directory.

Note that all of these methods will slow down file access a little, but the slowdown should be negligible.


[<a name="NT00000FC2">How can I use a POP3 client, such as Netscape or Eudora, to
access my mailbox in Notes?
</a>]

There are two parts to this:
1) On the server, load the POP3 Server task with "load pop3"; you can also add it to your "TASKS=" line in your notes.ini file if you'd like.
2) Create a person document for the user and fill in the HTTP/Internet password. The user will have to log in using their user name (fully qualified if you specify a Notes domain) and this password in their POP3 client.

Note that even if these users do not have a Notes ID, there is a Lotus per user charge of $30 for each Domino/POP3 mail user.


How do you unhide a database design?
There are a lot of ways to do this in Notes 3.x, but here are a few:

1) If you have multiple servers, copy the database from one server to another. This will unhide the design in the new copy. The database will still show as hidden, so change the name to a template file(ntf) and create a new database from this template. This will insure the database is truly unhidden.

2) Make the locked database a design template. Create a new database. New database inherits design from template. Refresh design from template.

3) Modify a byte in the .nsf file; this is typically done to hack an application that was sold, so this technique will not be described here.

Lotus provides a database Hide Design tool (implemented in Notes 4.x and 5.x) that secures the database design more thoroughly. It is not possible to unhide a database design in these later versions of Notes without the original unhidden template; i.e., you can't unhide it by modifying a few bytes in the .nsf file. In addition, if the original design included LotusScript files from the file system when an agent or design element was saved, you'll need these files in the right directories to modify the corresponding agent or design element.


How do you prevent groups from being expanded when sending mail?

The group expansion only happens for groups in your personal NAB. You can do the following to disable this expansion when sending mail:

Modify your memo form to include a hidden field named "ExpandPersonalGroups" with Text type and Computed when Composed with a value of "0". This will cause personal groups to NOT be expanded. Changing the value to "1" will cause the groups to expand.

The other solution is to use group alias names, but this technique only works in R3.x. For example, if you have a group named Managers make it Mgrs;Managers instead. Aliases are not expanded. That way, if you want it to NOT expand send the memo to Managers. If you DO want it to expand them, send it to Mgrs.


How do I get rid of the encap2.ond attachment on outgoing Internet mail?

These attachments are used to send Notes rich-text-format messages to other Notes users across the Internet.

In the SMTP MTA section of your server document, set the Message Content field to "Users without Lotus Notes"; you probably have this set to "Users with Lotus Notes". Your users can still manually send fully-formatted messages to Notes users via Internet mail by using Actions/SpecialOptions when creating a new mail message.


How do you shut the server down for backups?

If you are running Notes as an NT service, look at this FAQ instead.

You can use the following command to tell the Notes server to shut down:
notes server -quit
After your backup is complete, issue this command to restart the Notes server:
notes server


How do I add additional N&A books to the address lookup dialog?
In your notes.ini file, you should modify the line that reads "Names=NAMES.NSF" to read "Names=NAMES.NSF,MYNAMES.NSF". This will cause Notes to look up names in both the NAMES and MYNAMES N&A books.

Are there any large-scale deployment guidelines?
For large-scale Notes deployment, standards should be defined for:
* Notes network topology & replication strategy

* Hardware and software configurations
* Hardware and software installation guidelines
* User, group, and server naming scheme
* Notes mail integration strategy
* Notes & non-Notes data integration strategy
* Server management guidelines
* Operations guidelines
* Security and ACL guidelines
* Application design guidelines
* Application implementation guidelines
* Training guidelines
* Support guidelines
* Staffing requirements
* Group naming standards
* ACL standards
* Database location standards
* Establishing test, development and production environments
* Name and Address Book control
* Centralization or distributed ID creation
* Replication strategy


How do you update the SmartIcons on all your users' workstations via LotusScript?

If you put the following code in a button in an email message and attach all the icon files to the same message, your users can update their SmartIcons by simply clicking on the button when they receive the email:

     '======================================================================
     ' Code Documentation
     '======================================================================   
     'Originally Written By: James Fox @ Com Tech Communications
     'Originally Created On: 1/3/97
     'Last Updated By: James Fox
     'Last Updated On: 1/3/97
     
     '======================================================================
     ' Declare Variables
     '======================================================================   
     Dim session As New NotesSession
     Dim ws As New NotesUIWorkspace
     Dim uidoc As NotesUIDocument
     Dim doc As NotesDocument
     Dim rtitem As Variant
     Dim iconPath As String
     Dim retvalue As Variant
     Dim fileName As String
     On Error Goto errorRoutine     
     '======================================================================
     ' Warn User what is going to happen
     '======================================================================          
     x = Messagebox("SmartIcon Installer is about to setup the new Com Tech SmartIcons.  Your current universal SmartIcon set will be overridden with the new SmartIcon set.  Your original set will be backed up to a file called universe.bak.  Press OK to Continue", 1 + 64 + 0 + 0,"SmartIcon Installer")
     If x <> 1 Then
          x = Messagebox("SmartIcon Setup has been Aborted  Thank you.",0 + 48 + 0 + 0,"SmartIcon Setup")
          End
     End If
     
     '======================================================================
     ' Get and Set Icon Path
     '======================================================================          
     iconPath = session.GetEnvironmentString("WinNTIconPath", True) + "\"
     Chdrive Left(iconPath,3)
     Chdir iconPath 
     '======================================================================
     ' Backup current universal Set
     '=====================================================================
     fileName = Dir$(iconPath + "universe.bak", 0)
     If fileName <> "" Then
          Kill iconPath + "universe.bak"
     End If     
     Name iconPath + "universe.smi"  As iconPath + "universe.bak"
     
     '======================================================================
     ' Detach Files in memo (overwriting existing files)
     '=====================================================================     
     Set uidoc = ws.CurrentDocument
     Set doc = uidoc.Document     
     Set rtitem = doc.GetFirstItem( "Body" )     
     notesEmbeddedObject = rtitem.EmbeddedObjects
     If ( rtitem.Type = RICHTEXT ) Then
          Forall o In rtitem.EmbeddedObjects          
               objectName = o.Name
               fileName = Dir$(iconpath + objectName, 0)
               If fileName <> "" Then
                    Kill iconpath + fileName
               End If     
               Call o.ExtractFile(iconPath + objectName )
          End Forall                                        
     End If
     
     '======================================================================
     ' Notify User of SmartIcon Installer Status
     '=====================================================================          
     x = Messagebox("SmartIcon Setup has completed Successfully.  Your original smartIcon set has been saved as Universe.bak.  Please close and restart Lotus Notes to use your New SmartIcons",0 + 64 + 0 + 0,"SmartIcon Setup")
     End     
     
     '======================================================================
     ' This is the general error routine
     '=====================================================================     
errorRoutine:
     x = Messagebox("SmartIcon Setup is Incomplete.  Please advise MIS via e-mail.  Thank you.",0 + 48 + 0 + 0,"SmartIcon Setup")
     Name  iconPath + "universe.bak"  As iconPath + "universe.smi"
     End
End Sub


How do you add Quoted Reply support to Notes' mail templates?

Quoted replies let you precede each line of the mail you are replying to with a ">"; it is a standard way of indicating what you are replying to when replying to Internet mail (similiar to how people use color to indicate their replies in Notes). Here is a button you can add to the forms of the standard mail templates. Add an Action Button called "Quoted Reply" to the following forms: Memo, Reply, Reply with History. This button is hidden when: Previewed for reading, Previewed for editing, Opened for editing. The limitation is that it can only quote up to around 15K worth of text because of LotusScript's limitation with GetFormattedText.

Put the following script in the Click action:

Sub Click(Source As Button)
  Dim uiws As New NotesUIWorkspace
  Dim uidoc As NotesUIDocument
  Dim doc As NotesDocument
  Dim uidocReply As NotesUIDocument
  Dim rtitemBody As Variant
  Dim sBodyOriginal$
  Dim sBodyConverted$
  Dim vntMailDbFile,vntMailDbServer
  Set uidoc=uiws.CurrentDocument
  Set doc = uidoc.Document
  Set rtitemBody=doc.GetFirstItem("Body")
  sBodyOriginal=rtitemBody.GetFormattedText(False,0)
  vntMailDbServer=Evaluate("@Subset(@MailDbName;1)")
  vntMailDbFile=Evaluate("@Subset(@MailDbName;-1)")
  Set uidocReply=uiws.ComposeDocument(Cstr(vntMailDbServer(0)),Cstr(vntMailDbFile(0)), "Reply")
  sBodyConverted=ManipulateReplyText(uidoc, sBodyOriginal)
  Call uidocReply.FieldSetText("Body", sBodyConverted)
End Sub

Function ManipulateReplyText (Source As NotesUIDocument, body As String)
 'Adding > to the begining of each line of the "History text" and
 'Aligning the text Left (wrapping)
  Print "Formatting ""History"" text"
  Dim bd As Variant
  Dim note As NotesDocument
  Dim Header As NotesItem
  Dim dateItem As NotesItem
  Dim InFrom As NotesName
  Dim GetInternetFullName$, HeaderString$, pos%, tmpString$, pos1%, dont%,tmp$
  Dim y%, x%, b%, xx%, xb
  Set note=Source.Document
   'dividing the text to lines and addding the > sign
  If note.hasitem("$AdditionalHeaders") Then
     'starting here: inbound messages seem to have $AdditionalHeaders
    Set Header=note.GetFirstItem("$AdditionalHeaders")
    If Header.values(0) = "" Then
       'GetInternetFullName=note.InheritedFrom(0)
      GetInternetFullName=note.From(0)
      Goto Continue
    End If
  Else
    If Not note.HasItem("tmpAdditionalHeaders") Or
           note.tmpAdditionalHeaders(0)="" Then
       'GetInternetFullName=note.InheritedFrom(0)
      GetInternetFullName=note.From(0)
      Goto continue
    End If
    Set Header=note.Getfirstitem("tmpAdditionalHeaders")
  End If
  HeaderString=Header.values(0)
  pos=Instr(HeaderString,"From: ")
  tmpString=Mid(HeaderString,pos+6)
  pos1=Instr(tmpString,"<")
  If pos1=0 Then 'The full name will appear in (...)
    pos1=Instr(tmpString,"(")
    tmpString=Mid(tmpString,pos1+1)
    pos1=Instr(tmpString,")")
    GetInternetFullName=Mid(tmpString,1,pos1-1)
    dont=True
    Goto Continue
  End If
  tmpString = Mid(tmpString,1,pos1-1)
  pos=Instr(tmpString,|"|)
  If pos<>0 Then
    tmpString=Mid(tmpString,pos+1)
    pos=Instr(tmpString,|"|)
    GetInternetFullName=Mid(tmpString,1,pos-1)
  Else
    GetInternetFullName=tmpString
  End If

Continue:
  Set InFrom=New NotesName(GetInternetFullName)
   ' and starting here: I found that inbound messages had a PostedDate item, Not tmpSentOn
  If note.HasItem("tmpSentOn") Then
    postDate = note.tmpSentOn(0)
  Else
    Set dateItem = note.GetFirstItem("PostedDate")
    postDate = dateItem.Text
  End If
  tmp="On " & postDate & note.tmpSentOn(0) & " " & InFrom.Common & "
wrote:" & Chr(13) & Chr(10) & Chr(13) & Chr(10) & ">"
  y=1
  b=1
  For x=1 To Len(body)
    xx=Asc(Mid(body,x,1))
    If x<>Len(body) Then xb=Asc(Mid(body,x+1,1))
       'Now that we know the current and the next characters we can consider whether they will cause a line feed, so we can insert our ">".
      If xx=10 Or xx=13 Or xx=11 Or xx=12 Then
         'if this combination occurs then we skip the next one so we don't LF twice.
        If xx=10 And xb=13 Or xx=13 And xb=10 Then
          x=x+1
          tmp=tmp & Chr (xx) & Chr (xb) & ">"
        Else
          tmp=tmp & Chr(xx) & ">"
        End If
        b=1
      Else
        tmp=tmp & Mid(body,x,1)
        b=b+1
      End If
  Next
  ManipulateReplyText=tmp
End Function

Why won't the incremental installer work?

This typically happens if you install Notes/Domino optional components inconsistently. E.g., you installed Notes 4.61 with Advanced Services, but then you didn't with 4.62. When you try to install 4.63, it detects some old files from the 4.61 install that are not at the 4.62 level (failing a checksum). You can see which files these are by looking at the UPGRADE.LOG file in the Notes directory. Usually, you can keep deleting these old files and re-running the incremental installer until it works (the installer stops when it detects the first file that fails the checksum).


How can you have multiple users on one workstation?

Each user has to have a separate notes.ini file and desktop.dsk file. There is a freeware utility called SmartSwitcher that does all this for you and provides a nice user interface. It can be picked up by clicking [ftp] here. This only works for Notes 3.x

A few settings (like workspace textured background) are not preserved for Notes 4.x users in SmartSwitcher. There is a commercial utility named MultiUser Logon Utility from Rein&McBride that does handle Notes 4.x.

Another commercial utility that reads the ID files from a database is SwitchID from Sollazzo Consulting.

You can also use location documents in Notes 4.x and higher. Important caveats: 1) users share the same desktop so one user can rearrange icons/bookmarks and totally confuse the other users, 2) they will get false "you have new mail" indications, and 3) the user ID files for all the users will be in one location.

Here are some tips from Laurence Wagner (lwagn2@dwp.ci.la.ca.us) on how to do this:


Do a normal install for the first user, then do the following:
1. Change the User Preferences
Select File / Tools / User Preferences from the menu.
In the Navigator panel, with icons labeled "Basics, International, Mail, and Ports", click on Basics.
There are four check boxes to the immediate right of the Basics icon. Select the box labeled "Prompt for location".
Now when Notes is re-started, it will prompt the user to select a named location document. The original location documents given with Notes are named for a variety of network connections that these users will not need to use, but do not delete them.

2. Copying the Notes ID files to the Workstation
Get these files from your Notes admin. These can go to the Notes\Data directory or a network drive, as long as it will be available to your users. Once on the workstation, each person should log in and reset their password from the default value. This can be done after the location documents are created for each person.

3. Add an action button, labeled "Make Location Doc", to the People view of the LADWP Name and Address Book. Switch to the user's ID file before you run this. The code for the button is as follows:

Sub Click(Source As Button)
  Dim session As New Notessession
  Dim notesdirectory As String
  notesdirectory = session.GetEnvironmentString( "Directory", True)
  Dim keyfilename As String
  keyfilename = session.GetEnvironmentString( "KeyFilename" , True)
  Dim whois As String, realwho As String
  Dim workspace As New NotesUIWorkspace
  Dim doc As NotesUIDocument
  Dim uidoc As NotesUIDocument
  Set uidoc = workspace.EditDocument(False)
  Dim item As NotesItem
  Dim first As String, last As String, mailserver As String, mailfile As String
  Dim