<?xml version="1.0" encoding="utf-8" ?>
<rss version="2.0"
 xmlns:dc="http://purl.org/dc/elements/1.1/"
 xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
 xmlns:admin="http://webns.net/mvcb/"
 xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
 xmlns:content="http://purl.org/rss/1.0/modules/content/"
 xmlns:wfw="http://wellformedweb.org/CommentAPI/"
xmlns:slash="http://purl.org/rss/1.0/modules/slash/">
<channel>
<title>Lord Lotus Blog - Category : Notes Development</title>
<description>Lord Lotus Blog - Category : Notes Development</description>
<lastBuildDate>Wed, 10 Feb 2010 10:00:29 -0400</lastBuildDate>
<link>http://ww2.nutechs.com/hosting/msobczak/Blogs/BlogSphere-1_0_2/LordLotusBlog.nsf</link>
<item><title>Show single category view and outline issue</title><link>http://ww2.nutechs.com/hosting/msobczak/Blogs/BlogSphere-1_0_2/LordLotusBlog.nsf/d6plinks/MSOK-82JKLU</link><description><![CDATA[ I set up a Notes database with a frameset containing the typical outline navigation frame on the left and a view frame on the right.  I designed the frameset so that the first design element that is opened is a form with an embedded view with a show single ...]]></description><dc:subject>Notes Development</dc:subject><dc:creator>Mike Sobczak</dc:creator><comments>http://ww2.nutechs.com/hosting/msobczak/Blogs/BlogSphere-1_0_2/LordLotusBlog.nsf/d6plinks/MSOK-82JKLU</comments><guid isPermaLink="true">http://ww2.nutechs.com/hosting/msobczak/Blogs/BlogSphere-1_0_2/LordLotusBlog.nsf/d6plinks/MSOK-82JKLU</guid><content:encoded><![CDATA[ I set up a Notes database with a frameset containing the typical outline navigation frame on the left and a view frame on the right.  I designed the frameset so that the first design element that is opened is a form with an embedded view with a show single category formula.  The show single category formula restricts the documents displayed to those for the current user.  This all works fine.
<br><br>
However, I can't get the embedded outline to highlight the form that is being displayed in the view pane when the database is <u>first opened</u>.  The embedded outline will highlight the form as selected when I click on the entry for it, but not when I first open the database.  I tried changing the form to a page, but I get the same behavior.  I also tried changing the embedded view to be the default view for the databas.  Nothing doing.  It seems like an embedded outline will only automatically highlight an entry if its for a view.
<br><br>
Am I missing something?  Or have I just forgotten the quirks with embedded outlines?]]></content:encoded><pubDate>Wed, 10 Feb 2010 10:00:29 -0400</pubDate><slash:comments>1</slash:comments><wfw:commentRss>http://ww2.nutechs.com/hosting/msobczak/Blogs/BlogSphere-1_0_2/LordLotusBlog.nsf/CommentsRSS?Open&amp;id=0BCFDDEBB81D095F852576C60052712E</wfw:commentRss><wfw:comment>http://ww2.nutechs.com/hosting/msobczak/Blogs/BlogSphere-1_0_2/LordLotusBlog.nsf/PostComment?RunAgent&amp;id=0BCFDDEBB81D095F852576C60052712E</wfw:comment></item><item><title>Do my eyes deceive me?  8.5 FP1 fixes issue with Shared Actions</title><pubDate>Wed, 26 Aug 2009 13:18:30 -0400</pubDate><description><![CDATA[ One problem I've had with DDE 8.5 is that I could not copy an Action in a form and paste it into Shared Actions.&nbsp; I work on a lot of older databases and replacing redundant actions with shared actions is one of the cleanup tasks I do.
Well, now with DDE ...]]></description><link>http://ww2.nutechs.com/hosting/msobczak/Blogs/BlogSphere-1_0_2/LordLotusBlog.nsf/d6plinks/DOMO-7VAN9H</link><category>Notes Development</category><dc:creator>Mike Sobczak</dc:creator><comments>http://ww2.nutechs.com/hosting/msobczak/Blogs/BlogSphere-1_0_2/LordLotusBlog.nsf/d6plinks/DOMO-7VAN9H</comments><guid isPermaLink="true">http://ww2.nutechs.com/hosting/msobczak/Blogs/BlogSphere-1_0_2/LordLotusBlog.nsf/d6plinks/DOMO-7VAN9H</guid><content:encoded><![CDATA[ <p>One problem I've had with DDE 8.5 is that I could not copy an Action in a form and paste it into Shared Actions.&nbsp; I work on a lot of older databases and replacing redundant actions with shared actions is one of the cleanup tasks I do.</p>
<p>Well, now with DDE 8.5 FP1, I can do this again.&nbsp; Woot!</p>]]></content:encoded><wfw:commentRss>http://ww2.nutechs.com/hosting/msobczak/Blogs/BlogSphere-1_0_2/LordLotusBlog.nsf/CommentsRSS?Open&amp;id=A8AC06B377937C978525761E005F13FB</wfw:commentRss><wfw:comment>http://ww2.nutechs.com/hosting/msobczak/Blogs/BlogSphere-1_0_2/LordLotusBlog.nsf/PostComment?RunAgent&amp;id=A8AC06B377937C978525761E005F13FB</wfw:comment></item><item><title>Load testing a Lotus Notes application</title><link>http://ww2.nutechs.com/hosting/msobczak/Blogs/BlogSphere-1_0_2/LordLotusBlog.nsf/d6plinks/DOMO-7BMTVP</link><description><![CDATA[ A friend of mine asked me if there are any products that can be used to load test a Lotus Notes application.&nbsp; This application is only accessed using a Notes client.&nbsp; She'd like to use something like HP LoadRunner or tools that load test web ...]]></description><dc:subject>Notes Development</dc:subject><dc:creator>Mike Sobczak</dc:creator><comments>http://ww2.nutechs.com/hosting/msobczak/Blogs/BlogSphere-1_0_2/LordLotusBlog.nsf/d6plinks/DOMO-7BMTVP</comments><guid isPermaLink="true">http://ww2.nutechs.com/hosting/msobczak/Blogs/BlogSphere-1_0_2/LordLotusBlog.nsf/d6plinks/DOMO-7BMTVP</guid><content:encoded><![CDATA[ A friend of mine asked me if there are any products that can be used to load test a Lotus Notes application.&nbsp; This application is only accessed using a Notes client.&nbsp; She'd like to use something like <a href="https://h10078.www1.hp.com/cda/hpms/display/main/hpms_content.jsp?zn=bto&amp;cp=1-11-126-17^8_4000_100__" target="_blank">HP LoadRunner</a> or tools that load test web sites.&nbsp; Does anyone out there know of something besides the following products:<br/>
<ul>
    <li>Teamstudio <a href="http://www.teamstudio.com/solutions/profiler-spotlight.html" target="_blank">Profiler</a></li>
    <li>BinaryTree's <a href="http://www.binarytree.com/website/msg/home.nsf/vContentW/0F21EE8C69174846862572C1006A6072" target="_blank">CMT Inspector</a></li>
    <li>Technovations <a href="http://www.technovations.com/grpsizr.htm" target="_blank">GroupSizr</a></li>
</ul>
Or, if you've used any of the above tools and found that they satisfied your load testing requirements, please let me know.]]></content:encoded><pubDate>Fri, 8 Feb 2008 17:11:55 -0400</pubDate><slash:comments>1</slash:comments><wfw:commentRss>http://ww2.nutechs.com/hosting/msobczak/Blogs/BlogSphere-1_0_2/LordLotusBlog.nsf/CommentsRSS?Open&amp;id=61753EBE475E05FB852573E90079F103</wfw:commentRss><wfw:comment>http://ww2.nutechs.com/hosting/msobczak/Blogs/BlogSphere-1_0_2/LordLotusBlog.nsf/PostComment?RunAgent&amp;id=61753EBE475E05FB852573E90079F103</wfw:comment></item><item><title>R4 tabbed table technique causing problems</title><link>http://ww2.nutechs.com/hosting/msobczak/Blogs/BlogSphere-1_0_2/LordLotusBlog.nsf/d6plinks/DOMO-73YRGE</link><description><![CDATA[ Way back in 1998, David Kochan wrote an article about how you can use environment variables and hide/when formulas to mimic a tabbed table interface in a form.&nbsp; (I call the technique &quot;pseudo tabs&quot;.)&nbsp; While I never used this technique, ...]]></description><dc:subject>Notes Development</dc:subject><dc:creator>Mike Sobczak</dc:creator><comments>http://ww2.nutechs.com/hosting/msobczak/Blogs/BlogSphere-1_0_2/LordLotusBlog.nsf/d6plinks/DOMO-73YRGE</comments><guid isPermaLink="true">http://ww2.nutechs.com/hosting/msobczak/Blogs/BlogSphere-1_0_2/LordLotusBlog.nsf/d6plinks/DOMO-73YRGE</guid><content:encoded><![CDATA[ <p>Way back in 1998, David Kochan wrote an <a href="http://zones.advisor.com/doc/01842" target="_blank">article</a> about how you can use environment variables and hide/when formulas to mimic a tabbed table interface in a form.&nbsp; (I call the technique &quot;pseudo tabs&quot;.)&nbsp; While I never used this technique, other developers used it to provide a nice UI for clients where only Notes 4 was available.</p>
<br/>
<p>At my current company, this technique was used in several high-profile applications.&nbsp; It seemed to work fine until we migrated to Notes 6.5 in 2005.&nbsp; Now, users call us occassionally stating that rich text fields that were being hidden or displayed via the pseudo-tabs are now either appearing when they shouldn't be, or are disappearing alltogether.</p>
<br/>
<p>All I want to do at this point is replace the pseudo-tabs with regular tabbed tables.&nbsp; Unfortunately, the rich text fields where the hide/when formulas are out-of-whack won't magically reappear in the tabbed table.</p>
<br/>
<p>From what I can see in the Domino Object Model, there doesn't appear to be a way to clear out hide/when formulas in rich text fields.&nbsp; Has anyone&nbsp;out there found a way to programmatically clear hide/when formulas in existing rich text fields?</p>]]></content:encoded><pubDate>Fri, 8 Jun 2007 16:10:58 -0400</pubDate><slash:comments>3</slash:comments><wfw:commentRss>http://ww2.nutechs.com/hosting/msobczak/Blogs/BlogSphere-1_0_2/LordLotusBlog.nsf/CommentsRSS?Open&amp;id=5C877415C640FC88852572F4006ECADA</wfw:commentRss><wfw:comment>http://ww2.nutechs.com/hosting/msobczak/Blogs/BlogSphere-1_0_2/LordLotusBlog.nsf/PostComment?RunAgent&amp;id=5C877415C640FC88852572F4006ECADA</wfw:comment></item><item><title>Punk'd by corrupt fields</title><link>http://ww2.nutechs.com/hosting/msobczak/Blogs/BlogSphere-1_0_2/LordLotusBlog.nsf/d6plinks/MSOK-6PVGM8</link><description><![CDATA[ An application I enhanced is currently undergoing peer testing.  Peer testing is when a member of your immediate team tests your application according to test scripts (or cases) you've written.  (This is probably equivalent to System testing.)  

One ...]]></description><dc:subject>Notes Development</dc:subject><dc:creator>Michael Sobczak</dc:creator><comments>http://ww2.nutechs.com/hosting/msobczak/Blogs/BlogSphere-1_0_2/LordLotusBlog.nsf/d6plinks/MSOK-6PVGM8</comments><guid isPermaLink="true">http://ww2.nutechs.com/hosting/msobczak/Blogs/BlogSphere-1_0_2/LordLotusBlog.nsf/d6plinks/MSOK-6PVGM8</guid><content:encoded><![CDATA[ An application I enhanced is currently undergoing peer testing.  Peer testing is when a member of your immediate team tests your application according to test scripts (or cases) you've written.  (This is probably equivalent to System testing.)  

