Contents

about the author   xvi

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.1 What is Notes?   3

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.1 Why LotusScript?   25

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