<?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:blogger="http://schemas.google.com/blogger/2008" xmlns:georss="http://www.georss.org/georss" xmlns:gd="http://schemas.google.com/g/2005" xmlns:thr="http://purl.org/syndication/thread/1.0" xmlns:feedburner="http://rssnamespace.org/feedburner/ext/1.0" gd:etag="W/&quot;C0cAR3g4cSp7ImA9WhBaEk8.&quot;"><id>tag:blogger.com,1999:blog-3745504982837212509</id><updated>2013-05-22T12:10:46.639+01:00</updated><category term="Compendia AS" /><category term="bugfix" /><category term="cheat sheet" /><category term="XPages API Inspector" /><category term="sntt" /><category term="xsl" /><category term="dde" /><category term="pager" /><category term="XPiNC" /><category term="client" /><category term="debugging" /><category term="web" /><category term="favorite applications" /><category term="bugs" /><category term="avatar" /><category term="lotusphere" /><category term="lotusphere 2009" /><category term="benchmark" /><category term="regexp" /><category term="updates" /><category term="development tools" /><category term="show'n-tell-thursday" /><category term="random nonsense" /><category term="ssjs" /><category term="simpsons" /><category term="book recommendation" /><category term="dhtml" /><category term="64k" /><category term="announcement" /><category term="random tip" /><category term="accessibility" /><category term="limits" /><category term="fgoto" /><category term="gimp" /><category term="randomt tip" /><category term="layout" /><category term="Microsoft Web Browser" /><category term="formula" /><category term="domino designer" /><category term="design definition" /><category term="ls2j" /><category term="custom control" /><category term="transform" /><category term="limit" /><category term="rant" /><category term="patch" /><category term="NotesFX" /><category term="mootools" /><category term="server side event delegation" /><category term="xml" /><category term="office" /><category term="jsf" /><category term="JavaScript in Lotus Notes" /><category term="CSS" /><category term="java" /><category term="tool" /><category term="Domino 8.5" /><category term="FieldListener" /><category term="ckeditor" /><category term="script library" /><category term="themes" /><category term="ideas" /><category term="question" /><category term="preview" /><category term="code snippet" /><category term="outlook" /><category term="print" /><category term="partial refresh" /><category term="beans" /><category term="dojo" /><category term="integration" /><category term="lotusscript" /><category term="software" /><category term="event handling" /><category term="domino" /><category term="Validation" /><category term="server side javascript" /><category term="Show-n-Tell Thursday" /><category term="mac" /><category term="checkboxes" /><category term="proof-of-concept" /><category term="templating" /><category term="search" /><category term="microsoft" /><category term="statistics" /><category term="JavaScript" /><category term="ideajam" /><category term="request" /><category term="Lotus Notes" /><category term="$$ReturnGeneralError" /><category term="aptana" /><category term="json" /><category term="agent" /><category term="xpages" /><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="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>https://plus.google.com/109083546111451101200</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="32" height="32" src="//lh4.googleusercontent.com/-YKfhIJ6AceM/AAAAAAAAAAI/AAAAAAAAAYc/WNJqbZp2RSM/s512-c/photo.jpg" /></author><generator version="7.00" uri="http://www.blogger.com">Blogger</generator><openSearch:totalResults>334</openSearch:totalResults><openSearch:startIndex>1</openSearch:startIndex><openSearch:itemsPerPage>25</openSearch:itemsPerPage><atom10:link xmlns:atom10="http://www.w3.org/2005/Atom" rel="self" type="application/atom+xml" href="http://feeds.feedburner.com/dontpanic82" /><feedburner:info uri="dontpanic82" /><atom10:link xmlns:atom10="http://www.w3.org/2005/Atom" rel="hub" href="http://pubsubhubbub.appspot.com/" /><entry gd:etag="W/&quot;DEMFQHY7fCp7ImA9WhBaEU8.&quot;"><id>tag:blogger.com,1999:blog-3745504982837212509.post-766555800875529533</id><published>2013-05-21T09:53:00.001+01:00</published><updated>2013-05-21T09:53:31.804+01:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2013-05-21T09:53:31.804+01:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="layout" /><category scheme="http://www.blogger.com/atom/ns#" term="checkboxes" /><category scheme="http://www.blogger.com/atom/ns#" term="xpages" /><title>Custom Control for custom layout of checkboxes</title><content type="html">&lt;div class="separator"&gt;
In a recent project, I wanted to create an interface to toggle different settings for different user types in an app. To save real estate on the page and (hopefully) make it more intuitive, I wanted to have a column per user type, and organize the checkboxes vertically.&lt;/div&gt;
&lt;br /&gt;
I couldn't find any way to do this out of the box. To make it work, I made a regular checkbox group per field. Then in a repeat control, I have regular HTML checkboxes with name fetched from the real checkbox group. The checkbox group has to have the same values as the HTML checkboxes, or the values will be discarded.&lt;br /&gt;
&lt;br /&gt;
The checkbox component is removed from the DOM via javascript when the page loads. If the real checkbox component isn't removed, you will only be able to select, and not deselect.&lt;br /&gt;
&lt;br /&gt;
Screenshot from the demoapp (each checkbox &lt;strong&gt;column&lt;/strong&gt; is bound to a &lt;strong&gt;multivalue field&lt;/strong&gt;):&lt;br /&gt;
&lt;br /&gt;
&lt;div class="separator" style="clear: both; text-align: center;"&gt;
&lt;img src="http://3.bp.blogspot.com/-xk_lDS0Y1wE/UZsu_XpJ1eI/AAAAAAAAAZE/Tg4Hs5ARr88/s1600/screenshot1.png" /&gt;&lt;/div&gt;
&lt;br /&gt;
&lt;div class="separator"&gt;
The custom control has four properties:&lt;/div&gt;
&lt;ul&gt;
&lt;li&gt;&lt;b&gt;checkboxValues: &lt;/b&gt;Array of strings - Values for the checkboxes&lt;/li&gt;
&lt;li&gt;&lt;b&gt;fieldNames: &lt;/b&gt;Array of strings - Names of the fields in the form you want to connect the checkboxes to (remember to set them to multi-value in form)&lt;/li&gt;
&lt;li&gt;&lt;b&gt;headerLabels: &lt;/b&gt;Array of strings - Header labels for the checkbox columns&lt;/li&gt;
&lt;li&gt;&lt;b&gt;rowLabels: &lt;/b&gt;Array of strings - Labels for the checkbox rows&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Currently, the custom control uses currentDocument to bind the fields. If the control doesn't work, you might need to use a more specific document data source.&lt;/p&gt;
&lt;b&gt;Example usage&lt;/b&gt;&lt;br /&gt;
&lt;pre&gt;&lt;code&gt;&amp;lt;xc:CheckboxTable checkboxValues="#{javascript:return ['inbox','outbox'];}"
   fieldNames="#{javascript:return ['hidden_items_administrators','hidden_items_users','hidden_items_limited_users'];}"
   headerLabels="#{javascript:return [labels.administrators, labels.users, labels.limitedUsers];}" rowLabels="#{javascript:return [labels.inbox,labels.outbox];}" /&amp;gt;&lt;/code&gt;&lt;/pre&gt;
&lt;div class="separator"&gt;
The demoapp has been tested/works in these browsers: IE8/9 (should work in earlier browsers, but the layout is ugly), latest versions of Chrome, Firefox and Opera.
&lt;/div&gt;
&lt;p&gt;
&lt;strong&gt;&lt;a href="http://files.dontpanic82.com/CheckBoxTableDemo.zip" target="_blank"&gt;&amp;gt;&amp;gt;&amp;nbsp;Download demoapp&lt;/a&gt;&lt;/strong&gt;
&lt;/p&gt;
&lt;p&gt;The technique I used (real+"fake" checkboxes) should enable you to customize the layout of checkboxes however you want. I imagine the technique should also work for radio buttons.&lt;/p&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/dontpanic82?a=aMrD7IkoloA:NzJwNb3Et9s:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/dontpanic82?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/dontpanic82?a=aMrD7IkoloA:NzJwNb3Et9s:4cEx4HpKnUU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/dontpanic82?i=aMrD7IkoloA:NzJwNb3Et9s:4cEx4HpKnUU" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/dontpanic82?a=aMrD7IkoloA:NzJwNb3Et9s:qj6IDK7rITs"&gt;&lt;img src="http://feeds.feedburner.com/~ff/dontpanic82?d=qj6IDK7rITs" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/dontpanic82?a=aMrD7IkoloA:NzJwNb3Et9s:V_sGLiPBpWU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/dontpanic82?i=aMrD7IkoloA:NzJwNb3Et9s:V_sGLiPBpWU" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/dontpanic82?a=aMrD7IkoloA:NzJwNb3Et9s:F7zBnMyn0Lo"&gt;&lt;img src="http://feeds.feedburner.com/~ff/dontpanic82?i=aMrD7IkoloA:NzJwNb3Et9s:F7zBnMyn0Lo" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/dontpanic82/~4/aMrD7IkoloA" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://dontpanic82.blogspot.com/feeds/766555800875529533/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://www.blogger.com/comment.g?blogID=3745504982837212509&amp;postID=766555800875529533" title="1 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/3745504982837212509/posts/default/766555800875529533?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/3745504982837212509/posts/default/766555800875529533?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/dontpanic82/~3/aMrD7IkoloA/custom-control-for-custom-layout-of.html" title="Custom Control for custom layout of checkboxes" /><author><name>Tommy Valand</name><uri>https://plus.google.com/109083546111451101200</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="32" height="32" src="//lh4.googleusercontent.com/-YKfhIJ6AceM/AAAAAAAAAAI/AAAAAAAAAYc/WNJqbZp2RSM/s512-c/photo.jpg" /></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="http://3.bp.blogspot.com/-xk_lDS0Y1wE/UZsu_XpJ1eI/AAAAAAAAAZE/Tg4Hs5ARr88/s72-c/screenshot1.png" height="72" width="72" /><thr:total>1</thr:total><feedburner:origLink>http://dontpanic82.blogspot.com/2013/05/custom-control-for-custom-layout-of.html</feedburner:origLink></entry><entry gd:etag="W/&quot;C0QFQ3wyfSp7ImA9WhBQF0o.&quot;"><id>tag:blogger.com,1999:blog-3745504982837212509.post-1847300796569778690</id><published>2013-03-20T09:00:00.000+01:00</published><updated>2013-03-20T10:21:52.295+01:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2013-03-20T10:21:52.295+01:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="partial refresh" /><category scheme="http://www.blogger.com/atom/ns#" term="code snippet" /><title>Fix for partial refresh on Dojo Tab Container/Content Pane</title><content type="html">I wrote this a while back, but I couldn't find that I'd shared it.

&lt;br /&gt;
&lt;br /&gt;
You need to use the &lt;a href="http://dontpanic82.blogspot.no/2010/01/xpages-hijackingpublishing-partial.html"&gt;partial refresh hijacker&lt;/a&gt; to use the code snippet.

