<?xml version="1.0" encoding="UTF-8"?>
<?xml-stylesheet type="text/xsl" media="screen" href="/~d/styles/atom10full.xsl"?><?xml-stylesheet type="text/css" media="screen" href="http://feeds.feedburner.com/~d/styles/itemcontent.css"?><feed xmlns="http://www.w3.org/2005/Atom" xmlns:openSearch="http://a9.com/-/spec/opensearch/1.1/" xmlns:georss="http://www.georss.org/georss" xmlns:gd="http://schemas.google.com/g/2005" xmlns:feedburner="http://rssnamespace.org/feedburner/ext/1.0" gd:etag="W/&quot;A0AGRXY-eSp7ImA9WxBTFE8.&quot;"><id>tag:blogger.com,1999:blog-3745504982837212509</id><updated>2009-12-10T08:22:04.851+01:00</updated><title>DontPanic - a blog about Lotus Notes / Domino</title><subtitle type="html">My useful and useless experiments with Lotus Notes / Domino</subtitle><link rel="http://schemas.google.com/g/2005#feed" type="application/atom+xml" href="http://dontpanic82.blogspot.com/feeds/posts/default" /><link rel="alternate" type="text/html" href="http://dontpanic82.blogspot.com/" /><link rel="hub" href="http://pubsubhubbub.appspot.com/" /><link rel="next" type="application/atom+xml" href="http://www.blogger.com/feeds/3745504982837212509/posts/default?start-index=26&amp;max-results=25&amp;redirect=false&amp;v=2" /><author><name>Tommy Valand</name><uri>http://www.blogger.com/profile/11052104644034054473</uri><email>noreply@blogger.com</email></author><generator version="7.00" uri="http://www.blogger.com">Blogger</generator><openSearch:totalResults>201</openSearch:totalResults><openSearch:startIndex>1</openSearch:startIndex><openSearch:itemsPerPage>25</openSearch:itemsPerPage><link rel="self" href="http://feeds.feedburner.com/dontpanic82" type="application/atom+xml" /><atom10:link xmlns:atom10="http://www.w3.org/2005/Atom" rel="hub" href="http://pubsubhubbub.appspot.com" /><entry gd:etag="W/&quot;A0cASHg9fCp7ImA9WxBTFE8.&quot;"><id>tag:blogger.com,1999:blog-3745504982837212509.post-5402322976241058370</id><published>2009-12-09T09:34:00.007+01:00</published><updated>2009-12-10T08:10:49.664+01:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2009-12-10T08:10:49.664+01:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="bugs" /><category scheme="http://www.blogger.com/atom/ns#" term="xpages" /><title>Sloppy multi-value implementation in XPages</title><content type="html">&lt;strong&gt;Update:&lt;/strong&gt; &lt;a href="http://files.dontpanic82.com/multivaluebug.zip"&gt;Demoapp for testing the bug&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;I reported this to IBM today (my first Service Request). I thought I should share the bugs, so others are aware of it.&lt;br /&gt;&lt;br /&gt;&lt;h3&gt;Bug with multi-value fields and converters in XPages&lt;/h3&gt;&lt;br /&gt;&lt;pre&gt;&lt;code&gt;By multi-value field, I mean a field that have the multi-value &lt;br /&gt;separator set.&lt;br /&gt;&lt;br /&gt;When saving a multi-value field of type String, the value alternates &lt;br /&gt;between being split into multi-value, and being a flat string. &lt;br /&gt;First save -&gt; multi-value&lt;br /&gt;Second save -&gt; flat string&lt;br /&gt;Third save -&gt; multi-value&lt;br /&gt;&lt;br /&gt;When saving a multi-value field of type date or number, the field only saves &lt;br /&gt;the first value.&lt;br /&gt;&lt;br /&gt;I also tried using a custom converter to modify the field &lt;br /&gt;(getAsObject -&gt; split, getAsString -&gt; join). This doesn't work at all. &lt;br /&gt;It seems custom converters only can be result in string values.&lt;/code&gt;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;Example:&lt;br /&gt;&lt;img src="http://i110.photobucket.com/albums/n102/_tommy_45-/multivalue-bug.gif" /&gt;&lt;br /&gt;&lt;br /&gt;How hard can it be to implement multi-value. It seems like someone slapped together a couple of lines of code, and forgot to test it. I'm surprised that there isn't any other bloggers haven't written about this. Maybe multi-value fields aren't that popular?&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3745504982837212509-5402322976241058370?l=dontpanic82.blogspot.com' alt='' /&gt;&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/dontpanic82/~4/HWD5V_1gMGA" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://dontpanic82.blogspot.com/feeds/5402322976241058370/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="https://www.blogger.com/comment.g?blogID=3745504982837212509&amp;postID=5402322976241058370" title="3 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/3745504982837212509/posts/default/5402322976241058370?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/3745504982837212509/posts/default/5402322976241058370?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/dontpanic82/~3/HWD5V_1gMGA/sloppy-multi-value-implementation-in.html" title="Sloppy multi-value implementation in XPages" /><author><name>Tommy Valand</name><uri>http://www.blogger.com/profile/11052104644034054473</uri><email>noreply@blogger.com</email><gd:extendedProperty name="OpenSocialUserId" value="04352057927170087255" /></author><thr:total xmlns:thr="http://purl.org/syndication/thread/1.0">3</thr:total><feedburner:origLink>http://dontpanic82.blogspot.com/2009/12/sloppy-multi-value-implementation-in.html</feedburner:origLink></entry><entry gd:etag="W/&quot;D04HQ347eip7ImA9WxNaGEk.&quot;"><id>tag:blogger.com,1999:blog-3745504982837212509.post-4370078684769413916</id><published>2009-12-03T12:52:00.005+01:00</published><updated>2009-12-03T14:12:12.002+01:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2009-12-03T14:12:12.002+01:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="xpages" /><category scheme="http://www.blogger.com/atom/ns#" term="ssjs" /><category scheme="http://www.blogger.com/atom/ns#" term="random tip" /><title>Helper-functions for debugging XPages</title><content type="html">Since there are no good tools for debugging XPages, I created a couple of helper-methods (Server Side Javascript) of my own. &lt;br /&gt;&lt;br /&gt;&lt;strong&gt;Debug.message&lt;/strong&gt; sends me a mail with a message specified by me.&lt;br /&gt;&lt;br /&gt;&lt;strong&gt;Debug.exception&lt;/strong&gt; sends me a stack trace of an exception (used in a try/catch). This is useful because not all exceptions crash the application.&lt;br /&gt;&lt;br /&gt;&lt;pre&gt;&lt;code&gt;var Debug = {&lt;br /&gt; // Send a stack trace of an exception&lt;br /&gt; exception: function( exception ){&lt;br /&gt;  var stringWriter = new java.io.StringWriter();&lt;br /&gt;  exception.printStackTrace( new java.io.PrintWriter( stringWriter ) );&lt;br /&gt;  this.debug( stringWriter.toString(), 'Exception!' );&lt;br /&gt; },&lt;br /&gt; // Send a message&lt;br /&gt; message: function( message, subject ){&lt;br /&gt;  var doc:NotesDocument = database.createDocument();&lt;br /&gt;  doc.replaceItemValue( 'Form', 'Memo' );&lt;br /&gt;  doc.replaceItemValue( 'Subject', subject || 'Debug..' );&lt;br /&gt;  doc.replaceItemValue( 'Body', message.toString() );&lt;br /&gt;  doc.replaceItemValue( 'SendTo', 'Tommy Valand/Compendia' );&lt;br /&gt;  doc.send()&lt;br /&gt; }&lt;br /&gt;}&lt;br /&gt;&lt;/code&gt;&lt;/pre&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3745504982837212509-4370078684769413916?l=dontpanic82.blogspot.com' alt='' /&gt;&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/dontpanic82/~4/Zvl9wsNzAyc" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://dontpanic82.blogspot.com/feeds/4370078684769413916/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="https://www.blogger.com/comment.g?blogID=3745504982837212509&amp;postID=4370078684769413916" title="1 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/3745504982837212509/posts/default/4370078684769413916?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/3745504982837212509/posts/default/4370078684769413916?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/dontpanic82/~3/Zvl9wsNzAyc/helper-functions-for-debugging-xpages.html" title="Helper-functions for debugging XPages" /><author><name>Tommy Valand</name><uri>http://www.blogger.com/profile/11052104644034054473</uri><email>noreply@blogger.com</email><gd:extendedProperty name="OpenSocialUserId" value="04352057927170087255" /></author><thr:total xmlns:thr="http://purl.org/syndication/thread/1.0">1</thr:total><feedburner:origLink>http://dontpanic82.blogspot.com/2009/12/helper-functions-for-debugging-xpages.html</feedburner:origLink></entry><entry gd:etag="W/&quot;CUENSX49cSp7ImA9WxNaFko.&quot;"><id>tag:blogger.com,1999:blog-3745504982837212509.post-599171755348932437</id><published>2009-12-01T14:15:00.003+01:00</published><updated>2009-12-01T14:21:38.069+01:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2009-12-01T14:21:38.069+01:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="xpages" /><category scheme="http://www.blogger.com/atom/ns#" term="random tip" /><title>Server side event handling - get value without having to use getComponent</title><content type="html">If you type &lt;strong&gt;this.getParent().getValue()&lt;/strong&gt;, you will get the value of the component that holds the event handler.&lt;br /&gt;&lt;br /&gt;&lt;strong&gt;this.getParent()&lt;/strong&gt; returns the component that holds the event handler.&lt;br /&gt;&lt;br /&gt;&lt;strong&gt;this&lt;/strong&gt; is the EventHandler object.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3745504982837212509-599171755348932437?l=dontpanic82.blogspot.com' alt='' /&gt;&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/dontpanic82/~4/vQMw4M7UEM8" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://dontpanic82.blogspot.com/feeds/599171755348932437/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="https://www.blogger.com/comment.g?blogID=3745504982837212509&amp;postID=599171755348932437" title="3 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/3745504982837212509/posts/default/599171755348932437?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/3745504982837212509/posts/default/599171755348932437?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/dontpanic82/~3/vQMw4M7UEM8/server-side-event-handling-get-value.html" title="Server side event handling - get value without having to use getComponent" /><author><name>Tommy Valand</name><uri>http://www.blogger.com/profile/11052104644034054473</uri><email>noreply@blogger.com</email><gd:extendedProperty name="OpenSocialUserId" value="04352057927170087255" /></author><thr:total xmlns:thr="http://purl.org/syndication/thread/1.0">3</thr:total><feedburner:origLink>http://dontpanic82.blogspot.com/2009/12/server-side-event-handling-get-value.html</feedburner:origLink></entry><entry gd:etag="W/&quot;C0QBRHw4fyp7ImA9WxNaEkk.&quot;"><id>tag:blogger.com,1999:blog-3745504982837212509.post-1285681214925647189</id><published>2009-11-26T13:55:00.009+01:00</published><updated>2009-11-26T14:15:55.237+01:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2009-11-26T14:15:55.237+01:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="xpages" /><category scheme="http://www.blogger.com/atom/ns#" term="random tip" /><title>XPages Type Ahead - use var property to get field value</title><content type="html">I've seen several examples on type-ahead using getComponent( 'componentId' ).getValue(). Using hard-coded field id's can be a bad idea in the long run. If someone changes the id of the type-ahead field, the type-ahead will fail. There's a more maintainable alternative, the var property of the typeAhead-component.&lt;br /&gt;&lt;br /&gt;It's not directly available on the field. If you select the &amp;lt;typeAhead&amp;gt;-node in the source, you will get an "All properties" view for the Type Ahead component. Under data, you can set the var property.&lt;br /&gt;&lt;br /&gt;&lt;img src="http://2.bp.blogspot.com/_PjG8lIxs1gc/Sw59NwJuYfI/AAAAAAAAAN4/qV-kZLaaW2E/s400/prop.gif" /&gt;&lt;br /&gt;&lt;br /&gt;If you, like me, like modifying source-code better, add a var attribute to the typeAhead node.&lt;br /&gt;&lt;br /&gt;&lt;img src="http://2.bp.blogspot.com/_PjG8lIxs1gc/Sw57Jx_2XNI/AAAAAAAAANw/_T0bZLv3ZrY/s400/var.gif" /&gt;&lt;br /&gt;&lt;br /&gt;In the suggestions-code, you can now do:&lt;br /&gt;&lt;pre&gt;&lt;code&gt;@DbLookup( [ @DbName()[0], 'database.nsf' ], '(lupView)', &lt;strong&gt;lupKey&lt;/strong&gt;, 1, '[PARTIALMATCH]' )&lt;br /&gt;&lt;/code&gt;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;Another tip: Although you can compute Type Ahead on and off in the field, after the field loses focus, it looks like Type Ahead is always enabled. If you select the &amp;lt;typeAhead&amp;gt;-node, you can modify the rendered property (enables/disables type-ahead).&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3745504982837212509-1285681214925647189?l=dontpanic82.blogspot.com' alt='' /&gt;&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/dontpanic82/~4/XfE-0hx-bZM" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://dontpanic82.blogspot.com/feeds/1285681214925647189/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="https://www.blogger.com/comment.g?blogID=3745504982837212509&amp;postID=1285681214925647189" title="2 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/3745504982837212509/posts/default/1285681214925647189?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/3745504982837212509/posts/default/1285681214925647189?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/dontpanic82/~3/XfE-0hx-bZM/xpages-type-ahead-use-var-property-to.html" title="XPages Type Ahead - use var property to get field value" /><author><name>Tommy Valand</name><uri>http://www.blogger.com/profile/11052104644034054473</uri><email>noreply@blogger.com</email><gd:extendedProperty name="OpenSocialUserId" value="04352057927170087255" /></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="http://2.bp.blogspot.com/_PjG8lIxs1gc/Sw59NwJuYfI/AAAAAAAAAN4/qV-kZLaaW2E/s72-c/prop.gif" height="72" width="72" /><thr:total xmlns:thr="http://purl.org/syndication/thread/1.0">2</thr:total><feedburner:origLink>http://dontpanic82.blogspot.com/2009/11/xpages-type-ahead-use-var-property-to.html</feedburner:origLink></entry><entry gd:etag="W/&quot;DUYESH8zcCp7ImA9WxNbFEk.&quot;"><id>tag:blogger.com,1999:blog-3745504982837212509.post-7379261214497889737</id><published>2009-11-17T09:29:00.005+01:00</published><updated>2009-11-17T09:38:29.188+01:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2009-11-17T09:38:29.188+01:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="cheat sheet" /><category scheme="http://www.blogger.com/atom/ns#" term="formula" /><title>Useful formula cheat sheet</title><content type="html">Just found this while browsing. &lt;a href="http://www-12.lotus.com/ldd/doc/uafiles.nsf/docs/designer65poster/$File/FormulaPoster.pdf"&gt;Domino Formula @Functions&lt;/a&gt;. It's more or less a cheat sheet with @-functions sorted in a logical order.&lt;br /&gt;&lt;br /&gt;It's actually made by Lotus, for Notes 6.5. You probably need an A3 printer to transfer it to paper.&lt;br /&gt;&lt;br /&gt;Share and enjoy!&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3745504982837212509-7379261214497889737?l=dontpanic82.blogspot.com' alt='' /&gt;&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/dontpanic82/~4/gMu8PsrDVgU" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://dontpanic82.blogspot.com/feeds/7379261214497889737/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="https://www.blogger.com/comment.g?blogID=3745504982837212509&amp;postID=7379261214497889737" title="1 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/3745504982837212509/posts/default/7379261214497889737?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/3745504982837212509/posts/default/7379261214497889737?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/dontpanic82/~3/gMu8PsrDVgU/useful-formula-cheat-sheet.html" title="Useful formula cheat sheet" /><author><name>Tommy Valand</name><uri>http://www.blogger.com/profile/11052104644034054473</uri><email>noreply@blogger.com</email><gd:extendedProperty name="OpenSocialUserId" value="04352057927170087255" /></author><thr:total xmlns:thr="http://purl.org/syndication/thread/1.0">1</thr:total><feedburner:origLink>http://dontpanic82.blogspot.com/2009/11/useful-formula-cheat-sheet.html</feedburner:origLink></entry><entry gd:etag="W/&quot;C04HQHo5eCp7ImA9WxNUGEU.&quot;"><id>tag:blogger.com,1999:blog-3745504982837212509.post-2349605088832365869</id><published>2009-11-10T19:58:00.006+01:00</published><updated>2009-11-10T20:38:51.420+01:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2009-11-10T20:38:51.420+01:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="xpages" /><category scheme="http://www.blogger.com/atom/ns#" term="jsf" /><title>XPages: Creating a Data Table programmatically on page load</title><content type="html">I've finally started working on a &lt;strong&gt;proper&lt;/strong&gt; XPages application at work, so now my inspiration is bubbling.&lt;br /&gt;&lt;br /&gt;Todays demo is (hopefully) a precursor to something that will be very useful to you, my readers. I started looking for a way to dynamically creating a Data Table control. Since XPages still is in its infancy, documentation and examples-wise, I had to go look for information on JSF (which XPages is built upon).&lt;br /&gt;&lt;br /&gt;I found &lt;a href="http://balusc.blogspot.com/2006/06/using-datatables.html#PopulateDatatable"&gt;this great resource&lt;/a&gt;. The classes used for UIComponents in XPages have different names than the standard JSF-classes, but the syntax is more or less the same.&lt;br /&gt;&lt;br /&gt;To find the XPages equivalent classes, I create the component I want to find the class for. Set an id to it. Then I create a computed field with the value of &lt;em&gt;typeof getComponent( 'componentId' )&lt;/em&gt;. This returns the full class name of the component. E.g. the class for DataTable is &lt;strong&gt;com.ibm.xsp.component.xp.XspDataTableEx&lt;/strong&gt;.&lt;br /&gt;&lt;br /&gt;In the demo I've made, I create a Data Table control inside an empty Panel component. The panel's data binding is a sessionScope variable. The XPage has a couple of buttons that lets you change the data of the table. The buttons do a partial update on the dynamically created table.&lt;br /&gt;&lt;br /&gt;&lt;strong&gt;Screenshots of demoapp:&lt;/strong&gt;&lt;br /&gt;&lt;img src="http://2.bp.blogspot.com/_PjG8lIxs1gc/Svm9TUjF_-I/AAAAAAAAANg/iGSmYAMKupw/s400/simpsons.PNG" /&gt;&lt;br /&gt;&lt;br /&gt;&lt;img src="http://4.bp.blogspot.com/_PjG8lIxs1gc/Svm9TmSK5hI/AAAAAAAAANo/I8BgkwUwL-8/s400/southpark.PNG" /&gt;&lt;br /&gt;&lt;br /&gt;&lt;img src="http://2.bp.blogspot.com/_PjG8lIxs1gc/Svm9TH92VyI/AAAAAAAAANY/WeJX7M2svBw/s400/familyguy.PNG" /&gt;&lt;br /&gt;&lt;br /&gt;&lt;a href="http://files.dontpanic82.com/RuntimeDataTable.zip"&gt;&gt;&gt; Download demoapp&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;This "technique" can easily be used for programmatically modifying existing Data Tables at runtime as well. Take a look at the code, and get inspired.. :)&lt;br /&gt;&lt;br /&gt;Share and enjoy!&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3745504982837212509-2349605088832365869?l=dontpanic82.blogspot.com' alt='' /&gt;&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/dontpanic82/~4/25ZopFDlaC8" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://dontpanic82.blogspot.com/feeds/2349605088832365869/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="https://www.blogger.com/comment.g?blogID=3745504982837212509&amp;postID=2349605088832365869" title="2 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/3745504982837212509/posts/default/2349605088832365869?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/3745504982837212509/posts/default/2349605088832365869?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/dontpanic82/~3/25ZopFDlaC8/xpages-creating-data-table.html" title="XPages: Creating a Data Table programmatically on page load" /><author><name>Tommy Valand</name><uri>http://www.blogger.com/profile/11052104644034054473</uri><email>noreply@blogger.com</email><gd:extendedProperty name="OpenSocialUserId" value="04352057927170087255" /></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="http://2.bp.blogspot.com/_PjG8lIxs1gc/Svm9TUjF_-I/AAAAAAAAANg/iGSmYAMKupw/s72-c/simpsons.PNG" height="72" width="72" /><thr:total xmlns:thr="http://purl.org/syndication/thread/1.0">2</thr:total><feedburner:origLink>http://dontpanic82.blogspot.com/2009/11/xpages-creating-data-table.html</feedburner:origLink></entry><entry gd:etag="W/&quot;DkINR3o8eSp7ImA9WxNUF0Q.&quot;"><id>tag:blogger.com,1999:blog-3745504982837212509.post-5213819447516265592</id><published>2009-11-09T20:11:00.003+01:00</published><updated>2009-11-09T20:23:16.471+01:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2009-11-09T20:23:16.471+01:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="xpages" /><category scheme="http://www.blogger.com/atom/ns#" term="ckeditor" /><title>CKEditor integration with XPages (32k limited)</title><content type="html">I've been asked several times to make an XPages integration with XPages. I finally buckled under the pressure last friday.&lt;br /&gt;&lt;br /&gt;Initially I planned on making a full integration (no limits, bound to a NotesRichtextItem). Unfortunately, this is impossible using regular XPages components. I've tried a lot of hacks (rendererType, converting the field in different events, and a lot of other stuff I know nothing about), but so far I've been unable to make the integration work with the native XPages Rich Text editor control.&lt;br /&gt;&lt;br /&gt;The last person that requested the integration was "fine" with a 32k limit on the demo, so I've extended the &lt;a href="http://dontpanic82.blogspot.com/2009/09/finally-ckeditor-integration-with-lotus.html"&gt;CKEditor Integration&lt;/a&gt; demo with a demo of XPages integration (bound to a regular text field).&lt;br /&gt;&lt;br /&gt;Read the &lt;a href="http://dontpanic82.blogspot.com/2009/09/finally-ckeditor-integration-with-lotus.html"&gt;blog entry on CKEditor integration&lt;/a&gt; for prerequisites (CKEditor installed in a certain directory on the server).&lt;br /&gt;&lt;br /&gt;&lt;a href="http://files.dontpanic82.com/CKIntegration.zip"&gt;&gt;&gt; Demoapp of CKEditor integration with Domino form and XPages&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3745504982837212509-5213819447516265592?l=dontpanic82.blogspot.com' alt='' /&gt;&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/dontpanic82/~4/NrN_4vv7Cn0" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://dontpanic82.blogspot.com/feeds/5213819447516265592/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="https://www.blogger.com/comment.g?blogID=3745504982837212509&amp;postID=5213819447516265592" title="1 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/3745504982837212509/posts/default/5213819447516265592?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/3745504982837212509/posts/default/5213819447516265592?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/dontpanic82/~3/NrN_4vv7Cn0/ckeditor-integration-with-xpages-32k.html" title="CKEditor integration with XPages (32k limited)" /><author><name>Tommy Valand</name><uri>http://www.blogger.com/profile/11052104644034054473</uri><email>noreply@blogger.com</email><gd:extendedProperty name="OpenSocialUserId" value="04352057927170087255" /></author><thr:total xmlns:thr="http://purl.org/syndication/thread/1.0">1</thr:total><feedburner:origLink>http://dontpanic82.blogspot.com/2009/11/ckeditor-integration-with-xpages-32k.html</feedburner:origLink></entry><entry gd:etag="W/&quot;CEYAQ34zeCp7ImA9WxNXGUk.&quot;"><id>tag:blogger.com,1999:blog-3745504982837212509.post-1793999371348092340</id><published>2009-10-07T19:14:00.015+01:00</published><updated>2009-10-07T20:02:22.080+01:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2009-10-07T20:02:22.080+01:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="java" /><category scheme="http://www.blogger.com/atom/ns#" term="lotusscript" /><category scheme="http://www.blogger.com/atom/ns#" term="templating" /><category scheme="http://www.blogger.com/atom/ns#" term="xpages" /><title>Technique: Using a Page as a cross language template/string container</title><content type="html">In this demoapp, I use a page as a definition for an XML-representation of a document. It is related to a project at work, where we send XML to a web service. This service is to be called both from the Notes Client, and from an XPage. I could script the XML in both the agent and the XPage, but this could easily develop into a maintenance nightmare.&lt;br /&gt;&lt;br /&gt;In the demo, I've used the body of a page as a token string (separated by ¤). The first token is the field-definition. This is to be used in a formula evaluate towards a NotesDocument. The second part is the template itself. &lt;br /&gt;&lt;pre&gt;&lt;code&gt;"first_name":"last_name":"company":"address":"age"&lt;br /&gt;¤&lt;br /&gt;&amp;lt;character&amp;gt;&lt;br /&gt; &amp;lt;first_name&amp;gt;[first_name]&amp;lt;/first_name&amp;gt;&lt;br /&gt; &amp;lt;last_name&amp;gt;[last_name]&amp;lt;/last_name&amp;gt;&lt;br /&gt; &amp;lt;company&amp;gt;[company]&amp;lt;/company&amp;gt;&lt;br /&gt; &amp;lt;address&amp;gt;[address]&amp;lt;/address&amp;gt;&lt;br /&gt; &amp;lt;age&amp;gt;[age]&amp;lt;/age&amp;gt;&lt;br /&gt;&amp;lt;/character&amp;gt;&lt;/code&gt;&lt;/pre&gt;&lt;br /&gt;By having the field-definition in the page, you just have to update the page if you want more field values.&lt;br /&gt;&lt;br /&gt;I wrote three different script libraries, each having more or less the same functionality. One LotusScript library, one Java (Script) library, and one ServerSide JS library. The libraries contain functionality that extracts the body of the a page based on its name (using a NotesNoteCollection of the pages in the DB).&lt;br /&gt;&lt;br /&gt;I also wrote a LS agent, a Java Agent, and a XPage (&lt;a href="http://www.wissel.net/blog/d6plinks/SHWL-7MGFBN"&gt;acting as an agent&lt;/a&gt;). Each of them prints XML (based on the template) for the first document in a certain view.&lt;br /&gt;&lt;br /&gt;&lt;img src="http://1.bp.blogspot.com/_PjG8lIxs1gc/Sszju5_T6EI/AAAAAAAAANQ/dZ_8xeKmmMU/s400/Capture2.PNG" /&gt;&lt;br /&gt;&lt;br /&gt;This technique can also be used if you have a big string that is used in code written in multiple languages. If it's Java-code you're writing, and need a big string, this may be an easier way to maintain the string. Another thing that occurs to me is if you generate the same XML/HTML/etc. in multiple databases, you can maintain the String-template in one database, and use Design inheritance to spread it (or get the page from another database using &lt;em&gt;otherDatabase.CreateNoteCollection(false)... )&lt;/em&gt;).&lt;br /&gt;&lt;br /&gt;As with all techniques, this might not be the right tool for your job. Weigh pros and cons before you decide to use it/not use it.&lt;br /&gt;&lt;br /&gt;&lt;a href="http://files.dontpanic82.com/PageTemplate.zip"&gt;&gt;&gt; Download DemoApp&lt;/a&gt; (open the app in a browser to test the demos)&lt;br /&gt;&lt;br /&gt;Comments/critique/bugreports are as always welcome. :)&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3745504982837212509-1793999371348092340?l=dontpanic82.blogspot.com' alt='' /&gt;&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/dontpanic82/~4/cMij5FidB60" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://dontpanic82.blogspot.com/feeds/1793999371348092340/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="https://www.blogger.com/comment.g?blogID=3745504982837212509&amp;postID=1793999371348092340" title="2 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/3745504982837212509/posts/default/1793999371348092340?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/3745504982837212509/posts/default/1793999371348092340?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/dontpanic82/~3/cMij5FidB60/technique-using-page-as-cross-language.html" title="Technique: Using a Page as a cross language template/string container" /><author><name>Tommy Valand</name><uri>http://www.blogger.com/profile/11052104644034054473</uri><email>noreply@blogger.com</email><gd:extendedProperty name="OpenSocialUserId" value="04352057927170087255" /></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="http://1.bp.blogspot.com/_PjG8lIxs1gc/Sszju5_T6EI/AAAAAAAAANQ/dZ_8xeKmmMU/s72-c/Capture2.PNG" height="72" width="72" /><thr:total xmlns:thr="http://purl.org/syndication/thread/1.0">2</thr:total><feedburner:origLink>http://dontpanic82.blogspot.com/2009/10/technique-using-page-as-cross-language.html</feedburner:origLink></entry><entry gd:etag="W/&quot;DU8CR38zfip7ImA9WxNXE0o.&quot;"><id>tag:blogger.com,1999:blog-3745504982837212509.post-717416038559565203</id><published>2009-10-01T07:12:00.004+01:00</published><updated>2009-10-01T07:17:46.186+01:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2009-10-01T07:17:46.186+01:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="random tip" /><title>Not satisfied with Domino Designer documentation? Make your voice heard!</title><content type="html">Got this in the mail yesterday:&lt;br /&gt;&lt;em&gt;Key team members are available exclusively on the LotusUserGroup.org &lt;br /&gt;moderated forum through this Friday to read your feedback, respond, &lt;br /&gt;and provide insight regarding functionality and content. All &lt;br /&gt;questions, opinions, experiences, and feedback are welcomed.  &lt;br /&gt; &lt;br /&gt;Lotus Domino Designer documentation moderator team includes: &lt;br /&gt;- &lt;strong&gt;Bob Harwood&lt;/strong&gt;, the Information Development (ID) Lead for Domino &lt;br /&gt;Designer &lt;br /&gt;- &lt;strong&gt;Cara Viktorov&lt;/strong&gt;, ID Customer Feedback Lead &lt;br /&gt;- &lt;strong&gt;Steve Shewchuk&lt;/strong&gt; - Designer ID manager &lt;br /&gt;- &lt;strong&gt;Deanna Drschiwiski&lt;/strong&gt; - Designer Information Architect &lt;br /&gt;- &lt;strong&gt;Michael Stewart&lt;/strong&gt; - Writer &lt;br /&gt;- &lt;strong&gt;Bob Perron&lt;/strong&gt; - Writer &lt;br /&gt; &lt;br /&gt;See what your peers have already posted and participate at &lt;br /&gt;http://www.lotususergroup.org/lotusforum&lt;/em&gt;&lt;br /&gt;&lt;br /&gt;&lt;a href="http://www.lotususergroup.org/ugforum.nsf/WebBoardMainCategorized?OpenView&amp;RestrictToCategory=Lotus%20Domino%20Designer%20Help%20Usability"&gt;Domino Designer Forum&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3745504982837212509-717416038559565203?l=dontpanic82.blogspot.com' alt='' /&gt;&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/dontpanic82/~4/jnSHP1ZLlms" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://dontpanic82.blogspot.com/feeds/717416038559565203/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="https://www.blogger.com/comment.g?blogID=3745504982837212509&amp;postID=717416038559565203" title="0 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/3745504982837212509/posts/default/717416038559565203?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/3745504982837212509/posts/default/717416038559565203?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/dontpanic82/~3/jnSHP1ZLlms/not-satisfied-with-domino-designer.html" title="Not satisfied with Domino Designer documentation? Make your voice heard!" /><author><name>Tommy Valand</name><uri>http://www.blogger.com/profile/11052104644034054473</uri><email>noreply@blogger.com</email><gd:extendedProperty name="OpenSocialUserId" value="04352057927170087255" /></author><thr:total xmlns:thr="http://purl.org/syndication/thread/1.0">0</thr:total><feedburner:origLink>http://dontpanic82.blogspot.com/2009/10/not-satisfied-with-domino-designer.html</feedburner:origLink></entry><entry gd:etag="W/&quot;A0QGRHkyeyp7ImA9WxNQF0Q.&quot;"><id>tag:blogger.com,1999:blog-3745504982837212509.post-939237696256849855</id><published>2009-09-24T12:19:00.005+01:00</published><updated>2009-09-24T14:35:25.793+01:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2009-09-24T14:35:25.793+01:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="random tip" /><title>Avoid using reserved words in JavaScript</title><content type="html">A former colleague of mine had an obscure problem with one of his applications. As far as I understood him, there weren't thrown any errors, but the application behaved weirdly in some situations.&lt;br /&gt;&lt;br /&gt;Turned out that the cause of the problem was that he used a had a variable called &lt;strong&gt;name&lt;/strong&gt;. &lt;strong&gt;name&lt;/strong&gt; is a reserved word in the JS implementation of the browser (at least in IE). &lt;br /&gt;&lt;br /&gt;While I can't remember the last time I stumbled onto this problem, I'd thought I'd share &lt;a href="http://www.javascripter.net/faq/reserved.htm"&gt;a list of reserved words in JavaScript/the browser implementations of JavaScript&lt;/a&gt;, in case any of my readers struggle with this.&lt;br /&gt;&lt;br /&gt;To be on the safe side, never call a variable the same as a reserved word.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3745504982837212509-939237696256849855?l=dontpanic82.blogspot.com' alt='' /&gt;&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/dontpanic82/~4/ddPyCAaT_Z8" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://dontpanic82.blogspot.com/feeds/939237696256849855/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="https://www.blogger.com/comment.g?blogID=3745504982837212509&amp;postID=939237696256849855" title="0 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/3745504982837212509/posts/default/939237696256849855?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/3745504982837212509/posts/default/939237696256849855?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/dontpanic82/~3/ddPyCAaT_Z8/avoid-using-reserved-words-in.html" title="Avoid using reserved words in JavaScript" /><author><name>Tommy Valand</name><uri>http://www.blogger.com/profile/11052104644034054473</uri><email>noreply@blogger.com</email><gd:extendedProperty name="OpenSocialUserId" value="04352057927170087255" /></author><thr:total xmlns:thr="http://purl.org/syndication/thread/1.0">0</thr:total><feedburner:origLink>http://dontpanic82.blogspot.com/2009/09/avoid-using-reserved-words-in.html</feedburner:origLink></entry><entry gd:etag="W/&quot;C0cHSHszeCp7ImA9WxNQFUg.&quot;"><id>tag:blogger.com,1999:blog-3745504982837212509.post-6970476193267695578</id><published>2009-09-21T17:32:00.005+01:00</published><updated>2009-09-21T17:37:19.580+01:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2009-09-21T17:37:19.580+01:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="JavaScript" /><category scheme="http://www.blogger.com/atom/ns#" term="xpages" /><title>Interesting talk about Server Side JS</title><content type="html">From &lt;acronym title="Yahoo User Interface (Library)"&gt;YUI&lt;/acronym&gt; theater.&lt;br /&gt;&lt;br /&gt;&lt;div&gt;&lt;object width="576" height="358" allowFullScreen="true"&gt;&lt;param name="movie" value="http://d.yimg.com/m/up/ypp/default/player.swf"&gt;&lt;/param&gt;&lt;param name="flashVars" value="vid=15595520&amp;siteHostUrl=http%3A//video.yahoo.com"&gt;&lt;/param&gt;&lt;param name="wmode" value="transparent"&gt;&lt;/param&gt;&lt;embed width="576" height="358" allowFullScreen="true" src="http://d.yimg.com/m/up/ypp/default/player.swf" type="application/x-shockwave-flash" flashvars="vid=15595520&amp;siteHostUrl=http%3A//video.yahoo.com"&gt;&lt;/embed&gt;&lt;/object&gt;&lt;/div&gt;&lt;br /&gt;&lt;br /&gt;Some valid points about advantages with programming in JS in the client &lt;strong&gt;and&lt;/strong&gt; on the server.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3745504982837212509-6970476193267695578?l=dontpanic82.blogspot.com' alt='' /&gt;&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/dontpanic82/~4/s9-NxrVsSiU" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://dontpanic82.blogspot.com/feeds/6970476193267695578/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="https://www.blogger.com/comment.g?blogID=3745504982837212509&amp;postID=6970476193267695578" title="0 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/3745504982837212509/posts/default/6970476193267695578?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/3745504982837212509/posts/default/6970476193267695578?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/dontpanic82/~3/s9-NxrVsSiU/interesting-talk-about-server-side-js.html" title="Interesting talk about Server Side JS" /><author><name>Tommy Valand</name><uri>http://www.blogger.com/profile/11052104644034054473</uri><email>noreply@blogger.com</email><gd:extendedProperty name="OpenSocialUserId" value="04352057927170087255" /></author><thr:total xmlns:thr="http://purl.org/syndication/thread/1.0">0</thr:total><feedburner:origLink>http://dontpanic82.blogspot.com/2009/09/interesting-talk-about-server-side-js.html</feedburner:origLink></entry><entry gd:etag="W/&quot;DkQNRnszeCp7ImA9WxNQEEk.&quot;"><id>tag:blogger.com,1999:blog-3745504982837212509.post-3641191036156251365</id><published>2009-09-15T20:22:00.006+01:00</published><updated>2009-09-15T20:53:17.580+01:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2009-09-15T20:53:17.580+01:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="integration" /><category scheme="http://www.blogger.com/atom/ns#" term="domino" /><category scheme="http://www.blogger.com/atom/ns#" term="ckeditor" /><title>Finally! CKEditor integration with Lotus Domino</title><content type="html">It's been over a year since I posted my demoapp of &lt;a href="http://dontpanic82.blogspot.com/2008/06/slick-integration-between-fckeditor-and.html"&gt;FCKEditor-integration with Lotus Domino&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;The &lt;a href="http://ckeditor.com/"&gt;CKEditor&lt;/a&gt; (the new and &lt;strong&gt;improved!!!&lt;/strong&gt; version of FCKEditor) has been out for a little while now. At first, the upload integration wasn't documented, so I didn't want to waste time reverse engineering the functionality.&lt;br /&gt;&lt;br /&gt;I got a mail a couple of days ago from a reader about CKEditor-integration with Domino. I replied that I would create a demoapp of the integration as soon as the upload functionality was documented. Now it is (more or less).&lt;br /&gt;&lt;br /&gt;The new API for FCKEditor is BIG, but that doesn't show on the CKEditor. Its fast as *insert something extremely fast*. Test out their &lt;a href="http://ckeditor.com/demo"&gt;demo&lt;/a&gt; if you don't believe me!&lt;br /&gt;&lt;br /&gt;The only thing that's changed since the FCKEditor demoapp is the $$Return on the (f)ckupload form, and the hooks I use to rewrite the name of the upload field.&lt;br /&gt;&lt;br /&gt;I tested the demoapp in IE8, Firefox 3.5, and Opera 10. Let me know if it doesn't work for you.&lt;br /&gt;&lt;br /&gt;&lt;strong&gt;CKEditor must be installed in the ..data\domino\html\js folder (you have to create the js folder if you don't have one already)&lt;/strong&gt;. Test http://yourdomain.com/js/ckeditor/ckeditor.js to see if CKEditor is in the correct folder.&lt;br /&gt;&lt;br /&gt;This also works on localhost, if you want to experiment on your own computer.&lt;br /&gt;&lt;br /&gt;Read the &lt;a href="http://dontpanic82.blogspot.com/2008/06/slick-integration-between-fckeditor-and.html"&gt;FCKEditor-integration with Lotus Domino&lt;/a&gt; post as well. I may have forgot to mention some details.&lt;br /&gt;&lt;br /&gt;Anyways, it's time to go to bed. Another day, another dime tomorrow.&lt;br /&gt;&lt;br /&gt;&lt;a href="http://files.dontpanic82.com/CKIntegration.zip"&gt;&gt;&gt; Demoapp of integration with CKEditor&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3745504982837212509-3641191036156251365?l=dontpanic82.blogspot.com' alt='' /&gt;&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/dontpanic82/~4/NkuD7JyVN1Q" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://dontpanic82.blogspot.com/feeds/3641191036156251365/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="https://www.blogger.com/comment.g?blogID=3745504982837212509&amp;postID=3641191036156251365" title="4 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/3745504982837212509/posts/default/3641191036156251365?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/3745504982837212509/posts/default/3641191036156251365?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/dontpanic82/~3/NkuD7JyVN1Q/finally-ckeditor-integration-with-lotus.html" title="Finally! CKEditor integration with Lotus Domino" /><author><name>Tommy Valand</name><uri>http://www.blogger.com/profile/11052104644034054473</uri><email>noreply@blogger.com</email><gd:extendedProperty name="OpenSocialUserId" value="04352057927170087255" /></author><thr:total xmlns:thr="http://purl.org/syndication/thread/1.0">4</thr:total><feedburner:origLink>http://dontpanic82.blogspot.com/2009/09/finally-ckeditor-integration-with-lotus.html</feedburner:origLink></entry><entry gd:etag="W/&quot;C0EFRHY4eCp7ImA9WxNQEEU.&quot;"><id>tag:blogger.com,1999:blog-3745504982837212509.post-4045203243956893911</id><published>2009-09-14T19:51:00.011+01:00</published><updated>2009-09-16T07:13:35.830+01:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2009-09-16T07:13:35.830+01:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="xpages" /><category scheme="http://www.blogger.com/atom/ns#" term="custom control" /><title>XPages Custom Control - getComponent/hash of all clientIds from the browser</title><content type="html">Until IBM implements &lt;a href="http://ideajam.net/IdeaJam/P/ij.nsf/0/C6D7EDF3AA3136F48625762E0020E5F5?OpenDocument"&gt;getComponent&lt;/a&gt; in the browser, I've made a litte experimental custom component that lets you do something similar to getComponent in server side scripting. &lt;em&gt;So far it only works with unique components (doesn't work with repeated items).&lt;/em&gt;&lt;br /&gt;&lt;br /&gt;The component adds a script-tag at the bottom of the page, using the &lt;a href="http://www.wissel.net/blog/d6plinks/SHWL-7MGFBN"&gt;output stream&lt;/a&gt; that you get from facesContext.&lt;br /&gt;&lt;br /&gt;The API is small:&lt;br /&gt;&lt;strong&gt;Application.renderedIds&lt;/strong&gt;&lt;br /&gt;An object containing { designerId: clientId(s) } for all (?) components in the XPage. &lt;em&gt;If there are multiple versions with the same designer id, you'll get the wrong id. (see comments)&lt;/em&gt;&lt;br /&gt;&lt;br /&gt;&lt;strong&gt;Application.getComponent( designerId )&lt;/strong&gt;&lt;br /&gt;Similar to the getComponent in Server side JS. Fetches the rendered id from Application.renderedIds, then uses the corresponding clientId in a document.getElementById-statement. This method will fail if you try to multiple controls that has the same designerId (repeated items for instance).&lt;br /&gt;&lt;br /&gt;&lt;img src="http://2.bp.blogspot.com/_PjG8lIxs1gc/Sq9GRwvR0uI/AAAAAAAAANA/QZPi5U3HjBA/s400/getComponent.png" /&gt;&lt;br /&gt;&lt;br /&gt;Comments/bugreports/wishes are appreciated (but I can't promise anything). &lt;br /&gt;&lt;br /&gt;I'm probably going to start working on a big XPage application along with some colleagues in the near future, so it's not impossible that I might turn this into a client side utility component. Time will tell.&lt;br /&gt;&lt;br /&gt;&lt;a href="http://files.dontpanic82.com/GetComponentClient.zip"&gt;&gt;&gt; Demoapp with Custom Control (GetComponentClient)&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3745504982837212509-4045203243956893911?l=dontpanic82.blogspot.com' alt='' /&gt;&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/dontpanic82/~4/nXcFh7miI8E" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://dontpanic82.blogspot.com/feeds/4045203243956893911/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="https://www.blogger.com/comment.g?blogID=3745504982837212509&amp;postID=4045203243956893911" title="3 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/3745504982837212509/posts/default/4045203243956893911?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/3745504982837212509/posts/default/4045203243956893911?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/dontpanic82/~3/nXcFh7miI8E/xpages-custom-control-getcomponenthash.html" title="XPages Custom Control - getComponent/hash of all clientIds from the browser" /><author><name>Tommy Valand</name><uri>http://www.blogger.com/profile/11052104644034054473</uri><email>noreply@blogger.com</email><gd:extendedProperty name="OpenSocialUserId" value="04352057927170087255" /></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="http://2.bp.blogspot.com/_PjG8lIxs1gc/Sq9GRwvR0uI/AAAAAAAAANA/QZPi5U3HjBA/s72-c/getComponent.png" height="72" width="72" /><thr:total xmlns:thr="http://purl.org/syndication/thread/1.0">3</thr:total><feedburner:origLink>http://dontpanic82.blogspot.com/2009/09/xpages-custom-control-getcomponenthash.html</feedburner:origLink></entry><entry gd:etag="W/&quot;DEQMQHgzcSp7ImA9WxNRGEg.&quot;"><id>tag:blogger.com,1999:blog-3745504982837212509.post-481945290544662666</id><published>2009-09-13T15:58:00.004+01:00</published><updated>2009-09-13T16:39:41.689+01:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2009-09-13T16:39:41.689+01:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="xpages" /><category scheme="http://www.blogger.com/atom/ns#" term="event handling" /><title>Dynamically binding server side events in XPages - Is it possible?</title><content type="html">I'm currently going through a &lt;a href="http://tlcc.com/"&gt;TLCC&lt;/a&gt; course on XPages. While doing so, I become more and more impressed with the platform (and how detailed the course is). &lt;br /&gt;&lt;br /&gt;Having "everything" computable leads me to believe that XPages is the one and only platform to build future web applications on the Lotus platform. The Lotus Domino&lt;8.5 platform is great, but it's starting to show its age. For new developers starting on the "old" platform, there are a lot of strange limitations to get used to. Some limitations (32k/64k being one of the most irritating for myself) will still be present due to the NSF being the storage, but a lot of doors have been opened up.&lt;br /&gt;&lt;br /&gt;Getting on to the topic at hand. With LotusScript, you have some NotesUI events you can &lt;a href="http://www.bleedyellow.com/blogs/dotdomino/entry/programming_events_in_both_language"&gt;bind dynamically&lt;/a&gt;. By dynamic binding, I mean binding events outside the design element that the events occur. &lt;br /&gt;&lt;br /&gt;I work very little with Notes Client applications, so I don't know if the LS binding is very useful. With web applications on the other hand, it's great. All application code can be stored/maintained in one (or more) JS library. &lt;br /&gt;&lt;br /&gt;If something isn't working on a web application that uses dynamic event binding, you only have to look one place to find and correct the error. You avoid having to dig through fields, HTMLHead statements, subforms, etc.&lt;br /&gt;&lt;br /&gt;My question: Is there an API in XPages you can use to bind events on components/the XPage itself dynamically (outside the XPage design element), using a server side JS library? &lt;br /&gt;&lt;br /&gt;E.g.&lt;br /&gt;&lt;pre&gt;&lt;code&gt;// When the XPage is ready to be sent to the browser, bind relevant events&lt;br /&gt;view.addEvent( 'afterRenderResponse', bindCustomerEvents );&lt;br /&gt;&lt;br /&gt;function bindCustomerEvents(){&lt;br /&gt;  // When the value in the zip-code field changes, get the corresponding &lt;br /&gt;  // city-value from server, and do a partial refresh.&lt;br /&gt;  var zipField = getComponent( 'zip' );  &lt;br /&gt;  zipField.addEvent( 'change', function(){ &lt;br /&gt;    getComponent( 'city' ).fireEvent( 'partial-refresh' ); &lt;br /&gt;  });&lt;br /&gt;}&lt;br /&gt;&lt;/code&gt;&lt;/pre&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3745504982837212509-481945290544662666?l=dontpanic82.blogspot.com' alt='' /&gt;&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/dontpanic82/~4/WPklBYUMaEY" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://dontpanic82.blogspot.com/feeds/481945290544662666/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="https://www.blogger.com/comment.g?blogID=3745504982837212509&amp;postID=481945290544662666" title="2 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/3745504982837212509/posts/default/481945290544662666?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/3745504982837212509/posts/default/481945290544662666?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/dontpanic82/~3/WPklBYUMaEY/dynamically-binding-server-side-events.html" title="Dynamically binding server side events in XPages - Is it possible?" /><author><name>Tommy Valand</name><uri>http://www.blogger.com/profile/11052104644034054473</uri><email>noreply@blogger.com</email><gd:extendedProperty name="OpenSocialUserId" value="04352057927170087255" /></author><thr:total xmlns:thr="http://purl.org/syndication/thread/1.0">2</thr:total><feedburner:origLink>http://dontpanic82.blogspot.com/2009/09/dynamically-binding-server-side-events.html</feedburner:origLink></entry><entry gd:etag="W/&quot;A0MFRHc4fip7ImA9WxNRFkk.&quot;"><id>tag:blogger.com,1999:blog-3745504982837212509.post-4294110133942979517</id><published>2009-09-11T06:59:00.006+01:00</published><updated>2009-09-11T07:10:15.936+01:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2009-09-11T07:10:15.936+01:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="xpages" /><category scheme="http://www.blogger.com/atom/ns#" term="ideajam" /><title>XPages - Idea about making it easier to get components on the client side</title><content type="html">I've &lt;a href="http://dontpanic82.blogspot.com/2009/01/thoughts-on-xpages-hijacking-id.html"&gt;ranted&lt;/a&gt; heavily about how I dislike the implementation of the id-attribute in XPages. I just got an idea how to make it a lot easier for developers to work with, and it shouldn't cost IBM too much to implement.&lt;br /&gt;&lt;br /&gt;&lt;a href="http://ideajam.net/IdeaJam/P/ij.nsf/0/C6D7EDF3AA3136F48625762E0020E5F5?OpenDocument"&gt;Here's my idea&lt;/a&gt;. I hope you like it. If IBM'ers read my blog, please leave a comment in my blog or at IdeaJam if this is doable.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3745504982837212509-4294110133942979517?l=dontpanic82.blogspot.com' alt='' /&gt;&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/dontpanic82/~4/8k8uImyKXZw" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://dontpanic82.blogspot.com/feeds/4294110133942979517/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="https://www.blogger.com/comment.g?blogID=3745504982837212509&amp;postID=4294110133942979517" title="0 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/3745504982837212509/posts/default/4294110133942979517?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/3745504982837212509/posts/default/4294110133942979517?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/dontpanic82/~3/8k8uImyKXZw/xpages-idea-about-making-it-easier-to.html" title="XPages - Idea about making it easier to get components on the client side" /><author><name>Tommy Valand</name><uri>http://www.blogger.com/profile/11052104644034054473</uri><email>noreply@blogger.com</email><gd:extendedProperty name="OpenSocialUserId" value="04352057927170087255" /></author><thr:total xmlns:thr="http://purl.org/syndication/thread/1.0">0</thr:total><feedburner:origLink>http://dontpanic82.blogspot.com/2009/09/xpages-idea-about-making-it-easier-to.html</feedburner:origLink></entry><entry gd:etag="W/&quot;D0EMQnY4fip7ImA9WxNREEs.&quot;"><id>tag:blogger.com,1999:blog-3745504982837212509.post-7924751658746239681</id><published>2009-09-04T12:47:00.004+01:00</published><updated>2009-09-04T13:01:23.836+01:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2009-09-04T13:01:23.836+01:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="random tip" /><title>Using @IsDocBeingEdited in Form formula</title><content type="html">I didn't know (or I forgot) this was possible, but a view is aware of if a document on the web is being opened for reading/editing, so you can use one form for editing a document, and another one for opening the document.&lt;br /&gt;&lt;br /&gt;Example:&lt;br /&gt;&lt;pre&gt;&lt;code&gt;@If( Form="Category" &amp; !@IsDocBeingEdited ; "Overview" ; Form )&lt;/code&gt;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;This is useful for me due to a bad application design choice in one of the application templates I manage.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3745504982837212509-7924751658746239681?l=dontpanic82.blogspot.com' alt='' /&gt;&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/dontpanic82/~4/N-dtL9da0PA" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://dontpanic82.blogspot.com/feeds/7924751658746239681/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="https://www.blogger.com/comment.g?blogID=3745504982837212509&amp;postID=7924751658746239681" title="0 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/3745504982837212509/posts/default/7924751658746239681?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/3745504982837212509/posts/default/7924751658746239681?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/dontpanic82/~3/N-dtL9da0PA/using-isdocbeingedited-in-form-formula.html" title="Using @IsDocBeingEdited in Form formula" /><author><name>Tommy Valand</name><uri>http://www.blogger.com/profile/11052104644034054473</uri><email>noreply@blogger.com</email><gd:extendedProperty name="OpenSocialUserId" value="04352057927170087255" /></author><thr:total xmlns:thr="http://purl.org/syndication/thread/1.0">0</thr:total><feedburner:origLink>http://dontpanic82.blogspot.com/2009/09/using-isdocbeingedited-in-form-formula.html</feedburner:origLink></entry><entry gd:etag="W/&quot;CEYFQXc5cSp7ImA9WxNREEs.&quot;"><id>tag:blogger.com,1999:blog-3745504982837212509.post-668625406928773076</id><published>2009-09-04T11:54:00.003+01:00</published><updated>2009-09-04T12:01:50.929+01:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2009-09-04T12:01:50.929+01:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="random tip" /><title>Enhanced HTML generation in Domino 8.5</title><content type="html">With Domino 8.5 web applications, there is a setting that lets you enable "Enhanced HTML generation". This generates markup closer to the HTML specifications.&lt;br /&gt;&lt;br /&gt;Another nice thing about it is that some of the design elements (views, actionbar, outline, etc.) gets a class-attribute on its generated HTML.&lt;br /&gt;&lt;br /&gt;For instance, the action bar table gets a &lt;strong&gt;domino-actionbar&lt;/strong&gt; class. No more hacks needed to style the action bar..&lt;br /&gt;&lt;br /&gt;I haven't found a complete documentation of all the generated classes. &lt;a href="https://infocenters.lotus.com/domino/index.jsp?topic=/com.ibm.help.domino.designer85.doc/DOC/H_ENABLING_ENHANCED_HTML_GENERATION_OVER.html"&gt;This&lt;/a&gt; is about the only documentation I found on the subject. I wish IBM would get a bigger team working on documentation. One of the reasons features aren't used is lack of documentation.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3745504982837212509-668625406928773076?l=dontpanic82.blogspot.com' alt='' /&gt;&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/dontpanic82/~4/_e8hI5Bzctw" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://dontpanic82.blogspot.com/feeds/668625406928773076/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="https://www.blogger.com/comment.g?blogID=3745504982837212509&amp;postID=668625406928773076" title="2 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/3745504982837212509/posts/default/668625406928773076?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/3745504982837212509/posts/default/668625406928773076?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/dontpanic82/~3/_e8hI5Bzctw/enhanced-html-generation-in-domino-85.html" title="Enhanced HTML generation in Domino 8.5" /><author><name>Tommy Valand</name><uri>http://www.blogger.com/profile/11052104644034054473</uri><email>noreply@blogger.com</email><gd:extendedProperty name="OpenSocialUserId" value="04352057927170087255" /></author><thr:total xmlns:thr="http://purl.org/syndication/thread/1.0">2</thr:total><feedburner:origLink>http://dontpanic82.blogspot.com/2009/09/enhanced-html-generation-in-domino-85.html</feedburner:origLink></entry><entry gd:etag="W/&quot;DEMMQ345fyp7ImA9WxNTEkg.&quot;"><id>tag:blogger.com,1999:blog-3745504982837212509.post-4396819581581201124</id><published>2009-08-14T14:25:00.001+01:00</published><updated>2009-08-14T14:28:02.027+01:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2009-08-14T14:28:02.027+01:00</app:edited><title>Switching the RSS feed to feedburner</title><content type="html">The &lt;a href="http://feeds.feedburner.com/dontpanic82"&gt;new feed&lt;/a&gt;. Sorry for the inconvenience..&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3745504982837212509-4396819581581201124?l=dontpanic82.blogspot.com' alt='' /&gt;&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/dontpanic82/~4/KNBX7uQVWek" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://dontpanic82.blogspot.com/feeds/4396819581581201124/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="https://www.blogger.com/comment.g?blogID=3745504982837212509&amp;postID=4396819581581201124" title="0 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/3745504982837212509/posts/default/4396819581581201124?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/3745504982837212509/posts/default/4396819581581201124?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/dontpanic82/~3/KNBX7uQVWek/switching-rss-feed-to-feedburner.html" title="Switching the RSS feed to feedburner" /><author><name>Tommy Valand</name><uri>http://www.blogger.com/profile/11052104644034054473</uri><email>noreply@blogger.com</email><gd:extendedProperty name="OpenSocialUserId" value="04352057927170087255" /></author><thr:total xmlns:thr="http://purl.org/syndication/thread/1.0">0</thr:total><feedburner:origLink>http://dontpanic82.blogspot.com/2009/08/switching-rss-feed-to-feedburner.html</feedburner:origLink></entry><entry gd:etag="W/&quot;CUACQXw4fyp7ImA9WxNTEE8.&quot;"><id>tag:blogger.com,1999:blog-3745504982837212509.post-5798992746267342319</id><published>2009-08-07T08:14:00.005+01:00</published><updated>2009-08-11T21:49:20.237+01:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2009-08-11T21:49:20.237+01:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="random tip" /><title>Test if -specific- content has changed since last FTIndex</title><content type="html">In the &lt;a href="http://dontpanic82.blogspot.com/2009/05/conclusive-way-of-testing-if-content.html"&gt;previous version of this test&lt;/a&gt;, I tested against all documents in the database.&lt;br /&gt;&lt;br /&gt;The app I made the function for has now started using caching through documents, so the requirements for the test has changed. I now need to know if a subset of the documents have changed. The FTIndex doesn't need to be updated if the cache changes..&lt;br /&gt;&lt;br /&gt;The updated version takes a second parameter, a Search-query. This lets you filter out only the content you're interested in.&lt;br /&gt;&lt;br /&gt;&lt;pre&gt;&lt;code&gt;Function contentChangedSinceLastFTIndex( db As NotesDatabase, Byval query As String ) As Boolean &lt;br /&gt; Dim session As New NotesSession&lt;br /&gt; &lt;br /&gt; Dim lastFTIndexed As Variant&lt;br /&gt; lastFTIndexed = db.LastFTIndexed&lt;br /&gt; &lt;br /&gt; '// First test (least resource-hungry)&lt;br /&gt; If Not ( db.LastModified &gt; lastFTIndexed ) Then &lt;br /&gt;  contentChangedSinceLastFTIndex = False&lt;br /&gt;  Exit Function&lt;br /&gt; End If&lt;br /&gt; &lt;br /&gt; '// Conclusive test - test if actual documents (not design elements) have&lt;br /&gt; '// been changed since last FTIndex&lt;br /&gt; Dim dateFTIndexed As New NotesDateTime ( lastFTIndexed ) &lt;br /&gt; Dim col As NotesDocumentCollection&lt;br /&gt; If query = "" Then&lt;br /&gt;  '// Has any document changed?&lt;br /&gt;  Set col = db.GetModifiedDocuments( dateFTIndexed )&lt;br /&gt; Else '// Has documents fitting [query] changed since last FTIndex?&lt;br /&gt;  &lt;br /&gt;  '// Adjust the FTIndexed-date by a second, to avoid getting the &lt;br /&gt;  '// last saved document (if the FT-index is up to date)&lt;br /&gt;  Call dateFTIndexed.AdjustSecond( 1 )&lt;br /&gt;  Set col = db.Search( query, dateFTIndexed, 0 )&lt;br /&gt; End If &lt;br /&gt; If col.Count &gt; 0 Then contentChangedSinceLastFTIndex = True  &lt;br /&gt; &lt;br /&gt;End Function&lt;/code&gt;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;Don't worry about speed. In my test-app, the search takes less than a millisecond with a close cutoff date.&lt;br /&gt;&lt;br /&gt;&lt;strong&gt;Update:&lt;/strong&gt; &lt;a href="https://www.blogger.com/comment.g?blogID=3745504982837212509&amp;postID=5798992746267342319#c7309267268634652499"&gt;Leus' Mobiele&lt;/a&gt; wrote a Java version of the above code:&lt;br /&gt;&lt;pre&gt;&lt;code&gt;private boolean contentChangedSinceLastFTIndex( Database db, String query) throws NotesException {&lt;br /&gt; DateTime dateFTIndexed = db.getLastFTIndexed();&lt;br /&gt;&lt;br /&gt; // First test (least resource-hungry)&lt;br /&gt; if ( db.getLastModified().timeDifference( dateFTIndexed ) &lt;= 0) {&lt;br /&gt;  return false;&lt;br /&gt; }&lt;br /&gt;&lt;br /&gt; // Conclusive test - test if actual documents (not design elements) have&lt;br /&gt; // been changed since last FTIndex &lt;br /&gt;&lt;br /&gt; DocumentCollection col;&lt;br /&gt;&lt;br /&gt; if (query.length() == 0) { // Has any document changed?  &lt;br /&gt;  col = db.getModifiedDocuments( dateFTIndexed );&lt;br /&gt; } else {&lt;br /&gt;  // Has documents fitting [query] changed since last FTIndex?&lt;br /&gt;  // Adjust the FTIndexed-date by a second, to avoid getting the&lt;br /&gt;  // last saved document (if the FT-index is up to date)&lt;br /&gt;&lt;br /&gt;  dateFTIndexed.adjustSecond(1);&lt;br /&gt;  col = db.search( query, dateFTIndexed, 0);&lt;br /&gt; } &lt;br /&gt;&lt;br /&gt; if (col.getCount() &gt; 0) {&lt;br /&gt;  return true;&lt;br /&gt; } else {&lt;br /&gt;  return false;&lt;br /&gt; }&lt;br /&gt;}&lt;/code&gt;&lt;/pre&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3745504982837212509-5798992746267342319?l=dontpanic82.blogspot.com' alt='' /&gt;&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/dontpanic82/~4/xcU4RASxaFo" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://dontpanic82.blogspot.com/feeds/5798992746267342319/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="https://www.blogger.com/comment.g?blogID=3745504982837212509&amp;postID=5798992746267342319" title="2 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/3745504982837212509/posts/default/5798992746267342319?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/3745504982837212509/posts/default/5798992746267342319?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/dontpanic82/~3/xcU4RASxaFo/test-if-specific-content-has-changed.html" title="Test if -specific- content has changed since last FTIndex" /><author><name>Tommy Valand</name><uri>http://www.blogger.com/profile/11052104644034054473</uri><email>noreply@blogger.com</email><gd:extendedProperty name="OpenSocialUserId" value="04352057927170087255" /></author><thr:total xmlns:thr="http://purl.org/syndication/thread/1.0">2</thr:total><feedburner:origLink>http://dontpanic82.blogspot.com/2009/08/test-if-specific-content-has-changed.html</feedburner:origLink></entry><entry gd:etag="W/&quot;C0IBQn84eyp7ImA9WxJbEUo.&quot;"><id>tag:blogger.com,1999:blog-3745504982837212509.post-6982888084238645178</id><published>2009-07-21T10:48:00.005+01:00</published><updated>2009-07-21T11:19:13.133+01:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2009-07-21T11:19:13.133+01:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="mootools" /><title>MooTools plugin - Remove all underlying text nodes of an element</title><content type="html">&lt;pre&gt;&lt;code&gt;Element.implement({&lt;br /&gt; // Removes all underlying text nodes&lt;br /&gt; removeTextNodes: function( startNode ){&lt;br /&gt;  var initialNode = this || startNode;       &lt;br /&gt;     var childList = initialNode.childNodes;&lt;br /&gt;     if( childList.length === 0 ){ return; }&lt;br /&gt;     &lt;br /&gt;     // Walk through all childNodes. If text - remove, else search/destroy&lt;br /&gt;     // potentially underlying text nodes&lt;br /&gt;     var currentNode;&lt;br /&gt;     var nodesToRemove = [];&lt;br /&gt;     for( var i = 0, len = childList.length; i &lt; len; i++ ){      &lt;br /&gt;      currentNode = childList[i];&lt;br /&gt;      if( currentNode.nodeName === '#text' ){ nodesToRemove.push( currentNode ); }&lt;br /&gt;      else { Element.removeTextNodes( currentNode ); }&lt;br /&gt;     }&lt;br /&gt;     &lt;br /&gt;     // When all text nodes on the current level are found, remove them from the DOM&lt;br /&gt;     for( i = 0, len = nodesToRemove.length; i &lt; len ; i++ ){&lt;br /&gt;      currentNode = nodesToRemove[i];&lt;br /&gt;      currentNode.parentNode.removeChild( currentNode );&lt;br /&gt;     }&lt;br /&gt;     &lt;br /&gt;     return this;&lt;br /&gt; }&lt;br /&gt;});&lt;/code&gt;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;I use this to clear/update a label that only contains a field and text. E.g.&lt;br /&gt;&amp;lt;label id="label-with-field"&amp;gt;&amp;lt;input type="radio"&amp;gt;Some text&amp;lt;label&amp;gt;&lt;br /&gt;&lt;pre&gt;&lt;code&gt;$('label-with-field').removeTextNodes().appendText('newLabel')&lt;/code&gt;&lt;/pre&gt;&lt;br /&gt;The last line in the method, "return this;" makes the method chainable.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3745504982837212509-6982888084238645178?l=dontpanic82.blogspot.com' alt='' /&gt;&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/dontpanic82/~4/5p1qmlgoFMI" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://dontpanic82.blogspot.com/feeds/6982888084238645178/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="https://www.blogger.com/comment.g?blogID=3745504982837212509&amp;postID=6982888084238645178" title="0 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/3745504982837212509/posts/default/6982888084238645178?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/3745504982837212509/posts/default/6982888084238645178?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/dontpanic82/~3/5p1qmlgoFMI/mootools-plugin-remove-all-underlying.html" title="MooTools plugin - Remove all underlying text nodes of an element" /><author><name>Tommy Valand</name><uri>http://www.blogger.com/profile/11052104644034054473</uri><email>noreply@blogger.com</email><gd:extendedProperty name="OpenSocialUserId" value="04352057927170087255" /></author><thr:total xmlns:thr="http://purl.org/syndication/thread/1.0">0</thr:total><feedburner:origLink>http://dontpanic82.blogspot.com/2009/07/mootools-plugin-remove-all-underlying.html</feedburner:origLink></entry><entry gd:etag="W/&quot;CUEGRn8_eip7ImA9WxJVFk8.&quot;"><id>tag:blogger.com,1999:blog-3745504982837212509.post-3471600080044474707</id><published>2009-07-03T08:27:00.007+01:00</published><updated>2009-07-03T13:20:27.142+01:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2009-07-03T13:20:27.142+01:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="accessibility" /><category scheme="http://www.blogger.com/atom/ns#" term="web" /><title>Accessible Web Forms With Domino - Addendum</title><content type="html">I'm finally trying out what &lt;a href="http://www.codestore.net"&gt;Jake&lt;/a&gt; probably have done for &lt;a href="http://www.codestore.net/store.nsf/unid/BLOG-20051117/"&gt;close to four years&lt;/a&gt;. Getting rid of "Use JavaScript when generating pages". &lt;br /&gt;&lt;br /&gt;My addendum, is the choice of the submit element. In his article he chose &amp;lt;input type="submit" /&amp;gt;. The downside with this is that the value attribute is used as a label for the button. I'm going to use &lt;a href="http://www.w3.org/TR/html401/interact/forms.html#h-17.5"&gt;&amp;lt;button type="submit"&amp;gt;&lt;/a&gt;, which frees me to put whatever I want as a label. It makes it a lot easier to make internationalized button, as it lets you separate data from design.&lt;br /&gt;&lt;br /&gt;E.g. (brackets indicates field)&lt;br /&gt;&amp;lt;button type="submit" name="action" value="save"&amp;gt;[cfd_save_label]&amp;lt;/button&amp;gt;&lt;br /&gt;&amp;lt;button type="submit" name="action" value="archive"&amp;gt;[cfd_archive_label]&amp;lt;/button&amp;gt;&lt;br /&gt;&amp;lt;button type="submit" name="action" value="delete"&amp;gt;[cfd_delete_label]&amp;lt;/button&amp;gt;&lt;br /&gt;&lt;br /&gt;He's probably using this already, but since I couldn't find a mention of it on his site, I thought I should share it with you.&lt;br /&gt;&lt;br /&gt;If you're having trouble designing buttons across browsers, check out &lt;a href="http://particletree.com/features/rediscovering-the-button-element/"&gt;this guide&lt;/a&gt;.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3745504982837212509-3471600080044474707?l=dontpanic82.blogspot.com' alt='' /&gt;&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/dontpanic82/~4/QwuMDb8qdOA" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://dontpanic82.blogspot.com/feeds/3471600080044474707/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="https://www.blogger.com/comment.g?blogID=3745504982837212509&amp;postID=3471600080044474707" title="0 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/3745504982837212509/posts/default/3471600080044474707?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/3745504982837212509/posts/default/3471600080044474707?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/dontpanic82/~3/QwuMDb8qdOA/accessible-web-forms-with-domino.html" title="Accessible Web Forms With Domino - Addendum" /><author><name>Tommy Valand</name><uri>http://www.blogger.com/profile/11052104644034054473</uri><email>noreply@blogger.com</email><gd:extendedProperty name="OpenSocialUserId" value="04352057927170087255" /></author><thr:total xmlns:thr="http://purl.org/syndication/thread/1.0">0</thr:total><feedburner:origLink>http://dontpanic82.blogspot.com/2009/07/accessible-web-forms-with-domino.html</feedburner:origLink></entry><entry gd:etag="W/&quot;DUUERnY_cCp7ImA9WxJVFUw.&quot;"><id>tag:blogger.com,1999:blog-3745504982837212509.post-6282178879436279440</id><published>2009-07-01T15:15:00.007+01:00</published><updated>2009-07-02T07:46:47.848+01:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2009-07-02T07:46:47.848+01:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="web" /><title>HttpRequest class - Support for multivalue requests (e.g. checkbox)</title><content type="html">A colleague of mine needed to process values from a form with checkboxes. In some instances, the amount of checked boxes (select all) was so great that he hit the 32k limit of Domino fields.&lt;br /&gt;&lt;br /&gt;I suggested that he tried posting to an agent/used my &lt;a href="http://dontpanic82.blogspot.com/2007/12/httprequest-class.html"&gt;HttpRequest&lt;/a&gt; class. This didn't work, as each checkboxvalue is sendt as a single parameter.&lt;br /&gt;&lt;br /&gt;E.g. ...make_report?OpenAgent&amp;user=tom&amp;user=jane&amp;user=jack&lt;br /&gt;&lt;br /&gt;The previous version of the class only fetched the last parameter. &lt;br /&gt;&lt;pre&gt;&lt;code&gt;Dim request As New HttpRequest()&lt;br /&gt;Print request.parameter("user")&lt;br /&gt;' Prints jack&lt;br /&gt;&lt;br /&gt;&lt;/code&gt;&lt;/pre&gt;&lt;br /&gt;I updated the code, so that the class aggregates the values into a &lt;del&gt;comma separated string&lt;/del&gt; dynamic array. Single value parameters are still Strings.&lt;br /&gt;&lt;pre&gt;&lt;code&gt;Dim request As New HttpRequest()&lt;br /&gt;Print Join( request.parameter("user"), "," )&lt;br /&gt;' Prints tom,jane,jack&lt;br /&gt;&lt;br /&gt;&lt;/code&gt;&lt;/pre&gt;&lt;br /&gt;&lt;a href="http://tvaland.googlepages.com/httprequest.txt"&gt;&gt;&gt; The class in a txt-file&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;Share and enjoy!&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3745504982837212509-6282178879436279440?l=dontpanic82.blogspot.com' alt='' /&gt;&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/dontpanic82/~4/I_0K9Oy4V30" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://dontpanic82.blogspot.com/feeds/6282178879436279440/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="https://www.blogger.com/comment.g?blogID=3745504982837212509&amp;postID=6282178879436279440" title="3 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/3745504982837212509/posts/default/6282178879436279440?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/3745504982837212509/posts/default/6282178879436279440?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/dontpanic82/~3/I_0K9Oy4V30/httprequest-class-support-for.html" title="HttpRequest class - Support for multivalue requests (e.g. checkbox)" /><author><name>Tommy Valand</name><uri>http://www.blogger.com/profile/11052104644034054473</uri><email>noreply@blogger.com</email><gd:extendedProperty name="OpenSocialUserId" value="04352057927170087255" /></author><thr:total xmlns:thr="http://purl.org/syndication/thread/1.0">3</thr:total><feedburner:origLink>http://dontpanic82.blogspot.com/2009/07/httprequest-class-support-for.html</feedburner:origLink></entry><entry gd:etag="W/&quot;AkENSXs_eip7ImA9WxJVFEg.&quot;"><id>tag:blogger.com,1999:blog-3745504982837212509.post-4869595275628212687</id><published>2009-06-29T11:56:00.009+01:00</published><updated>2009-07-01T15:31:38.542+01:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2009-07-01T15:31:38.542+01:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="Lotus Notes" /><title>New NotesUI-bug found in Notes 8.5 (includes workaround)</title><content type="html">&lt;strong&gt;Update:&lt;/strong&gt; The bug(?) isn't as serious as I first thought. The settings document wasn't closed, but it was sent to a frameset of another application. In the other application, an action calls NotesUIWorkspace.SetTargetFrame. I'm not sure if it is a bug, that a document from another application ends up in this frameset. For all I know this is just Notes' quirky way of doing things. If I call &lt;em&gt;setTargetFrame("someRandomValue")&lt;/em&gt; before NotesUIWorkspace.EditDocument, the code works as designed.&lt;br /&gt;&lt;br /&gt;--&lt;br /&gt;&lt;br /&gt;I'm back working in the client again. It seems every time I'm working on client code, I discover a new NotesUI-bug. :-\&lt;br /&gt;&lt;br /&gt;&lt;strong&gt;Purpose: &lt;/strong&gt; When user tries to create a settings doc, check to see if one already exists. If yes, open the existing doc (by static unid), else set static unid, continue.&lt;br /&gt;&lt;br /&gt;I'd have thought it would be as easy as (in PostOpen) Source.Close, NotesUIWorkspace.EditDocument. And it would, if the user was running Notes 8.0.X. In Notes 8.5, the client closes both the "Create Settings" instance, and the LS instance if the user opens the Settings-form when a settings doc already exists (see code below).&lt;br /&gt;&lt;br /&gt;The workaround is easy: Source.Close, NotesUIWorkspace.URLOpen&lt;br /&gt;&lt;br /&gt;Even though it's easy to make the code work in 8.5, I shudder to think about how many existing applications that's going to misbehave if the user upgrades to Notes 8.5.&lt;br /&gt;&lt;br /&gt;&lt;pre&gt;&lt;div class=lotusscript&gt;&lt;br /&gt;&lt;font class=ls-statement&gt;Sub&lt;/font&gt; Postopen&lt;font class=ls-operator&gt;(&lt;/font&gt;Source &lt;font class=ls-keyword&gt;As&lt;/font&gt; &lt;font class=ls-class&gt;Notesuidocument&lt;/font&gt;&lt;font class=ls-operator&gt;)&lt;/font&gt;&lt;br /&gt; &lt;font class=ls-statement&gt;On&lt;/font&gt; &lt;font class=ls-function&gt;Error&lt;/font&gt; &lt;font class=ls-keyword&gt;Goto&lt;/font&gt; handleError&lt;br /&gt; &lt;br /&gt; &lt;font class=ls-function&gt;Print&lt;/font&gt; Source&lt;font class=ls-operator&gt;.&lt;/font&gt;IsNewDoc &lt;font class=ls-comment&gt;'True then False when settings doc exists&lt;/font&gt;&lt;br /&gt; &lt;br /&gt; &lt;font class=ls-comment&gt;'// If new doc, check for existing settings doc&lt;/font&gt;&lt;br /&gt; &lt;font class=ls-statement&gt;If&lt;/font&gt; Source&lt;font class=ls-operator&gt;.&lt;/font&gt;IsNewDoc &lt;font class=ls-statement&gt;Then&lt;/font&gt;&lt;br /&gt;  &lt;font class=ls-statement&gt;Dim&lt;/font&gt; settingsDoc &lt;font class=ls-keyword&gt;As&lt;/font&gt; &lt;font class=ls-class&gt;NotesDocument&lt;/font&gt;&lt;br /&gt;  &lt;font class=ls-statement&gt;Set&lt;/font&gt; settingsDoc &lt;font class=ls-operator&gt;=&lt;/font&gt; s&lt;font class=ls-operator&gt;.&lt;/font&gt;currentDatabase&lt;font class=ls-operator&gt;.&lt;/font&gt;GetDocumentByUNID&lt;font class=ls-operator&gt;(&lt;/font&gt; UNID_SETTINGS &lt;font class=ls-operator&gt;)&lt;/font&gt;&lt;br /&gt;  &lt;br /&gt;  &lt;font class=ls-comment&gt;'// Set static unid on new settings doc&lt;/font&gt;&lt;br /&gt;  &lt;font class=ls-statement&gt;If&lt;/font&gt; settingsDoc &lt;font class=ls-operator&gt;Is&lt;/font&gt; &lt;font class=ls-constant&gt;Nothing&lt;/font&gt; &lt;font class=ls-statement&gt;Then&lt;/font&gt;&lt;br /&gt;   Source&lt;font class=ls-operator&gt;.&lt;/font&gt;Document&lt;font class=ls-operator&gt;.&lt;/font&gt;UniversalID &lt;font class=ls-operator&gt;=&lt;/font&gt; UNID_SETTINGS&lt;br /&gt;  &lt;font class=ls-statement&gt;Else&lt;/font&gt; &lt;br /&gt;   &lt;font class=ls-comment&gt;'// Open existing settings doc&lt;/font&gt;&lt;br /&gt;   &lt;font class=ls-statement&gt;Dim&lt;/font&gt; ws &lt;font class=ls-keyword&gt;As&lt;/font&gt; &lt;font class=ls-keyword&gt;New&lt;/font&gt; &lt;font class=ls-class&gt;NotesUIWorkspace&lt;/font&gt;&lt;font class=ls-operator&gt;(&lt;/font&gt;&lt;font class=ls-operator&gt;)&lt;/font&gt;&lt;br /&gt;   &lt;font class=ls-function&gt;Call&lt;/font&gt; ws&lt;font class=ls-operator&gt;.&lt;/font&gt;URLOpen&lt;font class=ls-operator&gt;(&lt;/font&gt; settingsdoc&lt;font class=ls-operator&gt;.&lt;/font&gt;NotesURL &lt;font class=ls-operator&gt;)&lt;/font&gt; &lt;font class=ls-comment&gt;'Works&lt;/font&gt;&lt;br /&gt;   &lt;font class=ls-comment&gt;'Call ws.EditDocument( False, settingsDoc ) 'Does not work&lt;/font&gt;&lt;br /&gt;   Source&lt;font class=ls-operator&gt;.&lt;/font&gt;&lt;font class=ls-function&gt;Close&lt;/font&gt; &lt;font class=ls-constant&gt;True&lt;/font&gt;&lt;br /&gt;  &lt;font class=ls-statement&gt;End&lt;/font&gt; &lt;font class=ls-statement&gt;If&lt;/font&gt;&lt;br /&gt; &lt;font class=ls-statement&gt;End&lt;/font&gt; &lt;font class=ls-statement&gt;If&lt;/font&gt;&lt;br /&gt; &lt;br /&gt; &lt;font class=ls-statement&gt;Exit&lt;/font&gt; &lt;font class=ls-statement&gt;Sub&lt;/font&gt; &lt;br /&gt;handleError&lt;font class=ls-operator&gt;:&lt;/font&gt;&lt;br /&gt; &lt;font class=ls-statement&gt;If&lt;/font&gt; &lt;font class=ls-function&gt;Err&lt;/font&gt; &lt;font class=ls-operator&gt;=&lt;/font&gt; 4091 &lt;font class=ls-statement&gt;Then&lt;/font&gt; &lt;font class=ls-statement&gt;Resume&lt;/font&gt; &lt;font class=ls-statement&gt;Next&lt;/font&gt; &lt;font class=ls-comment&gt;'Invalid UNID &lt;/font&gt;&lt;br /&gt;&lt;font class=ls-statement&gt;End&lt;/font&gt; &lt;font class=ls-statement&gt;Sub&lt;/font&gt;&lt;br /&gt;&lt;/div&gt;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;&lt;a href="http://www-10.lotus.com/ldd/nd85forum.nsf/DateAllThreadedWeb/516b2aeefcd1c52d852575e4003de481?OpenDocument"&gt;&gt;&gt; Bugreport&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3745504982837212509-4869595275628212687?l=dontpanic82.blogspot.com' alt='' /&gt;&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/dontpanic82/~4/YWH_GJjZUMU" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://dontpanic82.blogspot.com/feeds/4869595275628212687/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="https://www.blogger.com/comment.g?blogID=3745504982837212509&amp;postID=4869595275628212687" title="6 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/3745504982837212509/posts/default/4869595275628212687?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/3745504982837212509/posts/default/4869595275628212687?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/dontpanic82/~3/YWH_GJjZUMU/new-ui-bug-found-in-notes-85-includes.html" title="New NotesUI-bug found in Notes 8.5 (includes workaround)" /><author><name>Tommy Valand</name><uri>http://www.blogger.com/profile/11052104644034054473</uri><email>noreply@blogger.com</email><gd:extendedProperty name="OpenSocialUserId" value="04352057927170087255" /></author><thr:total xmlns:thr="http://purl.org/syndication/thread/1.0">6</thr:total><feedburner:origLink>http://dontpanic82.blogspot.com/2009/06/new-ui-bug-found-in-notes-85-includes.html</feedburner:origLink></entry><entry gd:etag="W/&quot;Ak4ARXY9eCp7ImA9WxJXGE0.&quot;"><id>tag:blogger.com,1999:blog-3745504982837212509.post-3854556829327666311</id><published>2009-06-12T12:58:00.009+01:00</published><updated>2009-06-12T13:15:44.860+01:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2009-06-12T13:15:44.860+01:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="domino" /><category scheme="http://www.blogger.com/atom/ns#" term="web" /><title>Serving correct MIME-types for Office 2007 attachments on the web</title><content type="html">Several of our users had problems with opening Office 2007-attachments in Internet Explorer. The browser identified the attachments as zip files.&lt;br /&gt;&lt;br /&gt;The workaround for this is to set up the Domino server to send the appropriate MIME-type header.&lt;br /&gt;&lt;br /&gt;&lt;a href="http://www.bram.us/2007/05/25/office-2007-mime-types-for-iis/"&gt;The correct headers&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;Then you need to configure the Domino Server. We hoped it would be as easy as &lt;a href="http://www.codestore.net/store.nsf/unid/BLOG-20050804"&gt;adding config documents to the "File Identifications" view&lt;/a&gt;. Alas, this didn't work.&lt;br /&gt;&lt;br /&gt;What did work was &lt;a href="http://www.bananahome.com/users/bananahome/blog.nsf/d6plinks/PSTL-79DS3E"&gt;modifying the httpd&lt;/a&gt; file in the data-directory of the server/refreshing http &lt;br /&gt;(&lt;em&gt;tell http refresh&lt;/em&gt;).&lt;br /&gt;&lt;br /&gt;&lt;pre&gt;&lt;code&gt;#   Office 2007&lt;br /&gt;AddType .docm      application/vnd.ms-word.document.macroEnabled.12&lt;br /&gt;AddType .docx      application/vnd.openxmlformats-officedocument.wordprocessingml.document&lt;br /&gt;AddType .dotm      application/vnd.ms-word.template.macroEnabled.12&lt;br /&gt;AddType .dotx      application/vnd.openxmlformats-officedocument.wordprocessingml.template&lt;br /&gt;AddType .potm      application/vnd.ms-powerpoint.template.macroEnabled.12&lt;br /&gt;AddType .potx      application/vnd.openxmlformats-officedocument.presentationml.template&lt;br /&gt;AddType .ppam      application/vnd.ms-powerpoint.addin.macroEnabled.12&lt;br /&gt;AddType .ppsm      application/vnd.ms-powerpoint.slideshow.macroEnabled.12&lt;br /&gt;AddType .ppsx      application/vnd.openxmlformats-officedocument.presentationml.slideshow&lt;br /&gt;AddType .pptm      application/vnd.ms-powerpoint.presentation.macroEnabled.12&lt;br /&gt;AddType .pptx      application/vnd.openxmlformats-officedocument.presentationml.presentation&lt;br /&gt;AddType .xlam      application/vnd.ms-excel.addin.macroEnabled.12&lt;br /&gt;AddType .xlsb      application/vnd.ms-excel.sheet.binary.macroEnabled.12&lt;br /&gt;AddType .xlsm      application/vnd.ms-excel.sheet.macroEnabled.12&lt;br /&gt;AddType .xlsx      application/vnd.openxmlformats-officedocument.spreadsheetml.sheet&lt;br /&gt;AddType .xltm      application/vnd.ms-excel.template.macroEnabled.12&lt;br /&gt;AddType .xltx      application/vnd.openxmlformats-officedocument.spreadsheetml.template&lt;br /&gt;&lt;/code&gt;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;Not sure if it is a bug that the "File Identifications" solution didn't work..? The server-version is Domino 8.5.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3745504982837212509-3854556829327666311?l=dontpanic82.blogspot.com' alt='' /&gt;&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/dontpanic82/~4/3lSgw8TvLow" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://dontpanic82.blogspot.com/feeds/3854556829327666311/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="https://www.blogger.com/comment.g?blogID=3745504982837212509&amp;postID=3854556829327666311" title="2 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/3745504982837212509/posts/default/3854556829327666311?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/3745504982837212509/posts/default/3854556829327666311?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/dontpanic82/~3/3lSgw8TvLow/serving-correct-mime-types-for-office.html" title="Serving correct MIME-types for Office 2007 attachments on the web" /><author><name>Tommy Valand</name><uri>http://www.blogger.com/profile/11052104644034054473</uri><email>noreply@blogger.com</email><gd:extendedProperty name="OpenSocialUserId" value="04352057927170087255" /></author><thr:total xmlns:thr="http://purl.org/syndication/thread/1.0">2</thr:total><feedburner:origLink>http://dontpanic82.blogspot.com/2009/06/serving-correct-mime-types-for-office.html</feedburner:origLink></entry><entry gd:etag="W/&quot;CEUNQ30-eip7ImA9WxJXF00.&quot;"><id>tag:blogger.com,1999:blog-3745504982837212509.post-7660252616035005070</id><published>2009-06-11T07:33:00.003+01:00</published><updated>2009-06-11T07:38:12.352+01:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2009-06-11T07:38:12.352+01:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="random tip" /><title>Great tool to test web applications in IE 5.5 -&gt; 8</title><content type="html">A colleague of mine discovered this great application, &lt;a href="http://www.my-debugbar.com/wiki/IETester/HomePage"&gt;IETester&lt;/a&gt;. It seems to be able to run four versions of IE at once (IE 5.5, 6, 7 and IE 8).&lt;br /&gt;&lt;br /&gt;There have been tools like this before, but all previous tools I've tried have not supported cookies, so no go for Domino login. This one does.&lt;br /&gt;&lt;br /&gt;It's currently in early beta, but seems quite stable.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3745504982837212509-7660252616035005070?l=dontpanic82.blogspot.com' alt='' /&gt;&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/dontpanic82/~4/PVvvJ7sw0k0" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://dontpanic82.blogspot.com/feeds/7660252616035005070/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="https://www.blogger.com/comment.g?blogID=3745504982837212509&amp;postID=7660252616035005070" title="2 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/3745504982837212509/posts/default/7660252616035005070?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/3745504982837212509/posts/default/7660252616035005070?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/dontpanic82/~3/PVvvJ7sw0k0/great-tool-to-test-web-applications-in.html" title="Great tool to test web applications in IE 5.5 -&gt; 8" /><author><name>Tommy Valand</name><uri>http://www.blogger.com/profile/11052104644034054473</uri><email>noreply@blogger.com</email><gd:extendedProperty name="OpenSocialUserId" value="04352057927170087255" /></author><thr:total xmlns:thr="http://purl.org/syndication/thread/1.0">2</thr:total><feedburner:origLink>http://dontpanic82.blogspot.com/2009/06/great-tool-to-test-web-applications-in.html</feedburner:origLink></entry></feed>
