<?xml version="1.0" encoding="UTF-8"?>
<?xml-stylesheet href="http://feeds.feedburner.com/~d/styles/atom10full.xsl" type="text/xsl" media="screen"?><?xml-stylesheet href="http://feeds.feedburner.com/~d/styles/itemcontent.css" type="text/css" media="screen"?><feed xmlns="http://www.w3.org/2005/Atom" xmlns:app="http://www.w3.org/2007/app" xmlns:openSearch="http://a9.com/-/spec/opensearch/1.1/" xmlns:feedburner="http://rssnamespace.org/feedburner/ext/1.0">
    <title type="html">.Domino Framework</title>
    <subtitle type="html">.Domino Framework</subtitle>
    <id>http://www.bleedyellow.com/blogs/dotdomino/feed/entries/atom</id>
    
    <link rel="alternate" type="text/html" href="http://www.bleedyellow.com/blogs/dotdomino/" />
    <link rel="replies" type="application/atom+xml" href="http://www.bleedyellow.com/blogs/dotdomino/feed/comments/atom" />
    <link rel="first" type="application/atom+xml" href="http://www.bleedyellow.com/blogs/dotdomino/feed/entries/atom" />
    <link rel="next" type="application/atom+xml" href="http://www.bleedyellow.com/blogs/dotdomino/feed/entries/atom?page=1" />
    <openSearch:totalResults>53</openSearch:totalResults>
    <app:categories href="http://www.bleedyellow.com/blogs/dotdomino/feed/tags/atom" />
    <updated>2008-07-04T08:38:49-04:00</updated>
   <generator uri="http://www.ibm.com/xmlns/prod/sn" version="1.0.2">Lotus Connections - Blogs</generator>
        <link rel="self" href="http://feeds.feedburner.com/dominoFramework" type="application/atom+xml" /><feedburner:browserFriendly></feedburner:browserFriendly><entry xml:lang="en-US">
        <id>http://www.bleedyellow.com/blogs/dotdomino/entry/why_notes</id>
        <title type="html">Why Notes?</title>
        <author><name>Peter Presnell</name><email>ktree19@yahoo.com</email></author>
        <link rel="alternate" type="text/html" href="http://www.bleedyellow.com/blogs/dotdomino/entry/why_notes" />
        <published>2008-07-03T15:49:11-04:00</published>
        <updated>2008-07-03T15:49:11-04:00</updated> 
        <category term="notes" />
        <category term="notes85" />
        <content type="html">&lt;p&gt;During my time as a Notes developer (mostly as an independent&amp;nbsp;contractor/consultant) I have had the chance to work &amp;nbsp;with a large number of companies on four separate continents.&amp;nbsp; In all that time I cannot remember a single client in which the Notes development was ever considered &amp;quot;strategic&amp;quot;.&amp;nbsp; In fact, in many, the attitude towards Notes was (and often still is) decidedly hostile.&amp;nbsp; So&amp;nbsp;if Notes is often seen (unfairly?) as the ugly duckling in the programming world, why&amp;nbsp;is there so many Notes databases out there and so many Notes developers still being employed?&lt;/p&gt;
&lt;p&gt;One of the reasons for this seems to be that fact that unlike many other development platforms, Notes has always extended down to reach many people who would not be typically classified as programmers.&amp;nbsp; People can start out with a Notes template such as TeamRoom or Discussion Library and get a small application up and running pretty quickly.&amp;nbsp; These same people then find that with little or no formal programming experience they can add a few fields to a form, add another column to a view or even create a whole new view from scratch.&amp;nbsp; Then using&amp;nbsp;nothing more than a few simple forms, views, and&amp;nbsp; little bit of @functions and @commands a whole new application can be built to automate a task that may have outgrown an Excel spreadsheet or fits some new process.&amp;nbsp; A few of the more adventurous &amp;quot;non-programmers&amp;quot; even find some basic LotusScript within their capabilities.&amp;nbsp; To a seasoned Notes programmer many of these applications look decidely ugly and badly written but they are highly effective.&amp;nbsp; They provide the basic functionality that is needed by the business and because they have usually flown underneath the radar screen nobody has bothered to question whether Notes is the right tool to use.&lt;/p&gt;
&lt;p&gt;It is usually only when the application breaks, the creator leaves/transfers, or there is a need to enhance the application that it suddenly appears on the radar screen of a Notes development group.&amp;nbsp; As a developer I often get assigned to work on applications that were orginally developed this way.&amp;nbsp; Whilst I may be tempted to&amp;nbsp;curse the bad design, inefficient code, and the fact a production application is running on a development server, I can also be thankful that another business process has found a home in the Notes development arena giving me work and the chance to show what Notes can really do!&amp;nbsp; I have worked for some companies with as many as 80,000 non-mail databases of which less than 20% were ever supported by a Notes development group!&lt;/p&gt;
&lt;p&gt;This feeder base of applications is an important part of the Notes development food chain.&amp;nbsp; Without these applications many companies may have been able to contemplate a life without Notes (and Notes programmers).&lt;/p&gt;
&lt;p&gt;I am not sure if the role of this type of development is fully recognized when the future of Notes is being mapped out.&amp;nbsp; Few of these &amp;quot;non-programmers&amp;quot; are represented on the various forums such as IdeaJam, Planet Lotus, and IBM's Notes discussion forums.&amp;nbsp;And they probably are not heavily represented&amp;nbsp;at events like LotusSphere.&amp;nbsp; And they almost ceratinly&amp;nbsp;do not get to be design partners evaluating the latest release of Notes.&lt;/p&gt;
&lt;p&gt;With the Notes 8.5 beta having been released I have started to wonder what impact the new development tools and environment may have on Notes &amp;quot;non-programmers&amp;quot;.&amp;nbsp; A full-time developer (especially one who has developed with Java), probably loves the move of Designer to eclipse.&amp;nbsp; Notes developers who have long struggled with design issues such as joining views or developing Notes/Web client or Web only applications probably love the new capabilities of X-Pages and the extended JavaScript language.&amp;nbsp; The Notes development world is beginning to look a lot more like Java and ASP.Net development environments.&amp;nbsp; But are these capabilities going to attract more &amp;quot;non-programmers&amp;quot; or less?&amp;nbsp; IBM have not yet made public too much about what the Notes development environment will look like post Notes 8.5 but it does seem like eclipse will at least be part of that.&amp;nbsp; My hope is that in acquiring some of the tools that Java and .Net developers take for granted we do not take the Notes development environment out of reach of the &amp;quot;non-Notes&amp;quot; programmers.&amp;nbsp; At least not until more companies understand that Notes truly is a strategic platform and it is OK to make it the #1 choice for developing many applications.&lt;/p&gt;</content>
    </entry>
    <entry xml:lang="en-US">
        <id>http://www.bleedyellow.com/blogs/dotdomino/entry/does_lotusscript_have_a_future</id>
        <title type="html">Does LotusScript Have a Future?</title>
        <author><name>Peter Presnell</name><email>ktree19@yahoo.com</email></author>
        <link rel="alternate" type="text/html" href="http://www.bleedyellow.com/blogs/dotdomino/entry/does_lotusscript_have_a_future" />
        <published>2008-06-30T15:27:28-04:00</published>
        <updated>2008-06-30T15:27:28-04:00</updated> 
        <category term="notes85" />
        <category term="lotusscript" />
        <content type="html">&lt;p&gt;One thing that has struck me about &amp;nbsp;the Notes 8.5 beta is that X-Pages implements JavaScript as the only option for both client-sided and server-sided scripting.&amp;nbsp; Neither @Language nor LotusScript appear to be supported directly but&amp;nbsp;the &amp;quot;JavaScript&amp;quot; language has been expanded to provide @Formula emulation.&amp;nbsp; The new server-sided JavaScript now also&amp;nbsp;seems to be able to do some of the things only done in the past using LotusScript...&amp;nbsp; When X-Pages is made available for the Notes client I am expecting to see support for JavaScript only.&amp;nbsp; We already have LotusScript able to run on the Notes client and Domino servers, so&amp;nbsp;why is IBM going to so much trouble to extended JavaScript for server-sided scripting?&amp;nbsp; Could it&amp;nbsp;be that&amp;nbsp; LotusScript is not part of the long term vision IBM has for Notes development?&amp;nbsp;&amp;nbsp;&amp;nbsp;As a devoted LotusScript programmer (biggot) I am hoping I am wrong...&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;The next version of Notes (post 8.5) promises to be a very interesting one for Notes developers.&amp;nbsp; Consider a scenario in which:-&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;X-Pages provides an alternative to Forms, Views, Pages, and Subforms with the added advantages of running on both a Web client and a Notes client, plus the ability to link to non-Notes data sources;&lt;/li&gt;
&lt;li&gt;X-Pages supports &amp;quot;JavaScript&amp;quot; directly but not LotusScript or @Formula&lt;/li&gt;
&lt;li&gt;There is little or no future extension of LotusScript language to make it a more modern OOP language;&lt;/li&gt;
&lt;li&gt;There are few (if any) enhancement made to &amp;quot;old-style &amp;quot;design elements such as Forms, Views, Pages, Subforms, Framesets, Outlines;&lt;/li&gt;
&lt;li&gt;The Eclipse IDE does not provide native support for these older style design elements&amp;nbsp; - although we do get the LotusScript editor almost everyone has been waiting for.&lt;/li&gt;&lt;/ol&gt;
&lt;p&gt;It sounds to me like a completely new Notes II programming environment has been created. An environment in which many of the Notes development paradigms of the past have been replaced, including either the death (or significant downsizing) of the role of LotusScript.&amp;nbsp;&amp;nbsp; Will we have the choice of staying with what we know (e.g. LotusScript &amp;amp; @Formulas) or will we have to move to a new way of doing things (most likely JavaScript based0)?&amp;nbsp; And where does Java fit with this?&amp;nbsp; Hopefully IBM will soon provide a clearer picture to the public of its plans for Notes development post Notes 8.0.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;Perhaps those more in the know than I can comment about where I am completely wrong....&amp;nbsp; &amp;quot;Whenever you have eliminated the &lt;b&gt;impossible&lt;/b&gt;, whatever remains, however &lt;b&gt;improbable&lt;/b&gt;, must be true&amp;quot;.&lt;/p&gt;</content>
    </entry>
    <entry xml:lang="en-US">
        <id>http://www.bleedyellow.com/blogs/dotdomino/entry/domino_framework_0_5_beta</id>
        <title type="html">.Domino Framework 0.5 Beta Released</title>
        <author><name>Peter Presnell</name><email>ktree19@yahoo.com</email></author>
        <link rel="alternate" type="text/html" href="http://www.bleedyellow.com/blogs/dotdomino/entry/domino_framework_0_5_beta" />
        <published>2008-06-27T13:43:52-04:00</published>
        <updated>2008-06-27T13:47:18-04:00</updated> 
        <category term=".dominoframework" />
        <content type="html">&lt;p&gt;The latest beta of the .Domino Framework has been released at OpenNTF.&amp;nbsp; This release inclorporates the new Inspector tool and adds an application template that can be used to build a new application from scratch that includes the generic application components of the .Domino Framework.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;&lt;font color="#3333ff"&gt;Wordle of .Domino Framework&lt;/font&gt;&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;&lt;a title="Wordle: .Domino Framework" href="http://wordle.net/gallery/wrdl/36257/.Domino_Framework"&gt;&lt;img style="BORDER-RIGHT: #ddd 1px solid; PADDING-RIGHT: 4px; BORDER-TOP: #ddd 1px solid; PADDING-LEFT: 4px; PADDING-BOTTOM: 4px; BORDER-LEFT: #ddd 1px solid; PADDING-TOP: 4px; BORDER-BOTTOM: #ddd 1px solid" src="http://wordle.net/thumb/wrdl/36257/.Domino_Framework"&gt;&lt;/a&gt;&lt;/p&gt;</content>
    </entry>
    <entry xml:lang="en-US">
        <id>http://www.bleedyellow.com/blogs/dotdomino/entry/a_new_notes_data_management</id>
        <title type="html">A new Notes data management tool (Inspector)</title>
        <author><name>Peter Presnell</name><email>ktree19@yahoo.com</email></author>
        <link rel="alternate" type="text/html" href="http://www.bleedyellow.com/blogs/dotdomino/entry/a_new_notes_data_management" />
        <published>2008-06-24T15:18:32-04:00</published>
        <updated>2008-06-24T15:20:19-04:00</updated> 
        <category term=".dominoframework" />
        <category term="inspector" />
        <content type="html">&lt;font face="Helv" size="1"&gt;