&lt;br /&gt;
&lt;br /&gt;
This code snippet initializes Dojo Tab Containers/Dojo Content Panes in the area that's refreshed:&lt;br /&gt;
&lt;pre&gt;&lt;code&gt;// Fix problem with partial refresh on Dojo Tab Container/Content pane
// Source for inspiration:
// http://www.openntf.org/projects/pmt.nsf/0/D228115FAA98DDEC86257A7D0050E7FF
dojo.subscribe( 'partialrefresh-complete', this, function( method, form, refreshId ) {
 var tabContainersAndContentPanes = dojo.query( '[id=' + refreshId + '] .dijitTabContainer[widgetid], ' +
  '[id=' + refreshId + '] .dijitContentPane[widgetid]' );
 if( tabContainersAndContentPanes.length === 0 ) {
  return;
 }
 
 for( var i = 0; i &amp;lt; tabContainersAndContentPanes.length; i++ ) {
  var widgetId = tabContainersAndContentPanes[i].getAttribute( 'widgetid' );
  var widget = dijit.byId( widgetId );
  if( widget ) {
   widget.startup();
   widget.resize();
  }
 }
} );&lt;/code&gt;&lt;/pre&gt;
&lt;br /&gt;
Add the code snippet in a dojo.addOnLoad function or something similar.
&lt;br /&gt;
&lt;br /&gt;
If you have other widget types that fails to initialize, just modify the selector/startup commands to fix.&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/dontpanic82?a=5FwTl8VPoQA:vdcVoVg1CU0:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/dontpanic82?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/dontpanic82?a=5FwTl8VPoQA:vdcVoVg1CU0:4cEx4HpKnUU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/dontpanic82?i=5FwTl8VPoQA:vdcVoVg1CU0:4cEx4HpKnUU" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/dontpanic82?a=5FwTl8VPoQA:vdcVoVg1CU0:qj6IDK7rITs"&gt;&lt;img src="http://feeds.feedburner.com/~ff/dontpanic82?d=qj6IDK7rITs" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/dontpanic82?a=5FwTl8VPoQA:vdcVoVg1CU0:V_sGLiPBpWU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/dontpanic82?i=5FwTl8VPoQA:vdcVoVg1CU0:V_sGLiPBpWU" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/dontpanic82?a=5FwTl8VPoQA:vdcVoVg1CU0:F7zBnMyn0Lo"&gt;&lt;img src="http://feeds.feedburner.com/~ff/dontpanic82?i=5FwTl8VPoQA:vdcVoVg1CU0:F7zBnMyn0Lo" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/dontpanic82/~4/5FwTl8VPoQA" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://dontpanic82.blogspot.com/feeds/1847300796569778690/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://www.blogger.com/comment.g?blogID=3745504982837212509&amp;postID=1847300796569778690" title="1 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/3745504982837212509/posts/default/1847300796569778690?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/3745504982837212509/posts/default/1847300796569778690?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/dontpanic82/~3/5FwTl8VPoQA/fix-for-partial-refresh-on-dojo-tab.html" title="Fix for partial refresh on Dojo Tab Container/Content Pane" /><author><name>Tommy Valand</name><uri>https://plus.google.com/109083546111451101200</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="32" height="32" src="//lh4.googleusercontent.com/-YKfhIJ6AceM/AAAAAAAAAAI/AAAAAAAAAYc/WNJqbZp2RSM/s512-c/photo.jpg" /></author><thr:total>1</thr:total><feedburner:origLink>http://dontpanic82.blogspot.com/2013/03/fix-for-partial-refresh-on-dojo-tab.html</feedburner:origLink></entry><entry gd:etag="W/&quot;A04ESHY-cCp7ImA9WhNbFEQ.&quot;"><id>tag:blogger.com,1999:blog-3745504982837212509.post-1585314383911476365</id><published>2013-01-18T10:05:00.000+01:00</published><updated>2013-01-18T10:05:09.858+01:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2013-01-18T10:05:09.858+01:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="lotusscript" /><category scheme="http://www.blogger.com/atom/ns#" term="code snippet" /><title>Small LS class that can be used to check if fields have changed</title><content type="html">We've had some issues with semaphore locks on one of our import databases. The import database has routines that import/update data, then replicate it to a cluster when it's done. &lt;br /&gt;
&lt;br /&gt;
We're not exactly sure what triggers the locks, but the server crashed sometimes several times a day, so we decided to see if the import routines could be optimized to do as few writes as possible.&lt;br /&gt;
&lt;br /&gt;
Several of the routines saved documents even if there were no field changes. I wrote a simple class to test for field value changes.&lt;br /&gt;
&lt;pre&gt;&lt;code&gt;'// Used to test if certain fields have changed
Class FieldChangeChecker
 Private fieldsToCheck As Variant
 Private fieldValues List As Variant
 
 '// Run this after calculcation/etc. to see if specified fields have changed
 Function haveFieldsChanged( doc As NotesDocument ) As Boolean
  On Error GoTo bubbleError
  
  If doc.isNewNote Then
   haveFieldsChanged = True
   Exit Function
  End If
  
  Dim initialValue As Variant, currentValue As Variant
  ForAll fieldName In Me.fieldsToCheck
   initialValue = Me.fieldValues( fieldName )
   currentValue = doc.getItemValue( fieldName )(0)
   
   If initialValue &amp;lt;&amp;gt; currentValue Then
    haveFieldsChanged = True
    Exit Function
   End If
  End ForAll
  
  Exit Function
bubbleError:
  Error Err, errorMessage()
 End Function
 
 '// Comma separate field names. E.g. "forename,surname"
 Sub New( ByVal commaSeparatedFieldNames As String )
  On Error GoTo bubbleError
  
  Me.fieldsToCheck = FullTrim( Split( commaSeparatedFieldNames, "," ) )
  
  Exit Sub
bubbleError:
  Error Err, errorMessage()
 End Sub
 
 
 '// Run this before calculation/etc.
 Sub readInitialValues( doc As NotesDocument )
  On Error GoTo bubbleError
  
  ForAll fieldName In Me.fieldsToCheck
   Me.fieldValues( fieldName ) = doc.getItemValue( fieldName )(0)
  End ForAll

  Exit Sub
bubbleError:
  Error Err, errorMessage()
 End Sub 
End Class&lt;/code&gt;&lt;/pre&gt;
Example of use:
&lt;br /&gt;
&lt;pre&gt;&lt;code&gt;..
Dim fieldChangeChecker As New FieldChangeChecker( "FirstName,LastName,Address,PostCode,City" )
Set customerDoc = customersView.getFirstDocument()
While Not customerDoc Is Nothing
 Call fieldChangeChecker.readInitialValues( customerDoc )

 '// Code that looks up the newest information and sets fields

 If fieldChangeChecker.haveFieldsChanged( customerDoc ) Then
  Call dataDoc.Save(True, False) 
 End If

 Set customerDoc = customersView.getNextDocument( customerDoc )
Wend
..&lt;/code&gt;&lt;/pre&gt;

Regarding the errorMessage-function in the class. I use error bubbling in all my LS code. If something fails somewhere in a routine, I want the routine to stop executing. At the top of the stack, I use OpenLog/LogError. This gives me a nice pseudo stack of the function calls.&lt;br/&gt;

Code for errorMessage function:&lt;pre&gt;&lt;code&gt;Function errorMessage As String
 '// Simple function to generate more readable errors when dealing with error-bubbling
 Dim message As String
 message = Error
 
 If CStr( GetThreadInfo(10) ) = "INITIALIZE" Then
  errorMessage =  "Error " &amp; Err &amp; " on line " &amp; Erl &amp; " in function " &amp; GetThreadInfo( 10 ) &amp; ": " + Error
 Else
  errorMessage =  Chr(13) + Chr(9) + "Error " &amp; Err &amp; " on line " &amp; Erl &amp; " in function " &amp; GetThreadInfo( 10 ) &amp; ": " + Error$ 
 End If 
End Function&lt;/code&gt;&lt;/pre&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/dontpanic82?a=OOSpdcpwa9c:1Zz4BOBiywQ:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/dontpanic82?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/dontpanic82?a=OOSpdcpwa9c:1Zz4BOBiywQ:4cEx4HpKnUU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/dontpanic82?i=OOSpdcpwa9c:1Zz4BOBiywQ:4cEx4HpKnUU" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/dontpanic82?a=OOSpdcpwa9c:1Zz4BOBiywQ:qj6IDK7rITs"&gt;&lt;img src="http://feeds.feedburner.com/~ff/dontpanic82?d=qj6IDK7rITs" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/dontpanic82?a=OOSpdcpwa9c:1Zz4BOBiywQ:V_sGLiPBpWU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/dontpanic82?i=OOSpdcpwa9c:1Zz4BOBiywQ:V_sGLiPBpWU" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/dontpanic82?a=OOSpdcpwa9c:1Zz4BOBiywQ:F7zBnMyn0Lo"&gt;&lt;img src="http://feeds.feedburner.com/~ff/dontpanic82?i=OOSpdcpwa9c:1Zz4BOBiywQ:F7zBnMyn0Lo" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/dontpanic82/~4/OOSpdcpwa9c" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://dontpanic82.blogspot.com/feeds/1585314383911476365/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://www.blogger.com/comment.g?blogID=3745504982837212509&amp;postID=1585314383911476365" title="2 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/3745504982837212509/posts/default/1585314383911476365?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/3745504982837212509/posts/default/1585314383911476365?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/dontpanic82/~3/OOSpdcpwa9c/small-ls-class-that-can-be-used-to.html" title="Small LS class that can be used to check if fields have changed" /><author><name>Tommy Valand</name><uri>https://plus.google.com/109083546111451101200</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="32" height="32" src="//lh4.googleusercontent.com/-YKfhIJ6AceM/AAAAAAAAAAI/AAAAAAAAAYc/WNJqbZp2RSM/s512-c/photo.jpg" /></author><thr:total>2</thr:total><feedburner:origLink>http://dontpanic82.blogspot.com/2013/01/small-ls-class-that-can-be-used-to.html</feedburner:origLink></entry><entry gd:etag="W/&quot;CU8AR3g9cCp7ImA9WhNTEE8.&quot;"><id>tag:blogger.com,1999:blog-3745504982837212509.post-7722708485805678835</id><published>2012-10-12T07:36:00.000+01:00</published><updated>2012-10-12T07:37:26.668+01:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2012-10-12T07:37:26.668+01:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="code snippet" /><title>Code Snippet - Close dialog if all fields are valid</title><content type="html">Today I was working on a dialog that had fields with validation. I only want to close the dialog if all fields are valid. I'm not aware of any inbuilt XSP methods that does this.

This code snippet checks for any invalid fields in the dialog. If all fields are valid, the dialog is closed.&lt;br /&gt;
&lt;pre&gt;&lt;code&gt;function closeDialogIfValid( dialogId ){
 var invalidCount = dojo.query( '[id="' + dialogId + '"] [aria-invalid="true"]' ).length;
 if( invalidCount === 0 ){
  XSP.closeDialog( dialogId );
 }
}&lt;/code&gt;&lt;/pre&gt;
This probably only works if you're using server side validation.
&lt;br /&gt;
&lt;br /&gt;
If there is something like this in the XSP API, please let me know.
&lt;br /&gt;
&lt;br /&gt;
Share and enjoy!&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/dontpanic82?a=qasVpzY7kRg:xJcneZCyD9Q:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/dontpanic82?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/dontpanic82?a=qasVpzY7kRg:xJcneZCyD9Q:4cEx4HpKnUU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/dontpanic82?i=qasVpzY7kRg:xJcneZCyD9Q:4cEx4HpKnUU" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/dontpanic82?a=qasVpzY7kRg:xJcneZCyD9Q:qj6IDK7rITs"&gt;&lt;img src="http://feeds.feedburner.com/~ff/dontpanic82?d=qj6IDK7rITs" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/dontpanic82?a=qasVpzY7kRg:xJcneZCyD9Q:V_sGLiPBpWU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/dontpanic82?i=qasVpzY7kRg:xJcneZCyD9Q:V_sGLiPBpWU" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/dontpanic82?a=qasVpzY7kRg:xJcneZCyD9Q:F7zBnMyn0Lo"&gt;&lt;img src="http://feeds.feedburner.com/~ff/dontpanic82?i=qasVpzY7kRg:xJcneZCyD9Q:F7zBnMyn0Lo" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/dontpanic82/~4/qasVpzY7kRg" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://dontpanic82.blogspot.com/feeds/7722708485805678835/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://www.blogger.com/comment.g?blogID=3745504982837212509&amp;postID=7722708485805678835" title="6 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/3745504982837212509/posts/default/7722708485805678835?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/3745504982837212509/posts/default/7722708485805678835?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/dontpanic82/~3/qasVpzY7kRg/code-snippet-close-dialog-if-all-fields.html" title="Code Snippet - Close dialog if all fields are valid" /><author><name>Tommy Valand</name><uri>https://plus.google.com/109083546111451101200</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="32" height="32" src="//lh4.googleusercontent.com/-YKfhIJ6AceM/AAAAAAAAAAI/AAAAAAAAAYc/WNJqbZp2RSM/s512-c/photo.jpg" /></author><thr:total>6</thr:total><feedburner:origLink>http://dontpanic82.blogspot.com/2012/10/code-snippet-close-dialog-if-all-fields.html</feedburner:origLink></entry><entry gd:etag="W/&quot;AkACQH0zfSp7ImA9WhJVGU8.&quot;"><id>tag:blogger.com,1999:blog-3745504982837212509.post-4820415641417861177</id><published>2012-09-06T11:35:00.000+01:00</published><updated>2012-09-06T11:52:41.385+01:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2012-09-06T11:52:41.385+01:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="code snippet" /><category scheme="http://www.blogger.com/atom/ns#" term="xpages" /><category scheme="http://www.blogger.com/atom/ns#" term="random tip" /><title>Snippet to clear session for user</title><content type="html">During testing, I sometimes log in as different user to test hide/whens/etc. I used to delete the SessionID cookie in the browser to clear session scoped beans/sessionScope variables.

Today, I looked for a solution to automate this. This line will clear all objects related to a session:&lt;pre&gt;&lt;code&gt;facesContext.getExternalContext().getSession( false ).invalidate();&lt;/code&gt;&lt;/pre&gt;

If you want to clear session when logged in user changes for the current "XPages" session, here's the snippet I use (put the code in &lt;strong&gt;afterPageLoad&lt;/strong&gt; or &lt;strong&gt;beforePageLoad&lt;/strong&gt;):&lt;pre&gt;&lt;code&gt;// Reset session when user changes
var currentUserName = sessionScope.currentUserName;
var userName = session.getEffectiveUserName();
if( currentUserName &amp;&amp; userName !== currentUserName ){
 facesContext.getExternalContext().getSession( false ).invalidate();
}   
sessionScope.currentUserName = userName;&lt;/code&gt;&lt;/pre&gt;

