<?xml version="1.0" encoding="ISO-8859-1"?>
<rss version="2.0"
 xmlns:dc="http://purl.org/dc/elements/1.1/"
 xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
 xmlns:admin="http://webns.net/mvcb/"
 xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
 xmlns:content="http://purl.org/rss/1.0/modules/content/"
 xmlns:wfw="http://wellformedweb.org/CommentAPI/"
 xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
 xmlns:itunes="http://www.itunes.com/dtds/podcast-1.0.dtd"
>
<channel>
<title>John's Blog</title>
<description>Full Posts from Stories</description>
<lastBuildDate>Mon, 11 Aug 2008 00:00:00 -0400</lastBuildDate>
<link>http://www.jmackey.net/groupwareinc/johnblog/johnblog.nsf</link>
<item><title>Yellow Day tip: how to use Notes computeWithForm with an XPage</title><link>http://www.jmackey.net/groupwareinc/johnblog/johnblog.nsf/d6plinks/GROC-7HBJZ2</link><description><![CDATA[ 

I'm celebrating Yellow Day today here at GroupwareInc. &nbsp;In honor of the celebration I have an XPages tip to share with you.

How to use Notes computeWithForm with an XPage
Here's how you can use your Lotus Notes default field formulas when opening ...]]></description><dc:subject>Domino 8.5 - XPages</dc:subject><dc:creator>groupwareinc</dc:creator><comments>http://www.jmackey.net/groupwareinc/johnblog/johnblog.nsf/d6plinks/GROC-7HBJZ2</comments><guid isPermaLink="true">http://www.jmackey.net/groupwareinc/johnblog/johnblog.nsf/d6plinks/GROC-7HBJZ2</guid><content:encoded><![CDATA[ <img src="http://www.jmackey.net/groupwareinc/johnblog/johnblog.nsf/d6plinks/GROC-7HBJZ2/StoryRichTextMime/M2?OpenElement"  alt="Image:John's Blog - Yellow Day tip: how to use Notes computeWithForm with an XPage" Title="Image:John's Blog - Yellow Day tip: how to use Notes computeWithForm with an XPage" />
<br />
<br /><font size=2 face="sans-serif">I'm celebrating Yellow Day today here at GroupwareInc. &nbsp;In honor of the celebration I have an XPages tip to share with you.</font>
<br />
<br /><font size=2 face="sans-serif"><strong>How to use Notes computeWithForm with an XPage</strong></font>
<br /><font size=2 face="sans-serif">Here's how you can use your Lotus Notes default field formulas when opening up an XPage, or when saving an XPage, or both.</font>
<br />
<br /><font size=2 face="sans-serif">- Select your XPage Properties tab and click on the <strong>All Properties</strong> tab. &nbsp;</font>
<br /><font size=2 face="sans-serif">- Navigate to <strong>data</strong> and expand
<strong>data-&gt;dominoDocument&lsqb;0&rsqb;. </strong></font>
<br /><font size=2 face="sans-serif">- Select when to execute the computeWithForm form logic. &nbsp;Your choices are: <strong>onload, onsave, or both</strong></font>
<br />
<br /><font size=2 face="sans-serif">On the backend, this actually executes the document.computeWithForm() method.</font>
<br />
<br /><font size=2 face="sans-serif">Here is a screen shot:</font>
<br />
<br /><img src="http://www.jmackey.net/groupwareinc/johnblog/johnblog.nsf/d6plinks/GROC-7HBJZ2/StoryRichTextMime/M3?OpenElement"  alt="Image:John's Blog - Yellow Day tip: how to use Notes computeWithForm with an XPage" Title="Image:John's Blog - Yellow Day tip: how to use Notes computeWithForm with an XPage" />
<br />
<br /><font size=2 face="sans-serif">Have a happy Yellow Day!</font>
<br />
<br /><font size=2 face="sans-serif">John</font> ]]></content:encoded><pubDate>Mon, 11 Aug 2008 00:00:00 -0400</pubDate><slash:comments>0</slash:comments><wfw:commentRss>http://www.jmackey.net/groupwareinc/johnblog/johnblog.nsf/CommentsRSS?Open&amp;id=C06DEBBF642E0D858825749F004F54CB</wfw:commentRss><wfw:comment>http://www.jmackey.net/groupwareinc/johnblog/johnblog.nsf/PostComment?RunAgent&amp;id=C06DEBBF642E0D858825749F004F54CB</wfw:comment></item><item><title>XPages: Techniques for using Client-Side Javascript with Server-Side Javascript</title><link>http://www.jmackey.net/groupwareinc/johnblog/johnblog.nsf/d6plinks/GROC-7GLFZG</link><description><![CDATA[ XPages provides techniques that you can utilize between client-side and server-side Javascript. &nbsp;I have a couple of examples below that show how you can stop server-side events from firing from a client script and also how you can retrieve values for use ...]]></description><dc:subject>Domino 8.5 - XPages</dc:subject><dc:creator>groupwareinc</dc:creator><comments>http://www.jmackey.net/groupwareinc/johnblog/johnblog.nsf/d6plinks/GROC-7GLFZG</comments><guid isPermaLink="true">http://www.jmackey.net/groupwareinc/johnblog/johnblog.nsf/d6plinks/GROC-7GLFZG</guid><content:encoded><![CDATA[ <font size=2 face="sans-serif">XPages provides techniques that you can utilize between client-side and server-side Javascript. &nbsp;I have a couple of examples below that show how you can stop server-side events from firing from a client script and also how you can retrieve values for use in client-side script using inline server-side script in your client js.</font>
<br />
<br /><font size=2 face="sans-serif"><strong>Events</strong></font>
<br /><font size=2 face="sans-serif">Each event for a component can have both client-side and server-side Javascript. &nbsp;When the event is fired the client-side script is executed first. &nbsp;You can prevent/allow the server-side script from being executed by returning true or false from your client-side script.</font>
<br />
<br /><font size=2 face="sans-serif">For example, on a &quot;Save&quot; button you want to prompt the user and ask them if they are sure they want to save the document. &nbsp;You can provide a client-side confirm popup on the onclick event. &nbsp;If the user presses &quot;OK&quot; you would return &quot;true&quot; and the server-side script would then proceed to be executed. &nbsp;If the user clicks &quot;Cancel&quot; you would return &quot;false&quot; and the server-side script would be prevented from being executed.</font>
<br />
<br /><font size=2 face="sans-serif">Here's a screen shot of the onclick event showing that there is a server-side simple action to save the document:</font>
<br />
<br /><img src="http://www.jmackey.net/groupwareinc/johnblog/johnblog.nsf/d6plinks/GROC-7GLFZG/StoryRichTextMime/M2?OpenElement"  alt="Image:John's Blog - XPages: Techniques for using Client-Side Javascript with Server-Side Javascript" Title="Image:John's Blog - XPages: Techniques for using Client-Side Javascript with Server-Side Javascript" />
<br />
<br />
<br /><font size=2 face="sans-serif">Here's a screen shot of the same onclick event, this time I clicked on the &quot;Client&quot; tab:</font>
<br />
<br /><img src="http://www.jmackey.net/groupwareinc/johnblog/johnblog.nsf/d6plinks/GROC-7GLFZG/StoryRichTextMime/M3?OpenElement"  alt="Image:John's Blog - XPages: Techniques for using Client-Side Javascript with Server-Side Javascript" Title="Image:John's Blog - XPages: Techniques for using Client-Side Javascript with Server-Side Javascript" />
<br />
<br />
<br /><font size=2 face="sans-serif">Here's the result when the button is clicked in the browser:</font>
<br />
<br /><img src="http://www.jmackey.net/groupwareinc/johnblog/johnblog.nsf/d6plinks/GROC-7GLFZG/StoryRichTextMime/M4?OpenElement"  alt="Image:John's Blog - XPages: Techniques for using Client-Side Javascript with Server-Side Javascript" Title="Image:John's Blog - XPages: Techniques for using Client-Side Javascript with Server-Side Javascript" />
<br />
<br />
<br /><font size=2 face="sans-serif"><strong>Processing server-side script in client-side script</strong></font>
<br /><font size=2 face="sans-serif">You can process server-side script using inline commands in your client-side code. &nbsp;This is a similar technique as using computed text in Domino within a page that contains Javascript. &nbsp;As with Domino, the server-side code is evaluated when the page is loaded.</font>
<br />
<br /><font size=2 face="sans-serif">For example, you want to retrieve values from a Notes document and use that value in client-side script. &nbsp;On the client-side onclick event for the button, you can place the following simple EL expression:</font>
<br /><img src="http://www.jmackey.net/groupwareinc/johnblog/johnblog.nsf/d6plinks/GROC-7GLFZG/StoryRichTextMime/M5?OpenElement"  alt="Image:John's Blog - XPages: Techniques for using Client-Side Javascript with Server-Side Javascript" Title="Image:John's Blog - XPages: Techniques for using Client-Side Javascript with Server-Side Javascript" />
<br />
<br />
<br /><font size=2 face="sans-serif">Here's the result if you click the button in your browser:</font>
<br />
<br /><img src="http://www.jmackey.net/groupwareinc/johnblog/johnblog.nsf/d6plinks/GROC-7GLFZG/StoryRichTextMime/M6?OpenElement"  alt="Image:John's Blog - XPages: Techniques for using Client-Side Javascript with Server-Side Javascript" Title="Image:John's Blog - XPages: Techniques for using Client-Side Javascript with Server-Side Javascript" />
<br />
<br /><font size=2 face="sans-serif">or you can use server-side Javascript to perform the same task as the EL expression:</font>
<br />
<br /><img src="http://www.jmackey.net/groupwareinc/johnblog/johnblog.nsf/d6plinks/GROC-7GLFZG/StoryRichTextMime/M7?OpenElement"  alt="Image:John's Blog - XPages: Techniques for using Client-Side Javascript with Server-Side Javascript" Title="Image:John's Blog - XPages: Techniques for using Client-Side Javascript with Server-Side Javascript" />
<br />
<br />
<br /><font size=2 face="sans-serif">or let's say you have a session variable from another page:</font>
<br />
<br /><img src="http://www.jmackey.net/groupwareinc/johnblog/johnblog.nsf/d6plinks/GROC-7GLFZG/StoryRichTextMime/M8?OpenElement"  alt="Image:John's Blog - XPages: Techniques for using Client-Side Javascript with Server-Side Javascript" Title="Image:John's Blog - XPages: Techniques for using Client-Side Javascript with Server-Side Javascript" />
<br />
<br /><font size=2 face="sans-serif">or...here I am getting the database name using an @Function::</font>
<br />
<br /><img src="http://www.jmackey.net/groupwareinc/johnblog/johnblog.nsf/d6plinks/GROC-7GLFZG/StoryRichTextMime/M9?OpenElement"  alt="Image:John's Blog - XPages: Techniques for using Client-Side Javascript with Server-Side Javascript" Title="Image:John's Blog - XPages: Techniques for using Client-Side Javascript with Server-Side Javascript" />
<br />
<br /><img src="http://www.jmackey.net/groupwareinc/johnblog/johnblog.nsf/d6plinks/GROC-7GLFZG/StoryRichTextMime/M10?OpenElement"  alt="Image:John's Blog - XPages: Techniques for using Client-Side Javascript with Server-Side Javascript" Title="Image:John's Blog - XPages: Techniques for using Client-Side Javascript with Server-Side Javascript" />
<br />
<br /><font size=2 face="sans-serif">As you can see, you can pretty much execute any server-side Javascript to return the values you want. &nbsp;This includes server-side js functions from script libraries if they are set as resources for the page.</font>
<br />
<br /><font size=2 face="sans-serif">Additional resources:</font>
<br /><font size=2 face="sans-serif">Last year there was an article written by Jason English and my good friend Sal Mazzotta for Lotus Component Designer titled </font><a href="http://www.ibm.com/developerworks/lotus/library/lcd-client-side/" target=_blank><font size=2 color=blue face="sans-serif">Client-side JavaScript techniques and demos</font></a><font size=2 face="sans-serif">. &nbsp;Though all of it does not apply to XPages, you can find techniques similar to the above as well as additional techniques that might be useful.</font>
<br />
<br /><font size=2 face="sans-serif">John</font> ]]></content:encoded><pubDate>Wed, 16 Jul 2008 07:55:51 -0400</pubDate><slash:comments>3</slash:comments><wfw:commentRss>http://www.jmackey.net/groupwareinc/johnblog/johnblog.nsf/CommentsRSS?Open&amp;id=D6F8542646894A8285257488004189E1</wfw:commentRss><wfw:comment>http://www.jmackey.net/groupwareinc/johnblog/johnblog.nsf/PostComment?RunAgent&amp;id=D6F8542646894A8285257488004189E1</wfw:comment></item><item><title>XPages Example: Calling Java Methods directly from server side JavaScript - performing an SQL query Part 1</title><link>http://www.jmackey.net/groupwareinc/johnblog/johnblog.nsf/d6plinks/GROC-7G9GT4</link><description><![CDATA[ I have been reading many of the discussions this week concerning JavaScript as the language for XPages. &nbsp;I can understand many of the concerns and questions as to why JavaScript? &nbsp;So, I decided to demonstrate one of the advantages of using ...]]></description><dc:subject>Domino 8.5 - XPages</dc:subject><dc:creator>groupwareinc</dc:creator><comments>http://www.jmackey.net/groupwareinc/johnblog/johnblog.nsf/d6plinks/GROC-7G9GT4</comments><guid isPermaLink="true">http://www.jmackey.net/groupwareinc/johnblog/johnblog.nsf/d6plinks/GROC-7G9GT4</guid><content:encoded><![CDATA[ <font size=2 face="sans-serif">I have been reading many of the discussions this week concerning JavaScript as the language for XPages. &nbsp;I can understand many of the concerns and questions as to why JavaScript? &nbsp;So, I decided to demonstrate one of the advantages of using JavaScript as the server side language for XPages. &nbsp;In the below example I demonstrate how easy it is, and how powerful it is, to call Java methods directly from JavaScript. &nbsp;You can download the example Domino database by clicking here: </font><a href=http://www.jmackey.net/groupwareinc/johnblog/johnblog.nsf/D6plinks/GROC7GAHWT.htm/$FILE/XPagesJSToJava.nsf><font size=2 color=blue face="sans-serif">XPagesJSToJava.nsf</font></a>
<br />
<br /><font size=2 face="sans-serif">JavaScript can call Java methods directly and pass variables to and from those methods. &nbsp;There are some &quot;type&quot; differences between Java and JavaScript that you need to be aware of. &nbsp;I believe the charts on this site outline the variable conversions well:
</font><a href=http://developer.mozilla.org/en/docs/Core_JavaScript_1.5_Guide:LiveConnect_Overview:Data_Type_Conversions:JavaScript_to_Java_Conversions target=_blank><font size=2 color=blue face="sans-serif">Javascript to Java Conversions</font></a><font size=2 face="sans-serif">. &nbsp;In the below example I pass string values directly from JavaScript to and from Java, which is straightforward and without any conversion issues.</font>
<br />
<br /><font size=2 face="sans-serif">Since Domino 8.5 is Eclipse based, you can switch to the Java perspective and add Java code to your project. The nsf database is the project. &nbsp;(If you haven't done this yet, it is interesting to switch perspectives and look around at the structure and the code.) &nbsp;By switching to the Java perspective, you open up your code to the importing or referencing of Java libraries, or the creation of your own classes. &nbsp;</font>
<br />
<br /><font size=2 face="sans-serif">What makes calling Java methods directly so powerful in XPages is that nearly every property in an XPage can be computed, and wherever these's a computation you can use JavaScript for the value or formula. &nbsp;For example, &nbsp;this will allow you to call Java for: populating data sources, labels, view column labels, view data columns, computed text, visibility formulas, any place you see a diamond (which is everywhere)...as well as all server side events. &nbsp;So, wherever you can call JavaScript you can also basically call Java methods!</font>
<br />
<br /><font size=2 face="sans-serif"><strong>Example Overview</strong></font>
<br /><font size=2 face="sans-serif">In this example I am calling a Java method that will return data from a DB2 database. I pass in the query and I receive a concatenated string as the result. &nbsp;If you want to follow the example, and you do not have DB2, you can download DB2 9C for free from here: </font><a href="http://www-306.ibm.com/software/data/db2/express/download.html" target=_blank><font size=2 color=blue face="sans-serif">DB2 Expess-c 9.5</font></a><font size=2 face="sans-serif">. &nbsp;After the install you will see an option to create the Sample database, select this and you will have pre-populated tables to work with.</font>
<br />
<br /><font size=2 face="sans-serif"><em>**Just a note that this is just for demo purposes and performance was not a key consideration. &nbsp;Hopefully access to relational databases will be native in a future release.</em></font>
<br />
<br /><font size=2 face="sans-serif">This is a screen shot of the Employee XPage. &nbsp;The Combo Box Control's values are populated with a JavaScript call to &quot;getDeptNumbers()&quot;. &nbsp;This function calls the Java method &quot;javaMethods.SQLQuery.executeQuery()&quot; which is the <em>Packagename.Class.Method()
</em>of the method we want to call. &nbsp;The last line of the JavaScript function I use an &quot;@Explode&quot; in order to convert the string to an Array for the Combo Box values. &nbsp;There's very minimum amount of code in this example so it will be easy to implement.</font>
<br /><img src="http://www.jmackey.net/groupwareinc/johnblog/johnblog.nsf/d6plinks/GROC-7G9GT4/StoryRichTextMime/M2?OpenElement"  alt="Image:John's Blog - XPages Example: Calling Java Methods directly from server side JavaScript - performing an SQL query Part 1" Title="Image:John's Blog - XPages Example: Calling Java Methods directly from server side JavaScript - performing an SQL query Part 1" />
<br /><font size=2 face="sans-serif"><em>** update 7/9/08 - I changed the location of the SQLQuery.java file in Part 2 of this article and it is different than in the Eclipse screen shot</em></font>
<br />
<br /><font size=2 face="sans-serif">Here is a screen shot of the Employee View where I perform a dynamic SQL lookup on the last column. &nbsp;Nathan Freeman posted an </font><a href="http://www.lotus911.com/nathan/escape.nsf/d6plinks/NTFN-7FRG79" target=_blank><font size=2 color=blue face="sans-serif">example</font></a><font size=2 face="sans-serif"> of performing a @DbLookup on a view column. &nbsp;It's a great example, and a great change in how we as Domino developers can utilize views in XPages. &nbsp;View columns can contain any JavaScript formula in XPages, so they can be dynamic.</font>
<br />
<br /><font size=2 face="sans-serif">As the view is rendering it is dynamically performing SQL lookups for the Department Name by passing the ColumnValue &quot;Depart. No.&quot; to the JavaScript function &quot;getDepartment(deptNo)&quot;. &nbsp;This function makes a call to executeQuery passing in the &quot;where&quot; clause so we only retrieve the single Department Name for each Dept. No. in a row. &nbsp; Now....I Know what you are thinking....performance obviously would be a consideration in really using this technique....but it's really cool example nonetheless!</font>
<br /><img src="http://www.jmackey.net/groupwareinc/johnblog/johnblog.nsf/d6plinks/GROC-7G9GT4/StoryRichTextMime/M3?OpenElement"  alt="Image:John's Blog - XPages Example: Calling Java Methods directly from server side JavaScript - performing an SQL query Part 1" Title="Image:John's Blog - XPages Example: Calling Java Methods directly from server side JavaScript - performing an SQL query Part 1" />
<br />
<br /><font size=2 face="sans-serif"><strong>How to build it</strong></font>
<br />
<br /><font size=2 face="sans-serif">Click here to continue with Part 2:
</font><a href="http://www.jmackey.net/groupwareinc/johnblog/johnblog.nsf/d6plinks/GROC-7GAFVQ"><font size=2 color=blue face="sans-serif">How to build it</font></a><font size=2 face="sans-serif">.....</font>
<br /> ]]></content:encoded><pubDate>Mon, 7 Jul 2008 00:00:00 -0400</pubDate><slash:comments>6</slash:comments><wfw:commentRss>http://www.jmackey.net/groupwareinc/johnblog/johnblog.nsf/CommentsRSS?Open&amp;id=14DDB4518C16D3AD8525747D00454BBB</wfw:commentRss><wfw:comment>http://www.jmackey.net/groupwareinc/johnblog/johnblog.nsf/PostComment?RunAgent&amp;id=14DDB4518C16D3AD8525747D00454BBB</wfw:comment></item><item><title>XPages Example: Calling Java Methods directly from server side JavaScript - performing an SQL query Part 2</title><link>http://www.jmackey.net/groupwareinc/johnblog/johnblog.nsf/d6plinks/GROC-7GAFVQ</link><description><![CDATA[ This is Part 2 of this example. &nbsp;Click here to read Part 1.

