<?xml version="1.0" encoding="iso-8859-1"?>
<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/">
<channel>
<title>Best Practice Makes Perfect</title>
<description>A collaboration with Domino developers about how to do it and how to get it right in Domino</description>
<link>http://www-10.lotus.com/ldd/bpmpblog.nsf/</link>
<language>en-us</language>
<lastBuildDate>Tue, 10 Jan 2012 11:11:40 -0500</lastBuildDate>
<item>
<title>New Best Practices Wiki</title>
<pubDate>Tue, 10 Jan 2012 11:11:40 -0500</pubDate>
<description>
<![CDATA[ 
There's a new wiki about Domino development best practices. It was written by various experts in and out of IBM, and I followed up with a lot of edits myself, so I'm an after the fact contributor. It' ...
 ]]>
</description>
<link>http://www-10.lotus.com/ldd/bpmpblog.nsf/dx/new-bp-wiki</link>
<category>Domino Application Performance</category>
<dc:creator>Andre Guirard</dc:creator>
<comments>http://www-10.lotus.com/ldd/bpmpblog.nsf/dx/new-bp-wiki?opendocument&amp;comments</comments>
<guid isPermaLink="true">http://www-10.lotus.com/ldd/bpmpblog.nsf/dx/new-bp-wiki</guid>
<content:encoded><![CDATA[ <font size=2 face="sans-serif">There's a new </font><a href="http://www-10.lotus.com/ldd/ddwiki.nsf/xpViewCategories.xsp?lookupName=Redbooks%20Wiki%3A%20Lotus%20Domino%20Development%20Best%20Practices"><font size=2 color=blue face="sans-serif"><span style="text-decoration:underline">wiki about Domino development best practices</span></font></a><font size=2 face="sans-serif">. It was written by various experts in and out of IBM, and I followed up with a lot of edits myself, so I'm an after the fact contributor. It's brand new so there are probably some mistakes, which I hope you people who know what you're doing, will correct.</font><font size=3> </font> <p><font size=2 face="sans-serif">I think this will be a good resource for developers, and I'm adding a link to my list of links on the right.</font><font size=3> </font> <p><font size=2 face="sans-serif">In other news, if you'd like to read a short story by me (under my fiction alias of Tyler Tork), there's one in the December 2011 issue of </font><a href=http://www.rampantloonmedia.com/><font size=2 color=blue face="sans-serif"><span style="text-decoration:underline">Stupefying Stories</span></font></a><font size=2 face="sans-serif">, available for </font><a href=http://www.amazon.com/dp/B006NM2Q4C target=_blank><font size=2 color=blue face="Arial"><span style="text-decoration:underline">Kindle</span></font></a><font size=2 face="Arial">, </font><font size=3 color=blue><span style="text-decoration:underline"><br /> </span></font><a href="http://www.barnesandnoble.com/w/stupefying-stories-bruce-bethke/1106464110?ean=2940013865723" target=_blank><font size=2 color=blue face="Arial"><span style="text-decoration:underline">Nook</span></font></a><font size=2 face="Arial"> or on </font><a href="http://itunes.apple.com/us/artist/bruce-bethke/id450044830?mt=11" target=_blank><font size=2 color=blue face="Arial"><span style="text-decoration:underline">iTunes</span></font></a><font size=2 face="sans-serif">.</font><font size=3> </font>  ]]></content:encoded>
<wfw:commentRss> http://www-10.lotus.com/ldd/bpmpblog.nsf/dxcomments/new-bp-wiki</wfw:commentRss>
<wfw:comment> http://www-10.lotus.com/ldd/bpmpblog.nsf/dx/new-bp-wiki?opendocument&amp;comments</wfw:comment>
</item>
<item>
<title>New wiki document for the Notes client app developer</title>
<pubDate>Thu, 17 Nov 2011 12:34:02 -0500</pubDate>
<description>
<![CDATA[ 
The new document, Controlling Document Editing in a Notes Client Application, is intended for novices and will probably not contain a lot of news for the regular readers of this blog. But for those ex ...
 ]]>
</description>
<link>http://www-10.lotus.com/ldd/bpmpblog.nsf/dx/new-wiki-document-for-the-traditional</link>
<category>Domino Development Tools and Techniques</category>
<dc:creator>Andre Guirard</dc:creator>
<comments>http://www-10.lotus.com/ldd/bpmpblog.nsf/dx/new-wiki-document-for-the-traditional?opendocument&amp;comments</comments>
<guid isPermaLink="true">http://www-10.lotus.com/ldd/bpmpblog.nsf/dx/new-wiki-document-for-the-traditional</guid>
<content:encoded><![CDATA[ <font size=2 face="sans-serif">The new document, </font><a href="http://www-10.lotus.com/ldd/ddwiki.nsf/dx/Controlling_Document_Editing_in_a_Notes_Client_Application"><font size=3 color=blue><strong><span style="text-decoration:underline">Controlling Document Editing in a Notes Client Application</span></strong></font></a><font size=2 face="sans-serif">, is intended for novices and will probably not contain a lot of news for the regular readers of this blog. But for those experienced developers here, I welcome your comments, corrections, questions about what the heck I meant by this sentence, etcetera. This is where the collaboration part comes in. Thanks.</font>  ]]></content:encoded>
<wfw:commentRss> http://www-10.lotus.com/ldd/bpmpblog.nsf/dxcomments/new-wiki-document-for-the-traditional</wfw:commentRss>
<wfw:comment> http://www-10.lotus.com/ldd/bpmpblog.nsf/dx/new-wiki-document-for-the-traditional?opendocument&amp;comments</wfw:comment>
</item>
<item>
<title>Overly Social</title>
<pubDate>Tue, 15 Nov 2011 07:07:52 -0500</pubDate>
<description>
<![CDATA[ 
It seems like a lot of companies are still struggling to figure out how this social stuff can be used to aid their marketing. It might be just me, but some of them seem to be wandering far into the To ...
 ]]>
</description>
<link>http://www-10.lotus.com/ldd/bpmpblog.nsf/dx/overly-social</link>
<category>General Musings</category>
<dc:creator>Andre Guirard</dc:creator>
<comments>http://www-10.lotus.com/ldd/bpmpblog.nsf/dx/overly-social?opendocument&amp;comments</comments>
<guid isPermaLink="true">http://www-10.lotus.com/ldd/bpmpblog.nsf/dx/overly-social</guid>
<content:encoded><![CDATA[ <font size=2 face="sans-serif">It seems like a lot of companies are still struggling to figure out how this social stuff can be used to aid their marketing. It might be just me, but some of them seem to be wandering far into the Too Much Information zone.</font> <p><font size=2 face="sans-serif">I'm not even talking about the information the companies themselves publish, though why anyone would want to subscribe to the Twitter feed of a Chinese buffet restaurant or a hotel has frankly been puzzling me for a while. No, I'm talking about the information the companies want to help us publish about ourselves and our use of their products.</font> <p><font size=2 face="sans-serif">Take for instance a certain restaurant chain. I ordered online from their website, and what do I see on the ordering page? Yes, that's a Facebook button. Really, there's not enough trivia on Facebook, the restaurant thinks everyone I know needs to know what I'm having for dinner? I try to keep my posts useful, entertaining, interesting.</font> <p><font size=2 face="sans-serif">Then there's another new thing on Facebook -- I sincerely hope it's a fad. The "Social Reader" application posts every article you <em>open</em> in a given publication onto Facebook. Once you've allowed this application the ability to write to your wall, the instant you follow a link to the article, everybody knows of your interest in celebrity plastic surgery or whatever.</font> <p><font size=2 face="sans-serif">I really value that my Facebook friends can share articles they've enjoyed. I find out some worthwhile things, experience different points of view, and learn something about the person. But, not speaking for anyone else, I can't tell whether an article is worth sharing just from the title. I read lots of things online, and a fairly small proportion are worth passing on. When I post, again, I want it to <em>mean something</em> -- not just to vainly share every tiniest detail of my life in the presumption that someone might be interested. We are drowning in a flood of trivia already.</font> <p><font size=2 face="sans-serif">I know, I can hide those updates in my own feed. And I have (the Social Reader ones -- I've never seen a red hot meal update from that restaurant chain, so I don't know whether I can filter them easily). I just don't understand why people would choose allow those Social Readers and so on access to speak for them. I can understand people might be curious to read the article, but go to the newspaper's website and search for it there. Don't publish a link until you know it's worth publishing!</font>  ]]></content:encoded>
<wfw:commentRss> http://www-10.lotus.com/ldd/bpmpblog.nsf/dxcomments/overly-social</wfw:commentRss>
<wfw:comment> http://www-10.lotus.com/ldd/bpmpblog.nsf/dx/overly-social?opendocument&amp;comments</wfw:comment>
</item>
<item>
<title>The SQL Query of Doom</title>
<pubDate>Thu, 10 Nov 2011 07:09:35 -0500</pubDate>
<description>
<![CDATA[ 
I suspect this can be simplified. Thought people might find it amusing. ...
 ]]>
</description>
<link>http://www-10.lotus.com/ldd/bpmpblog.nsf/dx/the-query-of-death</link>
<category>Fun and Games</category>
<dc:creator>Andre Guirard</dc:creator>
<comments>http://www-10.lotus.com/ldd/bpmpblog.nsf/dx/the-query-of-death?opendocument&amp;comments</comments>
<guid isPermaLink="true">http://www-10.lotus.com/ldd/bpmpblog.nsf/dx/the-query-of-death</guid>
<content:encoded><![CDATA[ <font size=2 face="sans-serif">I suspect </font><a href="http://thedailywtf.com/Articles/The-Query-of-Despair.aspx"><font size=2 color=blue face="sans-serif">this</font></a><font size=2 face="sans-serif"> can be simplified. Thought people might find it amusing.</font>  ]]></content:encoded>
<wfw:commentRss> http://www-10.lotus.com/ldd/bpmpblog.nsf/dxcomments/the-query-of-death</wfw:commentRss>
<wfw:comment> http://www-10.lotus.com/ldd/bpmpblog.nsf/dx/the-query-of-death?opendocument&amp;comments</wfw:comment>
</item>
<item>
<title>LotusScript Gold Collection 1.3</title>
<pubDate>Mon, 31 Oct 2011 12:03:12 -0500</pubDate>
<description>
<![CDATA[ 
A new version of the "LotusScript Gold Collection" toolkit is available on openntf.org. It includes the much requested NotesGroupManager library which used to be in the Lotus Sandbox, and a way to cal ...
 ]]>
</description>
<link>http://www-10.lotus.com/ldd/bpmpblog.nsf/dx/lotusscript-gold-collection-1.3</link>
<category>Code Reuse</category>
<dc:creator>Andre Guirard</dc:creator>
<comments>http://www-10.lotus.com/ldd/bpmpblog.nsf/dx/lotusscript-gold-collection-1.3?opendocument&amp;comments</comments>
<guid isPermaLink="true">http://www-10.lotus.com/ldd/bpmpblog.nsf/dx/lotusscript-gold-collection-1.3</guid>
<content:encoded><![CDATA[ <font size=2 face="sans-serif">A new version of the "</font><a href="http://www.openntf.org/internal/home.nsf/releases.xsp?action=openDocument&amp;name=LotusScript%20Gold%20Collection&amp;documentId&ETH;CA44F83FF8307586257616006C6D64"><font size=2 color=blue face="sans-serif"><span style="text-decoration:underline">LotusScript Gold Collection</span></font></a><font size=2 face="sans-serif">" toolkit is available on openntf.org. It includes the much requested NotesGroupManager library which used to be in the Lotus Sandbox, and a way to call Notes C API functions without having to check which OS you're using before each call. The latter might not work on all servers, but the problem has been reported to the LotusScript team in development. It works great on all clients (and you could easily make a server version, it's just not as efficient as you must load the classes for all supported OS instead of using dynamic loading).</font><font size=3> </font> <br /> <br /><font size=3>And, if you're interested in the doing of my alter ego, Tyler Tork, you can read a Halloween tale on my other blog (link on right).</font>  ]]></content:encoded>
<wfw:commentRss> http://www-10.lotus.com/ldd/bpmpblog.nsf/dxcomments/lotusscript-gold-collection-1.3</wfw:commentRss>
<wfw:comment> http://www-10.lotus.com/ldd/bpmpblog.nsf/dx/lotusscript-gold-collection-1.3?opendocument&amp;comments</wfw:comment>
</item>
<item>
<title>Searching for blank date fields, and what makes a supported feature</title>
<pubDate>Mon, 31 Oct 2011 05:15:00 -0500</pubDate>
<description>
<![CDATA[ 
Timothy Briley asked: I've noticed that over time you've written a bit about valid searches in Lotus Ntoes. Can you comment one way or another on whether or not this is a valid search method: To find ...
 ]]>
</description>
<link>http://www-10.lotus.com/ldd/bpmpblog.nsf/dx/searching-for-blank-date-fields</link>
<category>Search</category>
<dc:creator>Andre Guirard</dc:creator>
<comments>http://www-10.lotus.com/ldd/bpmpblog.nsf/dx/searching-for-blank-date-fields?opendocument&amp;comments</comments>
<guid isPermaLink="true">http://www-10.lotus.com/ldd/bpmpblog.nsf/dx/searching-for-blank-date-fields</guid>
<content:encoded><![CDATA[ <font size=1 face="Default MultiLingual">Timothy Briley asked:</font> <br /><font size=1 face="Default MultiLingual"><blockquote></font> <br /><font size=1 face="Default MultiLingual">I've noticed that over time you've written a bit about valid searches in Lotus Ntoes. Can you comment one way or another on whether or not this is a valid search method:<br /> To find documents in a view containing an empty date field manually by using the search bar or programatically using notesView.FTSearch:<br /> Not(&#91;fieldName&#93; > 0)<br /> If this is a valid method, why isn't it documented?</blockquote></font> <br /><font size=1 face="Default MultiLingual">It is seems to work for you, fine. Many things are not documented. Sometimes this is because the developer didn't tell anyone about it, sometimes because it wasn't a planned feature (as I suspect is the case here), and sometimes because we don't want to commit to supporting it indefinitely. When you try to make each version of a product able to support applications created in all previous versions, you have to be careful about what you call a supported feature.</font> <br /><font size=1 face="Default MultiLingual">So in general, if something is not documented, you should use it with care and make a special point to test it out before you upgrade your Notes/Domino installation, to make sure it still works in the new version.</font> <br /><font size=1 face="Default MultiLingual">In this case, there's a supported way to do what you're looking to do. The "is present" syntax, which is documented, will let you find documents that do, or do not, contain a value in a given field.</font> <br /><font size=1 face="Default MultiLingual">However, depending on your application, this may not be the most efficient way to do your search. Please see the wiki article </font><a href="http://www-10.lotus.com/ldd/ddwiki.nsf/dx/Searching_for_Documents"><font size=3 color=blue><span style="text-decoration:underline">Searching for Documents</span></font></a><font size=1 face="Default MultiLingual"> for some guidelines.</font>  ]]></content:encoded>
<wfw:commentRss> http://www-10.lotus.com/ldd/bpmpblog.nsf/dxcomments/searching-for-blank-date-fields</wfw:commentRss>
<wfw:comment> http://www-10.lotus.com/ldd/bpmpblog.nsf/dx/searching-for-blank-date-fields?opendocument&amp;comments</wfw:comment>
</item>
<item>
<title>Sametime server owners take note</title>
<pubDate>Fri, 28 Oct 2011 08:55:19 -0500</pubDate>
<description>
<![CDATA[ 
http://www-01.ibm.com/support/docview.wss?uid=swg21569452 Please apply this security fix to your Sametime servers. Thanks ...
 ]]>
</description>
<link>http://www-10.lotus.com/ldd/bpmpblog.nsf/dx/sametime-server-owners-take-note.</link>
<category>Security</category>
<dc:creator>Andre Guirard</dc:creator>
<comments>http://www-10.lotus.com/ldd/bpmpblog.nsf/dx/sametime-server-owners-take-note.?opendocument&amp;comments</comments>
<guid isPermaLink="true">http://www-10.lotus.com/ldd/bpmpblog.nsf/dx/sametime-server-owners-take-note.</guid>
<content:encoded><![CDATA[ <a href="http://www-01.ibm.com/support/docview.wss?uid=swg21569452"><font size=2 color=blue face="Arial"><span style="text-decoration:underline">http://www-01.ibm.com/support/docview.wss?uid=swg21569452</span></font></a> <br /> <br /><font size=2 face="sans-serif">Please apply this security fix to your Sametime servers. Thanks</font>  ]]></content:encoded>
<wfw:commentRss> http://www-10.lotus.com/ldd/bpmpblog.nsf/dxcomments/sametime-server-owners-take-note.</wfw:commentRss>
<wfw:comment> http://www-10.lotus.com/ldd/bpmpblog.nsf/dx/sametime-server-owners-take-note.?opendocument&amp;comments</wfw:comment>
</item>
<item>
<title>What I&#8217;ve been working on...</title>
<pubDate>Wed, 8 Jun 2011 07:18:14 -0500</pubDate>
<description>
<![CDATA[ 
One reason I haven't been posting here much recently, is that I've been working on LotusLive configuration tools, and I didn't think that would be of general interest. These would be the NSFs that end ...
 ]]>
</description>
<link>http://www-10.lotus.com/ldd/bpmpblog.nsf/dx/what-ive-been-working-on...</link>
<category>General Musings</category>
<dc:creator>Andre Guirard</dc:creator>
<comments>http://www-10.lotus.com/ldd/bpmpblog.nsf/dx/what-ive-been-working-on...?opendocument&amp;comments</comments>
<guid isPermaLink="true">http://www-10.lotus.com/ldd/bpmpblog.nsf/dx/what-ive-been-working-on...</guid>
<content:encoded><![CDATA[ <font size=2 face="sans-serif">One reason I haven't been posting here much recently, is that I've been working on LotusLive configuration tools, and I didn't think that would be of general interest. These would be the NSFs that end users download to configure their workstations to access LotusLive Notes, and the one that the on-premises administrator in a "hybrid" organization uses to set up their servers to communicate with LotusLive's servers to deliver mail, etc. It's a lot of complicated application development for the Notes client, which is what I love.</font> <p><font size=2 face="sans-serif">So I can talk about some of the ins and outs of LotusLive client and hybrid server setup, how users are migrated, how we know when to delete their old mail files, and so on, if that's of interest here. Or if you have topics you'd like to see more about, please respond in comments.</font>  ]]></content:encoded>
<wfw:commentRss> http://www-10.lotus.com/ldd/bpmpblog.nsf/dxcomments/what-ive-been-working-on...</wfw:commentRss>
<wfw:comment> http://www-10.lotus.com/ldd/bpmpblog.nsf/dx/what-ive-been-working-on...?opendocument&amp;comments</wfw:comment>
</item>
<item>
<title>Creating a replica ID item for adminp requests</title>
<pubDate>Tue, 7 Jun 2011 07:15:00 -0500</pubDate>
<description>
<![CDATA[ 
When automatically generating an adminp request that applies to a specific database, there's an item in the request that you may find hard to create. If you create adminp requests manually and then ex ...
 ]]>
</description>
<link>http://www-10.lotus.com/ldd/bpmpblog.nsf/dx/creating-a-replica-id-item-for-adminp-requests</link>
<category>Administration</category>
<dc:creator>Andre Guirard</dc:creator>
<comments>http://www-10.lotus.com/ldd/bpmpblog.nsf/dx/creating-a-replica-id-item-for-adminp-requests?opendocument&amp;comments</comments>
<guid isPermaLink="true">http://www-10.lotus.com/ldd/bpmpblog.nsf/dx/creating-a-replica-id-item-for-adminp-requests</guid>
<content:encoded><![CDATA[ <font size=2 face="sans-serif">When automatically generating an adminp request that applies to a specific database, there's an item in the request that you may find hard to create. If you create adminp requests manually and then examine the items in them, you can see for instance that you might have the item ProxyReplicaID with a date/time value. Doesn't look like you would expect a replica ID to look. How do you convert the value of (say) NotesDatabase.ReplicaID, a string, to the TIMEDATE value that gets stored in the note? All the bits are used, so there's a 100ths of a second value that you can't see, but it's in there. Likewise, the timezone is stored in there and has to be preserved.</font> <p><font size=2 face="sans-serif">If you had the value in an item in another document, it would be easy to copy the item to a new adminp request. But if you have to create it from scratch, you need a way to convert a replica ID hex string to a TIMEDATE value.</font> <p><font size=2 face="sans-serif">There is a way, fortunately. The constructor of the NotesDateTime class accepts a hex string as a possible input, so you can just write:</font> <p><font size=2 face="sans-serif"><div class="code">Dim replicaTD as New NotesDateTime(dbTarget.ReplicaID)</font> <p><font size=2 face="sans-serif">docAdminp.ReplaceItemValue "ProxyReplicaID", replicaTD</div></font> <p><font size=2 face="sans-serif">Though you can't get the NotesDateTime to tell you the exact value to 100th of a second, the exact TIMEDATE value is in there, as you can tell using @Text("ProxyReplicaID"; "*")</font>  ]]></content:encoded>
<wfw:commentRss> http://www-10.lotus.com/ldd/bpmpblog.nsf/dxcomments/creating-a-replica-id-item-for-adminp-requests</wfw:commentRss>
<wfw:comment> http://www-10.lotus.com/ldd/bpmpblog.nsf/dx/creating-a-replica-id-item-for-adminp-requests?opendocument&amp;comments</wfw:comment>
</item>
<item>
<title>What is this boy doing?</title>
<pubDate>Mon, 6 Jun 2011 08:10:16 -0500</pubDate>
<description>
<![CDATA[ 
This has nothing whatever to do with IBM products, but is just a fun little project of my own. So if you're bored or whatever, steer your browser to the Pounce blog and ask a question for Tyler to an ...
 ]]>
</description>
<link>http://www-10.lotus.com/ldd/bpmpblog.nsf/dx/what-is-this-boy-doing</link>
<category>Fun and Games</category>
<dc:creator>Andre Guirard</dc:creator>
<comments>http://www-10.lotus.com/ldd/bpmpblog.nsf/dx/what-is-this-boy-doing?opendocument&amp;comments</comments>
<guid isPermaLink="true">http://www-10.lotus.com/ldd/bpmpblog.nsf/dx/what-is-this-boy-doing</guid>
<content:encoded><![CDATA[ <img  alt="Image:What is this boy doing?" border="0" src="http://www-10.lotus.com/ldd/bpmpblog.nsf/dx/what-is-this-boy-doing/content/M2?OpenElement" /> <br /><font size=2 face="sans-serif">This has nothing whatever to do with IBM products, but is just a fun little project of my own. So if you're bored or whatever, steer your browser to </font><a href=http://www.tylertork.com/qna/><font size=2 color=blue face="sans-serif"><span style="text-decoration:underline">the Pounce blog</span></font></a><font size=2 face="sans-serif"> and ask a question for Tyler to answer.</font><font size=3> </font><font size=2 face="sans-serif"><br /> The site is pretty rough at the moment; I'll pretty it up as I have time over the coming days.</font><font size=3> </font>  ]]></content:encoded>
<wfw:commentRss> http://www-10.lotus.com/ldd/bpmpblog.nsf/dxcomments/what-is-this-boy-doing</wfw:commentRss>
<wfw:comment> http://www-10.lotus.com/ldd/bpmpblog.nsf/dx/what-is-this-boy-doing?opendocument&amp;comments</wfw:comment>
</item>
<item>
<title>LS2J static method calls and a little introspection </title>
<pubDate>Thu, 26 May 2011 11:49:02 -0500</pubDate>
<description>
<![CDATA[ 
I've been needing to use LS2J recently so that I could code DNS lookups and web page requests as part of a testing system I'm working on for LotusLive. The documentation is a little vague on how you w ...
 ]]>
</description>
<link>http://www-10.lotus.com/ldd/bpmpblog.nsf/dx/ls2j-static-method-calls</link>
<category>Domino Development Tools and Techniques</category>
<dc:creator>Andre Guirard</dc:creator>
<comments>http://www-10.lotus.com/ldd/bpmpblog.nsf/dx/ls2j-static-method-calls?opendocument&amp;comments</comments>
<guid isPermaLink="true">http://www-10.lotus.com/ldd/bpmpblog.nsf/dx/ls2j-static-method-calls</guid>
<content:encoded><![CDATA[ <font size=2 face="sans-serif">I've been needing to use LS2J recently so that I could code DNS lookups and web page requests as part of a testing system I'm working on for LotusLive. The documentation is a little vague on how you work with methods in a Java class from LotusScript, so since I had to experiment to find out how it worked, I figured it would be nice to record the information here.</font><font size=3> </font> <p><font size=2 face="sans-serif">In most cases, you're writing the Java classes you're calling via LS2J, so you get to decide whether there are static members. But maybe you got the class from elsewhere and you don't want to have to modify it, or maybe you're just using a built-in class that you don't get to change. So it may occasionally be helpful to know how to use the static members. So here goes.</font> <p><font size=2 face="sans-serif">You can invoke a static method of a Java class using the JavaMethod.Invoke method with an object argument of <strong>Nothing</strong>. First you need to get a handle to the method. So for instance, to invoke the static method HTTPPing, which takes a String argument and returns an int, I would write:</font><font size=3> </font> <p><font size=2 face="sans-serif"><div class="code"></font><font size=1 face="Andale Mono"> &nbsp; &nbsp; &nbsp; &nbsp;</font><font size=1 color=#0000e0 face="Andale Mono"><strong>Dim</strong></font><font size=1 face="Andale Mono"> jses </font><font size=1 color=#0000e0 face="Andale Mono"><strong>As</strong></font><font size=1 face="Andale Mono"> </font><font size=1 color=#0000e0 face="Andale Mono"><strong>New</strong></font><font size=1 face="Andale Mono"> JavaSession<br />  &nbsp; &nbsp; &nbsp; </font><font size=1 color=#0000e0 face="Andale Mono"><strong>Dim</strong></font><font size=1 face="Andale Mono"> jclass </font><font size=1 color=#0000e0 face="Andale Mono"><strong>As</strong></font><font size=1 face="Andale Mono"> Javaclass<br />  &nbsp; &nbsp; &nbsp; </font><font size=1 color=#0000e0 face="Andale Mono"><strong>Set</strong></font><font size=1 face="Andale Mono"> jclass = jses.GetClass(</font><font size=1 color=#4100c2 face="Andale Mono"><em>"TCPClient"</em></font><font size=1 face="Andale Mono">)<br />  &nbsp; &nbsp; &nbsp; </font><font size=1 color=#0000e0 face="Andale Mono"><strong>Dim</strong></font><font size=1 face="Andale Mono"> result%, url$<br />  &nbsp; &nbsp; &nbsp; url = </font><font size=1 color=#4100c2 face="Andale Mono"><em>"http://notes.lotuslive.com"</em></font><font size=1 face="Andale Mono"><br />  &nbsp; &nbsp; &nbsp; result = jclass.Getmethod(</font><font size=1 color=#4100c2 face="Andale Mono"><em>"HTTPPing"</em></font><font size=1 face="Andale Mono">, </font><font size=1 color=#4100c2 face="Andale Mono"><em>"(Ljava/lang/String;)I"</em></font><font size=1 face="Andale Mono">).Invoke(</font><font size=1 color=#0000e0 face="Andale Mono"><strong>Nothing</strong></font><font size=1 face="Andale Mono">, url)</font><font size=2 face="sans-serif"></div></font><font size=3> </font> <p><font size=2 face="sans-serif">The second argument to Getmethod, the method signature, can be a bit hard to come up with. The example in the help shows a sample value of "(I)Ljava/lang/String;", but a single example isn't much help unless the method you want has exactly that signature (and the example seems to be wrong anyway). Rather than try to puzzle out what the right signature might be for the method, I wrote an agent to scan the methods of a JavaClass object and display all the signatures.</font><font size=3> </font> <p><font size=2 face="sans-serif"><div class="code"></font><font size=1 face="Andale Mono"> &nbsp; &nbsp; &nbsp; &nbsp;</font><font size=1 color=#0000e0 face="Andale Mono"><strong>Dim</strong></font><font size=1 face="Andale Mono"> jses </font><font size=1 color=#0000e0 face="Andale Mono"><strong>As</strong></font><font size=1 face="Andale Mono"> </font><font size=1 color=#0000e0 face="Andale Mono"><strong>New</strong></font><font size=1 face="Andale Mono"> JavaSession</font><font size=3> </font> <p><font size=1 face="Andale Mono">&nbsp; &nbsp; &nbsp; &nbsp; </font><font size=1 color=#0000e0 face="Andale Mono"><strong>Dim</strong></font><font size=1 face="Andale Mono"> jclass </font><font size=1 color=#0000e0 face="Andale Mono"><strong>As</strong></font><font size=1 face="Andale Mono"> Javaclass</font><font size=3> </font><font size=1 face="Andale Mono"><br />  &nbsp; &nbsp; &nbsp; &nbsp;</font><font size=1 color=#0000e0 face="Andale Mono"><strong>Set</strong></font><font size=1 face="Andale Mono"> jclass = jses.GetClass(</font><font size=1 color=#4100c2 face="Andale Mono"><em>"TCPClient"</em></font><font size=1 face="Andale Mono">)</font><font size=3> </font><font size=1 face="Andale Mono"><br />  &nbsp; &nbsp; &nbsp; &nbsp;</font><font size=1 color=#0000e0 face="Andale Mono"><strong>Dim</strong></font><font size=1 face="Andale Mono"> jmc </font><font size=1 color=#0000e0 face="Andale Mono"><strong>As</strong></font><font size=1 face="Andale Mono"> Javamethodcollection</font><font size=3> </font><font size=1 face="Andale Mono"><br />  &nbsp; &nbsp; &nbsp; &nbsp;</font><font size=1 color=#0000e0 face="Andale Mono"><strong>Dim</strong></font><font size=1 face="Andale Mono"> jm </font><font size=1 color=#0000e0 face="Andale Mono"><strong>As</strong></font><font size=1 face="Andale Mono"> Javamethod</font><font size=3> </font><font size=1 face="Andale Mono"><br />  &nbsp; &nbsp; &nbsp; &nbsp;</font><font size=1 color=#0000e0 face="Andale Mono"><strong>Set</strong></font><font size=1 face="Andale Mono"> jmc = jclass.Getclassmethods</font><font size=3> </font><font size=1 face="Andale Mono"><br />  &nbsp; &nbsp; &nbsp; &nbsp;</font><font size=1 color=#0000e0 face="Andale Mono"><strong>Set</strong></font><font size=1 face="Andale Mono"> jm = jmc.Getfirst</font><font size=3> </font><font size=1 face="Andale Mono"><br />  &nbsp; &nbsp; &nbsp; &nbsp;</font><font size=1 color=#0000e0 face="Andale Mono"><strong>Dim</strong></font><font size=1 face="Andale Mono"> methods$</font><font size=3> </font><font size=1 face="Andale Mono"><br />  &nbsp; &nbsp; &nbsp; &nbsp;</font><font size=1 color=#0000e0 face="Andale Mono"><strong>Do</strong></font><font size=1 face="Andale Mono"> </font><font size=1 color=#0000e0 face="Andale Mono"><strong>Until</strong></font><font size=1 face="Andale Mono"> jm </font><font size=1 color=#0000e0 face="Andale Mono"><strong>Is</strong></font><font size=1 face="Andale Mono"> </font><font size=1 color=#0000e0 face="Andale Mono"><strong>Nothing</strong></font><font size=3> </font><font size=1 face="Andale Mono"><br />  &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;methods = methods &amp; </font><font size=1 color=#4100c2 face="Andale Mono"><em>{</em></font><font size=3> </font><font size=1 color=#4100c2 face="Andale Mono"><em><br /> }</em></font><font size=1 face="Andale Mono"> &amp; jm.Methodname &amp; </font><font size=1 color=#4100c2 face="Andale Mono"><em>" - '"</em></font><font size=1 face="Andale Mono"> &amp; jm.Signature &amp; "'"</font><font size=3> </font><font size=1 face="Andale Mono"><br />  &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;</font><font size=1 color=#0000e0 face="Andale Mono"><strong>Set</strong></font><font size=1 face="Andale Mono"> jm = jmc.Getnext</font><font size=3> </font><font size=1 face="Andale Mono"><br />  &nbsp; &nbsp; &nbsp; &nbsp;</font><font size=1 color=#0000e0 face="Andale Mono"><strong>Loop</strong></font><font size=3> </font><font size=1 face="Andale Mono"><br />  &nbsp; &nbsp; &nbsp; &nbsp;</font><font size=1 color=#0000e0 face="Andale Mono"><strong>MessageBox</strong></font><font size=1 face="Andale Mono"> </font><font size=1 color=#0000e0 face="Andale Mono"><strong>Mid$</strong></font><font size=1 face="Andale Mono">(methods, </font><font size=1 color=#4100c2 face="Andale Mono"><em>2</em></font><font size=1 face="Andale Mono">)</font><font size=2 face="sans-serif"></div></font><font size=3> </font><font size=2 face="sans-serif"><br /> which gives the following output:</font><font size=3> </font> <p><tt><font size=2><pre>equals - '(Ljava/lang/Object;)Z'</font></tt><tt><font size=3> </font></tt><tt><font size=2><br /> hashCode - '()I'</font></tt><tt><font size=3> </font></tt><tt><font size=2><br /> toString - '()Ljava/lang/String;'</font></tt><tt><font size=3> </font></tt><tt><font size=2><br /> getClass - '()Ljava/lang/Class;'</font></tt><tt><font size=3> </font></tt><tt><font size=2><br /> notify - '()V'</font></tt><tt><font size=3> </font></tt><tt><font size=2><br /> notifyAll - '()V'</font></tt><tt><font size=3> </font></tt><tt><font size=2><br /> wait - '()V'</font></tt><tt><font size=3> </font></tt><tt><font size=2><br /> wait - '(J)V'</font></tt><tt><font size=3> </font></tt><tt><font size=2><br /> wait - '(JI)V'</font></tt><tt><font size=3> </font></tt><tt><font size=2><br /> ping - '(Ljava/lang/String;II)Z'</font></tt><tt><font size=3> </font></tt><tt><font size=2><br /> DNSLookup - '(Ljava/lang/String;)Ljava/lang/String;'</font></tt><tt><font size=3> </font></tt><tt><font size=2><br /> HTTPPing - '(Ljava/lang/String;)I'</pre></font></tt><tt><font size=3> </font></tt> <p><font size=2 face="sans-serif">So we can see from the last entry exactly what the signature argument should be.</font>  ]]></content:encoded>
<wfw:commentRss> http://www-10.lotus.com/ldd/bpmpblog.nsf/dxcomments/ls2j-static-method-calls</wfw:commentRss>
<wfw:comment> http://www-10.lotus.com/ldd/bpmpblog.nsf/dx/ls2j-static-method-calls?opendocument&amp;comments</wfw:comment>
</item>
<item>
<title>Another way to make an efficient date/based view</title>
<pubDate>Mon, 23 May 2011 15:50:14 -0500</pubDate>
<description>
<![CDATA[ 
This technique isn't applicable in all situations, but it's a way to make a date or time-based view whose index is only rebuilt when needed, and doesn't require that the date be hardcoded into a desig ...
 ]]>
</description>
<link>http://www-10.lotus.com/ldd/bpmpblog.nsf/dx/another-way-to-make-an-efficient-datebased-view</link>
<category></category>
<dc:creator>Andre Guirard</dc:creator>
<comments>http://www-10.lotus.com/ldd/bpmpblog.nsf/dx/another-way-to-make-an-efficient-datebased-view?opendocument&amp;comments</comments>
<guid isPermaLink="true">http://www-10.lotus.com/ldd/bpmpblog.nsf/dx/another-way-to-make-an-efficient-datebased-view</guid>
<content:encoded><![CDATA[ <font size=2 face="sans-serif">This technique isn't applicable in all situations, but it's a way to make a date or time-based view whose index is only rebuilt when needed, and doesn't require that the date be hardcoded into a design element. The example is intended for use in the Notes mail file, where there's only one user who we're mainly concerned about. It could be used in a shared app context, but in that case it should be set up to use the server's time settings, not the client's as in this example, since different users would be plugging in different formulas and causing constant rebuilds based on their client's settings as opposed to someone else's.</font><font size=3> </font><font size=2 face="sans-serif"><br /> The problem is how to get the view index to be rebuilt only when it is needed, and without "flashing" (i.e. we don't want to open the view and then notice it's out of date). I've been testing this solution and it seems to work.</font><font size=3> <br /> </font><font size=2 face="sans-serif"><br /> In the folder, you define a UDC (user-definable column) whose item name is, say "$ZoneDay":</font><font size=3> <br /> </font><img  alt="Image:Another way to make an efficient date/based view" border="0" src="http://www-10.lotus.com/ldd/bpmpblog.nsf/dx/another-way-to-make-an-efficient-datebased-view/content/M2?OpenElement" /><img  alt="Image:Another way to make an efficient date/based view" border="0" src="http://www-10.lotus.com/ldd/bpmpblog.nsf/dx/another-way-to-make-an-efficient-datebased-view/content/M3?OpenElement" /><font size=2 face="sans-serif"><br /> We use the profile name ColorProfile because the Inbox already contains another UDC with the same profile, and any given view can only use one profile doc for UDCs.</font><font size=3> <br /> </font><font size=2 face="sans-serif"><br /> Now, you have to set up the profile document to contain the correct formula for the date-based value you'd like it to display. For this we can use the view's queryopen event, for instance:</font><font size=3> </font><font size=2 face="sans-serif"><br /> <div class="code"></font><tt><font size=2>Sub Queryopen(Source As Notesuiview, Continue As Variant)</font></tt><font size=3> </font><tt><font size=2><br />  &nbsp; &nbsp; &nbsp; &nbsp;Dim db As NotesDatabase, sess As New notessession</font></tt><font size=3> </font><tt><font size=2><br />  &nbsp; &nbsp; &nbsp; &nbsp;Set db = sess.CurrentDatabase</font></tt><font size=3> </font><tt><font size=2><br />  &nbsp; &nbsp; &nbsp; &nbsp;Dim docPro As NotesDocument, curFormula$, newFormula$, midnight$, gmtMid</font></tt><font size=3> </font><tt><font size=2><br />  &nbsp; &nbsp; &nbsp; &nbsp;Dim tmpTime As New NotesDateTime("")</font></tt><font size=3> </font><tt><font size=2><br />  &nbsp; &nbsp; &nbsp; &nbsp;tmpTime.lslocaltime = Today ' which translates to today at midnight.</font></tt><font size=3> </font><tt><font size=2><br />  &nbsp; &nbsp; &nbsp; &nbsp;gmtMid = tmpTime.LSGMTTime</font></tt><font size=3> </font><tt><font size=2><br />  &nbsp; &nbsp; &nbsp; &nbsp;midnight = {@ToTime(@Text(@Date(} &amp; Year(gmtMid) &amp; {; } &amp; Month(gmtMid) &amp; {; } &amp; Day(gmtMid) &amp; {; } &amp; Hour(gmtMid) &amp; {; } &amp; Minute(gmtMid) &amp; {; 0)) + " GMT")}</font></tt><font size=3> </font><tt><font size=2><br />  &nbsp; &nbsp; &nbsp; &nbsp;<br />  &nbsp; &nbsp; &nbsp; &nbsp;Set docPro = db.GetProfileDocument("colorprofile")</font></tt><font size=3> </font><tt><font size=2><br />  &nbsp; &nbsp; &nbsp; &nbsp;curFormula = Replace(docPro.GetItemValue("$ZoneDay")(0), Chr$(13), "")</font></tt><font size=3> </font><tt><font size=2><br />  &nbsp; &nbsp; &nbsp; &nbsp;newFormula = {todayMid := } &amp; midnight &amp; {;</font></tt><font size=3> </font><tt><font size=2><br /> daysOld := (todayMid-PostedDate) / 86400;</font></tt><font size=3> </font><tt><font size=2><br /> @If(daysOld <= 0; "today"; daysOld <= 1; "yesterday"; "older " + @Text(@Integer(daysOld)))}</font></tt><font size=3> </font><tt><font size=2><br />  &nbsp; &nbsp; &nbsp; &nbsp;If curFormula <> newFormula Then</font></tt><font size=3> </font><tt><font size=2><br />  &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;docPro.ReplaceItemValue "$ZoneDay", newFormula</font></tt><font size=3> </font><tt><font size=2><br />  &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;docPro.Save True, False, True</font></tt><font size=3> </font><tt><font size=2><br />  &nbsp; &nbsp; &nbsp; &nbsp;End If</font></tt><font size=3> </font><tt><font size=2><br /> End Sub</font></tt><font size=2 face="sans-serif"></div></font><font size=3> <br /> </font><font size=2 face="sans-serif"><br /> Some comments about this approach:</font><font size=3> </font> <ul> <li><font size=2 face="sans-serif">On the line beginning "midnight =", we represent the date by using the @Date function with six arguments. This is done rather than just hardcoding the time constant &#91;mm/dd/yyyy hh:mm:ss GMT&#93; for instance, because we have no way to know the server's date formatting settings. The formula has to be comprehensible by the server, but this code executes on the client, so we can't just format the date as the client would by default.</font><font size=3> </font> </li><li><font size=2 face="sans-serif">If performance ends up being a problem and you want to find a way to format the date so the server understands it, you might:</font><font size=3> </font> <ul> </li><li><font size=2 face="sans-serif">try using the @TimeMerge function.</font><font size=3> </font> </li><li><font size=2 face="sans-serif">see whether the format &#91;yyyy/mm/dd hh:mm:ss am/pm&#93; is interpreted the same by all servers (note, however, that "/" might not be universally used as a date delimiter).</font><font size=3> </font> </li><li><font size=2 face="sans-serif">I'm trying to get a way of representing date/times that's static across all platforms and settings, e.g. as a hex code. I need it for DXL, but as we can see here there are other applications for it.</font></li></ul> <li><font size=2 face="sans-serif">When it's asked to open the view, the view indexer is smart enough to know that if the profile document (colorprofile in this case) has been modified since the view was last opened, that means that a column formula might evaluate differently for existing documents. So it knows in that case to rebuild the view index rather than refreshing. So don't save changes to the profile doc unless you mean it.</font><font size=3> </font> </li><li><font size=2 face="sans-serif">This approach is doesn't require Designer access for the end user, only enough authority to edit a shared profile document, which they need anyway to edit their own mail preferences. In other applications where users might not have enough muscle to do this, you might need to make the profile document contain an explicit Authors field to allow this access. It could get tricky, which is why I say this might not be applicable for all apps.</font><font size=3> </font> </li><li><font size=2 face="sans-serif">If you wanted to use the server's timezone settings to determine the day divisions, instead of the client's settings, you can get rid of the timezone stuff and just use the @Date function (you still can't hardcode the date in &#91;brackets&#93; without knowing how the server formats dates).</font><font size=3> </font> </li><li><font size=2 face="sans-serif">There's an extra argument to @Now to return the server's current time, and you can use that to determine what the server thinks the date is. This is not 100% obvious how to do; I think you'll have to use @Text in your Evaluate call with certain arguments, to get the time in the server's zone.</font></li></ul>  ]]></content:encoded>
<wfw:commentRss> http://www-10.lotus.com/ldd/bpmpblog.nsf/dxcomments/another-way-to-make-an-efficient-datebased-view</wfw:commentRss>
<wfw:comment> http://www-10.lotus.com/ldd/bpmpblog.nsf/dx/another-way-to-make-an-efficient-datebased-view?opendocument&amp;comments</wfw:comment>
</item>
<item>
<title>Good news for DXL exporting</title>
<pubDate>Mon, 4 Apr 2011 09:09:24 -0500</pubDate>
<description>
<![CDATA[ 
The fix is in 8.5.3; DXL exporting of file attachments (and all base64) is now substantially faster, on the order of 50%. As always, no change can be considered final until the product is released. ...
 ]]>
</description>
<link>http://www-10.lotus.com/ldd/bpmpblog.nsf/dx/good-news-dxl-export</link>
<category>DXL</category>
<dc:creator>Andre Guirard</dc:creator>
<comments>http://www-10.lotus.com/ldd/bpmpblog.nsf/dx/good-news-dxl-export?opendocument&amp;comments</comments>
<guid isPermaLink="true">http://www-10.lotus.com/ldd/bpmpblog.nsf/dx/good-news-dxl-export</guid>
<content:encoded><![CDATA[ <font size=2 face="sans-serif">The fix is in 8.5.3; DXL exporting of file attachments (and all base64) is now substantially faster, on the order of 50%. As always, no change can be considered final until the product is released.</font>  ]]></content:encoded>
<wfw:commentRss> http://www-10.lotus.com/ldd/bpmpblog.nsf/dxcomments/good-news-dxl-export</wfw:commentRss>
<wfw:comment> http://www-10.lotus.com/ldd/bpmpblog.nsf/dx/good-news-dxl-export?opendocument&amp;comments</wfw:comment>
</item>
<item>
<title>Ripped off content</title>
<pubDate>Wed, 16 Mar 2011 09:51:16 -0500</pubDate>
<description>
<![CDATA[ 
If you're reading this on the blog of Bruno Grange, please be advised that it was ripped off of the blog of Andre Guirard - http://www-10.lotus.com/ldd/bpmpblog.nsf . Much of this content seems to hav ...
 ]]>
</description>
<link>http://www-10.lotus.com/ldd/bpmpblog.nsf/dx/ripped-off-content</link>
<category>General Musings</category>
<dc:creator>Andre Guirard</dc:creator>
<comments>http://www-10.lotus.com/ldd/bpmpblog.nsf/dx/ripped-off-content?opendocument&amp;comments</comments>
<guid isPermaLink="true">http://www-10.lotus.com/ldd/bpmpblog.nsf/dx/ripped-off-content</guid>
<content:encoded><![CDATA[ <font size=2 face="sans-serif">If you're reading this on the blog of Bruno Grange, please be advised that it was ripped off of the blog of Andre Guirard - http://www-10.lotus.com/ldd/bpmpblog.nsf . Much of this content seems to have been copied without permission.</font>  ]]></content:encoded>
<wfw:commentRss> http://www-10.lotus.com/ldd/bpmpblog.nsf/dxcomments/ripped-off-content</wfw:commentRss>
<wfw:comment> http://www-10.lotus.com/ldd/bpmpblog.nsf/dx/ripped-off-content?opendocument&amp;comments</wfw:comment>
</item>
<item>
<title>Good news for LotusScript editing</title>
<pubDate>Fri, 11 Mar 2011 12:03:29 -0500</pubDate>
<description>
<![CDATA[ 
I'd earlier reported a weird bug that caused one script library to suddenly get dozens of superfluous errors when another library that it includes, is edited. I got word this morning that a fix was su ...
 ]]>
</description>
<link>http://www-10.lotus.com/ldd/bpmpblog.nsf/dx/good-news-for-lotusscript-editing</link>
<category>Object Oriented Programming (OOP)</category>
<dc:creator>Andre Guirard</dc:creator>
<comments>http://www-10.lotus.com/ldd/bpmpblog.nsf/dx/good-news-for-lotusscript-editing?opendocument&amp;comments</comments>
<guid isPermaLink="true">http://www-10.lotus.com/ldd/bpmpblog.nsf/dx/good-news-for-lotusscript-editing</guid>
<content:encoded><![CDATA[ <font size=2 face="sans-serif">I'd earlier reported a weird bug that caused one script library to suddenly get dozens of superfluous errors when another library that it includes, is edited. I got word this morning that a fix was submitted for 8.5.3. Caveat: As usual, nothing is final until it's released.</font>  ]]></content:encoded>
<wfw:commentRss> http://www-10.lotus.com/ldd/bpmpblog.nsf/dxcomments/good-news-for-lotusscript-editing</wfw:commentRss>
<wfw:comment> http://www-10.lotus.com/ldd/bpmpblog.nsf/dx/good-news-for-lotusscript-editing?opendocument&amp;comments</wfw:comment>
</item>
<item>
<title>On improving performance of views with response docs</title>
<pubDate>Tue, 1 Mar 2011 07:26:22 -0500</pubDate>
<description>
<![CDATA[ 
At Lotusphere 2011, I attended a session by Andrew Pollack (BP114, a nice presentation which you can download here). Andrew suggested replacing @IsResponseDoc in view selection formula... ...
 ]]>
</description>
<link>http://www-10.lotus.com/ldd/bpmpblog.nsf/dx/on-improving-performance-of-views-with-response-docs</link>
<category>Domino Application Performance</category>
<dc:creator>Andre Guirard</dc:creator>
<comments>http://www-10.lotus.com/ldd/bpmpblog.nsf/dx/on-improving-performance-of-views-with-response-docs?opendocument&amp;comments</comments>
<guid isPermaLink="true">http://www-10.lotus.com/ldd/bpmpblog.nsf/dx/on-improving-performance-of-views-with-response-docs</guid>
<content:encoded><![CDATA[ <font size=2 face="sans-serif">At Lotusphere 2011, I attended a session by Andrew Pollack (BP114, a nice presentation which you can download </font><a href=http://www.thenorth.com/northern.nsf/0/FCD94AB1D8405CF2852576B60046A8EB><font size=2 color=blue face="sans-serif"><span style="text-decoration:underline">here</span></font></a><font size=2 face="sans-serif">). Andrew suggested replacing @IsResponseDoc in view selection formula with @AllDescendants as a way to help performance. (Actually he said @Responses but I think he meant @IsResponseDoc). At the time, I said I didn't think it was quite that simple; this is the promised follow-up to explain what I meant.</font><font size=3> </font> <p><font size=2 face="sans-serif">There are two important differences between @IsResponseDoc and @AllDescendants: </font> <ul> <li><font size=2 face="sans-serif">@AllDescendants fails if you enable the database option "Don't support specialized response hierarchy." Easy to fix, but you have to know to check.</font><font size=3> </font> </li><li><font size=2 face="sans-serif">The view indexer ignores the position of @AllDescendants in a logical expression, acting like the expression is always SELECT (rest of your expression) | @AllDescendants. </font></li></ul><font size=2 face="sans-serif">So you might not get the same set of documents after you make this change.</font><font size=3> </font> <p><font size=2 face="sans-serif">I created a sample database to illustrate what happens. Here's the "All" view. <br /> <img  src="http://www-10.lotus.com/ldd/bpmpblog.nsf/dx/isreponse1.gif/$file/isreponse1.gif" alt="All docs and responses"/></font><font size=3> </font> <p><font size=2 face="sans-serif">Then I created some views that (supposedly) contain just the Active projects and their responses. Here's the one that uses @IsResponseDoc: <br /> <img  src="http://www-10.lotus.com/ldd/bpmpblog.nsf/dx/isreponse2.gif/$file/isreponse2.gif" alt="Active docs and responses"/></font><font size=3> </font> <p><font size=2 face="sans-serif">Looks OK, but there's a problem. @IsResponseDoc matches all responses, not just those whose main documents are also in the view. You can see the result by looking at the view index sizes in Domino Administrator, or you can prove it in the client by creating a full-text index and running a search. <br /> <img  src="http://www-10.lotus.com/ldd/bpmpblog.nsf/dx/isreponse3.gif/$file/isreponse3.gif" alt="Full-text search reveals hidden response doc"/> </font> <p><font size=2 face="sans-serif">Where did this document come from? This response's main document isn't in the view; the World Domination plan isn't at Active status (yet). So the response doc is not only taking up space in the view index uselessly, it's confusing matters by incorrectly being part of search results. <br /> You can fix this by changing @IsResponseDoc to @AllDescendants. The resulting view looks exactly the same, but doesn't have the odd search behavior. <br /> <img  src="http://www-10.lotus.com/ldd/bpmpblog.nsf/dx/isreponse4.gif/$file/isreponse4.gif" alt="View no longer contains responses to docs whose parents aren't there"/> </font> <p><font size=2 face="sans-serif">This view has been improved by making the replacement. I have no argument with that. So where's the problem? Consider this view: <br /> <img  src="http://www-10.lotus.com/ldd/bpmpblog.nsf/dx/isreponse5.gif/$file/isreponse5.gif" alt="Active projects view with date-based limitation on response docs"/></font><font size=3> </font> <p><font size=2 face="sans-serif">We're no longer interested in seeing all responses. We have additional criteria for our response docs; they must also have been written since the start of 2010. Only two responses meet this criterion (actually, three, but one is a response to response whose parent, another response document, is too old to show up here, so it only shows up in searches. Tricky, eh?). </font> <p><font size=2 face="sans-serif">See what happens if we replace @IsResponseDoc in this formula with @AllDescendants: <br /> <img  src="http://www-10.lotus.com/ldd/bpmpblog.nsf/dx/isreponse6.gif/$file/isreponse6.gif" alt="@AllDescendants makes date test fail."/> </font> <p><font size=2 face="sans-serif">There are more documents visible now. The response document "Wrote Chapter 1" appears in the view even though it doesn't meet the date criterion. That happens because the view indexer implements @AllDescendants by evaluating all the documents against the formula first, then for each matching document, it finds all that document's responses, and their responses, and sticks them in the view index also, without referring back to the formula to see whether they match any additional criteria. In any case, whatever the reason, the consequence is that replacing @IsResponseDoc with @AllDescendants doesn't yield an identical result. You can't just mindlessly make this substitution. </font> <p><font size=2 face="sans-serif">It would be nice to be able to specify that the view contain all responses that meet a certain rule, but only if they're responses to main docs in the view. However, that doesn't seem to be an option. I'll bring it up with the view indexing people, but for now, that's the limitation.</font> <p><font size=2 face="sans-serif"><strong>Download the sample database:</strong> <a href="http://www-10.lotus.com/ldd/bpmpblog.nsf/dx/allDescSample.zip/$file/allDescSample.zip" title="allDescSample.zip"allDescSample.zip/>allDescSample.zip</a></font>  ]]></content:encoded>
<wfw:commentRss> http://www-10.lotus.com/ldd/bpmpblog.nsf/dxcomments/on-improving-performance-of-views-with-response-docs</wfw:commentRss>
<wfw:comment> http://www-10.lotus.com/ldd/bpmpblog.nsf/dx/on-improving-performance-of-views-with-response-docs?opendocument&amp;comments</wfw:comment>
</item>
<item>
<title>Expand sections on document open</title>
<pubDate>Fri, 4 Feb 2011 11:58:43 -0500</pubDate>
<description>
<![CDATA[ 
A business partner approached me at Lotusphere with this problem, and after playing around with it a little, it seemed to me the workaround might be useful to others with similar requirements, so here ...
 ]]>
</description>
<link>http://www-10.lotus.com/ldd/bpmpblog.nsf/dx/expand-sections-on-document-open</link>
<category>LotusScript</category>
<dc:creator>Andre Guirard</dc:creator>
<comments>http://www-10.lotus.com/ldd/bpmpblog.nsf/dx/expand-sections-on-document-open?opendocument&amp;comments</comments>
<guid isPermaLink="true">http://www-10.lotus.com/ldd/bpmpblog.nsf/dx/expand-sections-on-document-open</guid>
<content:encoded><![CDATA[ <font size=2 face="sans-serif">A business partner approached me at Lotusphere with this problem, and after playing around with it a little, it seemed to me the workaround might be useful to others with similar requirements, so here it is.</font><font size=3> </font> <p><font size=2 face="sans-serif"><strong>Requirement:</strong> set up the Memo form so that if it contained collapsed sections (e.g. a reply thread), all the sections would be automatically expanded on open.</font><font size=3> </font> <p><font size=2 face="sans-serif"><strong>Problem:</strong> the function NotesUIDocument.ExpandAllSections doesn't work when used on a form that has a non-scrolling header, like the Memo form in the Notes mail file. You get the error message "Document command is not available." This was reported as SPR BHUY82WLWZ.</font><font size=3> </font> <p><font size=2 face="sans-serif">The corresponding @Command (&#91;SectionExpandAll&#93;) <em>does</em> work in this situation, but there was existing LotusScript code in the Postopen event that couldn't be rewritten in formula language.</font><font size=3> </font> <p><font size=2 face="sans-serif">You can't call a formula that uses the UI from LotusScript (well you can, but it doesn't do anything). So Evaluate and NotesAgent.Run were out. How do we combine the LotusScript event code with the formula command?</font><font size=3> </font> <p><font size=2 face="sans-serif"><strong>Answer: </strong>Fortunately, there are duplicate form opening events -- Postopen and onLoad -- so you can put your script in one and the formula in the other. They both execute, though I'm not sure offhand in what order.</font><font size=3> </font> <p><font size=2 face="sans-serif">Failing that (if it's for a different event), add a subform to the form and write formula for the subform event, and LotusScript for the form event (or vice versa).</font> <p><font size=2 face="sans-serif"><strong>Caveat: </strong>If there are no sections in the document, @Command (&#91;SectionExpandAll&#93;) returns an error value. If you want to ignore that error, you need another line in your formula to substitute a non-error return value. For instance:</font> <p><font size=2 face="sans-serif"><div class="code">@Command (&#91;SectionExpandAll&#93;);<br /> ""</div></font>  ]]></content:encoded>
<wfw:commentRss> http://www-10.lotus.com/ldd/bpmpblog.nsf/dxcomments/expand-sections-on-document-open</wfw:commentRss>
<wfw:comment> http://www-10.lotus.com/ldd/bpmpblog.nsf/dx/expand-sections-on-document-open?opendocument&amp;comments</wfw:comment>
</item>
<item>
<title>Using a NotesNoteCollection as a &#8217;manual&#8217; note container</title>
<pubDate>Thu, 3 Feb 2011 08:46:05 -0400</pubDate>
<description>
<![CDATA[ 
From a question in one of the BOFs here, I've learned that the documentation of the LotusScript NotesNoteCollection method (NotesCollection in the Java API) contains a significant error. The help for ...
 ]]>
</description>
<link>http://www-10.lotus.com/ldd/bpmpblog.nsf/dx/using-a-notesnotecollection-as-a-manual-note-container</link>
<category>LotusScript</category>
<dc:creator>Andre Guirard</dc:creator>
<comments>http://www-10.lotus.com/ldd/bpmpblog.nsf/dx/using-a-notesnotecollection-as-a-manual-note-container?opendocument&amp;comments</comments>
<guid isPermaLink="true">http://www-10.lotus.com/ldd/bpmpblog.nsf/dx/using-a-notesnotecollection-as-a-manual-note-container</guid>
<content:encoded><![CDATA[ <font size=2 face="sans-serif">From a question in one of the BOFs here, I've learned that the documentation of the LotusScript NotesNoteCollection method (NotesCollection in the Java API) contains a significant error. The help for the BuildCollection method says, "You must build the collection before it is usable." This is wrong. The documentation writers were only imagining one use for the collection -- to search for notes.</font> <p><font size=2 face="sans-serif">But there's another use for a NotesNoteCollection -- as a generic container for notes that you find by some other means, and add to the collection with the Add method. If this is how you're using the object, there's no need to call BuildCollection.</font> <p><font size=2 face="sans-serif">This is a significant difference, because BuildCollection takes time to execute even if you haven't specified any search criteria. Speed things up by deleting the call.</font>  ]]></content:encoded>
<wfw:commentRss> http://www-10.lotus.com/ldd/bpmpblog.nsf/dxcomments/using-a-notesnotecollection-as-a-manual-note-container</wfw:commentRss>
<wfw:comment> http://www-10.lotus.com/ldd/bpmpblog.nsf/dx/using-a-notesnotecollection-as-a-manual-note-container?opendocument&amp;comments</wfw:comment>
</item>
<item>
<title>Lotuspheres are contiguous</title>
<pubDate>Tue, 1 Feb 2011 08:37:30 -0400</pubDate>
<description>
<![CDATA[ 
Waiting for the keynote to start... It's always a kick to come to Lotusphere -- and when I'm here, it seems to be a continuation of previous years, as if the chunks of my life that are Lotusphere are ...
 ]]>
</description>
<link>http://www-10.lotus.com/ldd/bpmpblog.nsf/dx/lotuspheres-are-contiguous</link>
<category>Lotus Conferences</category>
<dc:creator>Andre Guirard</dc:creator>
<comments>http://www-10.lotus.com/ldd/bpmpblog.nsf/dx/lotuspheres-are-contiguous?opendocument&amp;comments</comments>
<guid isPermaLink="true">http://www-10.lotus.com/ldd/bpmpblog.nsf/dx/lotuspheres-are-contiguous</guid>
<content:encoded><![CDATA[ <font size=2 face="sans-serif">Waiting for the keynote to start...</font> <p><font size=2 face="sans-serif">It's always a kick to come to Lotusphere -- and when I'm here, it seems to be a continuation of previous years, as if the chunks of my life that are Lotusphere are yanked out of the rest and arranged consecutively. Certain things are constants -- shin splints for one, from the basic conflict between having to walk at least three miles a day, and IBM's suggestion that we should be somewhat formally dressed. The food service's lame idea of gluten-free. The familiar faces.</font> <p><font size=2 face="sans-serif">Speaking of familiar faces, I want to confess a failing... I'm very, very bad with faces; borderline prosopagnosia. It's generally been the case that more people at Lotusphere know who I am, than I know. But even people I've had dealings with, I don't necessarily recognize them when I see them. So if you greet me and I don't seem to know who you are, or have to sneak a peek at your badge to refresh my memory, it's nothing personal. It doesn't mean I don't remember you; just having difficulty linking the face to the identity. It's always amazed me how easily people recognize others; for me, it's hard.</font> <p><font size=2 face="sans-serif">This year's conference is a little more exciting than most owing to my receiving this year's </font><a href="http://www.penumbragroup.com/index-1.htm"><font size=2 color=blue face="sans-serif">Penumbra Prism award</font></a><font size=2 face="sans-serif">. I'm honored, and glad that I've been able to build a good relationship with the business partner community. It's encouraging that other see value in my activities around developer enablement and best practices, and I see my role within IBM as a spokesperson for the developer and partner community from the technical perspective; I want to make sure that the features and fixes that go in are the ones that'll make development simpler and free of nasty surprises. When we add a new feature, I want to make sure it's done in a way that actually makes it useful in applications. That's not to say that I'm always consulted, but I weigh in when I get a chance.</font>  ]]></content:encoded>
<wfw:commentRss> http://www-10.lotus.com/ldd/bpmpblog.nsf/dxcomments/lotuspheres-are-contiguous</wfw:commentRss>
<wfw:comment> http://www-10.lotus.com/ldd/bpmpblog.nsf/dx/lotuspheres-are-contiguous?opendocument&amp;comments</wfw:comment>
</item>
<item>
<title>DXL importing issue -- you may want hotfix</title>
<pubDate>Mon, 17 Jan 2011 11:48:43 -0500</pubDate>
<description>
<![CDATA[ 
From a service issue I've been working with one of our customers, I've discovered that there's a problem importing DXL containing large blocks of base64 data -- more than 4MB -- which would include an ...
 ]]>
</description>
<link>http://www-10.lotus.com/ldd/bpmpblog.nsf/dx/dxl-importing-issue-may-want-hotfix</link>
<category>DXL</category>
<dc:creator>Andre Guirard</dc:creator>
<comments>http://www-10.lotus.com/ldd/bpmpblog.nsf/dx/dxl-importing-issue-may-want-hotfix?opendocument&amp;comments</comments>
<guid isPermaLink="true">http://www-10.lotus.com/ldd/bpmpblog.nsf/dx/dxl-importing-issue-may-want-hotfix</guid>
<content:encoded><![CDATA[ <font size=2 face="sans-serif">From a service issue I've been working with one of our customers, I've discovered that there's a problem importing DXL containing large blocks of base64 data -- more than 4MB -- which would include any file attachments > 3MB, for instance. You would get this error message in the importer log: "Base64 byte stream contains invalid data or is too large to store in a single note item." (Of course, you can also get this error if your data really is invalid.)</font><font size=3> </font> <p><font size=2 face="sans-serif">This might happen in about 2% of cases involving large attachments or other large base64 blocks, and is essentially random (but consistent for a given input DXL).</font><font size=3> </font> <p><font size=2 face="sans-serif">I've come up with a fix for this in 8.5.3, and we're building a hotfix for at least one other version. If this may be an issue for your applications, please contact Lotus Support, referencing SPR #<strong>AGUD8D7V55</strong>. I'm also writing a technote, currently in internal review.</font><font size=3> </font>  ]]></content:encoded>
<wfw:commentRss> http://www-10.lotus.com/ldd/bpmpblog.nsf/dxcomments/dxl-importing-issue-may-want-hotfix</wfw:commentRss>
<wfw:comment> http://www-10.lotus.com/ldd/bpmpblog.nsf/dx/dxl-importing-issue-may-want-hotfix?opendocument&amp;comments</wfw:comment>
</item>
</channel></rss>