I would think this is better than deleting the cookie, as the server is immediately notified that it should flush the objects bound to the session. When I delete the cookie, I believe that the objects are kept in memory until a specified timeout.&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/dontpanic82?a=xTStfhThgZs:oJ8x1HyQpUk:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/dontpanic82?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/dontpanic82?a=xTStfhThgZs:oJ8x1HyQpUk:4cEx4HpKnUU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/dontpanic82?i=xTStfhThgZs:oJ8x1HyQpUk:4cEx4HpKnUU" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/dontpanic82?a=xTStfhThgZs:oJ8x1HyQpUk:qj6IDK7rITs"&gt;&lt;img src="http://feeds.feedburner.com/~ff/dontpanic82?d=qj6IDK7rITs" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/dontpanic82?a=xTStfhThgZs:oJ8x1HyQpUk:V_sGLiPBpWU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/dontpanic82?i=xTStfhThgZs:oJ8x1HyQpUk:V_sGLiPBpWU" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/dontpanic82?a=xTStfhThgZs:oJ8x1HyQpUk:F7zBnMyn0Lo"&gt;&lt;img src="http://feeds.feedburner.com/~ff/dontpanic82?i=xTStfhThgZs:oJ8x1HyQpUk:F7zBnMyn0Lo" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/dontpanic82/~4/xTStfhThgZs" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://dontpanic82.blogspot.com/feeds/4820415641417861177/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://www.blogger.com/comment.g?blogID=3745504982837212509&amp;postID=4820415641417861177" title="0 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/3745504982837212509/posts/default/4820415641417861177?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/3745504982837212509/posts/default/4820415641417861177?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/dontpanic82/~3/xTStfhThgZs/snippet-to-clear-session-for-user.html" title="Snippet to clear session for user" /><author><name>Tommy Valand</name><uri>https://plus.google.com/109083546111451101200</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="32" height="32" src="//lh4.googleusercontent.com/-YKfhIJ6AceM/AAAAAAAAAAI/AAAAAAAAAYc/WNJqbZp2RSM/s512-c/photo.jpg" /></author><thr:total>0</thr:total><feedburner:origLink>http://dontpanic82.blogspot.com/2012/09/snippet-to-clear-session-for-user.html</feedburner:origLink></entry><entry gd:etag="W/&quot;D0cGQ3k5cSp7ImA9WhJWFEs.&quot;"><id>tag:blogger.com,1999:blog-3745504982837212509.post-6347085600875832843</id><published>2012-08-20T13:17:00.000+01:00</published><updated>2012-08-20T13:17:02.729+01:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2012-08-20T13:17:02.729+01:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="random tip" /><title>Comprehensive guide to Design Definitions</title><content type="html">I found this guide in IBM's Application Development wiki while looking for information on Design Definitions:&lt;br /&gt;
&lt;a href="http://www-10.lotus.com/ldd/ddwiki.nsf/dx/Native_and_Custom_Control_Custom_Visualization_Best_Practices"&gt;Native and Custom Control Custom Visualization Best Practices&lt;/a&gt;&lt;br /&gt;
&lt;br /&gt;
So far it's the most comprehensive guide to Design Definitions I've found.&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/dontpanic82?a=_cbwWY2oFXI:_zjODHB1Yrs:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/dontpanic82?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/dontpanic82?a=_cbwWY2oFXI:_zjODHB1Yrs:4cEx4HpKnUU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/dontpanic82?i=_cbwWY2oFXI:_zjODHB1Yrs:4cEx4HpKnUU" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/dontpanic82?a=_cbwWY2oFXI:_zjODHB1Yrs:qj6IDK7rITs"&gt;&lt;img src="http://feeds.feedburner.com/~ff/dontpanic82?d=qj6IDK7rITs" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/dontpanic82?a=_cbwWY2oFXI:_zjODHB1Yrs:V_sGLiPBpWU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/dontpanic82?i=_cbwWY2oFXI:_zjODHB1Yrs:V_sGLiPBpWU" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/dontpanic82?a=_cbwWY2oFXI:_zjODHB1Yrs:F7zBnMyn0Lo"&gt;&lt;img src="http://feeds.feedburner.com/~ff/dontpanic82?i=_cbwWY2oFXI:_zjODHB1Yrs:F7zBnMyn0Lo" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/dontpanic82/~4/_cbwWY2oFXI" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://dontpanic82.blogspot.com/feeds/6347085600875832843/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://www.blogger.com/comment.g?blogID=3745504982837212509&amp;postID=6347085600875832843" title="0 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/3745504982837212509/posts/default/6347085600875832843?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/3745504982837212509/posts/default/6347085600875832843?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/dontpanic82/~3/_cbwWY2oFXI/comprehensive-guide-to-design.html" title="Comprehensive guide to Design Definitions" /><author><name>Tommy Valand</name><uri>https://plus.google.com/109083546111451101200</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="32" height="32" src="//lh4.googleusercontent.com/-YKfhIJ6AceM/AAAAAAAAAAI/AAAAAAAAAYc/WNJqbZp2RSM/s512-c/photo.jpg" /></author><thr:total>0</thr:total><feedburner:origLink>http://dontpanic82.blogspot.com/2012/08/comprehensive-guide-to-design.html</feedburner:origLink></entry><entry gd:etag="W/&quot;C0UEQXY-fSp7ImA9WhJQE0Q.&quot;"><id>tag:blogger.com,1999:blog-3745504982837212509.post-5354995939561604558</id><published>2012-07-27T13:13:00.000+01:00</published><updated>2012-07-27T13:13:20.855+01:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2012-07-27T13:13:20.855+01:00</app:edited><title>XPages - Grouping data in comboboxes</title><content type="html">I wanted to have some values grouped in a ComboBox. Not sure if it's possible to do with pure SSJS (without using the Java API), but found a way using beans:&lt;br /&gt;
&lt;a href="http://stackoverflow.com/questions/4214365/jsf-tree-in-a-dropdown"&gt;JSF Tree in a dropdown&lt;/a&gt; (see accepted answer).&lt;br /&gt;
&lt;br /&gt;
The resulting html is select node with options grouped in optgroup nodes.&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/dontpanic82?a=5ehWD0pXcaQ:8XLW_uY1bbk:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/dontpanic82?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/dontpanic82?a=5ehWD0pXcaQ:8XLW_uY1bbk:4cEx4HpKnUU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/dontpanic82?i=5ehWD0pXcaQ:8XLW_uY1bbk:4cEx4HpKnUU" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/dontpanic82?a=5ehWD0pXcaQ:8XLW_uY1bbk:qj6IDK7rITs"&gt;&lt;img src="http://feeds.feedburner.com/~ff/dontpanic82?d=qj6IDK7rITs" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/dontpanic82?a=5ehWD0pXcaQ:8XLW_uY1bbk:V_sGLiPBpWU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/dontpanic82?i=5ehWD0pXcaQ:8XLW_uY1bbk:V_sGLiPBpWU" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/dontpanic82?a=5ehWD0pXcaQ:8XLW_uY1bbk:F7zBnMyn0Lo"&gt;&lt;img src="http://feeds.feedburner.com/~ff/dontpanic82?i=5ehWD0pXcaQ:8XLW_uY1bbk:F7zBnMyn0Lo" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/dontpanic82/~4/5ehWD0pXcaQ" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://dontpanic82.blogspot.com/feeds/5354995939561604558/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://www.blogger.com/comment.g?blogID=3745504982837212509&amp;postID=5354995939561604558" title="2 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/3745504982837212509/posts/default/5354995939561604558?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/3745504982837212509/posts/default/5354995939561604558?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/dontpanic82/~3/5ehWD0pXcaQ/xpages-grouping-data-in-comboboxes.html" title="XPages - Grouping data in comboboxes" /><author><name>Tommy Valand</name><uri>https://plus.google.com/109083546111451101200</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="32" height="32" src="//lh4.googleusercontent.com/-YKfhIJ6AceM/AAAAAAAAAAI/AAAAAAAAAYc/WNJqbZp2RSM/s512-c/photo.jpg" /></author><thr:total>2</thr:total><feedburner:origLink>http://dontpanic82.blogspot.com/2012/07/xpages-grouping-data-in-comboboxes.html</feedburner:origLink></entry><entry gd:etag="W/&quot;A0MFQnc4cSp7ImA9WhJTFk0.&quot;"><id>tag:blogger.com,1999:blog-3745504982837212509.post-5495798709195752436</id><published>2012-06-25T08:02:00.000+01:00</published><updated>2012-06-25T08:30:13.939+01:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2012-06-25T08:30:13.939+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>Multi value fields and Beans in XPages</title><content type="html">I had an issue with multi value fields bound to bean fields in an XPages I worked on. &lt;br /&gt;
&lt;br /&gt;
I got this error message on refresh:&lt;br /&gt;
&lt;pre&gt;&lt;code&gt;java.lang.IllegalArgumentException: argument type mismatch&lt;/code&gt;&lt;/pre&gt;
&lt;br /&gt;
The issue turned out to be a somewhat inconsistent underlying API. When the field is empty, or has single value, it tries to set a string. When there are multiple values, it tries to set a list.
&lt;br /&gt;
&lt;br /&gt;
To work around the issue, have the getter return an Object, and the setter accept an object.&lt;br /&gt;
E.g.&lt;br /&gt;
&lt;pre&gt;&lt;code&gt;
public Object getInputMulti() {
 return this.inputMulti;
}
...
@SuppressWarnings( "unchecked" )
public void setInputMulti( Object inputMulti ) {
 if( inputMulti == null ){
  this.inputMulti = null;
 }
 
 if( inputMulti instanceof String ) {
  Vector&lt;string&gt; inputNameList = new Vector&lt;string&gt;();
  inputNameList.add( (String) inputMulti );
  this.inputMulti = inputNameList;  
 }
 if( inputMulti instanceof List ) {
  this.inputMulti = (Vector&lt;string&gt;) inputMulti;
 }
}&lt;/string&gt;&lt;/string&gt;&lt;/string&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;br /&gt;
You can have the translation for the setter be done in a utility method.
E.g.&lt;br /&gt;
&lt;pre&gt;&lt;code&gt;@SuppressWarnings("unchecked")
public static Vector translateToVector( Object object ){
 if( object instanceof String ){
  Vector list = new Vector();
  list.add( object );
  return list;
 }
 
 if( object instanceof List ){
  return (Vector)object;
 }
 
 return null;
}&lt;/code&gt;&lt;/pre&gt;
&lt;br /&gt;
Then, for the setter:&lt;br /&gt;
&lt;pre&gt;&lt;code&gt;
@SuppressWarnings( "unchecked" )
public void setInputMulti( Object inputMulti ) {
  this.inputMulti = UtilityClass.translateToVector( inputMulti );
}&lt;/code&gt;&lt;/pre&gt;
&lt;br /&gt;
Example of multi value fields: Checkbox group, multi value fields (fields with multipleSeparator), list boxes.&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/dontpanic82?a=IGTETIWoy6w:DY82t-bo74A:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/dontpanic82?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/dontpanic82?a=IGTETIWoy6w:DY82t-bo74A:4cEx4HpKnUU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/dontpanic82?i=IGTETIWoy6w:DY82t-bo74A:4cEx4HpKnUU" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/dontpanic82?a=IGTETIWoy6w:DY82t-bo74A:qj6IDK7rITs"&gt;&lt;img src="http://feeds.feedburner.com/~ff/dontpanic82?d=qj6IDK7rITs" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/dontpanic82?a=IGTETIWoy6w:DY82t-bo74A:V_sGLiPBpWU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/dontpanic82?i=IGTETIWoy6w:DY82t-bo74A:V_sGLiPBpWU" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/dontpanic82?a=IGTETIWoy6w:DY82t-bo74A:F7zBnMyn0Lo"&gt;&lt;img src="http://feeds.feedburner.com/~ff/dontpanic82?i=IGTETIWoy6w:DY82t-bo74A:F7zBnMyn0Lo" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/dontpanic82/~4/IGTETIWoy6w" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://dontpanic82.blogspot.com/feeds/5495798709195752436/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://www.blogger.com/comment.g?blogID=3745504982837212509&amp;postID=5495798709195752436" title="2 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/3745504982837212509/posts/default/5495798709195752436?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/3745504982837212509/posts/default/5495798709195752436?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/dontpanic82/~3/IGTETIWoy6w/multi-value-fields-and-beans-in-xpages.html" title="Multi value fields and Beans in XPages" /><author><name>Tommy Valand</name><uri>https://plus.google.com/109083546111451101200</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="32" height="32" src="//lh4.googleusercontent.com/-YKfhIJ6AceM/AAAAAAAAAAI/AAAAAAAAAYc/WNJqbZp2RSM/s512-c/photo.jpg" /></author><thr:total>2</thr:total><feedburner:origLink>http://dontpanic82.blogspot.com/2012/06/multi-value-fields-and-beans-in-xpages.html</feedburner:origLink></entry><entry gd:etag="W/&quot;A0QMSXoyfip7ImA9WhJTE0o.&quot;"><id>tag:blogger.com,1999:blog-3745504982837212509.post-629834549934068016</id><published>2012-06-22T16:36:00.002+01:00</published><updated>2012-06-22T16:36:28.496+01:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2012-06-22T16:36:28.496+01:00</app:edited><title>Update for Enhanced Messages Control - Show "system" messages</title><content type="html">&lt;p&gt;In response to &lt;a href="http://www-10.lotus.com/ldd/xpagesforum.nsf/topicThread.xsp?action=openDocument&amp;amp;documentId=3CD3F04270CA2F5585257A25004B90E4"&gt;this question&lt;/a&gt; on the XPages Forums, I've updated the source code for my &lt;a href="http://dontpanic82.blogspot.no/2011/07/custom-control-for-enhanced-validation.html"&gt;Enhanced Messages Control&lt;/a&gt;, so that it also shows messages not bound to controls.&lt;/p&gt;
&lt;p&gt;The "system" messages are show above the messages from components.&lt;/p&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/dontpanic82?a=-c4lw-fvqF0:LCu-n3f0YNM:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/dontpanic82?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/dontpanic82?a=-c4lw-fvqF0:LCu-n3f0YNM:4cEx4HpKnUU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/dontpanic82?i=-c4lw-fvqF0:LCu-n3f0YNM:4cEx4HpKnUU" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/dontpanic82?a=-c4lw-fvqF0:LCu-n3f0YNM:qj6IDK7rITs"&gt;&lt;img src="http://feeds.feedburner.com/~ff/dontpanic82?d=qj6IDK7rITs" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/dontpanic82?a=-c4lw-fvqF0:LCu-n3f0YNM:V_sGLiPBpWU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/dontpanic82?i=-c4lw-fvqF0:LCu-n3f0YNM:V_sGLiPBpWU" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/dontpanic82?a=-c4lw-fvqF0:LCu-n3f0YNM:F7zBnMyn0Lo"&gt;&lt;img src="http://feeds.feedburner.com/~ff/dontpanic82?i=-c4lw-fvqF0:LCu-n3f0YNM:F7zBnMyn0Lo" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/dontpanic82/~4/-c4lw-fvqF0" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://dontpanic82.blogspot.com/feeds/629834549934068016/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://www.blogger.com/comment.g?blogID=3745504982837212509&amp;postID=629834549934068016" title="2 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/3745504982837212509/posts/default/629834549934068016?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/3745504982837212509/posts/default/629834549934068016?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/dontpanic82/~3/-c4lw-fvqF0/update-for-enhanced-messages-control.html" title="Update for Enhanced Messages Control - Show &quot;system&quot; messages" /><author><name>Tommy Valand</name><uri>https://plus.google.com/109083546111451101200</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="32" height="32" src="//lh4.googleusercontent.com/-YKfhIJ6AceM/AAAAAAAAAAI/AAAAAAAAAYc/WNJqbZp2RSM/s512-c/photo.jpg" /></author><thr:total>2</thr:total><feedburner:origLink>http://dontpanic82.blogspot.com/2012/06/update-for-enhanced-messages-control.html</feedburner:origLink></entry><entry gd:etag="W/&quot;CEQHRXc7fip7ImA9WhVaF0s.&quot;"><id>tag:blogger.com,1999:blog-3745504982837212509.post-2265246798842155652</id><published>2012-06-15T13:12:00.000+01:00</published><updated>2012-06-15T13:12:14.906+01:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2012-06-15T13:12:14.906+01:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="java" /><category scheme="http://www.blogger.com/atom/ns#" term="beans" /><category scheme="http://www.blogger.com/atom/ns#" term="xpages" /><title>Recommended tutorials for doing asynchronous processing in beans</title><content type="html">&lt;a href="http://technology.amis.nl/2009/02/19/asynchronous-processing-in-java-applications-leveraging-those-multi-cores/"&gt;Asynchronous processing in Java applications – leveraging those multi-cores&lt;/a&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;a href="http://technology.amis.nl/2009/02/23/using-asynchronous-mechanisms-in-java-and-javascript-for-improving-the-user-experience/"&gt;Using asynchronous mechanisms in Java and JavaScript for improving the user experience&lt;/a&gt;&lt;br /&gt;
&lt;br /&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/dontpanic82?a=gdkU2CbAE5k:sKcY5WRR2FY:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/dontpanic82?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/dontpanic82?a=gdkU2CbAE5k:sKcY5WRR2FY:4cEx4HpKnUU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/dontpanic82?i=gdkU2CbAE5k:sKcY5WRR2FY:4cEx4HpKnUU" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/dontpanic82?a=gdkU2CbAE5k:sKcY5WRR2FY:qj6IDK7rITs"&gt;&lt;img src="http://feeds.feedburner.com/~ff/dontpanic82?d=qj6IDK7rITs" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/dontpanic82?a=gdkU2CbAE5k:sKcY5WRR2FY:V_sGLiPBpWU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/dontpanic82?i=gdkU2CbAE5k:sKcY5WRR2FY:V_sGLiPBpWU" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/dontpanic82?a=gdkU2CbAE5k:sKcY5WRR2FY:F7zBnMyn0Lo"&gt;&lt;img src="http://feeds.feedburner.com/~ff/dontpanic82?i=gdkU2CbAE5k:sKcY5WRR2FY:F7zBnMyn0Lo" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/dontpanic82/~4/gdkU2CbAE5k" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://dontpanic82.blogspot.com/feeds/2265246798842155652/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://www.blogger.com/comment.g?blogID=3745504982837212509&amp;postID=2265246798842155652" title="0 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/3745504982837212509/posts/default/2265246798842155652?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/3745504982837212509/posts/default/2265246798842155652?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/dontpanic82/~3/gdkU2CbAE5k/recommended-tutorials-for-doing.html" title="Recommended tutorials for doing asynchronous processing in beans" /><author><name>Tommy Valand</name><uri>https://plus.google.com/109083546111451101200</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="32" height="32" src="//lh4.googleusercontent.com/-YKfhIJ6AceM/AAAAAAAAAAI/AAAAAAAAAYc/WNJqbZp2RSM/s512-c/photo.jpg" /></author><thr:total>0</thr:total><feedburner:origLink>http://dontpanic82.blogspot.com/2012/06/recommended-tutorials-for-doing.html</feedburner:origLink></entry><entry gd:etag="W/&quot;C0cGRHs4cCp7ImA9WhVaEUQ.&quot;"><id>tag:blogger.com,1999:blog-3745504982837212509.post-5936711435273049208</id><published>2012-06-08T22:30:00.000+01:00</published><updated>2012-06-08T22:30:25.538+01:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2012-06-08T22:30:25.538+01:00</app:edited><title>Update for Enhanced Messages - Now in page order</title><content type="html">I added a small snippet of code that sorts the messages in the order that the components are in the page.&lt;br /&gt;
&lt;br /&gt;
I only had a simple page to test on, but in theory it should work for large pages with complex structure.&lt;br /&gt;
&lt;br /&gt;
&lt;a href="http://dontpanic82.blogspot.no/2011/07/custom-control-for-enhanced-validation.html"&gt;Original post with source code for custom control&lt;/a&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/dontpanic82?a=b29_j5IiM60:2v6GatsEfxo:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/dontpanic82?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/dontpanic82?a=b29_j5IiM60:2v6GatsEfxo:4cEx4HpKnUU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/dontpanic82?i=b29_j5IiM60:2v6GatsEfxo:4cEx4HpKnUU" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/dontpanic82?a=b29_j5IiM60:2v6GatsEfxo:qj6IDK7rITs"&gt;&lt;img src="http://feeds.feedburner.com/~ff/dontpanic82?d=qj6IDK7rITs" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/dontpanic82?a=b29_j5IiM60:2v6GatsEfxo:V_sGLiPBpWU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/dontpanic82?i=b29_j5IiM60:2v6GatsEfxo:V_sGLiPBpWU" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/dontpanic82?a=b29_j5IiM60:2v6GatsEfxo:F7zBnMyn0Lo"&gt;&lt;img src="http://feeds.feedburner.com/~ff/dontpanic82?i=b29_j5IiM60:2v6GatsEfxo:F7zBnMyn0Lo" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/dontpanic82/~4/b29_j5IiM60" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://dontpanic82.blogspot.com/feeds/5936711435273049208/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://www.blogger.com/comment.g?blogID=3745504982837212509&amp;postID=5936711435273049208" title="0 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/3745504982837212509/posts/default/5936711435273049208?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/3745504982837212509/posts/default/5936711435273049208?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/dontpanic82/~3/b29_j5IiM60/update-for-enhanced-messages-now-in.html" title="Update for Enhanced Messages - Now in page order" /><author><name>Tommy Valand</name><uri>https://plus.google.com/109083546111451101200</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="32" height="32" src="//lh4.googleusercontent.com/-YKfhIJ6AceM/AAAAAAAAAAI/AAAAAAAAAYc/WNJqbZp2RSM/s512-c/photo.jpg" /></author><thr:total>0</thr:total><feedburner:origLink>http://dontpanic82.blogspot.com/2012/06/update-for-enhanced-messages-now-in.html</feedburner:origLink></entry><entry gd:etag="W/&quot;DEAFSHg8eCp7ImA9WhVbFEs.&quot;"><id>tag:blogger.com,1999:blog-3745504982837212509.post-4554769782244149748</id><published>2012-05-31T13:17:00.002+01:00</published><updated>2012-05-31T13:18:39.670+01:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2012-05-31T13:18:39.670+01:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="random tip" /><title>Improving performance in Domino Designer when developing XPages</title><content type="html">&lt;p&gt;If the XPage has a view data source/the view name is a static value, it looks like Domino Designer is constantly polling the view for column info/etc.&lt;/p&gt;