How to Build It
I'll go over the steps in detail here. &nbsp;The steps are actually very few. &nbsp;I found that the SQL.jar file is already included in the project, so you do not need to ...]]></description><dc:subject>Domino 8.5 - XPages</dc:subject><dc:creator>groupwareinc</dc:creator><comments>http://www.jmackey.net/groupwareinc/johnblog/johnblog.nsf/d6plinks/GROC-7GAFVQ</comments><guid isPermaLink="true">http://www.jmackey.net/groupwareinc/johnblog/johnblog.nsf/d6plinks/GROC-7GAFVQ</guid><content:encoded><![CDATA[ <font size=2 face="sans-serif">This is Part 2 of this example. &nbsp;Click here to </font><a href="h]]></content:encoded><pubDate>Mon, 7 Jul 2008 00:00:00 -0400</pubDate><slash:comments>0</slash:comments><wfw:commentRss>http://www.jmackey.net/groupwareinc/johnblog/johnblog.nsf/CommentsRSS?Open&amp;id=50C9A0EA7AE121E98525747E0040FE2F</wfw:commentRss><wfw:comment>http://www.jmackey.net/groupwareinc/johnblog/johnblog.nsf/PostComment?RunAgent&amp;id=50C9A0EA7AE121E98525747E0040FE2F</wfw:comment></item><item><title>XPages Example: Building a Custom Control - How to build a Custom Multi-FileUpload Control that you can drop on any XPage, and it stores all attachments in an external repository db.</title><link>http://www.jmackey.net/groupwareinc/johnblog/johnblog.nsf/d6plinks/GROC-7G3GF7</link><description><![CDATA[ Below is an example of how to build a multi file upload Custom Control that uses a central attachment repository db for all the attachments. &nbsp;The application has very little code and utilizes the Repeat control and Panel control to generate an unlimited ...]]></description><dc:subject>Domino 8.5 - XPages</dc:subject><dc:creator>groupwareinc</dc:creator><comments>http://www.jmackey.net/groupwareinc/johnblog/johnblog.nsf/d6plinks/GROC-7G3GF7</comments><guid isPermaLink="true">http://www.jmackey.net/groupwareinc/johnblog/johnblog.nsf/d6plinks/GROC-7G3GF7</guid><content:encoded><![CDATA[ <font size=2 face="sans-serif">Below is an example of how to build a multi file upload Custom Control that uses a central attachment repository db for all the attachments. &nbsp;The application has very little code and utilizes the Repeat control and Panel control to generate an unlimited amount of uploads per XPage. &nbsp;(Actually, I am sure there is a limit but I have not hit it yet.) &nbsp;The step by step instructions are below. &nbsp;You can also download the example database(s) by clicking here: </font><a href=http://www.jmackey.net/groupwareinc/johnblog/johnblog.nsf/D6plinks/GROC7G3HQ8.htm/$FILE/XPagesCustomControl.zip><font size=2 color=blue face="sans-serif">XPageCustomControl.zip</font></a>
<br />
<br /><font size=2 face="sans-serif"><strong>Overview:</strong></font>
<br />
<br /><font size=2 face="sans-serif">XPage Custom Controls allow you to build your own controls for reuse. &nbsp;They show up in the control palette and can be dragged and dropped on any page just like any of the other controls. &nbsp;The concept is similar to a subform in Domino.</font>
<br />
<br /><font size=2 face="sans-serif">I was demoing XPages to a group of colleagues the other day. &nbsp;I was showing an example of the repeat control, which allows you to repeat a group of other controls based on a formula or value. &nbsp;The neat thing about the Repeat control is it can dynamically creates controls at runtime. &nbsp;One of the the guys asked about using the control to generate unlimited file upload controls for storage in central repository database. &nbsp;I thought... wow, that is a great use case for an example (thanks Mark). &nbsp;It was very quick to build too.</font>
<br />
<br /><font size=2 face="sans-serif">Let's start out with a look at the completed custom control:</font>
<br />
<br /><img src="http://www.jmackey.net/groupwareinc/johnblog/johnblog.nsf/d6plinks/GROC-7G3GF7/StoryRichTextMime/M2?OpenElement"  alt="Image:John's Blog - XPages Example: Building a Custom Control - How to build a Custom Multi-FileUpload Control that you can drop on any XPage, and it stores all attachments in an external repository db." Title="Image:John's Blog - XPages Example: Building a Custom Control - How to build a Custom Multi-FileUpload Control that you can drop on any XPage, and it stores all attachments in an external repository db." />
<br />
<br /><font size=2 face="sans-serif">After dropping it on an XPage, here is a screen shot of the control in use. &nbsp;You can see that 3 files have been uploaded already and the user clicked the &quot;Add New Upload&quot; button a 4th time and is &nbsp;presented with a blank upload control plus a description field:</font>
<br />
<br /><img src="http://www.jmackey.net/groupwareinc/johnblog/johnblog.nsf/d6plinks/GROC-7G3GF7/StoryRichTextMime/M3?OpenElement"  alt="Image:John's Blog - XPages Example: Building a Custom Control - How to build a Custom Multi-FileUpload Control that you can drop on any XPage, and it stores all attachments in an external repository db." Title="Image:John's Blog - XPages Example: Building a Custom Control - How to build a Custom Multi-FileUpload Control that you can drop on any XPage, and it stores all attachments in an external repository db." />
<br />
<br /><font size=2 face="sans-serif">The &quot;Add New Upload&quot; button creates a new document in the FileUploadDB database with a reference to the current document's doc ID. The page is then reloaded and the repeat control creates a new blank upload control bound to the new document. A simple JavaScript save() uploads the attachment.</font>
<br />
<br /><font size=2 face="sans-serif">You can drop this control anywhere on your page(s). &nbsp;The only additional item that is needed on your page is a field calculating the document's docUNID (2nd to last screen shot below).</font>
<br />
<br />
<br /><font size=2 face="sans-serif"><strong>Here are the steps to build the control:</strong></font>
<br />
<br /><font size=2 face="sans-serif">In your database, under Database Navigator select &quot;Custom Controls&quot; then click &quot;New Custom Control&quot;<strong>. &nbsp;</strong>Provide a name for the control.</font>
<br />
<br /><font size=2 face="sans-serif">Drag and drop a Button control on the page and for the label enter &quot;Add New Upload&quot;. &nbsp;Select the Event tab and provide the following formula for the onclick() event. &nbsp;This will create a new attachment document in the repository and reload the page:</font>
<br />
<br /><img src="http://www.jmackey.net/groupwareinc/johnblog/johnblog.nsf/d6plinks/GROC-7G3GF7/StoryRichTextMime/M4?OpenElement"  alt="Image:John's Blog - XPages Example: Building a Custom Control - How to build a Custom Multi-FileUpload Control that you can drop on any XPage, and it stores all attachments in an external repository db." Title="Image:John's Blog - XPages Example: Building a Custom Control - How to build a Custom Multi-FileUpload Control that you can drop on any XPage, and it stores all attachments in an external repository db." />
<br /><font size=2 face="sans-serif"><em>*note: for this example the attachment repository is named &quot;FileUploadDB.nsf&quot; in the Domino root directory</em></font>
<br />
<br /><font size=2 face="sans-serif">Next drag a Repeat control to the canvas. &nbsp;Select JavaScript for the Iteration and enter the following for the &nbsp;formula. &nbsp;This formula looks up the associated attachments and generates an array of docIDs based on the document collection:</font>
<br /><img src="http://www.jmackey.net/groupwareinc/johnblog/johnblog.nsf/d6plinks/GROC-7G3GF7/StoryRichTextMime/M5?OpenElement"  alt="Image:John's Blog - XPages Example: Building a Custom Control - How to build a Custom Multi-FileUpload Control that you can drop on any XPage, and it stores all attachments in an external repository db." Title="Image:John's Blog - XPages Example: Building a Custom Control - How to build a Custom Multi-FileUpload Control that you can drop on any XPage, and it stores all attachments in an external repository db." />
<br />
<br /><font size=2 face="sans-serif">Enter the following for the Repeat control options. The &quot;docid&quot; variable will contain the docUNID for each document:</font>
<br /><img src="http://www.jmackey.net/groupwareinc/johnblog/johnblog.nsf/d6plinks/GROC-7G3GF7/StoryRichTextMime/M6?OpenElement"  alt="Image:John's Blog - XPages Example: Building a Custom Control - How to build a Custom Multi-FileUpload Control that you can drop on any XPage, and it stores all attachments in an external repository db." Title="Image:John's Blog - XPages Example: Building a Custom Control - How to build a Custom Multi-FileUpload Control that you can drop on any XPage, and it stores all attachments in an external repository db." />
<br /><font size=2 face="sans-serif"><em>*note: I do limit the amount of uploads to 30. &nbsp;I think that's enough...</em></font>
<br />
<br /><font size=2 face="sans-serif">Next drop a Panel control into the Repeat control. &nbsp;Set the Datasource as follows:</font>
<br />
<br /><img src="http://www.jmackey.net/groupwareinc/johnblog/johnblog.nsf/d6plinks/GROC-7G3GF7/StoryRichTextMime/M7?OpenElement"  alt="Image:John's Blog - XPages Example: Building a Custom Control - How to build a Custom Multi-FileUpload Control that you can drop on any XPage, and it stores all attachments in an external repository db." Title="Image:John's Blog - XPages Example: Building a Custom Control - How to build a Custom Multi-FileUpload Control that you can drop on any XPage, and it stores all attachments in an external repository db." />
<br />
<br /><font size=2 face="sans-serif">Set the Document Id to be computed. &nbsp;The Document ID will be the &quot;docid&quot; variable from the Repeat control:</font>
<br /><img src="http://www.jmackey.net/groupwareinc/johnblog/johnblog.nsf/d6plinks/GROC-7G3GF7/StoryRichTextMime/M8?OpenElement"  alt="Image:John's Blog - XPages Example: Building a Custom Control - How to build a Custom Multi-FileUpload Control that you can drop on any XPage, and it stores all attachments in an external repository db." Title="Image:John's Blog - XPages Example: Building a Custom Control - How to build a Custom Multi-FileUpload Control that you can drop on any XPage, and it stores all attachments in an external repository db." />
<br />
<br /><font size=2 face="sans-serif">There is one property we do have to set that is not obvious if you are starting out with XPages and Panels. &nbsp;That is to: &quot;ignoreRequestParams&quot;. &nbsp;The reason for this is we are setting the Document ID and default Action for the Panel ourselves and do not want the Panel to pick up these parameters from the request. &nbsp;Here is a screen shot of how to set that parameter:</font>
<br /><img src="http://www.jmackey.net/groupwareinc/johnblog/johnblog.nsf/d6plinks/GROC-7G3GF7/StoryRichTextMime/M9?OpenElement"  alt="Image:John's Blog - XPages Example: Building a Custom Control - How to build a Custom Multi-FileUpload Control that you can drop on any XPage, and it stores all attachments in an external repository db." Title="Image:John's Blog - XPages Example: Building a Custom Control - How to build a Custom Multi-FileUpload Control that you can drop on any XPage, and it stores all attachments in an external repository db." />
<br />
<br /><font size=2 face="sans-serif">Drop a &quot;Table control&quot; to the Panel, 1 row by 2 columns. Now we need to add our controls to the Table. &nbsp;Add an &quot;Edit Box&quot;, &quot;File Upload&quot; and &quot;File Download&quot;. &nbsp;Here's a screen shot of the bindings for the controls:</font>
<br />
<br /><font size=2 face="sans-serif">Description Edit Box Control:</font>
<br /><img src="http://www.jmackey.net/groupwareinc/johnblog/johnblog.nsf/d6plinks/GROC-7G3GF7/StoryRichTextMime/M10?OpenElement"  alt="Image:John's Blog - XPages Example: Building a Custom Control - How to build a Custom Multi-FileUpload Control that you can drop on any XPage, and it stores all attachments in an external repository db." Title="Image:John's Blog - XPages Example: Building a Custom Control - How to build a Custom Multi-FileUpload Control that you can drop on any XPage, and it stores all attachments in an external repository db." />
<br />
<br /><font size=2 face="sans-serif">FileUpload Control and FileDownload Control both have the same bindings:</font>
<br /><img src="http://www.jmackey.net/groupwareinc/johnblog/johnblog.nsf/d6plinks/GROC-7G3GF7/StoryRichTextMime/M11?OpenElement"  alt="Image:John's Blog - XPages Example: Building a Custom Control - How to build a Custom Multi-FileUpload Control that you can drop on any XPage, and it stores all attachments in an external repository db." Title="Image:John's Blog - XPages Example: Building a Custom Control - How to build a Custom Multi-FileUpload Control that you can drop on any XPage, and it stores all attachments in an external repository db." />
<br />
<br /><font size=2 face="sans-serif">For the FileUpload control we want to hide the control after one file has been uploaded. &nbsp;We only want one attachment per repository document. &nbsp;Here is a screen shot of the Visibility formula and where you would set that:</font>
<br /><img src="http://www.jmackey.net/groupwareinc/johnblog/johnblog.nsf/d6plinks/GROC-7G3GF7/StoryRichTextMime/M12?OpenElement"  alt="Image:John's Blog - XPages Example: Building a Custom Control - How to build a Custom Multi-FileUpload Control that you can drop on any XPage, and it stores all attachments in an external repository db." Title="Image:John's Blog - XPages Example: Building a Custom Control - How to build a Custom Multi-FileUpload Control that you can drop on any XPage, and it stores all attachments in an external repository db." />
<br />
<br /><font size=2 face="sans-serif">Set the opposite logic for the FileDownload control, that is return false if there are 0 attachments.</font>
<br />
<br /><font size=2 face="sans-serif">Place a Button control in the second column labeled &quot;Upload&quot;. &nbsp;Set the same visibilty formula as the FileUpload control. &nbsp;It has a very simple formula which saves all data sources. You could substitute a simple action here if you prefer:</font>
<br />
<br /><img src="http://www.jmackey.net/groupwareinc/johnblog/johnblog.nsf/d6plinks/GROC-7G3GF7/StoryRichTextMime/M13?OpenElement"  alt="Image:John's Blog - XPages Example: Building a Custom Control - How to build a Custom Multi-FileUpload Control that you can drop on any XPage, and it stores all attachments in an external repository db." Title="Image:John's Blog - XPages Example: Building a Custom Control - How to build a Custom Multi-FileUpload Control that you can drop on any XPage, and it stores all attachments in an external repository db." />
<br />
<br />
<br /><font size=2 face="sans-serif">On the form where you will use the new MultiUpload control, I use the universalID for the link between the document and the attachment. &nbsp;I placed a hidden Edit Box control on the page with the following Default value formula:</font>
<br /><img src="http://www.jmackey.net/groupwareinc/johnblog/johnblog.nsf/d6plinks/GROC-7G3GF7/StoryRichTextMime/M14?OpenElement"  alt="Image:John's Blog - XPages Example: Building a Custom Control - How to build a Custom Multi-FileUpload Control that you can drop on any XPage, and it stores all attachments in an external repository db." Title="Image:John's Blog - XPages Example: Building a Custom Control - How to build a Custom Multi-FileUpload Control that you can drop on any XPage, and it stores all attachments in an external repository db." />
<br />
<br /><font size=2 face="sans-serif">Lastly, here is the Attachment form in the FileuploadDB.nsf repository. I have a view sorted by ParentUNID named &quot;vAttachmentLkUp&quot;:</font>
<br /><img src="http://www.jmackey.net/groupwareinc/johnblog/johnblog.nsf/d6plinks/GROC-7G3GF7/StoryRichTextMime/M15?OpenElement"  alt="Image:John's Blog - XPages Example: Building a Custom Control - How to build a Custom Multi-FileUpload Control that you can drop on any XPage, and it stores all attachments in an external repository db." Title="Image:John's Blog - XPages Example: Building a Custom Control - How to build a Custom Multi-FileUpload Control that you can drop on any XPage, and it stores all attachments in an external repository db." />
<br />
<br /><font size=2 face="sans-serif">That's it! &nbsp;It really is very minimal the amount of work involved. &nbsp;It took less than an hour for me to do. &nbsp;I am sure the interface could use a little bit more work, but I think it makes for a great example.</font>
<br />
<br /><font size=2 face="sans-serif">The one issue I had seemed to be a bug where I could not place the FileUpload control as the first control in the Panel. &nbsp;I ended up putting the Description first and that seemed to fix the issue...very odd issue. &nbsp;I posted the problem to the 8.5 Beta forum.</font>
<br />
<br /><font size=2 face="sans-serif">Download it and try it out. &nbsp;Hopefully seeing these techniques solving a real business need will start you thinking about other uses for this technology. &nbsp;Let me know if you have any questions....</font>
<br />
<br /><font size=2 face="sans-serif">John</font>
<br /> ]]></content:encoded><pubDate>Sun, 29 Jun 2008 08:17:49 -0400</pubDate><slash:comments>5</slash:comments><wfw:commentRss>http://www.jmackey.net/groupwareinc/johnblog/johnblog.nsf/CommentsRSS?Open&amp;id=667EFE83D9BB79A88525747700438CB6</wfw:commentRss><wfw:comment>http://www.jmackey.net/groupwareinc/johnblog/johnblog.nsf/PostComment?RunAgent&amp;id=667EFE83D9BB79A88525747700438CB6</wfw:comment></item><item><title>XPages Example: utilizing the built-in AJAX features</title><link>http://www.jmackey.net/groupwareinc/johnblog/johnblog.nsf/d6plinks/GROC-7FUJ67</link><description><![CDATA[ You can take advantage of AJAX while developing web 2.0 applications with XPages. &nbsp;There are 2 features that provide built-in AJAX support. &nbsp;

