IBM Lotus iNotes 8.5 Customization


Published on

A presentation regarding Lotus iNotes customization shown at Lotusphere 2009 in Orlando,Florida.

  • Be the first to comment

No Downloads
Total views
On SlideShare
From Embeds
Number of Embeds
Embeds 0
No embeds

No notes for slide
  • -
  • IBM Lotus iNotes 8.5 Customization

    1. 2. IBM® Lotus® iNotes™ Customization <ul><ul><li>Eric Spencer | Advisory Software Engineer | Lotus iNotes Development | IBM </li></ul></ul><ul><ul><li>Ronald Ledwich | Staff Software Engineer | Lotus iNotes Development | IBM </li></ul></ul>AD216
    2. 3. Agenda <ul><li>How customizable is Lotus iNotes? </li></ul><ul><li>Basic customizations </li></ul><ul><ul><li>demo </li></ul></ul><ul><li>Skins and skin components </li></ul><ul><ul><li>demo </li></ul></ul><ul><li>Lotus iNotes page generation </li></ul><ul><li>Summary </li></ul><ul><li>Q & A </li></ul>
    3. 4. How customizable is Lotus iNotes? <ul><li>All content sent to browser is governed by design elements </li></ul><ul><ul><li>Modifying these design elements alters Lotus iNotes </li></ul></ul><ul><li>Different from Traditional Domino® Web Applications </li></ul><ul><ul><li>Uses WebHybrid processing (mixture of Quickplace® and Domino processing) </li></ul></ul><ul><ul><li>Uses limited set of Domino Web Commands and some special URL arguments </li></ul></ul><ul><ul><li>Uses tag-based textual markup to govern responses </li></ul></ul><ul><ul><li>Uses tags to determine what fields are permitted on a subsequent post from this page </li></ul></ul><ul><ul><li>Uses special server side formulas and custom tag mechanism </li></ul></ul><ul><ul><li>Doesn’t utilize many Agents (though provides means to use them as part of a customization) </li></ul></ul><ul><ul><li>Designed to be performant </li></ul></ul><ul><li>Need to understand what to modify and how to extend Lotus iNotes with it’s design patterns in mind </li></ul>
    4. 5. Template and Forms File mail85.ntf mailJUser.nsf iNotesForms85.nsf References Lotus iNotes Page View Design Data Most Design: CSS, JavaScript, Images, HTML Inherits
    5. 6. Special Icon Note items <ul><li>These items propagate from a Template file (.ntf) to a specific database (.nsf) during Design refresh/replace: </li></ul>Note: Only a hard coded list of Forms Template File values are presently supported on the server. The following NOTES.INI setting provides a means to override: iNotes_WA_FormsFiles=iNotes/Custom85.nsf, iNotes/Forms85.nsf,iNotes/Forms8.nsf,iNotes/Forms7.nsf,iNotes/Forms6.nsf DB which houses common design elements “ iNotes/Forms85.nsf” $FormsTemplateFile Enable Lotus iNotes variations within Quickplace page generation “ 1” $WebHybridDb Enable Quickplace page generation logic “ 1” $HaikuFlags
    6. 7. Ways to customize Lotus iNotes <ul><li>Policies </li></ul><ul><li>Disable certain Functional Areas </li></ul><ul><ul><li>iNotes_WA_Areas INI var – will still work but policy takes precedence </li></ul></ul><ul><li>Special Forms (Custom_*) provided for basic customizations </li></ul><ul><ul><li>Modify action bar menu items </li></ul></ul><ul><ul><li>Modify existing view columns </li></ul></ul><ul><ul><li>Add masthead </li></ul></ul><ul><ul><li>Modify banner logo </li></ul></ul><ul><ul><li>Add fonts </li></ul></ul><ul><li>Edit skins and stylesheets </li></ul><ul><li>Modify forms </li></ul>
    7. 8. Policy support Right double-click to close Mark documents read on preview Save sent mail Sign sent mail Encrypt sent mail Mail notification Internet mail format Mail basics Followup Attention indicators Message recall Calendar basics Calendar display Notices Scheduling Automatic processing Rooms and resources Mail & Calendar delegation User UI mode Functional areas Functional area at login Maximum attachment size Mail threads Remote image display Browser cache management Logout scrubbing Allowing attachments Instant messaging features Default spell check dictionary iNotes ActiveX Enabling feeds Widget enablement Lotus Quickr™ integration Calendar subscriptions Offline settings Shared Desktop Policies Shared Mail Policies iNotes Mail Policies
    8. 9. New architecture in 8.5 <ul><li>“ full” mode now uses the “lite” architecture that was introduced in 8.0.1 </li></ul><ul><li>Tabbed UI </li></ul><ul><li>Uses widgets </li></ul><ul><li>Some forms still use the “classic” architecture </li></ul><ul><ul><li>Full mode Mail, Calendar, Contact, To Do, Notebook entry forms </li></ul></ul><ul><ul><li>Lite mode Calendar and Contact entry forms </li></ul></ul><ul><ul><li>Home page </li></ul></ul><ul><ul><li>Preferences </li></ul></ul><ul><li>Forms, etc. that are new for the “lite” architecture have “_Lite” in the name </li></ul>
    9. 10. Custom_JS_Lite subform <ul><li>JavaScript form introduced to centralize most customizations </li></ul><ul><li>Static external script file which will be used for all main pages </li></ul><ul><li>Script page is cached on server with rest of static common user script and available with every page </li></ul><ul><li>Also a location to store your own script so that it is available from various pages you wish to customize </li></ul><ul><ul><ul><li>Note: Add stuff to l_SessionInfo/f_SessionInfo/s_SessionInfo form if you need per user or per mail file formula computations </li></ul></ul></ul><ul><li>Custom_JS and Custom_JS_Lite are now subforms </li></ul>
    10. 11. Some functions in Custom_JS_Lite Form Callbacks and Functions Set which columns get displayed when alternate name is enabled API_ GetWhoAndAltWhoColNamesForView_ Lite Set which columns get displayed for the Mail portlet. New in 8.0 API_SetPortalMailViewColumns_Lite Add additional time zones API_TimeZones_Lite Invoked prior to submitting an action to the server Scene_PreSubmit_Lite Invoked after each widget is initialized Scene_PostLoad_Lite Add, remove or change actions Scene_Actions_Lite
    11. 12. More functions in Custom_JS_Lite Helpers Custom_ActionsHelper _Lite subform Returns URL path up to and including “.nsf” API_GetMailfilePath_Lite Returns true if view page API_IsView_Lite Returns array of strings representing UNIDs API_GetSelectedDocs_Lite Display menu position numbers - “classic” forms checkActionPositions Display menu IDs checkActionIDs Changes position of menus or submenus repositionActionsLite Remove menus or submenus from action bar removeActionsLite Add new menus or submenus to action bar addActionsLite
    12. 13. Additional customization forms and subforms Modify the displayed banner Custom_Banner_Lite Add additional CSS styles Custom_CSS Add a masthead at the top of the page Custom_Masthead Add new fonts in the rich text editor Custom_JS_Edit Add additional web sites for Web page panel choices Custom_Welcome
    13. 14. checkActionIDs and checkPositions functions <ul><li>Call these functions to display IDs or position numbers of action bar menu items. </li></ul><ul><li>checkActionIDs( s_MenuID ) - new architecture views and forms </li></ul><ul><ul><li>Displays the menu ID in the hover text of “MENU ID” item </li></ul></ul><ul><ul><li>Displays the menu item ID in the hover text </li></ul></ul><ul><li>checkActionPositions(s_TopBranchId) - “classic” forms </li></ul><ul><ul><li>Displays the position number next to the menu item. </li></ul></ul>
    14. 15. How do you edit Lotus iNotes markup? <ul><li>Forms and Subforms </li></ul><ul><ul><li>Domino Designer </li></ul></ul><ul><li>Images </li></ul><ul><ul><li>Domino Designer within Shared ResourcesFiles </li></ul></ul><ul><li>Skin elements </li></ul><ul><ul><li>Domino Designer within Shared ResourcesFiles </li></ul></ul><ul><ul><ul><li>l_ShimmerSkin-xxx for Lite mode </li></ul></ul></ul><ul><ul><ul><li>f_ShimmerSkin-xxx for Full mode </li></ul></ul></ul><ul><ul><ul><li>h_ShimmerSkin-xxx for: </li></ul></ul></ul><ul><ul><ul><ul><li>“ classic” forms </li></ul></ul></ul></ul><ul><ul><ul><ul><li>8.0.x Full mode </li></ul></ul></ul></ul><ul><ul><ul><ul><li>7.x and earlier releases </li></ul></ul></ul></ul><ul><ul><li>iphone.css and standard.css for Ultralite mode </li></ul></ul>
    15. 16. Demo 1: Basic customizations
    16. 17. Scene names <ul><li>For widgets, scene name is: element_id:widget_class </li></ul><ul><ul><li>Example: e-switcher-mail:com_ibm_dwa_ui_switcher </li></ul></ul>Page s_SceneName s_NotebookPage Notebook entry s_Contact Contact entry s_ToDo To Do item s_Appointment Calendar entry Memo Mail message - Lite mode s_MailMemo Mail message
    17. 18. Some submit actions (“classic” forms only) s_SubmitAction Description Insert image h_Image Insert link h_Link Spell check h_SpellCheck Save (without closing window) h_TempSave Save h_Jump Send and file message h_ShimmerSendAndFile Send message h_ShimmerSend Cancel h_Exit
    18. 19. Skin groups and types <ul><li>Skin Group </li></ul><ul><ul><li>A set of skins sharing the same stylesheets </li></ul></ul><ul><ul><li>Primary skin groups: h_ShimmerSkin (IE), h_ShimmerSkin_Gecko (Mozilla), h_ShimmerSkin_Safari (Safari) </li></ul></ul><ul><ul><ul><li>Contents of the groups are identical except for stylesheets </li></ul></ul></ul><ul><ul><li>Two less significant skin groups: h_ShimmerSkin_UB (unsupported browser), h_ShimmerSkin_ACC (accessibility…not used) </li></ul></ul><ul><li>Skin Type (Skin) </li></ul><ul><ul><li>Member of a skin group set </li></ul></ul><ul><ul><li>Contains HTML markup to emit within the page body to govern overall page layout </li></ul></ul><ul><ul><li>Special Skin type: h_Stylesheet (CSS file) </li></ul></ul><ul><ul><ul><li>Contains CSS definitions </li></ul></ul></ul>Example: f_ShimmerSkin-h_ListFolder
    19. 20. Stylesheets <ul><li>h_StylesheetView </li></ul><ul><ul><li>Used for views </li></ul></ul><ul><li>h_StylesheetDocuments </li></ul><ul><ul><li>Used for documents – mail and meeting notice in Lite mode only </li></ul></ul><ul><li>h_StylesheetOverride </li></ul><ul><ul><li>Used for “classic” forms </li></ul></ul><ul><li>h_Stylesheet </li></ul><ul><ul><li>Used for things not specific to view or documents </li></ul></ul><ul><li>h_StyleSheetPortal </li></ul><ul><ul><li>Used for WebSphere® Portal </li></ul></ul>Example: f_ShimmerSkin_Gecko-h_StyleSheetDocuments
    20. 21. Which skin is used? <ul><li>Skin type h_ListFolder is always used </li></ul><ul><ul><li>unless h_SkinTypeOverride is set – by URL arg or NotesVar </li></ul></ul><ul><li>h_MailPage .... </li></ul><ul><li>Other skins are not used </li></ul><ul><ul><li>They are there for compatibility with “classic” code </li></ul></ul>
    21. 22. Skin components - h_ListFolder Modepanel_ SkinComponent_Lite ShimmerSwitcher_ SkinComponent_Lite SceneLabel_ SkinComponent_Lite ShimmerMainTabs_ SkinComponent_Lite Search_ SkinComponent_Lite PageContent_ SkinComponent_Lite ServerTitleAndMailQuota_ SkinComponent_Lite Custom_Banner_ Lite
    22. 23. Sample skin HTML segment <ul><li>Other elements you will see: </li></ul><ul><ul><li>com_ibm_dwa_ui_widget_class </li></ul></ul><ul><ul><ul><li>widget definition </li></ul></ul></ul><ul><ul><li><v:fill> (IE) or <canvas> (Mozilla) tags </li></ul></ul><ul><ul><ul><li>grad fills </li></ul></ul></ul><div id=&quot;e-maintabs-container&quot; class=&quot;s-toppanel&quot;> <InsertNotesSubForm name=&quot;ShimmerMainTabs_SkinComponent_Lite&quot;> </div> <div class=&quot;s-toppanel&quot; style=&quot;height:1.5em;&quot;> <InsertNotesSubForm name=&quot;Modepanel_SkinComponent_Lite&quot;> </div> Skin components
    23. 24. Demo 2: Skin customization
    24. 25. Ultralite skin customization
    25. 26. Customizing Ultralite mode <ul><li>Styles: </li></ul><ul><ul><li>iphone.css – for iPhone </li></ul></ul><ul><ul><li>standard.css – for desktop browser (only Firefox is supported) </li></ul></ul><ul><li>Does not use skins </li></ul><ul><li>No JavaScript </li></ul><ul><li>Layout and code are combined in m_xxx forms </li></ul><ul><li>Images are in mxxx files in Shared ResourcesFiles </li></ul>
    26. 27. Referring to new resources <ul><li>Added to the Forms file </li></ul><ul><ul><li>Add the file to Shared ResourcesFiles </li></ul></ul><ul><ul><li>src=&quot;/iNotes/Forms85.nsf/LotusSoftware.png&quot; </li></ul></ul><ul><ul><li>background-image:url(@{s_FF}/act-hyper-hover-images.gif?OpenFileResource&MX); </li></ul></ul><ul><li>File on Domino server </li></ul><ul><ul><li>Put file into <Domino data directory>html </li></ul></ul><ul><ul><li>src=&quot;/file.html&quot; </li></ul></ul><ul><li>On another server </li></ul><ul><ul><li>src=&quot;; </li></ul></ul>
    27. 28. More on skin customization <ul><li>Grad fills </li></ul><ul><ul><li>Specified in the skins and in the code </li></ul></ul><ul><ul><li>See wiki article for more details </li></ul></ul><ul><li>Consolidated icons </li></ul><ul><ul><li>One image file that contains many icons </li></ul></ul><ul><ul><li>Icons are selected by x, y coordinates in the styles </li></ul></ul><ul><ul><li>Files: basicicons.gif, commonactionicons.gif, commonactionicons.gif,mailoutlineicons.gif, viewactionicons.gif </li></ul></ul>
    28. 29. Lotus iNotes Web page construction <ul><li>All Forms/Subforms use pass-thru HTML </li></ul><ul><li>Special tags are interpreted by server to: </li></ul><ul><ul><li>Insert skin </li></ul></ul><ul><ul><li>Insert skin components </li></ul></ul><ul><ul><li>Insert subforms </li></ul></ul><ul><ul><li>Evaluate computed blocks (@formulas) </li></ul></ul><ul><ul><li>Determine persisted and computed-only items </li></ul></ul><ul><li>Full mode is now using Lite mode architecture </li></ul><ul><ul><li>use combination of skin components (loaded by server) and widgets (client) </li></ul></ul><ul><ul><li>More AJAX (lazy loading, etc). </li></ul></ul>
    29. 30. iNotes code/forms <ul><li>Loaded by InsertNotesSubForm </li></ul><ul><li>Browser specific: </li></ul><ul><ul><li>xxxCode – IE </li></ul></ul><ul><ul><li>xxxCode_Gecko – Mozilla </li></ul></ul><ul><ul><li>xxxCode_Safari – Safari </li></ul></ul><ul><li>f_xx – used by Full mode only </li></ul><ul><li>l_xx – used by Lite and Full mode </li></ul><ul><li>INI setting iNotes_WA_Debug_SubForms=1 – subform names are displayed on the server console as they are loaded </li></ul>
    30. 31. Subforms used by “classic” forms <ul><li>Prefix: s_MailMemo, s_MeetingNotice, s_Appointment, s_Contact, s_ToDo, s_Notebook </li></ul><ul><li><prefix>+Dictionary: defines “schema” </li></ul><ul><li>Read forms </li></ul><ul><ul><li><prefix>+Read_Init : <head> portion </li></ul></ul><ul><ul><li><subscene prefix>+Read : <body> portion </li></ul></ul><ul><li>Edit forms </li></ul><ul><ul><li><prefix>+Edit_Init : <head> portion </li></ul></ul><ul><ul><li><subscene prefix>+Edit : <body> portion </li></ul></ul>Example: s_AppointmentEdit_Init
    31. 32. Widgets <ul><li>There are UI and non-UI widgets </li></ul><ul><li>UI widgets have a root element (usually <div>) and have attribute “com_ibm_dwa_ui_widget_class” </li></ul><ul><li>Widget code is in l_JSBase subform or subforms included by l_JSRead and l_StdPageOperations forms </li></ul><ul><li>To customize a widget, add code to Scene_PostLoad_Lite callback function. </li></ul><ul><ul><li>Example: </li></ul></ul><ul><ul><ul><li>if (s_SceneName == 'e-switcher-mail:FZM') { </li></ul></ul></ul><ul><ul><ul><li>// customize view switcher widget (FZM = com_ibm_dwa_ui_switcher) </li></ul></ul></ul><ul><ul><ul><li>} </li></ul></ul></ul><ul><li>See wiki article for more details </li></ul>
    32. 33. Special server-side tags <ul><li><InsertNotesSubForm Name=SubFormName> </li></ul><ul><ul><li>Name may be a computed value </li></ul></ul><ul><ul><ul><li><InsertNotesSubForm Name=@{...} > </li></ul></ul></ul><ul><ul><ul><li>Conditional insertions by using @If and specifying empty string </li></ul></ul></ul><ul><li><QuickPlaceSkin> </li></ul><ul><ul><li>Inserts contents of skin type for current skin group </li></ul></ul><ul><li><QuickPlaceSkinComponent Name=xxx> </li></ul><ul><ul><li>Inserts contents of subform named xxx_SkinComponent </li></ul></ul><ul><ul><li>Optional Format and Argument attributes (used by some skin components): </li></ul></ul><ul><ul><ul><li>Translates to JavaScript arg which is accessible by skin component </li></ul></ul></ul><ul><ul><ul><li>Format support special <Item> tag to allow means of excluding some markup if tag is determined at runtime to be not displayed. Real tag contents are emitted there </li></ul></ul></ul><ul><ul><ul><li>Example: </li></ul></ul></ul><ul><ul><ul><ul><li><QuickPlaceSkinComponent Name=&quot;Logout&quot; Argument=“0” </li></ul></ul></ul></ul><ul><ul><ul><ul><li>Format={<td class=&quot;s-toptoolbar-text s-toptoolbar-bg-middle&quot; nowrap><Item></td>}> </li></ul></ul></ul></ul>Insert content from other design elements
    33. 34. Special server-side tags <ul><li><NotesDictionary>…</NotesDictionary> </li></ul><ul><ul><li>Block which may contain NotesVar and NotesField tags </li></ul></ul><ul><li><NotesField Name=ItemName> </li></ul><ul><ul><li>Define persisted field </li></ul></ul><ul><ul><ul><li>Type=Text|TextList|RichText|Mime|Number|NumberList| Time|TimeList </li></ul></ul></ul><ul><ul><ul><li>InitialValue= </li></ul></ul></ul><ul><ul><ul><ul><li>Evaluated if item doesn’t exist within document </li></ul></ul></ul></ul><ul><ul><ul><li>Value= </li></ul></ul></ul><ul><ul><ul><ul><li>Evaluated as page is generated and as page is saved </li></ul></ul></ul></ul><ul><ul><li>Example: </li></ul></ul><ul><ul><ul><li><NotesField Name=Subject> </li></ul></ul></ul><ul><li><NotesVar Name=ItemName> </li></ul><ul><ul><li>Define a computed for display only item </li></ul></ul><ul><ul><li>Same element attributes as Notes field </li></ul></ul><ul><li>All support an includeif={ @formula } attribute for conditional inclusion </li></ul>Persisted and computed for display items
    34. 35. To add a new field to an existing object <ul><li>New NotesField needs to be added to xxxDictionary subform </li></ul><ul><li>Visual representation on xxxRead and xxxEdit subforms </li></ul><ul><li>HTML representation needs to get the value of the field </li></ul><ul><li>For edit forms: may need to initialize before display and validate before submit </li></ul><ul><li>More detail in Manipulating Data in Domino Web Access developerWorks article </li></ul>
    35. 36. Special server-side tags <ul><li><NotesComment>…</NotesComment> </li></ul><ul><ul><li>Block which contains content which should not be emitted back to the client with any responses </li></ul></ul><ul><ul><li>Useful for commenting purposes </li></ul></ul>Comments
    36. 37. Special server-side tags <ul><li>@{….} </li></ul><ul><ul><li>Domino Web-based formula may be specified within this computed text tag </li></ul></ul><ul><ul><li>May also run output through special filters </li></ul></ul><ul><ul><ul><li>jsdata: JavaScript String data (apostrophes are escaped) </li></ul></ul></ul><ul><ul><ul><li>html: valid html data </li></ul></ul></ul><ul><ul><ul><li>xml: valid xml data (new in 8.0) </li></ul></ul></ul><ul><ul><ul><li>@{{...};jsdata;html} </li></ul></ul></ul><ul><ul><li>Example: </li></ul></ul><ul><ul><ul><li>haiku.CalendarProfileOwnerName = '@{{@Name([Canonicalize]; @GetProfileField(&quot;calendarprofile&quot;;&quot;Owner&quot;))};jsData}'; </li></ul></ul></ul>Computed text block
    37. 38. Special custom formulas Additional formulas to support Lotus iNotes applications <ul><li>@DbCommand(“Haiku”;”<command name>” [;”Arg1”;”Arg2”;…]) </li></ul><ul><li>Some key commands: </li></ul><ul><ul><li>h_Vars : Emits all non-system items in document as JavaScript vars with values </li></ul></ul><ul><ul><ul><li>Optional Args </li></ul></ul></ul><ul><ul><ul><ul><li>Arg1: UNID of document in current DB being processed (Current document if not specified) </li></ul></ul></ul></ul><ul><ul><ul><ul><li>Arg2: prefix string (string to prepend to each item…useful if desire to put items as properties of another JavaScript object) (default: “var “) </li></ul></ul></ul></ul><ul><ul><ul><ul><li>Arg 3: “1”: emit all items on current note (default) </li></ul></ul></ul></ul><ul><ul><ul><ul><li>“ 0”: emit only if specified in a NotesDictionary block </li></ul></ul></ul></ul><ul><ul><li>h_RunAgent : Runs specified agent (which can contribute to page output) </li></ul></ul><ul><ul><ul><li>Required Args </li></ul></ul></ul><ul><ul><ul><ul><li>Arg 1: Name of agent </li></ul></ul></ul></ul><ul><ul><ul><li>Optional Args </li></ul></ul></ul><ul><ul><ul><ul><li>Arg 2: Common agent -- “1”: agent is in Forms file; “0”: in current DB being processed (default) </li></ul></ul></ul></ul><ul><ul><ul><ul><li>Arg 3: Empty context – “1”: run agent in empty context; “0”: in context of note specified by url (default) </li></ul></ul></ul></ul>
    38. 39. dwa: tags <ul><li>Used in cases where only a custom formula is being called </li></ul><ul><li>Removes need to invoke formula evaluator (improves performance) </li></ul><ul><li>Built to be extensible </li></ul><ul><ul><li>Tags defined in dwa_tags form </li></ul></ul><ul><ul><li>Example definition: </li></ul></ul><ul><ul><ul><li><tagdefinition name=&quot;getvars&quot; outputformat=&quot;jscript&quot;> </li></ul></ul></ul><ul><ul><ul><li><description>Provide access to the h_Vars functionality. </description> </li></ul></ul></ul><ul><ul><ul><li><argument type=&quot;text&quot; optional=&quot;yes&quot; name=&quot;unidstring&quot; /> </li></ul></ul></ul><ul><ul><ul><li><argument type=&quot;text&quot; optional=&quot;yes&quot; name=&quot;prefixstring&quot; /> </li></ul></ul></ul><ul><ul><ul><li><argument type=&quot;text&quot; optional=&quot;yes&quot; name=&quot;includeall&quot; value=“1” /> </li></ul></ul></ul><ul><ul><ul><li><bodyfunction namespace=&quot;haiku&quot; builtin=&quot;h_Vars&quot; /> </li></ul></ul></ul><ul><ul><ul><li></tagdefinition> </li></ul></ul></ul><ul><ul><li>Example usage: </li></ul></ul><ul><ul><ul><li><dwa:getvars includeall=“0” /> </li></ul></ul></ul><ul><ul><ul><li><dwa:getvars unidstring=“{ComputedItemContainingUnid}” /> </li></ul></ul></ul>
    39. 40. Miscellaneous <ul><li>String resources now in separate file </li></ul><ul><ul><li>File: </li></ul></ul><ul><ul><ul><li>In Shared ResourcesFiles </li></ul></ul></ul><ul><ul><li>Easier to add / modify strings </li></ul></ul><ul><ul><li>Customizers can add new languages </li></ul></ul><ul><li>INI setting: iNotes_WA_PortalStylesheet=0 </li></ul><ul><ul><li>Always use the normal iNotes stylesheet even on WebSphere Portal </li></ul></ul><ul><li>Log messages to the iNotes console </li></ul><ul><ul><li>Example:, “”,&quot;message”); </li></ul></ul><ul><ul><ul><li>level: </li></ul></ul></ul><ul><ul><ul><ul><li>0 = error </li></ul></ul></ul></ul><ul><ul><ul><ul><li>1 = warning </li></ul></ul></ul></ul><ul><ul><ul><ul><li>2 = info </li></ul></ul></ul></ul><ul><ul><ul><ul><li>3 = detail </li></ul></ul></ul></ul>
    40. 41. QueryOpen/QuerySave agents <ul><li>Lotus iNotes doesn’t use these within core application </li></ul><ul><li>Add iNotes_WA_QueryAgents=1 to NOTES.INI to enable this functionality </li></ul><ul><li>Two NotesVars are used to invoke agents </li></ul><ul><ul><li>$$QueryOpenAgent </li></ul></ul><ul><ul><li>$$QuerySaveAgent </li></ul></ul><ul><ul><li>Example: </li></ul></ul><ul><ul><ul><li><NotesVar NAME={$$QuerySaveAgent} INITIALVALUE={“YourAgent”}> </li></ul></ul></ul><ul><li>Please refer to the Manipulating Data in Domino Web Access developerWorks article for a working example of QueryOpen and QuerySave agents </li></ul>
    41. 42. Debugging tools <ul><li>Firefox </li></ul><ul><ul><li>Venkman </li></ul></ul><ul><ul><li>Firebug </li></ul></ul><ul><li>IE </li></ul><ul><ul><li>Visual InterDev </li></ul></ul><ul><ul><li>Visual Studio </li></ul></ul><ul><ul><li>Developer Toolbar </li></ul></ul><ul><li>Obfuscation table </li></ul><ul><ul><li>ObfuscationList.txt </li></ul></ul><ul><ul><li>In Shared ResourcesFiles </li></ul></ul>
    42. 43. Summary <ul><li>Some ways to make basic customizations are provided </li></ul><ul><ul><li>Policies </li></ul></ul><ul><ul><li>Using Custom_* forms and subforms </li></ul></ul><ul><li>Look of Lotus iNotes pages can be customized by editing skins, skin components, and stylesheets </li></ul><ul><li>For more complex customizations, you need to understand how Lotus iNotes pages are generated </li></ul><ul><li>Useful tools for examining page layout and debugging JavaScript are available </li></ul>
    43. 44. Future possibilities <ul><li>Move customization forms to a separate forms file </li></ul><ul><li>Provide easier way to customize grad fills </li></ul><ul><li>Add/honor your own policy settings </li></ul><ul><li>Consolidate skin groups and stylesheets </li></ul><ul><li>Make it easier to change Forms file reference </li></ul><ul><li>Make it easier to customize Preferences </li></ul>
    44. 45. Related sessions/resources <ul><li>ID216: What's New in IBM Lotus iNotes 8.5 -- and Beyond </li></ul><ul><li>ID217: IBM Lotus iNotes for the Apple iPhone </li></ul><ul><li>ID218: Best Practices for your Lotus iNotes infrastructure </li></ul><ul><li>AD201: IBM Lotus Domino Designer 8.5: A New Beginning </li></ul><ul><li>BOF: iPhone development and Ultralite </li></ul><ul><li>Lotus iNotes Team in the Meet the Developers Lab & User Experience Lab </li></ul><ul><li>Session examples available in the lab </li></ul>
    45. 46. On-line resources <ul><li>Lotus Notes and Domino wiki </li></ul><ul><ul><li> </li></ul></ul><ul><ul><li>Lotus iNotes, Customization </li></ul></ul><ul><li>Wiki article </li></ul><ul><ul><li> </li></ul></ul><ul><li>developerWorks forum </li></ul><ul><ul><li> </li></ul></ul><ul><ul><li>Product area: DWA, Technical Area: Customization </li></ul></ul>
    46. 47. Questions?
    47. 48. Legal disclaimer <ul><li>© IBM Corporation 2008. All Rights Reserved. </li></ul><ul><li>The information contained in this publication is provided for informational purposes only. While efforts were made to verify the completeness and accuracy of the information contained in this publication, it is provided AS IS without warranty of any kind, express or implied. In addition, this information is based on IBM’s current product plans and strategy, which are subject to change by IBM without notice. IBM shall not be responsible for any damages arising out of the use of, or otherwise related to, this publication or any other materials. Nothing contained in this publication is intended to, nor shall have the effect of, creating any warranties or representations from IBM or its suppliers or licensors, or altering the terms and conditions of the applicable license agreement governing the use of IBM software. </li></ul><ul><li>References in this presentation to IBM products, programs, or services do not imply that they will be available in all countries in which IBM operates. Product release dates and/or capabilities referenced in this presentation may change at any time at IBM’s sole discretion based on market opportunities or other factors, and are not intended to be a commitment to future product or feature availability in any way. Nothing contained in these materials is intended to, nor shall have the effect of, stating or implying that any activities undertaken by you will result in any specific sales, revenue growth or other results. </li></ul><ul><li>IBM, the IBM logo, Lotus, Lotus Notes, Notes, Domino, Quickr, WebSphere, PartnerWorld and Lotusphere are trademarks of International Business Machines Corporation in the United States, other countries, or both. </li></ul><ul><li>All references to Renovations refer to a fictitious company and are used for illustration purposes only. </li></ul>