One problem my peer experienced involved a scheduled agent that sends out e-mail notifications for documents where the date value in a specific field is the same as the current date (or today's date).  The agent references a hidden view that only includes documents that meet this criteria:
<br><br>
SELECT Form = "Customer" & RiskExp = @Today
<br><br>
The agent ran successfully, but did not send out a notification for several documents that met the selection criteria.  When I checked the agent logs generated by my agent, I found that the agent did not find any documents in the hidden view to process.  This was interesting as there were several documents where the RiskExp field value was equal to today.  When I opened up the hidden view in the Notes client, no documents were being displayed.
<br><br>
At first, I thought that there was something wrong with my selection formula.  So, I changed it several times, using these variations:
<br><br>
SELECT Form = "Customer" & ( RiskExp = @Today )
<br><br>
SELECT Form = "Customer" & ( @Date ( RiskExp ) = @Today )
<br><br>
SELECT Form = "Customer" & ( @Date ( RiskExp ) = @Date ( @Today ) )
<br><br>
Nothing doing.  The view would still not display the documents.  I used SHIFT + F9 to rebuild all view indexes, but the documents still wouldn't show up.
<br><br>
Next, I verified that the RiskExp field was a date/time value for the documents, and it was.  There also wasn't multiple RiskExp fields in the documents, either.  I also opened the documents in the Notes client, and the form associated with the document displayed the field value no problem.
<br><br>
I then changed the hidden view to include all documents where RiskExp wasn't null (or ""), and added a column to display the RiskExp field.  The view correctly displayed the field values in the column.  At this point, I figured there was some sort of field-level corruption going on.  The field was in the Notes document, could be displayed in a form and a view column, but couldn't be referenced by a view selection formula.  I've experienced similarly strange problems like this at my current job before, probably due to the fact that we upgraded from 4.6 directly to 6.5, which isn't supported by Lotus.
<br><br>
To resolve the problem, I wrote an agent that removed the RiskExp field from the document using @DeleteField.  I then went back into the documents and re-entered the field value.  I changed the hidden view's selection formula back to what it was before, and whala!.  The documents were correctly displayed in the hidden view, and when I re-ran the scheduled agent, the notifications were sent.  I guess the lesson here, besides expecting the unexpected, is to not rule out field-level corruption when you encounter a strange problem you can't resolve.]]></content:encoded><pubDate>Tue, 16 May 2006 00:00:00 -0400</pubDate><slash:comments>1</slash:comments><wfw:commentRss>http://ww2.nutechs.com/hosting/msobczak/Blogs/BlogSphere-1_0_2/LordLotusBlog.nsf/CommentsRSS?Open&amp;id=8C7F51603D93B5D28525717100446F2F</wfw:commentRss><wfw:comment>http://ww2.nutechs.com/hosting/msobczak/Blogs/BlogSphere-1_0_2/LordLotusBlog.nsf/PostComment?RunAgent&amp;id=8C7F51603D93B5D28525717100446F2F</wfw:comment></item><item><title>File does not exist error w/@DbLookup</title><link>http://ww2.nutechs.com/hosting/msobczak/Blogs/BlogSphere-1_0_2/LordLotusBlog.nsf/d6plinks/MSOK-6PDRM7</link><description><![CDATA[ One thing (among several) I've never understood in regards to Notes development is how the Domino Designer never gives you a compiler error when you mis-code the @DBLookup function.  For example, in the statement below, I've mistakenly used a semi-colon ...]]></description><dc:subject>Notes Development</dc:subject><dc:creator>Michael Sobczak</dc:creator><comments>http://ww2.nutechs.com/hosting/msobczak/Blogs/BlogSphere-1_0_2/LordLotusBlog.nsf/d6plinks/MSOK-6PDRM7</comments><guid isPermaLink="true">http://ww2.nutechs.com/hosting/msobczak/Blogs/BlogSphere-1_0_2/LordLotusBlog.nsf/d6plinks/MSOK-6PDRM7</guid><content:encoded><![CDATA[ One thing (among several) I've never understood in regards to Notes development is how the Domino Designer never gives you a compiler error when you mis-code the @DBLookup function.  For example, in the statement below, I've mistakenly used a semi-colon instead of a colon between "Notes" and "NoCache":
<br><br>
values := @DbLookup ( "Notes"; "NoCache"; ""; "AdminImages"; "Home Page Graphic"; AttachmentName; &lsqb;FailSilent&rsqb; );
<br><br>
If I use the above statement as part of a Dialog List keyword value formula, the dialog list displays "File does not exist":
<br><br>
<img src="FileDoesNotExist.JPG" alt="File does not exist">
<br><br>
The correct version of the above statement is below:
<br><br>
values := @DbLookup ( "Notes" : "NoCache"; ""; "AdminImages"; "Home Page Graphic"; AttachmentName; &lsqb;FailSilent&rsqb; );
<br><br>
Based on the documentation in the Domino Designer Help database, @DbLookup can only contain a very finite set of variations.  So why doesn't Domino Designer give me an error when I supply too many elements, particularly when I mistakenly use a semi-colon somewhere instead of a colon?  Good question.]]></content:encoded><pubDate>Mon, 1 May 2006 16:08:13 -0400</pubDate><slash:comments>0</slash:comments><wfw:commentRss>http://ww2.nutechs.com/hosting/msobczak/Blogs/BlogSphere-1_0_2/LordLotusBlog.nsf/CommentsRSS?Open&amp;id=8526B9386D04F1C985257161006E9DA7</wfw:commentRss><wfw:comment>http://ww2.nutechs.com/hosting/msobczak/Blogs/BlogSphere-1_0_2/LordLotusBlog.nsf/PostComment?RunAgent&amp;id=8526B9386D04F1C985257161006E9DA7</wfw:comment></item><item><title>Is there a way to prevent a user from deleting a Soft Deletion?</title><link>http://ww2.nutechs.com/hosting/msobczak/Blogs/BlogSphere-1_0_2/LordLotusBlog.nsf/d6plinks/MSOK-6P8VCG</link><description><![CDATA[ The legal department at the company I work for has asked if there is a way that mail users could be prevented from deleting documents in the Trash folder. By doing this, softly deleted documents would remain in the Trash folder for the specified soft ...]]></description><dc:subject>Notes Development</dc:subject><dc:creator>Mike Sobczak</dc:creator><comments>http://ww2.nutechs.com/hosting/msobczak/Blogs/BlogSphere-1_0_2/LordLotusBlog.nsf/d6plinks/MSOK-6P8VCG</comments><guid isPermaLink="true">http://ww2.nutechs.com/hosting/msobczak/Blogs/BlogSphere-1_0_2/LordLotusBlog.nsf/d6plinks/MSOK-6P8VCG</guid><content:encoded><![CDATA[ The legal department at the company I work for has asked if there is a way that mail users could be prevented from deleting documents in the Trash folder. By doing this, softly deleted documents would remain in the Trash folder for the specified soft deletions period (ex: 48 hours).  Documents could be restored from the Trash folder, but would only be deleted by the Domino server once they exceeded the <b>Soft delete expire time in hours value.</b>
<br><br>
I looked into a similar request a few months ago for a custom application I maintain.  In that particular situation, the database owner wanted to prevent users from deleting documents from the <b>Soft Deletions</b> view I set up just for her and a few other people.  Unfortunately, marking a document for deletion doesn't trigger the <b>Querydocumentdelete</b> Database event.  So I told the database owner that it wasn't possible, that users would still get the following dialog when they delete something from the Soft Deletions view and could click <i>Yes</i>, permanently removing the document:
<br><br>
<img src="PermanentlyRemove.JPG" alt="Do you want to permanently remove the document(s) from the database">
<br><br>
With this now being the second time I've been asked this question in the past three months, I thought I should at least pose this question to the blogging community at large to see if anyone has come up with a solution to this.  My guess is, the only way to do this would be to leverage the C++ API some way.  Of course, using Mail Journaling is the best answer to this, but it takes the restore capability out of the hands of the user and into the hands of Notes administrators, who probably don't want to be responsible for handling legal inquiries all day long.]]></content:encoded><pubDate>Wed, 26 Apr 2006 19:19:04 -0400</pubDate><slash:comments>4</slash:comments><wfw:commentRss>http://ww2.nutechs.com/hosting/msobczak/Blogs/BlogSphere-1_0_2/LordLotusBlog.nsf/CommentsRSS?Open&amp;id=40D52C409DFAF8C98525715C008016BC</wfw:commentRss><wfw:comment>http://ww2.nutechs.com/hosting/msobczak/Blogs/BlogSphere-1_0_2/LordLotusBlog.nsf/PostComment?RunAgent&amp;id=40D52C409DFAF8C98525715C008016BC</wfw:comment></item><item><title>The wonderful world of Lotus Notes</title><link>http://ww2.nutechs.com/hosting/msobczak/Blogs/BlogSphere-1_0_2/LordLotusBlog.nsf/d6plinks/MSOK-6NZ4J2</link><description><![CDATA[ At my current employer, we have a large quantity of Notes applications that were built back in the Notes 4.x days.  Every now and then, we come across something interesting.  For example, back in Notes 4.x, you could write LotusScript code like this and it ...]]></description><dc:subject>Notes Development</dc:subject><dc:creator>Mike Sobczak</dc:creator><comments>http://ww2.nutechs.com/hosting/msobczak/Blogs/BlogSphere-1_0_2/LordLotusBlog.nsf/d6plinks/MSOK-6NZ4J2</comments><guid isPermaLink="true">http://ww2.nutechs.com/hosting/msobczak/Blogs/BlogSphere-1_0_2/LordLotusBlog.nsf/d6plinks/MSOK-6NZ4J2</guid><content:encoded><![CDATA[ At my current employer, we have a large quantity of Notes applications that were built back in the Notes 4.x days.  Every now and then, we come across something interesting.  For example, back in Notes 4.x, you could write LotusScript code like this and it would compile no problem:
<br><br>
<style>.lotusscript { font-family: sans-serif; font-size: 9pt; color: black; }
.ls-comment { color: green; }
.ls-quote { color: black; }
.ls-datatype { color: black; }
.ls-operator { color: blue; }
.ls-keyword { color: blue; }
.ls-statement { color: blue; }
.ls-function { color: blue; }
.ls-class { color: black; }
.ls-constant { color: purple; }
</style>
<pre><div class=lotusscript>
<font class=ls-statement>Dim</font> s <font class=ls-keyword>As</font> <font class=ls-class>NotesSession</font>
<font class=ls-statement>Dim</font> db <font class=ls-keyword>As</font> <font class=ls-class>NotesDatabase</font>
<font class=ls-statement>Dim</font> v <font class=ls-keyword>As</font> <font class=ls-class>NotesView</font>
<font class=ls-statement>Dim</font> doc <font class=ls-keyword>As</font> <font class=ls-class>NotesDocument</font>
	
<font class=ls-statement>Set</font> s <font class=ls-operator>=</font> <font class=ls-keyword>New</font> <font class=ls-class>NotesSession</font>
<font class=ls-statement>Set</font> db <font class=ls-operator>=</font> s<font class=ls-operator>.</font>CurrentDatabase
<font class=ls-statement>Set</font> v <font class=ls-operator>=</font> db<font class=ls-operator>.</font>GetView <font class=ls-operator>(</font> <font class=ls-quote>"($All)"</font> <font class=ls-operator>)</font>
<font class=ls-statement>Set</font> doc <font class=ls-operator>=</font> v<font class=ls-operator>.</font>GetFirstDocument
	
<font class=ls-statement>Forall</font> v In doc<font class=ls-operator>.</font>Field1
	<font class=ls-comment>'-- Do something here</font>
<font class=ls-statement>End</font> <font class=ls-statement>Forall</font>
	
<font class=ls-statement>Forall</font> v In doc<font class=ls-operator>.</font>Field2
	<font class=ls-comment>'-- Do something here</font>
<font class=ls-statement>End</font> <font class=ls-statement>Forall</font>
</div></pre>

<div style="FONT-SIZE: 8pt; COLOR: gray; FONT-FAMILY: sans-serif; BORDER: 1 solid Grey; margin : 5px 50px 5px 50px;"><center>This LotusScript was converted to HTML using the <b><i>ls2html</i></b> routine,<br>provided by Julian Robichaux at <a href="http://www.nsftools.com" target="_blank">nsftools.com</a>.</center></div>

<br><br>

This code yields the dreaded <b>FORALL alias variable previously declared: V</b> compiler error when you try to save it in the Domino Designer 6.  However, this code <i>still runs</i> in Lotus Notes 6--provided you don't change the code and attempt to re-save it.  My guess is that the LotusScript runtime environment in the Notes client must be checking the $DesignerVersion field to determine what version of Domino Designer was used to save the code.  Depending on what version is detected, the LotusScript runtime environment in the Notes client must execute the code differently.  Notes obviously isn't recompiling the code before it executes it.  I'm not complaining, by the way.  This is a testament to how the Notes client is truly backwards compatible with applications developed in previous versions.  Anyone out there have an answer for this interesting situation?]]></content:encoded><pubDate>Mon, 17 Apr 2006 00:00:00 -0400</pubDate><slash:comments>2</slash:comments><wfw:commentRss>http://ww2.nutechs.com/hosting/msobczak/Blogs/BlogSphere-1_0_2/LordLotusBlog.nsf/CommentsRSS?Open&amp;id=23A7E3BFB3290D9585257155000BB7F3</wfw:commentRss><wfw:comment>http://ww2.nutechs.com/hosting/msobczak/Blogs/BlogSphere-1_0_2/LordLotusBlog.nsf/PostComment?RunAgent&amp;id=23A7E3BFB3290D9585257155000BB7F3</wfw:comment></item><item><title>Problem with view Target Frame (double click) and unread marks</title><link>http://ww2.nutechs.com/hosting/msobczak/Blogs/BlogSphere-1_0_2/LordLotusBlog.nsf/d6plinks/MSOK-6MMK8G</link><description><![CDATA[ A Notes database I recently upgraded uses a frameset to display the navigation and the content, like this:



&lt;frameset&gt; 
&lt;frame name="navigation" target="NotesView"&gt; 
...source is a page with an embedded outline... 
&lt;/frame&gt; ...]]></description><dc:subject>Notes Development</dc:subject><dc:creator>Michael Sobczak</dc:creator><comments>http://ww2.nutechs.com/hosting/msobczak/Blogs/BlogSphere-1_0_2/LordLotusBlog.nsf/d6plinks/MSOK-6MMK8G</comments><guid isPermaLink="true">http://ww2.nutechs.com/hosting/msobczak/Blogs/BlogSphere-1_0_2/LordLotusBlog.nsf/d6plinks/MSOK-6MMK8G</guid><content:encoded><![CDATA[ A Notes database I recently upgraded uses a frameset to display the navigation and the content, like this:

<br><br>

&lt;frameset&gt; <br>
&lt;frame name="navigation" target="NotesView"&gt; <br>
...source is a page with an embedded outline... <br>
&lt;/frame&gt; <br>
&lt;frame name="NotesView" target="NotesView"&gt; <br>
...source is a Notes view... <br>
&lt;/frame&gt; <br>
&lt;frameset&gt; <br>

<br><br>

My client asked me to change the database so that when a user opens a document, it opens in the content pane (a.k.a. the "NotesView" frame).  To do this, I specified a frame in the view's <b>Target Frame (double click)</b> event, like this:
<br><br>
<img src="TargetFrame.jpg" alt="">
<br><br>
This does cause documents to open in the NotesView frame.  However, when the user closes the document, the document remains unread.  Previously, when a document opened into its own tab, Notes always marked it unread.  <a href="http://www-10.lotus.com/ldd/nd6forum.nsf/55c38d716d632d9b8525689b005ba1c0/3506b5cbe2753e0e85256ff8003fc0a2?OpenDocument&Highlight=0,target,frame,double,click" target="_blank">This problem</a> was noted by Shiva P Vydyula in the Notes 6/7 Discussion forum a while back, with no responses given.  The only solutions I could think of was to either allow documents to open in their own tab, as before, or turn off unread marks.  Neither of these solutions was desired.
<br><br>
I gave Lotus Technical Support a call, and they determined that the behavior users were experiencing with the documents not being marked as read is a result of opening the documents in the same frame that the view appears, "NotesView" frame.  It seems that the Notes client considers this frame as the equivalent of the preview pane.  So, in order for documents to be marked as read, I need to enable the <b>Mark documents read when opened in the preview pane</b> user preference.  When I did that, the documents would be marked as read when I opened them.
<br><br>
Since this problem had effected about a thousand users, I needed an easy way for all of them to enable this preference as easy as possible.  While I can write LotusScript code that reads and writes environment variables no problem, this particular preference was part of the Preferences variable, which contains <a href="http://domino-240.drcc.com/ref/notesini.nsf/all/AE0DCD26C4D49B78C1256EBA00532D5D" target="_blank">a series of bits</a> that are either turned on or off.
<br><br>
A search of the Notes 6/7 Discussion forum proved to be extremely useful, as always.  This post from <a href="http://www-10.lotus.com/ldd/46dom.nsf/55c38d716d632d9b8525689b005ba1c0/31FE466926FFC7F385256B9F00532252" target="_blank">Mark Beaumont</a> had the code I was looking for, easily modified for the specific property I wanted to enable.]]></content:encoded><pubDate>Mon, 6 Mar 2006 09:40:41 -0400</pubDate><slash:comments>3</slash:comments><wfw:commentRss>http://ww2.nutechs.com/hosting/msobczak/Blogs/BlogSphere-1_0_2/LordLotusBlog.nsf/CommentsRSS?Open&amp;id=F475679EF74F05C7852571290050A118</wfw:commentRss><wfw:comment>http://ww2.nutechs.com/hosting/msobczak/Blogs/BlogSphere-1_0_2/LordLotusBlog.nsf/PostComment?RunAgent&amp;id=F475679EF74F05C7852571290050A118</wfw:comment></item><item><title>After all these years...</title><link>http://ww2.nutechs.com/hosting/msobczak/Blogs/BlogSphere-1_0_2/LordLotusBlog.nsf/d6plinks/MSOK-6LSLMY</link><description><![CDATA[ Why doesn't the "Collapse all when database is first opened" view property work like everyone (except Lotus) expects it too?

