Kevin Pettitt and Susan Bulloch delivered this presenation as BP208 "Manipulating Time and Space: Adding C&S to Your Applications" at Lotusphere 2010. Find the accompanying demo application at http://www.lotusguru.com/lotusguru/LGBlog.nsf/d6plinks/20100125-8228B7
2. 2
Agenda
● Native C&S capability
● Tips on extending existing features
● Best practices when programming in this area
● Sample code
● Resources
3. 3
What you’ll get out of this session
● Practical code and tips that can bring quick ROI
● When to customize
● How to customize
● Where to find more information
4. 4
C&S-Enabled is more than just a calendar
● “C&S-Enabled” applications tie in with personal
calendar and/or room and resource availability
● Custom Lotus Notes calendar applications don't
necessarily have anything to do with native C&S
5. Out of the Box – Schedule Meetings
● Meeting invitations
▬ Chair/Meeting Creator can review invitee and room
availability and easily select best time
▬ Flexible (custom) repeat handling
▬ Automatically updates participant’s calendars when a
particular meeting (or repeat instance) is cancelled or
rescheduled
▬ Room reservations are tied to meeting
▬ No more “booked but empty” rooms
▬ Calendar Delegation
6. Out of the Box – Not Just Email
● Meeting details are automatically placed on all
participants calendars
● Updates propagated automatically
● Room ownership restrictions
7. Commonly Requested Features
● Change meeting chairs
▬ When the chair leaves or changes jobs
● See room availability for repeat meetings beyond
initial instance
● Auto remind repeat meeting chairs when last
instance is approaching
● Setup/tear down time and notifications
● Yours?
8. 8
Customization Rules of Thumb
● Avoid modifications to core design elements
▬ You may break something
▬ Upgrades are much harder - “Add-on” elements easy to
add to the next version
▬ There are lots of cool things you can do without such
drastic measures
● No medals for most complicated solution
▬ Simple approaches are more common than you think
● Document EVERY change
▬ Be kind to the next developer (it may be you)
9. Example Applications
● Training Request Submittals
▬ User/Manager fills in request form
▬ Training Coordinator schedules room and instructor (and
participants)
● Group Events
▬ Department admins push events to user calendars
● Appointment Booker
▬ Create appointments that are routed to user’s calendar
10. 10
Example - Training Requests
● Allows users to submit “request for training” forms
that don't specify room or exact time
● Training coordinators use submitted information to
book appropriate training facilities and personnel
● Application interfaces to the Room and Resources
system and training staff calendars to check
availability
11. 11
Example – Group Events
● Central place to define group-specific events
▬ Personal calendars of group members updated
automatically
▬ This can be done by programmatically “pushing” calendar
entries
▬ Version 8.5 adds calendar federation allowing users to
“subscribe” to many types of public and other Notes calendars
● Event creation restricted to authorized users
12. 12
Example – Appointment Booker
● Sends an “appointment” type entry as if it were a
“meeting”
● Application can generate basic appointments and
place them on a target user's calendar
▬ Only a “meeting” appointment type can do this normally
▬ Booker won’t look “busy” when they really are not
● Alternative to calendar delegation
▬ Fewer security concerns
▬ Easier to manage
13. Example – Court Hearing Scheduler
● Problem: Difficult to schedule multiple resource
categories
▬ When can I get a judge, prosecutor, public defender, clerk,
and court reporter to walk into an empty courtroom?
● Solution: Create a standalone workflow application for
court clerks
▬ Automatically find next open time when all resource
categories are available?
14. 14
Example – Room Profile Database
● Separate proxy application that contains additional
room details
▬ Photos
▬ complete inventory of equipment
▬ Special booking instructions
● Can see room schedule and create reservations
directly from profile
▬ Form pre-filled with room and selected time/date
● Can create “combo” profiles for rooms that are
sometimes booked together
15. 15
Example – Interview Scheduler
● Problem: HR struggles to keep track of job
interviews
▬ wants a centralized way to schedule job interviews
● Solution: Create a standalone workflow application
for HR
▬ Check manager's availability in Notes while coordinating
interview time with candidate
▬ Single place to store interview information for interviewers
and candidates
16. 16
Example – Interview Scheduler
● Solution advantages
▬ HR sends the resumes to the manager in a timely manner
▬ HR can easily verify interview times for candidate
▬ Automatically add interviews to manager's calendar
(“invitation” they don’t have to accept)
▬ Reserve interview room at the same time
▬ No more phone tag with interviewers and candidates
18. 18
Room Management Gotchas
● Changes to a room or resource document require an
administrator
▬ Why?
▬ The documents are mail-in documents in the directory
▬ Do you let anybody else work in the Directory?
● Proxy application approach allows room owners to
make changes indirectly
▬ Admins can then approve and implement changes very
quickly
19. 19
Conclusions
● We hope you walk away with an understanding of
how to...
▬ Get big ROI with what's in the box
▬ Use provided tips and code to move forward with practical
custom applications
▬ You know where to find more information
20. 20
Resources
● IBM developerWorks articles
▬ Bruce Kahn, “New Rooms and Resources features in
Lotus Notes/Domino 7” (IBM, December 2005)
▬ www.ibm.com/developerworks/lotus/library/domino7-rooms-
resources/index.html
▬ Bruce Kahn, “Rooms and Resources design in Lotus
Notes/Domino 7” (IBM, August 2005)
▬ www.ibm.com/developerworks/lotus/library/rr-nd7/
● Domino Admin Help
▬ Calendars and Scheduling topic
21. 21
Resources
● Notes and Domino wiki articles
▬ http://www.lotus.com/ldd/dominowiki.nsf
● The C&S Schema
▬ http://www.ibm.com/developerworks/lotus/
documentation/dw-l-calendarschema.html