<?xml version='1.0' encoding='UTF-8'?><?xml-stylesheet href="http://www.blogger.com/styles/atom.css" type="text/css"?><feed xmlns='http://www.w3.org/2005/Atom' xmlns:openSearch='http://a9.com/-/spec/opensearchrss/1.0/' xmlns:georss='http://www.georss.org/georss'><id>tag:blogger.com,1999:blog-33474092</id><updated>2009-10-09T09:00:14.678-07:00</updated><title type='text'>OpenDOM</title><subtitle type='html'>Exploring Lotus Notes &amp; Domino object-oriented analysis &amp; design (OOAD)&lt;br&gt;Using Unified Modeling Language (UML) in combination with Domino design constructs &amp; languages.</subtitle><link rel='http://schemas.google.com/g/2005#feed' type='application/atom+xml' href='http://opendom.blogspot.com/feeds/posts/default'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/33474092/posts/default'/><link rel='alternate' type='text/html' href='http://opendom.blogspot.com/'/><link rel='hub' href='http://pubsubhubbub.appspot.com/'/><author><name>Alain H Romedenne</name><uri>http://www.blogger.com/profile/02870481308516705695</uri><email>noreply@blogger.com</email></author><generator version='7.00' uri='http://www.blogger.com'>Blogger</generator><openSearch:totalResults>10</openSearch:totalResults><openSearch:startIndex>1</openSearch:startIndex><openSearch:itemsPerPage>25</openSearch:itemsPerPage><entry><id>tag:blogger.com,1999:blog-33474092.post-4044822173076274684</id><published>2007-12-09T02:20:00.000-08:00</published><updated>2007-12-09T04:12:40.426-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='SnTT'/><category scheme='http://www.blogger.com/atom/ns#' term='Domino Object Model'/><category scheme='http://www.blogger.com/atom/ns#' term='LotusScript'/><title type='text'>Undocumented LotusScript R8loaded</title><content type='html'>&lt;div align="right"&gt;&lt;span style="font-size:78%;"&gt;&lt;a href="http://lotusjaune.blogspot.com/2007/12/notesdomino-dom-lotusscript-mis-nu.html"&gt;Version française&lt;/a&gt;&lt;/span&gt;&lt;/div&gt;&lt;div align="right"&gt; &lt;br /&gt;&lt;/div&gt;&lt;div align="left"&gt;Here’s a short list of undocumented LotusScript properties and methods I built out the Notes R8 notes32.tlb type library. &lt;/div&gt;&lt;p&gt;Usual caution applies to such &lt;u&gt;unsupported materiel&lt;/u&gt;. Use this at your personal convenience with no guarantee.&lt;/p&gt;&lt;div align="left"&gt;&lt;/div&gt;&lt;div align="left"&gt;&lt;/div&gt;&lt;div align="left"&gt;&lt;/div&gt;&lt;ul&gt;&lt;li&gt;&lt;div align="left"&gt;NotesDatabase&lt;br /&gt;archiveDestinations : Variant&lt;/div&gt;&lt;/li&gt;&lt;li&gt;&lt;div align="left"&gt;NotesDocument&lt;br /&gt;SequenceTime : Variant&lt;/div&gt;&lt;/li&gt;&lt;/ul&gt;&lt;div align="left"&gt;&lt;/div&gt;&lt;div align="left"&gt;&lt;a href="http://opendom.blogspot.com/2006/12/plot-undocumented-dom-lotusscript_14.html"&gt;Plot Undocumented DOM LotusScript Using Visual Basic 2005 Express free Edition&lt;/a&gt; and &lt;a href="http://opendom.blogspot.com/2006/11/use-rational-rose-to-identify.html"&gt;Use Rational Rose to Identify Undocumented DOM Properties and Methods&lt;/a&gt; detail steps to follow in order to dive into Domino/Notes R8 LotusScript hidden features. &lt;a href="http://opendom.blogspot.com/2006/11/undocumented-dom-lotusscript-inventory.html"&gt;Undocumented DOM LotusScript Inventory&lt;/a&gt; details LotusScript undocumented properties and methods in Notes Release 7. &lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/33474092-4044822173076274684?l=opendom.blogspot.com'/&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://opendom.blogspot.com/feeds/4044822173076274684/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='https://www.blogger.com/comment.g?blogID=33474092&amp;postID=4044822173076274684' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/33474092/posts/default/4044822173076274684'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/33474092/posts/default/4044822173076274684'/><link rel='alternate' type='text/html' href='http://opendom.blogspot.com/2007/12/undocumented-lotusscript-r8loaded.html' title='Undocumented LotusScript R8loaded'/><author><name>Alain H Romedenne</name><uri>http://www.blogger.com/profile/02870481308516705695</uri><email>noreply@blogger.com</email><gd:extendedProperty xmlns:gd='http://schemas.google.com/g/2005' name='OpenSocialUserId' value='14648845359575968256'/></author><thr:total xmlns:thr='http://purl.org/syndication/thread/1.0'>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-33474092.post-5054718316611754828</id><published>2007-07-25T05:17:00.000-07:00</published><updated>2007-07-25T05:23:18.910-07:00</updated><title type='text'>OpenDOM fun!</title><content type='html'>&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://2.bp.blogspot.com/_TwaqrCV_JzI/RqdAk761VvI/AAAAAAAAAC4/--W1pW-PF5Q/s1600-h/OpenDOM+%28gloves%29.jpg"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer;" src="http://2.bp.blogspot.com/_TwaqrCV_JzI/RqdAk761VvI/AAAAAAAAAC4/--W1pW-PF5Q/s320/OpenDOM+%28gloves%29.jpg" alt="" id="BLOGGER_PHOTO_ID_5091108907069560562" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://2.bp.blogspot.com/_TwaqrCV_JzI/RqdAW761VuI/AAAAAAAAACw/AcRnxw6nIWs/s1600-h/OpenDOM+%28UML%2BOOP%29.jpg"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer;" src="http://2.bp.blogspot.com/_TwaqrCV_JzI/RqdAW761VuI/AAAAAAAAACw/AcRnxw6nIWs/s320/OpenDOM+%28UML%2BOOP%29.jpg" alt="" id="BLOGGER_PHOTO_ID_5091108666551391970" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://4.bp.blogspot.com/_TwaqrCV_JzI/RqdARb61VtI/AAAAAAAAACo/LiwIAxHtSNg/s1600-h/OpenDOM.jpg"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer;" src="http://4.bp.blogspot.com/_TwaqrCV_JzI/RqdARb61VtI/AAAAAAAAACo/LiwIAxHtSNg/s320/OpenDOM.jpg" alt="" id="BLOGGER_PHOTO_ID_5091108572062111442" border="0" /&gt;&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/33474092-5054718316611754828?l=opendom.blogspot.com'/&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://opendom.blogspot.com/feeds/5054718316611754828/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='https://www.blogger.com/comment.g?blogID=33474092&amp;postID=5054718316611754828' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/33474092/posts/default/5054718316611754828'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/33474092/posts/default/5054718316611754828'/><link rel='alternate' type='text/html' href='http://opendom.blogspot.com/2007/07/opendom-fun.html' title='OpenDOM fun!'/><author><name>Alain H Romedenne</name><uri>http://www.blogger.com/profile/02870481308516705695</uri><email>noreply@blogger.com</email><gd:extendedProperty xmlns:gd='http://schemas.google.com/g/2005' name='OpenSocialUserId' value='14648845359575968256'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://2.bp.blogspot.com/_TwaqrCV_JzI/RqdAk761VvI/AAAAAAAAAC4/--W1pW-PF5Q/s72-c/OpenDOM+%28gloves%29.jpg' height='72' width='72'/><thr:total xmlns:thr='http://purl.org/syndication/thread/1.0'>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-33474092.post-1186398334205899046</id><published>2007-04-06T13:03:00.000-07:00</published><updated>2007-04-12T04:38:38.812-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='SnTT'/><category scheme='http://www.blogger.com/atom/ns#' term='Object Oriented Programming'/><category scheme='http://www.blogger.com/atom/ns#' term='LotusScript'/><category scheme='http://www.blogger.com/atom/ns#' term='abstract class'/><category scheme='http://www.blogger.com/atom/ns#' term='OOP'/><category scheme='http://www.blogger.com/atom/ns#' term='interface class'/><category scheme='http://www.blogger.com/atom/ns#' term='OOD'/><category scheme='http://www.blogger.com/atom/ns#' term='Object Oriented Design'/><title type='text'>Interfaces &amp; Abstract Classes with LotusScript</title><content type='html'>&lt;div style="text-align: right;"&gt;&lt;a href="http://lotusjaune.blogspot.com/2007/04/interfaces-classes-abstraites-en.html#links"&gt;&lt;span style="font-size:78%;"&gt;version française&lt;/span&gt;&lt;br /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://1.bp.blogspot.com/_TwaqrCV_JzI/RhanIIeoADI/AAAAAAAAACQ/8T-w2mcju58/s1600-h/Dominos.gif"&gt;&lt;img style="margin: 0pt 10px 10px 0pt; float: left; cursor: pointer;" src="http://1.bp.blogspot.com/_TwaqrCV_JzI/RhanIIeoADI/AAAAAAAAACQ/8T-w2mcju58/s320/Dominos.gif" alt="" id="BLOGGER_PHOTO_ID_5050407790299316274" border="0" /&gt;&lt;/a&gt;Interface and abstract classes define objects properties and methods, just as ordinary classes do. One generally creates as many objects as necessary from standard classes, while interface classes are solely intended to describe contracts that future objects will guarantee. Interfaces classes usually contain no code and can't be used to instantiate objects. In turn abstract classes prototype properties and methods. Abstract classes can't be instantiated either and require to be derived so that its subclasses benefit from their code. Compilers closely control interface compliant classes and usually prevent from interface or abstract classes instantiations.&lt;br /&gt;&lt;br /&gt;Designers usually resort to interface or abstract classes to build loosely coupled application code that's more adaptable, more maintainable and ends up being more robust. Although such class constructs are missing from native LotusScript, those object oriented design concepts can be implemented in your LotusScript code with little effort.&lt;br /&gt;&lt;br /&gt;As an exemple, consider designing a LotusScript.io.File class that holds the following subset of attributes and operations: canWrite( ), getAbsolutePath( ), length( ), list( ), renameTo( ). You may either develop a full LotusScript solution, either build an LS2J based solution, either resort to Windows Script Host COM object library or even call Windows/32 native functions. Defining iFile interface class sounds a valuable approach that exhibits properties and methods regardless of the implemented inner workings. While your calling code relies on a stable interface, your concrete implementations can vary at will or be changed without notice. Doing so you're building a loosely coupled Notes or Domino application.&lt;br /&gt;&lt;br /&gt;&lt;div style="text-align: center;"&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://1.bp.blogspot.com/_TwaqrCV_JzI/RhaiNIeoAAI/AAAAAAAAAB4/tI59gcKafiE/s1600-h/Stopwatches+UML+Class+Diagram.JPG"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer;" src="http://1.bp.blogspot.com/_TwaqrCV_JzI/RhaiNIeoAAI/AAAAAAAAAB4/tI59gcKafiE/s320/Stopwatches+UML+Class+Diagram.JPG" alt="" id="BLOGGER_PHOTO_ID_5050402378640523266" border="0" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;div style="text-align: center;"&gt;&lt;span style="font-size:78%;"&gt;&lt;span style="font-weight: bold;"&gt;Figure 1:&lt;/span&gt;  StopWatches UML Class Diagram&lt;br /&gt;&lt;/span&gt;&lt;div style="text-align: left;"&gt;&lt;br /&gt;&lt;a href="http://www.openntf.org/projects/pmt.nsf/ProjectLookup/OpenDOM" gping="/GLinkPing.aspx?/_1_9SE/1?http://www.openntf.org/projects/pmt.nsf/ProjectLookup/OpenDOM&amp;amp;amp;amp;amp;amp;&amp;DI=78&amp;amp;IG=3c3041b4ccb34ab08244176fb8eefb28&amp;POS=2&amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;CM=WPU&amp;CE=2&amp;amp;CS=AWP&amp;SR=2&amp;amp;sample=0"&gt;OpenDOM&lt;/a&gt; open source project you can download from &lt;a href="http://www.openntf.org/"&gt;www.openntf.org&lt;/a&gt; contains numerous code samples benefitting from interfaces and abstract classes design constructs. Its LotusScript.lang.StopWatches library uses iTicker public interface in four different implementations accommodating LotusScript release 3 and 4+, Windows/16 and Windows/32 contexts. LotusScript.lang.R&lt;span style="font-style: italic;"&gt;n&lt;/span&gt; or LotusScript.windows.win&lt;span style="font-style: italic;"&gt;nn&lt;/span&gt; packages, or namespaces, contain iTicker interface compliant concrete classes. StopWatches public class internal iTicker engine gets loaded dynamically according to the most appropriate situation.&lt;br /&gt;&lt;br /&gt;You can prevent from objects instantiation, and make sure properties and methods get derived or overridden. But creating private LotusScript class constructors as in ..&lt;br /&gt;&lt;pre&gt;&lt;div   style="border: 1pt dotted black; padding: 15px; color: black; background-color: rgb(255, 255, 238);font-family:sans-serif;font-size:9pt;"&gt;&lt;span style="color:blue;"&gt;Public&lt;/span&gt; &lt;span style="color:blue;"&gt;Class&lt;/span&gt; iVehicle&lt;br /&gt;&lt;span style="color:red;"&gt;   Private&lt;/span&gt; &lt;span style="color:blue;"&gt;Sub&lt;/span&gt; &lt;span style="color:blue;"&gt;New&lt;/span&gt;&lt;br /&gt;&lt;span style="color:blue;"&gt;   End&lt;/span&gt; &lt;span style="color:blue;"&gt;Sub&lt;/span&gt;&lt;br /&gt;&lt;span style="color:blue;"&gt;End&lt;/span&gt; &lt;span style="color:blue;"&gt;Class&lt;/span&gt; &lt;span style="color:green;"&gt;' iVehicle&lt;/span&gt;&lt;br /&gt;&lt;/div&gt;&lt;/pre&gt;.. throws the following compiler exception :&lt;br /&gt;&lt;&lt;span style="font-style: italic;"&gt;noteName&lt;/span&gt;&gt;: &lt;&lt;span style="font-style: italic;"&gt;eventName&lt;/span&gt;&gt;: &lt;&lt;span style="font-style: italic;"&gt;lineNumber&lt;/span&gt;&gt;: Illegal PRIVATE declaration of: NEW&lt;br /&gt;&lt;br /&gt;As LotusScript does not natively support interface classes or private constructors as above I adopted another approach. I prevent from interface or abstracts classes instantiation &lt;u&gt;at runtime only&lt;/u&gt; throwing exception in class constructors, I force properties and methods to be derived throwing equivalent runtime exceptions as in :&lt;br /&gt;&lt;pre&gt;&lt;div style="border: 1pt dotted black; padding: 15px; font-family: sans-serif; font-size: 9pt; color: black; background-color: rgb(255, 255, 238);"&gt;&lt;span style="color: pink;"&gt;%INCLUDE&lt;/span&gt; &lt;span style="color: pink;"&gt;"LsErr.lss"&lt;/span&gt;&lt;br /&gt;&lt;span style="color: blue;"&gt;Public&lt;/span&gt; &lt;span style="color: blue;"&gt;Class&lt;/span&gt; iVehicle &lt;span style="color: green;"&gt;' &lt;/span&gt;&lt;br /&gt;  &lt;span style="color: blue;"&gt;Public&lt;/span&gt; &lt;span style="color: blue;"&gt;Sub&lt;/span&gt; &lt;span style="color: blue;"&gt;New&lt;/span&gt; &lt;span style="color: green;"&gt;' This forbids interface instantiation, please derive me ! &lt;/span&gt;&lt;br /&gt;     &lt;span style="color: blue;"&gt;If&lt;/span&gt; &lt;span style="color: blue;"&gt;Typename&lt;/span&gt;&lt;span style="color: blue;"&gt;(&lt;/span&gt; &lt;span style="color: blue;"&gt;Me&lt;/span&gt; &lt;span style="color: blue;"&gt;)&lt;/span&gt; &lt;span style="color: blue;"&gt;=&lt;/span&gt; &lt;span style="color: black;"&gt;"IVEHICLE"&lt;/span&gt; &lt;span style="color: blue;"&gt;Then&lt;/span&gt; &lt;span style="color: blue;"&gt;Error&lt;/span&gt; ErrNotAnObject&lt;br /&gt;  &lt;span style="color: blue;"&gt;End&lt;/span&gt; &lt;span style="color: blue;"&gt;Sub&lt;/span&gt; &lt;span style="color: green;"&gt;' New&lt;/span&gt;&lt;br /&gt;  &lt;span style="color: blue;"&gt;Public&lt;/span&gt; &lt;span style="color: blue;"&gt;Property&lt;/span&gt; &lt;span style="color: blue;"&gt;Get&lt;/span&gt; Color &lt;span style="color: blue;"&gt;As&lt;/span&gt; NotesColor&lt;br /&gt;     &lt;span style="color: blue;"&gt;Error&lt;/span&gt; errPropGetNotDefined&lt;br /&gt;  &lt;span style="color: blue;"&gt;End&lt;/span&gt; &lt;span style="color: blue;"&gt;Property&lt;/span&gt; &lt;span style="color: green;"&gt;' Color&lt;/span&gt;&lt;br /&gt;  &lt;span style="color: blue;"&gt;Public&lt;/span&gt; &lt;span style="color: blue;"&gt;Property&lt;/span&gt; &lt;span style="color: blue;"&gt;Set&lt;/span&gt; Price &lt;span style="color: blue;"&gt;As&lt;/span&gt; &lt;span style="color: blue;"&gt;Currency&lt;/span&gt;&lt;br /&gt;     &lt;span style="color: blue;"&gt;Error&lt;/span&gt; errPropSetNotDefined&lt;br /&gt;  &lt;span style="color: blue;"&gt;End&lt;/span&gt; &lt;span style="color: blue;"&gt;Property&lt;/span&gt; &lt;span style="color: green;"&gt;' Price&lt;/span&gt;&lt;br /&gt;  &lt;span style="color: blue;"&gt;Public&lt;/span&gt; &lt;span style="color: blue;"&gt;Sub&lt;/span&gt; starts&lt;span style="color: blue;"&gt;(&lt;/span&gt; &lt;span style="color: blue;"&gt;)&lt;/span&gt;&lt;br /&gt;     &lt;span style="color: blue;"&gt;Error&lt;/span&gt; ErrNotAMethod&lt;br /&gt;  &lt;span style="color: blue;"&gt;End&lt;/span&gt; &lt;span style="color: blue;"&gt;Sub&lt;/span&gt; &lt;span style="color: green;"&gt;' starts( )&lt;/span&gt;&lt;br /&gt;&lt;span style="color: blue;"&gt;End&lt;/span&gt; &lt;span style="color: blue;"&gt;Class&lt;/span&gt; &lt;span style="color: green;"&gt;' iVehicle &lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="color: blue;"&gt;Public&lt;/span&gt; &lt;span style="color: blue;"&gt;Class&lt;/span&gt; aShuttle&lt;br /&gt;  &lt;span style="color: blue;"&gt;Public&lt;/span&gt; &lt;span style="color: blue;"&gt;Property&lt;/span&gt; &lt;span style="color: blue;"&gt;Get&lt;/span&gt; isFree &lt;span style="color: blue;"&gt;As&lt;/span&gt; &lt;span style="color: blue;"&gt;Boolean&lt;/span&gt; &lt;span style="color: green;"&gt;' &lt;/span&gt;&lt;br /&gt;     &lt;span style="color: blue;"&gt;Error&lt;/span&gt; errPropSetNotDefined&lt;br /&gt;  &lt;span style="color: blue;"&gt;End&lt;/span&gt; &lt;span style="color: blue;"&gt;Property&lt;/span&gt; &lt;span style="color: green;"&gt;' isFree &lt;/span&gt;&lt;br /&gt;&lt;span style="color: blue;"&gt;End&lt;/span&gt; &lt;span style="color: blue;"&gt;Class&lt;/span&gt; &lt;span style="color: green;"&gt;' aShuttle&lt;/span&gt;&lt;br /&gt;&lt;/div&gt;&lt;/pre&gt;&lt;br /&gt;Once I established my interface, I can devise to write as many concrete classes implementing it and provide a factory class or routine serving context dependent objects :&lt;br /&gt;&lt;pre&gt;&lt;div   style="border: 1pt dotted black; padding: 15px; color: black; background-color: rgb(255, 255, 238);font-family:sans-serif;font-size:9pt;"&gt;&lt;span style="color:blue;"&gt;Private&lt;/span&gt; &lt;span style="color:blue;"&gt;Class&lt;/span&gt; Car &lt;span style="color:blue;"&gt;As&lt;/span&gt; iVehicle&lt;br /&gt;&lt;span style="color:green;"&gt;    ' Your code goes here ..&lt;/span&gt;&lt;br /&gt;&lt;span style="color:blue;"&gt;End&lt;/span&gt; &lt;span style="color:blue;"&gt;Class&lt;/span&gt; &lt;span style="color:green;"&gt;' Car As iVehicle&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="color:blue;"&gt;Private&lt;/span&gt; &lt;span style="color:blue;"&gt;Class&lt;/span&gt; Truck &lt;span style="color:blue;"&gt;As&lt;/span&gt; iVehicle&lt;br /&gt;&lt;span style="color:green;"&gt;   ' Your code goes here ..&lt;/span&gt;&lt;br /&gt;&lt;span style="color:blue;"&gt;End&lt;/span&gt; &lt;span style="color:blue;"&gt;Class&lt;/span&gt; &lt;span style="color:green;"&gt;' Truck As iVehicle&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="color:blue;"&gt;Public&lt;/span&gt; &lt;span style="color:blue;"&gt;Function&lt;/span&gt; createVehicle &lt;span style="color:blue;"&gt;As&lt;/span&gt; iVehicle&lt;br /&gt;&lt;span style="color:blue;"&gt;   If&lt;/span&gt; &lt;span style="color:blue;"&gt;(&lt;/span&gt; so &lt;span style="color:blue;"&gt;And&lt;/span&gt; so &lt;span style="color:blue;"&gt;)&lt;/span&gt; &lt;span style="color:blue;"&gt;Then&lt;/span&gt;&lt;br /&gt;&lt;span style="color:blue;"&gt;      Set&lt;/span&gt; &lt;span style="color:blue;"&gt;Me&lt;/span&gt;&lt;span style="color:blue;"&gt;.&lt;/span&gt;createVehicle &lt;span style="color:blue;"&gt;=&lt;/span&gt; &lt;span style="color:blue;"&gt;New&lt;/span&gt; Car&lt;br /&gt;&lt;span style="color:blue;"&gt;   Else&lt;/span&gt;&lt;br /&gt;&lt;span style="color:blue;"&gt;      Set&lt;/span&gt; &lt;span style="color:blue;"&gt;Me&lt;/span&gt;&lt;span style="color:blue;"&gt;.&lt;/span&gt;createVehicle &lt;span style="color:blue;"&gt;=&lt;/span&gt; &lt;span style="color:blue;"&gt;New&lt;/span&gt; Truck&lt;br /&gt;&lt;span style="color:blue;"&gt;   End&lt;/span&gt; &lt;span style="color:blue;"&gt;If&lt;/span&gt;&lt;br /&gt;&lt;span style="color:blue;"&gt;End&lt;/span&gt; &lt;span style="color:blue;"&gt;Function&lt;/span&gt;&lt;br /&gt;&lt;/div&gt;&lt;/pre&gt;&lt;br /&gt;&lt;a href="http://www.openntf.org/projects/pmt.nsf/ProjectLookup/OpenDOM" gping="/GLinkPing.aspx?/_1_9SE/1?http://www.openntf.org/projects/pmt.nsf/ProjectLookup/OpenDOM&amp;amp;amp;amp;amp;amp;&amp;DI=78&amp;amp;IG=3c3041b4ccb34ab08244176fb8eefb28&amp;POS=2&amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;CM=WPU&amp;CE=2&amp;amp;CS=AWP&amp;SR=2&amp;amp;sample=0"&gt;OpenDOM&lt;/a&gt; LotusScript.lang.Factory class creates objects this way. It is inspired from « Performance Considerations for Domino Applications » IBM redbook whose « B-2 Dynamic Script Library Loading » worth reading appendix explains how to dynamically load LotusScript libraries in your object oriented programs. While IBM code performs objects dynamic instantiation, attentive reading reveals such is accomplished using variants that defeat compiler time type checks. Adding interface classes your code overcomes this obstacle and offers multiple advantages :&lt;br /&gt;&lt;ul&gt;&lt;li&gt;You're designing loosely coupled LotusScript while building application classes regardless of their internal technical alternatives you will freely accommodate,&lt;br /&gt;&lt;/li&gt;&lt;li&gt;Early bound objects allow type safety controls to occur at compile time which is considered a best practice,&lt;/li&gt;&lt;li&gt;LotusScript interpreter memory footprint increases progressively as library objects are gradually loaded. Although libraries are compiled prior to be loaded, this gets mostly unnoticed and is largely compensated by memory minimised consumption.&lt;/li&gt;&lt;/ul&gt;In order to achieve early binding of dynamic objects, Factory class makes intensive use of interface or abstract classes. As opposed to IBM NewObj original routine Factory class dynamically instantiates strongly typed objects, thus provides compile-time checks which enforces applications robustness and reliability.&lt;br /&gt;&lt;br /&gt;Places of interest:&lt;br /&gt;&lt;ul&gt;&lt;li&gt;&lt;a href="http://trade.hamk.fi/valjakka/work/index.htm"&gt;« Lotus Notes and Object-Oriented System Design »&lt;/a&gt;, Mikko Valjakka&lt;/li&gt;&lt;li&gt;Appendix &lt;a href="http://www.redbooks.ibm.com/abstracts/sg245602.html"&gt;« B-2 Dynamic Script Library Loading »&lt;/a&gt; in Performance Considerations for Domino Applications IBM RedBook&lt;br /&gt;&lt;a href="http://www.hadsl.com/hadslblog.nsf/BlogByMonth?OpenView&amp;RestrictToCategory=11-2006"&gt;«Dynamic loading of LotusScript libraries»&lt;/a&gt; in HADSL blog&lt;/li&gt;&lt;li&gt;&lt;a href="http://www.hadsl.com/hadsl.nsf/AD507.pdf"&gt;« Leveraging the Power of Object Oriented Programming in LotusScript »&lt;/a&gt;, Jens-B Augustiny &amp;amp; &lt;span style="color: rgb(153, 153, 153);"&gt;Wild&lt;/span&gt; Bill Buchan&lt;br /&gt;&lt;a href="http://www.hadsl.com/hadsl.nsf/BP301.pdf"&gt;« Object Orientated Programming in LotusScript »&lt;/a&gt;, &lt;span style="color: rgb(192, 192, 192);"&gt;Wild&lt;/span&gt; Bill Buchan&lt;/li&gt;&lt;li&gt;&lt;a href="http://www.assono.de/blog.nsf/Downloads/EC06PDFOOLS/$File/OOLotusScript.pdf"&gt;« Objektorientierung in LotusScript effizient einsetzen »&lt;/a&gt;, Bernd Hort&lt;/li&gt;&lt;/ul&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/33474092-1186398334205899046?l=opendom.blogspot.com'/&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://opendom.blogspot.com/feeds/1186398334205899046/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='https://www.blogger.com/comment.g?blogID=33474092&amp;postID=1186398334205899046' title='3 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/33474092/posts/default/1186398334205899046'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/33474092/posts/default/1186398334205899046'/><link rel='alternate' type='text/html' href='http://opendom.blogspot.com/2007/04/interfaces-abstract-classes-with.html' title='Interfaces &amp; Abstract Classes with LotusScript'/><author><name>Alain H Romedenne</name><uri>http://www.blogger.com/profile/02870481308516705695</uri><email>noreply@blogger.com</email><gd:extendedProperty xmlns:gd='http://schemas.google.com/g/2005' name='OpenSocialUserId' value='14648845359575968256'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://1.bp.blogspot.com/_TwaqrCV_JzI/RhanIIeoADI/AAAAAAAAACQ/8T-w2mcju58/s72-c/Dominos.gif' height='72' width='72'/><thr:total xmlns:thr='http://purl.org/syndication/thread/1.0'>3</thr:total></entry><entry><id>tag:blogger.com,1999:blog-33474092.post-5778480256448839089</id><published>2007-03-21T12:17:00.000-07:00</published><updated>2007-03-22T02:45:39.307-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Static Members'/><category scheme='http://www.blogger.com/atom/ns#' term='SnTT'/><category scheme='http://www.blogger.com/atom/ns#' term='LotusScript'/><category scheme='http://www.blogger.com/atom/ns#' term='Object-oriented programming'/><category scheme='http://www.blogger.com/atom/ns#' term='OOP'/><category scheme='http://www.blogger.com/atom/ns#' term='Static Class'/><title type='text'>Static Properties &amp; Methods in LotusScript Classes</title><content type='html'>&lt;div style="text-align: right;"&gt;&lt;a href="http://lotusjaune.blogspot.com/2007/03/proprits-et-mthodes-statiques-en.html"&gt;&lt;span style="font-size:78%;"&gt;version française&lt;br /&gt;Propriétés et Méthodes Statiques en LotusScript&lt;/span&gt;&lt;/a&gt;&lt;br /&gt;&lt;/div&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://3.bp.blogspot.com/_TwaqrCV_JzI/RgGFByYojsI/AAAAAAAAABg/YyUsi2cABKg/s1600-h/Dominos.gif"&gt;&lt;img style="margin: 0pt 10px 10px 0pt; float: left; cursor: pointer;" src="http://3.bp.blogspot.com/_TwaqrCV_JzI/RgGFByYojsI/AAAAAAAAABg/YyUsi2cABKg/s320/Dominos.gif" alt="" id="BLOGGER_PHOTO_ID_5044459323383123650" border="0" /&gt;&lt;/a&gt;In Java and JavaScript languages, static properties and static methods are shared by all instances of a given class. Non static members relate to objects instantiated from a class and are relevant to a single instance of that class thus File objects share pathSeparator operating system dependent static property, while getAbsolutePath( ), canWrite( ) properties differ from a File object to another as the delete( ) method yields separate results for every object. Utilizing static members does not require to instantiate objects e.g. java.io.File class pathSeparator property can be referenced typing File.pathSeparator or java.io.File.pathSeparator.&lt;br /&gt;&lt;br /&gt;Creating class level properties or methods in LotusScript may be useful. Consider a Platform class with properties such as Newline and supportsCOM. Although this class exhibits different information depending on the operating system, Newline and supportsCOM results are identical across all instances of the Platform class for a given Notes client or Domino server. Imagine a LotusScript.math package holding a Trigo utility class with sin(), cos() methods and a PI static property whose precisions are greater than that of native LotusScript Pi constant and functions.&lt;br /&gt;&lt;br /&gt;Although static members are not available in LotusScript to the extent Java and Javascript languages provide them, you can implement similar constructs with identical coding syntax. As an exemple I shall use LotusScript.lang.Interpreter class and its Release property, available from &lt;a href="http://www.openntf.org/projects/pmt.nsf/ProjectLookup/OpenDOM" gping="/GLinkPing.aspx?/_1_9SE/1?http://www.openntf.org/projects/pmt.nsf/ProjectLookup/OpenDOM&amp;amp;amp;amp;amp;amp;amp;&amp;DI=78&amp;amp;IG=3c3041b4ccb34ab08244176fb8eefb28&amp;POS=2&amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;CM=WPU&amp;CE=2&amp;amp;CS=AWP&amp;SR=2&amp;amp;sample=0"&gt;OpenDOM&lt;/a&gt; open source project at &lt;a href="http://www.openntf.org/"&gt;www.openntf.org&lt;/a&gt; site to illustrate my point.&lt;br /&gt;&lt;br /&gt;&lt;pre&gt;&lt;div   style="border: 1pt dotted black; padding: 15px; color: black; background-color: rgb(255, 255, 238);font-family:sans-serif;font-size:9pt;"&gt;&lt;span style="color:blue;"&gt;Private&lt;/span&gt; Release &lt;span style="color:blue;"&gt;As&lt;/span&gt; &lt;span style="color:blue;"&gt;String&lt;/span&gt;&lt;br /&gt;Release &lt;span style="color:blue;"&gt;=&lt;/span&gt; lsi_info&lt;span style="color:blue;"&gt;(&lt;/span&gt; 6 &lt;span style="color:blue;"&gt;)&lt;/span&gt;&lt;br /&gt;&lt;/div&gt;&lt;/pre&gt;&lt;br /&gt;While these two lines are the simplest way to compute a given LotusScript interpreter release, I like to protect my code from any sins including my own and I tend to adopt the following &lt;a href="http://www.breakingpar.com/bkp/home.nsf/0/87256B280015193F872570AD00528E48"&gt;defensive coding technique&lt;/a&gt; :&lt;br /&gt;&lt;br /&gt;&lt;pre&gt;&lt;div   style="border: 1pt dotted black; padding: 15px; color: black; background-color: rgb(255, 255, 238);font-family:sans-serif;font-size:9pt;"&gt;&lt;span style="color:blue;"&gt;Static&lt;/span&gt; &lt;span style="color:blue;"&gt;Private&lt;/span&gt; &lt;span style="color:blue;"&gt;Property&lt;/span&gt; &lt;span style="color:blue;"&gt;Get&lt;/span&gt; INTERPRETER_RELEASE &lt;span style="color:blue;"&gt;As&lt;/span&gt; &lt;span style="color:blue;"&gt;String&lt;/span&gt;&lt;br /&gt;&lt;span style="color:blue;"&gt;    Static&lt;/span&gt; this &lt;span style="color:blue;"&gt;As&lt;/span&gt; &lt;span style="color:blue;"&gt;String&lt;/span&gt;&lt;br /&gt;&lt;span style="color:blue;"&gt;    If&lt;/span&gt; this &lt;span style="color:blue;"&gt;=&lt;/span&gt; &lt;span style="color:black;"&gt;""&lt;/span&gt; &lt;span style="color:blue;"&gt;Then&lt;/span&gt; this &lt;span style="color:blue;"&gt;=&lt;/span&gt; Lsi_info&lt;span style="color:blue;"&gt;(&lt;/span&gt; 6 &lt;span style="color:blue;"&gt;)&lt;br /&gt;&lt;/span&gt;    INTERPRETER_RELEASE &lt;span style="color:blue;"&gt;=&lt;/span&gt; this&lt;br /&gt;&lt;span style="color:blue;"&gt;End&lt;/span&gt; &lt;span style="color:blue;"&gt;Property&lt;/span&gt; &lt;span style="color:green;"&gt;' LotusScript.lang.Interpreter.RELEASE property&lt;/span&gt;&lt;br /&gt;&lt;/div&gt;&lt;/pre&gt;&lt;br /&gt;LotusScript simplified Interpreter public class spells as follows :&lt;br /&gt;&lt;br /&gt;&lt;pre&gt;&lt;div   style="border: 1pt dotted black; padding: 15px; color: black; background-color: rgb(255, 255, 238);font-family:sans-serif;font-size:9pt;"&gt;&lt;span style="color:blue;"&gt;Public&lt;/span&gt; &lt;span style="color:blue;"&gt;Class&lt;/span&gt; Interpreter &lt;span style="color:green;"&gt;' &lt;class&gt;&lt;/class&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="color:blue;"&gt;    Property&lt;/span&gt; &lt;span style="color:blue;"&gt;Get&lt;/span&gt; RELEASE &lt;span style="color:blue;"&gt;As&lt;/span&gt; &lt;span style="color:blue;"&gt;String&lt;/span&gt; &lt;span style="color:green;"&gt;' &lt;static&gt;&lt;/static&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="color:blue;"&gt;        Me&lt;/span&gt;&lt;span style="color:blue;"&gt;.&lt;/span&gt;RELEASE &lt;span style="color:blue;"&gt;=&lt;/span&gt; INTERPRETER_RELEASE&lt;br /&gt;&lt;span style="color:blue;"&gt;    End&lt;/span&gt; &lt;span style="color:blue;"&gt;Property&lt;/span&gt; &lt;span style="color:green;"&gt;' LotusScript.lang.Interpreter.RELEASE&lt;/span&gt;&lt;br /&gt;&lt;span style="color:blue;"&gt;End&lt;/span&gt; &lt;span style="color:blue;"&gt;Class&lt;/span&gt; &lt;span style="color:green;"&gt;' LotusScript.lang.Interpreter Class&lt;/span&gt;&lt;br /&gt;&lt;/div&gt;&lt;/pre&gt;&lt;br /&gt;Note every objects instantiated from the Interpreter class share a common RELEASE property that can be qualified static as in Java and JavaScript. The Interpreter.RELEASE syntax can be implemented in "LotusScript.lang" script library as :&lt;br /&gt;&lt;br /&gt;&lt;pre&gt;&lt;div   style="border: 1pt dotted black; padding: 15px; color: black; background-color: rgb(255, 255, 238);font-family:sans-serif;font-size:9pt;"&gt;&lt;span style="color:blue;"&gt;Static&lt;/span&gt; &lt;span style="color:blue;"&gt;Public&lt;/span&gt; &lt;span style="color:blue;"&gt;Property&lt;/span&gt; &lt;span style="color:blue;"&gt;Get&lt;/span&gt; Interpreter &lt;span style="color:blue;"&gt;As&lt;/span&gt; Interpreter&lt;br /&gt;&lt;span style="color:blue;"&gt;    Static&lt;/span&gt; this &lt;span style="color:blue;"&gt;As&lt;/span&gt; Interpreter&lt;br /&gt;&lt;span style="color:blue;"&gt;    If&lt;/span&gt; this &lt;span style="color:blue;"&gt;Is&lt;/span&gt; &lt;span style="color:purple;"&gt;Nothing&lt;/span&gt; &lt;span style="color:blue;"&gt;Then&lt;/span&gt; &lt;span style="color:blue;"&gt;Set&lt;/span&gt; this &lt;span style="color:blue;"&gt;=&lt;/span&gt; &lt;span style="color:blue;"&gt;New&lt;/span&gt; Interpreter&lt;br /&gt;&lt;span style="color:blue;"&gt;    Set&lt;/span&gt; Interpreter &lt;span style="color:blue;"&gt;=&lt;/span&gt; this&lt;br /&gt;&lt;span style="color:blue;"&gt;End&lt;/span&gt; &lt;span style="color:blue;"&gt;Property&lt;/span&gt; &lt;span style="color:green;"&gt;' LotusScript.lang.Interpreter class&lt;/span&gt;&lt;br /&gt;&lt;/div&gt;&lt;/pre&gt;&lt;br /&gt;Such ability can be extended to LotusScript.lang.Interpreter.RELEASE fully qualified class name coding two extra classes and two properties as in :&lt;br /&gt;&lt;br /&gt;&lt;pre&gt;&lt;div   style="border: 1pt dotted black; padding: 15px; color: black; background-color: rgb(255, 255, 238);font-family:sans-serif;font-size:9pt;"&gt;&lt;span style="color:blue;"&gt;Public&lt;/span&gt; &lt;span style="color:blue;"&gt;Class&lt;/span&gt; lang &lt;span style="color:green;"&gt;' &lt;package&gt;&lt;/package&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="color:blue;"&gt;    Public&lt;/span&gt; &lt;span style="color:blue;"&gt;Property&lt;/span&gt; &lt;span style="color:blue;"&gt;Get&lt;/span&gt; Interpreter &lt;span style="color:green;"&gt;' &lt;static&gt;&lt;/static&gt;&lt;/span&gt;&lt;br /&gt;   &lt;span style="color:blue;"&gt;    Set&lt;/span&gt; &lt;span style="color:blue;"&gt;Me&lt;/span&gt;&lt;span style="color:blue;"&gt;.&lt;/span&gt;Interpreter &lt;span style="color:blue;"&gt;=&lt;/span&gt; LANG_INTERPRETER&lt;br /&gt;&lt;span style="color:blue;"&gt;    End&lt;/span&gt; &lt;span style="color:blue;"&gt;Property&lt;/span&gt; &lt;span style="color:green;"&gt;' LotusScript.lang.Interpreter   &lt;/span&gt;&lt;br /&gt;&lt;span style="color:blue;"&gt;End&lt;/span&gt; &lt;span style="color:blue;"&gt;Class&lt;/span&gt; &lt;span style="color:green;"&gt;' LotusScript.lang.* Package&lt;/span&gt;&lt;br /&gt;&lt;span style="color:blue;"&gt;Public&lt;/span&gt; &lt;span style="color:blue;"&gt;Class&lt;/span&gt; LotusScript &lt;span style="color:green;"&gt;' &lt;package&gt;&lt;/package&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="color:blue;"&gt;    Public&lt;/span&gt; &lt;span style="color:blue;"&gt;Property&lt;/span&gt; &lt;span style="color:blue;"&gt;Get&lt;/span&gt; lang &lt;span style="color:blue;"&gt;As&lt;/span&gt; lang &lt;span style="color:green;"&gt;' &lt;static&gt;&lt;/static&gt;&lt;/span&gt;&lt;br /&gt;   &lt;span style="color:blue;"&gt;    Set&lt;/span&gt; &lt;span style="color:blue;"&gt;Me&lt;/span&gt;&lt;span style="color:blue;"&gt;.&lt;/span&gt;lang &lt;span style="color:blue;"&gt;=&lt;/span&gt; LOTUSSCRIPT_LANG&lt;br /&gt;&lt;span style="color:blue;"&gt;    End&lt;/span&gt; &lt;span style="color:blue;"&gt;Property&lt;/span&gt; &lt;span style="color:green;"&gt;' LotusScript.lang.* Package&lt;/span&gt;&lt;br /&gt;&lt;span style="color:blue;"&gt;    Public&lt;/span&gt; io &lt;span style="color:blue;"&gt;As&lt;/span&gt; &lt;span style="color:blue;"&gt;Variant&lt;/span&gt; &lt;span style="color:green;"&gt;' As io__ ' &lt;dynamic&gt;&lt;/dynamic&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="color:blue;"&gt;    Public&lt;/span&gt; net &lt;span style="color:blue;"&gt;As&lt;/span&gt; &lt;span style="color:blue;"&gt;Variant&lt;/span&gt; &lt;span style="color:green;"&gt;' As net__ ' &lt;dynamic&gt;     &lt;/dynamic&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="color:blue;"&gt;End&lt;/span&gt; &lt;span style="color:blue;"&gt;Class&lt;/span&gt; &lt;span style="color:green;"&gt;' LotusScript.* Package&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="color:blue;"&gt;Static&lt;/span&gt; &lt;span style="color:blue;"&gt;Private&lt;/span&gt; &lt;span style="color:blue;"&gt;Property&lt;/span&gt; &lt;span style="color:blue;"&gt;Get&lt;/span&gt; LOTUSSCRIPT_LANG &lt;span style="color:blue;"&gt;As&lt;/span&gt; lang&lt;br /&gt;&lt;span style="color:blue;"&gt;    Static&lt;/span&gt; this &lt;span style="color:blue;"&gt;As&lt;/span&gt; lang&lt;br /&gt;&lt;span style="color:blue;"&gt;    If&lt;/span&gt; this &lt;span style="color:blue;"&gt;Is&lt;/span&gt; &lt;span style="color:purple;"&gt;Nothing&lt;/span&gt; &lt;span style="color:blue;"&gt;Then&lt;/span&gt; &lt;span style="color:blue;"&gt;Set&lt;/span&gt; this &lt;span style="color:blue;"&gt;=&lt;/span&gt; &lt;span style="color:blue;"&gt;New&lt;/span&gt; lang&lt;br /&gt;&lt;span style="color:blue;"&gt;    Set&lt;/span&gt; LOTUSSCRIPT_LANG &lt;span style="color:blue;"&gt;=&lt;/span&gt; this&lt;br /&gt;&lt;span style="color:blue;"&gt;End&lt;/span&gt; &lt;span style="color:blue;"&gt;Property&lt;/span&gt; &lt;span style="color:green;"&gt;' LotusScript.lang.* package&lt;/span&gt;&lt;br /&gt;&lt;span style="color:blue;"&gt;Static&lt;/span&gt; &lt;span style="color:blue;"&gt;Public&lt;/span&gt; &lt;span style="color:blue;"&gt;Property&lt;/span&gt; &lt;span style="color:blue;"&gt;Get&lt;/span&gt; LotusScript &lt;span style="color:blue;"&gt;As&lt;/span&gt; LotusScript&lt;br /&gt;&lt;span style="color:blue;"&gt;    Static&lt;/span&gt; this &lt;span style="color:blue;"&gt;As&lt;/span&gt; LotusScript&lt;br /&gt;&lt;span style="color:blue;"&gt;    If&lt;/span&gt; this &lt;span style="color:blue;"&gt;Is&lt;/span&gt; &lt;span style="color:purple;"&gt;Nothing&lt;/span&gt; &lt;span style="color:blue;"&gt;Then&lt;/span&gt;&lt;br /&gt;   &lt;span style="color:blue;"&gt;    Set&lt;/span&gt; this &lt;span style="color:blue;"&gt;=&lt;/span&gt; &lt;span style="color:blue;"&gt;New&lt;/span&gt; LotusScript&lt;br /&gt;&lt;span style="color:blue;"&gt;    End&lt;/span&gt; &lt;span style="color:blue;"&gt;If&lt;/span&gt;&lt;br /&gt;&lt;span style="color:blue;"&gt;    Set&lt;/span&gt; LotusScript &lt;span style="color:blue;"&gt;=&lt;/span&gt; this&lt;br /&gt;&lt;span style="color:blue;"&gt;End&lt;/span&gt; &lt;span style="color:blue;"&gt;Property&lt;/span&gt; &lt;span style="color:green;"&gt;' LotusScript.* package&lt;/span&gt;&lt;br /&gt;&lt;/div&gt;&lt;/pre&gt;&lt;br /&gt;Any agents, forms or views now require few lines of code to fully reuse  "LotusScript.lang" package library :&lt;br /&gt;&lt;br /&gt;&lt;pre&gt;&lt;div   style="border: 1pt dotted black; padding: 15px; color: black; background-color: rgb(255, 255, 238);font-family:sans-serif;font-size:9pt;"&gt;&lt;span style="color:blue;"&gt;Use&lt;/span&gt; &lt;span style="color:black;"&gt;"LotusScript.lang"&lt;/span&gt;&lt;br /&gt;&lt;span style="color:blue;"&gt;Msgbox&lt;/span&gt; LotusScript&lt;span style="color:blue;"&gt;.&lt;/span&gt;lang&lt;span style="color:blue;"&gt;.&lt;/span&gt;Interpreter&lt;span style="color:blue;"&gt;.&lt;/span&gt;RELEASE&lt;span style="color:blue;"&gt;,&lt;/span&gt;&lt;span style="color:blue;"&gt;,&lt;/span&gt; &lt;span style="color:blue;"&gt;_&lt;/span&gt;&lt;br /&gt;&lt;span style="color:black;"&gt;"LotusScript.lang.Interpreter.RELEASE"&lt;/span&gt;&lt;br /&gt;&lt;span style="color:green;"&gt;' OR&lt;/span&gt;&lt;br /&gt;&lt;span style="color:blue;"&gt;With&lt;/span&gt; LotusScript&lt;span style="color:blue;"&gt;.&lt;/span&gt;lang&lt;br /&gt;&lt;span style="color:blue;"&gt;    Msgbox&lt;/span&gt; Interpreter&lt;span style="color:blue;"&gt;.&lt;/span&gt;RELEASE&lt;span style="color:blue;"&gt;,&lt;/span&gt;&lt;span style="color:blue;"&gt;,&lt;/span&gt; &lt;span style="color:blue;"&gt;_&lt;/span&gt;&lt;br /&gt;&lt;span style="color:black;"&gt;    "Interpreter.RELEASE"&lt;/span&gt;&lt;br /&gt;&lt;span style="color:blue;"&gt;End&lt;/span&gt; &lt;span style="color:blue;"&gt;With&lt;/span&gt;&lt;br /&gt;&lt;/div&gt;&lt;/pre&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/33474092-5778480256448839089?l=opendom.blogspot.com'/&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://opendom.blogspot.com/feeds/5778480256448839089/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='https://www.blogger.com/comment.g?blogID=33474092&amp;postID=5778480256448839089' title='8 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/33474092/posts/default/5778480256448839089'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/33474092/posts/default/5778480256448839089'/><link rel='alternate' type='text/html' href='http://opendom.blogspot.com/2007/03/static-properties-methods-in.html' title='Static Properties &amp; Methods in LotusScript Classes'/><author><name>Alain H Romedenne</name><uri>http://www.blogger.com/profile/02870481308516705695</uri><email>noreply@blogger.com</email><gd:extendedProperty xmlns:gd='http://schemas.google.com/g/2005' name='OpenSocialUserId' value='14648845359575968256'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://3.bp.blogspot.com/_TwaqrCV_JzI/RgGFByYojsI/AAAAAAAAABg/YyUsi2cABKg/s72-c/Dominos.gif' height='72' width='72'/><thr:total xmlns:thr='http://purl.org/syndication/thread/1.0'>8</thr:total></entry><entry><id>tag:blogger.com,1999:blog-33474092.post-4884503440735801928</id><published>2007-02-06T13:05:00.000-08:00</published><updated>2007-02-06T13:31:05.068-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='SnTT'/><category scheme='http://www.blogger.com/atom/ns#' term='Lotus Notes'/><category scheme='http://www.blogger.com/atom/ns#' term='preview'/><title type='text'>Rehabilitate Document Preview !</title><content type='html'>&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://2.bp.blogspot.com/_TwaqrCV_JzI/RcjwF95YcuI/AAAAAAAAAA8/EbVO8UTzOXU/s1600-h/Dominos.gif"&gt;&lt;img style="margin: 0pt 10px 10px 0pt; float: left; cursor: pointer;" src="http://2.bp.blogspot.com/_TwaqrCV_JzI/RcjwF95YcuI/AAAAAAAAAA8/EbVO8UTzOXU/s320/Dominos.gif" alt="" id="BLOGGER_PHOTO_ID_5028532969264411362" border="0" /&gt;&lt;/a&gt;Since framesets have been available to Domino designers, that is from release 5 onwards, Notes applications attempted to escape from the traditional 3-panes user interface that long-time proposed a left navigation pane, a right-top view pane and a right-bottom document preview. As developers discovered the flexibility offered by framesets, few Notes applications have exhibited original interfaces, many applications have retained a traditional 3-frames arrangement while others even presented a somewhat limited 2-frames disposition.&lt;br /&gt;&lt;br /&gt;As framesets have become prevalent while building Notes applications user interfaces or entry points, this post proposes to rehabilitate document preview in applications that rely on framesets.&lt;br /&gt;&lt;br /&gt;3 different dispositions keep accompanying Notes classical 3-panes default presentation. You obtain them selecting View - Document Preview - Arrange Preview... context menu as illustrated in &lt;u&gt;figure 1&lt;/u&gt; below. Notice the so-called "Bottom Right" usual layout you're familiar with. While choosing a location end-users are provided three different interfaces. Unfortunately, nowadays frameset built applications rarely offer such a flexible and powerful user-oriented design.&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://3.bp.blogspot.com/_TwaqrCV_JzI/RcjwAN5YctI/AAAAAAAAAA0/cMit6s1OWxg/s1600-h/1.+View+-+Document+Preview+-+Arrange+Preview...+dialog+window..bmp"&gt;&lt;img style="cursor: pointer;" src="http://3.bp.blogspot.com/_TwaqrCV_JzI/RcjwAN5YctI/AAAAAAAAAA0/cMit6s1OWxg/s320/1.+View+-+Document+Preview+-+Arrange+Preview...+dialog+window..bmp" alt="" id="BLOGGER_PHOTO_ID_5028532870480163538" border="0" /&gt;&lt;/a&gt;&lt;p&gt;&lt;span style="font-weight: bold;"&gt;Figure 1:&lt;/span&gt; View - Document Preview - Arrange Preview... dialog window.&lt;/p&gt;While I do not mean developers should systematically propose multiple variations in pane arrangements, bringing particular attention and care while building user interfaces is common wisdom in designers community. Observe end-users are offered another option, past document preview activation. Using View - Document Preview - Zoom Preview context menu, documents can be maximised or set back to preview mode. If you feel like emulating document preview and zoom in framesets, please read on!&lt;br /&gt;&lt;br /&gt;Despite this long introduction, enabling document preview in framesets is easy, although not really documented. Suffice to name a frame "NotesPreview" and you're done! Truth is framesets secretly resort to "NotesPreview" hardcoded name to implement document preview. Say your application uses a 2-frame arrangement, as shown in &lt;u&gt;figure 2&lt;/u&gt;, and you intend to zoom documents using a 3-frame arrangement as in &lt;u&gt;figure 3&lt;/u&gt;. Split the right frame in 2 rows, name its bottom empty frame "NotesPreview", set its height to 0 and make sure the upper frame links target "NotesPreview" lower frame. Save your frameset and observe View - Document Preview context menu now contains two new options: Show Preview and Zoom Preview.&lt;br /&gt;&lt;br /&gt;I have systematically implemented document preview whenever I could and I've retained my addiction to document preview/zoom combined with the usage of framesets. Don't frustrate your experienced Notes users and start "NotesPreview"ing to their benefit !&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://4.bp.blogspot.com/_TwaqrCV_JzI/Rcjv1d5YcsI/AAAAAAAAAAs/I1djX6A8B1E/s1600-h/2.+2-Frame+arrangement+i.e.+Right-Left.bmp"&gt;&lt;img style="cursor: pointer;" src="http://4.bp.blogspot.com/_TwaqrCV_JzI/Rcjv1d5YcsI/AAAAAAAAAAs/I1djX6A8B1E/s320/2.+2-Frame+arrangement+i.e.+Right-Left.bmp" alt="" id="BLOGGER_PHOTO_ID_5028532685796569794" border="0" /&gt;&lt;/a&gt;&lt;p&gt;&lt;span style="font-weight: bold;"&gt;Figure 2:&lt;/span&gt; 2-Frame arrangement i.e. Right-Left&lt;/p&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://1.bp.blogspot.com/_TwaqrCV_JzI/Rcjvnt5YcrI/AAAAAAAAAAk/1vklyUl42cs/s1600-h/3.+3-Frame+arrangement+so-called+%C2%ABBottom+Right%C2%BB.bmp"&gt;&lt;img style="cursor: pointer;" src="http://1.bp.blogspot.com/_TwaqrCV_JzI/Rcjvnt5YcrI/AAAAAAAAAAk/1vklyUl42cs/s320/3.+3-Frame+arrangement+so-called+%C2%ABBottom+Right%C2%BB.bmp" alt="" id="BLOGGER_PHOTO_ID_5028532449573368498" border="0" /&gt;&lt;/a&gt;&lt;p&gt;&lt;span style="font-weight: bold;"&gt;Figure 3:&lt;/span&gt; 3-Frame arrangement so-called "Bottom Right"&lt;/p&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://4.bp.blogspot.com/_TwaqrCV_JzI/Rcjvad5YcqI/AAAAAAAAAAc/I7zjwJtbsW4/s1600-h/4.+Naming+a+frame+%C2%ABNotesPreview%C2%BB+suffices+to+implement+show+preview+or+zoom+preview+for+documents.bmp"&gt;&lt;img style="cursor: pointer;" src="http://4.bp.blogspot.com/_TwaqrCV_JzI/Rcjvad5YcqI/AAAAAAAAAAc/I7zjwJtbsW4/s320/4.+Naming+a+frame+%C2%ABNotesPreview%C2%BB+suffices+to+implement+show+preview+or+zoom+preview+for+documents.bmp" alt="" id="BLOGGER_PHOTO_ID_5028532221940101794" border="0" /&gt;&lt;/a&gt;&lt;p&gt;&lt;span style="font-weight: bold;"&gt;Figure 4:&lt;/span&gt; Naming a frame "NotesPreview" suffices to implement show preview or zoom preview for documents.&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/33474092-4884503440735801928?l=opendom.blogspot.com'/&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://opendom.blogspot.com/feeds/4884503440735801928/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='https://www.blogger.com/comment.g?blogID=33474092&amp;postID=4884503440735801928' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/33474092/posts/default/4884503440735801928'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/33474092/posts/default/4884503440735801928'/><link rel='alternate' type='text/html' href='http://opendom.blogspot.com/2007/02/rehabilitate-document-preview.html' title='Rehabilitate Document Preview !'/><author><name>Alain H Romedenne</name><uri>http://www.blogger.com/profile/02870481308516705695</uri><email>noreply@blogger.com</email><gd:extendedProperty xmlns:gd='http://schemas.google.com/g/2005' name='OpenSocialUserId' value='14648845359575968256'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://2.bp.blogspot.com/_TwaqrCV_JzI/RcjwF95YcuI/AAAAAAAAAA8/EbVO8UTzOXU/s72-c/Dominos.gif' height='72' width='72'/><thr:total xmlns:thr='http://purl.org/syndication/thread/1.0'>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-33474092.post-4755428435504661807</id><published>2006-12-30T06:26:00.000-08:00</published><updated>2007-01-04T08:26:45.278-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='SnTT'/><category scheme='http://www.blogger.com/atom/ns#' term='LotusScript'/><category scheme='http://www.blogger.com/atom/ns#' term='Windows API'/><category scheme='http://www.blogger.com/atom/ns#' term='Lotus Notes'/><category scheme='http://www.blogger.com/atom/ns#' term='Control Panel'/><title type='text'>Opening Control Panel applets in modal dialog boxes - Windows/32 only</title><content type='html'>&lt;p&gt;Executing Windows/32 Control Panel applets from LotusScript is easy. Suffice to code a Shell statement appending the applet name to the control program and the job is done. The following code sample opens up "Display Properties" and "Tweak UI" control panel dialogs.&lt;/p&gt;&lt;br /&gt;&lt;pre&gt;&lt;div style="font-family: sans-serif; font-size: 9pt; color: black; padding: 15px 15px 15px 15px; border-top: 1pt dotted black; border-bottom: 1pt dotted black; border-left: 1pt dotted black; border-right: 1pt dotted black; background-color: #FFFFEE;"&gt;&lt;font style="color: blue;"&gt;Dim&lt;/font&gt; TaskID &lt;font style="color: blue;"&gt;As&lt;/font&gt; &lt;font style="color: blue;"&gt;Integer&lt;/font&gt;&lt;br /&gt;&lt;font style="color: black;"&gt;taskID%&lt;/font&gt; &lt;font style="color: blue;"&gt;=&lt;/font&gt; &lt;font style="color: blue;"&gt;Shell&lt;/font&gt;&lt;font style="color: blue;"&gt;(&lt;/font&gt; &lt;font style="color: black;"&gt;"control desk.cpl"&lt;/font&gt; &lt;font style="color: blue;"&gt;)&lt;/font&gt; &lt;font style="color: green;"&gt;' Let's open up "Display Properties" window ..&lt;/font&gt;&lt;br /&gt;&lt;font style="color: black;"&gt;taskID%&lt;/font&gt; &lt;font style="color: blue;"&gt;=&lt;/font&gt; &lt;font style="color: blue;"&gt;Shell&lt;/font&gt;&lt;font style="color: blue;"&gt;(&lt;/font&gt; &lt;font style="color: black;"&gt;"tweakui.cpl"&lt;/font&gt; &lt;font style="color: blue;"&gt;)&lt;/font&gt; &lt;font style="color: green;"&gt;' .. then "Tweak UI" dialog box afterwards.&lt;/font&gt;&lt;br /&gt;&lt;/div&gt;&lt;/pre&gt;&lt;br /&gt;&lt;div style="clear:both;"&gt;&lt;p&gt;Applets shelled this way run independently from Notes applications whereas the ability to execute applets in Notes threads is tied to your client operating system. Nir Sofer's site &lt;a href="http://www.nirsoft.net/vb/cp.html"&gt;[1]&lt;/a&gt; details how Visual Basic programmers can display Control Panel applets within &lt;u&gt;modal dialog boxes&lt;/u&gt;. Nir achieves this performing Windows API calls and using VarPtr() Visual Basic only statement. While VarPtr() is not supported in LotusScript, designers with appropriate Windows/32 C API experience, can implement equivalent functionality. Thus Nir's Visual Basic code ..&lt;/p&gt;&lt;br /&gt;&lt;/div&gt;&lt;br /&gt;&lt;pre&gt;&lt;div style="font-family: sans-serif; font-size: 9pt; color: black; padding: 15px 15px 15px 15px; border-top: 1pt dotted black; border-bottom: 1pt dotted black; border-left: 1pt dotted black; border-right: 1pt dotted black; background-color: #FFFFEE;"&gt;&lt;font style="color: blue;"&gt;Private&lt;/font&gt; &lt;font style="color: blue;"&gt;Declare&lt;/font&gt; &lt;font style="color: blue;"&gt;Function&lt;/font&gt; CPlApplet_Main &lt;font style="color: blue;"&gt;Lib&lt;/font&gt; &lt;font style="color: black;"&gt;"main.cpl"&lt;/font&gt; &lt;font style="color: blue;"&gt;Alias&lt;/font&gt; &lt;font style="color: black;"&gt;"CPlApplet"&lt;/font&gt; &lt;font style="color: blue;"&gt;_&lt;/font&gt;&lt;br /&gt;&lt;font style="color: blue;"&gt;(&lt;/font&gt; &lt;font style="color: blue;"&gt;ByVal&lt;/font&gt; hwndCPl &lt;font style="color: blue;"&gt;As&lt;/font&gt; &lt;font style="color: blue;"&gt;Long&lt;/font&gt;&lt;font style="color: blue;"&gt;,&lt;/font&gt; &lt;font style="color: blue;"&gt;ByVal&lt;/font&gt; uMsg &lt;font style="color: blue;"&gt;As&lt;/font&gt; &lt;font style="color: blue;"&gt;Long&lt;/font&gt;&lt;font style="color: blue;"&gt;,&lt;/font&gt; &lt;font style="color: blue;"&gt;ByVal&lt;/font&gt; lParam1 &lt;font style="color: blue;"&gt;As&lt;/font&gt; &lt;font style="color: blue;"&gt;Long&lt;/font&gt;&lt;font style="color: blue;"&gt;,&lt;/font&gt; &lt;font style="color: blue;"&gt; _&lt;br /&gt;ByVal&lt;/font&gt; lParam2 &lt;font style="color: blue;"&gt;As&lt;/font&gt; &lt;font style="color: blue;"&gt;Long&lt;/font&gt; &lt;font style="color: blue;"&gt;)&lt;/font&gt; &lt;font style="color: blue;"&gt;As&lt;/font&gt; &lt;font style="color: blue;"&gt;Long&lt;/font&gt;&lt;br /&gt;&lt;font style="color: blue;"&gt;Private&lt;/font&gt; &lt;font style="color: blue;"&gt;Sub&lt;/font&gt; MainCplApplet&lt;font style="color: blue;"&gt;(&lt;/font&gt; lParam1 &lt;font style="color: blue;"&gt;As&lt;/font&gt; &lt;font style="color: blue;"&gt;Long&lt;/font&gt; &lt;font style="color: blue;"&gt;)&lt;/font&gt;&lt;br /&gt;&lt;font style="color: blue;"&gt;If&lt;/font&gt; CPlApplet_Main&lt;font style="color: blue;"&gt;(&lt;/font&gt; hWnd&lt;font style="color: blue;"&gt;,&lt;/font&gt; CPL_INIT&lt;font style="color: blue;"&gt;,&lt;/font&gt; 0&lt;font style="color: blue;"&gt;,&lt;/font&gt; 0 &lt;font style="color: blue;"&gt;)&lt;/font&gt; &lt;font style="color: blue;"&gt;&amp;#60;&lt;/font&gt;&lt;font style="color: blue;"&gt;&amp;#62;&lt;/font&gt; 0 &lt;font style="color: blue;"&gt;Then&lt;/font&gt;&lt;br /&gt;    CPlApplet_Main hWnd&lt;font style="color: blue;"&gt;,&lt;/font&gt; CPL_INQUIRE&lt;font style="color: blue;"&gt;,&lt;/font&gt; lParam1&lt;font style="color: blue;"&gt;,&lt;/font&gt; VarPtr&lt;font style="color: blue;"&gt;(&lt;/font&gt; ci &lt;font style="color: blue;"&gt;)&lt;/font&gt;&lt;br /&gt;    CPlApplet_Main hWnd&lt;font style="color: blue;"&gt;,&lt;/font&gt; CPL_DBLCLK&lt;font style="color: blue;"&gt;,&lt;/font&gt; lParam1&lt;font style="color: blue;"&gt;,&lt;/font&gt; ci&lt;font style="color: blue;"&gt;.&lt;/font&gt;lData&lt;br /&gt;    CPlApplet_Main hWnd&lt;font style="color: blue;"&gt;,&lt;/font&gt; CPL_STOP&lt;font style="color: blue;"&gt;,&lt;/font&gt; 0&lt;font style="color: blue;"&gt;,&lt;/font&gt; ci&lt;font style="color: blue;"&gt;.&lt;/font&gt;lData&lt;br /&gt;    CPlApplet_Main hWnd&lt;font style="color: blue;"&gt;,&lt;/font&gt; CPL_EXIT&lt;font style="color: blue;"&gt;,&lt;/font&gt; 0&lt;font style="color: blue;"&gt;,&lt;/font&gt; 0&lt;br /&gt;&lt;font style="color: blue;"&gt;End&lt;/font&gt; &lt;font style="color: blue;"&gt;If&lt;/font&gt;&lt;br /&gt;&lt;/div&gt;&lt;/pre&gt;&lt;br /&gt;&lt;p&gt;.. can be translated into LotusScript as:&lt;/p&gt;&lt;br /&gt;&lt;pre&gt;&lt;div style="font-family: sans-serif; font-size: 9pt; color: black; padding: 15px 15px 15px 15px; border-top: 1pt dotted black; border-bottom: 1pt dotted black; border-left: 1pt dotted black; border-right: 1pt dotted black; background-color: #FFFFEE;"&gt;&lt;font style="color: blue;"&gt;Declare&lt;/font&gt; &lt;font style="color: blue;"&gt;Private&lt;/font&gt; &lt;font style="color: blue;"&gt;Function&lt;/font&gt; Applet &lt;font style="color: blue;"&gt;Lib&lt;/font&gt; &lt;font style="color: black;"&gt;"main.cpl"&lt;/font&gt; &lt;font style="color: blue;"&gt;Alias&lt;/font&gt; &lt;font style="color: black;"&gt;"CPlApplet"&lt;/font&gt; &lt;font style="color: blue;"&gt;_&lt;/font&gt;&lt;br /&gt;&lt;font style="color: blue;"&gt;(&lt;/font&gt; &lt;font style="color: blue;"&gt;Byval&lt;/font&gt; hwndCPl &lt;font style="color: blue;"&gt;As&lt;/font&gt; &lt;font style="color: blue;"&gt;Long&lt;/font&gt;&lt;font style="color: blue;"&gt;,&lt;/font&gt; &lt;font style="color: blue;"&gt;Byval&lt;/font&gt; uMsg &lt;font style="color: blue;"&gt;As&lt;/font&gt; &lt;font style="color: blue;"&gt;Long&lt;/font&gt;&lt;font style="color: blue;"&gt;,&lt;/font&gt; &lt;font style="color: blue;"&gt;Byval&lt;/font&gt; lParam1 &lt;font style="color: blue;"&gt;As&lt;/font&gt; &lt;font style="color: blue;"&gt;Long&lt;/font&gt;&lt;font style="color: blue;"&gt;,&lt;/font&gt; &lt;font style="color: blue;"&gt; _&lt;br /&gt;Byval&lt;/font&gt; lParam2 &lt;font style="color: blue;"&gt;As&lt;/font&gt; &lt;font style="color: blue;"&gt;Long&lt;/font&gt; &lt;font style="color: blue;"&gt;)&lt;/font&gt; &lt;font style="color: blue;"&gt;As&lt;/font&gt; &lt;font style="color: blue;"&gt;Long&lt;/font&gt;&lt;br /&gt;&lt;font style="color: blue;"&gt;Declare&lt;/font&gt; &lt;font style="color: blue;"&gt;Private&lt;/font&gt; &lt;font style="color: blue;"&gt;Function&lt;/font&gt; AppletVarPtr &lt;font style="color: blue;"&gt;Lib&lt;/font&gt; &lt;font style="color: black;"&gt;"main.cpl"&lt;/font&gt; &lt;font style="color: blue;"&gt;Alias&lt;/font&gt; &lt;font style="color: black;"&gt;"CPlApplet"&lt;/font&gt; &lt;font style="color: blue;"&gt;_&lt;/font&gt;&lt;br /&gt;&lt;font style="color: blue;"&gt;(&lt;/font&gt; &lt;font style="color: blue;"&gt;Byval&lt;/font&gt; hwndCPl &lt;font style="color: blue;"&gt;As&lt;/font&gt; &lt;font style="color: blue;"&gt;Long&lt;/font&gt;&lt;font style="color: blue;"&gt;,&lt;/font&gt; &lt;font style="color: blue;"&gt;Byval&lt;/font&gt; uMsg &lt;font style="color: blue;"&gt;As&lt;/font&gt; &lt;font style="color: blue;"&gt;Long&lt;/font&gt;&lt;font style="color: blue;"&gt;,&lt;/font&gt; &lt;font style="color: blue;"&gt;Byval&lt;/font&gt; lParam1 &lt;font style="color: blue;"&gt;As&lt;/font&gt; &lt;font style="color: blue;"&gt;Long&lt;/font&gt;&lt;font style="color: blue;"&gt;,&lt;/font&gt; &lt;font style="color: blue;"&gt;_&lt;/font&gt;&lt;br /&gt;lParam2 &lt;font style="color: blue;"&gt;As&lt;/font&gt; CPLINFO &lt;font style="color: blue;"&gt;)&lt;/font&gt; &lt;font style="color: blue;"&gt;As&lt;/font&gt; &lt;font style="color: blue;"&gt;Long&lt;/font&gt; &lt;font style="color: green;"&gt;' NOTE the last argument modification HERE !&lt;/font&gt;&lt;br /&gt;&lt;font style="color: blue;"&gt;If&lt;/font&gt; Applet&lt;font style="color: blue;"&gt;(&lt;/font&gt; hwnd&lt;font style="color: blue;"&gt;,&lt;/font&gt; CPL_INIT&lt;font style="color: blue;"&gt;,&lt;/font&gt; 0&lt;font style="color: blue;"&gt;,&lt;/font&gt; 0 &lt;font style="color: blue;"&gt;)&lt;/font&gt; &lt;font style="color: blue;"&gt;&amp;#60;&lt;/font&gt;&lt;font style="color: blue;"&gt;&amp;#62;&lt;/font&gt; 0 &lt;font style="color: blue;"&gt;Then&lt;/font&gt;&lt;br /&gt;    &lt;font style="color: green;"&gt;' Visual Basic VarPtr() statement does not exist in LotusScript ...&lt;/font&gt;&lt;br /&gt;    AppletVarPtr hwnd&lt;font style="color: blue;"&gt;,&lt;/font&gt; CPL_INQUIRE&lt;font style="color: blue;"&gt;,&lt;/font&gt; lParam1&lt;font style="color: blue;"&gt;,&lt;/font&gt; ci&lt;br /&gt;    &lt;font style="color: green;"&gt;' ...  AppletVarPtr declare is emulating VarPtr(ci) statement&lt;/font&gt;&lt;br /&gt;    CPlApplet_Main hWnd&lt;font style="color: blue;"&gt;,&lt;/font&gt; CPL_DBLCLK&lt;font style="color: blue;"&gt;,&lt;/font&gt; lParam1&lt;font style="color: blue;"&gt;,&lt;/font&gt; ci&lt;font style="color: blue;"&gt;.&lt;/font&gt;lData&lt;br /&gt;    CPlApplet_Main hWnd&lt;font style="color: blue;"&gt;,&lt;/font&gt; CPL_STOP&lt;font style="color: blue;"&gt;,&lt;/font&gt; 0&lt;font style="color: blue;"&gt;,&lt;/font&gt; ci&lt;font style="color: blue;"&gt;.&lt;/font&gt;lData&lt;br /&gt;    CPlApplet_Main hWnd&lt;font style="color: blue;"&gt;,&lt;/font&gt; CPL_EXIT&lt;font style="color: blue;"&gt;,&lt;/font&gt; 0&lt;font style="color: blue;"&gt;,&lt;/font&gt; 0&lt;br /&gt;&lt;font style="color: blue;"&gt;End&lt;/font&gt; &lt;font style="color: blue;"&gt;If&lt;/font&gt;&lt;br /&gt;&lt;/div&gt;&lt;/pre&gt;&lt;br /&gt;&lt;p&gt;Note AppletVarPtr() above function in Windows C API second declare statement, its last argument is defined as a CPLINFO structure. It is sent by reference instead of being sent by value which emulates VarPtr() Visual Basic statement. All control panel applets can be called this way. I decided not to code numerous declares, but used an APPLET_CODE_TEMPLATE string where AppletName and lParam1 arguments are dynamically substituted. This way applets are loaded and executed at runtime as in:&lt;/p&gt;&lt;br /&gt;&lt;pre&gt;&lt;div style="font-family: sans-serif; font-size: 9pt; color: black; padding: 15px 15px 15px 15px; border-top: 1pt dotted black; border-bottom: 1pt dotted black; border-left: 1pt dotted black; border-right: 1pt dotted black; background-color: #FFFFEE;"&gt;&lt;font style="color: blue;"&gt;Private&lt;/font&gt; &lt;font style="color: blue;"&gt;Sub&lt;/font&gt; AppletLoader&lt;font style="color: blue;"&gt;(&lt;/font&gt; &lt;font style="color: blue;"&gt;Byval&lt;/font&gt; appletName &lt;font style="color: blue;"&gt;As&lt;/font&gt; &lt;font style="color: blue;"&gt;String&lt;/font&gt;&lt;font style="color: blue;"&gt;,&lt;/font&gt; &lt;font style="color: blue;"&gt;Byval&lt;/font&gt; parm1 &lt;font style="color: blue;"&gt;As&lt;/font&gt; &lt;font style="color: blue;"&gt;String&lt;/font&gt; &lt;font style="color: blue;"&gt;)&lt;/font&gt;&lt;br /&gt;    toList&lt;font style="color: blue;"&gt;(&lt;/font&gt; 0 &lt;font style="color: blue;"&gt;)&lt;/font&gt; &lt;font style="color: blue;"&gt;=&lt;/font&gt; appletName&lt;br /&gt;    toList&lt;font style="color: blue;"&gt;(&lt;/font&gt; 1 &lt;font style="color: blue;"&gt;)&lt;/font&gt; &lt;font style="color: blue;"&gt;=&lt;/font&gt; parm1&lt;br /&gt;    &lt;font style="color: green;"&gt;' Domino Release 6 ONLY&lt;/font&gt;&lt;br /&gt;    &lt;font style="color: blue;"&gt;Execute&lt;/font&gt; &lt;font style="color: blue;"&gt;Replace&lt;/font&gt;&lt;font style="color: blue;"&gt;(&lt;/font&gt; APPLET_TEMPLATE_CODE&lt;font style="color: blue;"&gt;,&lt;/font&gt; fromList&lt;font style="color: blue;"&gt;,&lt;/font&gt; toList &lt;font style="color: blue;"&gt;)&lt;/font&gt;&lt;br /&gt;&lt;font style="color: blue;"&gt;End&lt;/font&gt; &lt;font style="color: blue;"&gt;Sub&lt;/font&gt;&lt;br /&gt;&lt;/div&gt;&lt;/pre&gt;&lt;br /&gt;&lt;p&gt;I wrapped up a few applets' calls in a ControlPanel class bundled in &lt;a href="http://www.openntf.org/Projects/pmt.nsf/HomeLookup/E6830ECDCCBC94938625723A00477568?OpenDocument"&gt;OpenDOM open source project&lt;/a&gt; that you can download from OpenNTF.org site. You can use it as shown below:&lt;/p&gt;&lt;br /&gt;&lt;pre&gt;&lt;div style="font-family: sans-serif; font-size: 9pt; color: black; padding: 15px 15px 15px 15px; border-top: 1pt dotted black; border-bottom: 1pt dotted black; border-left: 1pt dotted black; border-right: 1pt dotted black; background-color: #FFFFEE;"&gt;&lt;br /&gt;&lt;font style="color: blue;"&gt;Use&lt;/font&gt; &lt;font style="color: black;"&gt;"LotusScript.windows.win32"&lt;/font&gt;&lt;br /&gt;&lt;font style="color: blue;"&gt;Dim&lt;/font&gt; ui &lt;font style="color: blue;"&gt;As&lt;/font&gt; &lt;font style="color: blue;"&gt;New&lt;/font&gt; ControlPanel&lt;br /&gt;ui&lt;font style="color: blue;"&gt;.&lt;/font&gt;AccessibilityOptions&lt;br /&gt;ui&lt;font style="color: blue;"&gt;.&lt;/font&gt;DisplayProperties&lt;br /&gt;ui&lt;font style="color: blue;"&gt;.&lt;/font&gt;MultimediaProperties&lt;br /&gt;ui&lt;font style="color: blue;"&gt;.&lt;/font&gt;AppletLoader &lt;font style="color: black;"&gt;"tweakui"&lt;/font&gt;&lt;font style="color: blue;"&gt;,&lt;/font&gt; &lt;font style="color: black;"&gt;"0"&lt;/font&gt;&lt;br /&gt;&lt;/div&gt;&lt;/pre&gt;&lt;br /&gt;&lt;p&gt;I hope you'll find ControlPanel class useful and shall be glad to hear about any interesting usage you experiment with it or about any extensions you make to it.&lt;/p&gt;&lt;br /&gt;&lt;p&gt;Credit: [1] &lt;a href="http://www.nirsoft.net/vb/cp.html"&gt;Executing Control Panel applets&lt;/a&gt;&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/33474092-4755428435504661807?l=opendom.blogspot.com'/&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://opendom.blogspot.com/feeds/4755428435504661807/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='https://www.blogger.com/comment.g?blogID=33474092&amp;postID=4755428435504661807' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/33474092/posts/default/4755428435504661807'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/33474092/posts/default/4755428435504661807'/><link rel='alternate' type='text/html' href='http://opendom.blogspot.com/2006/12/opening-control-panel-applets-in-modal.html' title='Opening Control Panel applets in modal dialog boxes - Windows/32 only'/><author><name>Alain H Romedenne</name><uri>http://www.blogger.com/profile/02870481308516705695</uri><email>noreply@blogger.com</email><gd:extendedProperty xmlns:gd='http://schemas.google.com/g/2005' name='OpenSocialUserId' value='14648845359575968256'/></author><thr:total xmlns:thr='http://purl.org/syndication/thread/1.0'>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-33474092.post-116610224054712069</id><published>2006-12-14T04:50:00.000-08:00</published><updated>2006-12-14T05:55:52.274-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='SnTT'/><category scheme='http://www.blogger.com/atom/ns#' term='Domino Object Model'/><category scheme='http://www.blogger.com/atom/ns#' term='LotusScript'/><title type='text'>Plot Undocumented DOM LotusScript Using Visual Basic 2005 Express free Edition</title><content type='html'>Today's post is a three steps introspection guide to «Lotus Notes Automation Classes» best kept secrets.&lt;br /&gt;&lt;br /&gt;&lt;p&gt;&lt;a href="http://photos1.blogger.com/x/blogger/1966/3676/1600/862327/Fig.%201a,%20Menu%20Projet%20-%20Ajouter%20une%20r??f??rence....jpg"&gt;&lt;img style="FLOAT: left; MARGIN: 0px 10px 10px 0px; CURSOR: hand" alt="" src="http://photos1.blogger.com/x/blogger/1966/3676/400/324378/Fig.%201a%2C%20Menu%20Projet%20-%20Ajouter%20une%20r%3F%3Ff%3F%3Frence....jpg" border="0" /&gt;&lt;/a&gt;&lt;/p&gt;1. Suffice to add a new reference to your .NET project using &lt;strong&gt;Project - Add reference...&lt;/strong&gt; menu.&lt;br /&gt;&lt;br /&gt;As an alternative you can equally right-click &lt;strong&gt;Solution explorer&lt;/strong&gt; window and select &lt;strong&gt;Add reference...&lt;/strong&gt;&lt;a href="http://photos1.blogger.com/x/blogger/1966/3676/1600/103081/Fig.%202,%20Ajouter%20une%20r??f??rence.jpg"&gt;&lt;img style="FLOAT: none; MARGIN: 0px 10px 10px 0px; CURSOR: hand" alt="" src="http://photos1.blogger.com/x/blogger/1966/3676/400/413838/Fig.%202%2C%20Ajouter%20une%20r%3F%3Ff%3F%3Frence.jpg" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;2. You then select «Lotus Notes Automation classes» from the &lt;strong&gt;COM&lt;/strong&gt; tab component list. Activate the class browser either keying F2 either selecting &lt;strong&gt;View - Object browser&lt;/strong&gt; command menu.&lt;br /&gt;&lt;br /&gt;&lt;a href="http://photos1.blogger.com/x/blogger/1966/3676/1600/426815/Fig.3,%20Explorateur%20d"&gt;&lt;img style="FLOAT: none; MARGIN: 0px 0px 10px 10px; CURSOR: hand" alt="" src="http://photos1.blogger.com/x/blogger/1966/3676/400/893406/Fig.3%2C%20Explorateur%20d%27objets%20-%20NotesDatabase.jpg" border="0" /&gt;&lt;/a&gt;&lt;p&gt;3. You can now explore the lotus package classes and view their attributes and operations.&lt;/p&gt;&lt;p&gt;Note that depending on your PC's color palette undocumented properties and methods will be denoted in light grey.&lt;a href="http://photos1.blogger.com/x/blogger/1966/3676/1600/280792/Fig.3,%20Explorateur%20d"&gt;&lt;/a&gt;&lt;p&gt;Using Microsoft C# 2005 Express free Edition functions equally. I guess any other professional .NET toolkit would work just as well. Note that latest #Develop open source IDE does not provide COM libraries equivalent expansion.&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/33474092-116610224054712069?l=opendom.blogspot.com'/&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://opendom.blogspot.com/feeds/116610224054712069/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='https://www.blogger.com/comment.g?blogID=33474092&amp;postID=116610224054712069' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/33474092/posts/default/116610224054712069'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/33474092/posts/default/116610224054712069'/><link rel='alternate' type='text/html' href='http://opendom.blogspot.com/2006/12/plot-undocumented-dom-lotusscript_14.html' title='Plot Undocumented DOM LotusScript Using Visual Basic 2005 Express free Edition'/><author><name>Alain H Romedenne</name><uri>http://www.blogger.com/profile/02870481308516705695</uri><email>noreply@blogger.com</email><gd:extendedProperty xmlns:gd='http://schemas.google.com/g/2005' name='OpenSocialUserId' value='14648845359575968256'/></author><thr:total xmlns:thr='http://purl.org/syndication/thread/1.0'>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-33474092.post-116427588582485224</id><published>2006-11-23T01:43:00.000-08:00</published><updated>2006-12-14T06:04:24.729-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='SnTT'/><category scheme='http://www.blogger.com/atom/ns#' term='LotusScript'/><title type='text'>Undocumented DOM LotusScript Inventory</title><content type='html'>&lt;p&gt;Here's an inventory of LotusScript COM/OLE classes holding undocumented properties and methods. I compiled it using Notes/Domino release 7 type library. OMT notation is used for brevity.&lt;/p&gt;&lt;p&gt;As for all undocumented features, use this information with extreme care! These features are unsupported, and non OS-agnostic. &lt;/p&gt;&lt;ul&gt;&lt;li&gt;NotesDatabase&lt;br /&gt;+ isNNT : Variant&lt;br /&gt;+ archiveNow( ) : Integer&lt;br /&gt;+ archiveNow( documentCollection=Nothing ) : Integer&lt;br /&gt;+ archiveNow( documentCollection=Nothing, policy=Nothing ) : Integer&lt;br /&gt;&lt;span style="color:#cccccc;"&gt;&lt;em&gt;+ close() - DEPRECATED, DO NOT USE&lt;br /&gt;&lt;/em&gt;&lt;/span&gt;+ createNewsGroup(groupName : String, title : Variant, subdirectory : Variant) : Long&lt;br /&gt;+ enabledOptions(arg1 : Integer , arg2 : Integer)&lt;br /&gt;+ getArchivePath( policy : String ) : String&lt;br /&gt;+ getArchivePath( policy : String, pathType=Nothing ) : String&lt;br /&gt;+ getFields(flag : Boolean) : String[ ]&lt;br /&gt;+ retrievePOP3Mail(server : String, port : Integer, username : String, password : String, retainMail : Integer, useSSL : Integer) : Long&lt;/li&gt;&lt;li&gt;NotesDateTime&lt;br /&gt;+ convertToZoneCanonical( zoneSpec ; String )&lt;br /&gt;+ merge( datetime, zoneSpec )&lt;/li&gt;&lt;li&gt;NotesDocument&lt;br /&gt;+ formDbID : String&lt;br /&gt;+ formDbIDItem : String&lt;br /&gt;+ handle : Long - cf. Notes C++ Programmer's Reference Guide&lt;br /&gt;+ generateMessageID( ) : String&lt;br /&gt;&lt;span style="color:#cccccc;"&gt;&lt;em&gt;+ getNextItem(arg : Variant) : Variant - DEPRECATED, DO NOT USE&lt;br /&gt;&lt;/em&gt;&lt;/span&gt;&lt;span style="color:#000000;"&gt;+ moveToFolder( )&lt;br /&gt;+ putInFolderByUNID( )&lt;br /&gt;+ removeFromFolderByUNID( )&lt;/span&gt;&lt;/li&gt;&lt;li&gt;NotesDocumentCollection&lt;br /&gt;+ getNoteIDs( ) : Variant&lt;/li&gt;&lt;li&gt;NotesItem&lt;br /&gt;+ PartialText&lt;/li&gt;&lt;li&gt;NotesOutline&lt;br /&gt;+ getEntry(entryname : String) : NotesOutlineEntry&lt;br /&gt;+ remove( ) : Integer&lt;/li&gt;&lt;li&gt;NotesOutlineEntry&lt;br /&gt;+ onClickText : String&lt;/li&gt;&lt;li&gt;NotesRegistration&lt;br /&gt;+ useAdminProcess&lt;br /&gt;+ registerNewUserWithPolicy( lastName : String, certPW : String, userPw : String, policyServer : String, firstname=Nothing, middle=Nothing, altName=Nothing)&lt;/li&gt;&lt;li&gt;NotesRichTextItem&lt;br /&gt;+ addLinkByIDs( replicaID : String, serverHint : String, viewUNID, notesUNID, comment, hotspotText )&lt;br /&gt;+ appendRTFile( pathname : String )&lt;br /&gt;+ partialText&lt;/li&gt;&lt;li&gt;NotesSession&lt;br /&gt;+ internetDomainName : String&lt;br /&gt;+ internetHostName : String&lt;br /&gt;+ close&lt;br /&gt;+ createXMLReformatter( input, output ) : Variant&lt;br /&gt;+ getNewsGroupPath(arg : String) : String&lt;br /&gt;+ getWin32Domain(server : Variant) : Variant&lt;br /&gt;+ startProfile( outputFilename : String, outputThreshold, recordThreads, recordEntryPoints )&lt;br /&gt;+ stopProfile( )&lt;br /&gt;+ tagProfile( tagString )&lt;/li&gt;&lt;li&gt;NotesUIDatabase&lt;br /&gt;+ editArchiveSettings( ) As Integer&lt;br /&gt;NotesUIDocument&lt;br /&gt;+ modifiedSinceSaved : Boolean&lt;br /&gt;+ parentViewName : Object&lt;br /&gt;+ windowHandle : String&lt;br /&gt;+ findFreeTimeDialogEX( reqPeopleItems, optPeopleItems, reqRoomsItems, optRoomsItems, reqResourcesItems, optResourcesItems, removedPeopleItems, startDateItem, endDateItem ) As Variant&lt;br /&gt;+ navBarSetPrevNextState( command, benable )&lt;/li&gt;&lt;li&gt;NotesUIScheduler&lt;br /&gt;+ ignoreUniversalID : String&lt;br /&gt;+ participantTableCopy( sortOrder : Integer ) As Variant&lt;br /&gt;+ refresh( getScheduleData, flags )&lt;br /&gt;+ setParticipantsFromItems( flags )&lt;br /&gt;+ setParticipantsFromTable( participantTable )&lt;br /&gt;+ updateParticipantsFromItem( flags )&lt;br /&gt;+ updateParticipantsFromTable( table, rolesFlags, appFlags )&lt;br /&gt;+ updateParticipantsStatus( participantTable )&lt;/li&gt;&lt;li&gt;NotesUIWorkspace&lt;br /&gt;+ addBookmark(bookmarkTitle : Variant) : Variant&lt;br /&gt;+ addDatabaseToPortfolio( )&lt;br /&gt;+ Create_DialEntry_Dialog( remoteAccessMethod )&lt;br /&gt;+ create_DialEntry_Info( remoteAccessMethod, nameOfEntry )&lt;br /&gt;+ create_DialEntry_List( remoteAccessMethod, nameOfEntry )&lt;/li&gt;&lt;li&gt;NotesView&lt;br /&gt;+ HeaderLines - not really undocumented but mal-documented since R5&lt;br /&gt;+ createViewFromTemplate( newName : String ) : Long&lt;br /&gt;+ getEntryByID( NoteID : String ) : NotesViewEntry&lt;/li&gt;&lt;li&gt;&lt;span style="color:#000000;"&gt;WebBrowser&lt;br /&gt;exposed within OLE Automation classes from R5 onwards..&lt;/span&gt;&lt;/li&gt;&lt;/ul&gt;&lt;p&gt;I welcome any additional lights or corrections you may provide about these properties and methods.&lt;/p&gt;&lt;p&gt;Note: I did not examine NotesDOMxxx and NotesDXLxxx classes.&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/33474092-116427588582485224?l=opendom.blogspot.com'/&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://opendom.blogspot.com/feeds/116427588582485224/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='https://www.blogger.com/comment.g?blogID=33474092&amp;postID=116427588582485224' title='2 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/33474092/posts/default/116427588582485224'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/33474092/posts/default/116427588582485224'/><link rel='alternate' type='text/html' href='http://opendom.blogspot.com/2006/11/undocumented-dom-lotusscript-inventory.html' title='Undocumented DOM LotusScript Inventory'/><author><name>Alain H Romedenne</name><uri>http://www.blogger.com/profile/02870481308516705695</uri><email>noreply@blogger.com</email><gd:extendedProperty xmlns:gd='http://schemas.google.com/g/2005' name='OpenSocialUserId' value='14648845359575968256'/></author><thr:total xmlns:thr='http://purl.org/syndication/thread/1.0'>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-33474092.post-116317311336243487</id><published>2006-11-10T07:20:00.000-08:00</published><updated>2006-12-14T06:03:28.469-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='SnTT'/><category scheme='http://www.blogger.com/atom/ns#' term='Rational Rose'/><title type='text'>Use Rational Rose to Identify Undocumented DOM Properties &amp; Methods</title><content type='html'>LotusUserGroup.org recently mentioned NotesUIDocument.modifiedSinceSaved [1] interesting property for us to use from Release 6. This post describes how you can use Rational Rose to identify other undocumented LotusScript DOM unsupported features.&lt;br /&gt;&lt;br /&gt;From Rational Rose &lt;span style="FONT-WEIGHT: bold"&gt;Tools - COM - Import Type Library...&lt;/span&gt; select notes32.tlb type library&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://photos1.blogger.com/blogger/3903/4211/1600/Full%20Import.jpg"&gt;&lt;img style="FLOAT: right; MARGIN: 0pt 0pt 10px 10px; CURSOR: pointer" alt="" src="http://photos1.blogger.com/blogger/3903/4211/320/Full%20Import.jpg" border="0" /&gt;&lt;/a&gt;Once all Domino Object Model (DOM) classes have been imported, use the left-pane class browser, right-click NotesSession class and select &lt;span style="FONT-WEIGHT: bold"&gt;Full Import. &lt;/span&gt;Such expands all NotesSession class attributes and operations. Note .InternetDomainName, .InternetHostname newly exhibited properties.&lt;br /&gt;&lt;br /&gt;You can expand all DOM classes at once scrolling down to the Component View branch. Right click «COM» lotus component and run the &lt;strong&gt;Full Import&lt;/strong&gt; action.&lt;br /&gt;&lt;br /&gt;You should now be able to benefit, with caution goes without saying, from undocumented DOM features.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;[1] &lt;a href="http://www.lotususergroup.org/submissions.nsf/0/B0B5F881E3135E83862571FF00611131?opendocument"&gt;LotusUserGroup.org Developer Tips Newsletter - October 2006&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/33474092-116317311336243487?l=opendom.blogspot.com'/&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://opendom.blogspot.com/feeds/116317311336243487/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='https://www.blogger.com/comment.g?blogID=33474092&amp;postID=116317311336243487' title='3 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/33474092/posts/default/116317311336243487'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/33474092/posts/default/116317311336243487'/><link rel='alternate' type='text/html' href='http://opendom.blogspot.com/2006/11/use-rational-rose-to-identify.html' title='Use Rational Rose to Identify Undocumented DOM Properties &amp; Methods'/><author><name>Alain H Romedenne</name><email>noreply@blogger.com</email></author><thr:total xmlns:thr='http://purl.org/syndication/thread/1.0'>3</thr:total></entry><entry><id>tag:blogger.com,1999:blog-33474092.post-116282937549666508</id><published>2006-11-06T07:48:00.000-08:00</published><updated>2006-11-23T02:22:14.496-08:00</updated><title type='text'>Miscellaneous writings</title><content type='html'>&lt;ul&gt;&lt;li&gt;Open Source Projects&lt;br /&gt;&lt;a href="http://www.openntf.org/projects/pmt.nsf/ProjectLookup/Open%20Secure%20Password%20Repository" gping="/GLinkPing.aspx?/_1_9SE/1?http://www.openntf.org/projects/pmt.nsf/ProjectLookup/Open%20Secure%20Password%20Repository&amp;&amp;amp;amp;amp;amp;amp;amp;amp;DI=78&amp;IG=3c3041b4ccb34ab08244176fb8eefb28&amp;amp;POS=2&amp;CM=WPU&amp;amp;CE=2&amp;CS=AWP&amp;amp;SR=2&amp;sample=0"&gt;Open Secure Password Repository&lt;/a&gt;&lt;br /&gt;&lt;a href="http://www.openntf.org/projects/pmt.nsf/ProjectLookup/OpenDOM" gping="/GLinkPing.aspx?/_1_9SE/1?http://www.openntf.org/projects/pmt.nsf/ProjectLookup/OpenDOM&amp;amp;amp;amp;amp;amp;amp;amp;&amp;DI=78&amp;amp;IG=3c3041b4ccb34ab08244176fb8eefb28&amp;POS=2&amp;amp;amp;amp;amp;amp;amp;amp;CM=WPU&amp;CE=2&amp;amp;CS=AWP&amp;SR=2&amp;amp;sample=0"&gt;OpenDOM&lt;/a&gt;&lt;br /&gt;&lt;a href="http://www.openntf.org/projects/pmt.nsf/ProjectLookup/NSFPeek" gping="/GLinkPing.aspx?/_1_9SE/1?http://www.openntf.org/projects/pmt.nsf/ProjectLookup/NSFPeek&amp;amp;amp;&amp;DI=78&amp;amp;IG=3c3041b4ccb34ab08244176fb8eefb28&amp;POS=2&amp;amp;amp;amp;amp;amp;amp;amp;CM=WPU&amp;CE=2&amp;amp;CS=AWP&amp;SR=2&amp;amp;sample=0"&gt;NSFPeek&lt;/a&gt;&lt;/li&gt;&lt;li&gt;Articles&lt;br /&gt;«&lt;a href="http://lotusadvisor.com/doc/14684"&gt;Use LotusScript to Prevent Lotus Notes User Errors&lt;/a&gt;» - Lotus Advisor, Nov. 2004&lt;br /&gt;«Soyons foo(), follement orientés objet» - NSFmag, Q2 2003&lt;/li&gt;&lt;li&gt;Tips&lt;br /&gt;«&lt;a class="Results" href="http://www.breakingpar.com/bkp/home.nsf/0/87256B280015193F872570AD00528E48"&gt;Write Secured Code Using Defensive Coding&lt;/a&gt;»&lt;br /&gt;«&lt;a class="Results" href="http://www.breakingpar.com/bkp/home.nsf/0/87256B280015193F87257046004E75BD"&gt;Overcoming the infamous {Public symbol is declared in another module: V_EMPTY}&lt;/a&gt;»&lt;br /&gt;«&lt;a href="http://www.breakingpar.com/bkp/home.nsf/0/87256B280015193F872570900051BE2C"&gt;Trapping Messages Marked Return Receipt&lt;/a&gt;»&lt;/li&gt;&lt;/ul&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/33474092-116282937549666508?l=opendom.blogspot.com'/&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://opendom.blogspot.com/feeds/116282937549666508/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='https://www.blogger.com/comment.g?blogID=33474092&amp;postID=116282937549666508' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/33474092/posts/default/116282937549666508'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/33474092/posts/default/116282937549666508'/><link rel='alternate' type='text/html' href='http://opendom.blogspot.com/2006/11/miscellaneous-writings.html' title='Miscellaneous writings'/><author><name>Alain H Romedenne</name><uri>http://www.blogger.com/profile/02870481308516705695</uri><email>noreply@blogger.com</email><gd:extendedProperty xmlns:gd='http://schemas.google.com/g/2005' name='OpenSocialUserId' value='14648845359575968256'/></author><thr:total xmlns:thr='http://purl.org/syndication/thread/1.0'>0</thr:total></entry></feed>