I've been dealing with this behavior ever since I started with Notes back in the R3 days.  Sure, there's a technote about this, ...]]></description><dc:subject>Notes Development</dc:subject><dc:creator>Michael Sobczak</dc:creator><comments>http://ww2.nutechs.com/hosting/msobczak/Blogs/BlogSphere-1_0_2/LordLotusBlog.nsf/d6plinks/MSOK-6LSLMY</comments><guid isPermaLink="true">http://ww2.nutechs.com/hosting/msobczak/Blogs/BlogSphere-1_0_2/LordLotusBlog.nsf/d6plinks/MSOK-6LSLMY</guid><content:encoded><![CDATA[ Why doesn't the "Collapse all when database is first opened" view property work like everyone (except Lotus) expects it too?
<br><br>
I've been dealing with this behavior ever since I started with Notes back in the R3 days.  Sure, there's a technote about this, stating that Notes is functioning as designed.  But what if this design is flawed?  In my opinion, it has to be.  Nearly every customer I've worked for in the past ten years has had a problem with this behavior.  When it comes up, I typically tell them that while I can set the view properties (including "Go to top row" on open), Notes will just do what it wants to do.  And, based on the official explanation in the technote (Reference #1089903 for those keeping score at home), my explanation hasn't been too far off:
<blockquote>
Whether the view is collapsed entirely on open is dependent on which document was highlighted when the view was closed. If a Main document or highest level document in a hierarchy is highlighted when the database is closed, then all categories will be collapsed when the view is opened. If a response or child document is highlighted when the view is closed then that discussion thread will be expanded when the view is opened, but all other discussion threads in the view will be collapsed. A discussion thread is a collection of documents that all have the same Main Document ancestor, ultimately.
</blockquote>
I'm guessing that somewhere during the origin of Notes, someone thought this was a cool thing to do.  Twenty-one years later, it's still a major pain.  Features like this are why Notes users complain that the UI is difficult to figure out.  Who would ever guess that the above is what's actually happening?
<br><br>
It turns out that there is a programmatic solution to this problem.  As <a href="http://www-10.lotus.com/ldd/nd6forum.nsf/55c38d716d632d9b8525689b005ba1c0/44a5e41cfcd94fd985256fe0004c1d8e?OpenDocument" target="_blank">Betsy Thiede</a> (among others) posted in the Notes 4/5 Discussion Forum, you can add the following code to each view's Postopen event:
<br><br>
a:=@Command(&lsqb;ViewCollapseAll&rsqb;);<br>
@If(@IsError(a);@Return("");a)
<br><br>
This code does generate an error if the view is opened via a Picklist.  Also, if you already have LotusScript code in your view's Postopen event, you're out of luck.
<br><br>
I don't know who I need to bribe to make this happen, but I wish that in Notes we could have another view property added, like this:
<br><br>
<img src="ViewProperties02.jpg" alt="Collapse absolutely everything each time view is opened">
<br><br>
Or, why not add a NotesUIView.CollapseView method, for us code junkies?]]></content:encoded><pubDate>Tue, 7 Feb 2006 10:53:30 -0400</pubDate><slash:comments>6</slash:comments><wfw:commentRss>http://ww2.nutechs.com/hosting/msobczak/Blogs/BlogSphere-1_0_2/LordLotusBlog.nsf/CommentsRSS?Open&amp;id=AE4741B8E500570B8525710E00574BEE</wfw:commentRss><wfw:comment>http://ww2.nutechs.com/hosting/msobczak/Blogs/BlogSphere-1_0_2/LordLotusBlog.nsf/PostComment?RunAgent&amp;id=AE4741B8E500570B8525710E00574BEE</wfw:comment></item>[Replication or Save Conflict]<item><title>Remote Agent Debugger and RunOnServer don't jive</title><link>http://ww2.nutechs.com/hosting/msobczak/Blogs/BlogSphere-1_0_2/LordLotusBlog.nsf/d6plinks/MSOK-6LKMTC</link><description><![CDATA[ I came across an interesting situation yesterday.  I had a scheduled agent that produced unexpected results when it ran this morning @ 1:00 AM.  I tested the agent several times locally, and the agent ran fine.  In an effort to debug the agent on the server, ...]]></description><dc:subject>Notes Development</dc:subject><dc:creator>Michael Sobczak</dc:creator><comments>http://ww2.nutechs.com/hosting/msobczak/Blogs/BlogSphere-1_0_2/LordLotusBlog.nsf/d6plinks/MSOK-6LKMTC</comments><guid isPermaLink="true">http://ww2.nutechs.com/hosting/msobczak/Blogs/BlogSphere-1_0_2/LordLotusBlog.nsf/d6plinks/MSOK-6LKMTC</guid><content:encoded><![CDATA[ I came across an interesting situation yesterday.  I had a scheduled agent that produced unexpected results when it ran this morning @ 1:00 AM.  I tested the agent several times locally, and the agent ran fine.  In an effort to debug the agent on the server, I had one of our Domino Server administrators enable Remote Debugging on the server and restart it.  When the server restarted, I could see in the Notes Log that the Remote Debugging task had loaded.  However, when I tried to run the agent on the server by using NotesAgent.RunOnServer(), the agent manager kept coming back with these messages:
<br><br>
01/30/2006 04:41:38 PM  AMgr: Start executing agent 'Create Bulletin' in 'dev\msobczak\Branch\TEST Bulletin.nsf' by Executive '1'<br>
01/30/2006 04:41:38 PM  AMgr: 'Michael Sobczak/MI/CMA' is the agent signer of agent 'Create Bulletin' in 'dev\msobczak\Branch\TEST Bulletin.nsf'<br>
01/30/2006 04:41:38 PM  AMgr: 'Agent 'Create Bulletin' in 'dev\msobczak\Branch\TEST Bulletin.nsf' will run on behalf of 'Notes Team/MI/CMA'<br>
01/30/2006 04:41:38 PM  Agents delayed 60 seconds to provide an opportunity for the remote debugger to attach.<br>
01/30/2006 04:41:59 PM  Agents delayed 60 seconds to provide an opportunity for the remote debugger to attach.<br>
01/30/2006 04:42:39 PM  Agents delayed 60 seconds to provide an opportunity for the remote debugger to attach.<br>
01/30/2006 04:43:00 PM  Agents delayed 60 seconds to provide an opportunity for the remote debugger to attach.<br>
01/30/2006 04:43:39 PM  Agents delayed 60 seconds to provide an opportunity for the remote debugger to attach.<br>
01/30/2006 04:44:00 PM  Agents delayed 60 seconds to provide an opportunity for the remote debugger to attach.<br>
01/30/2006 04:44:40 PM  Agents delayed 60 seconds to provide an opportunity for the remote debugger to attach.<br>
01/30/2006 04:45:01 PM  Agents delayed 60 seconds to provide an opportunity for the remote debugger to attach.<br>
01/30/2006 04:45:40 PM  Agents delayed 60 seconds to provide an opportunity for the remote debugger to attach.<br>
01/30/2006 04:46:01 PM  Agents delayed 60 seconds to provide an opportunity for the remote debugger to attach.<br>
<br><br>
All of the other agents that were being run according to a schedule ran fine.  I needed to quit the Amgr task in order to stop my agent.  Based on this experience, I take it that RunOnServer can't be used when Remote Debugging is enabled?]]></content:encoded><pubDate>Mon, 30 Jan 2006 00:00:00 -0400</pubDate><slash:comments>0</slash:comments><wfw:commentRss>http://ww2.nutechs.com/hosting/msobczak/Blogs/BlogSphere-1_0_2/LordLotusBlog.nsf/CommentsRSS?Open&amp;id=AB6C926528176E0985257107005CC45D</wfw:commentRss><wfw:comment>http://ww2.nutechs.com/hosting/msobczak/Blogs/BlogSphere-1_0_2/LordLotusBlog.nsf/PostComment?RunAgent&amp;id=AB6C926528176E0985257107005CC45D</wfw:comment></item><item><title>Named element formulas - how to use them</title><link>http://ww2.nutechs.com/hosting/msobczak/Blogs/BlogSphere-1_0_2/LordLotusBlog.nsf/d6plinks/MSOK-6KRGWV</link><description><![CDATA[ One feature added in V6 that I wasn't able to get to work, until recently, is "named element formula".  For more information on how I got this to work, click the "Read More..." link ...]]></description><dc:subject>Notes Development</dc:subject><dc:creator>Michael Sobczak</dc:creator><comments>http://ww2.nutechs.com/hosting/msobczak/Blogs/BlogSphere-1_0_2/LordLotusBlog.nsf/d6plinks/MSOK-6KRGWV</comments><guid isPermaLink="true">http://ww2.nutechs.com/hosting/msobczak/Blogs/BlogSphere-1_0_2/LordLotusBlog.nsf/d6plinks/MSOK-6KRGWV</guid><content:encoded><![CDATA[ One feature added in V6 that I wasn't able to get to work, until recently, is "named element formula".  For more information on how I got this to work, click the "Read More..." link below:
<br><br>]]></content:encoded><pubDate>Tue, 3 Jan 2006 00:00:00 -0400</pubDate><slash:comments>2</slash:comments><wfw:commentRss>http://ww2.nutechs.com/hosting/msobczak/Blogs/BlogSphere-1_0_2/LordLotusBlog.nsf/CommentsRSS?Open&amp;id=92DB9F6387FE088E852570ED0045D952</wfw:commentRss><wfw:comment>http://ww2.nutechs.com/hosting/msobczak/Blogs/BlogSphere-1_0_2/LordLotusBlog.nsf/PostComment?RunAgent&amp;id=92DB9F6387FE088E852570ED0045D952</wfw:comment></item><item><title>You'd a thought IBM/Lotus would have fixed this a long time ago...</title><link>http://ww2.nutechs.com/hosting/msobczak/Blogs/BlogSphere-1_0_2/LordLotusBlog.nsf/d6plinks/MSOK-6KJ2KX</link><description><![CDATA[ When you create a new view to a db that's not based on a template, why is the Prohibit design refresh or replace to modify property automatically set?!?  This only happens with views.  Seems like I've been dealing with since R5 was ...]]></description><dc:subject>Notes Development</dc:subject><dc:creator>Mike Sobczak</dc:creator><comments>http://ww2.nutechs.com/hosting/msobczak/Blogs/BlogSphere-1_0_2/LordLotusBlog.nsf/d6plinks/MSOK-6KJ2KX</comments><guid isPermaLink="true">http://ww2.nutechs.com/hosting/msobczak/Blogs/BlogSphere-1_0_2/LordLotusBlog.nsf/d6plinks/MSOK-6KJ2KX</guid><content:encoded><![CDATA[ When you create a new view to a db that's <i>not</i> based on a template, why is the <b>Prohibit design refresh or replace to modify</b> property automatically set?!?  This only happens with views.  Seems like I've been dealing with since R5 was introduced...]]></content:encoded><pubDate>Wed, 28 Dec 2005 19:28:39 -0400</pubDate><slash:comments>0</slash:comments><wfw:commentRss>http://ww2.nutechs.com/hosting/msobczak/Blogs/BlogSphere-1_0_2/LordLotusBlog.nsf/CommentsRSS?Open&amp;id=8A7FBD7C421F895B852570E600029FB2</wfw:commentRss><wfw:comment>http://ww2.nutechs.com/hosting/msobczak/Blogs/BlogSphere-1_0_2/LordLotusBlog.nsf/PostComment?RunAgent&amp;id=8A7FBD7C421F895B852570E600029FB2</wfw:comment></item><item><title>Corrupt fields in a form</title><link>http://ww2.nutechs.com/hosting/msobczak/Blogs/BlogSphere-1_0_2/LordLotusBlog.nsf/d6plinks/MSOK-6HLNQR</link><description><![CDATA[ I had a bizarre problem arise yesterday afternoon.  I had several fields in a Notes form where I could see the field values in Document Properties, but the fields themselves in the Notes form did not display the values.  I tried just about everything to fix ...]]></description><dc:subject>Notes Development</dc:subject><dc:creator>Michael Sobczak</dc:creator><comments>http://ww2.nutechs.com/hosting/msobczak/Blogs/BlogSphere-1_0_2/LordLotusBlog.nsf/d6plinks/MSOK-6HLNQR</comments><guid isPermaLink="true">http://ww2.nutechs.com/hosting/msobczak/Blogs/BlogSphere-1_0_2/LordLotusBlog.nsf/d6plinks/MSOK-6HLNQR</guid><content:encoded><![CDATA[ I had a bizarre problem arise yesterday afternoon.  I had several fields in a Notes form where I could see the field values in Document Properties, but the fields themselves in the Notes form did not display the values.  I tried just about everything to fix this problem, including:
<ul>
<li>display the field value in a {Computed Text}</li>
<li>cut and paste the form back into the database</li>
<li>create a new form, copy and paste the fields from the current form into the new form, switch to the new form with the document open in the Notes UI</li>
<li>break the rather large (200+ rows) table displaying the fields into two tables of 100 rows and one with 30 rows</li>
<li>create a new form, copy the fields from the current form into the new form without no tables, switch to the new form with the document open in the Notes UI</li>
<li>compact the database</li>
<li>restart the Notes and Designer clients</li>
<li>designate a default form and view</li>
<li>delete my Cache.NDK</li>
</ul>
None of these things worked.  The answer was to re-create the field from scratch.  My guess is that this was necessary due to some corruption in the form.]]></content:encoded><pubDate>Fri, 28 Oct 2005 13:40:20 -0400</pubDate><slash:comments>0</slash:comments><wfw:commentRss>http://ww2.nutechs.com/hosting/msobczak/Blogs/BlogSphere-1_0_2/LordLotusBlog.nsf/CommentsRSS?Open&amp;id=2ED84DEE75ADB0F1852570A80061139F</wfw:commentRss><wfw:comment>http://ww2.nutechs.com/hosting/msobczak/Blogs/BlogSphere-1_0_2/LordLotusBlog.nsf/PostComment?RunAgent&amp;id=2ED84DEE75ADB0F1852570A80061139F</wfw:comment></item><item><title>Problem with @SetTargetFrame and @UserRoles resolved</title><link>http://ww2.nutechs.com/hosting/msobczak/Blogs/BlogSphere-1_0_2/LordLotusBlog.nsf/d6plinks/MSOK-6H5JZD</link><description><![CDATA[ I encountered a problem yesterday with a navigator button I was working on.  This button needed to open to a default frameset, then change the "NotesView" pane (or content pane) based on the user's ACL role.  Here's the original version of the code:

ap := ...]]></description><dc:subject>Notes Development</dc:subject><dc:creator>Michael Sobczak</dc:creator><comments>http://ww2.nutechs.com/hosting/msobczak/Blogs/BlogSphere-1_0_2/LordLotusBlog.nsf/d6plinks/MSOK-6H5JZD</comments><guid isPermaLink="true">http://ww2.nutechs.com/hosting/msobczak/Blogs/BlogSphere-1_0_2/LordLotusBlog.nsf/d6plinks/MSOK-6H5JZD</guid><content:encoded><![CDATA[ I encountered a problem yesterday with a navigator button I was working on.  This button needed to open to a default frameset, then change the "NotesView" pane (or content pane) based on the user's ACL role.  Here's the original version of the code:
<pre>
ap := @DbLookup ( "Notes" : "NoCache"; svr : path3; "someview"; @Name ( &lsqb;CN&rsqb;; @UserName ); "Approver"; &lsqb;FailSilent&rsqb; );
@SetTargetFrame ( "_top" );
@Command ( &lsqb;OpenFrameset&rsqb;; "Main Frameset" );
@SetTargetFrame ( "NotesView" );
@If (
@Name ( &lsqb;Abbreviate&rsqb;; @UserName ) = ap | @IsMember ( "&lsqb;MC&rsqb;"; @UserRoles );
@Command ( &lsqb;OpenView&rsqb;; "AllToBeApproved" );
@IsMember ( "&lsqb;AP&rsqb;";@UserRoles );
@Command ( &lsqb;OpenView&rsqb;; "APtobeprocessed" );
@Command ( &lsqb;Compose&rsqb;; "SelectEmpStatus" )
);
</pre>
Well, it turns out that after you call @SetTargetFrame, @UserRoles returns nothing.  I found this out by adding @Prompt statements before and after @SetTargetFrame.  Neat, huh?  The answer to this was for me to check for inclusion in ACL roles before calling @SetTargetFrame, like so:
<pre>
ap := @DbLookup ( "Notes" : "NoCache"; svr : path3; "someview"; @Name ( &lsqb;CN&rsqb;; @UserName ); "Approver"; &lsqb;FailSilent&rsqb; );
isMCApprover := @If ( @IsMember ( "&lsqb;MC&rsqb;"; @UserRoles ); @True; @False );
isAPApprover := @If ( @IsMember ( "&lsqb;AP&rsqb;"; @UserRoles ); @True; @False );
@SetTargetFrame ( "_top" );
@Command ( &lsqb;OpenFrameset&rsqb;; "Main Frameset" );
@SetTargetFrame ( "NotesView" );
@If (
@Name ( &lsqb;Abbreviate&rsqb;; @UserName ) = ap | isMCApprover;
@Command ( &lsqb;OpenView&rsqb;; "AllToBeApproved" );
isAPApprover;
@Command ( &lsqb;OpenView&rsqb;; "APtobeprocessed" );
@Command ( &lsqb;Compose&rsqb;; "SelectEmpStatus" )
);
</pre>
There was nothing in the doco for @SetTargetFrame or @UserRoles mentioning this behavior, so I'm assuming this is a bug.]]></content:encoded><pubDate>Thu, 13 Oct 2005 10:29:19 -0400</pubDate><slash:comments>0</slash:comments><wfw:commentRss>http://ww2.nutechs.com/hosting/msobczak/Blogs/BlogSphere-1_0_2/LordLotusBlog.nsf/CommentsRSS?Open&amp;id=DA50CE53DF9950E085257099004F96BD</wfw:commentRss><wfw:comment>http://ww2.nutechs.com/hosting/msobczak/Blogs/BlogSphere-1_0_2/LordLotusBlog.nsf/PostComment?RunAgent&amp;id=DA50CE53DF9950E085257099004F96BD</wfw:comment></item><item><title>Working in a mixed 4.6/6.5 environment not as easy as it sounds (!)</title><link>http://ww2.nutechs.com/hosting/msobczak/Blogs/BlogSphere-1_0_2/LordLotusBlog.nsf/d6plinks/MSOK-6GUSGZ</link><description><![CDATA[ The environment I'm currently developing in still has users with Notes 4.6 clients.  This means that some applications still need to be maintained using the Notes 4.6 designer client.  I'm OK with this, as the changes to these applications are typically minor ...]]></description><dc:subject>Notes Development</dc:subject><dc:creator>Michael Sobczak</dc:creator><comments>http://ww2.nutechs.com/hosting/msobczak/Blogs/BlogSphere-1_0_2/LordLotusBlog.nsf/d6plinks/MSOK-6GUSGZ</comments><guid isPermaLink="true">http://ww2.nutechs.com/hosting/msobczak/Blogs/BlogSphere-1_0_2/LordLotusBlog.nsf/d6plinks/MSOK-6GUSGZ</guid><content:encoded><![CDATA[ The environment I'm currently developing in still has users with Notes 4.6 clients.  This means that some applications still need to be maintained using the Notes 4.6 designer client.  I'm OK with this, as the changes to these applications are typically minor and problems can be debugged easily enough.  (Its <i>very hard</i> to get used to <u>not</u> having line numbers display in the code pane, though.)  However, I was trying to debug some code I'd modified in the Notes 4.6 client, and was surprised to find that the error line number (or Erl) being returned by the Notes 4.6 and 6.5 clients was wrong.  Here's the message box I get in the Notes 4.6 client:
<br><br>
<img src="LotusscriptErrorLine1.jpg" alt="Lotusscript Erl value wrong">
<br><br>
I'll have you know that there is not 1000+ lines of code in the Postrecalc event.  (If there were, I'd probably shoot myself!)  When I resaved the code in the Postrecalc event within Domino Designer 6.5, I get a legitimate (and correct) line number in Notes 6.5 at least:
<br><br>
<img src="LotusscriptErrorLine1.jpg" alt="Lotusscript Erl value correct">
<br><br>
The error line number returned in 4.6 is still wrong, however.  I figure that a mixed 4.6/6.5 environment probably isn't really supported by Lotus.  But I never thought that a Lotusscript function as innocuous as Erl could return a value that is so inaccurate.  The best I can figure is that there's some sort of bizarre confluence happening between the Notes 4.6 client and the ODS of the database.  Notes 4.6 must not be able to accurately determine the line number due to the way the code is actually being saved in a 6.5 ODS.  Free guesses, anyone?]]></content:encoded><pubDate>Mon, 3 Oct 2005 00:00:00 -0400</pubDate><slash:comments>0</slash:comments><wfw:commentRss>http://ww2.nutechs.com/hosting/msobczak/Blogs/BlogSphere-1_0_2/LordLotusBlog.nsf/CommentsRSS?Open&amp;id=A9E6F2261230FCDF852570900072B249</wfw:commentRss><wfw:comment>http://ww2.nutechs.com/hosting/msobczak/Blogs/BlogSphere-1_0_2/LordLotusBlog.nsf/PostComment?RunAgent&amp;id=A9E6F2261230FCDF852570900072B249</wfw:comment></item><item><title>Find and Replace revisited: replacing a string with a null string</title><link>http://ww2.nutechs.com/hosting/msobczak/Blogs/BlogSphere-1_0_2/LordLotusBlog.nsf/d6plinks/MSOK-6GPP2B</link><description><![CDATA[ I had an instance where I needed to replace a mail merge template value with a null.  The mail merge template was a formula that would either return a text value, or a null string.  As it turns out, notesRichTextRange.FindAndReplace() will not replace a ...]]></description><dc:subject>Notes Development</dc:subject><dc:creator>Michael Sobczak</dc:creator><comments>http://ww2.nutechs.com/hosting/msobczak/Blogs/BlogSphere-1_0_2/LordLotusBlog.nsf/d6plinks/MSOK-6GPP2B</comments><guid isPermaLink="true">http://ww2.nutechs.com/hosting/msobczak/Blogs/BlogSphere-1_0_2/LordLotusBlog.nsf/d6plinks/MSOK-6GPP2B</guid><content:encoded><![CDATA[ I had an instance where I needed to replace a mail merge template value with a null.  The mail merge template was a formula that would either return a text value, or a null string.  As it turns out, notesRichTextRange.FindAndReplace() will not replace a string with a null string.  I searched the Notes/Domino 6 & 7 Forum on developerWorks and found a <a href="http://www-10.lotus.com/ldd/nd6forum.nsf/55c38d716d632d9b8525689b005ba1c0/b3794d76085b644a85256f3c007d4313?OpenDocument" target="_blank">clue</a> from Lawrence Sprowls.  This lead me back to Matt Holthe's <a href="http://www.breakingpar.com/bkp/home.nsf/0/87256B280015193F87256FAC005B6DAE" target="_blank">article</a> on his website.  The second example he provided gave me all I needed.  If the replacement string's length is not equal to zero, I can use the FindAndReplace method of NotesRichTextRange.  If the replacement string's length is zero, then I need to remove the string I'm searching for.  To see the code I came up with, click Read More below...]]></content:encoded><pubDate>Tue, 27 Sep 2005 00:00:00 -0400</pubDate><slash:comments>0</slash:comments><wfw:commentRss>http://ww2.nutechs.com/hosting/msobczak/Blogs/BlogSphere-1_0_2/LordLotusBlog.nsf/CommentsRSS?Open&amp;id=E1CD5DB3BD4914D88525708B00627B27</wfw:commentRss><wfw:comment>http://ww2.nutechs.com/hosting/msobczak/Blogs/BlogSphere-1_0_2/LordLotusBlog.nsf/PostComment?RunAgent&amp;id=E1CD5DB3BD4914D88525708B00627B27</wfw:comment></item><item><title>Using the new Notes 6 Rich Text classes to perform a find and replace is way too easy</title><link>http://ww2.nutechs.com/hosting/msobczak/Blogs/BlogSphere-1_0_2/LordLotusBlog.nsf/d6plinks/MSOK-6GLGLX</link><description><![CDATA[ Back in December '02, I found an article by Usha Dewasthali in the Lotus Advisor that described a technique that allows database owners to control the content of e-mail notifications.  Similar to a mail merge in MS Word, the content for each e-mail ...]]></description><dc:subject>Notes Development</dc:subject><dc:creator>Michael Sobczak</dc:creator><comments>http://ww2.nutechs.com/hosting/msobczak/Blogs/BlogSphere-1_0_2/LordLotusBlog.nsf/d6plinks/MSOK-6GLGLX</comments><guid isPermaLink="true">http://ww2.nutechs.com/hosting/msobczak/Blogs/BlogSphere-1_0_2/LordLotusBlog.nsf/d6plinks/MSOK-6GLGLX</guid><content:encoded><![CDATA[ Back in December '02, I found <a href="http://lotusadvisor.com/doc/11286" target="_blank">an article</a> by Usha Dewasthali in the Lotus Advisor that described a technique that allows database owners to control the content of e-mail notifications.  Similar to a mail merge in MS Word, the content for each e-mail notification is stored in a Notes document as a "template".   The content of a template is a combination of static text and "merge values".  A merge value is a document that represents each field or formula that a database owner may want to include in a template.  Notes fields are referenced indirectly in the template using this convention:
<br><br>
{{Status}}
<br><br>
A merge value may also reference formula code.  For example, the following merge value:
<br><br>
{{Created By}}
<br><br>
references the following formula:
<br><br>
@Name ( &lsqb;CN&rsqb;; @UserName )
<br><br>
When an e-mail notification is sent, code written by Usha performs a "find and replace" on the contents of the template, replacing all indirect Notes field references and formula references at run-time.  (Formula references are generated through the use of Evaluate().)
<br><br>
As you can see, this is a very powerful technique.  Database owners can control the content of e-mail notifications without having to know anything about the Notes fields used by the forms in the database, or anything about the Notes formula language.
<br><br>
The main limitation of this technique is that the body of the template only could be plain text.  This limitation was primarily due to Notes R5 not having an (easy) way to perform a find and replace on the contents of a rich text field.  In Notes 6, this limitation is effectively eliminated with the inclusion of the new rich text classes.
<br><br>
When I started reading the Domino Designer 6 help on the new rich text classes, I became confused as to how to do this.  There is so much help for these new classes, I wasn't sure where to begin.  Fortunately, Matt Holthe's website contains a <a href="http://www.breakingpar.com/bkp/home.nsf/0/87256B280015193F87256FAC005B6DAE" target="_blank">very lucid example</a> of how to perform a find and replace on the contents of a rich text field.  That you (as a Notes developer) can replace a string in a rich text field in two statements is an example of the simplicity found in the formula language that has always been lacking to the Lotusscript language.  I for one hope Lotus continues in this direction!]]></content:encoded><pubDate>Fri, 23 Sep 2005 00:00:00 -0400</pubDate><slash:comments>0</slash:comments><wfw:commentRss>http://ww2.nutechs.com/hosting/msobczak/Blogs/BlogSphere-1_0_2/LordLotusBlog.nsf/CommentsRSS?Open&amp;id=DFA59599E42FE69E852570880044641A</wfw:commentRss><wfw:comment>http://ww2.nutechs.com/hosting/msobczak/Blogs/BlogSphere-1_0_2/LordLotusBlog.nsf/PostComment?RunAgent&amp;id=DFA59599E42FE69E852570880044641A</wfw:comment></item><item><title>No Postsave event in 4.6 - ugh!</title><link>http://ww2.nutechs.com/hosting/msobczak/Blogs/BlogSphere-1_0_2/LordLotusBlog.nsf/d6plinks/MSOK-6G6SD4</link><description><![CDATA[ One technique I've used for a while is to use a global variable in a form as a way to see if a field value has been changed when the document is saved.  For example, in the form (Globals) (Declarations), I would define a variable like this:

Dim savedStatus ...]]></description><dc:subject>Notes Development</dc:subject><dc:creator>Michael Sobczak</dc:creator><comments>http://ww2.nutechs.com/hosting/msobczak/Blogs/BlogSphere-1_0_2/LordLotusBlog.nsf/d6plinks/MSOK-6G6SD4</comments><guid isPermaLink="true">http://ww2.nutechs.com/hosting/msobczak/Blogs/BlogSphere-1_0_2/LordLotusBlog.nsf/d6plinks/MSOK-6G6SD4</guid><content:encoded><![CDATA[ One technique I've used for a while is to use a global variable in a form as a way to see if a field value has been changed when the document is saved.  For example, in the form (Globals) (Declarations), I would define a variable like this:
<br><br>
Dim savedStatus as string
<br><br>
Then, in the Querysave, I would check the contents of this variable against the field in the document, and take the appropriate action:
<br><br>
If ( savedStatus <> uidoc.FieldGetText ( "Status" ) ) Then
&nbsp;&nbsp;&nbsp;'do something special
End If
<br><br>
Finally, I would update the variable to the current value of the field in the Postsave event:
<br><br>
savedStatus = uidoc.FieldGetText ( "Status" )
<br><br>
This way, my code can handle each time the document is saved in the Notes UI before it is ultimately closed.  The real reason why I like this method is that I don't need to have a hidden field somewhere that stores the previous status.
<br><br>
Well, this is all well and good for R5 and up.  In Notes 4.6, there is no Postsave event.  Gack!  I forget how far this product has come over the years.  Going backwards is definitely a mind-altering experience...]]></content:encoded><pubDate>Tue, 30 Aug 2005 00:00:00 -0400</pubDate><slash:comments>0</slash:comments><wfw:commentRss>http://ww2.nutechs.com/hosting/msobczak/Blogs/BlogSphere-1_0_2/LordLotusBlog.nsf/CommentsRSS?Open&amp;id=93F91E1B2E58FA408525707A00721EB0</wfw:commentRss><wfw:comment>http://ww2.nutechs.com/hosting/msobczak/Blogs/BlogSphere-1_0_2/LordLotusBlog.nsf/PostComment?RunAgent&amp;id=93F91E1B2E58FA408525707A00721EB0</wfw:comment></item><item><title>Found a way to make Notes 4.6 and 6.5 client users coexist</title><link>http://ww2.nutechs.com/hosting/msobczak/Blogs/BlogSphere-1_0_2/LordLotusBlog.nsf/d6plinks/MSOK-6FKTKG</link><description><![CDATA[ One limitation with Notes 6.5 is that the user's desktop.dsk does not "roam" with a roaming user.  It also leads to much confusion for multi-user Notes installations.  This technote describes the problem very succinctly.