&lt;p&gt;If you are done dragging and dropping columns from the view to the view panel/etc. Go into source mode and compute the viewName.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Before&lt;/strong&gt;
&lt;pre&gt;&lt;code&gt;&amp;lt;xp:dominoView var="view1" viewName="MyView" /&amp;gt;&lt;/code&gt;&lt;/pre&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;After&lt;/strong&gt;
&lt;pre&gt;&lt;code&gt;&amp;lt;xp:dominoView var="view1" viewName="${javascript:return 'MyView'}" /&amp;gt;&lt;/code&gt;&lt;/pre&gt;&lt;/p&gt;

&lt;p&gt;When the view name is computed, Domino Designer can't determine what view it should check -&gt; No more lag.&lt;/p&gt;

&lt;p&gt;I haven't tested this with Document Data source, but you might get a performance boost if you compute the formName as well, as Domino Designer won't have to check the fields for drag/drop.&lt;/p&gt;

&lt;p&gt;Optimally I would wish the Designer team implemented a refresh fields/columns button for the data pane.&lt;/p&gt;

&lt;p&gt;Share and enjoy!&lt;/p&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/dontpanic82?a=mOCxsg3cZgk:LaQg84W2B5A:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/dontpanic82?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/dontpanic82?a=mOCxsg3cZgk:LaQg84W2B5A:4cEx4HpKnUU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/dontpanic82?i=mOCxsg3cZgk:LaQg84W2B5A:4cEx4HpKnUU" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/dontpanic82?a=mOCxsg3cZgk:LaQg84W2B5A:qj6IDK7rITs"&gt;&lt;img src="http://feeds.feedburner.com/~ff/dontpanic82?d=qj6IDK7rITs" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/dontpanic82?a=mOCxsg3cZgk:LaQg84W2B5A:V_sGLiPBpWU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/dontpanic82?i=mOCxsg3cZgk:LaQg84W2B5A:V_sGLiPBpWU" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/dontpanic82?a=mOCxsg3cZgk:LaQg84W2B5A:F7zBnMyn0Lo"&gt;&lt;img src="http://feeds.feedburner.com/~ff/dontpanic82?i=mOCxsg3cZgk:LaQg84W2B5A:F7zBnMyn0Lo" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/dontpanic82/~4/mOCxsg3cZgk" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://dontpanic82.blogspot.com/feeds/4554769782244149748/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://www.blogger.com/comment.g?blogID=3745504982837212509&amp;postID=4554769782244149748" title="6 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/3745504982837212509/posts/default/4554769782244149748?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/3745504982837212509/posts/default/4554769782244149748?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/dontpanic82/~3/mOCxsg3cZgk/improving-performance-in-domino.html" title="Improving performance in Domino Designer when developing XPages" /><author><name>Tommy Valand</name><uri>https://plus.google.com/109083546111451101200</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="32" height="32" src="//lh4.googleusercontent.com/-YKfhIJ6AceM/AAAAAAAAAAI/AAAAAAAAAYc/WNJqbZp2RSM/s512-c/photo.jpg" /></author><thr:total>6</thr:total><feedburner:origLink>http://dontpanic82.blogspot.com/2012/05/improving-performance-in-domino.html</feedburner:origLink></entry><entry gd:etag="W/&quot;DUEESXw4eCp7ImA9WhVbE0w.&quot;"><id>tag:blogger.com,1999:blog-3745504982837212509.post-8963188912566562246</id><published>2012-05-29T19:51:00.001+01:00</published><updated>2012-05-29T19:53:28.230+01:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2012-05-29T19:53:28.230+01:00</app:edited><title>Using Java reflection and Domino form to auto populate beans</title><content type="html">&lt;p&gt;&lt;a href="http://files.dontpanic82.com/DominoDAOReflection.zip"&gt;&amp;gt;&amp;gt; Download DemoApp&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Due to a lot of positive posts about using &lt;a href="http://en.wikipedia.org/wiki/JavaBeans"&gt;beans&lt;/a&gt;/MVC pattern for developing XPages apps, I've started writing more Java and less SSJS.
I really like the performance improvements/stricter structure of code.&lt;/p&gt;

&lt;p&gt;In one of my recent apps, I wrote a Model class for each of the forms in the app. The class has fields for all the form fields. Whilst writing the app, I thought about using Java &lt;a href="http://en.wikipedia.org/wiki/Reflection_(computer_programming)"&gt;reflection&lt;/a&gt;/Domino Form to auto populate the class instance. Java reflection lets you fetch methods from classes using their name (as a String). The Form class contains methods that lets you fetch all the declared field names in the form.&lt;/p&gt;

&lt;p&gt;A couple of advantages to using auto population of fields is less code to maintain (~less bugs), and "auto discovery" of typos in either field names or getters/setters. If you call a field firs_name (typo), and write getters/setters for first_name, using the methodology I use, the code would crash, and you would instantly be aware of some error. If you use some kind of logging, you could look at the stack trace to determine what failed.&lt;/p&gt;

&lt;p&gt;A couple of disadvantages. Using reflection/fetching field information adds a slight performance penalty. I don't notice any slowness, but it's something to be aware of if you're aiming for light speed/serving the entire Republic of China on one server. :)&lt;/p&gt;