These are:

Ajax Type Ahead
Partial Page Refresh

Below I will walk you through step-by-step on how ...]]></description><dc:subject>Domino 8.5 - XPages</dc:subject><dc:creator>groupwareinc</dc:creator><comments>http://www.jmackey.net/groupwareinc/johnblog/johnblog.nsf/d6plinks/GROC-7FUJ67</comments><guid isPermaLink="true">http://www.jmackey.net/groupwareinc/johnblog/johnblog.nsf/d6plinks/GROC-7FUJ67</guid><content:encoded><![CDATA[ <font size=2 face="sans-serif">You can take advantage of AJAX while developing web 2.0 applications with XPages. &nbsp;There are 2 features that provide built-in AJAX support. &nbsp;</font>
<br />
<br /><font size=2 face="sans-serif">These are:</font>
<ul>
<li><font size=2 face="sans-serif">Ajax Type Ahead</font></li>
<li><font size=2 face="sans-serif">Partial Page Refresh</font></li>
</ul>
<br /><font size=2 face="sans-serif">Below I will walk you through step-by-step on how to implement these features in an application. &nbsp;You can also download a sample database by clicking here: </font><a href=http://www.jmackey.net/groupwareinc/johnblog/johnblog.nsf/D6plinks/GROC7FUKM7.htm/$FILE/xPageAjaxExample.nsf><font size=2 color=blue face="sans-serif">xPageAjaxExample.nsf</font></a>
<br />
<br /><font size=2 face="sans-serif"><strong><u>Ajax Type Ahead</u></strong></font>
<br />
<br /><font size=2 face="sans-serif">The Ajax type ahead feature can be added to any edit box control. &nbsp;It allows you to provide a list of values to the user by either entering a static list or computing the list via a formula. &nbsp;There is also a choice for retrieving a list from a URL, though I have not tried this option myself.</font>
<br />
<br /><font size=2 face="sans-serif">In this screen shot I have clicked on an &quot;Edit Box&quot; control and then selected the &quot;Type Ahead&quot; tab:</font>
<br /><font size=2 face="sans-serif">- I clicked on &quot;Enable Type Ahead&quot;</font>
<br /><font size=2 face="sans-serif">- Selected &quot;Full&quot; mode</font>
<br /><font size=2 face="sans-serif">- For suggestions I selected computed and added a @DbColumn formula (next screen shot)</font>
<br /><font size=2 face="sans-serif">- I unchecked &quot;Case-Sensitive&quot;</font>
<br /><font size=1 face="sans-serif"><em>* The help has a full description of the options</em></font>
<br />
<br /><img src="http://www.jmackey.net/groupwareinc/johnblog/johnblog.nsf/d6plinks/GROC-7FUJ67/StoryRichTextMime/M2?OpenElement"  alt="Image:John's Blog - XPages Example: utilizing the built-in AJAX features" Title="Image:John's Blog - XPages Example: utilizing the built-in AJAX features" />
<br />
<br /><font size=2 face="sans-serif">For the type ahead suggestions, I want to return a list of Sales Representatives from a view. &nbsp;I selected computed by clicking the diamond and entered the following formula:</font>
<br />
<br /><img src="http://www.jmackey.net/groupwareinc/johnblog/johnblog.nsf/d6plinks/GROC-7FUJ67/StoryRichTextMime/M3?OpenElement"  alt="Image:John's Blog - XPages Example: utilizing the built-in AJAX features" Title="Image:John's Blog - XPages Example: utilizing the built-in AJAX features" />
<br />
<br /><font size=2 face="sans-serif">Here's the results if I enter the letter &quot;s&quot; in the SalesRep field in the browser. &nbsp;The user is provided with a drop down of choices to select from:</font>
<br />
<br /><img src="http://www.jmackey.net/groupwareinc/johnblog/johnblog.nsf/d6plinks/GROC-7FUJ67/StoryRichTextMime/M4?OpenElement"  alt="Image:John's Blog - XPages Example: utilizing the built-in AJAX features" Title="Image:John's Blog - XPages Example: utilizing the built-in AJAX features" />
<br />
<br />
<br />
<br />
<br /><font size=2 face="sans-serif"><strong><u>Ajax Partial Page Refresh</u></strong></font>
<br />
<br /><font size=2 face="sans-serif">The partial page refresh is available on any event. &nbsp;You select &quot;Partial Update&quot; on the event tab and then select the element you only want to have updated when the event is fired. &nbsp;</font>
<br />
<br /><font size=2 face="sans-serif">In this example, I only want a table on the page to be updated when the user clicks the Lookup button. &nbsp;Here is what the settings look like. &nbsp;The table ID I want to refresh is &quot;OtherCustomers&quot;:</font>
<br /><img src="http://www.jmackey.net/groupwareinc/johnblog/johnblog.nsf/d6plinks/GROC-7FUJ67/StoryRichTextMime/M5?OpenElement"  alt="Image:John's Blog - XPages Example: utilizing the built-in AJAX features" Title="Image:John's Blog - XPages Example: utilizing the built-in AJAX features" />
<br />
<br /><font size=2 face="sans-serif">This is the screen shot prior to clicking the button.</font>
<br />
<br /><img src="http://www.jmackey.net/groupwareinc/johnblog/johnblog.nsf/d6plinks/GROC-7FUJ67/StoryRichTextMime/M6?OpenElement"  alt="Image:John's Blog - XPages Example: utilizing the built-in AJAX features" Title="Image:John's Blog - XPages Example: utilizing the built-in AJAX features" />
<br />
<br /><font size=2 face="sans-serif">This is after the button is clicked. &nbsp;Screen shots do not really do this feature justice, you'll need to try in in your browser to see the effect.</font>
<br /><img src="http://www.jmackey.net/groupwareinc/johnblog/johnblog.nsf/d6plinks/GROC-7FUJ67/StoryRichTextMime/M7?OpenElement"  alt="Image:John's Blog - XPages Example: utilizing the built-in AJAX features" Title="Image:John's Blog - XPages Example: utilizing the built-in AJAX features" />
<br />
<br /><font size=2 face="sans-serif">This example is a very simple one where I have no business logic behind the button event. &nbsp;The button's sole purpose is to force a round trip of the page to the server and provide the partial page refresh. &nbsp;</font>
<br />
<br /><font size=2 face="sans-serif">There is a computed text field on the form that performs an @DbLookup based on the SalesRep field. &nbsp;Here is the code for that computed field. &nbsp;Note: I implode the array and use &quot;&lt;br&gt;&quot; as a separator so I get a line break. &nbsp;On the computed field there is an option to set the &quot;Content Type&quot; as HTML. &nbsp;This equates to pass thru HTML in Domino. &nbsp;Here's the formula for the lookup:</font>
<br />
<br /><img src="http://www.jmackey.net/groupwareinc/johnblog/johnblog.nsf/d6plinks/GROC-7FUJ67/StoryRichTextMime/M8?OpenElement"  alt="Image:John's Blog - XPages Example: utilizing the built-in AJAX features" Title="Image:John's Blog - XPages Example: utilizing the built-in AJAX features" />
<br />
<br /><font size=2 face="sans-serif">As you can see, it is very easy to take advantage of these 2 features. &nbsp;Domino 8.5 also ships with the Dojo toolkit available on the server. &nbsp;You will be able to utilize the library in you client side script for additional AJAX features.</font>
<br />
<br /><font size=2 face="sans-serif">Additional xPage examples on this site can be found here: &nbsp;</font><a href="http://www.jmackey.net/groupwareinc/johnblog/johnblog.nsf/BlogByCategory?OpenView&amp;RestrictToCategory=Domino%208.5%20-%20xPages"><font size=2 color=blue face="sans-serif">Domino 8.5 - XPages examples</font></a>
<br />
<br /><font size=2 face="sans-serif">John</font> ]]></content:encoded><pubDate>Sun, 22 Jun 2008 09:45:51 -0400</pubDate><slash:comments>5</slash:comments><wfw:commentRss>http://www.jmackey.net/groupwareinc/johnblog/johnblog.nsf/CommentsRSS?Open&amp;id=D7FE19EB05D17D9185257470004B9BC6</wfw:commentRss><wfw:comment>http://www.jmackey.net/groupwareinc/johnblog/johnblog.nsf/PostComment?RunAgent&amp;id=D7FE19EB05D17D9185257470004B9BC6</wfw:comment></item><item><title>XPages Example part 2: Generating dynamic editable fields for a document collection</title><link>http://www.jmackey.net/groupwareinc/johnblog/johnblog.nsf/d6plinks/GROC-7FMJ3J</link><description><![CDATA[ I built on the previous XPage example, the Customer Orders application, to demonstrate how to generate dynamic fields from a document collection. &nbsp;There is a sample database for you to download as well as a powerpoint presentation that explains the steps ...]]></description><dc:subject>Domino 8.5 - XPages</dc:subject><dc:creator>groupwareinc</dc:creator><comments>http://www.jmackey.net/groupwareinc/johnblog/johnblog.nsf/d6plinks/GROC-7FMJ3J</comments><guid isPermaLink="true">http://www.jmackey.net/groupwareinc/johnblog/johnblog.nsf/d6plinks/GROC-7FMJ3J</guid><content:encoded><![CDATA[ <font size=2 face="sans-serif">I built on the previous XPage example, the </font><a href="http://www.jmackey.net/groupwareinc/johnblog/johnblog.nsf/d6plinks/GROC-7FFLYJ" target=_blank><font size=2 color=blue face="sans-serif">Customer Orders application</font></a><font size=2 face="sans-serif">, to demonstrate how to generate dynamic fields from a document collection. &nbsp;There is a sample database for you to download as well as a powerpoint presentation that explains the steps involved.</font>
<br />
<br /><font size=2 face="sans-serif">Over the years I have developed different techniques to handle dynamic fields in Domino applications. &nbsp;I'm sure many of you have also tackled this issue in various ways. &nbsp;In XPages there are built in controls that you can utilize to address this issue.</font>
<br />
<br /><font size=2 face="sans-serif">In the previous example I demonstrated how XPages allows you to bind your controls on the page to multiple datasources. &nbsp;In this example I take it up a notch by showing how you can repeat a panel control that is bound to a document multiple times, thereby binding edit controls to a collection of Notes documents. &nbsp;XPages maintains the binding so that all the documents are updated from a single button with a single simple action &quot;Save Datasources&quot;.</font>
<br />
<br /><font size=2 face="sans-serif">Here's the use case: When a Customer Order is created there could be multiple items the customer is ordering. &nbsp;We should give the user the ability to add new items dynamically by clicking a button. &nbsp;The button will create a new response document and then reload the page. &nbsp;The repeat control will generate the following editable fields for all the response documents: Item Number, Price, and Quantity. </font>
<br />
<br /><font size=2 face="sans-serif">Here is a screen shot:</font>
<br /><img src="http://www.jmackey.net/groupwareinc/johnblog/johnblog.nsf/d6plinks/GROC-7FMJ3J/StoryRichTextMime/M2?OpenElement"  alt="Image:John's Blog - XPages Example part 2: Generating dynamic editable fields for a document collection" Title="Image:John's Blog - XPages Example part 2: Generating dynamic editable fields for a document collection" />
<br />
<br /><font size=2 face="sans-serif">Here are the downloads:</font>
<br /><font size=2 face="sans-serif">- </font><a href=http://www.jmackey.net/groupwareinc/johnblog/johnblog.nsf/D6plinks/GROC7FMMKW.htm/$FILE/CustomerOrders.nsf><font size=2 color=blue face="sans-serif">CustomerOrders.nsf</font></a>
<br /><font size=2 face="sans-serif">- </font><a href="http://www.jmackey.net/groupwareinc/johnblog/johnblog.nsf/D6plinks/GROC7FMMMC.htm/$FILE/xPages_Example-Generating_dynamic_editable_fields.ppt"><font size=2 color=blue face="sans-serif">step-by-step powerpoint</font></a>
<br />
<br /><font size=2 face="sans-serif">Download the application and try it out. &nbsp;Contact me if you have any questions via posting or email. &nbsp;My contact information is in the powerpoint.</font>
<br />
<br /><font size=2 face="sans-serif">John</font> ]]></content:encoded><pubDate>Mon, 16 Jun 2008 06:50:00 -0400</pubDate><slash:comments>2</slash:comments><wfw:commentRss>http://www.jmackey.net/groupwareinc/johnblog/johnblog.nsf/CommentsRSS?Open&amp;id=A991145A4BBA2AD485257469004B379B</wfw:commentRss><wfw:comment>http://www.jmackey.net/groupwareinc/johnblog/johnblog.nsf/PostComment?RunAgent&amp;id=A991145A4BBA2AD485257469004B379B</wfw:comment></item><item><title>XPages Example: updating data from multiple forms from a single xPage</title><link>http://www.jmackey.net/groupwareinc/johnblog/johnblog.nsf/d6plinks/GROC-7FFLYJ</link><description><![CDATA[ I put together an example of using XPages to update data from multiple forms on a single XPage. &nbsp;There is a sample database for you to download as well as a presentation that walks you through the steps involved. 