&lt;p&gt;I am just putting the finishing touches on what I believe will the most useful tool to be provided as part of the .Domino Frramework yet.&amp;nbsp; The tool is called Inspector and the following provides a brief summary of what its capabilities will include in its initial release:-&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;&lt;font face="Helv" size="1"&gt;
&lt;p&gt;View and change database properties&lt;/p&gt;&lt;/font&gt;&lt;/li&gt;
&lt;li&gt;&lt;font face="Helv" size="1"&gt;
&lt;p&gt;Select another database&lt;/p&gt;&lt;/font&gt;&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Perform actions against the database (e.g. Open, Sign)&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;View data documents, profile documents, design documents, and deletion stubs&lt;/li&gt;
&lt;li&gt;Build a document collection&amp;nbsp;using any combination of search, FT search, view, or manual selection&lt;/li&gt;
&lt;li&gt;Enter a Notes URL, NoteID, or Document UNID to select a specific document&lt;/li&gt;
&lt;li&gt;Display the documents contained in the document collection.&lt;/li&gt;
&lt;li&gt;Navigate through document collection&lt;/li&gt;
&lt;li&gt;Perform actions against the document collection (e.g Setting field values, removing template inheritance)&lt;/li&gt;
&lt;li&gt;Display details about any one document in collection&lt;/li&gt;
&lt;li&gt;Display a list of items in the document&lt;/li&gt;
&lt;li&gt;Perform actions against the document (e.g. Delete, Sign)&lt;/li&gt;
&lt;li&gt;Display and edit information about any item in a document (type, value, flags)&lt;/li&gt;
&lt;li&gt;For LotusScript Libraries show details of the classes, methods, &amp;amp; properties contained in the design document.&lt;/li&gt;&lt;/ol&gt;
&lt;p&gt;This functionality can invoked from ANY Notes database regardless of whether or not it implements the .Domino Framework.&amp;nbsp; This is done via a Toolbar &amp;quot;Magic Button&amp;quot; that passes information about the current database/document to the .Domino Framework database.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;I see a LOT of potential for expanding the tool further to expose even more of the functionality built into the .Domino Framework.&amp;nbsp; E.g. Providing the ability to apply XSLT to transform data and design documents using styles sheets that reside in the .Domino Framework database.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;The 0.5 Beta of the .Domino Framework onm OpenNTF is planned for later this week.&lt;/p&gt;&lt;/font&gt;</content>
    </entry>
    <entry xml:lang="en-US">
        <id>http://www.bleedyellow.com/blogs/dotdomino/entry/domino_reflection_namespace_extended</id>
        <title type="html">Domino.Reflection Namespace Extended</title>
        <author><name>Peter Presnell</name><email>ktree19@yahoo.com</email></author>
        <link rel="alternate" type="text/html" href="http://www.bleedyellow.com/blogs/dotdomino/entry/domino_reflection_namespace_extended" />
        <published>2008-06-23T17:22:08-04:00</published>
        <updated>2008-06-23T17:23:22-04:00</updated> 
        <category term="inspector" />
        <category term="reflection" />
        <category term=".dominoframework" />
        <content type="html">&lt;p&gt;I have just finished expanding the Domino.Reflection namespace to allow the new Inspector tool to browse the contents of LotusScript libraries.&amp;nbsp; &lt;/p&gt;
&lt;p&gt;Inspector will be&amp;nbsp;able to display information about data documents, profile documents, design documents, and deletion stubs found in ANY database. Inspector will be able to provide a list of all (or selected) design documents found in a database (Domino Designer is not required).&lt;/p&gt;
&lt;p&gt;As part of the display information for Design documents I have decided to provide information about any classes found in a selected LotusScript library.&amp;nbsp; Using the extended DominoScriptLibrary class (part of the Domino.Reflection namespace), I can now return a list of properties and methods for a nominated class.&amp;nbsp; I can also get the code used&amp;nbsp; for any one of the properties/methods.&amp;nbsp; Combining these features together Inspector becomes (amongst other things) a basic class browser for LotusScript libraries.&lt;/p&gt;
&lt;p&gt;Both the extended Domino.Reflection namespace and the new Inspector tool will be released as part of the 0.5 beta of the .Domino Framework planned for the end of this week.&lt;/p&gt;</content>
    </entry>
    <entry xml:lang="en-US">
        <id>http://www.bleedyellow.com/blogs/dotdomino/entry/notesurl_and_resolve</id>
        <title type="html">NotesURL and Resolve</title>
        <author><name>Peter Presnell</name><email>ktree19@yahoo.com</email></author>
        <link rel="alternate" type="text/html" href="http://www.bleedyellow.com/blogs/dotdomino/entry/notesurl_and_resolve" />
        <published>2008-06-20T13:15:46-04:00</published>
        <updated>2008-06-20T13:17:15-04:00</updated> 
        <category term="inspector" />
        <category term=".dominoframework" />
        <category term="programming" />
        <category term="notesurl" />
        <content type="html">&lt;p&gt;NotesURL&amp;nbsp; is a property available for the NotesSession, NotesDatabase, NotesView, NotesForm, NotesAgent, and NotesDocument&amp;nbsp;classes.&amp;nbsp; It was one of those properties I had never really paid much attention to.&amp;nbsp; That was before I found myself needing to pass references to Notes objects from one application to another.&amp;nbsp; It is not the only way to pass references to these objects but it is perhaps one of the simplest to implement and is consistent across each of thes objects.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;At the other end, the NotesSession class has a Resolve method.&amp;nbsp; This is basically the reverse of&amp;nbsp;NotesURL, taking the URL and converting it back into an object (it also works with HTTP URLs too!).&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;So lets take the scenario in which a Services Oriented Architecture (SOA) is being built.&amp;nbsp; One application (Notes database) provides one or more services to other applications.&amp;nbsp; These services could operate against a database, view, document etc.&amp;nbsp; To invoke the service I need to provide a failsafe way to provide details about the database/view/document against which the service operates.&amp;nbsp;&amp;nbsp; I can pass this in a number of ways:-&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;Save the NotesURLs as&amp;nbsp;environment variables in the Notes.INI&lt;/li&gt;