&lt;p&gt;In most of my apps, I use underscores to separate "words" in my field names. To make this work with reflection I convert the underscore field names to ProperCase, and prepend get/set.&lt;/p&gt;

&lt;p&gt;
E.g.&lt;br /&gt;
Field: first_name&lt;br /&gt;
ProperCased: FirstName&lt;br /&gt;
Getter: getFirstName&lt;br /&gt;
Setter: setFirstName&lt;br /&gt;
&lt;/p&gt;

&lt;p&gt;In the attached DemoApp, I have a helper class that deals with the most common field types. It has two methods:&lt;br /&gt;
&lt;b&gt;setObjectFieldsFromDocument( String form, Object object, DominoDocument doc )&lt;/b&gt;&lt;br /&gt;
&lt;b&gt;setDocumentFieldsFromObject( String form, Object object, DominoDocument doc )&lt;/b&gt;.&lt;/p&gt;

&lt;p&gt;The first parameter is the name of the form that you want to use as "&lt;a href="http://en.wikipedia.org/wiki/XML_schema"&gt;schema&lt;/a&gt;" for the population of the instance fields. The second parameter is the Java instance. The third parameter is a Document wrapped in a simple helper class.&lt;/p&gt;

&lt;p&gt;The demoapp has a XPage that uses a controller bean (PersonController) to handle interaction with the model (Person). It's bound to view scope. When the XPage is loaded, it checks for a parameter (id). If id is available, the controller uses &lt;b&gt;setObjectFieldsFromDocument&lt;/b&gt; to populate the model. When save is called, the controller uses &lt;b&gt;setDocumentFieldsFromObject&lt;/b&gt; to update the underlying Notes Document with values from the model.&lt;/p&gt;

&lt;p&gt;If this sounds interesting. Download the Demoapp, look at the Person XPage for the data binding, and use Package Explorer to take a look at underlying java code.&lt;/p&gt;

&lt;p&gt;I'll just add the source code for the Person model class, in case some of you fear that everything in Java is complex&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;package com.dontpanic82;

import java.io.Serializable;
import java.util.Date;

public class Person implements Serializable {
 private static final long serialVersionUID = 1L;

 public static final String FORM = "Person";

 private String id;
 private String firstName;
 private String lastName;
 private String email;
 private String homepage;
 private Double age;
 private Date birthdate;

 public Person() {
 }

 public Double getAge() {
  return age;
 }

 public Date getBirthdate() {
  return birthdate;
 }

 public String getEmail() {
  return email;
 }

 public String getFirstName() {
  return firstName;
 }

 public String getHomepage() {
  return homepage;
 }

 public String getId() {
  return id;
 }

 public String getLastName() {
  return lastName;
 }

 public void setAge( Double age ) {
  this.age = age;
 }

 public void setBirthdate( Date birthdate ) {
  this.birthdate = birthdate;
 }

 public void setEmail( String email ) {
  this.email = email;
 }

 public void setFirstName( String firstName ) {
  this.firstName = firstName;
 }
 
 public void setHomepage( String homepage ) {
  this.homepage = homepage;
 }

 public void setId( String id ) {
  this.id = id;
 }