XPages separates the presentation ...]]></description><dc:subject>Domino 8.5 - XPages</dc:subject><dc:creator>groupwareinc</dc:creator><comments>http://www.jmackey.net/groupwareinc/johnblog/johnblog.nsf/d6plinks/GROC-7FFLYJ</comments><guid isPermaLink="true">http://www.jmackey.net/groupwareinc/johnblog/johnblog.nsf/d6plinks/GROC-7FFLYJ</guid><content:encoded><![CDATA[ <font size=2 face="sans-serif">I put together an example of using XPages to update data from multiple forms on a single XPage. &nbsp;There is a sample database for you to download as well as a presentation that walks you through the steps involved. </font>
<br />
<br /><font size=2 face="sans-serif">XPages separates the presentation layer from the data layer. &nbsp;This is obviously very different to the one to one relationship in Domino. &nbsp;XPages also allows the developer to bind to multiple datasources from a single page. &nbsp;This feature can really provide a different approach to developing Domino applications.</font>
<br />
<br /><font size=2 face="sans-serif">I came up with the following simple use case: &nbsp;We have an application where the user takes product orders that are shipped to customers. &nbsp;Sometimes the user needs to update the customer information while taking the order. &nbsp;We can provide the Customer fields right on the Order form and bind them via a Panel control to the Customer form. &nbsp;A single button with a simple action saves all the bound datasources for the page and therefore updates both forms for us. &nbsp;Here is a screen shot:</font>
<br />
<br /><img src="http://www.jmackey.net/groupwareinc/johnblog/johnblog.nsf/d6plinks/GROC-7FFLYJ/StoryRichTextMime/M2?OpenElement"  alt="Image:John's Blog - XPages Example: updating data from multiple forms from a single xPage" Title="Image:John's Blog - XPages Example: updating data from multiple forms from a single xPage" />
<br />
<br /><font size=2 face="sans-serif">Here are the downloads:</font>
<br /><font size=2 face="sans-serif">- </font><a href=http://www.jmackey.net/groupwareinc/johnblog/johnblog.nsf/D6plinks/GROC7FFFW6.htm/$FILE/CustomerOrders.nsf><font size=2 color=blue face="sans-serif">CustomerOrders.nsf</font></a>
<br /><font size=2 face="sans-serif">- </font><a href="http://www.jmackey.net/groupwareinc/johnblog/johnblog.nsf/D6plinks/GROC7FFFXX.htm/$FILE/xPages_Example-Binding_to_multiple_datasources_on_a_single_xpage.ppt"><font size=2 color=blue face="sans-serif">step-by-step powerpoint</font></a>
<br />
<br /><font size=2 face="sans-serif">Download the application and try it out. &nbsp;Contact me if you have any questions via posting or email. &nbsp;My email address is in the powerpoint (created with Symphony however!).</font>
<br />
<br /><font size=2 face="sans-serif">John</font> ]]></content:encoded><pubDate>Mon, 9 Jun 2008 00:00:00 -0400</pubDate><slash:comments>5</slash:comments><wfw:commentRss>http://www.jmackey.net/groupwareinc/johnblog/johnblog.nsf/CommentsRSS?Open&amp;id=55A488B49BD09EDD88257462005863BE</wfw:commentRss><wfw:comment>http://www.jmackey.net/groupwareinc/johnblog/johnblog.nsf/PostComment?RunAgent&amp;id=55A488B49BD09EDD88257462005863BE</wfw:comment></item><item><title>Lotus Domino Designer 8.5 Beta 1 release</title><link>http://www.jmackey.net/groupwareinc/johnblog/johnblog.nsf/d6plinks/GROC-7F7KGT</link><description><![CDATA[ As a Lotus Domino 8.5 design partner, I have been working with the 8.5 pre-beta releases for several months. &nbsp;The public beta version 1 was released last Friday. &nbsp;There are many enhancements, the largest being within the Designer and the move to ...]]></description><dc:subject>Domino 8.5</dc:subject><dc:creator>groupwareinc</dc:creator><comments>http://www.jmackey.net/groupwareinc/johnblog/johnblog.nsf/d6plinks/GROC-7F7KGT</comments><guid isPermaLink="true">http://www.jmackey.net/groupwareinc/johnblog/johnblog.nsf/d6plinks/GROC-7F7KGT</guid><content:encoded><![CDATA[ <font size=2 face="sans-serif">As a Lotus Domino 8.5 design partner, I have been working with the 8.5 pre-beta releases for several months. &nbsp;The public beta version 1 was released last Friday. &nbsp;There are many enhancements, the largest being within the Designer and the move to eclipse and the inclusion of xPages. &nbsp;With a background in Lotus Notes and Websphere Portal I am particularly interested in xPages since the technology is derived from the Lotus Component Designer. &nbsp;</font>
<br />
<br /><font size=2 face="sans-serif">Here is a good description of the new xPages technology taken from the IBM Lotus Domino Wiki:</font>
<br />
<br /><font size=2 face="sans-serif"><strong>XPages and custom controls</strong></font>
<br />
<br /><font size=2 face="sans-serif">An XPage is a new design element based on JavaServer Faces (JSF) technology that lets developers create Web 2.0 enabled pages for use in Web browser applications running on Domino 8.5. XPages remove the barrier of Web programming in Domino by providing advanced page design capabilities and complete control of the generated markup. They also allow access to any kind of data and provide an easy method for localizing applications. XPages includes the following features:</font>
<br />
<ul>
<li><font size=2 face="sans-serif">AJAX enabled (for example, partial page refresh, type ahead capability, and so on) </font></li>
<li><font size=2 face="sans-serif">Advanced Web control library (tabbed panel, and so on) </font></li>
<li><font size=2 face="sans-serif">Full support for styling by using CSS</li>
<li><font size=2 face="sans-serif">Fully extensible by using custom controls (composite controls or Java-based controls) or JSF extensions </font></li>
<li><font size=2 face="sans-serif">Support for multiple clients (Web, rich client, and so on) </font></li>
<li><font size=2 face="sans-serif">JavaScript scripting language support for client-side and server-side action </font></li>
<li><font size=2 face="sans-serif">Pre-built simple actions provided for most common cases </font></li>
<li><font size=2 face="sans-serif">Direct access to Java libraries on the server </font></li>
</ul>
<br /><font size=2 face="sans-serif">A custom control is a collection of controls that are stored as a single object. Similar to subforms in Domino Designer, custom controls are design elements that you can create once and add to multiple XPages. When you update a custom control, every XPage that uses that custom control gets updated with the changes, saving developer time and effort.</font>
<br />
<br /><font size=2 face="sans-serif">I am working on a &nbsp;number of examples and samples that I will be posting demonstrating xPages. &nbsp;This will present some compelling reasons why Domino developers will want to use this technology. &nbsp;I'll be posting these over the next couple of weeks on this site....</font>
<br /> ]]></content:encoded><pubDate>Sun, 1 Jun 2008 10:54:01 -0400</pubDate><slash:comments>0</slash:comments><wfw:commentRss>http://www.jmackey.net/groupwareinc/johnblog/johnblog.nsf/CommentsRSS?Open&amp;id=7ECBA724AF0BE4728825745B0036757A</wfw:commentRss><wfw:comment>http://www.jmackey.net/groupwareinc/johnblog/johnblog.nsf/PostComment?RunAgent&amp;id=7ECBA724AF0BE4728825745B0036757A</wfw:comment></item><item><title>Domino 8 beta 2 - composite applications and eclipse components</title><link>http://www.jmackey.net/groupwareinc/johnblog/johnblog.nsf/d6plinks/GROC-72YHFB</link><description><![CDATA[ I've been working with the beta 2 release of Domino 8. &nbsp;In particular I've been working on composite applications, eclipse components, and eclipse plugins. &nbsp;The product has been very stable. &nbsp;