I was asked to look into one ...]]></description><dc:subject>Notes Development</dc:subject><dc:creator>Michael Sobczak</dc:creator><comments>http://ww2.nutechs.com/hosting/msobczak/Blogs/BlogSphere-1_0_2/LordLotusBlog.nsf/d6plinks/MSOK-6FKTKG</comments><guid isPermaLink="true">http://ww2.nutechs.com/hosting/msobczak/Blogs/BlogSphere-1_0_2/LordLotusBlog.nsf/d6plinks/MSOK-6FKTKG</guid><content:encoded><![CDATA[ One limitation with Notes 6.5 is that the user's desktop.dsk does not "roam" with a roaming user.  It also leads to much confusion for multi-user Notes installations.  This <a href="http://www-1.ibm.com/support/docview.wss?rs=463&context=SSKTMJ&context=SSKTWP&q1=1087127&uid=swg21087127&loc=en_US&cs=utf-8&lang=en" target="_blank">technote</a> describes the problem very succinctly.
<br><br>
I was asked to look into one application where people accessing Notes on a multi-user PC were having this exact same problem.  To resolve this problem, I needed to substitute the private on first use views with a collection of forms that contain embedded views.  Each embedded view's Show Single Category setting would compute to the current user name, and display only that user's documents.  Simple enough.  I then created a frameset and outline that would be used by 6.5 users to open the new forms, and effectively navigate the database almost exactly like before.
<br><br>
The problem I faced was that this particular application initially opens to a full-screen navigator.  This initial navigator contains buttons that each open a different view/navigator pair.  Notes 4.6 users still needed to use the current navigator, but the application needed to display a new navigator for just Notes 6.5 users.  (The new navigator's buttons would open the new frameset I mentioned above.)  What I wasn't sure about was how to open one navigator for 4.6 users, and a different one for 6.5 users.
<br><br>
Thankfully, the Lotus Notes FAQ had <a href="http://www.keysolutions.com/notesfaq/canstart.html" target="_blank">an entry</a> that pointed me in the right direction.  Essentially, I can use the Database Script Postopen event to open a different navigator, based on the user's Notes version.  Here's the formula code I came up with:
<pre>
@If ( @Version > "147"; 
@PostedCommand ( &lsqb;OpenNavigator&rsqb;; "Main Navigator 6.5"; "1" ); 
@PostedCommand ( &lsqb;OpenNavigator&rsqb;; "Main Navigator"; "1" ) )
</pre>
<br><br>
My thanks to Ken Yee for making this technique available to me, so that I could easily solve my dilemma.]]></content:encoded><pubDate>Tue, 23 Aug 2005 00:00:00 -0400</pubDate><slash:comments>0</slash:comments><wfw:commentRss>http://ww2.nutechs.com/hosting/msobczak/Blogs/BlogSphere-1_0_2/LordLotusBlog.nsf/CommentsRSS?Open&amp;id=EB26B71E21A432E6852570670077BE15</wfw:commentRss><wfw:comment>http://ww2.nutechs.com/hosting/msobczak/Blogs/BlogSphere-1_0_2/LordLotusBlog.nsf/PostComment?RunAgent&amp;id=EB26B71E21A432E6852570670077BE15</wfw:comment></item><item><title>Blocking referrer spammers</title><link>http://ww2.nutechs.com/hosting/msobczak/Blogs/BlogSphere-1_0_2/LordLotusBlog.nsf/d6plinks/MSOK-6EQGWC</link><description><![CDATA[ Way back in February, Rocky Oliver posted on his blog that he had given up trying to block referrer spammers from his blog.  As another BlogSphere template blogger, I have also been fighting with this problem.  Well, I came up with a solution that I think ...]]></description><dc:subject>Notes Development</dc:subject><dc:creator>Michael Sobczak</dc:creator><comments>http://ww2.nutechs.com/hosting/msobczak/Blogs/BlogSphere-1_0_2/LordLotusBlog.nsf/d6plinks/MSOK-6EQGWC</comments><guid isPermaLink="true">http://ww2.nutechs.com/hosting/msobczak/Blogs/BlogSphere-1_0_2/LordLotusBlog.nsf/d6plinks/MSOK-6EQGWC</guid><content:encoded><![CDATA[ Way back in February, Rocky Oliver <a href="http://www.lotusgeek.com/SapphireOak/LotusGeekBlog.nsf/d6plinks/ROLR-69TLHY" target="_blank">posted</a> on his blog that he had given up trying to block referrer spammers from his blog.  As another BlogSphere template blogger, I have also been fighting with this problem.  Well, I came up with a solution that I think will work.  
<br><br>
The problem with trying to block each individual IP address (or the CGI Remote_Addr variable) that the referrer spammer uses is that it is easy for the spammers to set up a new host address on their own network.  In some cases, the frequency with which the host addresses change leads me to believe that this constitutes someone's actual job.  Once you add one IP address to the referrer blocker profile document, all the spammer needs to do is create a new host address on their network, and they're back in business.  To combat this technique, I modified the agent in the BlogSphere template that records incoming referrers to block any incoming IP address where the network part of the IP address matches the network part of any IP address I'm blocking.  If I find a match, I don't create a referrer document.  I do log the blocked IP address in the Agent Log set up on my blog's host server.  That way, I can check the Agent Log periodically to see if I'm accidentally blocking a reffer I really want to go through.  So, I effectively relegate the blocked referrer clutter to the Agent Log, not my blog.  And since the Agent Log is set up to purge stuff after 30 days, the clutter is kept to a manageable level.
<br><br>
My thought here was that while it costs nothing for the referrer spammer to set up a new host address, setting up a new network address takes more effort.  After three days, the amount of referrer spam my blog has been receiving has been cut to almost none.  I've included the modified version of the (Get Visitor Info) agent below.  Keep in mind that I'm still using the 1.0.2 version of BlogSphere.  If this technique is already in the latest version of the template, someone please let me know if I'm being highly irrelevant here.]]></content:encoded><pubDate>Tue, 26 Jul 2005 00:00:00 -0400</pubDate><slash:comments>0</slash:comments><wfw:commentRss>http://ww2.nutechs.com/hosting/msobczak/Blogs/BlogSphere-1_0_2/LordLotusBlog.nsf/CommentsRSS?Open&amp;id=F1A1BE0C76494E238525704C0045C581</wfw:commentRss><wfw:comment>http://ww2.nutechs.com/hosting/msobczak/Blogs/BlogSphere-1_0_2/LordLotusBlog.nsf/PostComment?RunAgent&amp;id=F1A1BE0C76494E238525704C0045C581</wfw:comment></item><item><title>Too Funky: error 4151 - The Document is not in View [insert view name here]</title><link>http://ww2.nutechs.com/hosting/msobczak/Blogs/BlogSphere-1_0_2/LordLotusBlog.nsf/d6plinks/MSOK-6E9R3V</link><description><![CDATA[ I created an agent that loops through some documents in a view using NotesView.GetFirstDocument and NotesView.GetNextDocument ( doc ).  I added an action button to the same view that runs the agent using @Command ( &lsqb;ToolsRunMacro&rsqb; ).  The agent would process ...]]></description><dc:subject>Notes Development</dc:subject><dc:creator>Michael Sobczak</dc:creator><comments>http://ww2.nutechs.com/hosting/msobczak/Blogs/BlogSphere-1_0_2/LordLotusBlog.nsf/d6plinks/MSOK-6E9R3V</comments><guid isPermaLink="true">http://ww2.nutechs.com/hosting/msobczak/Blogs/BlogSphere-1_0_2/LordLotusBlog.nsf/d6plinks/MSOK-6E9R3V</guid><content:encoded><![CDATA[ I created an agent that loops through some documents in a view using NotesView.GetFirstDocument and NotesView.GetNextDocument ( doc ).  I added an action button to the same view that runs the agent using @Command ( &lsqb;ToolsRunMacro&rsqb; ).  The agent would process the first document just fine, but would give the above error when I tried to get the next document.  I was naturally puzzled, as it looked like I had coded my Do Loop just fine.
<br><br>
It turns out that when the view object is instantiated by the agent, it is cached.  This leads to the error being produced when the code attempts to get the next document.  (See <a href="http://www-10.lotus.com/ldd/nd6forum.nsf/55c38d716d632d9b8525689b005ba1c0/85884631db43206585256e0d00119d39?OpenDocument" target="_blank">this entry</a> from Andre Guirard's in the Notes Domino 6 Forum.)  It turns out that the answer is to use ViewEntry objects to cycle through the entries in this view.  I never would have guessed this.  The Notes/Domino 6 Forum wins again!]]></content:encoded><pubDate>Wed, 13 Jul 2005 15:40:30 -0400</pubDate><slash:comments>1</slash:comments><wfw:commentRss>http://ww2.nutechs.com/hosting/msobczak/Blogs/BlogSphere-1_0_2/LordLotusBlog.nsf/CommentsRSS?Open&amp;id=DC56671AD3316A2D8525703D006C13F0</wfw:commentRss><wfw:comment>http://ww2.nutechs.com/hosting/msobczak/Blogs/BlogSphere-1_0_2/LordLotusBlog.nsf/PostComment?RunAgent&amp;id=DC56671AD3316A2D8525703D006C13F0</wfw:comment></item><item><title>Tres Bizarre: Shared, contains deleted documents view type not available</title><link>http://ww2.nutechs.com/hosting/msobczak/Blogs/BlogSphere-1_0_2/LordLotusBlog.nsf/d6plinks/MSOK-6CPSPM</link><description><![CDATA[ Hey, here's a new twist for you Notes fans out there...

One of my customers needs to be able to restore deleted documents.  The easiest way to do this is to enable Soft Deletions and add a view that will display all softly deleted documents.  Well, the ...]]></description><dc:subject>Notes Development</dc:subject><dc:creator>Michael Sobczak</dc:creator><comments>http://ww2.nutechs.com/hosting/msobczak/Blogs/BlogSphere-1_0_2/LordLotusBlog.nsf/d6plinks/MSOK-6CPSPM</comments><guid isPermaLink="true">http://ww2.nutechs.com/hosting/msobczak/Blogs/BlogSphere-1_0_2/LordLotusBlog.nsf/d6plinks/MSOK-6CPSPM</guid><content:encoded><![CDATA[ Hey, here's a new twist for you Notes fans out there...
<br><br>
One of my customers needs to be able to restore deleted documents.  The easiest way to do this is to enable Soft Deletions and add a view that will display all softly deleted documents.  Well, the <b>Shared, contains deleted documents</b> view type is not available in the database template's drop-down menu:
<br><br>
<img src="CreateNewView1.jpg" alt="Shared, contains deleted documents view type is not available">
<br><br>
The view type is available in another database I have access to:
<br><br>
<img src="CreateNewView2.jpg" alt="Shared, contains deleted documents view type is available">
<br><br>
As near as I can figure, creating this special view type is not an option for a template (.ntf) when using Notes R5.  I can do this in Notes 6.5.4 no problem.  Guess I learned something new today.  Seems odd that you can't do this in a template.  If you had 50 dbs created off of one template, and needed to add soft deletions to all of them, the natural thing to do would be to add the special view to the template, and not all 50 dbs individually.]]></content:encoded><pubDate>Tue, 24 May 2005 17:03:19 -0400</pubDate><slash:comments>0</slash:comments><wfw:commentRss>http://ww2.nutechs.com/hosting/msobczak/Blogs/BlogSphere-1_0_2/LordLotusBlog.nsf/CommentsRSS?Open&amp;id=1B992DDED95A97F38525700B0073A945</wfw:commentRss><wfw:comment>http://ww2.nutechs.com/hosting/msobczak/Blogs/BlogSphere-1_0_2/LordLotusBlog.nsf/PostComment?RunAgent&amp;id=1B992DDED95A97F38525700B0073A945</wfw:comment></item><item><title>Expiring document locks</title><link>http://ww2.nutechs.com/hosting/msobczak/Blogs/BlogSphere-1_0_2/LordLotusBlog.nsf/d6plinks/MSOK-6C9J9V</link><description><![CDATA[ An application I'm currently supporting for a customer requires document locking to be enabled.  One factor of document locking that I'd like to address is document locks being retained indefinitely.  This could happen if a user manually locks a document (via ...]]></description><dc:subject>Notes Development</dc:subject><dc:creator>Michael Sobczak</dc:creator><comments>http://ww2.nutechs.com/hosting/msobczak/Blogs/BlogSphere-1_0_2/LordLotusBlog.nsf/d6plinks/MSOK-6C9J9V</comments><guid isPermaLink="true">http://ww2.nutechs.com/hosting/msobczak/Blogs/BlogSphere-1_0_2/LordLotusBlog.nsf/d6plinks/MSOK-6C9J9V</guid><content:encoded><![CDATA[ An application I'm currently supporting for a customer requires document locking to be enabled.  One factor of document locking that I'd like to address is document locks being retained indefinitely.  This could happen if a user manually locks a document (via the Actions menu) and forgets to manually unlock it when the lock is no longer needed, or if their Notes client crashes while they are in the process of editing a document (not that that ever happens!).  I'd like to write an agent that expires a document lock after a certain period of time, but have no basis for what that period of time should be.  Have you implemented document locking?  If so, how did you address expiring document locks?]]></content:encoded><pubDate>Tue, 10 May 2005 09:51:42 -0400</pubDate><slash:comments>0</slash:comments><wfw:commentRss>http://ww2.nutechs.com/hosting/msobczak/Blogs/BlogSphere-1_0_2/LordLotusBlog.nsf/CommentsRSS?Open&amp;id=2560AD3B2BFBB32785256FFD004C2501</wfw:commentRss><wfw:comment>http://ww2.nutechs.com/hosting/msobczak/Blogs/BlogSphere-1_0_2/LordLotusBlog.nsf/PostComment?RunAgent&amp;id=2560AD3B2BFBB32785256FFD004C2501</wfw:comment></item><item><title></title><link>http://ww2.nutechs.com/hosting/msobczak/Blogs/BlogSphere-1_0_2/LordLotusBlog.nsf/d6plinks/MSOK-6C2NPC</link><description><![CDATA[ Sure would have been nice if that would have been mentioned in the Help doco.  Instead, I'll have to use this non-elegant column formula in my view:

varWriters := @Name ( [CN]; ( $Writers + $PWriters + $PTWriters ) );
@If(@IsAvailable($Writers) | ...]]></description><dc:subject>Notes Development</dc:subject><dc:creator>Michael Sobczak</dc:creator><comments>http://ww2.nutechs.com/hosting/msobczak/Blogs/BlogSphere-1_0_2/LordLotusBlog.nsf/d6plinks/MSOK-6C2NPC</comments><guid isPermaLink="true">http://ww2.nutechs.com/hosting/msobczak/Blogs/BlogSphere-1_0_2/LordLotusBlog.nsf/d6plinks/MSOK-6C2NPC</guid><content:encoded><![CDATA[ Sure would have been nice if that would have been mentioned in the Help doco.  Instead, I'll have to use this non-elegant column formula in my view:
<br><br>
varWriters := @Name ( [CN]; ( $Writers + $PWriters + $PTWriters ) );
@If(@IsAvailable($Writers) | @IsAvailable($PWriters) | @IsAvailable($PTWriters); varWriters; "")]]></content:encoded><pubDate>Fri, 29 Apr 2005 00:00:00 -0400</pubDate><slash:comments>2</slash:comments><wfw:commentRss>http://ww2.nutechs.com/hosting/msobczak/Blogs/BlogSphere-1_0_2/LordLotusBlog.nsf/CommentsRSS?Open&amp;id=0BFE046832A06DA085256FF60060DFC7</wfw:commentRss><wfw:comment>http://ww2.nutechs.com/hosting/msobczak/Blogs/BlogSphere-1_0_2/LordLotusBlog.nsf/PostComment?RunAgent&amp;id=0BFE046832A06DA085256FF60060DFC7</wfw:comment></item><item><title>Better HTML rendering my eye</title><link>http://ww2.nutechs.com/hosting/msobczak/Blogs/BlogSphere-1_0_2/LordLotusBlog.nsf/d6plinks/MSOK-6BRRAV</link><description><![CDATA[ I just upgraded to Notes 6.5.4, and the Notes client still does not let you change checkbox fields created using pass-thru ...]]></description><dc:subject>Notes Development</dc:subject><dc:creator>Michael Sobczak</dc:creator><comments>http://ww2.nutechs.com/hosting/msobczak/Blogs/BlogSphere-1_0_2/LordLotusBlog.nsf/d6plinks/MSOK-6BRRAV</comments><guid isPermaLink="true">http://ww2.nutechs.com/hosting/msobczak/Blogs/BlogSphere-1_0_2/LordLotusBlog.nsf/d6plinks/MSOK-6BRRAV</guid><content:encoded><![CDATA[ I just upgraded to Notes 6.5.4, and the Notes client still does not let you change checkbox fields created using pass-thru HTML:
<br><br>
<img src="CheckboxesNotEditableSmall.jpg" alt="Pass-thru html checkbox fields still not editable within a Notes document">]]></content:encoded><pubDate>Sun, 24 Apr 2005 15:51:43 -0400</pubDate><slash:comments>0</slash:comments><wfw:commentRss>http://ww2.nutechs.com/hosting/msobczak/Blogs/BlogSphere-1_0_2/LordLotusBlog.nsf/CommentsRSS?Open&amp;id=A7C2ED75E8393E8A85256FED006D1B36</wfw:commentRss><wfw:comment>http://ww2.nutechs.com/hosting/msobczak/Blogs/BlogSphere-1_0_2/LordLotusBlog.nsf/PostComment?RunAgent&amp;id=A7C2ED75E8393E8A85256FED006D1B36</wfw:comment></item><item><title>More Soft Deletions wackiness</title><link>http://ww2.nutechs.com/hosting/msobczak/Blogs/BlogSphere-1_0_2/LordLotusBlog.nsf/d6plinks/MSOK-6C2NLW</link><description><![CDATA[ I was leisurly scanning through the 769 fixes listed for Notes/Domino 6.5.4 and ran across this tidbit.  And here I thought soft detetions had been getting along famously since 6.0 was released:

SPR# ADEE5ZTF2K