 public void setLastName( String lastName ) {
  this.lastName = lastName;
 }

}
&lt;/code&gt;&lt;/pre&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/dontpanic82?a=P-YGvr9T0G8:_RsX4lcWjh4:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/dontpanic82?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/dontpanic82?a=P-YGvr9T0G8:_RsX4lcWjh4:4cEx4HpKnUU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/dontpanic82?i=P-YGvr9T0G8:_RsX4lcWjh4:4cEx4HpKnUU" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/dontpanic82?a=P-YGvr9T0G8:_RsX4lcWjh4:qj6IDK7rITs"&gt;&lt;img src="http://feeds.feedburner.com/~ff/dontpanic82?d=qj6IDK7rITs" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/dontpanic82?a=P-YGvr9T0G8:_RsX4lcWjh4:V_sGLiPBpWU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/dontpanic82?i=P-YGvr9T0G8:_RsX4lcWjh4:V_sGLiPBpWU" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/dontpanic82?a=P-YGvr9T0G8:_RsX4lcWjh4:F7zBnMyn0Lo"&gt;&lt;img src="http://feeds.feedburner.com/~ff/dontpanic82?i=P-YGvr9T0G8:_RsX4lcWjh4:F7zBnMyn0Lo" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/dontpanic82/~4/P-YGvr9T0G8" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://dontpanic82.blogspot.com/feeds/8963188912566562246/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://www.blogger.com/comment.g?blogID=3745504982837212509&amp;postID=8963188912566562246" title="5 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/3745504982837212509/posts/default/8963188912566562246?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/3745504982837212509/posts/default/8963188912566562246?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/dontpanic82/~3/P-YGvr9T0G8/using-java-reflection-and-domino-form.html" title="Using Java reflection and Domino form to auto populate beans" /><author><name>Tommy Valand</name><uri>https://plus.google.com/109083546111451101200</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="32" height="32" src="//lh4.googleusercontent.com/-YKfhIJ6AceM/AAAAAAAAAAI/AAAAAAAAAYc/WNJqbZp2RSM/s512-c/photo.jpg" /></author><thr:total>5</thr:total><feedburner:origLink>http://dontpanic82.blogspot.com/2012/05/using-java-reflection-and-domino-form.html</feedburner:origLink></entry><entry gd:etag="W/&quot;DUYBQ3c5eyp7ImA9WhVXGEw.&quot;"><id>tag:blogger.com,1999:blog-3745504982837212509.post-6309756532923629364</id><published>2012-04-19T07:27:00.006+01:00</published><updated>2012-04-19T07:32:32.923+01:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2012-04-19T07:32:32.923+01:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="random tip" /><title>XPages Toolbox - Really nice profiling tool</title><content type="html">If you feel that your XPage application is too slow, &lt;a href="http://www.openntf.org/internal/home.nsf/project.xsp?action=openDocument&amp;name=XPages%20Toolbox"&gt;XPages Toolbox&lt;/a&gt; can help you to find the biggest bottlenecks in your code.&lt;br /&gt;&lt;br /&gt;If you haven't tried it, I highly recommend that you give it a spin (it's free). If you like it, give it a good rating. &lt;br /&gt;&lt;br /&gt;+1 to Philippe Riand for sharing it with the community :)&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/dontpanic82?a=tYqNVrLd758:tLYOAGJDw4Y:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/dontpanic82?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/dontpanic82?a=tYqNVrLd758:tLYOAGJDw4Y:4cEx4HpKnUU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/dontpanic82?i=tYqNVrLd758:tLYOAGJDw4Y:4cEx4HpKnUU" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/dontpanic82?a=tYqNVrLd758:tLYOAGJDw4Y:qj6IDK7rITs"&gt;&lt;img src="http://feeds.feedburner.com/~ff/dontpanic82?d=qj6IDK7rITs" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/dontpanic82?a=tYqNVrLd758:tLYOAGJDw4Y:V_sGLiPBpWU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/dontpanic82?i=tYqNVrLd758:tLYOAGJDw4Y:V_sGLiPBpWU" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/dontpanic82?a=tYqNVrLd758:tLYOAGJDw4Y:F7zBnMyn0Lo"&gt;&lt;img src="http://feeds.feedburner.com/~ff/dontpanic82?i=tYqNVrLd758:tLYOAGJDw4Y:F7zBnMyn0Lo" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/dontpanic82/~4/tYqNVrLd758" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://dontpanic82.blogspot.com/feeds/6309756532923629364/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://www.blogger.com/comment.g?blogID=3745504982837212509&amp;postID=6309756532923629364" title="0 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/3745504982837212509/posts/default/6309756532923629364?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/3745504982837212509/posts/default/6309756532923629364?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/dontpanic82/~3/tYqNVrLd758/xpages-toolbox-really-nice-profiling.html" title="XPages Toolbox - Really nice profiling tool" /><author><name>Tommy Valand</name><uri>https://plus.google.com/109083546111451101200</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="32" height="32" src="//lh4.googleusercontent.com/-YKfhIJ6AceM/AAAAAAAAAAI/AAAAAAAAAYc/WNJqbZp2RSM/s512-c/photo.jpg" /></author><thr:total>0</thr:total><feedburner:origLink>http://dontpanic82.blogspot.com/2012/04/xpages-toolbox-really-nice-profiling.html</feedburner:origLink></entry><entry gd:etag="W/&quot;D0cASXs6cCp7ImA9WhVSGEk.&quot;"><id>tag:blogger.com,1999:blog-3745504982837212509.post-1706044778617122311</id><published>2012-03-15T21:22:00.015+01:00</published><updated>2012-03-15T21:57:28.518+01:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2012-03-15T21:57:28.518+01:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="Lotus Notes" /><category scheme="http://www.blogger.com/atom/ns#" term="random tip" /><title>Showing horizontal notes data as vertical in view</title><content type="html">Today at work, I needed to transfer some data from a Notes application to SQL. The documents in question were horizontal. &lt;br /&gt;&lt;br /&gt;An example of what I mean:&lt;br /&gt;An order form in Notes with five order lines. For each line, there may be five fields that contains information about the order. Making it a total of 25 fields for five order lines.&lt;br /&gt;&lt;img src="http://2.bp.blogspot.com/-EICC_-rsKD4/T2JQ0Qw0gCI/AAAAAAAAAWo/8LpEssTWNCs/s1600/ScreenShot001.png" /&gt;&lt;br /&gt;&lt;br /&gt;Traditionally, if you want to show this data in a regular notes view, you have to have a column per field.&lt;br /&gt;&lt;a href="http://1.bp.blogspot.com/-0czRkbFMG8k/T2JQ_ZlvgwI/AAAAAAAAAW0/0Ie9x7Bnmfs/s1600/ScreenShot002.png"&gt;&lt;img style="cursor:pointer; cursor:hand;width: 400px; height: 40px;" src="http://1.bp.blogspot.com/-0czRkbFMG8k/T2JQ_ZlvgwI/AAAAAAAAAW0/0Ie9x7Bnmfs/s400/ScreenShot002.png" border="0" alt=""id="BLOGGER_PHOTO_ID_5720223526845121282" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;Thanks to the way the index is organized in a Notes view, you can show this data vertically using &lt;strong&gt;Show multiple values as separate entities&lt;/strong&gt;.&lt;br /&gt;&lt;img src="http://2.bp.blogspot.com/-Vh5VibInka0/T2JSEzyKY6I/AAAAAAAAAXM/XGnFnmkIwQY/s1600/ScreenShot004.png" /&gt;&lt;br /&gt;&lt;br /&gt;A summary of the technique:&lt;br /&gt;&lt;ul&gt;&lt;li&gt;In each column, create a list of the field values that you want to show&lt;/li&gt;&lt;li&gt;Each column list has to have equal amount of values&lt;/li&gt;&lt;li&gt;Each column has to have Show multiple.. property enabled&lt;/li&gt;&lt;li&gt;Only the first column can be sorted (it can be categorized), or you end up with a lot of rows.&lt;br /&gt;This is probably due to how the index is organized/matching of multiple values&lt;/li&gt;&lt;/ul&gt;&lt;br /&gt;Here's the demoapp I took the screenshots from:&lt;br /&gt;&lt;a href="http://files.dontpanic82.com/SlicingDocumentsByMultipleFields.zip"&gt;&gt;&gt; Download&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;Take a look at the Vertical view to see the technique I used.&lt;br /&gt;&lt;br /&gt;Thanks to this technique, I can simply pull the data from a view using view entries/column values/send row by row to a stored procedure in SQL. The alternative would be to write code for each field.&lt;br /&gt;&lt;br /&gt;Share and enjoy! :)&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/dontpanic82?a=WgXdYBvG29U:sqP2-hoZoMI:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/dontpanic82?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/dontpanic82?a=WgXdYBvG29U:sqP2-hoZoMI:4cEx4HpKnUU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/dontpanic82?i=WgXdYBvG29U:sqP2-hoZoMI:4cEx4HpKnUU" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/dontpanic82?a=WgXdYBvG29U:sqP2-hoZoMI:qj6IDK7rITs"&gt;&lt;img src="http://feeds.feedburner.com/~ff/dontpanic82?d=qj6IDK7rITs" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/dontpanic82?a=WgXdYBvG29U:sqP2-hoZoMI:V_sGLiPBpWU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/dontpanic82?i=WgXdYBvG29U:sqP2-hoZoMI:V_sGLiPBpWU" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/dontpanic82?a=WgXdYBvG29U:sqP2-hoZoMI:F7zBnMyn0Lo"&gt;&lt;img src="http://feeds.feedburner.com/~ff/dontpanic82?i=WgXdYBvG29U:sqP2-hoZoMI:F7zBnMyn0Lo" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/dontpanic82/~4/WgXdYBvG29U" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://dontpanic82.blogspot.com/feeds/1706044778617122311/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://www.blogger.com/comment.g?blogID=3745504982837212509&amp;postID=1706044778617122311" title="2 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/3745504982837212509/posts/default/1706044778617122311?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/3745504982837212509/posts/default/1706044778617122311?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/dontpanic82/~3/WgXdYBvG29U/showing-horizontal-notes-data-as.html" title="Showing horizontal notes data as vertical in view" /><author><name>Tommy Valand</name><uri>https://plus.google.com/109083546111451101200</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="32" height="32" src="//lh4.googleusercontent.com/-YKfhIJ6AceM/AAAAAAAAAAI/AAAAAAAAAYc/WNJqbZp2RSM/s512-c/photo.jpg" /></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="http://2.bp.blogspot.com/-EICC_-rsKD4/T2JQ0Qw0gCI/AAAAAAAAAWo/8LpEssTWNCs/s72-c/ScreenShot001.png" height="72" width="72" /><thr:total>2</thr:total><feedburner:origLink>http://dontpanic82.blogspot.com/2012/03/showing-horizontal-notes-data-as.html</feedburner:origLink></entry><entry gd:etag="W/&quot;A0ECSX49cCp7ImA9WhVSEk0.&quot;"><id>tag:blogger.com,1999:blog-3745504982837212509.post-5789780611642685297</id><published>2012-03-08T13:01:00.005+01:00</published><updated>2012-03-08T13:27:48.068+01:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2012-03-08T13:27:48.068+01:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="xpages" /><category scheme="http://www.blogger.com/atom/ns#" term="patch" /><title>Patch for bug in XSP.partialRefreshGet/-Post in 8.5.3</title><content type="html">Someone made a really stupid mistake in the code for XSP.partialRefreshGet/-Post in 8.5.3..&lt;br /&gt;&lt;br /&gt;I won't go into specifics of the code as I'm uncertain if it's breaking some license. Let's just say that if they moved a line of code four or five lines upwards, there wouldn't be any bug.&lt;br /&gt;&lt;br /&gt;I wrote a simple patch for the bug. Put it in a CSJS library, and your code will work like it did on 8.5.2 (unless I made a stupid mistake).&lt;br /&gt;&lt;br /&gt;&lt;pre&gt;&lt;code&gt;/**&lt;br /&gt; * Fix for bug with partialRefreshGet/-Post in 8.5.3&lt;br /&gt; */&lt;br /&gt;(function(){&lt;br /&gt; var oldPartialRefreshGet = XSP.partialRefreshGet;&lt;br /&gt; XSP.partialRefreshGet = function( targetId, options ){&lt;br /&gt;  // Convert to array&lt;br /&gt;  var argsArray = Array.prototype.slice.apply( arguments );&lt;br /&gt;  &lt;br /&gt;  if( argsArray.length &gt; 1 ){ argsArray[1] = argsArray[1] || {}; }  &lt;br /&gt;  if( argsArray.length === 1 ){ argsArray.push( {} ); }&lt;br /&gt;  &lt;br /&gt;  oldPartialRefreshGet.apply( XSP, argsArray );&lt;br /&gt; };&lt;br /&gt; &lt;br /&gt; var oldPartialRefreshPost = XSP.partialRefreshPost;&lt;br /&gt; XSP.partialRefreshPost = function( targetId, options ){&lt;br /&gt;  // Convert to array&lt;br /&gt;  var argsArray = Array.prototype.slice.apply( arguments );&lt;br /&gt;  &lt;br /&gt;  if( argsArray.length &gt; 1 ){ argsArray[1] = argsArray[1] || {}; }  &lt;br /&gt;  if( argsArray.length === 1 ){ argsArray.push( {} ); }&lt;br /&gt;  &lt;br /&gt;  oldPartialRefreshPost.apply( XSP, argsArray );&lt;br /&gt; };&lt;br /&gt;})();&lt;br /&gt;&lt;/code&gt;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;This code should be forwards compatible with future API updates, as it doesn't assume number of arguments in function.&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/dontpanic82?a=ZNTr7whgUH4:Um-2Cr0CsRs:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/dontpanic82?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/dontpanic82?a=ZNTr7whgUH4:Um-2Cr0CsRs:4cEx4HpKnUU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/dontpanic82?i=ZNTr7whgUH4:Um-2Cr0CsRs:4cEx4HpKnUU" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/dontpanic82?a=ZNTr7whgUH4:Um-2Cr0CsRs:qj6IDK7rITs"&gt;&lt;img src="http://feeds.feedburner.com/~ff/dontpanic82?d=qj6IDK7rITs" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/dontpanic82?a=ZNTr7whgUH4:Um-2Cr0CsRs:V_sGLiPBpWU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/dontpanic82?i=ZNTr7whgUH4:Um-2Cr0CsRs:V_sGLiPBpWU" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/dontpanic82?a=ZNTr7whgUH4:Um-2Cr0CsRs:F7zBnMyn0Lo"&gt;&lt;img src="http://feeds.feedburner.com/~ff/dontpanic82?i=ZNTr7whgUH4:Um-2Cr0CsRs:F7zBnMyn0Lo" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/dontpanic82/~4/ZNTr7whgUH4" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://dontpanic82.blogspot.com/feeds/5789780611642685297/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://www.blogger.com/comment.g?blogID=3745504982837212509&amp;postID=5789780611642685297" title="12 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/3745504982837212509/posts/default/5789780611642685297?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/3745504982837212509/posts/default/5789780611642685297?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/dontpanic82/~3/ZNTr7whgUH4/patch-for-bug-in-xsppartialrefreshget.html" title="Patch for bug in XSP.partialRefreshGet/-Post in 8.5.3" /><author><name>Tommy Valand</name><uri>https://plus.google.com/109083546111451101200</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="32" height="32" src="//lh4.googleusercontent.com/-YKfhIJ6AceM/AAAAAAAAAAI/AAAAAAAAAYc/WNJqbZp2RSM/s512-c/photo.jpg" /></author><thr:total>12</thr:total><feedburner:origLink>http://dontpanic82.blogspot.com/2012/03/patch-for-bug-in-xsppartialrefreshget.html</feedburner:origLink></entry><entry gd:etag="W/&quot;DEENSHwyfip7ImA9WhRUFkk.&quot;"><id>tag:blogger.com,1999:blog-3745504982837212509.post-6168143863933266430</id><published>2012-01-26T09:55:00.005+01:00</published><updated>2012-01-27T07:44:59.296+01:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2012-01-27T07:44:59.296+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>Runtime optimized JavaScript and CSS - workaround for multiple stylesheets</title><content type="html">&lt;strong&gt;Update:&lt;/strong&gt; This workaround is only needed if you use "folders" in the image resource name. &lt;br /&gt;E.g. &lt;em&gt;backgrounds\home.png&lt;/em&gt;.&lt;br /&gt;&lt;br /&gt;If you have multiple local stylesheets on a page, the CSS files are combined into a single file.&lt;br /&gt;&lt;br /&gt;This changes the url to the stylesheet (adds xsp/.ibmmodres/.css after the path to the db).&lt;br /&gt;&lt;br /&gt;If you have an image reference like &lt;strong&gt;url(image.png)&lt;/strong&gt;, the image can no longer be loaded, as the url is relative to the path of the stylesheet.&lt;br /&gt;&lt;br /&gt;To work around this issue, add ../../../ to the image reference.&lt;br /&gt;&lt;br /&gt;E.g.&lt;br /&gt;url(../../../image.png)&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/dontpanic82?a=0AbpMH-CjfY:cLZxRJmu5T0:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/dontpanic82?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/dontpanic82?a=0AbpMH-CjfY:cLZxRJmu5T0:4cEx4HpKnUU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/dontpanic82?i=0AbpMH-CjfY:cLZxRJmu5T0:4cEx4HpKnUU" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/dontpanic82?a=0AbpMH-CjfY:cLZxRJmu5T0:qj6IDK7rITs"&gt;&lt;img src="http://feeds.feedburner.com/~ff/dontpanic82?d=qj6IDK7rITs" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/dontpanic82?a=0AbpMH-CjfY:cLZxRJmu5T0:V_sGLiPBpWU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/dontpanic82?i=0AbpMH-CjfY:cLZxRJmu5T0:V_sGLiPBpWU" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/dontpanic82?a=0AbpMH-CjfY:cLZxRJmu5T0:F7zBnMyn0Lo"&gt;&lt;img src="http://feeds.feedburner.com/~ff/dontpanic82?i=0AbpMH-CjfY:cLZxRJmu5T0:F7zBnMyn0Lo" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/dontpanic82/~4/0AbpMH-CjfY" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://dontpanic82.blogspot.com/feeds/6168143863933266430/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://www.blogger.com/comment.g?blogID=3745504982837212509&amp;postID=6168143863933266430" title="2 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/3745504982837212509/posts/default/6168143863933266430?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/3745504982837212509/posts/default/6168143863933266430?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/dontpanic82/~3/0AbpMH-CjfY/runtime-optimized-javascript-and-css.html" title="Runtime optimized JavaScript and CSS - workaround for multiple stylesheets" /><author><name>Tommy Valand</name><uri>https://plus.google.com/109083546111451101200</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="32" height="32" src="//lh4.googleusercontent.com/-YKfhIJ6AceM/AAAAAAAAAAI/AAAAAAAAAYc/WNJqbZp2RSM/s512-c/photo.jpg" /></author><thr:total>2</thr:total><feedburner:origLink>http://dontpanic82.blogspot.com/2012/01/runtime-optimized-javascript-and-css.html</feedburner:origLink></entry><entry gd:etag="W/&quot;DkIGRnc4cCp7ImA9WhRWF0s.&quot;"><id>tag:blogger.com,1999:blog-3745504982837212509.post-8220644148926927764</id><published>2012-01-05T12:50:00.004+01:00</published><updated>2012-01-05T12:55:27.938+01:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2012-01-05T12:55:27.938+01:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="software" /><category scheme="http://www.blogger.com/atom/ns#" term="random tip" /><title>Useful tool when working with text files (CSV, source code, etc)</title><content type="html">&lt;a href="http://www.wingrep.com/"&gt;WinGrep&lt;/a&gt; is a tool that let's you search one/several folders for parts of strings. It supports searching in zip files, and lets you use Regular Expression (Perl syntax?) for searching strings.&lt;br /&gt;&lt;br /&gt;The result pane shows all the matching lines in the file(s) you are searching.&lt;br /&gt;&lt;br /&gt;&lt;img src="http://2.bp.blogspot.com/-ujLT9RAa5Tg/TwWPalZ8NtI/AAAAAAAAAWM/1nKOwYK_mQw/s1600/mainwindow1%255B1%255D.png" /&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/dontpanic82?a=jasrPGelpLQ:DSor1DyC5Ks:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/dontpanic82?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/dontpanic82?a=jasrPGelpLQ:DSor1DyC5Ks:4cEx4HpKnUU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/dontpanic82?i=jasrPGelpLQ:DSor1DyC5Ks:4cEx4HpKnUU" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/dontpanic82?a=jasrPGelpLQ:DSor1DyC5Ks:qj6IDK7rITs"&gt;&lt;img src="http://feeds.feedburner.com/~ff/dontpanic82?d=qj6IDK7rITs" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/dontpanic82?a=jasrPGelpLQ:DSor1DyC5Ks:V_sGLiPBpWU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/dontpanic82?i=jasrPGelpLQ:DSor1DyC5Ks:V_sGLiPBpWU" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/dontpanic82?a=jasrPGelpLQ:DSor1DyC5Ks:F7zBnMyn0Lo"&gt;&lt;img src="http://feeds.feedburner.com/~ff/dontpanic82?i=jasrPGelpLQ:DSor1DyC5Ks:F7zBnMyn0Lo" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/dontpanic82/~4/jasrPGelpLQ" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://dontpanic82.blogspot.com/feeds/8220644148926927764/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://www.blogger.com/comment.g?blogID=3745504982837212509&amp;postID=8220644148926927764" title="1 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/3745504982837212509/posts/default/8220644148926927764?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/3745504982837212509/posts/default/8220644148926927764?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/dontpanic82/~3/jasrPGelpLQ/useful-tool-when-working-with-text.html" title="Useful tool when working with text files (CSV, source code, etc)" /><author><name>Tommy Valand</name><uri>https://plus.google.com/109083546111451101200</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="32" height="32" src="//lh4.googleusercontent.com/-YKfhIJ6AceM/AAAAAAAAAAI/AAAAAAAAAYc/WNJqbZp2RSM/s512-c/photo.jpg" /></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="http://2.bp.blogspot.com/-ujLT9RAa5Tg/TwWPalZ8NtI/AAAAAAAAAWM/1nKOwYK_mQw/s72-c/mainwindow1%255B1%255D.png" height="72" width="72" /><thr:total>1</thr:total><feedburner:origLink>http://dontpanic82.blogspot.com/2012/01/useful-tool-when-working-with-text.html</feedburner:origLink></entry><entry gd:etag="W/&quot;CUINR3k5fip7ImA9WhRWFUo.&quot;"><id>tag:blogger.com,1999:blog-3745504982837212509.post-3633458797102585778</id><published>2012-01-02T12:43:00.004+01:00</published><updated>2012-01-03T07:53:16.726+01:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2012-01-03T07:53:16.726+01:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="random tip" /><title>Thing to be aware of when using "Generate unique keys.." in view</title><content type="html">I had trouble with a couple of views today. The views had the option &lt;strong&gt;Generate unique keys in index&lt;/strong&gt; checked.&lt;br /&gt;&lt;br /&gt;When the views were replicated to other servers, they weren't built. When trying to open them I got the error message &lt;strong&gt;Entry not found in index&lt;/strong&gt;&lt;br /&gt;&lt;br /&gt;I found &lt;a href="http://www-10.lotus.com/ldd/nd6forum.nsf/55c38d716d632d9b8525689b005ba1c0/bfd760e001c4d13e85257291005c3786?OpenDocument"&gt;the solution&lt;/a&gt; on the Domino forums, add &lt;strong&gt;@IsUnavailable($Conflict)&lt;/strong&gt; to the view selection.&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/dontpanic82?a=NVk2U7Ua5rk:8KktfrIlaFI:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/dontpanic82?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/dontpanic82?a=NVk2U7Ua5rk:8KktfrIlaFI:4cEx4HpKnUU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/dontpanic82?i=NVk2U7Ua5rk:8KktfrIlaFI:4cEx4HpKnUU" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/dontpanic82?a=NVk2U7Ua5rk:8KktfrIlaFI:qj6IDK7rITs"&gt;&lt;img src="http://feeds.feedburner.com/~ff/dontpanic82?d=qj6IDK7rITs" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/dontpanic82?a=NVk2U7Ua5rk:8KktfrIlaFI:V_sGLiPBpWU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/dontpanic82?i=NVk2U7Ua5rk:8KktfrIlaFI:V_sGLiPBpWU" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/dontpanic82?a=NVk2U7Ua5rk:8KktfrIlaFI:F7zBnMyn0Lo"&gt;&lt;img src="http://feeds.feedburner.com/~ff/dontpanic82?i=NVk2U7Ua5rk:8KktfrIlaFI:F7zBnMyn0Lo" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/dontpanic82/~4/NVk2U7Ua5rk" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://dontpanic82.blogspot.com/feeds/3633458797102585778/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://www.blogger.com/comment.g?blogID=3745504982837212509&amp;postID=3633458797102585778" title="1 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/3745504982837212509/posts/default/3633458797102585778?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/3745504982837212509/posts/default/3633458797102585778?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/dontpanic82/~3/NVk2U7Ua5rk/thing-to-be-aware-of-when-using.html" title="Thing to be aware of when using &quot;Generate unique keys..&quot; in view" /><author><name>Tommy Valand</name><uri>https://plus.google.com/109083546111451101200</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="32" height="32" src="//lh4.googleusercontent.com/-YKfhIJ6AceM/AAAAAAAAAAI/AAAAAAAAAYc/WNJqbZp2RSM/s512-c/photo.jpg" /></author><thr:total>1</thr:total><feedburner:origLink>http://dontpanic82.blogspot.com/2012/01/thing-to-be-aware-of-when-using.html</feedburner:origLink></entry><entry gd:etag="W/&quot;DkAGQXkzcCp7ImA9WhRQF0s.&quot;"><id>tag:blogger.com,1999:blog-3745504982837212509.post-4786547813138295246</id><published>2011-12-13T09:16:00.005+01:00</published><updated>2011-12-13T09:25:20.788+01:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2011-12-13T09:25:20.788+01:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="java" /><category scheme="http://www.blogger.com/atom/ns#" term="xpages" /><category scheme="http://www.blogger.com/atom/ns#" term="random tip" /><title>ClassNotFoundException with the new Java design element</title><content type="html">Last week Vince Shuurman blogged about &lt;a href="http://blog.vinceschuurman.com/home/ndt4.nsf/BlogContent.xsp?openDocument&amp;pLink=201112071332"&gt;having to recompile when opening an XPage app in Domino Designer&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;I had the same issue. I was using some Java code in an XPage, and every time I opened the app in designer, I got ClassNotFoundException when opening the XPage. A build of the project fixed the issue.&lt;br /&gt;&lt;br /&gt;My java code was in the new Java design element (new in Domino 8.5.3), so I suspected that it might have something to do with this.&lt;br /&gt;&lt;br /&gt;I moved the code to a "custom" java source folder, and the error went away. Closing/opening the app in Designer did &lt;strong&gt;not&lt;/strong&gt; result in ClassNotFoundException.&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/dontpanic82?a=rWILahWoIVM:DjkuWXH0lyg:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/dontpanic82?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/dontpanic82?a=rWILahWoIVM:DjkuWXH0lyg:4cEx4HpKnUU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/dontpanic82?i=rWILahWoIVM:DjkuWXH0lyg:4cEx4HpKnUU" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/dontpanic82?a=rWILahWoIVM:DjkuWXH0lyg:qj6IDK7rITs"&gt;&lt;img src="http://feeds.feedburner.com/~ff/dontpanic82?d=qj6IDK7rITs" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/dontpanic82?a=rWILahWoIVM:DjkuWXH0lyg:V_sGLiPBpWU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/dontpanic82?i=rWILahWoIVM:DjkuWXH0lyg:V_sGLiPBpWU" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/dontpanic82?a=rWILahWoIVM:DjkuWXH0lyg:F7zBnMyn0Lo"&gt;&lt;img src="http://feeds.feedburner.com/~ff/dontpanic82?i=rWILahWoIVM:DjkuWXH0lyg:F7zBnMyn0Lo" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/dontpanic82/~4/rWILahWoIVM" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://dontpanic82.blogspot.com/feeds/4786547813138295246/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://www.blogger.com/comment.g?blogID=3745504982837212509&amp;postID=4786547813138295246" title="10 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/3745504982837212509/posts/default/4786547813138295246?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/3745504982837212509/posts/default/4786547813138295246?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/dontpanic82/~3/rWILahWoIVM/classnotfoundexception-with-new-java.html" title="ClassNotFoundException with the new Java design element" /><author><name>Tommy Valand</name><uri>https://plus.google.com/109083546111451101200</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="32" height="32" src="//lh4.googleusercontent.com/-YKfhIJ6AceM/AAAAAAAAAAI/AAAAAAAAAYc/WNJqbZp2RSM/s512-c/photo.jpg" /></author><thr:total>10</thr:total><feedburner:origLink>http://dontpanic82.blogspot.com/2011/12/classnotfoundexception-with-new-java.html</feedburner:origLink></entry><entry gd:etag="W/&quot;A0ADRH88fSp7ImA9WhdaEUo.&quot;"><id>tag:blogger.com,1999:blog-3745504982837212509.post-3024729061051015827</id><published>2011-10-21T07:44:00.003+01:00</published><updated>2011-10-21T07:49:35.175+01:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2011-10-21T07:49:35.175+01:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="java" /><category scheme="http://www.blogger.com/atom/ns#" term="domino designer" /><category scheme="http://www.blogger.com/atom/ns#" term="random tip" /><title>Java Debugging in Designer without hacks</title><content type="html">I found this today: &lt;a href="http://www-10.lotus.com/ldd/dominowiki.nsf/dx/How_can_I_enable_Java_debugging_LN853"&gt;How can I enable Java debugging?&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;Not sure if this is new in 8.5.3, but I never heard of it. It makes it a lot easier to debug than the using the &lt;a href="http://www.bobzblog.com/tuxedoguy.nsf/dx/the-2-headed-beast-debugging-domino-java-agents-with-eclipse"&gt;two headed beast&lt;/a&gt; method which seemed like too much trouble.&lt;br /&gt;&lt;br /&gt;The full instructions are in the Designer help. Search for &lt;strong&gt;java debugging&lt;/strong&gt;.&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/dontpanic82?a=SHPBiKkoGiA:nz3doCTbEyg:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/dontpanic82?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/dontpanic82?a=SHPBiKkoGiA:nz3doCTbEyg:4cEx4HpKnUU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/dontpanic82?i=SHPBiKkoGiA:nz3doCTbEyg:4cEx4HpKnUU" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/dontpanic82?a=SHPBiKkoGiA:nz3doCTbEyg:qj6IDK7rITs"&gt;&lt;img src="http://feeds.feedburner.com/~ff/dontpanic82?d=qj6IDK7rITs" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/dontpanic82?a=SHPBiKkoGiA:nz3doCTbEyg:V_sGLiPBpWU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/dontpanic82?i=SHPBiKkoGiA:nz3doCTbEyg:V_sGLiPBpWU" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/dontpanic82?a=SHPBiKkoGiA:nz3doCTbEyg:F7zBnMyn0Lo"&gt;&lt;img src="http://feeds.feedburner.com/~ff/dontpanic82?i=SHPBiKkoGiA:nz3doCTbEyg:F7zBnMyn0Lo" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/dontpanic82/~4/SHPBiKkoGiA" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://dontpanic82.blogspot.com/feeds/3024729061051015827/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://www.blogger.com/comment.g?blogID=3745504982837212509&amp;postID=3024729061051015827" title="2 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/3745504982837212509/posts/default/3024729061051015827?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/3745504982837212509/posts/default/3024729061051015827?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/dontpanic82/~3/SHPBiKkoGiA/java-debugging-in-designer-without.html" title="Java Debugging in Designer without hacks" /><author><name>Tommy Valand</name><uri>https://plus.google.com/109083546111451101200</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="32" height="32" src="//lh4.googleusercontent.com/-YKfhIJ6AceM/AAAAAAAAAAI/AAAAAAAAAYc/WNJqbZp2RSM/s512-c/photo.jpg" /></author><thr:total>2</thr:total><feedburner:origLink>http://dontpanic82.blogspot.com/2011/10/java-debugging-in-designer-without.html</feedburner:origLink></entry><entry gd:etag="W/&quot;Dk8MQ3c9fip7ImA9WhdUEk0.&quot;"><id>tag:blogger.com,1999:blog-3745504982837212509.post-8616731951480516157</id><published>2011-09-28T11:12:00.001+01:00</published><updated>2011-09-28T11:14:42.966+01:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2011-09-28T11:14:42.966+01:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="random tip" /><title>Collecting data for HTTP hang or performance issues on a Lotus Domino server</title><content type="html">We're currently having problems with one of our old Domino servers. The HTTP task randomly hangs.&lt;br /&gt;&lt;br /&gt;In the process of looking for help to track down the reason, I found this document from IBM.&lt;br /&gt;&lt;br /&gt;&lt;a href="https://www-304.ibm.com/support/docview.wss?uid=swg27010969"&gt;Collecting data for HTTP hang or performance issues on a Lotus Domino server&lt;/a&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/dontpanic82?a=qNxZHmqgW4Y:-j6eTpBos18:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/dontpanic82?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/dontpanic82?a=qNxZHmqgW4Y:-j6eTpBos18:4cEx4HpKnUU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/dontpanic82?i=qNxZHmqgW4Y:-j6eTpBos18:4cEx4HpKnUU" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/dontpanic82?a=qNxZHmqgW4Y:-j6eTpBos18:qj6IDK7rITs"&gt;&lt;img src="http://feeds.feedburner.com/~ff/dontpanic82?d=qj6IDK7rITs" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/dontpanic82?a=qNxZHmqgW4Y:-j6eTpBos18:V_sGLiPBpWU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/dontpanic82?i=qNxZHmqgW4Y:-j6eTpBos18:V_sGLiPBpWU" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/dontpanic82?a=qNxZHmqgW4Y:-j6eTpBos18:F7zBnMyn0Lo"&gt;&lt;img src="http://feeds.feedburner.com/~ff/dontpanic82?i=qNxZHmqgW4Y:-j6eTpBos18:F7zBnMyn0Lo" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/dontpanic82/~4/qNxZHmqgW4Y" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://dontpanic82.blogspot.com/feeds/8616731951480516157/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://www.blogger.com/comment.g?blogID=3745504982837212509&amp;postID=8616731951480516157" title="1 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/3745504982837212509/posts/default/8616731951480516157?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/3745504982837212509/posts/default/8616731951480516157?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/dontpanic82/~3/qNxZHmqgW4Y/collecting-data-for-http-hang-or.html" title="Collecting data for HTTP hang or performance issues on a Lotus Domino server" /><author><name>Tommy Valand</name><uri>https://plus.google.com/109083546111451101200</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="32" height="32" src="//lh4.googleusercontent.com/-YKfhIJ6AceM/AAAAAAAAAAI/AAAAAAAAAYc/WNJqbZp2RSM/s512-c/photo.jpg" /></author><thr:total>1</thr:total><feedburner:origLink>http://dontpanic82.blogspot.com/2011/09/collecting-data-for-http-hang-or.html</feedburner:origLink></entry><entry gd:etag="W/&quot;CEQFQXY8fip7ImA9WhdUEUk.&quot;"><id>tag:blogger.com,1999:blog-3745504982837212509.post-2653614737336985137</id><published>2011-09-27T13:06:00.007+01:00</published><updated>2011-09-27T17:51:50.876+01:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2011-09-27T17:51:50.876+01:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="code snippet" /><category scheme="http://www.blogger.com/atom/ns#" term="xpages" /><title>Indicator for all partial refreshes</title><content type="html">Sometimes partial updates take a while. To make users aware of updates happening, I made a small JS object that automatically shows a &lt;a href="http://docs.dojocampus.org/dojox/widget/Standby"&gt;dojox.widget.Standby&lt;/a&gt; over the area being updated. Initially I thought that it would be &lt;strong&gt;too much&lt;/strong&gt;, showing the mask over every refreshed area. So far, I quite like the effect.&lt;br /&gt;&lt;br /&gt;The app isn't in production yet, so I don't know how users will react, but hopefully they will appreciate being made aware of that things are happening.&lt;br /&gt;&lt;br /&gt;To load the object, put this in a JavaScript library (client side)&lt;pre&gt;&lt;code&gt;dojo.addOnLoad(function(){ new StandbyWidget(); });&lt;/code&gt;&lt;/pre&gt;The default background color is bright yellow. To override, simply put a hex string in the "constructor" call.&lt;pre&gt;&lt;code&gt;dojo.addOnLoad(function(){ new StandbyWidget( '#555'); }); // Dark grey&lt;/code&gt;&lt;/pre&gt;To use the code snippet below, you also need the &lt;a href="http://dontpanic82.blogspot.com/2010/01/xpages-hijackingpublishing-partial.html"&gt;partial event hijacker&lt;/a&gt;&lt;br /&gt;&lt;pre&gt;&lt;code&gt;var StandbyWidget = function( backgroundColor ){&lt;br /&gt; dojo.require( 'dojox.widget.Standby' );&lt;br /&gt; this.widget = new dojox.widget.Standby();&lt;br /&gt; this.widget.attr( 'color', backgroundColor || '#ffe' );&lt;br /&gt; &lt;br /&gt; document.body.appendChild( this.widget.domNode );&lt;br /&gt; this.widget.startup();&lt;br /&gt; &lt;br /&gt; dojo.subscribe( 'partialrefresh-init', this, function( method, form, targetId ){&lt;br /&gt;  if( targetId &amp;&amp; targetId !== '@none' ){ this.show( targetId ); }&lt;br /&gt; });&lt;br /&gt; &lt;br /&gt; dojo.subscribe( 'partialrefresh-complete', this, function( method, form, targetId ){&lt;br /&gt;  if( targetId &amp;&amp; targetId !== '@none' ){ this.hide(); }&lt;br /&gt; });&lt;br /&gt; &lt;br /&gt; dojo.subscribe( 'partialrefresh-error', this, function( method, form, targetId ){&lt;br /&gt;  if( targetId &amp;&amp; targetId !== '@none' ){ this.hide(); }&lt;br /&gt; });&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;StandbyWidget.prototype = {&lt;br /&gt; show: function( targetId ){&lt;br /&gt;  this.widget.attr( 'target', targetId );&lt;br /&gt;  this.widget.show();  &lt;br /&gt; },&lt;br /&gt; hide: function(){  &lt;br /&gt;  this.widget.hide();&lt;br /&gt; }&lt;br /&gt;}&lt;/code&gt;&lt;/pre&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/dontpanic82?a=90yEQ7jj5lg:-cMzCMQgBuI:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/dontpanic82?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/dontpanic82?a=90yEQ7jj5lg:-cMzCMQgBuI:4cEx4HpKnUU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/dontpanic82?i=90yEQ7jj5lg:-cMzCMQgBuI:4cEx4HpKnUU" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/dontpanic82?a=90yEQ7jj5lg:-cMzCMQgBuI:qj6IDK7rITs"&gt;&lt;img src="http://feeds.feedburner.com/~ff/dontpanic82?d=qj6IDK7rITs" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/dontpanic82?a=90yEQ7jj5lg:-cMzCMQgBuI:V_sGLiPBpWU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/dontpanic82?i=90yEQ7jj5lg:-cMzCMQgBuI:V_sGLiPBpWU" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/dontpanic82?a=90yEQ7jj5lg:-cMzCMQgBuI:F7zBnMyn0Lo"&gt;&lt;img src="http://feeds.feedburner.com/~ff/dontpanic82?i=90yEQ7jj5lg:-cMzCMQgBuI:F7zBnMyn0Lo" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/dontpanic82/~4/90yEQ7jj5lg" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://dontpanic82.blogspot.com/feeds/2653614737336985137/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://www.blogger.com/comment.g?blogID=3745504982837212509&amp;postID=2653614737336985137" title="0 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/3745504982837212509/posts/default/2653614737336985137?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/3745504982837212509/posts/default/2653614737336985137?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/dontpanic82/~3/90yEQ7jj5lg/indicator-for-partial-refreshes.html" title="Indicator for all partial refreshes" /><author><name>Tommy Valand</name><uri>https://plus.google.com/109083546111451101200</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="32" height="32" src="//lh4.googleusercontent.com/-YKfhIJ6AceM/AAAAAAAAAAI/AAAAAAAAAYc/WNJqbZp2RSM/s512-c/photo.jpg" /></author><thr:total>0</thr:total><feedburner:origLink>http://dontpanic82.blogspot.com/2011/09/indicator-for-partial-refreshes.html</feedburner:origLink></entry><entry gd:etag="W/&quot;CkQMRHw8cCp7ImA9WhdUEEs.&quot;"><id>tag:blogger.com,1999:blog-3745504982837212509.post-78392792509722585</id><published>2011-09-26T18:46:00.014+01:00</published><updated>2011-09-26T19:06:25.278+01:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2011-09-26T19:06:25.278+01:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="xpages" /><category scheme="http://www.blogger.com/atom/ns#" term="themes" /><category scheme="http://www.blogger.com/atom/ns#" term="random tip" /><title>Using themeId for maintainability</title><content type="html">In an application I'm currently working on, there are several categorized views with number-/totals columns. As the number of views/columns increased, I looked for a way to make styling of the columns more maintainable.&lt;br /&gt;&lt;br /&gt;The solution I found was using themeId on the columns and calling a SSJS function in the theme, that generates the style classes.&lt;br /&gt;&lt;br /&gt;I chose &lt;strong&gt;numberColumn&lt;/strong&gt; as the name for the themeId.&lt;br /&gt;&lt;br /&gt;&lt;h4&gt;In theme&lt;/h4&gt;&lt;pre&gt;&lt;code&gt;&amp;lt;control&amp;gt;&lt;br /&gt; &amp;lt;name&amp;gt;numberColumn&amp;lt;/name&amp;gt;&lt;br /&gt; &amp;lt;property&amp;gt;&lt;br /&gt;  &amp;lt;name&amp;gt;styleClass&amp;lt;/name&amp;gt;&lt;br /&gt;  &amp;lt;value&amp;gt;#{javascript:return StyleHelper.getNumberColumnStyleClass( this );}&amp;lt;/value&amp;gt;&lt;br /&gt; &amp;lt;/property&amp;gt;&lt;br /&gt;&amp;lt;/control&amp;gt;&lt;br /&gt;&lt;/code&gt;&lt;/pre&gt;&lt;strong&gt;this&lt;/strong&gt; refers to the &lt;a href="http://public.dhe.ibm.com/software/dw/lotus/Domino-Designer/JavaDocs/XPagesExtAPI/8.5.2/index.html?com/ibm/xsp/component/xp/XspViewColumn.html"&gt;column object&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;h4&gt;SSJS code&lt;/h4&gt;&lt;pre&gt;&lt;code&gt;var StyleHelper = {&lt;br /&gt; // Used to calculate styleClass for a number column&lt;br /&gt; getNumberColumnStyleClass: function( column ){&lt;br /&gt;  try {&lt;br /&gt;   var entry = column.getViewRowData();&lt;br /&gt;   var styleClass = 'numberCell';&lt;br /&gt;   if( entry.isCategory() ){ styleClass += ' categoryCell'; }&lt;br /&gt;   if( entry.isTotal() ){ styleClass += ' totalsCell'; }&lt;br /&gt;   return styleClass;&lt;br /&gt;  } catch( e ){ /* Exception handling */ }&lt;br /&gt; }&lt;br /&gt;}&lt;/code&gt;&lt;/pre&gt;&lt;br /&gt;Regular column cells will get &lt;strong&gt;class="numberCell"&lt;/strong&gt;. &lt;br /&gt;Totals column cells will get &lt;strong&gt;class="numberCell totalsCell"&lt;/strong&gt;.&lt;br /&gt;Category column cells will get &lt;strong&gt;class="numberCell categoryCell"&lt;/strong&gt;.&lt;br /&gt;&lt;br /&gt;All I have to do to add dynamic styling to future columns is to set themeId on the column to &lt;strong&gt;numberCell&lt;/strong&gt;.&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/dontpanic82?a=0nQn_wVyNCs:0llUremEZFw:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/dontpanic82?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/dontpanic82?a=0nQn_wVyNCs:0llUremEZFw:4cEx4HpKnUU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/dontpanic82?i=0nQn_wVyNCs:0llUremEZFw:4cEx4HpKnUU" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/dontpanic82?a=0nQn_wVyNCs:0llUremEZFw:qj6IDK7rITs"&gt;&lt;img src="http://feeds.feedburner.com/~ff/dontpanic82?d=qj6IDK7rITs" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/dontpanic82?a=0nQn_wVyNCs:0llUremEZFw:V_sGLiPBpWU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/dontpanic82?i=0nQn_wVyNCs:0llUremEZFw:V_sGLiPBpWU" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/dontpanic82?a=0nQn_wVyNCs:0llUremEZFw:F7zBnMyn0Lo"&gt;&lt;img src="http://feeds.feedburner.com/~ff/dontpanic82?i=0nQn_wVyNCs:0llUremEZFw:F7zBnMyn0Lo" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/dontpanic82/~4/0nQn_wVyNCs" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://dontpanic82.blogspot.com/feeds/78392792509722585/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://www.blogger.com/comment.g?blogID=3745504982837212509&amp;postID=78392792509722585" title="0 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/3745504982837212509/posts/default/78392792509722585?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/3745504982837212509/posts/default/78392792509722585?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/dontpanic82/~3/0nQn_wVyNCs/using-themeid-for-maintainability.html" title="Using themeId for maintainability" /><author><name>Tommy Valand</name><uri>https://plus.google.com/109083546111451101200</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="32" height="32" src="//lh4.googleusercontent.com/-YKfhIJ6AceM/AAAAAAAAAAI/AAAAAAAAAYc/WNJqbZp2RSM/s512-c/photo.jpg" /></author><thr:total>0</thr:total><feedburner:origLink>http://dontpanic82.blogspot.com/2011/09/using-themeid-for-maintainability.html</feedburner:origLink></entry><entry gd:etag="W/&quot;CEYDSHwyfCp7ImA9WhdXE0s.&quot;"><id>tag:blogger.com,1999:blog-3745504982837212509.post-3447295137889744792</id><published>2011-08-26T11:55:00.007+01:00</published><updated>2011-08-26T13:36:19.294+01:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2011-08-26T13:36:19.294+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: Passing event handler code to custom control</title><content type="html">&lt;strong&gt;Update:&lt;/strong&gt; After a little test, it looks like the onchange event of the combo fires for every refresh. I'll move the code to beforeRenderResponse or something like that instead.
&lt;br /&gt;
&lt;br /&gt;&lt;del&gt;In an application I'm currently working on, I have a combobox that's used in several pages. The values the combobox contains persist over every page, but what happens when the user changes value varies from page to page.
&lt;br /&gt;
&lt;br /&gt;I saw that the combobox has several properties for events under all properties. I tried adding 
&lt;br /&gt;#{compositeData.onchange} to the onchange event, and it works. &lt;strong&gt;One caveat is that it seems to fire three times&lt;/strong&gt;, but I can live with that.
&lt;br /&gt;
&lt;br /&gt;To implement:
&lt;br /&gt;Add custom properties to the custom control for the events you want to have custom event handlers for. In the source code of the field, add attributes for the events you want code to run. E.g. onchange="#{compositeData.onchange}"
&lt;br /&gt;
&lt;br /&gt;In the XPage under custom properties for the custom control, write the SSJS you want to run for your events.
&lt;br /&gt;
&lt;br /&gt;That's about it.
&lt;br /&gt;
&lt;br /&gt;I have only tested this with ComboBoxes, but I'm not surprised if it works for most fields that have event properties.
&lt;br /&gt;
&lt;br /&gt;Tested on server running Domino 8.5.2 FP2&lt;/del&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/dontpanic82?a=yDMQupfwE5g:bW1OSP0ab88:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/dontpanic82?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/dontpanic82?a=yDMQupfwE5g:bW1OSP0ab88:4cEx4HpKnUU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/dontpanic82?i=yDMQupfwE5g:bW1OSP0ab88:4cEx4HpKnUU" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/dontpanic82?a=yDMQupfwE5g:bW1OSP0ab88:qj6IDK7rITs"&gt;&lt;img src="http://feeds.feedburner.com/~ff/dontpanic82?d=qj6IDK7rITs" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/dontpanic82?a=yDMQupfwE5g:bW1OSP0ab88:V_sGLiPBpWU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/dontpanic82?i=yDMQupfwE5g:bW1OSP0ab88:V_sGLiPBpWU" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/dontpanic82?a=yDMQupfwE5g:bW1OSP0ab88:F7zBnMyn0Lo"&gt;&lt;img src="http://feeds.feedburner.com/~ff/dontpanic82?i=yDMQupfwE5g:bW1OSP0ab88:F7zBnMyn0Lo" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/dontpanic82/~4/yDMQupfwE5g" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://dontpanic82.blogspot.com/feeds/3447295137889744792/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://www.blogger.com/comment.g?blogID=3745504982837212509&amp;postID=3447295137889744792" title="3 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/3745504982837212509/posts/default/3447295137889744792?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/3745504982837212509/posts/default/3447295137889744792?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/dontpanic82/~3/yDMQupfwE5g/xpages-passing-event-handler-code-to.html" title="XPages: Passing event handler code to custom control" /><author><name>Tommy Valand</name><uri>https://plus.google.com/109083546111451101200</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="32" height="32" src="//lh4.googleusercontent.com/-YKfhIJ6AceM/AAAAAAAAAAI/AAAAAAAAAYc/WNJqbZp2RSM/s512-c/photo.jpg" /></author><thr:total>3</thr:total><feedburner:origLink>http://dontpanic82.blogspot.com/2011/08/xpages-passing-event-handler-code-to.html</feedburner:origLink></entry></feed>
