preface xvii
acknowledgments xviii
about this book xix
author online xx
contents overview xxi
how to use this book xxiv
Part 1 Introduction to Notes programming 1
1 Notes programming basics2
1.2 The Notes database 3
1.3 Database templates 5
1.4 Documents 6
1.5 Views 7
1.6 Folders 10
1.7 Navigators 10
1.8 Forms 13
1.9 Subforms 15
1.10 Action bars 16
1.11 The formula language 17
1.12 LotusScript 19
1.13 Agents 20
1.14 Security 20
1.15 Domino 21
1.16 Software design: waterfall or whirlpool? 21
1.17 Summary 23
2 LotusScript basics 24
2.2 The LotusScript code editor 28
2.3 Variables and data types 30
2.4 Looping constructs 32
If/Then/Else 32, While loops 33, For/Next statements 34, Goto and Exit34
2.5 The Notes class libraries 35
2.6 Front end versus back end classes 38
2.7 Event programming 39
2.8 Functions and subroutines 42
2.9 LotusScript libraries 43
2.10 Agents 44
Triggered agents 44, Scheduled agents 45, Manually run agents 46
2.11 Using the class browser 48
2.12 Debugging LotusScript code 49
2.13 Manipulating document collections 51
2.14 Text handling and string manipulation 53
2.15 Summary 55
3 Directory and filename management 56
3.1 Specifying filenames using environment variables 58
3.2 Specifying the current server 59
3.3 Specifying the current server and directory 61
3.4 Summary 63
Part 2 Tutorial--building a Notes 4 application 65
4 A customer support application 66
4.1 Creating a database directory 68
4.2 The document numbers database 69
4.3 The customer database 71
4.4 The calls database 73
4.5 Customer support call form 73
4.6 Generating document numbers 76
4.7 Customer support related call form 79
4.8 Calls by customer view 80
4.9 Customer support over a wide area network 81
4.10 Summary 82
5 Improving the user interface 83
5.1 Find a call by document number 84
5.2 Add a new customer from call form 87
5.3 Display the customer phone number 88
5.4 Status field 89
5.5 Display status as an icon 90
5.6 Adding a navigator 92
5.7 Summary93
6 Finishing touches 94
6.1 Graphical design 95
6.2 Graphical form header and color 96
6.3 Using tables to display fields 98
6.4 Making effective use of hidden fields 101
6.5 Lotus Components 102
6.6 Summary 103
7 Distributing Notes applications 104
7.1 Notes templates 105
7.2 Securing a database using Access Control Lists 106
7.3 A simple quality assurance program 108
7.4 A groupware quality assurance database 108
7.5 Groupware views 117
7.6 Quality assurance roles 119
Procedures for programmers 119, Procedures for testers 120, Procedures for quality assurance administrators 120
7.7 Summary 121
Part 3 Internet programming 123
8 Introduction to Internet programming 124
8.1 Domino 125
8.2 Web client versus full Notes client 130
LotusScript and agents 131, Formulas 131, Forms 133, Fields 134, Views 135, Formatting in forms and views 136, Navigators 136
8.3 Speed of delivery 137
8.4 Text versus graphics 138
8.5 Native Notes versus inline HTML and CGI 138
8.6 The Domino templates 139
Domino Action 139, Domino SiteCreator 141, Domino Merchant 142
8.7 Summary 143
9 Creating a Domino Web site 144
9.1 Installing Domino 145
9.2 Creating your Domino Web site 148
9.3 Internet user IDs 155
9.4 Testing Domino 156
9.5 Creating a home page 157
9.6 Initializing your Web site 158
9.7 Creating hypertext links 160
9.8 Domino universal resource locators (URLs) 166
9.9 Summary 168
10 Domino security on the Internet 169
10.1 User registration 170
10.2 Access Control Lists 171
10.3 Securing views, forms, and fields 173
10.4 Advanced security: secure sockets layer 175
10.5 Notes client versus Domino Web browser security 176
10.6 Summary 177
11 Web user interface development 178
11.1 Basic form-based input 179
11.2 Creating a customized response with $$Return 182
11.3 Creating a customized submit button 184
11.4 Default values and input validation 184
11.5 Changing the user experience based on client type 186
11.6 Advanced formatting: using HTML 189
11.7 Advanced Web user interfaces part 1: $$ fields 192
11.8 Advanced Web user interfaces part 2: view templates 198
11.9 Advanced Web user interfaces part 3: navigator templates 201
11.10 Setting up text searching 203
11.11 Summary 205
12 Internet LotusScript and agents 207
12.1 Running agents to dynamically process Web documents 209
12.2 The DocumentContext property 209
12.3 Generating HTML code from an agent 210
12.4 Debugging Internet agents 211
12.5 Agent security 213
12.6 Example 1: generating sequential numbers on the Internet 213
12.7 Example 2: a server triggered agent to send email notifications 219
12.8 Example 3: a customized search engine 221
12.9 Summary 225
Part 4 A programmer's toolbox 227
13 LotusScript user interface programming 229
13.1 They said it couldn't be done! 230
13.2 Make a menu selection 230
13.3 Search for and display a document 234
13.4 Creating summary reports 237
13.5 Summary 240
14 New features in Notes 4.5 242
14.1 Calendar views 243
14.2 Date and time popup fields 247
14.3 Using profile documents 248
14.4 LotusScript libraries 250
14.5 Running an agent 253
14.6 Example 1: a LotusScript list processing function 254
14.7 Example 2: a LotusScript date/time processing function 257
14.8 Graphical design update 259
14.9 Search and display multiple documents 260
14.10 Other new features 263
14.11 Summary 264
15 LotusScript list processing in Notes 4.5 266
15.1 List processing functions 268
15.2 ExtractFromList function 268
15.3 SubSet function 269
15.4 Elements function 270
15.5 IsMember function 271
15.6 MemberPosition function 272
15.7 Replace function 273
15.8 Unique function 274
15.9 Summary 275
16 Database relations 276
16.1 Avoiding filename conflicts 277
16.2 One-to-many relations 279
16.3 One-to-many relations across databases 282
16.4 Many-to-many relations 286
16.5 Referential integrity 287
16.6 Summary 289
17 Generating sequential numbers 290
17.1 Why are sequential numbers so important? 291
17.2 Sequential number generator 292
17.3 Sorting on sequential numbers 298
17.4 Generating sequential numbers over a wide area network 300
17.5 Another approach to wide area networks 301
17.6 Generating sequential numbers on the Internet 304
17.7 Record locking 304
17.8 Summary 305
18 LotusScript agents 306
18.1 Debugging server-based agents 307
18.2 Agent to email an expense report 309
18.3 Search and display multiple documents agent 312
18.4 Search all databases in a subdirectory 316
18.5 Run saved queries on the server 324
18.6 Summary 334
19 Tips and tricks 335
19.1 Formula display a document by universal ID 336
19.2 Creating response documents in the close event 337
19.3 Input validation in LotusScript 338
19.4 Adding carriage returns to fields 339
19.5 Accessing Notes via DDE (Visual Basic example) 341
19.6 Storing user specific options 342
19.7 Dynamic check boxes and radio buttons 345
19.8 Notes SQL 2.0 (accessing Notes through ODBC) 348
19.9 Creating Document links in a new document 349
19.10 Manipulating rich text fonts and colors 353
19.11 Summary 359
20 The future of Lotus Notes 360
20.1 Notes user interface programming and Java 361
20.2 The Notes database format 364
20.3 Notes report generation 365
20.4 Summary 365
appendix A References 368
Internet references 369
User groups 370
appendix B LotusScript and formula user interface reference 372
LotusScript user interface classes 373
Formula user interface commands 374
appendix C The Inside LotusScript CDROM 381
CDROM contents 382
Installation for Windows users 383
Installing LNSpade 383
glossary 385
index 390