Lotus Customer Support Technote: ...]]></description><dc:subject>Notes Development</dc:subject><dc:creator>Michael Sobczak</dc:creator><comments>http://ww2.nutechs.com/hosting/msobczak/Blogs/BlogSphere-1_0_2/LordLotusBlog.nsf/d6plinks/MSOK-6C2NLW</comments><guid isPermaLink="true">http://ww2.nutechs.com/hosting/msobczak/Blogs/BlogSphere-1_0_2/LordLotusBlog.nsf/d6plinks/MSOK-6C2NLW</guid><content:encoded><![CDATA[ I was leisurly scanning through the 769 fixes listed for Notes/Domino 6.5.4 and ran across this tidbit.  And here I thought soft detetions had been getting along famously since 6.0 was released:
<br><br>
<b>SPR# ADEE5ZTF2K</b>
<br><br>
Lotus Customer Support Technote: 1169807
<br><br>
The Soft Delete duration value was not working at the specified time. Internally in Notes/Domino, the soft delete duration value is stored in two different places. One of the places the soft delete duration value is stored is in the Icon note of the database. The Icon note is what replicates around to other servers. This is also where the value that displays in the Database Properties dialog box is extracted from when looking at the Database Properties.
<br><br>
The other place that the soft delete duration value is stored is the SoftDeleteRetainDuration field in the database header. This field is what the software actually uses when determining how long to hold documents in the Trash folder. The problem of documents being removed after the default 48 hours even though you changed the time to something else occurs because this field reverts back to the default 48 hours once the design task runs on the database.
<br><br>
Therefore, when looking at the value in Notes or DWA, the value you are looking at is what was initially changed by the user, not the value that is actually stored in the SoftDeleteRetainDuration field. The fix prevents the SoftDeleteRetainDuration getting overwritten when Design task runs.
<br><br>
This problem has been fixed in 6.0.5, 6.5.4, and 6.5.3 FP1EE5ZTF2K 
<br><br>
]]></content:encoded><pubDate>Fri, 22 Apr 2005 00:00:00 -0400</pubDate><slash:comments>1</slash:comments><wfw:commentRss>http://ww2.nutechs.com/hosting/msobczak/Blogs/BlogSphere-1_0_2/LordLotusBlog.nsf/CommentsRSS?Open&amp;id=41CAEFB021EC26DD85256FF6006084EC</wfw:commentRss><wfw:comment>http://ww2.nutechs.com/hosting/msobczak/Blogs/BlogSphere-1_0_2/LordLotusBlog.nsf/PostComment?RunAgent&amp;id=41CAEFB021EC26DD85256FF6006084EC</wfw:comment></item><item><title>No notesAdministrationProcess.RemoveGroupMembers() method???</title><link>http://ww2.nutechs.com/hosting/msobczak/Blogs/BlogSphere-1_0_2/LordLotusBlog.nsf/d6plinks/MSOK-6BGPH4</link><description><![CDATA[ Boy, I can't believe this one.  Notes 6 gives you a way to add members to a group but not remove them?  What, did the budget suddenly dry up and there wasn't $50 to cover the cost of adding this obvious method to this new class?  Sheesh!  I guess I'll just ...]]></description><dc:subject>Notes Development</dc:subject><dc:creator>Michael Sobczak</dc:creator><comments>http://ww2.nutechs.com/hosting/msobczak/Blogs/BlogSphere-1_0_2/LordLotusBlog.nsf/d6plinks/MSOK-6BGPH4</comments><guid isPermaLink="true">http://ww2.nutechs.com/hosting/msobczak/Blogs/BlogSphere-1_0_2/LordLotusBlog.nsf/d6plinks/MSOK-6BGPH4</guid><content:encoded><![CDATA[ Boy, I can't believe this one.  Notes 6 gives you a way to add members to a group but not remove them?  What, did the budget suddenly dry up and there wasn't $50 to cover the cost of adding this obvious method to this new class?  Sheesh!  I guess I'll just have to write my own Lotusscript code to manage group members...]]></content:encoded><pubDate>Fri, 15 Apr 2005 14:19:17 -0400</pubDate><slash:comments>0</slash:comments><wfw:commentRss>http://ww2.nutechs.com/hosting/msobczak/Blogs/BlogSphere-1_0_2/LordLotusBlog.nsf/CommentsRSS?Open&amp;id=C4E43EF2A7ADDAD985256FE40064A478</wfw:commentRss><wfw:comment>http://ww2.nutechs.com/hosting/msobczak/Blogs/BlogSphere-1_0_2/LordLotusBlog.nsf/PostComment?RunAgent&amp;id=C4E43EF2A7ADDAD985256FE40064A478</wfw:comment></item><item><title>Cool Tool: Teamstudio Script Browser</title><link>http://ww2.nutechs.com/hosting/msobczak/Blogs/BlogSphere-1_0_2/LordLotusBlog.nsf/d6plinks/MSOK-6B5VQZ</link><description><![CDATA[ I posted a wish list item in the Business Partner Forum today, asking for the ability to be able to see class members in the Domino Designer Programmer's Pane, and I got some great information back.  I was not aware that there were two presentations given at ...]]></description><dc:subject>Notes Development</dc:subject><dc:creator>Michael Sobczak</dc:creator><comments>http://ww2.nutechs.com/hosting/msobczak/Blogs/BlogSphere-1_0_2/LordLotusBlog.nsf/d6plinks/MSOK-6B5VQZ</comments><guid isPermaLink="true">http://ww2.nutechs.com/hosting/msobczak/Blogs/BlogSphere-1_0_2/LordLotusBlog.nsf/d6plinks/MSOK-6B5VQZ</guid><content:encoded><![CDATA[ I posted a wish list item in the Business Partner Forum today, asking for the ability to be able to see class members in the Domino Designer Programmer's Pane, and I got some great information back.  I was not aware that there were two presentations given at this year's LotuSphere on creating custom Lotusscript classes:
<ul>
<li>BP107 Best Practices for Object Oriented LotusScript - <a href="http://www.billbuchan.com" target="_top">Bill Buchan</a></li>
<li>AD211 Leveraging the Power of Object Oriented Programming in LotusScript - Jens Augustiny</li>
</ul>
Justin Freeman also directed me to <a href="http://www.ddextensions.com/ target="_blank">LS Class Buddy</a>, a relatively cheep utility that provides substantial help with custom Lotusscript classes.  And then, in what I can only describe as a moment of serindipity, Bill Buchan mentioned that Teamstudio would be releasing a free utility tomorrow to help in this regard.
<br><br>
Fast-forwarding one day, I downloaded <a href="http://www.teamstudio.com/ScriptBrowser" target="_blank">Script Browser</a> from Teamstudio.  What a great tool.  Here's a picture:
<br><br>
<img src="TeamstudioScriptBrowser-1_0.jpg" alt="Teamstudio Script Browser">
<br><br>
For a free tool, Script Browser does an excellent job.  Just saving me from endless scrolling to find the method I want is a life-saver.  Thank you, Craig Schumann!]]></content:encoded><pubDate>Wed, 30 Mar 2005 00:00:00 -0400</pubDate><slash:comments>0</slash:comments><wfw:commentRss>http://ww2.nutechs.com/hosting/msobczak/Blogs/BlogSphere-1_0_2/LordLotusBlog.nsf/CommentsRSS?Open&amp;id=63EE39CBD54B3A9685256FD90081EC2B</wfw:commentRss><wfw:comment>http://ww2.nutechs.com/hosting/msobczak/Blogs/BlogSphere-1_0_2/LordLotusBlog.nsf/PostComment?RunAgent&amp;id=63EE39CBD54B3A9685256FD90081EC2B</wfw:comment></item><item><title>Use DesignNoInitialInfobox Notes.ini parameter to eliminate annoying Domino Designer behavior</title><link>http://ww2.nutechs.com/hosting/msobczak/Blogs/BlogSphere-1_0_2/LordLotusBlog.nsf/d6plinks/MSOK-6AXNPM</link><description><![CDATA[ There is a Notes.ini setting you can use to disable the properties box from automatically appearing when you open a design element in Domino Designer, like a view or an agent:

DesignNoInitialInfobox=1

Thanks go out to  Bill Ernest of Teamwork Solutions ...]]></description><dc:subject>Notes Development</dc:subject><dc:creator>Michael Sobczak</dc:creator><comments>http://ww2.nutechs.com/hosting/msobczak/Blogs/BlogSphere-1_0_2/LordLotusBlog.nsf/d6plinks/MSOK-6AXNPM</comments><guid isPermaLink="true">http://ww2.nutechs.com/hosting/msobczak/Blogs/BlogSphere-1_0_2/LordLotusBlog.nsf/d6plinks/MSOK-6AXNPM</guid><content:encoded><![CDATA[ There is a Notes.ini setting you can use to disable the properties box from automatically appearing when you open a design element in Domino Designer, like a view or an agent:
<br><br>
DesignNoInitialInfobox=1
<br><br>
Thanks go out to  Bill Ernest of <a href="http://www.teamsol.com" target="_blank">Teamwork Solutions</a> for posting this in the Partner Forum 2005 Notes database.]]></content:encoded><pubDate>Tue, 29 Mar 2005 13:38:32 -0400</pubDate><slash:comments>0</slash:comments><wfw:commentRss>http://ww2.nutechs.com/hosting/msobczak/Blogs/BlogSphere-1_0_2/LordLotusBlog.nsf/CommentsRSS?Open&amp;id=38548701070BD81A85256FD30060E975</wfw:commentRss><wfw:comment>http://ww2.nutechs.com/hosting/msobczak/Blogs/BlogSphere-1_0_2/LordLotusBlog.nsf/PostComment?RunAgent&amp;id=38548701070BD81A85256FD30060E975</wfw:comment></item><item><title>Formula language clearinghouse</title><link>http://ww2.nutechs.com/hosting/msobczak/Blogs/BlogSphere-1_0_2/LordLotusBlog.nsf/d6plinks/MSOK-6ALJLV</link><description><![CDATA[ A customer of mine asked me to come up with some formula code that would determine the amount of time that has elapsed since a piece of equipment was originally purchased.  This value needed to be displayed in years, months and days (ex: "1 year, 2 months, 9 ...]]></description><dc:subject>Notes Development</dc:subject><dc:creator>Michael Sobczak</dc:creator><comments>http://ww2.nutechs.com/hosting/msobczak/Blogs/BlogSphere-1_0_2/LordLotusBlog.nsf/d6plinks/MSOK-6ALJLV</comments><guid isPermaLink="true">http://ww2.nutechs.com/hosting/msobczak/Blogs/BlogSphere-1_0_2/LordLotusBlog.nsf/d6plinks/MSOK-6ALJLV</guid><content:encoded><![CDATA[ A customer of mine asked me to come up with some formula code that would determine the amount of time that has elapsed since a piece of equipment was originally purchased.  This value needed to be displayed in years, months and days (ex: "1 year, 2 months, 9 days").  Instead of searching the web for something like this, I decided to write it myself from scratch.  Why?  I figured that searching for code that would do this, or something similar to this, would take longer than the 1/2 hour it would probably take me to write the formula code myself.  While I was able to come up with this formula (see the Read More link below), I wondered why there isn't some sort of "formula language clearinghouse" where Notes developers could go to search for pre-written formulas that could do what they need, or post their own contributions.  Although I my memory may be faulty after all this time, I thought there used to be a "Lotus Learning Center" database that was available on Notes.Net or somewhere, that came with sample function and Lotusscript code in it.  
<br><br>
Several Notes bloggers do have nicely categorized tips sections of their sites that include sample code, like <a href="http://www.andrewbarker.com" target="_blank">Andrew Barker</a> and <a href="http://www.breakingpar.com" target="_blank">Matt Holthe</a>.  And there are others, like <a href="http://www.codestore.net" target="_blank">Jake Howlett's blog</a>, which have sundry code samples stored in a more-or-less Persian bazaar fashion.  (The Lotus Advisor has built a great collection of formula tips over the years, but you have to be a paid subscriber to access any of them.)  While I and many other Notes developers greatly appreciate the contributions that these and many bloggers make freely available, it would be nice if there was some central index to it all, so developers like myself wouldn't need to search everywhere for a function that probably already exists.  The source code itself wouldn't need to be reentered into this new index; the index entry can point to the source blog or website where it resides.  All that would be needed is a short description of the code itself, and where to find it.
<br><br>
While I hate to dump work on other people, my initial thought is that <a href="http://www.OpenNTF.org" target="_blank">OpenNTF.org</a> would be the logical destination for this stuff.  All that would be needed would be to expand their charter so that they would provide sample code in addition to sample applications.  What do you think?]]></content:encoded><pubDate>Thu, 17 Mar 2005 00:00:00 -0400</pubDate><slash:comments>0</slash:comments><wfw:commentRss>http://ww2.nutechs.com/hosting/msobczak/Blogs/BlogSphere-1_0_2/LordLotusBlog.nsf/CommentsRSS?Open&amp;id=E2C3032822B02A0285256FC8004DC1A6</wfw:commentRss><wfw:comment>http://ww2.nutechs.com/hosting/msobczak/Blogs/BlogSphere-1_0_2/LordLotusBlog.nsf/PostComment?RunAgent&amp;id=E2C3032822B02A0285256FC8004DC1A6</wfw:comment></item><item><title>No way to programmatically refresh the design of a database?</title><link>http://ww2.nutechs.com/hosting/msobczak/Blogs/BlogSphere-1_0_2/LordLotusBlog.nsf/d6plinks/MSOK-6AAHK7</link><description><![CDATA[ I could have sworn that there was a way to refresh a database's design using Lotusscript.  It turned out I was thinking of the NotesDatabase.CreateFromTemplate() method.  I'm surprised that there isn't a way to do a design refresh from within Lotusscript.  ...]]></description><dc:subject>Notes Development</dc:subject><dc:creator>Michael Sobczak</dc:creator><comments>http://ww2.nutechs.com/hosting/msobczak/Blogs/BlogSphere-1_0_2/LordLotusBlog.nsf/d6plinks/MSOK-6AAHK7</comments><guid isPermaLink="true">http://ww2.nutechs.com/hosting/msobczak/Blogs/BlogSphere-1_0_2/LordLotusBlog.nsf/d6plinks/MSOK-6AAHK7</guid><content:encoded><![CDATA[ I could have sworn that there was a way to refresh a database's design using Lotusscript.  It turned out I was thinking of the NotesDatabase.CreateFromTemplate() method.  I'm surprised that there isn't a way to do a design refresh from within Lotusscript.  Seems like it would be an easy thing to do.  All you'd need to pass in is the server name, and the method could return back true or false as to whether the design refresh succeeded or not.]]></content:encoded><pubDate>Mon, 7 Mar 2005 00:00:00 -0400</pubDate><slash:comments>0</slash:comments><wfw:commentRss>http://ww2.nutechs.com/hosting/msobczak/Blogs/BlogSphere-1_0_2/LordLotusBlog.nsf/CommentsRSS?Open&amp;id=1E5DBBD1364D803685256FBE0048D33B</wfw:commentRss><wfw:comment>http://ww2.nutechs.com/hosting/msobczak/Blogs/BlogSphere-1_0_2/LordLotusBlog.nsf/PostComment?RunAgent&amp;id=1E5DBBD1364D803685256FBE0048D33B</wfw:comment></item><item><title>The Ready-Aim-Fire! development method, and why it should be abolished.</title><link>http://ww2.nutechs.com/hosting/msobczak/Blogs/BlogSphere-1_0_2/LordLotusBlog.nsf/d6plinks/MSOK-69ZT34</link><description><![CDATA[ Sometimes I get upset (well, moderately unhappy) at situations where I'm expected to make coding changes directly in production applications.  Coming from a computer science background, and having done other types of coding besides Notes, the desirability of ...]]></description><dc:subject>Notes Development</dc:subject><dc:creator>Michael Sobczak</dc:creator><comments>http://ww2.nutechs.com/hosting/msobczak/Blogs/BlogSphere-1_0_2/LordLotusBlog.nsf/d6plinks/MSOK-69ZT34</comments><guid isPermaLink="true">http://ww2.nutechs.com/hosting/msobczak/Blogs/BlogSphere-1_0_2/LordLotusBlog.nsf/d6plinks/MSOK-69ZT34</guid><content:encoded><![CDATA[ Sometimes I get upset (well, moderately unhappy) at situations where I'm expected to make coding changes directly in production applications.  Coming from a computer science background, and having done other types of coding besides Notes, the desirability of this approach puzzles me.  Of course, we all know where this approach originates...  For years, back in Notes' glory days (R3 and R4), Notes was sold as a Rapid Application Development (RAD) platform.  You could whip up an application in a couple of hours and put it into production in seconds.  Bug in the code?  Enhancements needed?  No problem, just change the code <b>live</b>.  After all, this isn't SAP, or Oracle, or DB2, or whatever we're talking about.  Its <i>just Notes</i>.
<br><br>
I guess after all of the time I've spent with Notes over the years I should have learned to live with, like realizing that I will probably never write the great American novel, but I haven't.  Not when customers tell me how important the application is to their organization/department/group.  If the application is that important, why not test out changes first in a test or development database?  Won't things look worse when something changed in production doesn't work due to a coding error, or doesn't work as desired, and people call or e-mail asking why they're getting this strange error?  Sigh.  Some things never change.
<br><br>
At the recent <a href="http://www.nutechs.com/NuTechsWeb/pages/newsarticle.jsp?unid=34EFE3E41E56E62085256F900064E1A6&dbname=website/content.nsf&dbserver=CN=NuTechsHQ02/O=NuTechs" target="_blank">NuTechs seminar</a>, <a href="http://www.dominounplugged.com" target="_blank">Rob Wunderlich</a> was giving a recap of a presentation made by <a href="http://www.edbrill.com" target="_blank">Ed Brill</a> and <a href="http://www.notesgirl.com/NotesGirl/NotesGirl.nsf" target="_blank">Libby Schwartz</a> at LotuSphere (STR106 How to "Sell " Lotus Notes and Domino Inside Your Organization), about how little respect Notes gets in some organizations, and as a Notes developer, I feel that the above scenario is the main reason.  People just don't treat the Notes application development process with the same level of respect and caution as they would with any other system.  And what happens as a result?  Shoddy applications that don't work well and are frustrating to use.
<br><br>
Oh well, I'll never give up on having that dream date with <a href="http://www.alyssa.com/" target="_blank">Alyssa Milano</a>, either!]]></content:encoded><pubDate>Sun, 27 Feb 2005 00:00:00 -0400</pubDate><slash:comments>0</slash:comments><wfw:commentRss>http://ww2.nutechs.com/hosting/msobczak/Blogs/BlogSphere-1_0_2/LordLotusBlog.nsf/CommentsRSS?Open&amp;id=801770283E9253C085256FB500755811</wfw:commentRss><wfw:comment>http://ww2.nutechs.com/hosting/msobczak/Blogs/BlogSphere-1_0_2/LordLotusBlog.nsf/PostComment?RunAgent&amp;id=801770283E9253C085256FB500755811</wfw:comment></item><item><title>Wrap a checkbox or radio button value?  Only in your dreams...</title><link>http://ww2.nutechs.com/hosting/msobczak/Blogs/BlogSphere-1_0_2/LordLotusBlog.nsf/d6plinks/MSOK-69ZSWK</link><description><![CDATA[ There is no way to control wrapping for Notes checkbox fields that I know of.  The value always appears on one line.  Customers I've worked for over the years have asked me if there is anything that can be done about this, but as you know and I know, there ...]]></description><dc:subject>Notes Development</dc:subject><dc:creator>Michael Sobczak</dc:creator><comments>http://ww2.nutechs.com/hosting/msobczak/Blogs/BlogSphere-1_0_2/LordLotusBlog.nsf/d6plinks/MSOK-69ZSWK</comments><guid isPermaLink="true">http://ww2.nutechs.com/hosting/msobczak/Blogs/BlogSphere-1_0_2/LordLotusBlog.nsf/d6plinks/MSOK-69ZSWK</guid><content:encoded><![CDATA[ There is no way to control wrapping for Notes checkbox fields that I know of.  The value always appears on one line.  Customers I've worked for over the years have asked me if there is anything that can be done about this, but as you know and I know, there isn't.  Why IBM Lotus hasn't ever given us the ability to do some sort of wrapping with a radio or checkbox field after all this time is a mystery that will never be solved.
<br><br>
Well, I thought of another way around this problem today: re-create the checkboxes as pass-thru HTML tags, and render the pass-thru HTML tags in the Notes client.  This works, but for some odd reason, the checkboxes <i>are not editable</i> when the document is in edit mode (!).  Needless to say, I was not amused by this shortcoming.  Why update the Notes client so that it can render pass-thru HTML, and not make that HTML anything but read only???
<br><br>
At first, this approach may seem like a maintenance nightmare.  Not so!  If you get the checkbox values from either keyword documents or a profile document, and use the new looping constructs (For, While, Do) in a Computed for Display field or a Computed Text to build the HTML on the fly, this can be a somewhat elegant solution to a befuddling problem.
<br><br>
I'd like to dig around a bit more to see if/why pass-thru HTML checkbox fields aren't editable in the Notes client.  It seems like they should be, but then again, this is Notes.  ; + )]]></content:encoded><pubDate>Thu, 24 Feb 2005 00:00:00 -0400</pubDate><slash:comments>0</slash:comments><wfw:commentRss>http://ww2.nutechs.com/hosting/msobczak/Blogs/BlogSphere-1_0_2/LordLotusBlog.nsf/CommentsRSS?Open&amp;id=F1A343D7A29702DA85256FB50074AD7C</wfw:commentRss><wfw:comment>http://ww2.nutechs.com/hosting/msobczak/Blogs/BlogSphere-1_0_2/LordLotusBlog.nsf/PostComment?RunAgent&amp;id=F1A343D7A29702DA85256FB50074AD7C</wfw:comment></item><item><title>Upgrading your skills from 4.5 to 6.x</title><link>http://ww2.nutechs.com/hosting/msobczak/Blogs/BlogSphere-1_0_2/LordLotusBlog.nsf/d6plinks/MSOK-69QJ4K</link><description><![CDATA[ With the Notes job market has been picking up recently, I've been asked from several friends of mine who haven't worked in Notes since the 4.5 days what they can do to upgrade their skills to 6.x.  If you haven't been actively programming in the latest ...]]></description><dc:subject>Notes Development</dc:subject><dc:creator>Michael Sobczak</dc:creator><comments>http://ww2.nutechs.com/hosting/msobczak/Blogs/BlogSphere-1_0_2/LordLotusBlog.nsf/d6plinks/MSOK-69QJ4K</comments><guid isPermaLink="true">http://ww2.nutechs.com/hosting/msobczak/Blogs/BlogSphere-1_0_2/LordLotusBlog.nsf/d6plinks/MSOK-69QJ4K</guid><content:encoded><![CDATA[ With the Notes job market has been picking up recently, I've been asked from several friends of mine who haven't worked in Notes since the 4.5 days what they can do to upgrade their skills to 6.x.  If you haven't been actively programming in the latest releases of Notes over the past five years, a lot has changed since 4.5.  There have been three major releases since then: 5.0, 6.0 and 6.5.
<br><br>
Two things a person can do to get up to speed are to read some of the IBM Redbooks on Notes/Domino development and take some training.  Here are two Redbooks which will show you what's changed in each new release:
<br><br>
<a href="http://www.redbooks.ibm.com/abstracts/sg245331.html?Open" target="_blank">Lotus Domino Release 5.0: A Developer's Handbook</a>
<br><br>
<a href="http://www.redbooks.ibm.com/abstracts/sg246854.html?Open" target="_blank">Domino Designer 6: A Developer's Handbook</a>
 <br><br>