I've found some good resources for the work I've ...]]></description><dc:subject>Domino 8</dc:subject><dc:creator>groupwareinc</dc:creator><comments>http://www.jmackey.net/groupwareinc/johnblog/johnblog.nsf/d6plinks/GROC-72YHFB</comments><guid isPermaLink="true">http://www.jmackey.net/groupwareinc/johnblog/johnblog.nsf/d6plinks/GROC-72YHFB</guid><content:encoded><![CDATA[ <font size=2 face="sans-serif">I've been working with the beta 2 release of Domino 8. &nbsp;In particular I've been working on composite applications, eclipse components, and eclipse plugins. &nbsp;The product has been very stable. &nbsp;</font>
<br />
<br /><font size=2 face="sans-serif">I've found some good resources for the work I've been doing. &nbsp;Here's a collection of links that I found helpful:</font>
<br />
<ul>
<li><font size=2 face="sans-serif">New redbook draft that has a chapter on Lotus Notes: </font><a href=http://www.redbooks.ibm.com/redpieces/abstracts/sg247367.html><font size=2 color=blue face="sans-serif">Building Composite Applications</font></a></li>
<li><a href="http://www-03.ibm.com/developerworks/blogs/page/CompApps?entry=two_simple_tutorials_to_build"><font size=2 color=blue face="sans-serif">Two simple tutorials to build NSF based apps with NSF and Eclipse components</font></a></li>
<li><font size=2 face="sans-serif">Excellent article by Brian Leonard :</font><a href="http://www-128.ibm.com/developerworks/lotus/library/notes8-sidebar/index.html"><font size=2 color=blue face="sans-serif"> Extending the IBM Lotus Notes V8 sidebar and tool</font></a></li>
<li><font size=2 face="sans-serif">A follow up article by Brian: </font><a href="http://www-128.ibm.com/developerworks/lotus/library/notes8-data/index.html?ca=drs"><font size=2 color=blue face="sans-serif">Integrating IBM Lotus Notes data into the Lotus Notes V8 sidebar and toolbar</font></a></li>
<li><font size=2 face="sans-serif">A thread on Notes.net discussion that has some good info. &nbsp;In particular how to </font><a href="http://www-10.lotus.com/ldd/nd8forum.nsf/00b6fcf5c8a1b9a785256fb7006435f5/cc7d7af39ebadb38852572a30056acd6?OpenDocument"><font size=2 color=blue face="sans-serif">deploy plugins to the Notes 8 client</font></a><font size=2 face="sans-serif"> (you have to change plugin_customization.ini for user initiated installs)</font></li>
<li><font size=2 face="sans-serif">A pdf : </font><a href="http://www-03.ibm.com/developerworks/blogs/resources/CompApps/DevEclipseComponents.pdf"><font size=2 color=blue face="sans-serif">How to develop Eclipse Components in an Eclipse IDE for CompositeApplications in Lotus Notes</font></a></li>
<li><font size=2 face="sans-serif">I found this pdf very valuable for building an eclipse composite application component and for learning how to deploy components by creating an update site. &nbsp;Creating a new feature and then update site starts on page 28: </font><a href="http://www-03.ibm.com/developerworks/blogs/resources/CompApps/CompAppsTutorialPart2M4.pdf"><font size=2 color=blue face="sans-serif">Composite Application Tutorial II: Eclipse Component</font></a><font size=2 face="sans-serif">
</font></li>
</ul>
<br /><font size=2 face="sans-serif">John</font> ]]></content:encoded><pubDate>Mon, 7 May 2007 09:09:13 -0400</pubDate><slash:comments>1</slash:comments><wfw:commentRss>http://www.jmackey.net/groupwareinc/johnblog/johnblog.nsf/CommentsRSS?Open&amp;id=57F2CD9645F8640A882572D400483C85</wfw:commentRss><wfw:comment>http://www.jmackey.net/groupwareinc/johnblog/johnblog.nsf/PostComment?RunAgent&amp;id=57F2CD9645F8640A882572D400483C85</wfw:comment></item></channel>
</rss>