&lt;li&gt;Create a document in the other database with the NotesURL(s) placed inside a field&lt;/li&gt;
&lt;li&gt;Invoke a Web service (increases the ability for Non-Notes applications ualso using the service)&lt;/li&gt;&lt;/ol&gt;
&lt;p&gt;The alternatives for a NotesDatabase include servername and filpath, or replicaid.&amp;nbsp; Server/filepath requires two parameters to be provided or an artificial way to combine these together.&amp;nbsp; Replicaids represent a single string but lack the ability to designate a specific server (I may have made a change to a document on one server which has not replicated to other servers and hence the serice may not operate against the latest data if it uses another replica).&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;Views are more difficult to define as the only other standrad way to access a view in LS is via NotesDatabase.GetView.&amp;nbsp; This requires the name or alias of the view and this is not guaranteed to be&amp;nbsp;unique.&amp;nbsp; Plus I need to make sure the parent database is also known.&amp;nbsp; NotesURL and Resolve gives us a way of ensuring the exxact same view is used within the service.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;NotesDocumehts have a DocumentUNID that serves us well, but again we need to provide a reference to the parent database for this to work.&amp;nbsp; The NotesURL gives us all this information in a single string.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;Note: It is also possible to serialize a NotesDocumentCollection by passing an array of NotesURLs.&amp;nbsp; This is a litlle messier as more code is needed on the other side to reconstruct the NotesDocumentCollection.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;I have used the above in the latest beta of the .Domino Framework to implement the new Inspector tool.&amp;nbsp; This tool will provide a &amp;quot;magic button&amp;quot;&amp;nbsp;to view/edit the attributes of the current database, document collections, and document.&amp;nbsp; The code for all this to work resides in the .Domino Framework template.&amp;nbsp; To get this service to work against any database (regardless of whether it implements the framework or not) I have devised a ToolBar button that will save details about the currenty database, view, document etc. and pass them to the Inspector tool via Notes INI variables.&amp;nbsp; For applicatuions that implement the framework the ablity to pass information about the currently selected documenyts ina view is added without using Notes.INI variables.&amp;nbsp; Because this is a Notes 6.0 framework I have not (yet) developed a Web Service&amp;nbsp;option.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;The .Domino Framewokr has also been expanded so that the constructors for the DominoDatabase, DominoView, DominoDocumentCollection, and DominoDocument classes can take a NotesURL as a parameter for the constructor.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;Notes: Because the object refered to by a NotesURL can represent any one of the supported Notes classes it is sugessted that it be resolved into variant first.&amp;nbsp; Invalid NotesURLs throw an eror so it is also necessary to set the apporpriate error trapping to handle this.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;Example: The following code is the DominoDocument class to locate a document using a key that could represent a NotesURL, HTTP URL, NoteID, or DocumentUNID.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;font color="#009900"&gt;'/**&lt;br&gt;&amp;nbsp;' * &amp;nbsp;Locates an existing document based upon the document's key&lt;br&gt;&amp;nbsp;' * @param&amp;nbsp;Key&amp;nbsp;&amp;nbsp;Key that can be used to locate the existing document (NoteID, UNID, Notes URL or HTTP URL)&lt;br&gt;&amp;nbsp;' */&amp;nbsp;&lt;br&gt;&amp;nbsp;Sub GetByKey(Key As String)&lt;br&gt;&amp;nbsp;&amp;nbsp;Dim&amp;nbsp;NotesObject&amp;nbsp;As Variant&lt;br&gt;&amp;nbsp;&amp;nbsp;&lt;br&gt;&amp;nbsp;&amp;nbsp;On Error Resume Next&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;' Prevent error if key is not a a valid NotesURL&lt;br&gt;&amp;nbsp;&amp;nbsp;If Ucase(Left(Key,Len(STRING_NOTES_PROTOCOL_PREFIX))) = STRING_NOTES_PROTOCOL_PREFIX Or _&lt;br&gt;&amp;nbsp;&amp;nbsp;Ucase(Left(Key,Len(STRING_HTTP_PROTOCOL_PREFIX))) = STRING_HTTP_PROTOCOL_PREFIX Then&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;Set NotesObject = Session.Resolve(Key$)&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;If NotesObject Isa &amp;quot;NotesDocument&amp;quot; Then&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;Set iDocument = NotesObject&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;Exit Sub&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;End If&lt;br&gt;&amp;nbsp;&amp;nbsp;End If&lt;br&gt;&amp;nbsp;&amp;nbsp;Select Case Len(Key)&lt;br&gt;&amp;nbsp;&amp;nbsp;Case 8&amp;nbsp;&amp;nbsp;' Possible NoteID in LS format&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;Set iDocument = DB.GetDocumentByID(Key$)&lt;br&gt;&amp;nbsp;&amp;nbsp;Case 9&amp;nbsp;&amp;nbsp;' Possible Note ID in @Language format&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;Set iDocument = DB.GetDocumentByID(Left(Key$,8) + Right(Key,8))&lt;br&gt;&amp;nbsp;&amp;nbsp;Case 32&amp;nbsp;' Possible UNID&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;Set iDocument = DB.GetDocumentByUNID(Key$)&lt;br&gt;&amp;nbsp;&amp;nbsp;End Select&lt;br&gt;&amp;nbsp;&amp;nbsp;Exit Sub&lt;br&gt;&amp;nbsp;End Sub&lt;/font&gt;&lt;/p&gt;</content>
    </entry>
    <entry xml:lang="en-US">
        <id>http://www.bleedyellow.com/blogs/dotdomino/entry/editing_design_properties_via_dxl</id>
        <title type="html">Editing Design Properties Via DXL In Designer 8.5</title>
        <author><name>Peter Presnell</name><email>ktree19@yahoo.com</email></author>
        <link rel="alternate" type="text/html" href="http://www.bleedyellow.com/blogs/dotdomino/entry/editing_design_properties_via_dxl" />
        <published>2008-06-20T11:22:49-04:00</published>
        <updated>2008-06-20T11:23:32-04:00</updated> 
        <category term="notes85" />
        <content type="html">Whilst a native eclipse editor is not yet available in Designer 8.5 for Forms and View&amp;nbsp;it seems that option is provided to edit the DXL for these design elements.&amp;nbsp; This provides both raw DXL/XML code and a node/property tree for these design elements.&amp;nbsp; There are times when this can be a distinct advantage over the traditional Domino Designer tool to find and set values (e.g. search and replace".&amp;nbsp; Not all Design elements are supported (e.g. LotusScript Libraries).</content>
    </entry>
    <entry xml:lang="en-US">
        <id>http://www.bleedyellow.com/blogs/dotdomino/entry/is_notes_programming_as_we</id>
        <title type="html">Is Notes Programming As We Know It About To Change Forever?</title>
        <author><name>Peter Presnell</name><email>ktree19@yahoo.com</email></author>
        <link rel="alternate" type="text/html" href="http://www.bleedyellow.com/blogs/dotdomino/entry/is_notes_programming_as_we" />
        <published>2008-06-19T16:00:54-04:00</published>
        <updated>2008-06-19T16:55:02-04:00</updated> 
        <category term="development" />
        <category term="notes85" />
        <category term="notes" />
        <content type="html">&lt;p&gt;Let me first start by saying I am not a design partner and I do not have any inside contacts at IBM, so I have absolutely no&amp;nbsp;inside information as to what IBM's plans are for the future of Notes programming.&amp;nbsp; But because I am not subject to any non-disclosure agreements I am free to speculate and say whatever I like.&amp;nbsp;If I&amp;nbsp;start to take a closer look at the tea-leaves now forming at the bottom of my yellow mug I wonder if there may be a pattern forming I had not seen before....&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;I have been taking a much closer look at X-Pages, the new design element &amp;nbsp;that is part of Notes 8.5.&amp;nbsp; This design element looks nothing like any other existing Notes design element.&amp;nbsp; And not just because of the new Eclipse editor.&amp;nbsp; I see a whole bunch of new controls that remind me more of my time as an ASP.Net developer than they do of&amp;nbsp;Notes development.&amp;nbsp; I see the ability to bind these controls to data sources that include not just Notes documents and Notes views but also to SQL-databases and XML.&amp;nbsp; Again, this is not unlike ASP.Net development (except for the ability to natively link to Notes databases).&amp;nbsp; I also see that as I design an X-Page, it is building XML code which I can not only see but edit directly....&amp;nbsp; &lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;And when you look at the functionality of X-Pages, they seem to be able to do pretty much everything that many of the existing UI elements of Notes (Forms, Subforms, View, and Pages) can do.&amp;nbsp; Except that I can now combine them in ways that were never possible with these other design elements.&amp;nbsp; A number of other bloggers are starting to rave about the really cool stuff they can do using X-Pages.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;I believe IBM are on record as saying they intend to make X-Pages available for the Notes client in a later release.&amp;nbsp; So what does that mean?&amp;nbsp; Unless X-Pages for Notes has a different set of controls that mirror more closely the existing set of controls I am probably going to be&amp;nbsp;soon building&amp;nbsp;new applications for the Notes client in a completely new way.&amp;nbsp; And thanks to X-pages these applications will look and behave the same on a Web client.. &amp;nbsp;If X-Pages provides the functionality of&amp;nbsp;other design elements such as forms&amp;nbsp;why would I use both in an application?&amp;nbsp; Perhaps I am not supposed to?&amp;nbsp; Perhaps in a post Notes 8.5 world I am now supposed to do most of my UI design using ONLY these new design elements such as X-Pages?&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;Perhaps round-tripping of DXL is not an issue for IBM because they&amp;nbsp; see a future for us developers where we will be able to edit the XML from inside Notes.&amp;nbsp; Perthaps IBM are not making a major push to develop Eclipse editors for Forms, Pages, and Views because they see these design elements going the way of the Navigator (i.e. no new features added in future releases).&amp;nbsp; Perhaps there is no need to extend other Notes design elements such as views to support style sheets for the same reason.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;It is not immediately clear If LotusScript will form a key component of the brave new world.&amp;nbsp; I am hoping so, because one of the reasons I believe the world has as many Notes applications as it does is that non-programmers (and many programmers) are often better able to teach themselves to program in BASIC-based programming languages much more so than they have ever been able to with Java, C, or JavaScript like languages...&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;The tea-leaves are still swirling around and so the future may show&amp;nbsp;that I am&amp;nbsp;completely wrong.&amp;nbsp; (But I do&amp;nbsp;hope the dead fly floating at the top is Sharepoint!).&amp;nbsp; But just in case&amp;nbsp;I am not completely wrong&amp;nbsp;, I would suggest Notes Developers take a very close look at X-Pages - even if you do not do a lot of Web development.&amp;nbsp; X-Pages (and custom controls)&amp;nbsp;just might provide an insight into how you will be building Notes client and dual client applications in the years to come.&amp;nbsp; Oh... and read the blogs of those that are design partners.&amp;nbsp; They may not be able to say a lot just yet... but look at what they don't say!&lt;/p&gt;</content>
    </entry>
    <entry xml:lang="en-US">
        <id>http://www.bleedyellow.com/blogs/dotdomino/entry/defensive_programming</id>
        <title type="html">Defensive Programming</title>
        <author><name>Peter Presnell</name><email>ktree19@yahoo.com</email></author>
        <link rel="alternate" type="text/html" href="http://www.bleedyellow.com/blogs/dotdomino/entry/defensive_programming" />
        <published>2008-06-18T16:24:22-04:00</published>
        <updated>2008-06-18T16:57:19-04:00</updated> 
        <category term=".dominoframework" />
        <category term="programming" />
        <content type="html">&lt;p&gt;Defensive programming involves writing code in such a way as to handle unforseen circumctances.&amp;nbsp;&amp;nbsp; Too often when I look at code that is developed for Notes applications I see little or no evidence of defensive programming being used.&lt;/p&gt;
&lt;p&gt;Notes applications more than any other of the major development platforms cries out for defensive programming.&amp;nbsp; Unlike SQL-based databases, Notes databases do not have a data schema and hence do not require that every document (row) contain the same finite list of fields (columns).&amp;nbsp; Nor does Notes require that each field (column) be of the same data type.&amp;nbsp; Notes fields also do not restrict if it can represent a single value or a list.&amp;nbsp; So there is always the real risk that the data may not contain what you expect.&lt;/p&gt;
&lt;p&gt;As an example, lets look at an employee record which has an EmployeeNo field.&lt;/p&gt;
&lt;p&gt;The following LotusScript code could result in an error for&amp;nbsp;for many reasons:-&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;font color="#009900"&gt;EmpNo = Doc.EmployeeNo(0)&lt;/font&gt;&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;&amp;nbsp;The variable Doc may not yet be instantiated (i.e. be connected to an existing Notes document)&lt;/li&gt;
&lt;li&gt;The field EmployeeNo may not exist in the current document&lt;/li&gt;
&lt;li&gt;The value inside the EmployeeNo may not be of the same type as the variable EmpNo.&amp;nbsp; (it is not even clear from the code whether EmpNo is text or a number.&lt;/li&gt;
&lt;li&gt;Unlikely, but should EmployeeNo ever become a method or a property of the NotesDocument class then the code would no longer work.&lt;/li&gt;&lt;/ol&gt;
&lt;p&gt;The following alternative code protects us from many of the above potential problems.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;font color="#009900"&gt;If Not Doc Is Nothing Then&lt;/font&gt;&lt;/p&gt;
&lt;p&gt;&lt;font color="#009900"&gt;&amp;nbsp; If Doc.HasItem(&amp;quot;EmployeeNo&amp;quot&lt;img src="http://www.bleedyellow.com/blogs/images/smileys/wink.gif" class="smiley" alt=";)" title=";)" /&gt; Then&lt;/font&gt;&lt;/p&gt;
&lt;p&gt;&lt;font color="#009900"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; EmpNo$ = CStr(Doc.GetItemValue(&amp;quot;EmployeeNo&amp;quot&lt;img src="http://www.bleedyellow.com/blogs/images/smileys/wink.gif" class="smiley" alt=";)" title=";)" /&gt;(0))&lt;/font&gt;&lt;/p&gt;
&lt;p&gt;&lt;font color="#009900"&gt;&amp;nbsp; End If&lt;/font&gt;&lt;/p&gt;
&lt;p&gt;&lt;font color="#009900"&gt;End If&lt;/font&gt;&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;&lt;font color="#000000"&gt;We are making sure that we have a Notes document&lt;/font&gt;&lt;/li&gt;
&lt;li&gt;We are making sure the document has an EmployeeNo field&lt;/li&gt;
&lt;li&gt;We have made it clear in the code that we are expecting a string (The $ in EmpNo$ causes LotusScript to make sure EmpNo has been declared as a String)&lt;/li&gt;
&lt;li&gt;We are making a reasonable (but not complete) effort to convert any non-text values to a text value (assuming the values should be text).&amp;nbsp; i.e. This works for numbers or dates but would fail for a Rich Text field.&lt;/li&gt;&lt;/ol&gt;
&lt;p&gt;This of course results in a lot of extra code being required each and every time you attempt to access the contents of a Notes field.&amp;nbsp; Which probably expains why people often don't bother!!!&lt;/p&gt;
&lt;p&gt;Another approach that can result in a reduction in the amount of code required and making the code easier to follow is to adopt Object Oriemted Programming&amp;nbsp;techniques to make EmployeeNo a property of an Employee Class&lt;/p&gt;
&lt;p&gt;&lt;font color="#009900"&gt;Class Employee&lt;/font&gt;&lt;/p&gt;
&lt;p&gt;&lt;font color="#009900"&gt;&amp;nbsp; Property Get EmployeeNo$ As String&lt;/font&gt;&lt;/p&gt;
&lt;p&gt;&lt;font color="#009900"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;If iDocument Is nothing Then Exit Property&lt;/font&gt;&lt;/p&gt;
&lt;p&gt;&lt;font color="#009900"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; If iDocument.HasItem(&amp;quot;EmployeeNo$) Then EmployeeNo$ = Cstr(iDocument.GetItemValue(&amp;quot;EmployeeNo&amp;quot&lt;img src="http://www.bleedyellow.com/blogs/images/smileys/wink.gif" class="smiley" alt=";)" title=";)" /&gt;(0))&lt;/font&gt;&lt;/p&gt;
&lt;p&gt;&lt;font color="#009900"&gt;&amp;nbsp; End Property&lt;/font&gt;&lt;/p&gt;
&lt;p&gt;&lt;font color="#009900"&gt;End Class&lt;/font&gt;&lt;/p&gt;
&lt;p&gt;Now each time I need to access the EmployeeNo field in my application I can write the code as&lt;/p&gt;
&lt;p&gt;&lt;font color="#009900"&gt;EmpNo$ = Employee.EmployeeNo$&amp;nbsp;&lt;font color="#000000"&gt; or&amp;nbsp; &lt;/font&gt;If Employee.EmployeeNo$ &amp;lt;&amp;gt; &amp;quot;&amp;quot; Then&lt;/font&gt;&lt;/p&gt;
&lt;p&gt;You will notice within the .Domino Framework that this technique is used repeatedly, especially when using the DominoDOcument class and extensions of that class.&amp;nbsp; The .DominoFramework also provides a property generator tool that automatically generates the LotusScript code for a property based upon the property name, notes field name, and the intended data type.&amp;nbsp; This takes a lot of the hack work out of creating all the property definitions needed when creating a new class.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;Note: The above is but one of many defensive proramming techniques that could be employed.&amp;nbsp; In many cases it comes down to personal preference,&amp;nbsp;coding style and/or coding standards.&lt;/p&gt;</content>
    </entry>
    <entry xml:lang="en-US">
        <id>http://www.bleedyellow.com/blogs/dotdomino/entry/retaining_month_end_dates</id>
        <title type="html">Retaining Month End Dates</title>
        <author><name>Peter Presnell</name><email>ktree19@yahoo.com</email></author>
        <link rel="alternate" type="text/html" href="http://www.bleedyellow.com/blogs/dotdomino/entry/retaining_month_end_dates" />
        <published>2008-06-17T16:28:46-04:00</published>
        <updated>2008-06-17T16:28:46-04:00</updated> 
        <content type="html">When calculating milestones based upon a starting date it can often be necessary to treat the "last day of the month" a little different to other dates.&amp;nbsp; That is, if the base date is 28 Feb 2007, then "next month" is usually held to be March 31 2007 and "next year" is usually held to be 29 Feb 2008.&amp;nbsp; Whereas if the base date is 27 Feb 2007 then "next month" is usally held to be 27 March 2007, and "next year" is held to be 27 February 2008.&amp;nbsp; This result can be achived by always adding one day to the starting date, incrementing it by the required amount and then subtracting 1 day.&amp;nbsp; When a starting date is the last day of the month,adding 1 day moves the date to the 1st of the next month.&amp;nbsp; After adjusting the date subtracting 1 day will move dates still on the first of a month back to the last day of the previous month.&amp;nbsp;&amp;nbsp; This not only accounts for differences in the number of days in each month but also those pesky leap years.</content>
    </entry>
    <entry xml:lang="en-US">
        <id>http://www.bleedyellow.com/blogs/dotdomino/entry/dominouidocument_class_goes</id>
        <title type="html">DominoUIDocument Class Goes</title>
        <author><name>Peter Presnell</name><email>ktree19@yahoo.com</email></author>
        <link rel="alternate" type="text/html" href="http://www.bleedyellow.com/blogs/dotdomino/entry/dominouidocument_class_goes" />
        <published>2008-06-17T12:58:59-04:00</published>
        <updated>2008-06-17T12:58:59-04:00</updated> 
        <category term=".dominoframework" />
        <content type="html">&lt;p&gt;When developing the .Domino Framework I always had problems&amp;nbsp; distinguishing the relationship between the DominoDocument (NotesDocument)&amp;nbsp; and DominoUIDocument (NotesUIDocument) classes.&amp;nbsp; It didnt seem like the DominoUIDocument class should have many properties or methods as these should typically be part of the DominoDocument class.&amp;nbsp; Typically an extension of the&amp;nbsp;DominoUIDocument class would only have event handlers.&amp;nbsp; Regardless of whether I accessed a document via the foreground or background I really needed to have the same set of rules applied to the object.&amp;nbsp; E.g.&amp;nbsp;The same validation/transformation/logging needs to be applied to the property of an object when it is edited on a form, edited via in-view editing, and/or assigned a value in an agent.&amp;nbsp; &lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;So after giving this a lot of thought I have decided to remove the DominoUIClass as part of the next release.&amp;nbsp; The DominoDocument class will now extend both the NotesDOcument and NotesUIDocument classes.&amp;nbsp; By passing a NotuesUIDocument to the constructor of the DominoDocument class the framework is able to establish that the document is being accessed in the foregorund and make available those additional features that only apply when editing a document via a form.&amp;nbsp; I feel confident this will lead to a cleaner, simpler solution for working with Notes documents in an object oriented way.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;Note: One of the reasons the .Domino Framework is still in beta is so that I can do this (remove/rename classes and/or change the footprint of methods/properties).&lt;/p&gt;</content>
    </entry>
    <entry xml:lang="en-US">
        <id>http://www.bleedyellow.com/blogs/dotdomino/entry/notes_8_5_will_not</id>
        <title type="html">Notes 8.5 Will Not Be Supported</title>
        <author><name>Peter Presnell</name><email>ktree19@yahoo.com</email></author>
        <link rel="alternate" type="text/html" href="http://www.bleedyellow.com/blogs/dotdomino/entry/notes_8_5_will_not" />
        <published>2008-06-16T15:08:18-04:00</published>
        <updated>2008-06-16T15:23:31-04:00</updated> 
        <category term=".dominoframework" />
        <category term="notes85" />
        <content type="html">&lt;p&gt;Having undertaken a review of the Notes 8.5 public beta I have decided that I will not be developing a version of the&amp;nbsp;.domino framework &amp;nbsp;for the 8.5 release.&amp;nbsp; My current plans were (and still are) to release 1.0 of the .Domino Framework later this year that is fully supported with Notes 6.0+.&amp;nbsp; After this initial release I had planned to then jump to Notes 8.5 and start developing functionality specific to this release.&amp;nbsp; &lt;/p&gt;
&lt;p&gt;I find Notes 8.5 to be a major disappointment for Notes client development and see no compelling reason to develop a version of the .Domino Framework for this release.&amp;nbsp; For one thing there is little or no new features in this release specific to Notes Client functionality.&amp;nbsp; The design elements such as X-Pages and Custom controls are supported on the Web client only.&amp;nbsp; Then there is the new eclipse IDE which does a great job for these new design elements but leaves all the existing design elements worse off than before.&amp;nbsp; (And don't get me started about the absence of an eclipse editor for LotusScript!!!).&amp;nbsp; So until IBM starts to get fair dinkum with providing something new for Notes client development All post 1.0 releases of the .Domino Framework will be developed for the Notes 8.0 stream.&amp;nbsp; This includes support for composite applications - something I am quite excited about.&amp;nbsp; I suspect a lot of people will bypass this release of Notes anyway and wait for the REAL 8.5 release to become available.&lt;/p&gt;</content>
    </entry>
    <entry xml:lang="en-US">
        <id>http://www.bleedyellow.com/blogs/dotdomino/entry/dominodocumentcollection_sort</id>
        <title type="html">DominoDocumentCollection.Sort</title>
        <author><name>Peter Presnell</name><email>ktree19@yahoo.com</email></author>
        <link rel="alternate" type="text/html" href="http://www.bleedyellow.com/blogs/dotdomino/entry/dominodocumentcollection_sort" />
        <published>2008-06-13T15:30:49-04:00</published>
        <updated>2008-06-13T15:32:29-04:00</updated> 
        <category term=".dominoframework" />
        <category term="sorting" />
        <content type="html">&lt;p&gt;&lt;strong&gt;DominoDocumentCollection.Sort&lt;/strong&gt; - &lt;em&gt;verb&amp;nbsp;-&amp;nbsp;origins unknown -&lt;/em&gt; &amp;nbsp;Geek speak for sorting a collection of documents...&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;Sorting &amp;nbsp;algorithms are typically implemented to only sort scalar values (text, numbers, dates).&amp;nbsp; The .Domino Framework implements a combination of the QuickSort and SelectionSort algorithms as part of a generic atfSort function included within the &lt;a href="mailto:Domino.@Functions"&gt;Domino.@Functions&lt;/a&gt; namespace.&amp;nbsp; The next beta release of the .Domino Framework will contain an enhancement to this function to sort vectors.&amp;nbsp; Vectors are a way of storing complex data structures by separating them into two components (1) The object itself and (2) a key value.&amp;nbsp; The .Domino Framework implements vectors via a&amp;nbsp;simple DominoVector class which is found in the base Domino namespace.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;The sorting of document collections therefore becomes one of creating a collection (array) of vectors in which the value is a NotesDocument and the key is whatever value is desired to sort the collection (e.g. UNID, date last modified, or the value of a specific field).&amp;nbsp; Following my posting yesterday on the DominoDocumentCollection class &lt;a href="http://www.lotus911.com/nathan/escape.nsf"&gt;Nathan Freeman&lt;/a&gt;&amp;nbsp;provided some cool code for sorting a document collection based upon a specific view.&amp;nbsp; Thanks to Nathan's contribution I have now been able to extend the functionality of the new Sort method to allow the documents to be sorted in the same order they appear in a designated view.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;The 0.5 beta release (which includes this new method) is expected to be published on the 29th of June .&lt;/p&gt;</content>
    </entry>
    <entry xml:lang="en-US">
        <id>http://www.bleedyellow.com/blogs/dotdomino/entry/tip_a_simple_implementation_of</id>
        <title type="html">Tip: A Simple Implementation of .Domino Framework</title>
        <author><name>Peter Presnell</name><email>ktree19@yahoo.com</email></author>
        <link rel="alternate" type="text/html" href="http://www.bleedyellow.com/blogs/dotdomino/entry/tip_a_simple_implementation_of" />
        <published>2008-06-12T14:55:32-04:00</published>
        <updated>2008-06-12T14:56:58-04:00</updated> 
        <category term=".dominoframework" />
        <content type="html">&lt;p&gt;For those of you have have asked the question &amp;quot;How do I use the .Domino Framework in my applications?&amp;quot;...&amp;nbsp; The simplest approach is as follows:-&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;1) Copy the following LotusScript Libraries from the template to your application:-&lt;/p&gt;
&lt;blockquote dir="ltr" style="MARGIN-RIGHT: 0px"&gt;
&lt;p&gt;base.Domino&lt;/p&gt;
&lt;p&gt;base.Domino.Applications&lt;/p&gt;
&lt;p&gt;base.Domino.Errors&lt;/p&gt;
&lt;p&gt;&lt;a href="mailto:base.Domino.@Functions"&gt;base.Domino.@Functions&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;Domino&lt;/p&gt;
&lt;p&gt;Domino.Applications&lt;/p&gt;
&lt;p&gt;Domino.Errors.OpenLog&lt;/p&gt;&lt;/blockquote&gt;
&lt;p dir="ltr"&gt;2) Create a new LotusScript Library Domino.Applications.&lt;em&gt;applicationname &lt;/em&gt;and include the statement &lt;font color="#009900"&gt;Use &amp;quot;Domino.Applications&amp;quot;&lt;/font&gt;.&lt;/p&gt;
&lt;p dir="ltr"&gt;3) Create new classses within this LotusScript library that extend the classes found in Domino.Applications (e.g. DominoDocument).&amp;nbsp; These classes add proprerties/methods that are specific to your application.&lt;/p&gt;
&lt;p dir="ltr"&gt;&amp;nbsp;&lt;/p&gt;
&lt;p dir="ltr"&gt;Note: You can exclude Domino and Domino.Applications libraries, but your application will now be extending classes such as baseDominoDatabase, baseDominoDocument instead of DominoDatabase, DominoDocument and the include becomes &lt;font color="#009900"&gt;Use 'base.Domino.Applications&amp;quot;&lt;/font&gt;&lt;/p&gt;
&lt;p dir="ltr"&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;The above provides the core Business Logic Layer of the .Domino framework implemented via LotusScript.&amp;nbsp; Presentation Layer components and advanced business logic components require additional design elements&amp;nbsp;to be copied from the template.&amp;nbsp; The template does document the design elements used by specific components.&lt;/p&gt;</content>
    </entry>
    <entry xml:lang="en-US">
        <id>http://www.bleedyellow.com/blogs/dotdomino/entry/dominodocumentcollection</id>
        <title type="html">DominoDocumentCollection Class</title>
        <author><name>Peter Presnell</name><email>ktree19@yahoo.com</email></author>
        <link rel="alternate" type="text/html" href="http://www.bleedyellow.com/blogs/dotdomino/entry/dominodocumentcollection" />
        <published>2008-06-12T12:54:29-04:00</published>
        <updated>2008-06-12T14:59:39-04:00</updated> 
        <category term=".dominoframework" />
        <content type="html">&lt;p&gt;The next beta release of the .Domino Framework will contain a significant extension of the DominoDocumentCollection class.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;Unlike the NotesDocumentCollection class, it DOES have a constructor making it possible to gather a wide range of document collections, including an EMPTY document collection.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;The NotesDocumentCollection extended by this class depends on the type of parameter passed to the constructor:-&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;Nothing: Creates an empty document collection for the current database&lt;/li&gt;
&lt;li&gt;NotesDocumentCollection: Extends a NotesDocumentCollection you provide&lt;/li&gt;
&lt;li&gt;NotesDatabase: Collection with all documents in the database&lt;/li&gt;
&lt;li&gt;NotesSession: The list of documents an agent or view action is set to run against&lt;/li&gt;
&lt;li&gt;NotesNoteCollection: A collection of the design notes&lt;/li&gt;
&lt;li&gt;NotesViewEntryCollection: Converts the view entry collection to a document collection&lt;/li&gt;
&lt;li&gt;NotesDocument: Creates a document collection with a single document&lt;/li&gt;
&lt;li&gt;NotesView: Creates a document collection with all documents in the view&lt;/li&gt;
&lt;li&gt;ENUM_COLLECTION_TYPE_CONFLICTS&amp;nbsp;(Constant): Collection of all conflict documents in current database&lt;/li&gt;
&lt;li&gt;ENUM_COLLECTION_TYPE_LOCKED&amp;nbsp;(Constant): Collection of all locked documents in current database&lt;/li&gt;
&lt;li&gt;ENUM_COLLECTION_TYPE_READERS&amp;nbsp;(Constant): Collection of all documents in current database with reader fields&lt;/li&gt;
&lt;li&gt;ENUM_COLLECTION_TYPE_AUTHORS&amp;nbsp;(Constant): Collection of all documents in current database with author fields&lt;/li&gt;
&lt;li&gt;String Array: Builds a document collection assuming the elements in the array represent any combination of Note IDs, Document UNIDs, Notes URLs, and/or HTTP URLS.&lt;/li&gt;&lt;/ol&gt;
&lt;p&gt;The class will also contain an AddDocuments method.&amp;nbsp; Similar to the&amp;nbsp;NotesDocumentCollection.AddDocument&amp;nbsp; method, this will provide the ability to add multiple documents to the document collection, including most of the options provided in the constructor.&lt;/p&gt;</content>
    </entry>
    <entry xml:lang="en-US">
        <id>http://www.bleedyellow.com/blogs/dotdomino/entry/application_template</id>
        <title type="html">Application Template</title>
        <author><name>Peter Presnell</name><email>ktree19@yahoo.com</email></author>
        <link rel="alternate" type="text/html" href="http://www.bleedyellow.com/blogs/dotdomino/entry/application_template" />
        <published>2008-06-10T13:06:49-04:00</published>
        <updated>2008-06-10T13:06:49-04:00</updated> 
        <category term=".dominoframework" />
        <category term="template" />
        <content type="html">&lt;p&gt;The 0.5 Beta release of the .Domino Framework will contain an application template.&amp;nbsp; This is another one of the many missing pieces of the framework that I wish to complete before the framework is ready for a 1.0 release.&amp;nbsp; The .Domino Framework contains so many pieces that it is often difficult to establish which components should be included when building an application based upon the .Domino Framwork.&amp;nbsp; The new template will contain all the components that can be used in building a Notes&amp;nbsp;application.&amp;nbsp; Notes developers can then delete the components that are not required for an application (e.g. exporting to Excel, importing holidays, managing keywords etc.).&amp;nbsp; I am also working on the documentation contained in the templates and the wiki&amp;nbsp;to help developers better understand how to create applications using the .Domono Framework as a component library as well as how to extend the framework within each application.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;Note: Every Notes application I now build is based upon the .Domino Framework and it is halving the time it takes me to build these applications.&lt;/p&gt;</content>
    </entry>
    <entry xml:lang="en-US">
        <id>http://www.bleedyellow.com/blogs/dotdomino/entry/lotusscript_revamp_20_things_i</id>
        <title type="html">LotusScript Revamp (20 Things I'd Like To See)</title>
        <author><name>Peter Presnell</name><email>ktree19@yahoo.com</email></author>
        <link rel="alternate" type="text/html" href="http://www.bleedyellow.com/blogs/dotdomino/entry/lotusscript_revamp_20_things_i" />
        <published>2008-06-09T13:36:06-04:00</published>
        <updated>2008-06-16T15:12:18-04:00</updated> 
        <category term="notes85" />
        <category term="lotusscript" />
        <content type="html">&lt;p&gt;It has been a long time since the LotusScript language received any major attention.&amp;nbsp;&amp;nbsp; The time is rapidly approaching where the language needs a major upgrade to compete with other programming languages such as Java, C#, and VB.Net.&amp;nbsp; The following is a list of the 20 features that I would most like to see added to LotusScript: (many of which are already posted on IdeaJam)-&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;Allow the extension of product classes such as NotesDocument&lt;/li&gt;
&lt;li&gt;Provide a&amp;nbsp;construct (similar to .NET LINQ) allowing LotusScript to perform SQL operations such as joins on views.&lt;/li&gt;
&lt;li&gt;Allow method overloading (defining a single method with multiple options for the parameters -&amp;nbsp;# and type)&lt;/li&gt;
&lt;li&gt;100% Fideltity exporting and importing data using DXL.&lt;/li&gt;
&lt;li&gt;Expand the list of&amp;nbsp;properties exposed by&amp;nbsp;product classes to include all those other properties already available within the C API.&lt;/li&gt;
&lt;li&gt;Add a Try/Catch construct as an alternative to On Error Goto (with VB.Net it&amp;nbsp;is Try Catch End Try)&lt;/li&gt;
&lt;li&gt;Allow optional parameters for a method (sub/function)&lt;/li&gt;
&lt;li&gt;Add &amp;quot;enumerations&amp;quot; (as per .Net)&amp;nbsp;as a construct within a class.&amp;nbsp; This would allow keywords to be added without necessarily having to assign keywords specific value.&lt;/li&gt;
&lt;li&gt;Add the ability to serialize a class into text, XML, and/or binary formats.&amp;nbsp; This would be especially usefull when passing data via&amp;nbsp;a Web Service.&lt;/li&gt;
&lt;li&gt;Allow&amp;nbsp;field events to be trapped outside the form (e.g. allow&amp;nbsp;an external class to trap when a field value has changed)&lt;/li&gt;
&lt;li&gt;In addition to Public/Private classes, add the ability to define abstract and sealed classes.&lt;/li&gt;
&lt;li&gt;Provide greater support for polymophism, including the ability to cast a object from one class to another.&lt;/li&gt;
&lt;li&gt;Add the ability to define extension methods as a way of adding to/modifying the behviour of classes (as per C# 3.0)&lt;/li&gt;
&lt;li&gt;Provide a constructor for the NotesDocumentCollection class&lt;/li&gt;
&lt;li&gt;Add an AllDocuments property to the&amp;nbsp;NotesView&amp;nbsp;returning a NotesDocumentCollection.&lt;/li&gt;
&lt;li&gt;Extend the NotesUIWorkspace class so that access can be gained to any window presently open on the workspace.&lt;/li&gt;
&lt;li&gt;Implement interfaces as a way of specifying properties/methods that must exist in a class implementing a specific interface.&lt;/li&gt;
&lt;li&gt;Add&amp;nbsp;Reflection, in which it is possible to establish if a class has a specific property/method.&lt;/li&gt;
&lt;li&gt;Devise a simple way to tell if a Rich Text field is empty&lt;/li&gt;
&lt;li&gt;Add iterators for document collections.&amp;nbsp; e.g. Forall NotesDocument in NotesVIew or ForAll NotesDocument in NotesDocumentCollection.&lt;/li&gt;&lt;/ol&gt;</content>
    </entry>
    <entry xml:lang="en-US">
        <id>http://www.bleedyellow.com/blogs/dotdomino/entry/inspector</id>
        <title type="html">.Inspector</title>
        <author><name>Peter Presnell</name><email>ktree19@yahoo.com</email></author>
        <link rel="alternate" type="text/html" href="http://www.bleedyellow.com/blogs/dotdomino/entry/inspector" />
        <published>2008-06-06T11:24:09-04:00</published>
        <updated>2008-06-06T11:25:35-04:00</updated> 
        <category term=".dominoframework" />
        <category term=".inspector" />
        <content type="html">&lt;p&gt;I am presently working on the&amp;nbsp;next piece in the .&amp;nbsp;Domino Framework&amp;nbsp; puzzle for the next beta release (0.5).&amp;nbsp; It is a data administration tool I have assigned the name .Inspector.&amp;nbsp; It seekes to bridge the gap between simple document editing&amp;nbsp;found in&amp;nbsp;those&amp;nbsp; &amp;quot;Magic Buttons&amp;quot; and full-blown data management&amp;nbsp;products such as NoteMan and ScanEz.&amp;nbsp; Using&amp;nbsp; the DominoDatabase, DominoDocumentCollection, and DominoDocument classes developed as part of the .Domino Framework the tool allows a developer or administrator of an application the ability to:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;View&amp;nbsp;information about&amp;nbsp; the database, document collection, document, and items&lt;/li&gt;
&lt;li&gt;Use a range of techniques to build a collection of documents from a database&lt;/li&gt;
&lt;li&gt;Perform a wide range of tasks against each of the above items (e.g. sign a database, remove a field from all documents in collection)&lt;/li&gt;
&lt;li&gt;Display information about&amp;nbsp;profile documents, design documents, deletion stubs etc. held in a database.&lt;/li&gt;&lt;/ol&gt;
&lt;p&gt;If anyone has any ideas of the type of features the could/should be provided in a FREE data management tool, please let me know....&lt;/p&gt;</content>
    </entry>
    <entry xml:lang="en-US">
        <id>http://www.bleedyellow.com/blogs/dotdomino/entry/dirty_reads</id>
        <title type="html">Dirty Reads</title>
        <author><name>Peter Presnell</name><email>ktree19@yahoo.com</email></author>
        <link rel="alternate" type="text/html" href="http://www.bleedyellow.com/blogs/dotdomino/entry/dirty_reads" />
        <published>2008-06-04T14:04:11-04:00</published>
        <updated>2008-06-04T14:04:11-04:00</updated> 
        <category term="documentlocking" />
        <category term=".dominoframework" />
        <content type="html">&lt;p&gt;A &amp;quot;Dirty Read&amp;quot; occurs when a document you open a document in read mode and somebody subsequently edits the document.&amp;nbsp; You now have a copy of the document which is no longer valid.&amp;nbsp; If document locking is enabled for an application then Notes detects this situation and prompts the user to close the document and reopen it from the view.&amp;nbsp; The document remains in read mode.&amp;nbsp; In Notes 6.0 at least, if you again attempt to edit the document it actually allows you to edit the document without having re-opened it.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;A a way of preventing dirty reads the .Domino Framework has added a PreventEditIfLocked method to the DominoDocument class (See previous blog).&amp;nbsp; This method now supports two ways of handling the situation.&amp;nbsp; The first is to close and reopen the document.&amp;nbsp; But this does not seem to always refresh the document.&amp;nbsp; The second (new) option is to display the same Notes error message and remain in read mode via a new DirtyReadAlert method.&amp;nbsp; This exposed what appears to be a &amp;quot;bug&amp;quot; in Lotus Notes (NO.... I hear you say!!).&amp;nbsp; It would seem that the document locking mechanism does not handle the situation in which a QueryModeChange event returns false and the document does not switch to edit mode.&amp;nbsp; The edit lock is already in place and because the document is now not in edit mode is does not unlock the document when it is closed leaving the document permanently locked.&amp;nbsp; To address this scenario the DIrtyReadAlert also unlocks the document.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;font color="#33cc00"&gt;'/**&lt;br&gt;&amp;nbsp;' * &amp;nbsp;If document is locked by another person then prevent document from being edited.&amp;nbsp; Used with document lcoking, this prevents potential conflicts that can occur &lt;br&gt;&amp;nbsp;' * if a document is placed in edit mode after another has changed the document on another server.&amp;nbsp; Action taken can be either to repeat the same message generated&lt;br&gt;&amp;nbsp;' * the first time by Notes, or to close and re-open the document&lt;br&gt;&amp;nbsp;' *&lt;br&gt;&amp;nbsp;' * @param&amp;nbsp;Source&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;The NotesUIDocument to be protected&lt;br&gt;&amp;nbsp;' * @param&amp;nbsp;DisplayMessage&amp;nbsp;True = Display message each time, False = close and re-open document&lt;br&gt;&amp;nbsp;' */&lt;br&gt;&amp;nbsp;Sub PreventEditIfLocked(Source As NotesUIDocument,DisplayMessage As Boolean)&lt;br&gt;&amp;nbsp;&amp;nbsp;If Me.IsLockedBySomeoneElse Then &lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;If DisplayMessage Then&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;On Event QueryModeChange From Source Call DirtyReadAlert&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;Else&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;On Event QueryModeChange From Source Call ReloadDocumentFromView&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;End If&lt;br&gt;&amp;nbsp;&amp;nbsp;End If&lt;br&gt;&amp;nbsp;End Sub&lt;br&gt;&amp;nbsp;Private Sub DirtyReadAlert(Source As NotesUIDocument,Continue As Variant)&lt;br&gt;&amp;nbsp;&amp;nbsp;On Error Resume Next&lt;br&gt;&amp;nbsp;&amp;nbsp;Call Source.Document.UnLock&lt;br&gt;&amp;nbsp;&amp;nbsp;Msgbox &amp;quot;Document has been modified since opening, reopen in edit mode from view.&amp;quot;,,&amp;quot;Lotus Notes&amp;quot;&lt;br&gt;&amp;nbsp;&amp;nbsp;Continue = False&lt;br&gt;&amp;nbsp;End Sub&lt;/font&gt;&lt;/p&gt;</content>
    </entry>
    <entry xml:lang="en-US">
        <id>http://www.bleedyellow.com/blogs/dotdomino/entry/testing_workflow_applications</id>
        <title type="html">Testing Workflow Applications</title>
        <author><name>Peter Presnell</name><email>ktree19@yahoo.com</email></author>
        <link rel="alternate" type="text/html" href="http://www.bleedyellow.com/blogs/dotdomino/entry/testing_workflow_applications" />
        <published>2008-06-04T11:49:22-04:00</published>
        <updated>2008-06-04T11:49:22-04:00</updated> 
        <category term=".dominoframework" />
        <category term="workflow" />
        <content type="html">&lt;p&gt;Testing worklow applications can often present challenges if the application itself is not set up with testing in mind.&amp;nbsp; Amongst the issues workflow introduces into application testing is ensuring that people outside of the test group do not end up being recipients of unwamted email notifications.&amp;nbsp;&amp;nbsp;&amp;nbsp;To help me test Notes applications I have developed the practice of calling a specific method to send an e-mail.&amp;nbsp; This method would devise some way of testing for a &amp;quot;production&amp;quot; application.&amp;nbsp; If the application is not running in &amp;quot;production&amp;quot; then the e-mail notification would be modified to replace the recipients with the current user.&amp;nbsp; The list of original recipients are then appended to the bottom of the e-mail so that the tester can verify that the distribution list is valid.&amp;nbsp;&amp;nbsp;&amp;nbsp; Because the tester now receives all the notifications generated they do not need to run around to other people to verify that they got the necessary notifications...&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;An example of the code is provided within the .Domino Framework as part of the baseDominoMessage class contained within the Domino.MailServices namespace.&amp;nbsp; This implementation assumes the presence of a profile document that contains applications settings, including a designation of the environment of this instance of the application (e.g. Development, QA, Production).&amp;nbsp; The method also provides an option to bypass sending any&amp;nbsp;message when not running on a production server.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;font color="#009900"&gt;&amp;nbsp;Sub Notify(testSend As Boolean)&lt;br&gt;&amp;nbsp;&amp;nbsp;&lt;br&gt;&amp;nbsp;&amp;nbsp;If Application.ApplicationSettings.isTestServer Then&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;If Not TestSend Then Exit Sub&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;Call Me.AppendText(&amp;quot;&amp;quot;,1)&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;Call Me.AppendText(Ustring$(80,&amp;quot;_&amp;quot&lt;img src="http://www.bleedyellow.com/blogs/images/smileys/wink.gif" class="smiley" alt=";)" title=";)" /&gt;,1)&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;Call Me.AppendText(&amp;quot;This notification has been generated from a test database&amp;quot;,1)&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;Call Me.AppendText(&amp;quot;In production the recipients would be: &amp;quot;,1)&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;Call Me.AppendText(&amp;quot;To: &amp;quot; + Join(Me.SendTo,&amp;quot;,&amp;quot&lt;img src="http://www.bleedyellow.com/blogs/images/smileys/wink.gif" class="smiley" alt=";)" title=";)" /&gt;,1)&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;Me.SendTo = Session.UserName&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;Call Me.AppendText(&amp;quot;CC: &amp;quot; + Join(Me.CopyTo,&amp;quot;,&amp;quot&lt;img src="http://www.bleedyellow.com/blogs/images/smileys/wink.gif" class="smiley" alt=";)" title=";)" /&gt;,1)&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;Me.CopyTo = &amp;quot;&amp;quot;&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;Call Me.AppendText(&amp;quot;BCC: &amp;quot; + Join(Me.BlindCopyTo,&amp;quot;,&amp;quot&lt;img src="http://www.bleedyellow.com/blogs/images/smileys/wink.gif" class="smiley" alt=";)" title=";)" /&gt;,1)&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;Me.BlindCopyTo = &amp;quot;&amp;quot;&lt;br&gt;&amp;nbsp;&amp;nbsp;End If&lt;br&gt;&amp;nbsp;&amp;nbsp;Call iDocument.Send(True)&lt;br&gt;&amp;nbsp;&amp;nbsp;&lt;br&gt;&amp;nbsp;End Sub&lt;/font&gt;&lt;/p&gt;</content>
    </entry>
    <entry xml:lang="en-US">
        <id>http://www.bleedyellow.com/blogs/dotdomino/entry/notes_8_5_disappointment</id>
        <title type="html">Notes 8.5 Disappointment</title>
        <author><name>Peter Presnell</name><email>ktree19@yahoo.com</email></author>
        <link rel="alternate" type="text/html" href="http://www.bleedyellow.com/blogs/dotdomino/entry/notes_8_5_disappointment" />
        <published>2008-06-03T11:23:58-04:00</published>
        <updated>2008-06-03T14:23:32-04:00</updated> 
        <category term="notes85" />
        <content type="html">&lt;p&gt;IBM did such a&amp;nbsp;great job&amp;nbsp;with Notes 8.0 in improving the overall UI and the Mail database&amp;nbsp;and bridged the gap between Notes and Outlook.&amp;nbsp; Finally it looked like &amp;quot;we&amp;quot; (IBM and the Notes community) were moving forward again with Lotus Notes.&amp;nbsp; While I would have loved to have seen a lot more done for developers in 8.0 I can understand IBM's need to focus on bring the Notes client&amp;nbsp; into the 21st century.&amp;nbsp; I am not sure if it was just me, but somehow I developed an expectation that the needs of the Notes developer would be the central theme with Notes 8.5.&amp;nbsp; As a result I was already looking forward to the release of 8.5 even before I got to use 8.0.&lt;/p&gt;
&lt;p&gt;Over the weekend I downloaded the first public beta of 8.5 and almost immediately jumped into the new eclipse version of Domino Designer to see what goodies were there for me to use.&amp;nbsp; There were some obvious signs of a slicker interface as per the Note 8 client.&amp;nbsp; Useful but not really something I was hanging out for.&amp;nbsp; I had heard all the talk about what an eclipse IDE would do for things such as LotusScript so the first thing I did was open up a LotusScript library from the .Domino Framework to see what I could now do.&amp;nbsp; There was a new property box eating up space at the bottom of the screen and.... THAT WAS IT.&amp;nbsp; The property box did not even provide any useful data.&amp;nbsp; It just sat there empty consuming space.&amp;nbsp; Where was the class browser?&amp;nbsp; Where was typeahead for anything but production classes?&amp;nbsp; OK so the new IDE is still not there yet, surely there is a swag of other new development features for me to use.&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;X-Pages, these look really cool but I rarely get to do much Web development so this is not a big gain.&lt;/li&gt;
&lt;li&gt;Server-Sided JavaScript, again great if you do a lot of Web development&lt;/li&gt;
&lt;li&gt;Themes, works with X-Pages only, which work for Web client only....&lt;br&gt;&lt;/li&gt;
&lt;li&gt;Dojo, another cool Web development tool (A pattern is emerging)&lt;br&gt;&lt;/li&gt;
&lt;li&gt;New LotusScript methods for NotesDocumentCollection GetAllReadDocuments, GetAllUnreadDocuments, Intersection.&amp;nbsp; Something I guess but I don't recall ever needing methods like this.&amp;nbsp; Where is the constructor for NotesDocumentCollection?&amp;nbsp; That would at least be useful!&lt;/li&gt;
&lt;li&gt;YES , finally an extension to the LotusScript language!&amp;nbsp; Oh, the ability to set the system date and time.&amp;nbsp; In 15 years of Notes development I don't recall ever needing to do that. I thought we had operating systems that managed the clock!&lt;/li&gt;&lt;/ol&gt;So after all the hype and all the wait I get practically NOTHING to help me build Notes Client applications.&amp;nbsp; It makes me envious of all the Domino Web developers who did at least get something in this release.&amp;nbsp; I can only hope something new appears before the final 8.5 release because IBM have gone nowhere in bridging the gap between Domino Designer and modern IDEs such as Visual Studio.&amp;nbsp; Perhaps we are not important in IBM's plans after all.&amp;nbsp; Which begs the question, why go to all the trouble to revamp the Notes client with 8.0 and then do so little for developers who develop applications that run on that client?&lt;br&gt;</content>
    </entry>
    <entry xml:lang="en-US">
        <id>http://www.bleedyellow.com/blogs/dotdomino/entry/domino_fraework_0_4_beta</id>
        <title type="html">.Domino Framework 0.4 (Beta) Released</title>
        <author><name>Peter Presnell</name><email>ktree19@yahoo.com</email></author>
        <link rel="alternate" type="text/html" href="http://www.bleedyellow.com/blogs/dotdomino/entry/domino_fraework_0_4_beta" />
        <published>2008-06-02T15:45:44-04:00</published>
        <updated>2008-06-03T11:07:23-04:00</updated> 
        <category term=".dominoframework" />
        <content type="html">&lt;p&gt;The next beta of the .Domino framework has now been released an &lt;a href="http://www.openntf.org/Projects/pmt.nsf/ProjectLookup/.Domino%20Framework"&gt;OpenNTF&lt;/a&gt;.&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;The features covered in this release include:-&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;A modified UI that incorporates&amp;nbsp;Web 2.0 Framesets&lt;/li&gt;
&lt;li&gt;Tools for handling conflict resolution&lt;/li&gt;
&lt;li&gt;Tools for managing document locking&lt;/li&gt;
&lt;li&gt;The start for adding an RSS Feed to an application&lt;/li&gt;
&lt;li&gt;A tool to add a watermark to design documents&lt;/li&gt;
&lt;li&gt;A large number of small improvements to the class libraries&lt;/li&gt;
&lt;li&gt;Further building out of the .Domino Framework Wiki&lt;/li&gt;&lt;/ol&gt;
&lt;p&gt;Note: This is still beta code and a lot mor\e work is required to fully test and fine tune the features already included.&lt;/p&gt;</content>
    </entry>
    <entry xml:lang="en-US">
        <id>http://www.bleedyellow.com/blogs/dotdomino/entry/document_locking_bug</id>
        <title type="html">Document Locking Bug</title>
        <author><name>Peter Presnell</name><email>ktree19@yahoo.com</email></author>
        <link rel="alternate" type="text/html" href="http://www.bleedyellow.com/blogs/dotdomino/entry/document_locking_bug" />
        <published>2008-05-29T18:53:52-04:00</published>
        <updated>2008-05-29T18:53:52-04:00</updated> 
        <category term=".dominoframework" />
        <category term="documentlocking" />
        <content type="html">&lt;p&gt;With Notes 6.0&amp;nbsp;there appears to be a bug with document locking in the scenario in which UserA is editing a document and UserB then attempts to edit the same document on another server while UserA is still editing the document.&amp;nbsp;When this happens UserB will be able to open the document but it will remain in read mode while UserA is editing the document.&amp;nbsp; When UserA has finished editing the document UserB can then place the document in edit mode.&amp;nbsp; The first time this is attempted a warning message is issued that USerB must re-open the document from the parent view and the document remains in Read mode.&amp;nbsp; If UserB ignores the message and again attempts to edit the document without reopening it from the parent view the document actually opens in edit mode.&amp;nbsp; If UserB then closes the document without making any changes, a lock is placed on the document by UserB that is not released after the document is closed.&amp;nbsp; This can lead to an accumulation of locked documents in the database.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;To solve this scenario I have extended the .DominoFramework as follows:-&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;A property has been added to the DominoDocument class that allows the detection of a document that is locked by somebody else:-&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;font color="#006600"&gt;Property Get IsLockedBySomeoneElse As Boolean&lt;br&gt;&amp;nbsp;&amp;nbsp;IsLockedBySomeoneElse = iDocument.LockHolders(0) &amp;lt;&amp;gt; &amp;quot;&amp;quot; And Isnull(Arraygetindex(iDocument.Lockholders,Session.UserName))&lt;br&gt;End Property&lt;/font&gt;&lt;/p&gt;
&lt;p&gt;&lt;font color="#006600"&gt;&lt;/font&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;font color="#000000"&gt;A new PreventEditIfLocked method can then be invoked by the&amp;nbsp;PostOpen event on the form.&amp;nbsp; This adds additional code to the QueryModeChange event to trap the scenario in which a locked document is subsequently placed in edit mode:-&lt;/font&gt;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;font color="#009900"&gt;&amp;nbsp;Sub PreventEditIfLocked(Source As NotesUIDocument)&lt;br&gt;&amp;nbsp;&amp;nbsp;If Me.IsLockedBySomeoneElse Then On Event QueryModeChange From Source Call Reload&lt;br&gt;&amp;nbsp;End Sub&lt;/font&gt;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;The Reload method that is now triggered by the OnQueryModeChange event then closes the document and&amp;nbsp;re-opens the document.&amp;nbsp; This is done via an agent as I was unable to find any other way of forcing the current document to be closed and the re-opened.&amp;nbsp; It was also necessary to unlock the document at this stage as it appears this is where the forgotten lock is enabled.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;S&lt;font color="#009900"&gt;ub Reload(Source As NotesUIDocument, Continue As Variant)&lt;br&gt;&amp;nbsp;&amp;nbsp;Dim&amp;nbsp;Agent&amp;nbsp;As NotesAgent&lt;br&gt;&amp;nbsp;&amp;nbsp;&lt;br&gt;&amp;nbsp;&amp;nbsp;On Error Resume Next&lt;br&gt;&amp;nbsp;&amp;nbsp;Call Source.Document.UnLock&lt;br&gt;&amp;nbsp;&amp;nbsp;Call Source.Close(True)&lt;br&gt;&amp;nbsp;&amp;nbsp;Set Agent = DB.GetAgent(&amp;quot;aReopenDocument&amp;quot&lt;img src="http://www.bleedyellow.com/blogs/images/smileys/wink.gif" class="smiley" alt=";)" title=";)" /&gt;&lt;br&gt;&amp;nbsp;&amp;nbsp;If Not Agent Is Nothing Then Call Agent.Run(iDocument.NoteID$)&lt;br&gt;&amp;nbsp;End Sub&lt;/font&gt;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;And finally, the agent to open the document is as follows:-&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;font color="#009900"&gt;Sub Initialize&lt;br&gt;&amp;nbsp;Dim&amp;nbsp;Session&amp;nbsp;As New NotesSession&lt;br&gt;&amp;nbsp;Dim&amp;nbsp;UIW&amp;nbsp;&amp;nbsp;&amp;nbsp;As NotesUIWorkspace&lt;br&gt;&amp;nbsp;Dim&amp;nbsp;Agent&amp;nbsp;&amp;nbsp;As NotesAgent&lt;br&gt;&amp;nbsp;Dim&amp;nbsp;Doc&amp;nbsp;&amp;nbsp;&amp;nbsp;As NotesDocument&lt;br&gt;&amp;nbsp;&lt;br&gt;&amp;nbsp;If Session.IsOnServer Then Exit Sub&lt;br&gt;&amp;nbsp;Set Agent = Session.CurrentAgent&lt;br&gt;&amp;nbsp;Set Doc = Session.CurrentDatabase.GetDocumentByID(Agent.ParameterDocID$)&lt;br&gt;&amp;nbsp;If Doc Is Nothing Then Exit Sub&lt;br&gt;&amp;nbsp;Set UIW = New NotesUIworkspace&lt;br&gt;&amp;nbsp;Call UIW.EditDocument(True,Doc,,,False)&lt;br&gt;&amp;nbsp;&lt;br&gt;End Sub&lt;/font&gt;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;All of the above code will be included as part of the 0.4 beta of the .Domino Framework planned for this weekend.&lt;/p&gt;</content>
    </entry>
    <entry xml:lang="en-US">
        <id>http://www.bleedyellow.com/blogs/dotdomino/entry/removing_duplicates</id>
        <title type="html">Removing Duplicates</title>
        <author><name>Peter Presnell</name><email>ktree19@yahoo.com</email></author>
        <link rel="alternate" type="text/html" href="http://www.bleedyellow.com/blogs/dotdomino/entry/removing_duplicates" />
        <published>2008-05-28T13:48:14-04:00</published>
        <updated>2008-05-28T13:48:14-04:00</updated> 
        <category term=".dominoframework" />
        <category term="duplicates" />
        <content type="html">&lt;p&gt;Today I had an application in development in which an &amp;nbsp;LEI Activitiy was somehow creating a small number of duplicate records.&amp;nbsp; Rather than try to figure out why LEI was creating duplicates I chose to simply create an agent to delete the duplicates.&amp;nbsp; I have extended the .Domino Framework to add a RemoveDuplicates method for the DominoView class.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;To Make this work:-&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;Create a view that sorts documents by the &amp;quot;key&amp;quot; with the key being in a column (for partial keys concatenate the values).&lt;/li&gt;
&lt;li&gt;(Optional) add a second columns that sorts the documents in such a way that the duplicate to be retained is at the top (e.g. creation date)&lt;/li&gt;
&lt;li&gt;Invoke the method using an action button on the view, and agent (manual or scheduled).&lt;/li&gt;&lt;/ol&gt;
&lt;p&gt;The methods created takes a column number as a parameter for the column containing the key anbd returns a count of the number of duplicates removed.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;font color="#009900"&gt;'/**&lt;br&gt;&amp;nbsp;' * &amp;nbsp;Remove all duplicate entries in view by retaining the first entry listed for each duplicate value&lt;br&gt;&amp;nbsp;' *&lt;br&gt;&amp;nbsp;' * @param&amp;nbsp;ColumnPos&amp;nbsp;The column number to be used to identify the unique values&lt;br&gt;&amp;nbsp;' * @return&amp;nbsp;&amp;nbsp;The number of documents deleted from the view&lt;br&gt;&amp;nbsp;' */&lt;br&gt;&amp;nbsp;Function RemoveDuplicates(ColumnPos As Integer) As Long&lt;br&gt;&amp;nbsp;&amp;nbsp;Dim&amp;nbsp;AllEntries&amp;nbsp;&amp;nbsp;&amp;nbsp;As NotesViewEntryCollection&lt;br&gt;&amp;nbsp;&amp;nbsp;Dim&amp;nbsp;Doc&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;As NotesViewEntry&lt;br&gt;&amp;nbsp;&amp;nbsp;Dim&amp;nbsp;LastDoc&amp;nbsp;&amp;nbsp;&amp;nbsp;As NotesViewEntry&lt;br&gt;&amp;nbsp;&amp;nbsp;Dim&amp;nbsp;NextDoc&amp;nbsp;&amp;nbsp;&amp;nbsp;As NotesViewEntry&lt;br&gt;&amp;nbsp;&amp;nbsp;&lt;br&gt;&amp;nbsp;&amp;nbsp;If iView Is Nothing Then Exit Function&lt;br&gt;&amp;nbsp;&amp;nbsp;Set AllEntries = iView.AllEntries&amp;nbsp;&lt;br&gt;&amp;nbsp;&amp;nbsp;Set LastDoc = AllEntries.GetFirstEntry&lt;br&gt;&amp;nbsp;&amp;nbsp;Set Doc = AllEntries.GetNthEntry(2)&lt;br&gt;&amp;nbsp;&amp;nbsp;While Not Doc Is Nothing&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;Set NextDoc = AllEntries.GetNextEntry(Doc)&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;If Doc.ColumnValues(ColumnPos%) = LastDoc.ColumnValues(ColumnPos%) Then&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;RemoveDuplicates = RemoveDuplicates + 1&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;Call Doc.Document.Remove(True)&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;Else&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;Set LastDoc = Doc&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;End If&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;Set Doc = NextDoc&lt;br&gt;&amp;nbsp;&amp;nbsp;Wend&lt;br&gt;&amp;nbsp;End Function&lt;/font&gt;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;View Action:&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;font color="#009900"&gt;Sub Click(Source As Button)&lt;br&gt;&amp;nbsp;Dim Count As Long&lt;br&gt;&amp;nbsp;Count&amp;amp; = View.RemoveDuplicates(0)&lt;br&gt;&amp;nbsp;If Count&amp;amp; &amp;gt; 0 Then&lt;br&gt;&amp;nbsp;&amp;nbsp;Msgbox Cstr(Count&amp;amp&lt;img src="http://www.bleedyellow.com/blogs/images/smileys/wink.gif" class="smiley" alt=";)" title=";)" /&gt; + &amp;quot; duplicate documents deleted&amp;quot;,MB_OK+MB_ICONINFORMATION&lt;br&gt;&amp;nbsp;Else&lt;br&gt;&amp;nbsp;&amp;nbsp;Msgbox &amp;quot;No duplicates found&amp;quot;,MB_OK+MB_ICONINFORMATION&lt;br&gt;&amp;nbsp;End If&lt;br&gt;End Sub&lt;/font&gt;&lt;/p&gt;</content>
    </entry>
    <entry xml:lang="en-US">
        <id>http://www.bleedyellow.com/blogs/dotdomino/entry/ods_48_and_unfiled_documents</id>
        <title type="html">ODS 48 And Unfiled Documents</title>
        <author><name>Peter Presnell</name><email>ktree19@yahoo.com</email></author>
        <link rel="alternate" type="text/html" href="http://www.bleedyellow.com/blogs/dotdomino/entry/ods_48_and_unfiled_documents" />
        <published>2008-05-19T16:20:22-04:00</published>
        <updated>2008-05-19T16:20:22-04:00</updated> 
        <category term="domino8" />
        <content type="html">&lt;p&gt;This is an FYI for those currently in the process of migrating to Domino 8.0/8.0.1.....&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;One of my clients is migrating from 7.0 to 8.0.1.&amp;nbsp; They have customized their mail template to include a view that displays documents not filed in any folders.&amp;nbsp; This view uses the&amp;nbsp;special view type &amp;quot;Shared, contains documents not in any folders&amp;quot;.&amp;nbsp; It was found that when a user's mail database was upgraded to the lated ODS (48), this view would no longer work.&amp;nbsp; The view simply does not display inside the mail database and the Domino server reports error trying to process the view.&amp;nbsp; For now we have held off on upgrading mail files to ODS 48 pending a solution to the issue.&lt;/p&gt;</content>
    </entry>
    <entry xml:lang="en-US">
        <id>http://www.bleedyellow.com/blogs/dotdomino/entry/document_locking</id>
        <title type="html">Document Locking</title>
        <author><name>Peter Presnell</name><email>ktree19@yahoo.com</email></author>
        <link rel="alternate" type="text/html" href="http://www.bleedyellow.com/blogs/dotdomino/entry/document_locking" />
        <published>2008-05-19T16:11:57-04:00</published>
        <updated>2008-05-29T19:00:56-04:00</updated> 
        <category term="documentlocking" />
        <category term=".dominoframework" />
        <content type="html">&lt;p&gt;&amp;nbsp;One of the projects I am presently working on involves enabling document locking for an application using the Document Locking feature introduced with Notes 6.0.&amp;nbsp;&amp;nbsp;I had done this before with Notes 6.0 and recall there are issues with documents sometimes remaining locked even after the user has finished editing the document.&amp;nbsp; And sure enough, when we started UAT we got reports of document being locked even though no-one was still editing the document.&amp;nbsp; As part of the process for resolving this I have added Document Locking as a new feature within the .Domino Framework.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;A new view ($Locked) has been created as a way of clearly displaying those documents that are presenty locked (i.e. the $Writers fields is present).&lt;/p&gt;
&lt;p&gt;I have added a view action to remove the lock by deleteing the $Writers and $WritersDate field from the document .&amp;nbsp; This allows people without Manager access to maintain the locks.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;Testing done so far has shown that when the lock fails to be removed,&amp;nbsp; the $writers field is present but the $WritersDate field is not present.&amp;nbsp; I have therefore added a RemoveInvalidLocks method to the DominoDatabase class that will remove any document in the ($Locked) view for which this situation arises.&amp;nbsp; By creating an agent the runs periodically against the database invoking this method it is possible to locate and correct these issues as they occur.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;Note: Further testing is still required to ensure that only invalid locks are being removed and that this technique is identifying all the document locks that persist after they are no longer needed....&lt;/p&gt;</content>
    </entry>
    <entry xml:lang="en-US">
        <id>http://www.bleedyellow.com/blogs/dotdomino/entry/replication_and_merging</id>
        <title type="html">Replication And Merging</title>
        <author><name>Peter Presnell</name><email>ktree19@yahoo.com</email></author>
        <link rel="alternate" type="text/html" href="http://www.bleedyellow.com/blogs/dotdomino/entry/replication_and_merging" />
        <published>2008-05-14T13:17:44-04:00</published>
        <updated>2008-05-14T13:17:44-04:00</updated> 
        <category term="replication" />
        <content type="html">&lt;p&gt;Today I was testing an application&amp;nbsp;to make sure that changes made to ensure replication merged changes&amp;nbsp;at the field level rather than the default document level.&amp;nbsp; To do this we set up replicas on two different dev servers.&amp;nbsp; Because the two servers do not normally repolicate with each other (and because we didn't want to wait that long) I decided to replicate the databases manually from my workstation.&amp;nbsp; When I did, I found that the documents did not merge changes at the field level but at the document level.&amp;nbsp; My initial thoughts were that there was a problem with the field level merging.&amp;nbsp; Later we figured out a way to get the servers to do the replication.&amp;nbsp; When the servers initiated the replication the field level merging took place as intended.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;It would appear that replication that is initiated from the Notes client (Notes 6.0) does not perform field level replication.&amp;nbsp; I need to do some further tests to confirm this, but obvioulsy I need to be careful when I use my workstation to replicate databases as this may very well result in a different outcome for applications designed to merge changes at the field level...&amp;nbsp; Yikes&lt;/p&gt;</content>
    </entry>
    <entry xml:lang="en-US">
        <id>http://www.bleedyellow.com/blogs/dotdomino/entry/adding_an_rss_feed_to</id>
        <title type="html">Adding an RSS Feed To A Notes Application</title>
        <author><name>Peter Presnell</name><email>ktree19@yahoo.com</email></author>
        <link rel="alternate" type="text/html" href="http://www.bleedyellow.com/blogs/dotdomino/entry/adding_an_rss_feed_to" />
        <published>2008-05-12T16:15:39-04:00</published>
        <updated>2008-05-12T16:20:48-04:00</updated> 
        <category term=".dominoframework" />
        <category term="rss" />
        <content type="html">&lt;p&gt;On of my challenges for last week was to find an easy way to add an RSS feed to a Notes application.&amp;nbsp; After doing some research on the topic I found that the XML required for an RSS feed is fairly simple and there were already a number of excellent examples out there within the Notes community.&amp;nbsp; In the spirit of the .Domino Framework I wanted a generic solution which could easily applied to multiple applications.&amp;nbsp; In the end I based some of my my code on the &lt;a href="http://www.openntf.org/Projects/pmt.nsf/ProjectLookup/BlogSphere%20V3"&gt;OpenNTF Blogsphere &lt;/a&gt;(thanks Declan).&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;I have created a new DominoRSS Feed class.&amp;nbsp; This is intented to be part of a new Domino.Applications.RSS namespace but I have been having&amp;nbsp; technical problems getting the same code to run as a Web agent when placed in a LotusScript library.&amp;nbsp; So, for now, the class definition is included as part of the agent.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;A new agent has been developed with an alias of &lt;strong&gt;content.rss&lt;/strong&gt; that invokes various methods/properties in the class to generate the necessary XML.&amp;nbsp; The code for the agent is as follows:-&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;font color="#009900"&gt;Sub Initialize&lt;br&gt;&amp;nbsp;Dim&amp;nbsp;RSSEngine&amp;nbsp;As DominoRSSFeed&lt;br&gt;&amp;nbsp;&lt;br&gt;&amp;nbsp;Set RSSEngine = New DominoRSSFeed(Nothing)&lt;br&gt;&amp;nbsp;RSSEngine.NotesLinks = True&lt;br&gt;&amp;nbsp;Call RSSEngine.GenerateHeader&lt;br&gt;&amp;nbsp;Call RSSEngine.GenerateViewContent(&amp;quot;($RSS)&amp;quot;,0)&lt;br&gt;&amp;nbsp;Call RSSEngine.GenerateFooter&lt;br&gt;&amp;nbsp;Call RSSEngine.WriteXML&lt;br&gt;End Sub&lt;/font&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;The NotesLinks property is used to determine if the RSS Feed should publish links using http protocol (default) or Notes protocol.&amp;nbsp; In my case I wanted the documents to launch in the Notes client as the source application is not Web-enabled.&lt;/li&gt;
&lt;li&gt;The GenerateHeader method creates the initial XML for the feed/channel&lt;/li&gt;
&lt;li&gt;The GeneratViewContent method creates the XML for the feed based upon the contents of the provided view.&amp;nbsp; The view can be any view with the programatic column name for each column used to create XML elements.&amp;nbsp; Use any of the available RSS feed attributes such as &amp;quot;title&amp;quot;, &amp;quot;description&amp;quot;,&amp;quot;author&amp;quot;,&amp;quot;pubDate&amp;quot; to map the view content to the RSS feed.&lt;/li&gt;
&lt;li&gt;The GenerateFooter method creates the closing XML&lt;/li&gt;
&lt;li&gt;The WriteXML&amp;nbsp;method takes the XML held internally within a NotesStream and writes it back to the screen.&lt;/li&gt;&lt;/ul&gt;
&lt;p&gt;I can now make any application&amp;nbsp;RSS enabled by simply adding the agent (with the DominoRSSFeed Class) and having a view that meets the requirements above.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;Note: The code for the class will be published as part of the next beta of the .Domino Framework later this month.&amp;nbsp; .Domino Framework wiki will&amp;nbsp;provide documentation on the RSS Feed XML.&amp;nbsp;&amp;nbsp; I will also be working on an enhancement to define various RSS attributes (e.g. Description) as part of the Application Settings.&lt;/p&gt;</content>
    </entry>
    <entry xml:lang="en-US">
        <id>http://www.bleedyellow.com/blogs/dotdomino/entry/universal_time</id>
        <title type="html">Universal Time</title>
        <author><name>Peter Presnell</name><email>ktree19@yahoo.com</email></author>
        <link rel="alternate" type="text/html" href="http://www.bleedyellow.com/blogs/dotdomino/entry/universal_time" />
        <published>2008-05-09T14:17:09-04:00</published>
        <updated>2008-05-09T14:18:10-04:00</updated> 
        <category term=".dominoframework" />
        <content type="html">&lt;p&gt;The following property has been added to the DominoDateTime class to allow a date/time value to be represented in a format consistent with ISO 8601's Universal Time (UTC).&amp;nbsp; This will be available as part of beta 0.4 later coming this month.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;font color="#009900"&gt;'/**&lt;br&gt;&amp;nbsp;' * ISO Coordinated Universal Time (UTC) format for date&lt;br&gt;&amp;nbsp;' */&amp;nbsp;&amp;nbsp;&lt;br&gt;&amp;nbsp;Property Get UTC As String&lt;br&gt;&amp;nbsp;&amp;nbsp;&lt;br&gt;&amp;nbsp;&amp;nbsp;Dim UTCDayName&amp;nbsp;As String&lt;br&gt;&amp;nbsp;&amp;nbsp;Dim UTCDay&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;As String&lt;br&gt;&amp;nbsp;&amp;nbsp;Dim UTCMonth&amp;nbsp;&amp;nbsp;&amp;nbsp;As String&lt;br&gt;&amp;nbsp;&amp;nbsp;Dim UTCYear&amp;nbsp;&amp;nbsp;&amp;nbsp;As String&lt;br&gt;&amp;nbsp;&amp;nbsp;Dim UTCTime&amp;nbsp;&amp;nbsp;&amp;nbsp;As String&lt;br&gt;&amp;nbsp;&amp;nbsp;Dim UTCSign&amp;nbsp;&amp;nbsp;&amp;nbsp;As String&lt;br&gt;&amp;nbsp;&amp;nbsp;Dim UTCZone&amp;nbsp;&amp;nbsp;&amp;nbsp;As String&lt;br&gt;&amp;nbsp;&amp;nbsp;&lt;br&gt;&amp;nbsp;&amp;nbsp;If iDate Is Nothing Then Exit Property&lt;br&gt;&amp;nbsp;&amp;nbsp;&lt;br&gt;&amp;nbsp;&amp;nbsp;UTCDayName$ = Format$(iDate.LSLocalTime, &amp;quot;ddd&amp;quot&lt;img src="http://www.bleedyellow.com/blogs/images/smileys/wink.gif" class="smiley" alt=";)" title=";)" /&gt;&lt;br&gt;&amp;nbsp;&amp;nbsp;UTCDay$= Format$(iDate.LSLocalTime, &amp;quot;dd&amp;quot&lt;img src="http://www.bleedyellow.com/blogs/images/smileys/wink.gif" class="smiley" alt=";)" title=";)" /&gt;&lt;br&gt;&amp;nbsp;&amp;nbsp;UTCMonth$ = Format$(iDate.LSLocalTime, &amp;quot;mmm&amp;quot&lt;img src="http://www.bleedyellow.com/blogs/images/smileys/wink.gif" class="smiley" alt=";)" title=";)" /&gt;&lt;br&gt;&amp;nbsp;&amp;nbsp;UTCYear$ = Format$(iDate.LSLocalTime, &amp;quot;yyyy&amp;quot&lt;img src="http://www.bleedyellow.com/blogs/images/smileys/wink.gif" class="smiley" alt=";)" title=";)" /&gt;&lt;br&gt;&amp;nbsp;&amp;nbsp;UTCTime$ = Format$(iDate.LSLocalTime, &amp;quot;hh:nn:ss&amp;quot&lt;img src="http://www.bleedyellow.com/blogs/images/smileys/wink.gif" class="smiley" alt=";)" title=";)" /&gt;&lt;br&gt;&amp;nbsp;&amp;nbsp;If Sgn(iDate.TimeZone) &amp;lt; 0 Then UTCSign$ = &amp;quot;-&amp;quot; Else UTCSign$ = &amp;quot;+&amp;quot;&lt;br&gt;&amp;nbsp;&amp;nbsp;If iDate.TimeZone &amp;lt; 10 Then UTCZone$ = &amp;quot;0&amp;quot; + Cstr(Abs(iDate.TimeZone)) Else UTCZone$ = Cstr(Abs(iDate.TimeZone))&lt;br&gt;&amp;nbsp;&amp;nbsp;UTCZone$ = UTCSign$ + UTCZone$ + &amp;quot;00&amp;quot;&lt;br&gt;&amp;nbsp;&amp;nbsp;UTC$ = UTCDayName$ + &amp;quot;, &amp;quot; + UTCDay$ + &amp;quot; &amp;quot; +UTCMonth$+ &amp;quot; &amp;quot; +UTCYear$ + &amp;quot; &amp;quot; +UTCTime$ + &amp;quot; &amp;quot; + UTCZone$ &lt;br&gt;&amp;nbsp;&amp;nbsp;&lt;br&gt;&amp;nbsp;End Property&lt;/font&gt;&lt;/p&gt;</content>
    </entry>
    <entry xml:lang="en-US">
        <id>http://www.bleedyellow.com/blogs/dotdomino/entry/programming_events_in_both_language</id>
        <title type="html">Programming Events In both @Language and LotusScript</title>
        <author><name>Peter Presnell</name><email>ktree19@yahoo.com</email></author>
        <link rel="alternate" type="text/html" href="http://www.bleedyellow.com/blogs/dotdomino/entry/programming_events_in_both_language" />
        <published>2008-05-08T16:04:05-04:00</published>
        <updated>2008-05-08T16:21:26-04:00</updated> 
        <category term=".dominoframework" />
        <content type="html">&lt;p&gt;Have you ever wished it was possible to program an event such as QuerySave in both @Language and LotusScript?&amp;nbsp; Sometimes&amp;nbsp;the most efficient (or only) way to perform a specific&amp;nbsp;task is to&amp;nbsp;code the event using @Formula and @Commands.&amp;nbsp; That works fine until a request comes along in which LotusScript is the only solution.&amp;nbsp; Using Evaluate within LotusScript&amp;nbsp; can sometimes be a solution but there is another way to achieve this.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;1) Create a class &lt;/p&gt;
&lt;p&gt;2) In the constructor for the class create an event handler for the event&amp;nbsp;and set it to invoke a sub of that class&lt;/p&gt;
&lt;p&gt;3) Create the method using the same signature as the event with the LotusScript code and put all the LotusScript code in there&lt;/p&gt;
&lt;p&gt;4) In the QueryOpen event create an instance of the class passing the NotesUI object (this can be any event invoked prior to the called event - QueryOpen is usually the first and is usually the best)&lt;/p&gt;
&lt;p&gt;5) Place the @Language component in the actual event on the form/page.view&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;When the event is fired the @Language coded in the the actual event will be executed and then the eventhandler coded in the class will be executed....&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;&lt;font color="#3333ff"&gt;Form example:&lt;/font&gt;&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;font color="#009900"&gt;Class MyClass&lt;/font&gt;&lt;/p&gt;
&lt;p&gt;&lt;font color="#009900"&gt;&amp;nbsp; Sub New(Source As NotuesUIDocument)&lt;/font&gt;&lt;/p&gt;
&lt;p&gt;&lt;font color="#009900"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; On Event QuerySave From Source Call OnQuerySaave&lt;/font&gt;&lt;/p&gt;
&lt;p&gt;&lt;font color="#009900"&gt;&amp;nbsp; End Sub&lt;/font&gt;&lt;/p&gt;
&lt;p&gt;&lt;font color="#009900"&gt;&amp;nbsp; &lt;/font&gt;&lt;/p&gt;
&lt;p&gt;&lt;font color="#009900"&gt;&amp;nbsp; Sub OnQuerySave(Source as NotesUIDocument,Continue As Variant)&lt;/font&gt;&lt;/p&gt;
&lt;p&gt;&lt;font color="#009900"&gt;&amp;nbsp; ' Place all LS QuerySave code here&lt;/font&gt;&lt;/p&gt;
&lt;p&gt;&lt;font color="#009900"&gt;&amp;nbsp; End Sub&lt;/font&gt;&lt;/p&gt;
&lt;p&gt;&lt;font color="#009900"&gt;End Class&lt;/font&gt;&lt;/p&gt;
&lt;p&gt;&lt;font color="#009900"&gt;&lt;/font&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;font color="#009900"&gt;Dim Var As MyClass&lt;/font&gt;&lt;/p&gt;
&lt;p&gt;&lt;font color="#009900"&gt;&lt;/font&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;font color="#009900"&gt;Sub QueryOpen(Source As NotesUIDocument)&lt;/font&gt;&lt;/p&gt;
&lt;p&gt;&lt;font color="#009900"&gt;&amp;nbsp; Set Var = New MyClass(Source)&lt;/font&gt;&lt;/p&gt;
&lt;p&gt;&lt;font color="#009900"&gt;End Sub&lt;/font&gt;&lt;/p&gt;</content>
    </entry>
</feed>