Both of these books are free.
<br><br>
Depending on your budget, I also recommend taking some distance learning courses from <a href="www.tlcc.com" target="_blank">TLCC</a>.  They offer a <a href="http://www.tlcc.com/admin/courses.nsf/lookupcoursecode/ND6CLP?opendocument&viewname=R6Cur" target="_blank">Notes Domino 6 Certified Developer Package</a> for $1,499.  This very well priced as this package includes three courses. 
<br><br>
Most Notes jobs out there require being proficient in Lotusscript.  Being able to code in the formula language these days is not enough.
<br><br>
Finally, getting certified makes sense.  <a href="www.certfx.com" target="_blank">CertFX</a> has practice exams available that are also reasonably priced.]]></content:encoded><pubDate>Fri, 18 Feb 2005 08:43:12 -0400</pubDate><slash:comments>0</slash:comments><wfw:commentRss>http://ww2.nutechs.com/hosting/msobczak/Blogs/BlogSphere-1_0_2/LordLotusBlog.nsf/CommentsRSS?Open&amp;id=0B9473300F5F151D85256FAC004B5E0B</wfw:commentRss><wfw:comment>http://ww2.nutechs.com/hosting/msobczak/Blogs/BlogSphere-1_0_2/LordLotusBlog.nsf/PostComment?RunAgent&amp;id=0B9473300F5F151D85256FAC004B5E0B</wfw:comment></item><item><title>One major pain with templates</title><link>http://ww2.nutechs.com/hosting/msobczak/Blogs/BlogSphere-1_0_2/LordLotusBlog.nsf/d6plinks/MSOK-69QRKD</link><description><![CDATA[ If you change the design of a scheduled agent in a template, then refresh the design of the production database using the template, the scheduled agent is automatically disabled.  The same behavior happens when you add a new scheduled agent to a template.  I ...]]></description><dc:subject>Notes Development</dc:subject><dc:creator>Michael Sobczak</dc:creator><comments>http://ww2.nutechs.com/hosting/msobczak/Blogs/BlogSphere-1_0_2/LordLotusBlog.nsf/d6plinks/MSOK-69QRKD</comments><guid isPermaLink="true">http://ww2.nutechs.com/hosting/msobczak/Blogs/BlogSphere-1_0_2/LordLotusBlog.nsf/d6plinks/MSOK-69QRKD</guid><content:encoded><![CDATA[ If you change the design of a scheduled agent in a template, then refresh the design of the production database using the template, the scheduled agent is automatically disabled.  The same behavior happens when you add a new scheduled agent to a template.  I wish there was a way to check a box to "keep agent scheduled after design refresh" or something.]]></content:encoded><pubDate>Mon, 14 Feb 2005 00:00:00 -0400</pubDate><slash:comments>0</slash:comments><wfw:commentRss>http://ww2.nutechs.com/hosting/msobczak/Blogs/BlogSphere-1_0_2/LordLotusBlog.nsf/CommentsRSS?Open&amp;id=F186A3447759129085256FAC006E5AF5</wfw:commentRss><wfw:comment>http://ww2.nutechs.com/hosting/msobczak/Blogs/BlogSphere-1_0_2/LordLotusBlog.nsf/PostComment?RunAgent&amp;id=F186A3447759129085256FAC006E5AF5</wfw:comment></item><item><title>A case for templates</title><link>http://ww2.nutechs.com/hosting/msobczak/Blogs/BlogSphere-1_0_2/LordLotusBlog.nsf/d6plinks/MSOK-69QQS6</link><description><![CDATA[ One of the main tasks I do as a Senior Notes/Domino consultant is fix/enhance existing applications.  While I've been using templates since I started developing in Notes back in 1996, over the past several years the approach I've taken is to create a new ...]]></description><dc:subject>Notes Development</dc:subject><dc:creator>Michael Sobczak</dc:creator><comments>http://ww2.nutechs.com/hosting/msobczak/Blogs/BlogSphere-1_0_2/LordLotusBlog.nsf/d6plinks/MSOK-69QQS6</comments><guid isPermaLink="true">http://ww2.nutechs.com/hosting/msobczak/Blogs/BlogSphere-1_0_2/LordLotusBlog.nsf/d6plinks/MSOK-69QQS6</guid><content:encoded><![CDATA[ One of the main tasks I do as a Senior Notes/Domino consultant is fix/enhance existing applications.  While I've been using templates since I started developing in Notes back in 1996, over the past several years the approach I've taken is to create a new template for each set of design changes under development.
<br><br>
If I've never touched the database before, and there is no existing template for the database, I make a copy of the production design as a baseline template.  I give this baseline template a name of <b>Service Requests Template (1.0)</b> and a filename of <b>serreqs-1_0.ntf</b>.  I change the production database properties so that it inherits from this template.
<br><br>
If I have worked on the database before, but its been a while and I can't verify if anyone has changed the design since I last changed it, I create the next template in the sequence using a copy of the current production db's design.
<br><br>
Then, I make a copy of the baseline or current template and increase the numbers: <b>Service Requests Template (1.1)</b> and a filename of <b>serreqs-1_1.ntf</b>.  Finally, I create a copy of the production database to be used as the development environment, and change its properties to inherit from this new template.
<br><br>
This approach has several advantages:
<ol type="1" start="1">
<li>I can test my design changes in a development database that inherits its design from the new template while the production database inherits its design from the current template.  Sure, you can accomplish this without using templates, but unless you're making your changes to the live production database (a big no-no), you'll have to designate your dev db as a template and use it to refresh the design of the prod db.  But if you do that and something goes wrong, how will you restore the prod db to its original design?  If the problem is urgent, who has time to wait for the db to be restored from a backup tape?  And what if a good backup doesn't exist?</li>

<li>I can make changes to a local replica of the template, instead of a local copy of the production database.  This is very useful if the production database is several hundred mg, and I don't want to waste time making a local replica.</li>

<li>When it comes time to move the changes into production, all I need to do is change the design template name of the production database and let the Designer task make the changes for me overnight.</li>

<li>Opening a template with no documents is much faster than opening a local or server based replica of the actual production database.</li>

<li>Comparing design changes between templates using a product like <a href="http://www.teamstudio.com/tsv3/teamstudio.nsf/pages/0E6EDDE83F62A3D285256BF000623B42?opendocument&cc=us" target="_blank">TeamStudio Delta</a> is a snap.</li>
</ol>
For an excellent discussion of using Notes design templates effectively, please see Darren Qualls <a href="http://www.e-promag.com/eparchive/index.cfm?fuseaction=viewarticle&ContentID=2551&websiteid=" target="_blank">article</a> on the e-pro website.
<br><br>
I'll never forget the time when a customer told me that a view I had changed according to his requirements wasn't working.  Since I had a copy of the design I last pushed into production, I was able to use Delta and determine how the view had been changed since I last put it into production.  It turned out that the customer had changed the view himself, but "didn't remember" making a change.  Instead of pulling an "I told you so", I asked if the customer wanted the view restored to the way it was originally implemented.  Of course he did.]]></content:encoded><pubDate>Wed, 9 Feb 2005 00:00:00 -0400</pubDate><slash:comments>0</slash:comments><wfw:commentRss>http://ww2.nutechs.com/hosting/msobczak/Blogs/BlogSphere-1_0_2/LordLotusBlog.nsf/CommentsRSS?Open&amp;id=EA17733EAD4EC00585256FAC006AA9BB</wfw:commentRss><wfw:comment>http://ww2.nutechs.com/hosting/msobczak/Blogs/BlogSphere-1_0_2/LordLotusBlog.nsf/PostComment?RunAgent&amp;id=EA17733EAD4EC00585256FAC006AA9BB</wfw:comment></item><item><title>A new profile document is not a new note?</title><link>http://ww2.nutechs.com/hosting/msobczak/Blogs/BlogSphere-1_0_2/LordLotusBlog.nsf/d6plinks/MSOK-68STNJ</link><description><![CDATA[ I was working on a Lotusscript agent that needs to retrieve a value from a profile document.  I knew that when invoked this statement:

Set profile = db.GetProfileDocument ( "Profile" )

That a profile document is created.  However, I didn't know that the ...]]></description><dc:subject>Notes Development</dc:subject><dc:creator>Michael Sobczak</dc:creator><comments>http://ww2.nutechs.com/hosting/msobczak/Blogs/BlogSphere-1_0_2/LordLotusBlog.nsf/d6plinks/MSOK-68STNJ</comments><guid isPermaLink="true">http://ww2.nutechs.com/hosting/msobczak/Blogs/BlogSphere-1_0_2/LordLotusBlog.nsf/d6plinks/MSOK-68STNJ</guid><content:encoded><![CDATA[ I was working on a Lotusscript agent that needs to retrieve a value from a profile document.  I knew that when invoked this statement:
<pre>
Set profile = db.GetProfileDocument ( "Profile" )
</pre>
That a profile document is created.  However, I didn't know that the following would return False for a <i>new</i> profile document:
<pre>
If ( profile.IsNewNote ) Then
</pre>
Silly me.]]></content:encoded><pubDate>Tue, 18 Jan 2005 00:00:00 -0400</pubDate><slash:comments>0</slash:comments><wfw:commentRss>http://ww2.nutechs.com/hosting/msobczak/Blogs/BlogSphere-1_0_2/LordLotusBlog.nsf/CommentsRSS?Open&amp;id=C1BBC37E7BA1094485256F8E007830EC</wfw:commentRss><wfw:comment>http://ww2.nutechs.com/hosting/msobczak/Blogs/BlogSphere-1_0_2/LordLotusBlog.nsf/PostComment?RunAgent&amp;id=C1BBC37E7BA1094485256F8E007830EC</wfw:comment></item><item><title>Close the current document while composing a new document: why is this only possible with Lotusscript?</title><link>http://ww2.nutechs.com/hosting/msobczak/Blogs/BlogSphere-1_0_2/LordLotusBlog.nsf/d6plinks/MSOK-68STMX</link><description><![CDATA[ I've never understood why there is no way to close the current document when composing a new document using the formula language.  For those of you who've fought with this before, you already know that this does not ...]]></description><dc:subject>Notes Development</dc:subject><dc:creator>Michael Sobczak</dc:creator><comments>http://ww2.nutechs.com/hosting/msobczak/Blogs/BlogSphere-1_0_2/LordLotusBlog.nsf/d6plinks/MSOK-68STMX</comments><guid isPermaLink="true">http://ww2.nutechs.com/hosting/msobczak/Blogs/BlogSphere-1_0_2/LordLotusBlog.nsf/d6plinks/MSOK-68STMX</guid><content:encoded><![CDATA[ I've never understood why there is no way to close the current document when composing a new document using the formula language.  For those of you who've fought with this before, you already know that this does not work:
<pre>
@Command(&lsqb;FileSave&rsqb;);
@Command(&lsqb;FileCloseWindow&rsqb;);
@Command(&lsqb;Compose&rsqb;; ""; "SomeForm")
</pre>
The only way I've been able to do what I've described above is by using Lotusscript, which seems very involved for what I need to do
<pre>
Dim w As NotesUIWorkspace
Dim currUIdoc As NotesUIDocument
Dim currDoc As NotesDocument
Dim s As NotesSession
Dim db As NotesDatabase
Dim newDoc As NotesDocument
Dim newUIDoc As NotesUIDocument
Dim parentDoc As NotesDocument
	
Set w = New NotesUIWorkspace
Set currUIdoc = w.CurrentDocument
Set currDoc = currUIdoc.Document
	
currUIdoc.AutoReload = False
currUIdoc.Close
	
Set s = New NotesSession
Set db = s.CurrentDatabase
Set parentDoc = db.GetDocumentByUNID ( currDoc.ParentDocumentUNID )
	
Set newDoc = db.CreateDocument
newDoc.Form = "SomeForm"
	
newDoc.Field1 = parentDoc.Field1
newDoc.Field2 = parentDoc.Field2
.
.
.
Call newDoc.MakeResponse ( parentDoc )
Set newUIDoc = w.EditDocument ( True, newDoc )
</pre>
It seems like all that would be needed to do this using the formula language is for an @Function or @Command that closes the previous tab, whatever it is.  IBM Lotus finally gave us @UpdateFormulaContext.  Why not something like @Command(&lsqb;ClosePrecedingWindow&rsqb;)?  Programmers like myself would know that the preceding window is the document where the compose was initiated, so we wouldn't need any certainty as to what is in that preceding window.  Maybe one of you lucky folks going to LotuSphere this Sunday can pose this at the closing session for me...]]></content:encoded><pubDate>Sun, 16 Jan 2005 00:00:00 -0400</pubDate><slash:comments>0</slash:comments><wfw:commentRss>http://ww2.nutechs.com/hosting/msobczak/Blogs/BlogSphere-1_0_2/LordLotusBlog.nsf/CommentsRSS?Open&amp;id=046C87004090F4C885256F8E007819BC</wfw:commentRss><wfw:comment>http://ww2.nutechs.com/hosting/msobczak/Blogs/BlogSphere-1_0_2/LordLotusBlog.nsf/PostComment?RunAgent&amp;id=046C87004090F4C885256F8E007819BC</wfw:comment></item><item><title>Red Box of Death, I did not miss you</title><link>http://ww2.nutechs.com/hosting/msobczak/Blogs/BlogSphere-1_0_2/LordLotusBlog.nsf/d6plinks/MSOK-68C4GG</link><description><![CDATA[ I haven't seen too many "red boxes of death" since the later versions of R5 came out, and almost none in V6.x.  Well, I found a way to get one to appear:



The following code, which is executed in an action button on a response document, produces a ...]]></description><dc:subject>Notes Development</dc:subject><dc:creator>Michael Sobczak</dc:creator><comments>http://ww2.nutechs.com/hosting/msobczak/Blogs/BlogSphere-1_0_2/LordLotusBlog.nsf/d6plinks/MSOK-68C4GG</comments><guid isPermaLink="true">http://ww2.nutechs.com/hosting/msobczak/Blogs/BlogSphere-1_0_2/LordLotusBlog.nsf/d6plinks/MSOK-68C4GG</guid><content:encoded><![CDATA[ I haven't seen too many "red boxes of death" since the later versions of R5 came out, and almost none in V6.x.  Well, I found a way to get one to appear:
<br><br>
<img src="RedBoxOfDeath.jpg">
<br><br>
The following code, which is executed in an action button on a response document, produces a "Object handle is invalid" red box every time in my Notes 6.5.2 client:
<pre>
FIELD history_mfg:=history_mfg;
FIELD created:=created;

date:= @Text(@Now);

name := "";

SUBJ := "<< Quote Request Notification From MFG - Project Ref# " + req_num + " >>";

BODY := SUBJ + @NewLine + "Request #: " + @Text(Incremented) +  "-" + req_num + @NewLine + "Piece Price: " + @Text(piecepc) + @NewLine + "Tooling Price: " + @Text(tooling) + @NewLine + "Comments Or Exceptions: " + body_notes + @NewLine + "See Link >> ";

@If(@IsNewDoc;@Prompt(&lsqb;Ok&rsqb;;"Notification!";"You Must Save The File Before You Can Initiate The Request.");@Do
(@If(@Prompt(&lsqb;YesNo&rsqb;; "Send Memo?"; "A memo will be sent to Sales to notify them of your Quotation Response."); @Do(
@Set("name";@ProperCase(@Name(&lsqb;CN&rsqb;;@PickList( &lsqb;Name&rsqb; : &lsqb;Single&rsqb; ))));
@MailSend(name;"";"";SUBJ;"";BODY;&lsqb;IncludeDoclink&rsqb;);
@Prompt(&lsqb;Ok&rsqb;; "Notification!"; "Your message has been summited.");
@SetField("history_mfg";history_mfg + @NewLine + "Your Sales Notification Was Sent To " + name + " On:      " + date);
@SetDocField ( $Ref; "SalesPublishDate"; @Now );
@Command ( &lsqb;ViewRefreshFields&rsqb; );
@Command ( &lsqb;FileSave&rsqb; );
@Command ( &lsqb;CloseWindow&rsqb; )
);
@Failure(@Prompt(&lsqb;Ok&rsqb;; "Operation"; "Canceled")))))
</pre>
The cause or instigator of the red box turned out to be the @SetDocField function.  When I take it out, the code runs fine.  I tried moving the call to @SetDocField around, but the same red box always appears.  Not sure why.  To get around this problem, I replaced @SetDocField with @Command ( &lsqb;ToolsRunMacro&rsqb;; "Set Parent" ), which works just fine.]]></content:encoded><pubDate>Tue, 4 Jan 2005 21:05:28 -0400</pubDate><slash:comments>0</slash:comments><wfw:commentRss>http://ww2.nutechs.com/hosting/msobczak/Blogs/BlogSphere-1_0_2/LordLotusBlog.nsf/CommentsRSS?Open&amp;id=5DA6A15889BE6B5085256F80000B7CF4</wfw:commentRss><wfw:comment>http://ww2.nutechs.com/hosting/msobczak/Blogs/BlogSphere-1_0_2/LordLotusBlog.nsf/PostComment?RunAgent&amp;id=5DA6A15889BE6B5085256F80000B7CF4</wfw:comment></item><item><title>The old disappearing template name trick</title><link>http://ww2.nutechs.com/hosting/msobczak/Blogs/BlogSphere-1_0_2/LordLotusBlog.nsf/d6plinks/MSOK-67RQLG</link><description><![CDATA[ I'd been trying to set the Template Name of a new template I had just created on a server, but for some reason the Template Name kept disappearing after I closed the Database Properties box.  Thinking I'd gone insane, I checked the Notes 6 Forum on LDD, and ...]]></description><dc:subject>Notes Development</dc:subject><dc:creator>Michael Sobczak</dc:creator><comments>http://ww2.nutechs.com/hosting/msobczak/Blogs/BlogSphere-1_0_2/LordLotusBlog.nsf/d6plinks/MSOK-67RQLG</comments><guid isPermaLink="true">http://ww2.nutechs.com/hosting/msobczak/Blogs/BlogSphere-1_0_2/LordLotusBlog.nsf/d6plinks/MSOK-67RQLG</guid><content:encoded><![CDATA[ I'd been trying to set the Template Name of a new template I had just created on a server, but for some reason the Template Name kept disappearing after I closed the Database Properties box.  Thinking I'd gone insane, I checked the Notes 6 Forum on LDD, and <a href="http://www-10.lotus.com/ldd/nd6forum.nsf/55c38d716d632d9b8525689b005ba1c0/4da715d26a72f18385256f460059ba2e?OpenDocument">discovered</a> that I needed to be defined in the Server document as someone who can create master templates for that server.  As long as my name wasn't included in this field, the Template Name would keep getting whacked and this message would be written to the Notes Log:
<br><br>
12/17/2004 01:21:03 PM  Attempt by CN=Michael Sobczak//O=Acme to define database E:\Lotus\Domino\Data\sometemplate.ntf as template Some Template rejected.
<br><br>
That Notes 6 has more security regarding templates is OK by me.  But what I don't understand why Notes wouldn't give the poor soul who experiences this behavior a MessageBox with an error message in it...even a cryptic error message!]]></content:encoded><pubDate>Fri, 17 Dec 2004 14:15:55 -0400</pubDate><slash:comments>0</slash:comments><wfw:commentRss>http://ww2.nutechs.com/hosting/msobczak/Blogs/BlogSphere-1_0_2/LordLotusBlog.nsf/CommentsRSS?Open&amp;id=DB16487DC414D73785256F6D0069D419</wfw:commentRss><wfw:comment>http://ww2.nutechs.com/hosting/msobczak/Blogs/BlogSphere-1_0_2/LordLotusBlog.nsf/PostComment?RunAgent&amp;id=DB16487DC414D73785256F6D0069D419</wfw:comment></item><item><title>Simplify, simplify, simplify (creating documents en masse)</title><link>http://ww2.nutechs.com/hosting/msobczak/Blogs/BlogSphere-1_0_2/LordLotusBlog.nsf/d6plinks/MSOK-64MS4U</link><description><![CDATA[ I like it when customers ask for ways to simplify their lives.  Case in point: requesting functionality that lets a user create a series of documents in one step.  For a service request-oriented database I maintain, users typically need to create anywhere ...]]></description><dc:subject>Notes Development</dc:subject><dc:creator>Michael Sobczak</dc:creator><comments>http://ww2.nutechs.com/hosting/msobczak/Blogs/BlogSphere-1_0_2/LordLotusBlog.nsf/d6plinks/MSOK-64MS4U</comments><guid isPermaLink="true">http://ww2.nutechs.com/hosting/msobczak/Blogs/BlogSphere-1_0_2/LordLotusBlog.nsf/d6plinks/MSOK-64MS4U</guid><content:encoded><![CDATA[ I like it when customers ask for ways to simplify their lives.  Case in point: requesting functionality that lets a user create a series of documents in one step.  For a service request-oriented database I maintain, users typically need to create anywhere from one to sixteen To Do documents for a service request, each one representing a particular step in the process.  The only mechanism currently in the database to create a To Do is by clicking on an action button at the top of the main form.  This opens a blank To Do form, with which the user must enter in all of the required values and save it before proceeding to the next To Do.  As you can tell, this can get very tedious, especially if most of service requests require more than one To Do to be created.
<br><br>
The customer using this database asked me if there is a way they could create all of the To Dos in one shot, instead of having to create each one sequentially.  The concept I came up with is this:
<ul>
<li>click on a button (or action) that opens a new form</li>
<li>enter in values for an arbitrary number of new documents to be created</li>
<li>click on a button (or action) to close the form and create all of the new documents</li>
<ul>
Simple, no?  And quite elegant, I might add.]]></content:encoded><pubDate>Tue, 7 Sep 2004 00:00:00 -0400</pubDate><slash:comments>0</slash:comments><wfw:commentRss>http://ww2.nutechs.com/hosting/msobczak/Blogs/BlogSphere-1_0_2/LordLotusBlog.nsf/CommentsRSS?Open&amp;id=8BEF0CC95073F8BB85256F090070E9E6</wfw:commentRss><wfw:comment>http://ww2.nutechs.com/hosting/msobczak/Blogs/BlogSphere-1_0_2/LordLotusBlog.nsf/PostComment?RunAgent&amp;id=8BEF0CC95073F8BB85256F090070E9E6</wfw:comment></item><item><title>SaveOptions snafu</title><link>http://ww2.nutechs.com/hosting/msobczak/Blogs/BlogSphere-1_0_2/LordLotusBlog.nsf/d6plinks/MSOK-63QJ56</link><description><![CDATA[ Notes has a special field called SaveOptions.  When used properly, it prevents changes to a document from being made after a certain status has been reached.  It is also used to prevent the user from being prompted to save a document in the Notes UI after ...]]></description><dc:subject>Notes Development</dc:subject><dc:creator>Michael Sobczak</dc:creator><comments>http://ww2.nutechs.com/hosting/msobczak/Blogs/BlogSphere-1_0_2/LordLotusBlog.nsf/d6plinks/MSOK-63QJ56</comments><guid isPermaLink="true">http://ww2.nutechs.com/hosting/msobczak/Blogs/BlogSphere-1_0_2/LordLotusBlog.nsf/d6plinks/MSOK-63QJ56</guid><content:encoded><![CDATA[ Notes has a special field called SaveOptions.  When used properly, it prevents changes to a document from being made after a certain status has been reached.  It is also used to prevent the user from being prompted to save a document in the Notes UI after already having saved it.  When the SaveOptions field is set to "0", any edits made to the document are not saved.  When the SaveOptions field is set to "1", any edits made to the document will be saved.
<br><br>
One of my customers reported a problem where an approver could not move a document to the next stage of the workflow.  When the approver clicked on the &lsqb;Approve&rsqb; button, the rest of the code behind that button worked without generating an error, but the approval itself was not recorded in the document.  I reviewed the code behind the &lsqb;Approve&rsqb; button, and noticed that the SaveOptions field was being set to "0" after the document had been saved in the UI (NotesUIDocument.Save).  This was because after the document is saved in the UI, the document is then modified and saved via the back-end classes (NotesDocument.Save) by another routine.  Setting SaveOptions to "0" will prevent the user from being prompted to save a document after it has been saved using the back-end classes.  (Using SaveOptions to prevent the save prompt from appearing is a bad Lotusscript coding practice, in my opinion.)
<br><br>
For some reason, documents that still needed to be moved through the remaining workflow stages had the SaveOptions field set to "0".  I suspect that there is a flaw in Lotusscript code executed somewhere else in the application that is allowing this to happen, but wouldn't be able to tell without digging deeper into the code.  
<br><br>
What I did was change the code behind one of the workflow buttons so that it sets the SaveOptions back to "1" before saving it.  That way, the approval will be recorded and saved, and that will move the document further along in the workflow.  So, my advice to all out there: take care when using SaveOptions in your Lotusscript code.  If you use it incorrectly, it will be very difficult to troubleshoot problems afterwards.]]></content:encoded><pubDate>Thu, 29 Jul 2004 00:00:00 -0400</pubDate><slash:comments>1</slash:comments><wfw:commentRss>http://ww2.nutechs.com/hosting/msobczak/Blogs/BlogSphere-1_0_2/LordLotusBlog.nsf/CommentsRSS?Open&amp;id=79D38920B02B806585256EEC004B7563</wfw:commentRss><wfw:comment>http://ww2.nutechs.com/hosting/msobczak/Blogs/BlogSphere-1_0_2/LordLotusBlog.nsf/PostComment?RunAgent&amp;id=79D38920B02B806585256EEC004B7563</wfw:comment></item></channel>
</rss>
