<?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/opensearchrss/1.0/" 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"><id>tag:blogger.com,1999:blog-6819462794293857673</id><updated>2013-06-10T18:17:50.710-07:00</updated><category term="General" /><category term="News" /><category term="xtech" /><category term="coffeescript" /><category term="javascript" /><category term="scala" /><category term="xforms" /><title type="text">Orbeon Forms — XForms Everywhere</title><subtitle type="html">Web Forms for the Enterprise, Done the Right Way</subtitle><link rel="http://schemas.google.com/g/2005#feed" type="application/atom+xml" href="http://blog.orbeon.com/feeds/posts/default" /><link rel="alternate" type="text/html" href="http://blog.orbeon.com/" /><link rel="next" type="application/atom+xml" href="http://www.blogger.com/feeds/6819462794293857673/posts/default?start-index=26&amp;max-results=25" /><author><name>Orbeon</name><uri>http://www.blogger.com/profile/01293304925754192850</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="32" height="32" src="http://4.bp.blogspot.com/_E4TwuERt52E/SwdYHeo5cII/AAAAAAAAAAU/dGmtfP18UL8/S220/Picture_1_bigger.png" /></author><generator version="7.00" uri="http://www.blogger.com">Blogger</generator><openSearch:totalResults>301</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/xml-web-apps" /><feedburner:info uri="xml-web-apps" /><atom10:link xmlns:atom10="http://www.w3.org/2005/Atom" rel="hub" href="http://pubsubhubbub.appspot.com/" /><feedburner:browserFriendly>This is an XML content feed. It is intended to be viewed in a newsreader or syndicated to another site.</feedburner:browserFriendly><entry><id>tag:blogger.com,1999:blog-6819462794293857673.post-6464859891224327110</id><published>2013-05-30T22:09:00.001-07:00</published><updated>2013-05-30T22:09:11.773-07:00</updated><title type="text">Orbeon Forms 4.2</title><content type="html">Today we released Orbeon Forms 4.2!&lt;br /&gt;
&lt;br /&gt;
The defining feature of Orbeon Forms 4.2 is support for &lt;i&gt;more powerful Form Runner buttons.&lt;/i&gt; Buttons can now be configured in a much more flexible way to trigger simple sequential processes to execute when the user presses a button. See the&amp;nbsp;&lt;a href="http://blog.orbeon.com/2013/04/more-powerful-buttons.html"&gt;blog post&lt;/a&gt;&amp;nbsp;for an introduction to this feature and the&amp;nbsp;&lt;a href="https://github.com/orbeon/orbeon-forms/wiki/Form-Runner:-Buttons-and-Processes"&gt;documentation&lt;/a&gt;&amp;nbsp;for more in-depth details.&lt;br /&gt;
&lt;br /&gt;
In addition, we introduce the following new features since Orbeon Forms 4.1:&lt;br /&gt;
&lt;ul&gt;
&lt;li&gt;Form Builder&lt;/li&gt;
&lt;ul&gt;
&lt;li&gt;&lt;b&gt;More HTML labels.&lt;/b&gt;&amp;nbsp;You can now enter HTML in the labels of checkboxes and radio buttons in the Edit Choices dialog (&lt;a href="http://blog.orbeon.com/2013/04/orbeon-forms-41.html"&gt;Orbeon Forms 4.1&lt;/a&gt; introduced this ability for control labels and hints).&lt;/li&gt;
&lt;/ul&gt;
&lt;li&gt;Form Runner&lt;/li&gt;
&lt;ul&gt;
&lt;li&gt;&lt;b&gt;Improved attachment control.&lt;/b&gt;&amp;nbsp;The "cancel" button works more promptly, user messages and error handling are improved, and&amp;nbsp;the control is now localized in French.&lt;/li&gt;
&lt;li&gt;&lt;b&gt;Wizard view.&lt;/b&gt;&amp;nbsp;Small improvements including more flexible buttons placement.&lt;/li&gt;
&lt;li&gt;&lt;b&gt;Dropdown-date control.&lt;/b&gt;&amp;nbsp;There is a new property to configure the start date in the &lt;span style="font-family: Courier New, Courier, monospace;"&gt;fr:dropdown-date&lt;/span&gt; control and the control is now localized in French.&lt;/li&gt;
&lt;/ul&gt;
&lt;li&gt;XForms engine&lt;/li&gt;
&lt;ul&gt;
&lt;li&gt;&lt;b&gt;Upload.&lt;/b&gt;&amp;nbsp;We implemented many improvements to the &lt;span style="font-family: Courier New, Courier, monospace;"&gt;xf:upload&lt;/span&gt; control, including a more efficient way to interrupt ongoing uploads and support for the new &lt;span style="font-family: Courier New, Courier, monospace;"&gt;xxforms-upload-error&lt;/span&gt; event (&lt;a href="https://github.com/orbeon/orbeon-forms/wiki/XForms:-Events#xxforms-upload-error"&gt;documentation&lt;/a&gt;). We also documented the existing upload events:&amp;nbsp;&lt;span style="font-family: Courier New, Courier, monospace;"&gt;xxforms-upload-start&lt;/span&gt;,&amp;nbsp;&lt;span style="font-family: Courier New, Courier, monospace;"&gt;xxforms-upload-cancel&lt;/span&gt; and&amp;nbsp;&lt;span style="font-family: Courier New, Courier, monospace;"&gt;xxforms-upload-done&lt;/span&gt; (&lt;a href="https://github.com/orbeon/orbeon-forms/wiki/XForms:-Events#xxforms-upload-start"&gt;documentation&lt;/a&gt;).&lt;/li&gt;
&lt;li&gt;&lt;b&gt;Internationalization.&lt;/b&gt;&amp;nbsp;The new &lt;span style="font-family: Courier New, Courier, monospace;"&gt;xxf:r()&lt;/span&gt; function (&lt;a href="http://blog.orbeon.com/2013/05/easier-localization.html"&gt;blog post&lt;/a&gt;, &lt;a href="https://github.com/orbeon/orbeon-forms/wiki/XPath-Function-Library#xxfr"&gt;documentation&lt;/a&gt;) makes it easier to access resources for the current language, and readonly XBL components&amp;nbsp;resources are now shared in memory for more efficiency.&lt;/li&gt;
&lt;li&gt;&lt;b&gt;New&amp;nbsp;&lt;span style="font-family: Courier New, Courier, monospace;"&gt;xxf:get-request-method()&lt;/span&gt; function.&lt;/b&gt;&amp;nbsp;This XPath function allows you to get the current HTTP method. It adds to the existing functions to get request parameters, headers, and attributes (&lt;a href="https://github.com/orbeon/orbeon-forms/wiki/XPath-Function-Library#xxfget-request-method"&gt;documentation&lt;/a&gt;).&lt;/li&gt;
&lt;li&gt;&lt;b&gt;New xxf:get-portlet-mode() and xxf:get-window-state() functions.&lt;/b&gt;&amp;nbsp;These functions provide access to the portlet mode and window state when running in a portal with the full portlet.&lt;/li&gt;
&lt;/ul&gt;
&lt;/ul&gt;
Here is the complete list of changes since&amp;nbsp;&lt;a href="http://blog.orbeon.com/2013/04/orbeon-forms-41.html"&gt;Orbeon Forms 4.1&lt;/a&gt;:&lt;br /&gt;
&lt;ul&gt;
&lt;li&gt;Form Builder&lt;/li&gt;
&lt;ul&gt;
&lt;li&gt;FB: Ability to enter HTML labels in checkboxes and radio buttons itemsets&amp;nbsp;(&lt;a href="https://github.com/orbeon/orbeon-forms/issues/965"&gt;#965&lt;/a&gt;)&lt;/li&gt;
&lt;li&gt;FB: Test mode shows warning icon (&lt;a href="https://github.com/orbeon/orbeon-forms/issues/883"&gt;#883&lt;/a&gt;)&lt;/li&gt;
&lt;li&gt;Move/nicer "Edit Itemset" icon (&lt;a href="https://github.com/orbeon/orbeon-forms/issues/662"&gt;#662&lt;/a&gt;)&lt;/li&gt;
&lt;li&gt;FB: Users with access to one app can't get past the initial dialog (&lt;a href="https://github.com/orbeon/orbeon-forms/issues/1006"&gt;#1006&lt;/a&gt;)&lt;/li&gt;
&lt;/ul&gt;
&lt;li&gt;Form Runner&lt;/li&gt;
&lt;ul&gt;
&lt;li&gt;Universal send button (&lt;a href="https://github.com/orbeon/orbeon-forms/issues/885"&gt;#885&lt;/a&gt;)&lt;/li&gt;
&lt;li&gt;Wizard: support navigation buttons alongside other buttons (&lt;a href="https://github.com/orbeon/orbeon-forms/issues/937"&gt;#937&lt;/a&gt;)&lt;/li&gt;
&lt;li&gt;Wizard: scroll to section top when changing sections (&lt;a href="https://github.com/orbeon/orbeon-forms/issues/964"&gt;#964&lt;/a&gt;)&lt;/li&gt;
&lt;li&gt;Wizard: option to place buttons under section (&lt;a href="https://github.com/orbeon/orbeon-forms/issues/958"&gt;#958&lt;/a&gt;)&lt;/li&gt;
&lt;li&gt;Property to configure the start date in the dropdown-date control (&lt;a href="https://github.com/orbeon/orbeon-forms/issues/954"&gt;#954&lt;/a&gt;)&lt;/li&gt;
&lt;li&gt;Localize dropdown-date in French (&lt;a href="https://github.com/orbeon/orbeon-forms/issues/955"&gt;#955&lt;/a&gt;)&lt;/li&gt;
&lt;li&gt;attachment.xbl hardcodes "Download" string (&lt;a href="https://github.com/orbeon/orbeon-forms/issues/949"&gt;#949&lt;/a&gt;)&lt;/li&gt;
&lt;li&gt;Proxy portlet header forwarding must not change header case (&lt;a href="https://github.com/orbeon/orbeon-forms/issues/891"&gt;#891&lt;/a&gt;)&lt;/li&gt;
&lt;li&gt;Full portlet: PDF output fails (&lt;a href="https://github.com/orbeon/orbeon-forms-pe/commit/5784172070e06f0d74704ca8f5007d48298cfaec"&gt;#882&lt;/a&gt;)&lt;/li&gt;
&lt;li&gt;Move status icons to navbar (&lt;a href="https://github.com/orbeon/orbeon-forms/commit/576bff459804f9cb66a20034b86fffe422e9f248"&gt;576bff4598&lt;/a&gt;)&lt;/li&gt;
&lt;li&gt;PDF URL sent after first time (&lt;a href="https://github.com/orbeon/orbeon-forms/issues/948"&gt;#948&lt;/a&gt;)&lt;/li&gt;
&lt;li&gt;With PDF template, and barcode enabled, PDF generation fails (&lt;a href="https://github.com/orbeon/orbeon-forms/issues/1004"&gt;#1004&lt;/a&gt;)&lt;/li&gt;
&lt;li&gt;PDF: font pitch and size are incorrectly updated in group (&lt;a href="https://github.com/orbeon/orbeon-forms/issues/1007"&gt;#1007&lt;/a&gt;)&lt;/li&gt;
&lt;li&gt;DMV-14: use wizard view (&lt;a href="https://github.com/orbeon/orbeon-forms/commit/8eee39bf3eb51ee9fb33f0b2a98b25749173f31b"&gt;8eee39bf3e&lt;/a&gt;)&lt;/li&gt;
&lt;li&gt;Upload: FR must show informational/error messages (&lt;a href="https://github.com/orbeon/orbeon-forms/issues/1010"&gt;#1010&lt;/a&gt;)&lt;/li&gt;
&lt;li&gt;Full portlet: Saving image attachment fails (&lt;a href="https://github.com/orbeon/orbeon-forms/issues/1038"&gt;#1038&lt;/a&gt;)&lt;/li&gt;
&lt;/ul&gt;
&lt;li&gt;XForms engine&lt;/li&gt;
&lt;ul&gt;
&lt;li&gt;YUI wait_mask keeps being added (&lt;a href="https://github.com/orbeon/orbeon-forms/issues/957"&gt;#957&lt;/a&gt;)&lt;/li&gt;
&lt;li&gt;NPE in XFormsModelSchemaValidator on second page load (&lt;a href="https://github.com/orbeon/orbeon-forms/issues/951"&gt;#951&lt;/a&gt;)&lt;/li&gt;
&lt;li&gt;xxf:get-request-header('User-Agent') returning an empty sequence (&lt;a href="https://github.com/orbeon/orbeon-forms/issues/926"&gt;#926&lt;/a&gt;)&lt;/li&gt;
&lt;li&gt;XBL: share readonly inline instances (&lt;a href="https://github.com/orbeon/orbeon-forms/issues/969"&gt;#969&lt;/a&gt;)&lt;/li&gt;
&lt;li&gt;XPath dependencies: support AVT analysis (&lt;a href="https://github.com/orbeon/orbeon-forms/issues/972"&gt;#972&lt;/a&gt;)&lt;/li&gt;
&lt;li&gt;XPath dependencies: xxf:lang() and xxf:format-message() (&lt;a href="https://github.com/orbeon/orbeon-forms/commit/69dfe25bb810839dd839df614c37e9a44ef09ac7"&gt;69dfe25bb8&lt;/a&gt;)&lt;/li&gt;
&lt;li&gt;xxf:r() function (&lt;a href="https://github.com/orbeon/orbeon-forms/issues/970"&gt;#970&lt;/a&gt;)&lt;/li&gt;
&lt;li&gt;Seeing message on the console: "Warning: Comparison of xs:untypedAtomic? to xs:integer will fail unless the first operand is empty" (&lt;a href="https://github.com/orbeon/orbeon-forms/issues/975"&gt;#975&lt;/a&gt;)&lt;/li&gt;
&lt;li&gt;Support xxf:expose-xpath-types on per-instance basis (&lt;a href="https://github.com/orbeon/orbeon-forms/commit/3db9fb15109fed9e32219fadf110e27be5647641"&gt;3db9fb1510&lt;/a&gt;)&lt;/li&gt;
&lt;li&gt;Lightweight syntax for HTML item labels (&lt;a href="https://github.com/orbeon/orbeon-forms/issues/945"&gt;#945&lt;/a&gt;)&lt;/li&gt;
&lt;li&gt;Upload: spinner shows over dialog for a while (&lt;a href="https://github.com/orbeon/orbeon-forms/issues/962"&gt;#962&lt;/a&gt;)&lt;/li&gt;
&lt;li&gt;Upload: temp file not deleted when user clears field (&lt;a href="https://github.com/orbeon/orbeon-forms/issues/983"&gt;#983&lt;/a&gt;)&lt;/li&gt;
&lt;li&gt;Upload: better way to interrupt upload from server (&lt;a href="https://github.com/orbeon/orbeon-forms/issues/985"&gt;#985&lt;/a&gt;)&lt;/li&gt;
&lt;li&gt;Upload: show message if upload fails (&lt;a href="https://github.com/orbeon/orbeon-forms/issues/1013"&gt;#1013&lt;/a&gt;)&lt;/li&gt;
&lt;li&gt;Improve upload appearance with Firefox (&lt;a href="https://github.com/orbeon/orbeon-forms/commit/2a3a7132fb81ec6059178f067f041fd514b340c6"&gt;2a3a7132fb&lt;/a&gt;)&lt;/li&gt;
&lt;li&gt;JavaScript error when canceling upload (&lt;a href="https://github.com/orbeon/orbeon-forms/issues/999"&gt;#999&lt;/a&gt;)&lt;/li&gt;
&lt;li&gt;New xxf:get-request-method() function (&lt;a href="https://github.com/orbeon/orbeon-forms/issues/986"&gt;#986&lt;/a&gt;)&lt;/li&gt;
&lt;li&gt;Month/date date incorrectly parsed (&lt;a href="https://github.com/orbeon/orbeon-forms/issues/998"&gt;#998&lt;/a&gt;)&lt;/li&gt;
&lt;li&gt;New xxforms-upload-error event (&lt;a href="https://github.com/orbeon/orbeon-forms/commit/f5365e55cb3c93de4406702405d17a25ce9b84c9"&gt;f5365e55cb&lt;/a&gt;) (&lt;a href="https://github.com/orbeon/orbeon-forms/wiki/XForms:-Events#xxforms-upload-error"&gt;documentation&lt;/a&gt;)&lt;/li&gt;
&lt;li&gt;Add xxf:get-portlet-mode()/xxf:get-window-state() (&lt;a href="https://github.com/orbeon/orbeon-forms/commit/c70e3427078195ca756fe3233b9c16ff696e7515"&gt;c70e342707&lt;/a&gt;)&lt;/li&gt;
&lt;/ul&gt;
&lt;ul&gt;
&lt;li&gt;`orbeon` class not added when going through XForms filter or when using theme-plain.xsl (&lt;a href="https://github.com/orbeon/orbeon-forms/issues/877"&gt;#877&lt;/a&gt;)&lt;/li&gt;
&lt;/ul&gt;
&lt;/ul&gt;
&lt;i&gt;NOTE: Alfresco support is removed in this version. Based on feedback, we hope to restore it for Orbeon Forms 4.3 (see &lt;a href="https://github.com/orbeon/orbeon-forms/issues/987"&gt;#987&lt;/a&gt;).&lt;/i&gt;&lt;br /&gt;
&lt;br /&gt;
You can download the latest version of Orbeon Forms from the&amp;nbsp;&lt;a href="http://www.orbeon.com/download"&gt;downloads&lt;/a&gt; page.&lt;br /&gt;
&lt;br /&gt;
Don't forget to &lt;a href="http://demo.orbeon.com/orbeon/fr/orbeon/register/new"&gt;grab a trial license&lt;/a&gt; for the PE version.&lt;br /&gt;
&lt;br /&gt;
We hope you enjoy this release!&lt;br /&gt;
&lt;br /&gt;
Please send feedback:&lt;br /&gt;
&lt;ul&gt;
&lt;li&gt;via&amp;nbsp;&lt;a href="http://twitter.com/orbeon"&gt;twitter&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;to the &lt;a href="http://discuss.orbeon.com/"&gt;discussion&lt;/a&gt; list&lt;/li&gt;
&lt;li&gt;or as comments on this blog entry&lt;/li&gt;
&lt;/ul&gt;
&lt;img src="http://feeds.feedburner.com/~r/xml-web-apps/~4/ta5eMT6wHZA" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://blog.orbeon.com/feeds/6464859891224327110/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://blog.orbeon.com/2013/05/orbeon-forms-42.html#comment-form" title="0 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/6819462794293857673/posts/default/6464859891224327110" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/6819462794293857673/posts/default/6464859891224327110" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/xml-web-apps/~3/ta5eMT6wHZA/orbeon-forms-42.html" title="Orbeon Forms 4.2" /><author><name>Erik Bruchez</name><uri>http://www.blogger.com/profile/16139421434415219182</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="32" height="32" src="http://1.bp.blogspot.com/-8ltr6ezX1_I/UHBbhWdN8QI/AAAAAAAAAvg/wftQ4a7fHxU/s220/headshot_20120704%2B%2528square%2529.png" /></author><thr:total>0</thr:total><feedburner:origLink>http://blog.orbeon.com/2013/05/orbeon-forms-42.html</feedburner:origLink></entry><entry><id>tag:blogger.com,1999:blog-6819462794293857673.post-1668437551481370242</id><published>2013-05-15T11:07:00.000-07:00</published><updated>2013-05-15T14:17:41.351-07:00</updated><title type="text">Automatic schema generation for forms you create in Form Builder</title><content type="html">&lt;div style="text-align: right;"&gt;
&lt;a href="http://www.flickr.com/photos/jazzmasterson/3038597/" imageanchor="1" style="clear: right; float: right; margin-bottom: 1em; margin-left: 1em;"&gt;&lt;img border="0" height="154" src="http://4.bp.blogspot.com/-rHZ3ldpedIE/UZPMidULB9I/AAAAAAAAE50/rgfw3LTZVbw/s200/3038597_e5f95e2017_b.jpg" width="200" /&gt;&lt;/a&gt;&lt;/div&gt;
When you create a form with Form Builder, behind the scene, data entered by users in the form is collected in an XML document. That same XML document is sent to the persistence API, and if you are using one of the &lt;a href="http://wiki.orbeon.com/forms/doc/developer-guide/form-runner/persistence-api#TOC-Built-in-persistence-layers"&gt;built-in implementations of the persistence API&lt;/a&gt;, that XML document is also saved in your database of choice.&lt;br /&gt;
&lt;br /&gt;
The structure of those XML documents is driven by the names you give to sections, repeats, and controls when you create your form in Form Builder, so &lt;i&gt;you&lt;/i&gt;&amp;nbsp;know what the XML will look like. But what if downstream, &lt;i&gt;software&lt;/i&gt;&amp;nbsp;is consuming those XML documents? A better way to communicate what the XML "looks like" to software is by using an&amp;nbsp;&lt;a href="http://en.wikipedia.org/wiki/XML_Schema_(W3C)"&gt;XML schema&lt;/a&gt;. And this is why Orbeon Forms 4.0 PE introduced a new service which can automatically&amp;nbsp;&lt;a href="http://wiki.orbeon.com/forms/doc/developer-guide/form-runner/xml-schema-service"&gt;produce an&amp;nbsp;XML schema&lt;/a&gt; describing the structure of the XML data collected by each form you built with Form Builder.&lt;br /&gt;
&lt;br /&gt;
The service that produces the schema is accessible at &lt;span style="font-family: Courier New, Courier, monospace;"&gt;/fr/service/schema/[app]/[form]&lt;/span&gt;, and like other services, since 4.0, it is &lt;a href="http://wiki.orbeon.com/forms/doc/user-guide/form-runner-user-guide#TOC-Protecting-services"&gt;protected by default&lt;/a&gt;, and thus isn't just accessible by end users trying to load that URL.&lt;img src="http://feeds.feedburner.com/~r/xml-web-apps/~4/dtRAAwvzv40" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://blog.orbeon.com/feeds/1668437551481370242/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://blog.orbeon.com/2013/05/automatic-schema-generation-for-forms.html#comment-form" title="4 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/6819462794293857673/posts/default/1668437551481370242" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/6819462794293857673/posts/default/1668437551481370242" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/xml-web-apps/~3/dtRAAwvzv40/automatic-schema-generation-for-forms.html" title="Automatic schema generation for forms you create in Form Builder" /><author><name>Alessandro Vernet</name><uri>http://www.blogger.com/profile/06085176014230803685</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="32" height="32" src="http://farm1.static.flickr.com/122/269903379_c4b40a3570.jpg" /></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="http://4.bp.blogspot.com/-rHZ3ldpedIE/UZPMidULB9I/AAAAAAAAE50/rgfw3LTZVbw/s72-c/3038597_e5f95e2017_b.jpg" height="72" width="72" /><thr:total>4</thr:total><feedburner:origLink>http://blog.orbeon.com/2013/05/automatic-schema-generation-for-forms.html</feedburner:origLink></entry><entry><id>tag:blogger.com,1999:blog-6819462794293857673.post-4127828894333939351</id><published>2013-05-14T11:59:00.000-07:00</published><updated>2013-05-14T11:59:10.586-07:00</updated><title type="text">Easier localization</title><content type="html">&lt;table cellpadding="0" cellspacing="0" class="tr-caption-container" style="float: right; margin-left: 1em; text-align: right;"&gt;&lt;tbody&gt;
&lt;tr&gt;&lt;td style="text-align: center;"&gt;&lt;a href="http://1.bp.blogspot.com/-mqlaHES3W-E/UZKIsrYxcyI/AAAAAAAAA3o/8hq0faIT6lQ/s1600/3809460658_3d36d44eaa_m.jpg" imageanchor="1" style="clear: right; margin-bottom: 1em; margin-left: auto; margin-right: auto;"&gt;&lt;img border="0" src="http://1.bp.blogspot.com/-mqlaHES3W-E/UZKIsrYxcyI/AAAAAAAAA3o/8hq0faIT6lQ/s1600/3809460658_3d36d44eaa_m.jpg" /&gt;&lt;/a&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class="tr-caption" style="text-align: center;"&gt;&lt;i&gt;Image by&amp;nbsp;&lt;a href="http://www.flickr.com/photos/tobiasmik/3809460658/"&gt;Tobias Mikkelsen&lt;/a&gt;&lt;/i&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;/tbody&gt;&lt;/table&gt;
Form Builder and Form Runner support internationalization out of the box. Concretely this means that you can create a form and localize resources such as control labels, hints, and selection lists into multiple languages.&lt;br /&gt;
&lt;br /&gt;
Internally, this is implemented in Form Runner with:&lt;br /&gt;
&lt;ul&gt;
&lt;li&gt;A special XForms instance, &lt;span style="font-family: Courier New, Courier, monospace;"&gt;fr-form-resources&lt;/span&gt;, which holds an XML document with the resources in one or more languages.&lt;/li&gt;
&lt;li&gt;Logic to pick the current language based on a number of factors (such as whether a specific language was requested with a URL parameter, or was already stored in the session, or was selected by the user).&lt;/li&gt;
&lt;li&gt;XForms logic which points to the current resources according to the current language and makes them available to all controls via an XForms variable called &lt;span style="font-family: Courier New, Courier, monospace;"&gt;$form-resources&lt;/span&gt;.&lt;/li&gt;
&lt;/ul&gt;
&lt;div&gt;
One issue with this approach is that the logic must be duplicated, in particular within XBL components (including section templates).&lt;/div&gt;
&lt;br /&gt;
So in Orbeon Forms 4.2, we introduce a new function called simply &lt;span style="font-family: Courier New, Courier, monospace;"&gt;r&lt;/span&gt; (for "resource"), which you typically call with &lt;span style="font-family: Courier New, Courier, monospace;"&gt;xxf:r('resource.name')&lt;/span&gt;. The function name is short as it might be used very often!&lt;br /&gt;
&lt;br /&gt;
This function removes the need for the boilerplate logic in each form and XBL component (the resources instance, of course, remains). Here is a simple example:&lt;br /&gt;
&lt;blockquote class="tr_bq"&gt;
&lt;span style="font-family: Courier New, Courier, monospace;"&gt;&amp;lt;xf:item&amp;gt;&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;lt;xf:label value="xxf:r('year')"/&amp;gt;&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;lt;xf:value/&amp;gt;&lt;br /&gt;&amp;lt;/xf:item&amp;gt;&lt;/span&gt;&lt;/blockquote&gt;
With Orbeon Forms 4.2, this function is only used by a few XBL components. In the future we plan to update all XBL components as well as Form Runner and Form Builder to use this mechanism.&lt;img src="http://feeds.feedburner.com/~r/xml-web-apps/~4/mHkwHhleA3c" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://blog.orbeon.com/feeds/4127828894333939351/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://blog.orbeon.com/2013/05/easier-localization.html#comment-form" title="0 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/6819462794293857673/posts/default/4127828894333939351" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/6819462794293857673/posts/default/4127828894333939351" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/xml-web-apps/~3/mHkwHhleA3c/easier-localization.html" title="Easier localization" /><author><name>Erik Bruchez</name><uri>http://www.blogger.com/profile/16139421434415219182</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="32" height="32" src="http://1.bp.blogspot.com/-8ltr6ezX1_I/UHBbhWdN8QI/AAAAAAAAAvg/wftQ4a7fHxU/s220/headshot_20120704%2B%2528square%2529.png" /></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="http://1.bp.blogspot.com/-mqlaHES3W-E/UZKIsrYxcyI/AAAAAAAAA3o/8hq0faIT6lQ/s72-c/3809460658_3d36d44eaa_m.jpg" height="72" width="72" /><thr:total>0</thr:total><feedburner:origLink>http://blog.orbeon.com/2013/05/easier-localization.html</feedburner:origLink></entry><entry><id>tag:blogger.com,1999:blog-6819462794293857673.post-4250269882465687909</id><published>2013-05-06T14:54:00.003-07:00</published><updated>2013-05-06T14:54:43.536-07:00</updated><title type="text">Orbeon Forms 4.2 M1</title><content type="html">Today we released Orbeon Forms 4.2 M1, a milestone build for the upcoming Orbeon Forms 4.2 release. This is &lt;b&gt;not a stable release&lt;/b&gt;.&lt;br /&gt;
&lt;br /&gt;
This release contains the following new features:&lt;br /&gt;
&lt;ul&gt;
&lt;li&gt;Form Builder&lt;/li&gt;
&lt;ul&gt;
&lt;li&gt;Ability to enter HTML labels in checkboxes and radio buttons itemsets.&lt;/li&gt;
&lt;/ul&gt;
&lt;li&gt;Form Runner&lt;/li&gt;
&lt;ul&gt;
&lt;li&gt;More powerful buttons which allow specifying simple sequential processes to execute when the user presses a button&amp;nbsp;(see this &lt;a href="http://blog.orbeon.com/2013/04/more-powerful-buttons.html"&gt;blog post&lt;/a&gt;).&lt;/li&gt;
&lt;li&gt;Wizard view improvements including more flexible buttons placement.&lt;/li&gt;
&lt;/ul&gt;
&lt;/ul&gt;
Here is the complete list of changes since &lt;a href="http://blog.orbeon.com/2013/04/orbeon-forms-41.html"&gt;Orbeon Forms 4.1&lt;/a&gt;:&lt;br /&gt;
&lt;ul&gt;
&lt;li&gt;Form Builder&lt;/li&gt;
&lt;ul&gt;
&lt;li&gt;FB: Ability to enter HTML labels in checkboxes and radio buttons itemsets&amp;nbsp;(&lt;a href="https://github.com/orbeon/orbeon-forms/issues/965"&gt;#965&lt;/a&gt;)&lt;/li&gt;
&lt;li&gt;FB: Test mode shows warning icon (&lt;a href="https://github.com/orbeon/orbeon-forms/issues/883"&gt;#883&lt;/a&gt;)&lt;/li&gt;
&lt;li&gt;Move/nicer "Edit Itemset" icon (&lt;a href="https://github.com/orbeon/orbeon-forms/issues/662"&gt;#662&lt;/a&gt;)&lt;/li&gt;
&lt;/ul&gt;
&lt;li&gt;Form Runner&lt;/li&gt;
&lt;ul&gt;
&lt;li&gt;Universal send button (&lt;a href="https://github.com/orbeon/orbeon-forms/issues/885"&gt;#885&lt;/a&gt;)&lt;/li&gt;
&lt;li&gt;Wizard: support navigation buttons alongside other buttons (&lt;a href="https://github.com/orbeon/orbeon-forms/issues/937"&gt;#937&lt;/a&gt;)&lt;/li&gt;
&lt;li&gt;Wizard: scroll to section top when changing sections (&lt;a href="https://github.com/orbeon/orbeon-forms/issues/964"&gt;#964&lt;/a&gt;)&lt;/li&gt;
&lt;li&gt;Wizard: option to place buttons under section (&lt;a href="https://github.com/orbeon/orbeon-forms/issues/958"&gt;#958&lt;/a&gt;)&lt;/li&gt;
&lt;li&gt;Property to configure the start date in the dropdown-date control (&lt;a href="https://github.com/orbeon/orbeon-forms/issues/954"&gt;#954&lt;/a&gt;)&lt;/li&gt;
&lt;li&gt;Localize dropdown-date in French (&lt;a href="https://github.com/orbeon/orbeon-forms/issues/955"&gt;#955&lt;/a&gt;)&lt;/li&gt;
&lt;li&gt;attachment.xbl hardcodes "Download" string (&lt;a href="https://github.com/orbeon/orbeon-forms/issues/949"&gt;#949&lt;/a&gt;)&lt;/li&gt;
&lt;li&gt;Proxy portlet header forwarding must not change header case (&lt;a href="https://github.com/orbeon/orbeon-forms/issues/891"&gt;#891&lt;/a&gt;)&lt;/li&gt;
&lt;li&gt;Move status icons to navbar (&lt;a href="https://github.com/orbeon/orbeon-forms/commit/576bff459804f9cb66a20034b86fffe422e9f248"&gt;576bff4598&lt;/a&gt;)&lt;/li&gt;
&lt;li&gt;&lt;i&gt;Compatibility note: Alfresco support is removed in this version. If you have any interest, please contact us!&lt;/i&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;li&gt;XForms engine&lt;/li&gt;
&lt;ul&gt;
&lt;li&gt;YUI wait_mask keeps being added (&lt;a href="https://github.com/orbeon/orbeon-forms/issues/957"&gt;#957&lt;/a&gt;)&lt;/li&gt;
&lt;li&gt;NPE in XFormsModelSchemaValidator on second page load (&lt;a href="https://github.com/orbeon/orbeon-forms/issues/951"&gt;#951&lt;/a&gt;)&lt;/li&gt;
&lt;li&gt;xxf:get-request-header('User-Agent') returning an empty sequence (&lt;a href="https://github.com/orbeon/orbeon-forms/issues/926"&gt;#926&lt;/a&gt;)&lt;/li&gt;
&lt;li&gt;XBL: share readonly inline instances (&lt;a href="https://github.com/orbeon/orbeon-forms/issues/969"&gt;#969&lt;/a&gt;)&lt;/li&gt;
&lt;li&gt;XPath dependencies: support AVT analysis (&lt;a href="https://github.com/orbeon/orbeon-forms/issues/972"&gt;#972&lt;/a&gt;)&lt;/li&gt;
&lt;li&gt;XPath dependencies: xxf:lang() and xxf:format-message() (&lt;a href="https://github.com/orbeon/orbeon-forms/commit/69dfe25bb810839dd839df614c37e9a44ef09ac7"&gt;69dfe25bb8&lt;/a&gt;)&lt;/li&gt;
&lt;li&gt;xxf:r() function (&lt;a href="https://github.com/orbeon/orbeon-forms/issues/970"&gt;#970&lt;/a&gt;)&lt;/li&gt;
&lt;li&gt;Seeing message on the console: "Warning: Comparison of xs:untypedAtomic? to xs:integer will fail unless the first operand is empty" (&lt;a href="https://github.com/orbeon/orbeon-forms/issues/975"&gt;#975&lt;/a&gt;)&lt;/li&gt;
&lt;li&gt;Support xxf:expose-xpath-types on per-instance basis (&lt;a href="https://github.com/orbeon/orbeon-forms/commit/3db9fb15109fed9e32219fadf110e27be5647641"&gt;3db9fb1510&lt;/a&gt;)&lt;/li&gt;
&lt;li&gt;Lightweight syntax for HTML item labels (&lt;a href="https://github.com/orbeon/orbeon-forms/issues/945"&gt;#945&lt;/a&gt;)&lt;/li&gt;
&lt;/ul&gt;
&lt;/ul&gt;
You can download the builds using these links:&lt;br /&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href="https://s3.amazonaws.com/orbeon-downloads/orbeon-4.2.0.M1.201305061835-PE.zip"&gt;orbeon-4.2.0.M1.201305061835-PE.zip&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://s3.amazonaws.com/orbeon-downloads/orbeon-4.2.0.M1.201305061852-CE.zip"&gt;orbeon-4.2.0.M1.201305061852-CE.zip&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
Don't forget to &lt;a href="http://demo.orbeon.com/orbeon/fr/orbeon/register/new"&gt;grab a trial license&lt;/a&gt; for the PE version.&lt;br /&gt;
&lt;br /&gt;
Please send feedback:&lt;br /&gt;
&lt;ul&gt;
&lt;li&gt;via&amp;nbsp;&lt;a href="http://twitter.com/orbeon"&gt;twitter&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;to the &lt;a href="http://www.orbeon.com/community"&gt;discussion&lt;/a&gt; list&lt;/li&gt;
&lt;li&gt;or as comments on this blog entry&lt;/li&gt;
&lt;/ul&gt;
&lt;img src="http://feeds.feedburner.com/~r/xml-web-apps/~4/IXTj2vOaFMM" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://blog.orbeon.com/feeds/4250269882465687909/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://blog.orbeon.com/2013/05/orbeon-forms-42-m1.html#comment-form" title="7 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/6819462794293857673/posts/default/4250269882465687909" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/6819462794293857673/posts/default/4250269882465687909" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/xml-web-apps/~3/IXTj2vOaFMM/orbeon-forms-42-m1.html" title="Orbeon Forms 4.2 M1" /><author><name>Erik Bruchez</name><uri>http://www.blogger.com/profile/16139421434415219182</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="32" height="32" src="http://1.bp.blogspot.com/-8ltr6ezX1_I/UHBbhWdN8QI/AAAAAAAAAvg/wftQ4a7fHxU/s220/headshot_20120704%2B%2528square%2529.png" /></author><thr:total>7</thr:total><feedburner:origLink>http://blog.orbeon.com/2013/05/orbeon-forms-42-m1.html</feedburner:origLink></entry><entry><id>tag:blogger.com,1999:blog-6819462794293857673.post-7589401635425785820</id><published>2013-04-29T11:59:00.000-07:00</published><updated>2013-04-29T12:01:40.896-07:00</updated><title type="text">HTML labels and hints in Form Builder</title><content type="html">&lt;p&gt;Since Orbeon Forms 4.1, &lt;a href="/2013/04/orbeon-forms-41.html"&gt;released&lt;/a&gt; two weeks ago, the labels and hints for forms you create in Form Builder can be more than just plain text: you can now use HTML in your labels and hints, right from Form Builder. For instance, this allows you to add formatting, as in the example below, where part of the label is in italic, or to add a link to a page with additional information about that field.&lt;/p&gt;

&lt;p style="text-align: center"&gt;&lt;img border="0" src="http://1.bp.blogspot.com/-LQM6zT-x5Zk/UX6-66EujZI/AAAAAAAAE2c/YUO9z0BkWzY/Screen+Shot+2013-04-29+at+11.41.02+AM.png" /&gt;&lt;/p&gt;

&lt;p&gt;By default, labels and hints are just plain text, as this is the most common scenario, and you wouldn't want a &lt;a href="http://en.wikipedia.org/wiki/Less-than_sign"&gt;less-than sign&lt;/a&gt; (&lt;code&gt;&amp;lt;&lt;/code&gt;) to be interpreted as the start of an HTML tag. To avoid this, you explicitly enable the &lt;i&gt;HTML mode&lt;/i&gt; with a checkbox, which in Form Builder is shown next to labels and hints.&lt;/p&gt;&lt;img src="http://feeds.feedburner.com/~r/xml-web-apps/~4/eSCVDKo8D_U" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://blog.orbeon.com/feeds/7589401635425785820/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://blog.orbeon.com/2013/04/html-labels-and-hints-in-form-builder.html#comment-form" title="0 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/6819462794293857673/posts/default/7589401635425785820" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/6819462794293857673/posts/default/7589401635425785820" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/xml-web-apps/~3/eSCVDKo8D_U/html-labels-and-hints-in-form-builder.html" title="HTML labels and hints in Form Builder" /><author><name>Alessandro Vernet</name><uri>http://www.blogger.com/profile/06085176014230803685</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="32" height="32" src="http://farm1.static.flickr.com/122/269903379_c4b40a3570.jpg" /></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="http://1.bp.blogspot.com/-LQM6zT-x5Zk/UX6-66EujZI/AAAAAAAAE2c/YUO9z0BkWzY/s72-c/Screen+Shot+2013-04-29+at+11.41.02+AM.png" height="72" width="72" /><thr:total>0</thr:total><feedburner:origLink>http://blog.orbeon.com/2013/04/html-labels-and-hints-in-form-builder.html</feedburner:origLink></entry><entry><id>tag:blogger.com,1999:blog-6819462794293857673.post-134806753983775453</id><published>2013-04-18T18:09:00.001-07:00</published><updated>2013-04-29T12:01:19.556-07:00</updated><title type="text">Orbeon Forms 4.1</title><content type="html">Today we released Orbeon Forms 4.1, which introduces a few new features since 4.0.1:&lt;br /&gt;
&lt;br /&gt;
&lt;ul&gt;
&lt;li&gt;Form Builder&lt;/li&gt;
&lt;ul&gt;
&lt;li&gt;Ability to &lt;a href="/2013/04/html-labels-and-hints-in-form-builder.html"&gt;enter HTML labels and hints in the builder&lt;/a&gt; (&lt;a href="https://github.com/orbeon/orbeon-forms/issues/870"&gt;#870&lt;/a&gt;)&lt;/li&gt;
&lt;li&gt;Introduce a distinction between the 'read' and 'update' permissions (&lt;a href="https://github.com/orbeon/orbeon-forms/issues/806"&gt;#806&lt;/a&gt;)&lt;/li&gt;
&lt;/ul&gt;
&lt;li&gt;Form Runner&lt;/li&gt;
&lt;ul&gt;
&lt;li&gt;Proxy portlet: ability to configure forwarding of headers and parameters (&lt;a href="https://github.com/orbeon/orbeon-forms/issues/886"&gt;#886&lt;/a&gt;)&lt;/li&gt;
&lt;li&gt;Ability to create new Form Runner resources via properties (&lt;a href="https://github.com/orbeon/orbeon-forms/issues/919"&gt;#919&lt;/a&gt;)&lt;/li&gt;
&lt;/ul&gt;
&lt;/ul&gt;
&lt;br /&gt;
In addition, the following fixes and enhancements have been implemented since 4.0.1:&lt;br /&gt;
&lt;br /&gt;
&lt;ul&gt;
&lt;li&gt;Form Builder&lt;/li&gt;
&lt;ul&gt;
&lt;li&gt;Edit Source must not send data to server incrementally (&lt;a href="https://github.com/orbeon/orbeon-forms/issues/848"&gt;#848&lt;/a&gt;)&lt;/li&gt;
&lt;li&gt;Incorrect section template update in builder (&lt;a href="https://github.com/orbeon/orbeon-forms/issues/633"&gt;#633&lt;/a&gt;)&lt;/li&gt;
&lt;li&gt;Show label editor when adding new control (&lt;a href="https://github.com/orbeon/orbeon-forms/issues/909"&gt;#909&lt;/a&gt;)&lt;/li&gt;
&lt;li&gt;No yellow background when hovering label (&lt;a href="https://github.com/orbeon/orbeon-forms/issues/767"&gt;#767&lt;/a&gt;)&lt;/li&gt;
&lt;li&gt;Can edit labels within section templates (&lt;a href="https://github.com/orbeon/orbeon-forms/issues/902"&gt;#902&lt;/a&gt;)&lt;/li&gt;
&lt;li&gt;Use smaller font for hint editor (&lt;a href="https://github.com/orbeon/orbeon-forms/issues/914"&gt;#914&lt;/a&gt;)&lt;/li&gt;
&lt;li&gt;Label editor: label disappears&amp;nbsp;(&lt;a href="https://github.com/orbeon/orbeon-forms/issues/915"&gt;#915&lt;/a&gt;)&lt;/li&gt;
&lt;li&gt;Icons to edit repeated grid show when the grid is within a section template (&lt;a href="https://github.com/orbeon/orbeon-forms/issues/781"&gt;#781&lt;/a&gt;)&lt;/li&gt;
&lt;li&gt;FB grid icons linger in wrong position when resizing window (&lt;a href="https://github.com/orbeon/orbeon-forms/issues/602"&gt;#602&lt;/a&gt;)&lt;/li&gt;
&lt;li&gt;Form Builder title is empty (&lt;a href="https://github.com/orbeon/orbeon-forms/issues/714"&gt;#714&lt;/a&gt;)&lt;/li&gt;
&lt;li&gt;Section title editor appears over section help icon (&lt;a href="https://github.com/orbeon/orbeon-forms/issues/636"&gt;#636&lt;/a&gt;)&lt;/li&gt;
&lt;li&gt;Show "click here to enter/add a label/hint" when label or hint is empty (&lt;a href="https://github.com/orbeon/orbeon-forms/issues/901"&gt;#901&lt;/a&gt;)&lt;/li&gt;
&lt;li&gt;For first label edited, the text field shows too high (&lt;a href="https://github.com/orbeon/orbeon-forms/issues/931"&gt;#931&lt;/a&gt;)&lt;/li&gt;
&lt;li&gt;Have placeholder on input for label/hint so form authors know what the field is for (&lt;a href="https://github.com/orbeon/orbeon-forms/issues/930"&gt;#930&lt;/a&gt;)&lt;/li&gt;
&lt;li&gt;Database service information lost (&lt;a href="https://github.com/orbeon/orbeon-forms/issues/934"&gt;#934&lt;/a&gt;)&lt;/li&gt;
&lt;/ul&gt;
&lt;li&gt;Form Runner&lt;/li&gt;
&lt;ul&gt;
&lt;li&gt;Improve eXist search performance (&lt;a href="https://github.com/orbeon/orbeon-forms/issues/921"&gt;#921&lt;/a&gt;)&lt;/li&gt;
&lt;li&gt;Full text search not returning anything with eXist 2 (&lt;a href="https://github.com/orbeon/orbeon-forms/issues/922"&gt;#922&lt;/a&gt;)&lt;/li&gt;
&lt;li&gt;Data in collapsed section is not validated (&lt;a href="https://github.com/orbeon/orbeon-forms/issues/927"&gt;#927&lt;/a&gt;)&lt;/li&gt;
&lt;li&gt;User with create permission see PDF and review buttons but gets a 403 (&lt;a href="https://github.com/orbeon/orbeon-forms/issues/935"&gt;#935&lt;/a&gt;)&lt;/li&gt;
&lt;li&gt;Undeclared variable in XPath expression: $form-resources (&lt;a href="https://github.com/orbeon/orbeon-forms/issues/932"&gt;#932&lt;/a&gt;)&lt;/li&gt;
&lt;li&gt;Empty buttons showing the second time the Form Submitted dialog shows (&lt;a href="https://github.com/orbeon/orbeon-forms/issues/939"&gt;#939&lt;/a&gt;)&lt;/li&gt;
&lt;/ul&gt;
&lt;li&gt;XForms engine&lt;/li&gt;
&lt;ul&gt;
&lt;li&gt;Use a single property for input/textarea string replacement (&lt;a href="https://github.com/orbeon/orbeon-forms/issues/867"&gt;#867&lt;/a&gt;)&lt;/li&gt;
&lt;li&gt;Non-relevant group around &amp;lt;li&amp;gt; with AVT doesn't place xforms-disabled (&lt;a href="https://github.com/orbeon/orbeon-forms/issues/889"&gt;#889&lt;/a&gt;)&lt;/li&gt;
&lt;li&gt;REGRESSION: Uploading large files causing "Got unexpected request sequence number" error (&lt;a href="https://github.com/orbeon/orbeon-forms/issues/894"&gt;#894&lt;/a&gt;)&lt;/li&gt;
&lt;li&gt;xf:case: xforms-case-selected/deselected are not placed on first delimiter (&lt;a href="https://github.com/orbeon/orbeon-forms/issues/893"&gt;#893&lt;/a&gt;)&lt;/li&gt;
&lt;li&gt;Fix basepath of TinyMCE (&lt;a href="https://github.com/orbeon/orbeon-forms/issues/896"&gt;#896&lt;/a&gt;)&lt;/li&gt;
&lt;/ul&gt;
&lt;ul&gt;
&lt;/ul&gt;
&lt;li&gt;Other&lt;/li&gt;
&lt;ul&gt;
&lt;li&gt;First automated client-side test using ScalaTest Selenium DSL&lt;/li&gt;
&lt;li&gt;Upgrade to Scala 2.10.1&lt;/li&gt;
&lt;li&gt;PE license: check build date against subscription end when it make sense&lt;/li&gt;
&lt;li&gt;Add Saxon numberer for Spanish&lt;/li&gt;
&lt;/ul&gt;
&lt;/ul&gt;
&lt;br /&gt;
You can download the latest version of Orbeon Forms from the&amp;nbsp;&lt;a href="http://www.orbeon.com/download"&gt;downloads&lt;/a&gt; page.&lt;br /&gt;
&lt;br /&gt;
Don't forget to &lt;a href="http://demo.orbeon.com/orbeon/fr/orbeon/register/new"&gt;grab a trial license&lt;/a&gt; for the PE version.&lt;br /&gt;
&lt;br /&gt;
We hope you enjoy this release!&lt;br /&gt;
&lt;br /&gt;
Please send feedback:&lt;br /&gt;
&lt;ul&gt;
&lt;li&gt;via&amp;nbsp;&lt;a href="http://twitter.com/orbeon"&gt;twitter&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;to the &lt;a href="http://discuss.orbeon.com/"&gt;discussion&lt;/a&gt; list&lt;/li&gt;
&lt;li&gt;or as comments on this blog entry&lt;/li&gt;
&lt;/ul&gt;&lt;img src="http://feeds.feedburner.com/~r/xml-web-apps/~4/rQ13TyXXq4Q" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://blog.orbeon.com/feeds/134806753983775453/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://blog.orbeon.com/2013/04/orbeon-forms-41.html#comment-form" title="0 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/6819462794293857673/posts/default/134806753983775453" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/6819462794293857673/posts/default/134806753983775453" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/xml-web-apps/~3/rQ13TyXXq4Q/orbeon-forms-41.html" title="Orbeon Forms 4.1" /><author><name>Erik Bruchez</name><uri>http://www.blogger.com/profile/16139421434415219182</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="32" height="32" src="http://1.bp.blogspot.com/-8ltr6ezX1_I/UHBbhWdN8QI/AAAAAAAAAvg/wftQ4a7fHxU/s220/headshot_20120704%2B%2528square%2529.png" /></author><thr:total>0</thr:total><feedburner:origLink>http://blog.orbeon.com/2013/04/orbeon-forms-41.html</feedburner:origLink></entry><entry><id>tag:blogger.com,1999:blog-6819462794293857673.post-4550407312901428450</id><published>2013-04-17T16:04:00.000-07:00</published><updated>2013-04-17T16:04:46.447-07:00</updated><title type="text">More powerful buttons</title><content type="html">&lt;table cellpadding="0" cellspacing="0" class="tr-caption-container" style="float: right; margin-left: 1em; text-align: right;"&gt;&lt;tbody&gt;
&lt;tr&gt;&lt;td style="text-align: center;"&gt;&lt;a href="http://2.bp.blogspot.com/-Qx7GUhiFp6U/UW740v85dfI/AAAAAAAAA2g/QRBt95Md2QM/s1600/buttons.jpg" imageanchor="1" style="clear: right; margin-bottom: 1em; margin-left: auto; margin-right: auto;"&gt;&lt;img border="0" src="http://2.bp.blogspot.com/-Qx7GUhiFp6U/UW740v85dfI/AAAAAAAAA2g/QRBt95Md2QM/s1600/buttons.jpg" /&gt;&lt;/a&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class="tr-caption" style="text-align: center;"&gt;&lt;i&gt;Photo by &lt;a href="http://www.flickr.com/photos/keoni101/5124691667/"&gt;Keoni Cabral&lt;/a&gt;&lt;/i&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;/tbody&gt;&lt;/table&gt;
&lt;p&gt;Up to version 4.1, Orbeon Forms had a few configurable buttons to specify what happens with form data:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;The &amp;#8220;Save&amp;#8221; button saves data to the database.&lt;/li&gt;
&lt;li&gt;The &amp;#8220;Submit&amp;#8221; button saves data and shows a dialog after saving (with options to clear data, keep data, navigate to another page, or close the window).&lt;/li&gt;
&lt;li&gt;The &amp;#8220;Send&amp;#8221; (AKA &amp;#8220;workflow-send&amp;#8221;) button saves the data and then allows:

&lt;ul&gt;
&lt;li&gt;sending an email&lt;/li&gt;
&lt;li&gt;sending form data to a service&lt;/li&gt;
&lt;li&gt;redirecting the user to a success or error page&lt;/li&gt;
&lt;/ul&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;The reason these specific buttons came to be is mostly historical: as more functionality was needed over time, more buttons were added with properties to configure them. The distinction between &amp;#8220;Submit&amp;#8221; and &amp;#8220;Send&amp;#8221; in particular is arbitrary!&lt;/p&gt;

&lt;p&gt;Since recently we&amp;#8217;ve been asked for more options, we used the opportunity to implement a much more flexible system.&lt;/p&gt;

&lt;p&gt;First, let&amp;#8217;s start by saying that we don&amp;#8217;t want to implement a full-fledged workflow engine: that&amp;#8217;s something other products do better than Orbeon Forms. Instead the idea is to be able to specify very simple sequential processes to execute when the user presses a button.&lt;/p&gt;

&lt;p&gt;We started with specifying a list of reusable actions:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;code&gt;validate&lt;/code&gt;: validate form data&lt;/li&gt;
&lt;li&gt;&lt;code&gt;save&lt;/code&gt;: save data via the persistence layer&lt;/li&gt;
&lt;li&gt;&lt;code&gt;success-message&lt;/code&gt;: show a success message&lt;/li&gt;
&lt;li&gt;&lt;code&gt;error-message&lt;/code&gt;: show an error message&lt;/li&gt;
&lt;li&gt;&lt;code&gt;pdf&lt;/code&gt;: create a PDF file from the data&lt;/li&gt;
&lt;li&gt;&lt;code&gt;email&lt;/code&gt;: send an email&lt;/li&gt;
&lt;li&gt;&lt;code&gt;send&lt;/code&gt;: send the data to an HTTP service&lt;/li&gt;
&lt;li&gt;&lt;code&gt;review&lt;/code&gt;, &lt;code&gt;edit&lt;/code&gt;, &lt;code&gt;summary&lt;/code&gt;: navigate to these Form Runner pages&lt;/li&gt;
&lt;li&gt;&lt;code&gt;navigate&lt;/code&gt;: navigate to an external page&lt;/li&gt;
&lt;li&gt;&lt;code&gt;visit-all&lt;/code&gt;: mark all controls as visited&lt;/li&gt;
&lt;li&gt;&lt;code&gt;unvisit-all&lt;/code&gt;: mark all controls as not visited&lt;/li&gt;
&lt;li&gt;&lt;code&gt;expand-all&lt;/code&gt;: expand all sections&lt;/li&gt;
&lt;li&gt;&lt;code&gt;collapse-all&lt;/code&gt;: collapse all sections&lt;/li&gt;
&lt;li&gt;&lt;code&gt;result-dialog&lt;/code&gt;: show the result dialog&lt;/li&gt;
&lt;li&gt;&lt;code&gt;captcha&lt;/code&gt;: trigger the captcha&lt;/li&gt;
&lt;li&gt;&lt;code&gt;success&lt;/code&gt;: complete the process&lt;/li&gt;
&lt;li&gt;&lt;code&gt;process&lt;/code&gt;: run a sub-process&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Then we needed to:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;specify which of these actions to run and in which order&lt;/li&gt;
&lt;li&gt;decide what to do when they succeed or fail&lt;/li&gt;
&lt;li&gt;decide how to associate them with buttons&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;We came up with a very simple syntax which you place in configuration properties. For example, the good old &amp;#8220;Save&amp;#8221; button is specified this way:&lt;/p&gt;

&lt;pre&gt;&lt;code&gt;require-valid
then save
then success-message(&amp;quot;save-success&amp;quot;)
recover error-message(&amp;quot;database-error&amp;quot;)
&lt;/code&gt;&lt;/pre&gt;

&lt;p&gt;Notice that there are action names, like &lt;code&gt;save&lt;/code&gt; and &lt;code&gt;success-message&lt;/code&gt; (&lt;code&gt;require-valid&lt;/code&gt; itself is a sub-process which runs a number of steps and stops processing if the data is not valid), and two different combinators, &lt;code&gt;then&lt;/code&gt; and &lt;code&gt;recover&lt;/code&gt;. When an action succeeds, &lt;code&gt;then&lt;/code&gt; is used to specify what is the following action. When an action fails, &lt;code&gt;recover&lt;/code&gt; can be used to specify what action to do in that case.&lt;/p&gt;

&lt;p&gt;So in the example above what you want to say is the following: start by validating the data, then in case of success save the data, and then if that&amp;#8217;s successful show a success message. If saving has failed, then show an error message.&lt;/p&gt;

&lt;p&gt;A process which just saves the data without checking validity and shows success and error messages looks like this:&lt;/p&gt;

&lt;pre&gt;&lt;code&gt;save
then success-message(&amp;quot;save-draft-success&amp;quot;)
recover error-message(&amp;quot;database-error&amp;quot;)
&lt;/code&gt;&lt;/pre&gt;

&lt;p&gt;Validating and sending data to a service looks like this:&lt;/p&gt;

&lt;pre&gt;&lt;code&gt;require-valid
then send(&amp;quot;oxf.fr.detail.send.success&amp;quot;)
&lt;/code&gt;&lt;/pre&gt;

&lt;p&gt;Some actions can take parameters. In the example above we point to properties to configure the &lt;code&gt;send&lt;/code&gt; action. This means that, within a single process, you can have any number of &lt;code&gt;send&lt;/code&gt; actions which send data to various services. This also allows you to have separate buttons to send data to different services. These two scenarios were not possible before.&lt;/p&gt;

&lt;p&gt;We are keeping but deprecating these buttons:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;code&gt;save&lt;/code&gt; (which uses a property to determine whether to validate or not)&lt;/li&gt;
&lt;li&gt;&lt;code&gt;submit&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;workflow-send&lt;/code&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;And we introduce new buttons with predefined behavior:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;code&gt;save-final&lt;/code&gt;: validate and save to the db&lt;/li&gt;
&lt;li&gt;&lt;code&gt;save-draft&lt;/code&gt;: save to the db without validating&lt;/li&gt;
&lt;li&gt;&lt;code&gt;send&lt;/code&gt;: validate and send to a service&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;In fact all buttons can do the same tasks if they are configured appropriately! But by default the buttons above are preconfigured to do different tasks, for convenience.&lt;/p&gt;

&lt;p&gt;So how do you can figure things? Say you want to specify a couple of buttons on your &amp;#8220;acme/hr&amp;#8221; form. Like before, you define a property:&lt;/p&gt;

&lt;pre&gt;&lt;code&gt;&amp;lt;property
  as=&amp;quot;xs:string&amp;quot;
  name=&amp;quot;oxf.fr.detail.buttons.acme.hr&amp;quot;
  value=&amp;quot;save-draft send&amp;quot;/&amp;gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;p&gt;This places &amp;#8220;Save&amp;#8221; and &amp;#8220;Send&amp;#8221; buttons on the page. Each button is automatically associated with processes of the same names (&lt;code&gt;save-draft&lt;/code&gt; and &lt;code&gt;send&lt;/code&gt;). These particular buttons and process names are standard, but we can override them specifically for our form. Again, this is done with a property:&lt;/p&gt;

&lt;pre&gt;&lt;code&gt;&amp;lt;property
  as=&amp;quot;xs:string&amp;quot;
  name=&amp;quot;oxf.fr.detail.process.send.acme.hr&amp;quot;
  value='require-valid
         then pdf
         then email
         then send(&amp;quot;http://example.org/&amp;quot;)
         then navigate(&amp;quot;/success&amp;quot;)
         recover navigate(&amp;quot;/failure&amp;quot;)'/&amp;gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;p&gt;Button labels can be overridden as well, as was the case before:&lt;/p&gt;

&lt;pre&gt;&lt;code&gt;&amp;lt;property
  as=&amp;quot;xs:string&amp;quot;
  name=&amp;quot;oxf.fr.resource.*.*.en.detail.buttons.send&amp;quot;
  value=&amp;quot;Fancy Send&amp;quot;/&amp;gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;p&gt;All the configuration above for a button called &lt;code&gt;send&lt;/code&gt; could have been done with an entirely custom button named &lt;code&gt;foo&lt;/code&gt;.&lt;/p&gt;

&lt;p&gt;We hope this shows a little bit what&amp;#8217;s now possible! This feature will be available in Orbeon Forms 4.2.&lt;/p&gt;&lt;img src="http://feeds.feedburner.com/~r/xml-web-apps/~4/_CbTXsXebg8" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://blog.orbeon.com/feeds/4550407312901428450/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://blog.orbeon.com/2013/04/more-powerful-buttons.html#comment-form" title="0 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/6819462794293857673/posts/default/4550407312901428450" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/6819462794293857673/posts/default/4550407312901428450" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/xml-web-apps/~3/_CbTXsXebg8/more-powerful-buttons.html" title="More powerful buttons" /><author><name>Erik Bruchez</name><uri>http://www.blogger.com/profile/16139421434415219182</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="32" height="32" src="http://1.bp.blogspot.com/-8ltr6ezX1_I/UHBbhWdN8QI/AAAAAAAAAvg/wftQ4a7fHxU/s220/headshot_20120704%2B%2528square%2529.png" /></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="http://2.bp.blogspot.com/-Qx7GUhiFp6U/UW740v85dfI/AAAAAAAAA2g/QRBt95Md2QM/s72-c/buttons.jpg" height="72" width="72" /><thr:total>0</thr:total><feedburner:origLink>http://blog.orbeon.com/2013/04/more-powerful-buttons.html</feedburner:origLink></entry><entry><id>tag:blogger.com,1999:blog-6819462794293857673.post-805588811454149556</id><published>2013-04-09T18:16:00.000-07:00</published><updated>2013-04-09T18:16:16.194-07:00</updated><title type="text">Making a distinction between the "read" and "update" permissions</title><content type="html">&lt;p&gt;Since Orbeon Forms 4.0, Form Builder provides a UI allowing form authors to define &lt;a href="http://wiki.orbeon.com/forms/doc/developer-guide/form-runner/access-control#TOC-With-Orbeon-Forms-4.0"&gt;who can do what&lt;/a&gt; on the forms they create, once they are published. For each role, form authors can define which function users can perform. The functions are &lt;i&gt;create&lt;/i&gt;, &lt;i&gt;read&lt;/i&gt;, &lt;i&gt;update&lt;/i&gt;, and &lt;i&gt;delete&lt;/i&gt; (&lt;a href="http://en.wikipedia.org/wiki/Create,_read,_update_and_delete"&gt;CRUD&lt;/a&gt;). In 4.0, &lt;i&gt;read&lt;/i&gt; and &lt;i&gt;update&lt;/i&gt; where grouped together; i.e. users with a given role where either allowed to both &lt;i&gt;read&lt;/i&gt; and &lt;i&gt;update&lt;/i&gt;, or were not allowed to do either. We now separated &lt;i&gt;read&lt;/i&gt; and &lt;i&gt;update&lt;/i&gt; to make this more granular, for instance allowing form authors to say that a given role can read the data but not update it, as is the case for the &lt;i&gt;clerk&lt;/i&gt; role in the screenshot below.&lt;/p&gt;

&lt;img style="display: block; margin: auto; border: none; box-shadow: none" src="http://4.bp.blogspot.com/-qMNPRkSKc4k/UWS3OMyzPoI/AAAAAAAAE14/sQWu2DXNorI/s1600/Screen+Shot+2013-04-09+at+5.37.01+PM.png" /&gt;

&lt;p&gt;This feature will be in the upcoming 4.1 release, and you can already try it today in the &lt;a href="/2013/03/orbeon-forms-41-m1.html"&gt;4.1 M1&lt;/a&gt; milestone build.&lt;/p&gt;&lt;img src="http://feeds.feedburner.com/~r/xml-web-apps/~4/y08IQ3k3aGE" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://blog.orbeon.com/feeds/805588811454149556/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://blog.orbeon.com/2013/04/making-distinction-between-read-and.html#comment-form" title="0 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/6819462794293857673/posts/default/805588811454149556" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/6819462794293857673/posts/default/805588811454149556" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/xml-web-apps/~3/y08IQ3k3aGE/making-distinction-between-read-and.html" title="Making a distinction between the &quot;read&quot; and &quot;update&quot; permissions" /><author><name>Alessandro Vernet</name><uri>http://www.blogger.com/profile/06085176014230803685</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="32" height="32" src="http://farm1.static.flickr.com/122/269903379_c4b40a3570.jpg" /></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="http://4.bp.blogspot.com/-qMNPRkSKc4k/UWS3OMyzPoI/AAAAAAAAE14/sQWu2DXNorI/s72-c/Screen+Shot+2013-04-09+at+5.37.01+PM.png" height="72" width="72" /><thr:total>0</thr:total><feedburner:origLink>http://blog.orbeon.com/2013/04/making-distinction-between-read-and.html</feedburner:origLink></entry><entry><id>tag:blogger.com,1999:blog-6819462794293857673.post-4514311851303585043</id><published>2013-04-04T22:59:00.001-07:00</published><updated>2013-04-04T23:00:37.060-07:00</updated><title type="text">Let Charles help you monitor HTTP requests</title><content type="html">&lt;a href="http://www.charlesproxy.com/"&gt;&lt;img style="border: none; box-shadow: none; float: right" src="http://2.bp.blogspot.com/-XkYnFMjPPlQ/UV5Y3aL2d4I/AAAAAAAAE1o/MuqLzG3hY8E/s320/charles.png" /&gt;&lt;/a&gt;

&lt;p&gt;You often need to monitor HTTP requests, be it from your browser to the server, or from the server to backend services. You can &lt;a href="http://wiki.orbeon.com/forms/doc/developer-guide/xforms-logging"&gt;setup Orbeon Forms to log&lt;/a&gt; the body of Ajax requests and responses, as well as the body of requests and responses Orbeon Forms makes to backend services. All that information goes into a log file, in which it is sometimes hard to quickly find what you're looking for, and a software specifically designed to help you monitor HTTP requests can often show this information in a better way.&lt;/p&gt;

&lt;p&gt;For this, until recently, I've been recommending (and myself using) the OS X app &lt;a href="http://www.tuffcode.com/"&gt;HTTP Scoop&lt;/a&gt;. If not on OS X, I pointed folks to &lt;a href="http://wiki.orbeon.com/forms/doc/developer-guide/admin/monitoring-http-requests#TOC-WireShark"&gt;WireShark&lt;/a&gt;, which is extremely powerful, but also rather hard to use. I recently discovered &lt;a href="http://www.charlesproxy.com/"&gt;Charles&lt;/a&gt;, have been using it full time for the last week, and now wholeheartedly recommend it. It is simple to use, like HTTP Scoop, but runs on Windows and Linux, and provides lots of additional features. You can download a 30-day trial, and it costs $50 after that.&lt;/p&gt;

&lt;p&gt;Unlike HTTP Scoop or WireShark, Charles works as a proxy; this means that apps need to be configured to go through that proxy instead of connecting directly to the server. On OS X and Windows, Charles &lt;a href="http://www.charlesproxy.com/documentation/configuration/browser-and-system-configuration/"&gt;registers itself as a proxy with the system&lt;/a&gt;, and so requests from browsers that honor that system configuration will automatically go through Charles, which is the case with Chrome, Safari, and IE. Firefox doesn't use the proxy setup done at the system level, but Charles comes with a Firefox add-on which makes this setup for you.&lt;/p&gt;

&lt;p&gt;Next, so Charles can also intercept HTTP requests made by Orbeon Forms, typically to backend services, you'll want to add the following two properties to your &lt;a href="http://wiki.orbeon.com/forms/doc/developer-guide/configuration-properties"&gt;properties-local.xml&lt;/a&gt;.&lt;/p&gt;

&lt;pre&gt;&lt;code&gt;&amp;lt;property as="xs:string"  name="oxf.http.proxy.host" value="localhost"/&gt;
&amp;lt;property as="xs:integer" name="oxf.http.proxy.port" value="8888"/&gt;&lt;/code&gt;&lt;/pre&gt;

&lt;p&gt;As a side-note, Charles is developed by &lt;a href="https://twitter.com/avon"&gt;Karl von Randow&lt;/a&gt;, who also develops &lt;a href="http://campl.us/"&gt;Camera+&lt;/a&gt;, my favorite iPhone app, which I pitched to many people as &lt;i&gt;what Apple's built-in Camera app should have been&lt;/i&gt;.&lt;/p&gt;&lt;img src="http://feeds.feedburner.com/~r/xml-web-apps/~4/ss16krZP9U8" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://blog.orbeon.com/feeds/4514311851303585043/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://blog.orbeon.com/2013/04/let-charles-help-you-monitor-http.html#comment-form" title="0 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/6819462794293857673/posts/default/4514311851303585043" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/6819462794293857673/posts/default/4514311851303585043" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/xml-web-apps/~3/ss16krZP9U8/let-charles-help-you-monitor-http.html" title="Let Charles help you monitor HTTP requests" /><author><name>Alessandro Vernet</name><uri>http://www.blogger.com/profile/06085176014230803685</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="32" height="32" src="http://farm1.static.flickr.com/122/269903379_c4b40a3570.jpg" /></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="http://2.bp.blogspot.com/-XkYnFMjPPlQ/UV5Y3aL2d4I/AAAAAAAAE1o/MuqLzG3hY8E/s72-c/charles.png" height="72" width="72" /><thr:total>0</thr:total><feedburner:origLink>http://blog.orbeon.com/2013/04/let-charles-help-you-monitor-http.html</feedburner:origLink></entry><entry><id>tag:blogger.com,1999:blog-6819462794293857673.post-1126963814518539610</id><published>2013-03-29T11:58:00.000-07:00</published><updated>2013-03-29T11:58:04.127-07:00</updated><title type="text">Orbeon Forms 4.1 M1</title><content type="html">Today we released Orbeon Forms 4.1 M1, a milestone build for the upcoming Orbeon Forms 4.1 release. This is &lt;b&gt;not a stable release&lt;/b&gt;.&lt;br /&gt;
&lt;br /&gt;
Here is the list of changes since 4.0.1:&lt;br /&gt;
&lt;ul&gt;
&lt;li&gt;Form Builder&lt;/li&gt;
&lt;ul&gt;
&lt;li&gt;Ability to enter HTML labels and hints in the builder (&lt;a href="https://github.com/orbeon/orbeon-forms/issues/870"&gt;#870&lt;/a&gt;)&lt;/li&gt;
&lt;li&gt;Introduce a distinction between the 'read' and 'update' permissions (&lt;a href="https://github.com/orbeon/orbeon-forms/issues/806"&gt;#806&lt;/a&gt;)&lt;/li&gt;
&lt;li&gt;Edit Source must not send data to server incrementally (&lt;a href="https://github.com/orbeon/orbeon-forms/issues/848"&gt;#848&lt;/a&gt;)&lt;/li&gt;
&lt;/ul&gt;
&lt;li&gt;Form Runner&lt;/li&gt;
&lt;ul&gt;
&lt;li&gt;Proxy portlet: ability to configure forwarding of headers and parameters (&lt;a href="https://github.com/orbeon/orbeon-forms/issues/886"&gt;#886&lt;/a&gt;)&lt;/li&gt;
&lt;/ul&gt;
&lt;li&gt;XForms engine&lt;/li&gt;
&lt;ul&gt;
&lt;li&gt;Use a single property for input/textarea string replacement (&lt;a href="https://github.com/orbeon/orbeon-forms/issues/867"&gt;#867&lt;/a&gt;)&lt;/li&gt;
&lt;li&gt;Non-relevant group around &amp;lt;li&amp;gt; with AVT doesn't place xforms-disabled (&lt;a href="https://github.com/orbeon/orbeon-forms/issues/889"&gt;#889&lt;/a&gt;)&lt;/li&gt;
&lt;li&gt;REGRESSION: Uploading large files causing "Got unexpected request sequence number" error (&lt;a href="https://github.com/orbeon/orbeon-forms/issues/894"&gt;#894&lt;/a&gt;)&lt;/li&gt;
&lt;li&gt;xf:case: xforms-case-selected/deselected are not placed on first delimiter (&lt;a href="https://github.com/orbeon/orbeon-forms/issues/893"&gt;#893&lt;/a&gt;)&lt;/li&gt;
&lt;li&gt;Fix basepath of TinyMCE (&lt;a href="https://github.com/orbeon/orbeon-forms/issues/896"&gt;#896&lt;/a&gt;)&lt;/li&gt;
&lt;/ul&gt;
&lt;ul&gt;
&lt;/ul&gt;
&lt;li&gt;Other&lt;/li&gt;
&lt;ul&gt;
&lt;li&gt;First automated client-side test using ScalaTest Selenium DSL&lt;/li&gt;
&lt;li&gt;Upgrade to Scala 2.10.1&lt;/li&gt;
&lt;/ul&gt;
&lt;/ul&gt;
You can download the builds using these links:&lt;br /&gt;
&lt;br /&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href="https://s3.amazonaws.com/orbeon-downloads/orbeon-4.1.0.M1.201303290130-PE.zip"&gt;orbeon-4.1.0.M1.201303290130-PE.zip&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://s3.amazonaws.com/orbeon-downloads/orbeon-4.1.0.M1.201303290115-CE.zip"&gt;orbeon-4.1.0.M1.201303290115-CE.zip&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;br /&gt;
Don't forget to &lt;a href="http://demo.orbeon.com/orbeon/fr/orbeon/register/new"&gt;grab a trial license&lt;/a&gt; for the PE version.&lt;br /&gt;
&lt;br /&gt;
Please send feedback:&lt;br /&gt;
&lt;ul&gt;
&lt;li&gt;via&amp;nbsp;&lt;a href="http://twitter.com/orbeon"&gt;twitter&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;to the &lt;a href="http://www.orbeon.com/community"&gt;discussion&lt;/a&gt; list&lt;/li&gt;
&lt;li&gt;or as comments on this blog entry&lt;/li&gt;
&lt;/ul&gt;
&lt;img src="http://feeds.feedburner.com/~r/xml-web-apps/~4/Oe2TjRgGOLY" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://blog.orbeon.com/feeds/1126963814518539610/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://blog.orbeon.com/2013/03/orbeon-forms-41-m1.html#comment-form" title="0 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/6819462794293857673/posts/default/1126963814518539610" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/6819462794293857673/posts/default/1126963814518539610" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/xml-web-apps/~3/Oe2TjRgGOLY/orbeon-forms-41-m1.html" title="Orbeon Forms 4.1 M1" /><author><name>Erik Bruchez</name><uri>http://www.blogger.com/profile/16139421434415219182</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="32" height="32" src="http://1.bp.blogspot.com/-8ltr6ezX1_I/UHBbhWdN8QI/AAAAAAAAAvg/wftQ4a7fHxU/s220/headshot_20120704%2B%2528square%2529.png" /></author><thr:total>0</thr:total><feedburner:origLink>http://blog.orbeon.com/2013/03/orbeon-forms-41-m1.html</feedburner:origLink></entry><entry><id>tag:blogger.com,1999:blog-6819462794293857673.post-1984168293071882404</id><published>2013-03-28T16:54:00.000-07:00</published><updated>2013-03-28T16:54:02.022-07:00</updated><title type="text">Iterating</title><content type="html">&lt;div style="text-align: right;"&gt;
&lt;/div&gt;
&lt;table cellpadding="0" cellspacing="0" class="tr-caption-container" style="float: right; margin-left: 1em; text-align: right;"&gt;&lt;tbody&gt;
&lt;tr&gt;&lt;td style="text-align: center;"&gt;&lt;a href="http://2.bp.blogspot.com/-iTQZzk82DK4/UVTWID9SChI/AAAAAAAAA2Q/WSHbSA6d7wo/s1600/bloom.jpg" imageanchor="1" style="clear: right; margin-bottom: 1em; margin-left: auto; margin-right: auto;"&gt;&lt;img border="0" src="http://2.bp.blogspot.com/-iTQZzk82DK4/UVTWID9SChI/AAAAAAAAA2Q/WSHbSA6d7wo/s1600/bloom.jpg" /&gt;&lt;/a&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class="tr-caption" style="text-align: center;"&gt;&lt;i&gt;Photo by&amp;nbsp;&lt;a href="http://www.flickr.com/photos/31917645@N06/3292822574/in/photostream/"&gt;hide99&lt;/a&gt;&lt;/i&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;/tbody&gt;&lt;/table&gt;
During the Orbeon Forms 4 development cycle, we released over 20 intermediate builds (including milestones, betas, and a release candidate - you can see them all &lt;a href="http://wiki.orbeon.com/forms/doc/developer-guide/release-notes/40#TOC-Historical-release-information"&gt;here&lt;/a&gt;). More often than not, we released one build per week. We have found that doing so was extremely positive:&lt;br /&gt;
&lt;br /&gt;
&lt;ul&gt;
&lt;li&gt;It helps maintain a great sense of progress and accomplishment.&lt;/li&gt;
&lt;li&gt;As each release is documented in a blog post, the outside world can also get a better sense of what's going on.&lt;/li&gt;
&lt;li&gt;Users can try out new features as they get implemented. (This is also possible with automated nightly builds, but those are not tested by&amp;nbsp;humans).&lt;/li&gt;
&lt;li&gt;Developers have to keep an eye on the current issues and features that need work.&lt;/li&gt;
&lt;li&gt;It is harder to postpone tasks such as testing and documentation (designing features and writing code is so much more fun!).&lt;/li&gt;
&lt;/ul&gt;
&lt;div&gt;
So the product, developers, and users all benefit and we really would like to keep doing this as we work towards the next stable releases of Orbeon Forms.&lt;/div&gt;
&lt;div&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div&gt;
But it goes further. As we are putting a &lt;a href="http://blog.orbeon.com/2013/03/automated-browser-testing-with-selenium.html"&gt;bigger emphasis on automated testing&lt;/a&gt;,&amp;nbsp;our ideal is that every feature that we implement and every bug we fix has an automated test, even if it involves some funky browser behavior. This will give us increased confidence that between two builds we don't have serious regressions.&lt;/div&gt;
&lt;div&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div&gt;
So we hope that this will enable us to iterate &lt;i&gt;stable builds&lt;/i&gt; much faster than in the past. And that would be really awesome!&lt;/div&gt;
&lt;img src="http://feeds.feedburner.com/~r/xml-web-apps/~4/pNyBBTTlfeg" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://blog.orbeon.com/feeds/1984168293071882404/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://blog.orbeon.com/2013/03/iterating.html#comment-form" title="0 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/6819462794293857673/posts/default/1984168293071882404" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/6819462794293857673/posts/default/1984168293071882404" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/xml-web-apps/~3/pNyBBTTlfeg/iterating.html" title="Iterating" /><author><name>Erik Bruchez</name><uri>http://www.blogger.com/profile/16139421434415219182</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="32" height="32" src="http://1.bp.blogspot.com/-8ltr6ezX1_I/UHBbhWdN8QI/AAAAAAAAAvg/wftQ4a7fHxU/s220/headshot_20120704%2B%2528square%2529.png" /></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="http://2.bp.blogspot.com/-iTQZzk82DK4/UVTWID9SChI/AAAAAAAAA2Q/WSHbSA6d7wo/s72-c/bloom.jpg" height="72" width="72" /><thr:total>0</thr:total><feedburner:origLink>http://blog.orbeon.com/2013/03/iterating.html</feedburner:origLink></entry><entry><id>tag:blogger.com,1999:blog-6819462794293857673.post-1717640542444934388</id><published>2013-03-25T11:41:00.001-07:00</published><updated>2013-03-25T11:41:05.395-07:00</updated><title type="text">Automated browser testing with Selenium on Travis-CI</title><content type="html">&lt;a href="http://goo.gl/ALUTk" imageanchor="1" style="float: right;"&gt;&lt;img border="0" src="http://goo.gl/Nb0AM" style="border: none; box-shadow: inherit;" /&gt;&lt;/a&gt;

&lt;p&gt;We've written before about the importance of having a set of comprehensive unit tests for Orbeon Forms. For instance, we put in place the necessary infrastructure to &lt;a href="http://goo.gl/PNEEV"&gt;test code in Scala&lt;/a&gt; back in 2011 and to &lt;a href="http://goo.gl/4wNLi"&gt;test XML pipelines&lt;/a&gt; back in 2005. With this, every time a check-in is made, a build is automatically created and 687 tests (and counting) are executed. If any test fails, we get a notification, and &lt;i&gt;fixing the build&lt;/i&gt; becomes our priority.&lt;/p&gt;

&lt;p&gt;But until now, we couldn't automatically run tests that requires a browser, which means that a significant portion of Orbeon Forms couldn't be automatically tested, including all our client-side code (JavaScript and CoffeeScript), interactions between client-side and server-side code, and higher level components such as Form Builder and Form Runner.&lt;/p&gt;

&lt;p&gt;We now have this infrastructure in place:&lt;p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;b&gt;Running the tests automatically&lt;/b&gt; – Everytime we do a check-in to &lt;a href="http://goo.gl/mchVN"&gt;our Github repository&lt;/a&gt;, &lt;a href="http://goo.gl/zDplk"&gt;Travis-CI&lt;/a&gt; checks the code out, compiles the code, runs the tests, and sends us an email if any test fails.&lt;/li&gt;
&lt;li&gt;&lt;b&gt;Running Tomcat from Ant&lt;/b&gt; – We still use&lt;sup&gt;1&lt;/sup&gt; the venerable Ant as our build system, so it is up to Ant to compile the code and run the tests. The new tests require a server to run, and for that we use Tomcat. During the build, we install Tomcat in the build directory, and configure it to pick up its configuration files from &lt;code&gt;test/catalina_base&lt;/code&gt;, by setting the &lt;code&gt;catalina.base&lt;/code&gt; property. Tomcat needs to run in parallel with the tests, which we do with Ant's &lt;a href="http://goo.gl/BTmTv"&gt;Parallel task&lt;/a&gt;. Before running the tests we need to make sure Tomcat is successfully started, which can be done very easily with Ant's &lt;a href="http://goo.gl/1bPnW"&gt;Waitfor&lt;/a&gt; task. To see how this is done, check the &lt;code&gt;target name="test"&lt;/code&gt; in our &lt;a href="http://goo.gl/f72mS"&gt;build.xml&lt;/a&gt;.&lt;/li&gt;
&lt;li&gt;&lt;b&gt;Starting a browser&lt;/b&gt; – Our tests run in a real browser: Firefox&lt;sup&gt;2&lt;/sup&gt;. Since the test machine isn't connected to an actual screen, we run &lt;a href="http://goo.gl/Sm7j"&gt;Xvfb&lt;/a&gt; through our &lt;a href="http://goo.gl/6Aq82"&gt;.travis.yml&lt;/a&gt;.&lt;/li&gt;
&lt;li&gt;&lt;b&gt;Writing the tests&lt;/b&gt; – To drive Firefox, we use &lt;a href="http://goo.gl/EaPwv"&gt;Selenium 2 with WebDriver&lt;/a&gt;. Our tests are written in Scala, with &lt;a href="http://goo.gl/2ZJrV"&gt;ScalaTest&lt;/a&gt; and its &lt;a href="http://goo.gl/NXGlG"&gt;Selenium DSL&lt;/a&gt;.&lt;/li&gt;
&lt;/ul&gt;

&lt;hr&gt;
&lt;ol&gt;
&lt;li&gt;And in case reading that we are still building on Ant makes you worry about our sanity, rest assured that we are thinking of moving to a more modern build system, like &lt;a href="http://goo.gl/7Lngm"&gt;sbt&lt;/a&gt;.&lt;/li&gt;
&lt;li&gt;&lt;a href="http://goo.gl/hncpD"&gt;ChromeDriver&lt;/a&gt; currently can't be used on Tavis-CI as &lt;a href="http://goo.gl/a1nV4"&gt;Chrome does not work in an OpenVZ container&lt;/a&gt;, which is used by Travis-CI. But in the future, while still using Travis-CI, we might run the tests on more browsers through &lt;a href="http://goo.gl/vqyGM"&gt;Sauce&lt;/a&gt;.&lt;/li&gt;
&lt;/ol&gt;&lt;img src="http://feeds.feedburner.com/~r/xml-web-apps/~4/ZcpXfppKGBo" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://blog.orbeon.com/feeds/1717640542444934388/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://blog.orbeon.com/2013/03/automated-browser-testing-with-selenium.html#comment-form" title="0 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/6819462794293857673/posts/default/1717640542444934388" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/6819462794293857673/posts/default/1717640542444934388" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/xml-web-apps/~3/ZcpXfppKGBo/automated-browser-testing-with-selenium.html" title="Automated browser testing with Selenium on Travis-CI" /><author><name>Alessandro Vernet</name><uri>http://www.blogger.com/profile/06085176014230803685</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="32" height="32" src="http://farm1.static.flickr.com/122/269903379_c4b40a3570.jpg" /></author><thr:total>0</thr:total><feedburner:origLink>http://blog.orbeon.com/2013/03/automated-browser-testing-with-selenium.html</feedburner:origLink></entry><entry><id>tag:blogger.com,1999:blog-6819462794293857673.post-9034308475084034413</id><published>2013-03-18T11:58:00.000-07:00</published><updated>2013-03-20T20:16:57.734-07:00</updated><title type="text">Orbeon Forms 4.0.1</title><content type="html">Today we released Orbeon Forms 4.0.1, a bug-fix and performance release.&lt;br /&gt;
&lt;br /&gt;
Here is the list of changes since 4.0.0:&lt;br /&gt;
&lt;ul&gt;
&lt;li&gt;Form Builder&lt;/li&gt;
&lt;ul&gt;
&lt;li&gt;Open/close state of existing sections is lost when inserting new sections (&lt;a href="https://github.com/orbeon/orbeon-forms/issues/177"&gt;#177&lt;/a&gt;)&lt;/li&gt;
&lt;li&gt;Itemset editor: fixup label/value if needed (&lt;a href="https://github.com/orbeon/orbeon-forms/issues/830"&gt;#830&lt;/a&gt;)&lt;/li&gt;
&lt;li&gt;Close large form sections upon load to improve performance (&lt;a href="https://github.com/orbeon/orbeon-forms/issues/838"&gt;#838&lt;/a&gt;)&lt;/li&gt;
&lt;li&gt;CodeMirror gets unusably slow with very large forms (&lt;a href="https://github.com/orbeon/orbeon-forms/issues/840"&gt;#840&lt;/a&gt;)&lt;/li&gt;
&lt;li&gt;Service body lost after hitting save (&lt;a href="https://github.com/orbeon/orbeon-forms/issues/859"&gt;#859&lt;/a&gt;)&lt;/li&gt;
&lt;li&gt;Validation Properties shows, but doesn't contain properties (&lt;a href="https://github.com/orbeon/orbeon-forms/issues/861"&gt;#861&lt;/a&gt;)&lt;/li&gt;
&lt;/ul&gt;
&lt;li&gt;Form Runner&lt;/li&gt;
&lt;ul&gt;
&lt;li&gt;fr:section shows closed arrow when becoming relevant (&lt;a href="https://github.com/orbeon/orbeon-forms/issues/862"&gt;#862&lt;/a&gt;)&lt;/li&gt;
&lt;li&gt;Empty, non-closable dialog upon PDF error (&lt;a href="https://github.com/orbeon/orbeon-forms/issues/864"&gt;#864&lt;/a&gt;)&lt;/li&gt;
&lt;li&gt;Property to allow PDF generation even if form is invalid (&lt;a href="https://github.com/orbeon/orbeon-forms/issues/871"&gt;#871&lt;/a&gt;)&lt;/li&gt;
&lt;/ul&gt;
&lt;li&gt;XForms engine&lt;/li&gt;
&lt;ul&gt;
&lt;li&gt;MIP evaluations are slow with many bind/@name (&lt;a href="https://github.com/orbeon/orbeon-forms/issues/834"&gt;#834&lt;/a&gt;)&lt;/li&gt;
&lt;li&gt;Failing constraint should default to false() (&lt;a href="https://github.com/orbeon/orbeon-forms/issues/835"&gt;#835&lt;/a&gt;)&lt;/li&gt;
&lt;li&gt;Support for XPath id() function (&lt;a href="https://github.com/orbeon/orbeon-forms/issues/836"&gt;#836&lt;/a&gt;)&lt;/li&gt;
&lt;li&gt;Support xxforms-replace event (&lt;a href="https://github.com/orbeon/orbeon-forms/issues/837"&gt;#837&lt;/a&gt;)&lt;/li&gt;
&lt;li&gt;Order XBL JS and CSS resources in consistent order (&lt;a href="https://github.com/orbeon/orbeon-forms/issues/844"&gt;#844&lt;/a&gt;)&lt;/li&gt;
&lt;li&gt;Can't access event('response-body') if debugging is disabled (&lt;a href="https://github.com/orbeon/orbeon-forms/issues/863"&gt;#863&lt;/a&gt;)&lt;/li&gt;
&lt;li&gt;Value of xf:textarea mediatype="text/html" not updated on "switch" (&lt;a href="https://github.com/orbeon/orbeon-forms/issues/868"&gt;#868&lt;/a&gt;)&lt;/li&gt;
&lt;li&gt;AssertionError upon xforms-submit-error (&lt;a href="https://github.com/orbeon/orbeon-forms/issues/876"&gt;#876&lt;/a&gt;)&lt;/li&gt;
&lt;li&gt;Configurable xf:input/xf:textarea string replacement (&lt;a href="https://github.com/orbeon/orbeon-forms/issues/855"&gt;#855&lt;/a&gt;/&lt;a href="https://github.com/orbeon/orbeon-forms/issues/867"&gt;#867&lt;/a&gt;)&lt;/li&gt;
&lt;li&gt;Lightweight syntax for HTML LHHA (&lt;a href="https://github.com/orbeon/orbeon-forms/issues/874"&gt;#874&lt;/a&gt;)&lt;/li&gt;
&lt;/ul&gt;
&lt;ul&gt;
&lt;/ul&gt;
&lt;li&gt;Other&lt;/li&gt;
&lt;ul&gt;
&lt;li&gt;Blank page-public-methods property causes default to GET HEAD (&lt;a href="https://github.com/orbeon/orbeon-forms/issues/865"&gt;#865&lt;/a&gt;)&lt;/li&gt;
&lt;/ul&gt;
&lt;/ul&gt;
You can download the latest version of Orbeon Forms from the&amp;nbsp;&lt;a href="http://www.orbeon.com/download"&gt;downloads&lt;/a&gt; page.&lt;br /&gt;
&lt;br /&gt;
Please send feedback:&lt;br /&gt;
&lt;ul&gt;
&lt;li&gt;via&amp;nbsp;&lt;a href="http://twitter.com/orbeon"&gt;twitter&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;to the &lt;a href="http://www.orbeon.com/community"&gt;ops-users&lt;/a&gt; list&lt;/li&gt;
&lt;li&gt;or as comments on this blog entry&lt;/li&gt;
&lt;/ul&gt;
&lt;img src="http://feeds.feedburner.com/~r/xml-web-apps/~4/oldVdrqjGEQ" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://blog.orbeon.com/feeds/9034308475084034413/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://blog.orbeon.com/2013/03/orbeon-forms-401.html#comment-form" title="0 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/6819462794293857673/posts/default/9034308475084034413" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/6819462794293857673/posts/default/9034308475084034413" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/xml-web-apps/~3/oldVdrqjGEQ/orbeon-forms-401.html" title="Orbeon Forms 4.0.1" /><author><name>Erik Bruchez</name><uri>http://www.blogger.com/profile/16139421434415219182</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="32" height="32" src="http://1.bp.blogspot.com/-8ltr6ezX1_I/UHBbhWdN8QI/AAAAAAAAAvg/wftQ4a7fHxU/s220/headshot_20120704%2B%2528square%2529.png" /></author><thr:total>0</thr:total><feedburner:origLink>http://blog.orbeon.com/2013/03/orbeon-forms-401.html</feedburner:origLink></entry><entry><id>tag:blogger.com,1999:blog-6819462794293857673.post-741190629413574910</id><published>2013-03-13T13:36:00.000-07:00</published><updated>2013-03-13T13:36:41.928-07:00</updated><title type="text">Dropdown populated based on values from another form</title><content type="html">&lt;a href="http://2.bp.blogspot.com/-Kw6JvGIB1-M/UT-kaW3CH6I/AAAAAAAAE0s/o2oDciGo45w/s1600/contact-dropdown.png" imageanchor="1"  style="float: right; margin: 0 0 1em 1em"&gt;&lt;img border="0" src="http://2.bp.blogspot.com/-Kw6JvGIB1-M/UT-kaW3CH6I/AAAAAAAAE0s/o2oDciGo45w/s320/contact-dropdown.png" /&gt;&lt;/a&gt;

&lt;p&gt;Say you created two forms with Form Builder: a &lt;i&gt;contact form&lt;/i&gt; and a &lt;i&gt;phone call form&lt;/i&gt;. In the phone call form, you use one of the fields to capture the name of the person you'll have a call with. Instead of using a text field, you'd like to have a dropdown, with the values in the dropdown coming from values previously captured with the &lt;i&gt;contact form&lt;/i&gt;.&lt;/p&gt;

&lt;p&gt;Form Builder doesn't come, out-of-the-box, with a way to link forms in the manner described above. However, this is something that you can do with Form Builder's &lt;i&gt;Services &amp; Actions&lt;/i&gt;. The idea goes as follows:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Write a query retrieving the contact names captured with the contact form. The query will differ depending on the persistence layer you're using: it will be in XQuery if you're storing data in eXist, or SQL if you're storing data in Oracle or MySQL.&lt;/li&gt;
&lt;li&gt;Create a &lt;i&gt;service&lt;/i&gt; that runs this query. It will be either an HTTP service (to run XQuery) or a database service (to run SQL).&lt;/li&gt;
&lt;li&gt;Add a dropdown to your form.&lt;/li&gt;
&lt;li&gt;Create an &lt;i&gt;action&lt;/i&gt; that runs the service on form load, and use the result to populate the dropdown.&lt;/li&gt;
&lt;/ol&gt;

&lt;h4&gt;The query&lt;/h4&gt;

&lt;p&gt;For the purpose of this post, we'll assume data is stored in eXist, which is bundled with Orbeon Forms, and we'll query data in the &lt;i&gt;contact form&lt;/i&gt;, which is one of the sample forms. Since we're querying eXist, we're using XQuery:&lt;/p&gt;

&lt;pre&gt;&lt;code&gt;for $c in /form/contact return element contact {
    element label {concat($c/first-name, ' ', $c/last-name)},
    element value {tokenize(util:collection-name($c), '/')[last()]}
}&lt;/code&gt;&lt;/pre&gt;

&lt;p&gt;This query returns one &lt;code&gt;&amp;lt;contact&gt;&lt;/code&gt; element per entry in the contact form, with for each one, the person name (to be shown in the dropdown) and an id (stored in form data, so we can link a phone call with a person). The root element of data captured with forms you create with Form Builder is always &lt;code&gt;&amp;lt;form&gt;&lt;/code&gt; and in the &lt;i&gt;contact form&lt;/i&gt; the first/last name are in a section named &lt;code&gt;contact&lt;/code&gt;, so the query iterates over &lt;code&gt;/form/contact&lt;/code&gt;. Also note how the query retrieves the document id in which a node &lt;code&gt;$c&lt;/code&gt; is stored with &lt;code&gt;tokenize(util:collection-name($c), '/')[last()]&lt;/code&gt;. With this, the query returns &lt;code&gt;&amp;lt;contact&gt;&lt;/code&gt; elements that look like:&lt;/p&gt;

&lt;pre&gt;&lt;code&gt;&amp;lt;contact&gt;
    &amp;lt;label&gt;Homer Simpson&amp;lt;/label&gt;
    &amp;lt;value&gt;9eff349bfd95aab8d4d5e048bd25a815&amp;lt;/value&gt;
&amp;lt;/contact&gt;
&amp;lt;contact&gt;
    &amp;lt;label&gt;Charles Burns&amp;lt;/label&gt;
    &amp;lt;value&gt;138b27e80eefc3f0429a3d14cbc77df527630787&amp;lt;/value&gt;
&amp;lt;/contact&gt;
...&lt;/code&gt;&lt;/pre&gt;

&lt;h4&gt;The service&lt;/h4&gt;

&lt;p&gt;You can pick a name for the service, say &lt;code&gt;get-contacts&lt;/code&gt;. The URL should point to the contact form, as it is stored in eXist. With the embedded eXist, if Orbeon Forms is deployed on &lt;code&gt;http://localhost:8080/orbeon&lt;/code&gt; then the URL pointing to the contact form will be (here the URL is split in two lines for formatting, when pasting it in Form Builder put it on one line with no spaces):&lt;/p&gt;

&lt;a style="float: right; margin: 0 0 1em 1em" href="http://4.bp.blogspot.com/-80V47_kb9j4/UT-tdXVt0lI/AAAAAAAAE08/ISS88uRTExQ/s1600/action.png" imageanchor="1" &gt;&lt;img border="0" src="http://4.bp.blogspot.com/-80V47_kb9j4/UT-tdXVt0lI/AAAAAAAAE08/ISS88uRTExQ/s320/action.png" /&gt;&lt;/a&gt;

&lt;pre&gt;&lt;code&gt;http://localhost:8080/orbeon
  /exist/rest/db/orbeon/fr/orbeon/contact/data&lt;/code&gt;&lt;/pre&gt;

&lt;p&gt;The service POSTs and XML document as follows, with the XQuery above within the &lt;code&gt;&amp;lt;exist:text&gt;&lt;/code&gt; element.&lt;/p&gt;

&lt;pre&gt;&lt;code&gt;&amp;lt;exist:query xmlns:exist="http://exist.sourceforge.net/NS/exist" max="0"&gt;
  &amp;lt;exist:text&gt; ... &amp;lt;/exist:text&gt;
&amp;lt;/exist:query&gt;&lt;/code&gt;&lt;/pre&gt;

&lt;h4&gt;The action&lt;/h4&gt;

&lt;p&gt;Finally, the action calls the service on form load, and uses the result to populate the dropdown, as shown in the screenshot on the right (click it to see a larger version). Click the &lt;i&gt;test&lt;/i&gt; button, and you'll see how the dropdown populates with values entered previously in your contact form.&lt;/p&gt;

&lt;h4&gt;Wrapping it up&lt;/h4&gt;

&lt;p&gt;Since populating a dropdown with values from another form at this point isn't supported out-of-the-box by Form Builder, to do so you need to write a query against the database and use services and actions to run the query and populate the dropdown. While this isn't as simple as we'd like it to be, and future versions of Orbeon Forms might make this process simpler, it is already something that you can do today, and it goes to show the flexibility of the services and actions feature, which allows you to query existing data, whether it has been captured with a form you created with Form Builder or by some other mean.&lt;/p&gt;&lt;img src="http://feeds.feedburner.com/~r/xml-web-apps/~4/CmACIXFIphA" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://blog.orbeon.com/feeds/741190629413574910/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://blog.orbeon.com/2013/03/dropdown-populated-based-on-values-from.html#comment-form" title="0 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/6819462794293857673/posts/default/741190629413574910" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/6819462794293857673/posts/default/741190629413574910" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/xml-web-apps/~3/CmACIXFIphA/dropdown-populated-based-on-values-from.html" title="Dropdown populated based on values from another form" /><author><name>Alessandro Vernet</name><uri>http://www.blogger.com/profile/06085176014230803685</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="32" height="32" src="http://farm1.static.flickr.com/122/269903379_c4b40a3570.jpg" /></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="http://2.bp.blogspot.com/-Kw6JvGIB1-M/UT-kaW3CH6I/AAAAAAAAE0s/o2oDciGo45w/s72-c/contact-dropdown.png" height="72" width="72" /><thr:total>0</thr:total><feedburner:origLink>http://blog.orbeon.com/2013/03/dropdown-populated-based-on-values-from.html</feedburner:origLink></entry><entry><id>tag:blogger.com,1999:blog-6819462794293857673.post-7875295024106798361</id><published>2013-03-12T14:42:00.001-07:00</published><updated>2013-03-12T14:44:52.406-07:00</updated><title type="text">Announcing Orbeon Forms 4.0</title><content type="html">After more than 2000 commits, 19 milestone builds, 3 betas, and one release candidate, we are proud to announce the final release of Orbeon Forms 4.0!&lt;br /&gt;
&lt;br /&gt;
As a goal for 4.0 we wanted to create a release we care about, on the outside as well as the inside. So in this release, in addition to new features and bug-fixes, we have fixed countless UI issues, refactored a lot of code, and thought a lot about architecture.&lt;br /&gt;
&lt;br /&gt;
So what's new since the last major version, Orbeon Forms 3.9? The answer is: a whole lot!&lt;br /&gt;
&lt;br /&gt;
&lt;b&gt;1. A brand new look&lt;/b&gt;&lt;br /&gt;
&lt;br /&gt;
Let's start with one of the most obvious changes. Form Runner and Form Builder feature a new look based on &lt;a href="http://twitter.github.com/bootstrap/"&gt;Twitter Bootstrap&lt;/a&gt;. Forms are more pleasant out of the box, and chances are that more developers will be familiar with Bootstrap when customization is desired.&lt;br /&gt;
&lt;br /&gt;
&lt;table align="center" cellpadding="0" cellspacing="0" class="tr-caption-container" style="margin-left: auto; margin-right: auto; text-align: center;"&gt;&lt;tbody&gt;
&lt;tr&gt;&lt;td style="text-align: center;"&gt;&lt;a href="http://4.bp.blogspot.com/-EfWUQHAMDLw/USpkPRcZDlI/AAAAAAAAA0c/_-tEsq8urzM/s1600/controls.png" imageanchor="1" style="margin-left: auto; margin-right: auto;"&gt;&lt;img border="0" height="393" src="http://4.bp.blogspot.com/-EfWUQHAMDLw/USpkPRcZDlI/AAAAAAAAA0c/_-tEsq8urzM/s640/controls.png" width="640" /&gt;&lt;/a&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class="tr-caption" style="text-align: center;"&gt;&lt;i&gt;New look and feel with Bootstrap&lt;/i&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;/tbody&gt;&lt;/table&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;b&gt;2. Security and access control&lt;/b&gt;&lt;br /&gt;
&lt;br /&gt;
Orbeon Forms 4.0 introduces many security improvements:&lt;br /&gt;
&lt;ul&gt;
&lt;li&gt;All services are protected by default.&lt;/li&gt;
&lt;li&gt;The built-in eXist database is protected by default.&lt;/li&gt;
&lt;li&gt;All uses of cryptographic algorithms&amp;nbsp;have been reviewed and improved (&lt;a href="http://blog.orbeon.com/2012/08/more-security-improvements.html"&gt;blog post&lt;/a&gt;).&lt;/li&gt;
&lt;li&gt;File uploads are&amp;nbsp;now tamper-resistant (&lt;a href="http://blog.orbeon.com/2012/06/more-secure-file-uploads.html"&gt;blog post&lt;/a&gt;).&lt;/li&gt;
&lt;li&gt;Ajax requests are better protected against DOS attacks.&lt;/li&gt;
&lt;li&gt;Processing and loading of external DTDs when XML validation is turned off (which is in most cases) is disabled by default.&lt;/li&gt;
&lt;li&gt;The product version number is hidden by default.&lt;/li&gt;
&lt;li&gt;You can protect your Form Runner forms with a&amp;nbsp;captcha (reCAPTCHA or SimpleCaptcha) (&lt;a href="http://wiki.orbeon.com/forms/doc/developer-guide/configuration-properties/configuration-properties-form-runner#TOC-Captcha"&gt;documentation&lt;/a&gt;,&amp;nbsp;&lt;a href="http://blog.orbeon.com/2011/12/stop-spammer-by-adding-captcha-to-your.html"&gt;blog post&lt;/a&gt;).&lt;/li&gt;
&lt;li&gt;Form Builder supports setting fine-grained CRUD permissions for individual forms (&lt;a href="http://blog.orbeon.com/2012/05/forms-access-control-with-form-builder.html"&gt;blog post&lt;/a&gt;).&lt;/li&gt;
&lt;/ul&gt;
&lt;br /&gt;
&lt;b&gt;3. Repeats in Form Builder&lt;/b&gt;&lt;br /&gt;
&lt;br /&gt;
This is one of the most important features of the release: Form Builder now supports grids with repeated rows. See this &lt;a href="http://blog.orbeon.com/2012/04/support-for-repeats-lands-in-form.html"&gt;blog post&lt;/a&gt; which introduces the feature.&lt;br /&gt;
&lt;br /&gt;
&lt;table align="center" cellpadding="0" cellspacing="0" class="tr-caption-container" style="margin-left: auto; margin-right: auto; text-align: center;"&gt;&lt;tbody&gt;
&lt;tr&gt;&lt;td style="text-align: center;"&gt;&lt;a href="http://2.bp.blogspot.com/-cjgLJ5MlrjM/URVWEmU4NKI/AAAAAAAAAzw/leyzO6FiVN0/s1600/out.png" imageanchor="1" style="margin-left: auto; margin-right: auto;"&gt;&lt;img border="0" height="262" src="http://2.bp.blogspot.com/-cjgLJ5MlrjM/URVWEmU4NKI/AAAAAAAAAzw/leyzO6FiVN0/s640/out.png" width="640" /&gt;&lt;/a&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class="tr-caption" style="text-align: center;"&gt;&lt;i&gt;Example of repeated content&lt;/i&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;/tbody&gt;&lt;/table&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;b&gt;4. Nested sections and live controls in Form Builder&lt;/b&gt;&lt;br /&gt;
&lt;br /&gt;
Under the hood, Form Builder had major architecture changes. In 4.0, everything you see in the builder is &lt;i&gt;dynamic&lt;/i&gt;. This allowed us to add support for nested sections, and also to let controls (including your own custom controls built with XBL) appear in the builder as they will when the form is deployed. This is also a strong foundation for future improvements to the builder.&lt;br /&gt;
&lt;br /&gt;
&lt;table align="center" cellpadding="0" cellspacing="0" class="tr-caption-container" style="margin-left: auto; margin-right: auto; text-align: center;"&gt;&lt;tbody&gt;
&lt;tr&gt;&lt;td style="text-align: center;"&gt;&lt;a href="http://4.bp.blogspot.com/-5zFlJBzjWME/UT9pksKDYSI/AAAAAAAAA0w/ikYv6dOKgzE/s1600/Screen+Shot+2013-03-12+at+10.42.49+AM.png" imageanchor="1" style="margin-left: auto; margin-right: auto;"&gt;&lt;img border="0" height="287" src="http://4.bp.blogspot.com/-5zFlJBzjWME/UT9pksKDYSI/AAAAAAAAA0w/ikYv6dOKgzE/s640/Screen+Shot+2013-03-12+at+10.42.49+AM.png" width="640" /&gt;&lt;/a&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class="tr-caption" style="text-align: center;"&gt;&lt;i&gt;Examples of XBL controls at design time&lt;/i&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;/tbody&gt;&lt;/table&gt;
&lt;br /&gt;
&lt;b&gt;5. Multi-page "wizard" view&lt;/b&gt;&lt;br /&gt;
&lt;br /&gt;
The wizard view is a nice new way to present a form to the user, as a sequence of multiple screens. In fact, chances are you will want this mode for most forms! See&amp;nbsp;&lt;a href="http://blog.orbeon.com/2012/12/form-runner-wizard-view.html"&gt;this blog post&lt;/a&gt;&amp;nbsp;which introduces the feature.&lt;br /&gt;
&lt;br /&gt;
&lt;b&gt;6. Improved portal support&lt;/b&gt;&lt;br /&gt;
&lt;br /&gt;
Both the full portlet and the Form Runner proxy portlet have been improved and tested with Liferay 6.1 GA2. Other improvements include:&lt;br /&gt;
&lt;ul&gt;
&lt;li&gt;Liferay role and user information (including email and full name) is available to the full portlet (&lt;a href="http://wiki.orbeon.com/forms/doc/developer-guide/admin/deployment-portlet#TOC-Accessing-liferay-users-and-roles"&gt;documentation&lt;/a&gt;).&lt;/li&gt;
&lt;li&gt;The workflow-review/workflow-send buttons work with the Form Runner proxy portlet.&lt;/li&gt;
&lt;li&gt;The Orbeon Forms CSS is sandboxed so that the portal style is not impacted.&lt;/li&gt;
&lt;/ul&gt;
&lt;table align="center" cellpadding="0" cellspacing="0" class="tr-caption-container" style="margin-left: auto; margin-right: auto; text-align: center;"&gt;&lt;tbody&gt;
&lt;tr&gt;&lt;td style="text-align: center;"&gt;&lt;a href="http://3.bp.blogspot.com/-3qY_Z5iJgdM/UT97IbVeXhI/AAAAAAAAA1A/HbihSi_DWa0/s1600/Screen+Shot+2013-03-12+at+11.58.42+AM.png" imageanchor="1" style="margin-left: auto; margin-right: auto;"&gt;&lt;img border="0" height="496" src="http://3.bp.blogspot.com/-3qY_Z5iJgdM/UT97IbVeXhI/AAAAAAAAA1A/HbihSi_DWa0/s640/Screen+Shot+2013-03-12+at+11.58.42+AM.png" width="640" /&gt;&lt;/a&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class="tr-caption" style="text-align: center;"&gt;&lt;i&gt;Form Runner in Liferay 6.1&lt;/i&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;/tbody&gt;&lt;/table&gt;
&lt;br /&gt;
&lt;b&gt;7. New web site&lt;/b&gt;&lt;br /&gt;
&lt;br /&gt;
We have simplified and modernized our web site for the 4.0 release.&amp;nbsp;&lt;a href="http://www.orbeon.com/"&gt;Check it out&lt;/a&gt;! From there you can find out more about Orbeon Forms 4.0, how to try it out, and how to get support.&lt;br /&gt;
&lt;br /&gt;
&lt;b&gt;8. And much more&lt;/b&gt;&lt;br /&gt;
&lt;b&gt;&lt;br /&gt;&lt;/b&gt;
There are too many new features to describe in this post. For more details, see the &lt;a href="http://wiki.orbeon.com/forms/doc/developer-guide/release-notes/40"&gt;Orbeon Forms 4.0 release notes&lt;/a&gt;, which also covers backward compatibility.
&lt;br /&gt;
&lt;br /&gt;
&lt;div&gt;
We hope you enjoy this release!&lt;br /&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;img src="http://feeds.feedburner.com/~r/xml-web-apps/~4/EQoYYix5lQY" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://blog.orbeon.com/feeds/7875295024106798361/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://blog.orbeon.com/2013/03/announcing-orbeon-forms-40.html#comment-form" title="2 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/6819462794293857673/posts/default/7875295024106798361" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/6819462794293857673/posts/default/7875295024106798361" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/xml-web-apps/~3/EQoYYix5lQY/announcing-orbeon-forms-40.html" title="Announcing Orbeon Forms 4.0" /><author><name>Erik Bruchez</name><uri>http://www.blogger.com/profile/16139421434415219182</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="32" height="32" src="http://1.bp.blogspot.com/-8ltr6ezX1_I/UHBbhWdN8QI/AAAAAAAAAvg/wftQ4a7fHxU/s220/headshot_20120704%2B%2528square%2529.png" /></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="http://4.bp.blogspot.com/-EfWUQHAMDLw/USpkPRcZDlI/AAAAAAAAA0c/_-tEsq8urzM/s72-c/controls.png" height="72" width="72" /><thr:total>2</thr:total><feedburner:origLink>http://blog.orbeon.com/2013/03/announcing-orbeon-forms-40.html</feedburner:origLink></entry><entry><id>tag:blogger.com,1999:blog-6819462794293857673.post-73486523965113484</id><published>2013-02-19T17:33:00.000-08:00</published><updated>2013-02-19T17:40:55.640-08:00</updated><title type="text">Faster XML search with the id() function</title><content type="html">&lt;div class="separator" style="clear: both; text-align: center;"&gt;
&lt;/div&gt;
&lt;table cellpadding="0" cellspacing="0" class="tr-caption-container" style="float: right; margin-left: 1em; text-align: right;"&gt;&lt;tbody&gt;
&lt;tr&gt;&lt;td style="text-align: center;"&gt;&lt;a href="http://3.bp.blogspot.com/-cwxvJSxLZPc/USQnDiYOzcI/AAAAAAAAA0I/5mZh5xYoBZk/s1600/drawers.jpg" imageanchor="1" style="clear: right; margin-bottom: 1em; margin-left: auto; margin-right: auto;"&gt;&lt;img border="0" src="http://3.bp.blogspot.com/-cwxvJSxLZPc/USQnDiYOzcI/AAAAAAAAA0I/5mZh5xYoBZk/s1600/drawers.jpg" /&gt;&lt;/a&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class="tr-caption" style="text-align: center;"&gt;&lt;i&gt;Photo by&amp;nbsp;&lt;a href="http://www.flickr.com/photos/jasonpearce/4327191474/"&gt;Jason Pearce&lt;/a&gt;&lt;/i&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;/tbody&gt;&lt;/table&gt;
&lt;p&gt;Consider the following XML document in an XForms instance:&lt;/p&gt;

&lt;pre&gt;&lt;code&gt;&amp;lt;xf:instance id=&amp;quot;my-book&amp;quot;&amp;gt;
    &amp;lt;book id=&amp;quot;simple_book&amp;quot;&amp;gt;
        &amp;lt;chapter id=&amp;quot;chapter_1&amp;quot;&amp;gt;
            &amp;lt;title&amp;gt;Chapter 1&amp;lt;/title&amp;gt;
            &amp;lt;para&amp;gt;Hello world!&amp;lt;/para&amp;gt;
        &amp;lt;/chapter&amp;gt;
        &amp;lt;chapter id=&amp;quot;chapter_2&amp;quot;&amp;gt;
            ...
        &amp;lt;/chapter&amp;gt;
    &amp;lt;/book&amp;gt;
&amp;lt;/xf:instance&amp;gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;p&gt;Some key elements in this document have &lt;code&gt;id&lt;/code&gt; attributes which identify the element they are placed on. This means that if you have the value of an id, you can find the associated element. For example the following XPath expression finds the second &lt;code&gt;chapter&lt;/code&gt; element:&lt;/p&gt;

&lt;pre&gt;&lt;code&gt;//*[@id = 'chapter_2']
&lt;/code&gt;&lt;/pre&gt;

&lt;p&gt;The downside of using plain XPath here is that if you have a very large document, the expression might have to scan large portions of the document, possily the entire document. This can be costly. In theory, the XPath engine can back the XML document with indexes, but this is typically done only by XML databases such as &lt;a href="http://exist-db.org/"&gt;eXist&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;However XPath &lt;a href="http://www.w3.org/TR/xpath-functions/#func-id"&gt;specifies&lt;/a&gt; an &lt;code&gt;id()&lt;/code&gt; function exactly for the purpose of improving on searching element with a given id. It is in fact very similar to the JavaScript &lt;code&gt;getElementById()&lt;/code&gt; function now implemented natively (and efficiently) by web browsers.&lt;/p&gt;

&lt;p&gt;The &lt;code&gt;id()&lt;/code&gt; function is not strictly required to be faster than a plain document scan, but it can obviously be backed by an index (a hash map), and this is exactly how we just &lt;a href="https://github.com/orbeon/orbeon-forms/commit/a1c86a4f13f78ea171df8bad3037d17941f55f64"&gt;implemented&lt;/a&gt; it!&lt;a href="#fn:1" id="fnref:1" title="see footnote" class="footnote"&gt;[1]&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;The index is enabled only for a specific instance with:&lt;/p&gt;

&lt;pre&gt;&lt;code&gt;&amp;lt;xf:instance id=&amp;quot;my-book&amp;quot; xxf:index=&amp;quot;id&amp;quot;&amp;gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;p&gt;When support is enabled for an instance, all ids are indexed the first time the &lt;code&gt;id()&lt;/code&gt; function is called. Then, for each mutation of the document (insertion, deletion, replacement, change of value), the index is updated. &lt;a href="#fn:2" id="fnref:2" title="see footnote" class="footnote"&gt;[2]&lt;/a&gt; At this time, only elements with a local name of &lt;code&gt;id&lt;/code&gt; are indexed. This covers plain &lt;code&gt;id&lt;/code&gt; and &lt;code&gt;xml:id&lt;/code&gt; attributes.&lt;a href="#fn:3" id="fnref:3" title="see footnote" class="footnote"&gt;[3]&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;You can use the &lt;code&gt;id()&lt;/code&gt; function this way:&lt;/p&gt;

&lt;pre&gt;&lt;code&gt;&amp;lt;xf:insert
  ref=&amp;quot;id('chapter_2', instance('my-book'))&amp;quot;
  origin=&amp;quot;xf:element('chapter', xf:attribute('id', 'chapter_3'))&amp;quot;/&amp;gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;p&gt;This XForms action inserts a new empty &lt;code&gt;chapter&lt;/code&gt; element with id &lt;code&gt;chapter_3&lt;/code&gt; after the &lt;code&gt;chapter&lt;/code&gt; element with id &lt;code&gt;chapter_2&lt;/code&gt;.&lt;/p&gt;

&lt;p&gt;Form Builder benefits from this change a lot, because:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;The entire form being edited is stored in an XForms instance.&lt;/li&gt;
&lt;li&gt;All controls and other important elements are assigned ids.&lt;/li&gt;
&lt;li&gt;Finding elements by id is a very common operation.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;This is available in nightly builds and will be part of Orbeon Forms 4.0.1.&lt;/p&gt;

&lt;div class="footnotes"&gt;
&lt;hr /&gt;
&lt;ol&gt;

&lt;li id="fn:1"&gt;
&lt;p&gt;Until this change, calling &lt;code&gt;id()&lt;/code&gt; on regular (not readonly) instances in Orbeon Forms always returned an empty result. However, calling it on readonly instances already behaved as expected, as we are relying on the Saxon &lt;code&gt;TinyTree&lt;/code&gt; implementation for readonly instances. &lt;a href="#fnref:1" title="return to article" class="reversefootnote"&gt;&amp;#160;&amp;#8617;&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;

&lt;li id="fn:2"&gt;
&lt;p&gt;The implementation is just slightly non-trivial, because the spec says that when more than one element has a given id, the first in document order must be returned. So we must properly track multiple ids for that reason. &lt;a href="#fnref:2" title="return to article" class="reversefootnote"&gt;&amp;#160;&amp;#8617;&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;

&lt;li id="fn:3"&gt;
&lt;p&gt;In theory, &lt;code&gt;id()&lt;/code&gt; must support any attribute or element with type &lt;code&gt;xs:ID&lt;/code&gt; but Orbeon Forms doesn&amp;#8217;t implement this yet. In the future, we might also support indexing elements by other aspects, such as CSS classes or element names, as HTML does. &lt;a href="#fnref:3" title="return to article" class="reversefootnote"&gt;&amp;#160;&amp;#8617;&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;

&lt;/ol&gt;
&lt;/div&gt;
&lt;img src="http://feeds.feedburner.com/~r/xml-web-apps/~4/-NuWWfqFNTk" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://blog.orbeon.com/feeds/73486523965113484/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://blog.orbeon.com/2013/02/faster-xml-search-with-id-function.html#comment-form" title="0 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/6819462794293857673/posts/default/73486523965113484" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/6819462794293857673/posts/default/73486523965113484" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/xml-web-apps/~3/-NuWWfqFNTk/faster-xml-search-with-id-function.html" title="Faster XML search with the id() function" /><author><name>Erik Bruchez</name><uri>http://www.blogger.com/profile/16139421434415219182</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="32" height="32" src="http://1.bp.blogspot.com/-8ltr6ezX1_I/UHBbhWdN8QI/AAAAAAAAAvg/wftQ4a7fHxU/s220/headshot_20120704%2B%2528square%2529.png" /></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="http://3.bp.blogspot.com/-cwxvJSxLZPc/USQnDiYOzcI/AAAAAAAAA0I/5mZh5xYoBZk/s72-c/drawers.jpg" height="72" width="72" /><thr:total>0</thr:total><feedburner:origLink>http://blog.orbeon.com/2013/02/faster-xml-search-with-id-function.html</feedburner:origLink></entry><entry><id>tag:blogger.com,1999:blog-6819462794293857673.post-6460531451238973119</id><published>2013-02-11T20:56:00.000-08:00</published><updated>2013-02-11T20:56:36.044-08:00</updated><title type="text">Orbeon Forms 4.0 RC1</title><content type="html">Today we released Orbeon Forms 4.0 Release Candidate 1 (RC1)! Like &lt;a href="http://blog.orbeon.com/2013/01/orbeon-forms-40-beta-3.html"&gt;4.0 Beta 3&lt;/a&gt;&amp;nbsp;and the previous milestone builds this is &lt;b&gt;not a final release&lt;/b&gt;, but we are really getting there!&lt;br /&gt;
&lt;br /&gt;
Here is the overall list of changes since Beta 3:&lt;br /&gt;
&lt;ul&gt;
&lt;li&gt;Form Builder&lt;/li&gt;
&lt;ul&gt;
&lt;li&gt;Edit Source: don't allow empty document (&lt;a href="https://github.com/orbeon/orbeon-forms/issues/815"&gt;#815&lt;/a&gt;)&lt;/li&gt;
&lt;li&gt;IE9: Buttons editors in Builder cause crash (&lt;a href="https://github.com/orbeon/orbeon-forms/issues/812"&gt;#812&lt;/a&gt;)&lt;/li&gt;
&lt;/ul&gt;
&lt;li&gt;Form Runner&lt;/li&gt;
&lt;ul&gt;
&lt;li&gt;Currency/number prefixes don't show in view mode (&lt;a href="https://github.com/orbeon/orbeon-forms/issues/783"&gt;#783&lt;/a&gt;)&lt;/li&gt;
&lt;li&gt;PDF template: xf:output not supported (&lt;a href="https://github.com/orbeon/orbeon-forms/issues/792"&gt;#792&lt;/a&gt;)&lt;/li&gt;
&lt;li&gt;Include W-9 sample form (&lt;a href="https://github.com/orbeon/orbeon-forms/issues/791"&gt;#791&lt;/a&gt;)&lt;/li&gt;
&lt;li&gt;Fix possible XPath error when saving attachments (&lt;a href="https://github.com/orbeon/orbeon-forms/commit/553c0d145cf6af737929be8f7d93ecfb65f4778c"&gt;553c0d145c&lt;/a&gt;)&lt;/li&gt;
&lt;li&gt;Samples: remove unneeded buttons (&lt;a href="https://github.com/orbeon/orbeon-forms/commit/686b9452645e930b2daaef652d97f568e961b3e6"&gt;686b945264&lt;/a&gt;)&lt;/li&gt;
&lt;li&gt;fr:grid doesn't evaluate remove-constraint in context of iteration (&lt;a href="https://github.com/orbeon/orbeon-forms/issues/795"&gt;#795&lt;/a&gt;)&lt;/li&gt;
&lt;li&gt;Controls form: i18n issue with section template (&lt;a href="https://github.com/orbeon/orbeon-forms/issues/738"&gt;#738&lt;/a&gt;)&lt;/li&gt;
&lt;li&gt;Controls form: Dynamic Data Dropdown needs some data (&lt;a href="https://github.com/orbeon/orbeon-forms/issues/650"&gt;#650&lt;/a&gt;)&lt;/li&gt;
&lt;li&gt;IE7: Navbar content misaligned in Noscript mode (&lt;a href="https://github.com/orbeon/orbeon-forms/issues/733"&gt;#733&lt;/a&gt;)&lt;/li&gt;
&lt;li&gt;Upgrade to TinyMCE 3.5.8 (&lt;a href="https://github.com/orbeon/orbeon-forms/commit/09b185a35cd27038d97eb9e86f786ded3659d476"&gt;09b185a35c&lt;/a&gt;)&lt;/li&gt;
&lt;li&gt;Toolbar images of the Formatted Text are not shown, under proxy portlet, on IE9 (&lt;a href="https://github.com/orbeon/orbeon-forms/issues/798"&gt;#798&lt;/a&gt;)&lt;/li&gt;
&lt;li&gt;View mode: incorrect breaking of text (&lt;a href="https://github.com/orbeon/orbeon-forms/issues/804"&gt;#804&lt;/a&gt;)&lt;/li&gt;
&lt;li&gt;Bootstrap and Orbeon styles have effect outside the portlet (&lt;a href="https://github.com/orbeon/orbeon-forms/issues/805"&gt;#805&lt;/a&gt;)&lt;/li&gt;
&lt;li&gt;MySQL: free text search search doesn't return any results (&lt;a href="https://github.com/orbeon/orbeon-forms/issues/821"&gt;#821&lt;/a&gt;)&lt;/li&gt;
&lt;li&gt;Captcha doesn't show (&lt;a href="https://github.com/orbeon/orbeon-forms/issues/822"&gt;#822&lt;/a&gt;)&lt;/li&gt;
&lt;li&gt;Recaptcha doesn't work anymore (&lt;a href="https://github.com/orbeon/orbeon-forms/issues/825"&gt;#825&lt;/a&gt;)&lt;/li&gt;
&lt;li&gt;IE9: fr:us-phone shows "undefined" in field (&lt;a href="https://github.com/orbeon/orbeon-forms/issues/810"&gt;#810&lt;/a&gt;)&lt;/li&gt;
&lt;li&gt;Lots of small CSS fixes&lt;/li&gt;
&lt;/ul&gt;
&lt;li&gt;XForms engine&lt;/li&gt;
&lt;ul&gt;
&lt;li&gt;Update of switch label with for updates wrong label (&lt;a href="https://github.com/orbeon/orbeon-forms/issues/793"&gt;#793&lt;/a&gt;)&lt;/li&gt;
&lt;li&gt;XPath error when hiding section (&lt;a href="https://github.com/orbeon/orbeon-forms/issues/799"&gt;#799&lt;/a&gt;)&lt;/li&gt;
&lt;li&gt;Chrome: JS error when going back to Form Runner home (&lt;a href="https://github.com/orbeon/orbeon-forms/issues/716"&gt;#716&lt;/a&gt;)&lt;/li&gt;
&lt;li&gt;Upload gets stuck on IE10 (&lt;a href="https://github.com/orbeon/orbeon-forms/issues/802"&gt;#802&lt;/a&gt;)&lt;/li&gt;
&lt;li&gt;Occasional NPE on portlet initialization (&lt;a href="https://github.com/orbeon/orbeon-forms/issues/819"&gt;#819&lt;/a&gt;)&lt;/li&gt;
&lt;li&gt;Can't focus on captcha (&lt;a href="https://github.com/orbeon/orbeon-forms/issues/823"&gt;#823&lt;/a&gt;)&lt;/li&gt;
&lt;li&gt;Setfocus on XBL with mode="focus" focuses on nested control (&lt;a href="https://github.com/orbeon/orbeon-forms/issues/824"&gt;#824&lt;/a&gt;)&lt;/li&gt;
&lt;li&gt;IE7/IE8: JavaScript placeholder with initial focus doesn't remove placeholder (&lt;a href="https://github.com/orbeon/orbeon-forms/issues/811"&gt;#811&lt;/a&gt;)&lt;/li&gt;
&lt;/ul&gt;
&lt;ul&gt;
&lt;/ul&gt;
&lt;li&gt;Other&lt;/li&gt;
&lt;ul&gt;
&lt;li&gt;Coding error for socket timeout (&lt;a href="https://github.com/orbeon/orbeon-forms/issues/801"&gt;#801&lt;/a&gt;)&lt;/li&gt;
&lt;/ul&gt;
&lt;/ul&gt;
More information is available in the in-progress &lt;a href="http://wiki.orbeon.com/forms/doc/developer-guide/release-notes/40"&gt;release notes for 4.0&lt;/a&gt;.&lt;br /&gt;
&lt;br /&gt;
You can download the builds using these links:&lt;br /&gt;
&lt;ul&gt;
&lt;li&gt;PE version:&amp;nbsp;&lt;a href="https://s3.amazonaws.com/orbeon-downloads/orbeon-4.0.0.rc1.201302120214-PE.zip"&gt;orbeon-4.0.0.rc1.201302120214-PE.zip&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;CE version:&amp;nbsp;&lt;a href="https://s3.amazonaws.com/orbeon-downloads/orbeon-4.0.0.rc1.201302120301-CE.zip"&gt;orbeon-4.0.0.rc1.201302120301-CE.zip&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
Don't forget to&amp;nbsp;&lt;a href="http://www.orbeon.com/orbeon/fr/orbeon/register/new"&gt;grab a trial license&lt;/a&gt;&amp;nbsp;for the PE version.&lt;br /&gt;
&lt;br /&gt;
Please send feedback:&lt;br /&gt;
&lt;ul&gt;
&lt;li&gt;via&amp;nbsp;&lt;a href="http://twitter.com/orbeon"&gt;twitter&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;to the &lt;a href="http://www.orbeon.com/forms/community"&gt;ops-users&lt;/a&gt; list&lt;/li&gt;
&lt;li&gt;or as comments on this blog entry&lt;/li&gt;
&lt;/ul&gt;
&lt;img src="http://feeds.feedburner.com/~r/xml-web-apps/~4/bMWP6vg-mXo" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://blog.orbeon.com/feeds/6460531451238973119/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://blog.orbeon.com/2013/02/orbeon-forms-40-rc1.html#comment-form" title="0 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/6819462794293857673/posts/default/6460531451238973119" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/6819462794293857673/posts/default/6460531451238973119" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/xml-web-apps/~3/bMWP6vg-mXo/orbeon-forms-40-rc1.html" title="Orbeon Forms 4.0 RC1" /><author><name>Erik Bruchez</name><uri>http://www.blogger.com/profile/16139421434415219182</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="32" height="32" src="http://1.bp.blogspot.com/-8ltr6ezX1_I/UHBbhWdN8QI/AAAAAAAAAvg/wftQ4a7fHxU/s220/headshot_20120704%2B%2528square%2529.png" /></author><thr:total>0</thr:total><feedburner:origLink>http://blog.orbeon.com/2013/02/orbeon-forms-40-rc1.html</feedburner:origLink></entry><entry><id>tag:blogger.com,1999:blog-6819462794293857673.post-4210552600175131148</id><published>2013-01-31T14:19:00.001-08:00</published><updated>2013-02-01T10:45:32.621-08:00</updated><title type="text">New sample form: W-9</title><content type="html">We just added a new sample form as part of our process of testing Orbeon Forms 4.0 beta builds. This is the W-9 form, which is a common US form to request a taxpayer identification number.&lt;br /&gt;
&lt;br /&gt;
&lt;table align="center" cellpadding="0" cellspacing="0" class="tr-caption-container" style="margin-left: auto; margin-right: auto; text-align: center;"&gt;&lt;tbody&gt;
&lt;tr&gt;&lt;td style="text-align: center;"&gt;&lt;a href="http://1.bp.blogspot.com/-W8bGcUjr3xQ/UQrrv2s1QXI/AAAAAAAAAzY/L46NQgNWng0/s1600/w9.png" imageanchor="1" style="clear: right; margin-bottom: 1em; margin-left: auto; margin-right: auto;"&gt;&lt;img border="0" height="341" src="http://1.bp.blogspot.com/-W8bGcUjr3xQ/UQrrv2s1QXI/AAAAAAAAAzY/L46NQgNWng0/s640/w9.png" width="640" /&gt;&lt;/a&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class="tr-caption" style="text-align: center;"&gt;&lt;i&gt;In the browser&lt;/i&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;/tbody&gt;&lt;/table&gt;
It shows a number of features, including:&lt;br /&gt;
&lt;br /&gt;
&lt;ul&gt;
&lt;li&gt;the (new in 4.0) wizard view&lt;/li&gt;
&lt;li&gt;how to show and hide controls depending on conditions&lt;/li&gt;
&lt;li&gt;how to fill-out a PDF from a template&lt;/li&gt;
&lt;/ul&gt;
&lt;div&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;table align="center" cellpadding="0" cellspacing="0" class="tr-caption-container" style="margin-left: auto; margin-right: auto; text-align: center;"&gt;&lt;tbody&gt;
&lt;tr&gt;&lt;td style="text-align: center;"&gt;&lt;a href="http://2.bp.blogspot.com/-DqX7mkCsJoE/UQrtJNF3MvI/AAAAAAAAAzg/Uj9A_n1kxrM/s1600/pdf.png" imageanchor="1" style="margin-left: auto; margin-right: auto;"&gt;&lt;img border="0" height="394" src="http://2.bp.blogspot.com/-DqX7mkCsJoE/UQrtJNF3MvI/AAAAAAAAAzg/Uj9A_n1kxrM/s640/pdf.png" width="640" /&gt;&lt;/a&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class="tr-caption" style="text-align: center;"&gt;&lt;i&gt;PDF version&lt;/i&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;/tbody&gt;&lt;/table&gt;
&lt;div&gt;
You have a lot of freedom when bringing a form to the web from a paper (PDF) version: adapt the fields, general organization of the form and workflows to help the user make choices quickly!&lt;/div&gt;
&lt;img src="http://feeds.feedburner.com/~r/xml-web-apps/~4/JVHzZHXtO4g" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://blog.orbeon.com/feeds/4210552600175131148/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://blog.orbeon.com/2013/01/new-sample-form-w-9.html#comment-form" title="0 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/6819462794293857673/posts/default/4210552600175131148" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/6819462794293857673/posts/default/4210552600175131148" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/xml-web-apps/~3/JVHzZHXtO4g/new-sample-form-w-9.html" title="New sample form: W-9" /><author><name>Erik Bruchez</name><uri>http://www.blogger.com/profile/16139421434415219182</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="32" height="32" src="http://1.bp.blogspot.com/-8ltr6ezX1_I/UHBbhWdN8QI/AAAAAAAAAvg/wftQ4a7fHxU/s220/headshot_20120704%2B%2528square%2529.png" /></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="http://1.bp.blogspot.com/-W8bGcUjr3xQ/UQrrv2s1QXI/AAAAAAAAAzY/L46NQgNWng0/s72-c/w9.png" height="72" width="72" /><thr:total>0</thr:total><feedburner:origLink>http://blog.orbeon.com/2013/01/new-sample-form-w-9.html</feedburner:origLink></entry><entry><id>tag:blogger.com,1999:blog-6819462794293857673.post-455063171046922254</id><published>2013-01-29T20:31:00.000-08:00</published><updated>2013-01-30T10:13:50.701-08:00</updated><title type="text">Orbeon Forms 4.0 Beta 3</title><content type="html">Today we released the third Beta release of Orbeon Forms 4.0! Like &lt;a href="http://blog.orbeon.com/2013/01/orbeon-forms-40-beta-2.html"&gt;4.0 Beta 2&lt;/a&gt;&amp;nbsp;and the previous milestone builds this is &lt;b&gt;not a final release&lt;/b&gt;.&lt;br /&gt;
&lt;br /&gt;
In this release, we fixed some more IE 7 issues, improved Section Templates, the Wizard, and XML Schema generation, and more. Here is the overall list of changes since Beta 2:&lt;br /&gt;
&lt;ul&gt;
&lt;li&gt;Form Builder&lt;/li&gt;
&lt;ul&gt;
&lt;li&gt;StackOverflowError when inserting section template with repeat (&lt;a href="https://github.com/orbeon/orbeon-forms/issues/725"&gt;#725&lt;/a&gt;)&lt;/li&gt;
&lt;li&gt;xxforms:get-request-parameter() doesn't work in Validation Details (&lt;a href="https://github.com/orbeon/orbeon-forms/issues/742"&gt;#742&lt;/a&gt;)&lt;/li&gt;
&lt;li&gt;Validation Properties: XPath validation uses wrong namespaces (&lt;a href="https://github.com/orbeon/orbeon-forms/issues/743"&gt;#743&lt;/a&gt;)&lt;/li&gt;
&lt;li&gt;Crash with XBL containing a bind with id (&lt;a href="https://github.com/orbeon/orbeon-forms/issues/770"&gt;#770&lt;/a&gt;)&lt;/li&gt;
&lt;/ul&gt;
&lt;li&gt;Form Runner&lt;/li&gt;
&lt;ul&gt;
&lt;li&gt;Wizard: fix event handler showing first relevant section (&lt;a href="https://github.com/orbeon/orbeon-forms/commit/453f257d5ab8e1afc88fb55123c2b5b8ed30f12d"&gt;453f257d5a&lt;/a&gt;)&lt;/li&gt;
&lt;li&gt;IE: Autocomplete menu closes almost immediately (&lt;a href="https://github.com/orbeon/orbeon-forms/issues/734"&gt;#734&lt;/a&gt;)&lt;/li&gt;
&lt;li&gt;IE7: Summary page: search field too wide (&lt;a href="https://github.com/orbeon/orbeon-forms/issues/735"&gt;#735&lt;/a&gt;)&lt;/li&gt;
&lt;li&gt;On IE, on `xf:setfocus`, client tells the server again the focus has been set (&lt;a href="https://github.com/orbeon/orbeon-forms/issues/747"&gt;#747&lt;/a&gt;)&lt;/li&gt;
&lt;li&gt;Exception with form using the dialog editor (&lt;a href="https://github.com/orbeon/orbeon-forms/issues/760"&gt;#760&lt;/a&gt;)&lt;/li&gt;
&lt;li&gt;Repeat in section template: controls resources are not included (&lt;a href="https://github.com/orbeon/orbeon-forms/issues/757"&gt;#757&lt;/a&gt;)&lt;/li&gt;
&lt;li&gt;Section template with repeat doesn't write data back (&lt;a href="https://github.com/orbeon/orbeon-forms/issues/740"&gt;#740&lt;/a&gt;)&lt;/li&gt;
&lt;li&gt;Issue when generating the PDF for a form with hidden sections (&lt;a href="https://github.com/orbeon/orbeon-forms/issues/756"&gt;#756&lt;/a&gt;)&lt;/li&gt;
&lt;li&gt;PDF: CSS fixes (&lt;a href="https://github.com/orbeon/orbeon-forms/commit/93f78aaddd3d40e41f102a95081551ea555c7c00"&gt;93f78aaddd&lt;/a&gt;)&lt;/li&gt;
&lt;li&gt;Wizard: shows non-valid section when invalid value is non-relevant (&lt;a href="https://github.com/orbeon/orbeon-forms/issues/778"&gt;#778&lt;/a&gt;)&lt;/li&gt;
&lt;li&gt;Wizard: CSS fixes (&lt;a href="https://github.com/orbeon/orbeon-forms/commit/0867a2978e938a961b2d9d1ad9265e9851096b18"&gt;0867a2978e&lt;/a&gt;)&lt;/li&gt;
&lt;li&gt;Schema generation failing when using the MySQL persistence layer (&lt;a href="https://github.com/orbeon/orbeon-forms/issues/772"&gt;#772&lt;/a&gt;)&lt;/li&gt;
&lt;li&gt;Schema generation outputs items from itemsets (&lt;a href="https://github.com/orbeon/orbeon-forms/commit/b63a25bc19720d87546abb056bb52512064c855f"&gt;b63a25bc19&lt;/a&gt;)&lt;/li&gt;
&lt;li&gt;xxf:default doesn't run in section template (&lt;a href="https://github.com/orbeon/orbeon-forms/issues/786"&gt;#786&lt;/a&gt;)&lt;/li&gt;
&lt;li&gt;The resource persistence layer raises an error when saving XML documents (&lt;a href="https://github.com/orbeon/orbeon-forms/issues/737"&gt;#737&lt;/a&gt;)&lt;/li&gt;
&lt;/ul&gt;
&lt;li&gt;XForms engine&lt;/li&gt;
&lt;ul&gt;
&lt;li&gt;Event handler with incorrect `ev:observer` associates with parent (&lt;a href="https://github.com/orbeon/orbeon-forms/issues/739"&gt;#739&lt;/a&gt;)&lt;/li&gt;
&lt;li&gt;NPE in xf:load with AVT (&lt;a href="https://github.com/orbeon/orbeon-forms/issues/746"&gt;#746&lt;/a&gt;)&lt;/li&gt;
&lt;li&gt;Data type not applied as CSS attribute to xf:input inside a xf:group (&lt;a href="https://github.com/orbeon/orbeon-forms/issues/659"&gt;#659&lt;/a&gt;)&lt;/li&gt;
&lt;li&gt;xxf:default result is ignored in XBL mirror instance (&lt;a href="https://github.com/orbeon/orbeon-forms/issues/787"&gt;#787&lt;/a&gt;)&lt;/li&gt;
&lt;li&gt;xf:recalculate: support xxf:defaults="true" with xxf:deferred="true" (&lt;a href="https://github.com/orbeon/orbeon-forms/commit/34471c392d327433fb7e9e24d5de274d26e285c6"&gt;34471c392d&lt;/a&gt;)&lt;/li&gt;
&lt;/ul&gt;
&lt;ul&gt;
&lt;/ul&gt;
&lt;li&gt;Other&lt;/li&gt;
&lt;ul&gt;
&lt;li&gt;Upgrade to Ehcache 2.6.3&lt;/li&gt;
&lt;li&gt;Upgrade Saxon with backported Numberer_it (fixes Unicode for Italian numbers, dates and times)&lt;/li&gt;
&lt;/ul&gt;
&lt;/ul&gt;
More information is available in the in-progress &lt;a href="http://wiki.orbeon.com/forms/doc/developer-guide/release-notes/40"&gt;release notes for 4.0&lt;/a&gt;.&lt;br /&gt;
&lt;br /&gt;
You can download the builds using these links:&lt;br /&gt;
&lt;ul&gt;
&lt;li&gt;PE version:&amp;nbsp;&lt;a href="https://s3.amazonaws.com/orbeon-downloads/orbeon-4.0.0.beta3.201301300219-PE.zip"&gt;orbeon-4.0.0.beta3.201301300219-PE.zip&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;CE version: &lt;a href="https://s3.amazonaws.com/orbeon-downloads/orbeon-4.0.0.beta3.201301300332-CE.zip"&gt;orbeon-4.0.0.beta3.201301300332-CE.zip&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
Don't forget to&amp;nbsp;&lt;a href="http://www.orbeon.com/orbeon/fr/orbeon/register/new"&gt;grab a trial license&lt;/a&gt;&amp;nbsp;for the PE version.&lt;br /&gt;
&lt;br /&gt;
Please send feedback:&lt;br /&gt;
&lt;ul&gt;
&lt;li&gt;via&amp;nbsp;&lt;a href="http://twitter.com/orbeon"&gt;twitter&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;to the &lt;a href="http://www.orbeon.com/forms/community"&gt;ops-users&lt;/a&gt; list&lt;/li&gt;
&lt;li&gt;or as comments on this blog entry&lt;/li&gt;
&lt;/ul&gt;
&lt;img src="http://feeds.feedburner.com/~r/xml-web-apps/~4/dvh4ReOaLyw" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://blog.orbeon.com/feeds/455063171046922254/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://blog.orbeon.com/2013/01/orbeon-forms-40-beta-3.html#comment-form" title="0 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/6819462794293857673/posts/default/455063171046922254" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/6819462794293857673/posts/default/455063171046922254" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/xml-web-apps/~3/dvh4ReOaLyw/orbeon-forms-40-beta-3.html" title="Orbeon Forms 4.0 Beta 3" /><author><name>Erik Bruchez</name><uri>http://www.blogger.com/profile/16139421434415219182</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="32" height="32" src="http://1.bp.blogspot.com/-8ltr6ezX1_I/UHBbhWdN8QI/AAAAAAAAAvg/wftQ4a7fHxU/s220/headshot_20120704%2B%2528square%2529.png" /></author><thr:total>0</thr:total><feedburner:origLink>http://blog.orbeon.com/2013/01/orbeon-forms-40-beta-3.html</feedburner:origLink></entry><entry><id>tag:blogger.com,1999:blog-6819462794293857673.post-8824803577812283848</id><published>2013-01-18T11:22:00.000-08:00</published><updated>2013-01-19T16:47:48.355-08:00</updated><title type="text">Better formulas with XPath type annotations</title><content type="html">&lt;table cellpadding="0" cellspacing="0" class="tr-caption-container" style="float: right; margin-left: 1em; text-align: right;"&gt;&lt;tbody&gt;
&lt;tr&gt;&lt;td style="text-align: center;"&gt;&lt;a href="http://3.bp.blogspot.com/-tXU1s8N05HU/UPmeD8QsfqI/AAAAAAAAAy4/6pEimDAD_yw/s1600/note.jpg" imageanchor="1" style="clear: right; margin-bottom: 1em; margin-left: auto; margin-right: auto;"&gt;&lt;img border="0" height="170" src="http://3.bp.blogspot.com/-tXU1s8N05HU/UPmeD8QsfqI/AAAAAAAAAy4/6pEimDAD_yw/s400/note.jpg" width="240" /&gt;&lt;/a&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class="tr-caption" style="text-align: center;"&gt;&lt;i&gt;Photo by&amp;nbsp;&lt;a href="http://www.flickr.com/photos/saz/34630357/"&gt;S@Z&lt;/a&gt;&lt;/i&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;/tbody&gt;&lt;/table&gt;
&lt;p&gt;With XForms, you use &lt;em&gt;XPath expressions&lt;/em&gt; to specify complex validation constraints and calculations. Take the following XML snippet:&lt;/p&gt;

&lt;pre&gt;&lt;code&gt;&amp;lt;item&amp;gt;
    &amp;lt;units&amp;gt;3&amp;lt;/units&amp;gt;
    &amp;lt;price&amp;gt;50&amp;lt;/price&amp;gt;
    &amp;lt;total/&amp;gt;
&amp;lt;/item&amp;gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;p&gt;You can declaratively calculate the total like this:&lt;/p&gt;

&lt;pre&gt;&lt;code&gt;&amp;lt;xf:bind ref=&amp;quot;total&amp;quot; calculate=&amp;quot;../units * ../price&amp;quot;/&amp;gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;p&gt;&lt;code&gt;../units&lt;/code&gt; and &lt;code&gt;../price&lt;/code&gt; are paths that refer to the XML elements with those names. This is much like a good old spreadsheet formula, except you are not working on cells but on XML data.&lt;/p&gt;

&lt;p&gt;Because there is a multiplication with &lt;code&gt;*&lt;/code&gt;, each side is &lt;em&gt;atomized&lt;/em&gt; by the XPath evaluator. This means that the expression engine looks at the XML elements and extracts a &lt;em&gt;value&lt;/em&gt; from them. This makes sense, because you can&amp;#8217;t multiply two &lt;em&gt;elements&lt;/em&gt;, you can only multiply two &lt;em&gt;numbers&lt;/em&gt;!&lt;/p&gt;

&lt;p&gt;But there is a twist, because multiplication is defined on different kinds of numbers: in XPath, you can in particular multiply integers, floating-point numbers, and decimals. In this example, what does the XPath evaluator do? Well, by default, it looks at each number as a double-precision floating-point number (double).&lt;/p&gt;

&lt;p&gt;And this is not always what you want. For example, when dealing with currencies, you really want &lt;em&gt;decimal numbers&lt;/em&gt; in order to avoid funny rounding errors. In this case, you must use casts, which make the expression more complicated:&lt;/p&gt;

&lt;pre&gt;&lt;code&gt;&amp;lt;xf:bind ref=&amp;quot;total&amp;quot;
  calculate=&amp;quot;xs:decimal(../units) * xs:decimal(../price)&amp;quot;/&amp;gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;p&gt;Now XForms also allows you to assign types to XML data:&lt;/p&gt;

&lt;pre&gt;&lt;code&gt;&amp;lt;xf:bind ref=&amp;quot;units, price, total&amp;quot; type=&amp;quot;xs:decimal&amp;quot;/&amp;gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;p&gt;This annotates all three elements with the &lt;code&gt;xs:decimal&lt;/code&gt; type, with the meaning that the value is &lt;em&gt;required&lt;/em&gt; to conform to that type. It&amp;#8217;s designed so that if the user, via an input field, enters an incorrect value, or fails to enter a value, that value will be marked as invalid. &lt;a href="#fn:1" id="fnref:1" title="see footnote" class="footnote"&gt;[1]&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;But with XForms prior to version 2, XPath expressions were not aware of these annotations. This is understandable, because formally XForms only specified support for XPath 1.0, which had a limited set of data types (&lt;code&gt;string&lt;/code&gt;, &lt;code&gt;number&lt;/code&gt;, and &lt;code&gt;boolean&lt;/code&gt;), and which didn&amp;#8217;t specify how annotations on a data model should work.&lt;/p&gt;

&lt;p&gt;The good news is that XForms 2 officially supports XPath 2 &lt;a href="#fn:2" id="fnref:2" title="see footnote" class="footnote"&gt;[2]&lt;/a&gt;, and this gives the XPath evaluator an opportunity to use type annotations properly. So, with the examples given above, the &lt;code&gt;calculate&lt;/code&gt; expression, when looking at the values of the &lt;code&gt;units&lt;/code&gt; and &lt;code&gt;price&lt;/code&gt; elements, can notice that they have an &lt;code&gt;xs:decimal&lt;/code&gt; type, and handle them properly as decimal values. The expression remains as lightweight as it was without annotations:&lt;/p&gt;

&lt;pre&gt;&lt;code&gt;&amp;lt;xf:bind ref=&amp;quot;total&amp;quot; calculate=&amp;quot;../units * ../price&amp;quot;/&amp;gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;p&gt;You might wonder what happens if the value is not of the specified type. Say you have:&lt;/p&gt;

&lt;pre&gt;&lt;code&gt;&amp;lt;item&amp;gt;
    &amp;lt;units&amp;gt;3&amp;lt;/units&amp;gt;
    &amp;lt;price&amp;gt;foo&amp;lt;/price&amp;gt;
    &amp;lt;total/&amp;gt;
&amp;lt;/item&amp;gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;p&gt;The answer is that when the XPath evaluator tries to access the typed value of &lt;code&gt;price&lt;/code&gt;, the calculation is interrupted and its result is set to an empty string. It makes sense not to attempt to complete the calculation in this case, following the &lt;a href="http://en.wikipedia.org/wiki/Garbage_in,_garbage_out"&gt;&amp;#8220;garbage in, garbage out&amp;#8221;&lt;/a&gt; philosophy.&lt;/p&gt;

&lt;p&gt;Orbeon Forms has experimentally supported exposing type annotations to XPath for years, but recently we have ironed them out and enabled them by default for new forms created with Form Builder. And we are now working to officially make this part of XForms 2!&lt;/p&gt;

&lt;p&gt;For more details, see the &lt;a href="http://wiki.orbeon.com/forms/doc/developer-guide/xpath-2-0-support#TOC-Type-annotations"&gt;Orbeon Forms documentation&lt;/a&gt;.&lt;/p&gt;

&lt;div class="footnotes"&gt;
&lt;hr /&gt;
&lt;ol&gt;

&lt;li id="fn:1"&gt;
&lt;p&gt;Besides validation, types can also, depending on the XForms engine, affect the visual representation of a form control associated with that piece of data. A classical example is a date picker for an &lt;code&gt;xs:date&lt;/code&gt; value. &lt;a href="#fnref:1" title="return to article" class="reversefootnote"&gt;&amp;#160;&amp;#8617;&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;

&lt;li id="fn:2"&gt;
&lt;p&gt;Orbeon Forms on the other hand has always supported XPath 2 as an extension of XForms 1.1. &lt;a href="#fnref:2" title="return to article" class="reversefootnote"&gt;&amp;#160;&amp;#8617;&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;

&lt;/ol&gt;
&lt;/div&gt;
&lt;img src="http://feeds.feedburner.com/~r/xml-web-apps/~4/86FAtsneUTY" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://blog.orbeon.com/feeds/8824803577812283848/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://blog.orbeon.com/2013/01/better-formulas-with-xpath-type.html#comment-form" title="0 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/6819462794293857673/posts/default/8824803577812283848" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/6819462794293857673/posts/default/8824803577812283848" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/xml-web-apps/~3/86FAtsneUTY/better-formulas-with-xpath-type.html" title="Better formulas with XPath type annotations" /><author><name>Erik Bruchez</name><uri>http://www.blogger.com/profile/16139421434415219182</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="32" height="32" src="http://1.bp.blogspot.com/-8ltr6ezX1_I/UHBbhWdN8QI/AAAAAAAAAvg/wftQ4a7fHxU/s220/headshot_20120704%2B%2528square%2529.png" /></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="http://3.bp.blogspot.com/-tXU1s8N05HU/UPmeD8QsfqI/AAAAAAAAAy4/6pEimDAD_yw/s72-c/note.jpg" height="72" width="72" /><thr:total>0</thr:total><feedburner:origLink>http://blog.orbeon.com/2013/01/better-formulas-with-xpath-type.html</feedburner:origLink></entry><entry><id>tag:blogger.com,1999:blog-6819462794293857673.post-1291901493371357821</id><published>2013-01-15T21:34:00.000-08:00</published><updated>2013-01-15T21:34:09.792-08:00</updated><title type="text">Orbeon Forms 4.0 Beta 2</title><content type="html">Today we released the second Beta release of Orbeon Forms 4.0! Like &lt;a href="http://blog.orbeon.com/2013/01/orbeon-forms-40-beta.html"&gt;4.0 Beta&lt;/a&gt;&amp;nbsp;and the previous milestone builds this is &lt;b&gt;not a final release&lt;/b&gt;.&lt;br /&gt;
&lt;br /&gt;
In this release, we fixed a number of Internet Explorer issues (in particular for IE 7, which we don't recommend to use but which we still support, but also some IE 8 and IE 9 issues), some improvements to the Form Runner Wizard view, and more. Here is the overall list of changes since the first Beta:&lt;br /&gt;
&lt;ul&gt;
&lt;li&gt;Form Builder&lt;/li&gt;
&lt;ul&gt;
&lt;li&gt;Also add Italian and Korean among top languages&lt;/li&gt;
&lt;/ul&gt;
&lt;li&gt;Form Runner&lt;/li&gt;
&lt;ul&gt;
&lt;li&gt;Wizard: truncate long section titles to the left (&lt;a href="https://github.com/orbeon/orbeon-forms/issues/711"&gt;#711&lt;/a&gt;)&lt;/li&gt;
&lt;li&gt;Non-relevant sections show in wizard view (&lt;a href="https://github.com/orbeon/orbeon-forms/issues/699"&gt;#699&lt;/a&gt;)&lt;/li&gt;
&lt;li&gt;Blank oxf.fr.default-logo.uri causes invalid request (&lt;a href="https://github.com/orbeon/orbeon-forms/issues/713"&gt;#713&lt;/a&gt;)&lt;/li&gt;
&lt;li&gt;Call the search API without app/form returns no documents (&lt;a href="https://github.com/orbeon/orbeon-forms/issues/709"&gt;#709&lt;/a&gt;)&lt;/li&gt;
&lt;li&gt;IE8: licence plate digits appear vertically (&lt;a href="https://github.com/orbeon/orbeon-forms/issues/705"&gt;#705&lt;/a&gt;)&lt;/li&gt;
&lt;li&gt;IE7: Navigation boxes around arrows not tall enough (&lt;a href="https://github.com/orbeon/orbeon-forms/issues/723"&gt;#723&lt;/a&gt;)&lt;/li&gt;
&lt;li&gt;IE7: Navbar is too high(&lt;a href="https://github.com/orbeon/orbeon-forms/issues/721"&gt;#721&lt;/a&gt;)&lt;/li&gt;
&lt;li&gt;IE7: Wizard: too much space in TOC (&lt;a href="https://github.com/orbeon/orbeon-forms/issues/722"&gt;#722&lt;/a&gt;)&lt;/li&gt;
&lt;li&gt;IE7: Unbalanced padding with input fields (&lt;a href="https://github.com/orbeon/orbeon-forms/issues/727"&gt;#727&lt;/a&gt;)&lt;/li&gt;
&lt;li&gt;IE7: Bootstrap add-on misaligned (&lt;a href="https://github.com/orbeon/orbeon-forms/issues/728"&gt;#728&lt;/a&gt;)&lt;/li&gt;
&lt;li&gt;IE7: Grid cell content not top-aligned (&lt;a href="https://github.com/orbeon/orbeon-forms/issues/729"&gt;#729&lt;/a&gt;)&lt;/li&gt;
&lt;li&gt;IE7: fr:box-select too wide (&lt;a href="https://github.com/orbeon/orbeon-forms/issues/730"&gt;#730&lt;/a&gt;)&lt;/li&gt;
&lt;li&gt;IE7: Upload control too wide (&lt;a href="https://github.com/orbeon/orbeon-forms/issues/731"&gt;#731&lt;/a&gt;)&lt;/li&gt;
&lt;li&gt;ClassCastException when using Oracle persistence layer on JBoss 7 (&lt;a href="https://github.com/orbeon/orbeon-forms/issues/726"&gt;#726&lt;/a&gt;)&lt;/li&gt;
&lt;/ul&gt;
&lt;li&gt;XForms engine&lt;/li&gt;
&lt;ul&gt;
&lt;li&gt;Regression:&amp;nbsp;XML parsing error with IE9 after fix to #682 (&lt;a href="https://github.com/orbeon/orbeon-forms/issues/717"&gt;#717&lt;/a&gt;)&lt;/li&gt;
&lt;li&gt;IE9: Checkboxes misaligned (&lt;a href="https://github.com/orbeon/orbeon-forms/issues/704"&gt;#704&lt;/a&gt;)&lt;/li&gt;
&lt;li&gt;xf:output with date type outputs timezone (&lt;a href="https://github.com/orbeon/orbeon-forms/issues/689"&gt;#689&lt;/a&gt;)&lt;/li&gt;
&lt;li&gt;Better radio/checkboxes alignment&lt;/li&gt;
&lt;/ul&gt;
&lt;ul&gt;
&lt;/ul&gt;
&lt;li&gt;Other&lt;/li&gt;
&lt;ul&gt;
&lt;li&gt;Set Xerces SecurityManager (&lt;a href="https://github.com/orbeon/orbeon-forms/issues/686"&gt;#686&lt;/a&gt;)&lt;/li&gt;
&lt;/ul&gt;
&lt;/ul&gt;
More information is available in the in-progress &lt;a href="http://wiki.orbeon.com/forms/doc/developer-guide/release-notes/40"&gt;release notes for 4.0&lt;/a&gt;.&lt;br /&gt;
&lt;br /&gt;
You can download the builds using these links:&lt;br /&gt;
&lt;ul&gt;
&lt;li&gt;PE version:&amp;nbsp;&lt;a href="https://s3.amazonaws.com/orbeon-downloads/orbeon-4.0.0.beta2.201301160348-PE.zip"&gt;orbeon-4.0.0.beta2.201301160348-PE.zip&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;CE version:&amp;nbsp;&lt;a href="https://s3.amazonaws.com/orbeon-downloads/orbeon-4.0.0.beta2.201301160141-CE.zip"&gt;orbeon-4.0.0.beta2.201301160141-CE.zip&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
Don't forget to&amp;nbsp;&lt;a href="http://www.orbeon.com/orbeon/fr/orbeon/register/new"&gt;grab a trial license&lt;/a&gt;&amp;nbsp;for the PE version.&lt;br /&gt;
&lt;br /&gt;
Please send feedback:&lt;br /&gt;
&lt;ul&gt;
&lt;li&gt;via&amp;nbsp;&lt;a href="http://twitter.com/orbeon"&gt;twitter&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;to the &lt;a href="http://www.orbeon.com/forms/community"&gt;ops-users&lt;/a&gt; list&lt;/li&gt;
&lt;li&gt;or as comments on this blog entry&lt;/li&gt;
&lt;/ul&gt;
&lt;img src="http://feeds.feedburner.com/~r/xml-web-apps/~4/swUTXdjtc7w" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://blog.orbeon.com/feeds/1291901493371357821/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://blog.orbeon.com/2013/01/orbeon-forms-40-beta-2.html#comment-form" title="2 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/6819462794293857673/posts/default/1291901493371357821" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/6819462794293857673/posts/default/1291901493371357821" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/xml-web-apps/~3/swUTXdjtc7w/orbeon-forms-40-beta-2.html" title="Orbeon Forms 4.0 Beta 2" /><author><name>Erik Bruchez</name><uri>http://www.blogger.com/profile/16139421434415219182</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="32" height="32" src="http://1.bp.blogspot.com/-8ltr6ezX1_I/UHBbhWdN8QI/AAAAAAAAAvg/wftQ4a7fHxU/s220/headshot_20120704%2B%2528square%2529.png" /></author><thr:total>2</thr:total><feedburner:origLink>http://blog.orbeon.com/2013/01/orbeon-forms-40-beta-2.html</feedburner:origLink></entry><entry><id>tag:blogger.com,1999:blog-6819462794293857673.post-2344921976366529154</id><published>2013-01-10T14:26:00.001-08:00</published><updated>2013-01-10T14:26:20.972-08:00</updated><title type="text">Orbeon Forms 4.0 Beta</title><content type="html">Today we released the first Beta release of Orbeon Forms 4.0! Like &lt;a href="http://blog.orbeon.com/2012/12/orbeon-forms-40-m19.html"&gt;4.0 M19&lt;/a&gt;&amp;nbsp;and the previous milestone builds this is &lt;b&gt;not a final release&lt;/b&gt;.&lt;br /&gt;
&lt;ul&gt;
&lt;/ul&gt;
We have addressed lots of issues in this Beta release, covering Form Builder, Form Runner, Liferay support, and more. We also addressed a bunch of UI and cosmetic issues and increased the amount of testing we have done. With this, we have closed almost all the known bugs we wanted to address for 4.0.&lt;br /&gt;
&lt;br /&gt;
Here is the overall list of changes since M19:&lt;br /&gt;
&lt;ul&gt;
&lt;li&gt;Form Builder&lt;/li&gt;
&lt;ul&gt;
&lt;li&gt;FB: control validation dialog is too tall and fieldset legends too big (&lt;a href="https://github.com/orbeon/orbeon-forms/issues/471"&gt;#471&lt;/a&gt;)&lt;/li&gt;
&lt;li&gt;Custom buttons are showing in Form Builder (&lt;a href="https://github.com/orbeon/orbeon-forms/issues/658"&gt;#658&lt;/a&gt;)&lt;/li&gt;
&lt;li&gt;Wizard does not show in test when testing a form from Form Builder (&lt;a href="https://github.com/orbeon/orbeon-forms/issues/624"&gt;#624&lt;/a&gt;)&lt;/li&gt;
&lt;li&gt;Unclear spacing for custom control properties (&lt;a href="https://github.com/orbeon/orbeon-forms/issues/383"&gt;#383&lt;/a&gt;)&lt;/li&gt;
&lt;li&gt;Message about XPath error when using $fr-roles in the builder (&lt;a href="https://github.com/orbeon/orbeon-forms/issues/354"&gt;#354&lt;/a&gt;)&lt;/li&gt;
&lt;li&gt;Fix "XXXXXXX" in model.xml (&lt;a href="https://github.com/orbeon/orbeon-forms/issues/632"&gt;#632&lt;/a&gt;)&lt;/li&gt;
&lt;li&gt;Better alignment in Validation Properties (&lt;a href="https://github.com/orbeon/orbeon-forms/issues/671"&gt;#671&lt;/a&gt;)&lt;/li&gt;
&lt;li&gt;Better labels in Edit Grid Details dialog (&lt;a href="https://github.com/orbeon/orbeon-forms/issues/672"&gt;#672&lt;/a&gt;)&lt;/li&gt;
&lt;li&gt;List of languages is hard to use (&lt;a href="https://github.com/orbeon/orbeon-forms/issues/685"&gt;#685&lt;/a&gt;)&lt;/li&gt;
&lt;li&gt;Wrong row deleted (&lt;a href="https://github.com/orbeon/orbeon-forms/issues/683"&gt;#683&lt;/a&gt;)&lt;/li&gt;
&lt;li&gt;Schema dialog: can't see all simple types (&lt;a href="https://github.com/orbeon/orbeon-forms/issues/692"&gt;#692&lt;/a&gt;)&lt;/li&gt;
&lt;li&gt;Validation dialog shows Double when Schema type is picked (&lt;a href="https://github.com/orbeon/orbeon-forms/issues/693"&gt;#693&lt;/a&gt;)&lt;/li&gt;
&lt;li&gt;Permissions not saved (&lt;a href="https://github.com/orbeon/orbeon-forms/issues/695"&gt;#695&lt;/a&gt;)&lt;/li&gt;
&lt;li&gt;FB Test fails with 403 (&lt;a href="https://github.com/orbeon/orbeon-forms/issues/702"&gt;#702&lt;/a&gt;)&lt;/li&gt;
&lt;/ul&gt;
&lt;li&gt;Form Runner&lt;/li&gt;
&lt;ul&gt;
&lt;li&gt;Review page: textarea uses monospace font (&lt;a href="https://github.com/orbeon/orbeon-forms/issues/631"&gt;#631&lt;/a&gt;)&lt;/li&gt;
&lt;li&gt;Add property for supplemental CSS (&lt;a href="https://github.com/orbeon/orbeon-forms/issues/617"&gt;#617&lt;/a&gt;)&lt;/li&gt;
&lt;li&gt;Schema generation fails when using eXist persistence layer (&lt;a href="https://github.com/orbeon/orbeon-forms/issues/666"&gt;#666&lt;/a&gt;)&lt;/li&gt;
&lt;li&gt;Section titles are 3 times taller (&lt;a href="https://github.com/orbeon/orbeon-forms/issues/669"&gt;#669&lt;/a&gt;)&lt;/li&gt;
&lt;li&gt;Accessible link in navbar is too tall (&lt;a href="https://github.com/orbeon/orbeon-forms/issues/656"&gt;#656&lt;/a&gt;)&lt;/li&gt;
&lt;li&gt;Review mode: repeat shows +/- icons again (&lt;a href="https://github.com/orbeon/orbeon-forms/issues/673"&gt;#673&lt;/a&gt;)&lt;/li&gt;
&lt;li&gt;Buttons touch the bottom of the viewport (&lt;a href="https://github.com/orbeon/orbeon-forms/issues/654"&gt;#654&lt;/a&gt;)&lt;/li&gt;
&lt;li&gt;Repeat: missing rowspan messes up table (&lt;a href="https://github.com/orbeon/orbeon-forms/issues/675"&gt;#675&lt;/a&gt;)&lt;/li&gt;
&lt;li&gt;User with only Create role can see forms on summary page (&lt;a href="https://github.com/orbeon/orbeon-forms/issues/696"&gt;#696&lt;/a&gt;)&lt;/li&gt;
&lt;li&gt;Excel import fails with 403 during validation (&lt;a href="https://github.com/orbeon/orbeon-forms/issues/701"&gt;#701&lt;/a&gt;)&lt;/li&gt;
&lt;/ul&gt;
&lt;li&gt;XForms engine&lt;/li&gt;
&lt;ul&gt;
&lt;li&gt;With Chrome, upload control alignment is incorrect (&lt;a href="https://github.com/orbeon/orbeon-forms/issues/623"&gt;#623&lt;/a&gt;)&lt;/li&gt;
&lt;li&gt;TypedNodeWrapper exception with fr:number/currency (&lt;a href="https://github.com/orbeon/orbeon-forms/issues/657"&gt;#657&lt;/a&gt;)&lt;/li&gt;
&lt;li&gt;Regression:&amp;nbsp;Don't enable debug XForms logging by default (&lt;a href="https://github.com/orbeon/orbeon-forms/commit/a83d11197e79d3631fbb827260f02b0d8e71fb95"&gt;a83d11197e&lt;/a&gt;)&lt;/li&gt;
&lt;li&gt;TinyMCE .htm files missing in the build (&lt;a href="https://github.com/orbeon/orbeon-forms/issues/663"&gt;#663&lt;/a&gt;)&lt;/li&gt;
&lt;li&gt;java.io.NotSerializableException upon restarting Tomcat (&lt;a href="https://github.com/orbeon/orbeon-forms/issues/644"&gt;#644&lt;/a&gt;)&lt;/li&gt;
&lt;li&gt;Upload shows selector if there is an initial file (&lt;a href="https://github.com/orbeon/orbeon-forms/issues/674"&gt;#674&lt;/a&gt;)&lt;/li&gt;
&lt;li&gt;xf:upload file size is not formatted (&lt;a href="https://github.com/orbeon/orbeon-forms/issues/575"&gt;#575&lt;/a&gt;)&lt;/li&gt;
&lt;li&gt;Unsupported event context information for event('input-only') (&lt;a href="https://github.com/orbeon/orbeon-forms/issues/665"&gt;#665&lt;/a&gt;)&lt;/li&gt;
&lt;li&gt;Bookcast example is garbled (&lt;a href="https://github.com/orbeon/orbeon-forms/issues/655"&gt;#655&lt;/a&gt;)&lt;/li&gt;
&lt;li&gt;Data type not applied as CSS attribute to xf:input inside a xf:group (&lt;a href="https://github.com/orbeon/orbeon-forms/issues/659"&gt;#659&lt;/a&gt;)&lt;/li&gt;
&lt;li&gt;Exception with simple xxf:control="true" (&lt;a href="https://github.com/orbeon/orbeon-forms/issues/680"&gt;#680&lt;/a&gt;)&lt;/li&gt;
&lt;li&gt;On IE a space is "removed" from input fields (&lt;a href="https://github.com/orbeon/orbeon-forms/issues/682"&gt;#682&lt;/a&gt;)&lt;/li&gt;
&lt;li&gt;xxforms:if / xxforms:while don't work anymore (&lt;a href="https://github.com/orbeon/orbeon-forms/issues/684"&gt;#684&lt;/a&gt;)&lt;/li&gt;
&lt;/ul&gt;
&lt;li&gt;Liferay support&lt;/li&gt;
&lt;ul&gt;
&lt;li&gt;Check status of portlet examples (&lt;a href="https://github.com/orbeon/orbeon-forms/issues/608"&gt;#608&lt;/a&gt;)&lt;/li&gt;
&lt;li&gt;Some hidden controls appear (&lt;a href="https://github.com/orbeon/orbeon-forms/issues/539"&gt;#539&lt;/a&gt;)&lt;/li&gt;
&lt;li&gt;New form crashes in Liferay (&lt;a href="https://github.com/orbeon/orbeon-forms/issues/537"&gt;#537&lt;/a&gt;)&lt;/li&gt;
&lt;li&gt;Bookcast fails when saving (&lt;a href="https://github.com/orbeon/orbeon-forms/issues/538"&gt;#538&lt;/a&gt;)&lt;/li&gt;
&lt;li&gt;Crash when coming back from accessible mode (&lt;a href="https://github.com/orbeon/orbeon-forms/issues/668"&gt;#668&lt;/a&gt;)&lt;/li&gt;
&lt;li&gt;com.liferay.portal.NoSuchRoleException (&lt;a href="https://github.com/orbeon/orbeon-forms/issues/305"&gt;#305&lt;/a&gt;)&lt;/li&gt;
&lt;li&gt;Error downloading attachment with proxy portlet (&lt;a href="https://github.com/orbeon/orbeon-forms/issues/559"&gt;#559&lt;/a&gt;)&lt;/li&gt;
&lt;/ul&gt;
&lt;li&gt;Other&lt;/li&gt;
&lt;ul&gt;
&lt;li&gt;Restore XUpdate processor (&lt;a href="https://github.com/orbeon/orbeon-forms/issues/355"&gt;#355&lt;/a&gt;)&lt;/li&gt;
&lt;li&gt;Option to hide Orbeon Forms version in page (&lt;a href="https://github.com/orbeon/orbeon-forms/issues/676"&gt;#676&lt;/a&gt;)&lt;/li&gt;
&lt;li&gt;Tentative fix for deadlock in lastModifiedImpl (&lt;a href="https://github.com/orbeon/orbeon-forms/commit/f054f8e02d6e15dd634fda0f937a597daff82277"&gt;f054f8e02d&lt;/a&gt;)&lt;/li&gt;
&lt;li&gt;cosmetic UI fixes&lt;/li&gt;
&lt;li&gt;refactoring&lt;/li&gt;
&lt;/ul&gt;
&lt;/ul&gt;
More information is available in the in-progress &lt;a href="http://wiki.orbeon.com/forms/doc/developer-guide/release-notes/40"&gt;release notes for 4.0&lt;/a&gt;.&lt;br /&gt;
&lt;br /&gt;
You can download the builds using these links:&lt;br /&gt;
&lt;ul&gt;
&lt;li&gt;PE version:&amp;nbsp;&lt;a href="https://s3.amazonaws.com/orbeon-downloads/orbeon-4.0.0.beta.201301101955-PE.zip"&gt;orbeon-4.0.0.beta.201301101955-PE.zip&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;CE version:&amp;nbsp;&lt;a href="https://s3.amazonaws.com/orbeon-downloads/orbeon-4.0.0.beta.201301102009-CE.zip"&gt;orbeon-4.0.0.beta.201301102009-CE.zip&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
Don't forget to&amp;nbsp;&lt;a href="http://www.orbeon.com/orbeon/fr/orbeon/register/new"&gt;grab a trial license&lt;/a&gt;&amp;nbsp;for the PE version.&lt;br /&gt;
&lt;br /&gt;
Please send feedback:&lt;br /&gt;
&lt;ul&gt;
&lt;li&gt;via&amp;nbsp;&lt;a href="http://twitter.com/orbeon"&gt;twitter&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;to the &lt;a href="http://www.orbeon.com/forms/community"&gt;ops-users&lt;/a&gt; list&lt;/li&gt;
&lt;li&gt;or as comments on this blog entry&lt;/li&gt;
&lt;/ul&gt;
&lt;img src="http://feeds.feedburner.com/~r/xml-web-apps/~4/erv70uXvk3U" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://blog.orbeon.com/feeds/2344921976366529154/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://blog.orbeon.com/2013/01/orbeon-forms-40-beta.html#comment-form" title="0 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/6819462794293857673/posts/default/2344921976366529154" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/6819462794293857673/posts/default/2344921976366529154" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/xml-web-apps/~3/erv70uXvk3U/orbeon-forms-40-beta.html" title="Orbeon Forms 4.0 Beta" /><author><name>Erik Bruchez</name><uri>http://www.blogger.com/profile/16139421434415219182</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="32" height="32" src="http://1.bp.blogspot.com/-8ltr6ezX1_I/UHBbhWdN8QI/AAAAAAAAAvg/wftQ4a7fHxU/s220/headshot_20120704%2B%2528square%2529.png" /></author><thr:total>0</thr:total><feedburner:origLink>http://blog.orbeon.com/2013/01/orbeon-forms-40-beta.html</feedburner:origLink></entry><entry><id>tag:blogger.com,1999:blog-6819462794293857673.post-4621992006330529998</id><published>2013-01-08T15:52:00.000-08:00</published><updated>2013-01-14T10:20:38.485-08:00</updated><title type="text">Automatic remapping of Windows-1252 characters to Unicode</title><content type="html">&lt;a href="http://www.flickr.com/photos/lwr/3491396612/" imageanchor="1" style="clear: right; float: right; margin-bottom: 1em; margin-left: 1em;"&gt;&lt;img border="0" height="200" src="http://2.bp.blogspot.com/-Q0ZZApICwCw/UOyvfp2gJ0I/AAAAAAAAEtU/gGhsT-Cwf5w/s200/image00.png" width="200" /&gt;&lt;/a&gt;

&lt;p&gt;Nowadays, almost everything uses &lt;a href="http://en.wikibooks.org/wiki/Unicode/Character_reference/0000-0FFF"&gt;Unicode&lt;/a&gt;, which supports a large (&lt;a href="http://www.youtube.com/watch?v=Z_sl99D2a18"&gt;very large!&lt;/a&gt;) number of characters. Unicode assign a code (number) to each character, and in most cases this code is represented with:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;With UTF-16 when in memory (e.g. in Java and Windows &lt;a href="http://en.wikipedia.org/wiki/Unicode#Operating_systems"&gt;since NT&lt;/a&gt;);&lt;/li&gt;
&lt;li&gt;With UTF-8 when sent over the wire.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Before Unicode, a single byte per character was used for Western languages, with the &lt;a href="http://en.wikipedia.org/wiki/ISO/IEC_8859-1"&gt;ISO Latin-1 encoding&lt;/a&gt;. This encoding was fine for most Western characters but didn't contain some useful characters, such as curved quotes, the euro sign, the trademark sign, plus many others. In their infinite wisdom, Microsoft decided to use some reserved codes of Latin-1 for those "useful" characters, creating the &lt;a href="http://en.wikipedia.org/wiki/Windows-1252"&gt;Windows 1252 encoding&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;Unicode is based on Latin-1, and not Windows-1252, which means that the code for all those "useful characters" is higher than 255 in Unicode. The problem is that documents encoded with Windows-1252 are often incorrectly opened as Latin-1. The mistake is easy to do, as it works "in most cases". The error is so common, that the HTML5 spec &lt;a href="http://www.whatwg.org/specs/web-apps/current-work/multipage/parsing.html#character-encodings-0"&gt;says&lt;/a&gt; that a browser should parse document advertised as using Latin-1 as Windows-1252 (not trusting the advertised encoding!).&lt;/p&gt;

&lt;p&gt;But should you incorrectly take that Windows-1252 encoded file as a Latin-1 encoded file, and pass along its content to a system where it is saved as Unicode, you might end up with control characters; if the text is sent back to the browser, still as Unicode, those control characters will show as squares, instead of the curved quotes, euro sign, or trademark signs you originally intended.&lt;/p&gt;

&lt;p&gt;Luckily, there is a way to safely and automatically fix incorrectly encoded documents. This is done by changing the code for characters that exist in Windows-1252, but not Latin-1, to their valid Unicode code, using a simple &lt;a href="http://www.unicode.org/Public/MAPPINGS/VENDORS/MICSFT/WindowsBestFit/bestfit1252.txt"&gt;conversion table&lt;/a&gt;. And Orbeon automatically does this for you. And of course, &lt;a href="http://wiki.orbeon.com/forms/doc/developer-guide/processors-converters#TOC-Built-in-custom-serializers"&gt;configuration properties&lt;/a&gt; allow you to disable this automatic conversion, or even to setup your own custom conversion.&lt;/p&gt;&lt;img src="http://feeds.feedburner.com/~r/xml-web-apps/~4/cV5QAt8SlXU" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://blog.orbeon.com/feeds/4621992006330529998/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://blog.orbeon.com/2013/01/automatic-remapping-of-windows-1252.html#comment-form" title="2 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/6819462794293857673/posts/default/4621992006330529998" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/6819462794293857673/posts/default/4621992006330529998" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/xml-web-apps/~3/cV5QAt8SlXU/automatic-remapping-of-windows-1252.html" title="Automatic remapping of Windows-1252 characters to Unicode" /><author><name>Alessandro Vernet</name><uri>http://www.blogger.com/profile/06085176014230803685</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="32" height="32" src="http://farm1.static.flickr.com/122/269903379_c4b40a3570.jpg" /></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="http://2.bp.blogspot.com/-Q0ZZApICwCw/UOyvfp2gJ0I/AAAAAAAAEtU/gGhsT-Cwf5w/s72-c/image00.png" height="72" width="72" /><thr:total>2</thr:total><feedburner:origLink>http://blog.orbeon.com/2013/01/automatic-remapping-of-windows-1252.html</feedburner:origLink></entry><entry><id>tag:blogger.com,1999:blog-6819462794293857673.post-2028632471780080213</id><published>2012-12-12T08:30:00.002-08:00</published><updated>2012-12-12T08:30:38.714-08:00</updated><title type="text">Orbeon Forms 4.0 M19</title><content type="html">Today we released Orbeon Forms 4.0 M19 (Milestone 19). Like &lt;a href="http://blog.orbeon.com/2012/12/orbeon-forms-40-m18.html"&gt;4.0 M18&lt;/a&gt;&amp;nbsp;and the previous milestones this is &lt;b&gt;not a final release&lt;/b&gt;.&lt;br /&gt;
&lt;ul&gt;
&lt;/ul&gt;
In this release, the following issues were addressed:&lt;br /&gt;
&lt;ul&gt;
&lt;li&gt;Form Builder&lt;/li&gt;
&lt;ul&gt;
&lt;li&gt;Copy/paste of control loses translation (&lt;a href="https://github.com/orbeon/orbeon-forms/issues/625"&gt;#625&lt;/a&gt;)&lt;/li&gt;
&lt;li&gt;Enable XPath type annotations by default in Builder (&lt;a href="https://github.com/orbeon/orbeon-forms/issues/630"&gt;#630&lt;/a&gt;)&lt;/li&gt;
&lt;li&gt;When creating a new form, dialog shouldn't show a 'cancel' link (&lt;a href="https://github.com/orbeon/orbeon-forms/issues/590"&gt;#590&lt;/a&gt;)&lt;/li&gt;
&lt;li&gt;Form settings: textarea is not tall enough (&lt;a href="https://github.com/orbeon/orbeon-forms/issues/622"&gt;#622&lt;/a&gt;)&lt;/li&gt;
&lt;li&gt;Setting help to blank doesn't remove help (&lt;a href="https://github.com/orbeon/orbeon-forms/issues/577"&gt;#577&lt;/a&gt;)&lt;/li&gt;
&lt;li&gt;Custom XML: focus taken out of XML editor on click (&lt;a href="https://github.com/orbeon/orbeon-forms/issues/642"&gt;#642&lt;/a&gt;)&lt;/li&gt;
&lt;li&gt;Custom XML: dialog is too narrow, not high enough (&lt;a href="https://github.com/orbeon/orbeon-forms/issues/643"&gt;#643&lt;/a&gt;)&lt;/li&gt;
&lt;li&gt;Should not be able to set the focus on a readonly CodeMirror (&lt;a href="https://github.com/orbeon/orbeon-forms/issues/645"&gt;#645&lt;/a&gt;)&lt;/li&gt;
&lt;li&gt;Regression: Action editor: input/output values can't be set (&lt;a href="https://github.com/orbeon/orbeon-forms/issues/647"&gt;#647&lt;/a&gt;)&lt;/li&gt;
&lt;li&gt;403 error when testing form containing an XPath error (&lt;a href="https://github.com/orbeon/orbeon-forms/issues/627"&gt;#627&lt;/a&gt;)&lt;/li&gt;
&lt;li&gt;Wizard view by default for orbeon/controls&lt;/li&gt;
&lt;li&gt;Make fields required in Action Editor&lt;/li&gt;
&lt;/ul&gt;
&lt;li&gt;Form Runner&lt;/li&gt;
&lt;ul&gt;
&lt;li&gt;Required asterisk doesn't show in dialogs (&lt;a href="https://github.com/orbeon/orbeon-forms/issues/639"&gt;#639&lt;/a&gt;)&lt;/li&gt;
&lt;li&gt;fr:number is now &lt;a href="https://sites.google.com/a/orbeon.com/forms/doc/developer-guide/xbl-components/number"&gt;documented&lt;/a&gt;&amp;nbsp;(&lt;a href="https://github.com/orbeon/orbeon-forms/issues/546"&gt;#546&lt;/a&gt;)&lt;/li&gt;
&lt;li&gt;Add fr-grid-col-&amp;lt;x&amp;gt; classes on cols and fr-grid-&amp;lt;id&amp;gt; on table (&lt;a href="https://github.com/orbeon/orbeon-forms/commit/a4bcef17668ef3a9399e01ff628b037a5a300341"&gt;a4bcef1766&lt;/a&gt;)&lt;/li&gt;
&lt;li&gt;More files converted to LESS&lt;/li&gt;
&lt;/ul&gt;
&lt;li&gt;XForms engine&lt;/li&gt;
&lt;ul&gt;
&lt;li&gt;Increase XPath cache size for very large forms (&lt;a href="https://github.com/orbeon/orbeon-forms/commit/1eae55244891077d2fb5d392871d25d2bdf5d463"&gt;1eae552448&lt;/a&gt;)&lt;/li&gt;
&lt;li&gt;Some performance improvements (&lt;a href="https://github.com/orbeon/orbeon-forms/commit/4e9d661dbaf5cae11e9a95a764bbfcf41bc46d98"&gt;4e9d661dba&lt;/a&gt;, &lt;a href="https://github.com/orbeon/orbeon-forms/commit/4c619bd5a6698da9534ce9869e08a9918fe710c2"&gt;4c619bd5a6&lt;/a&gt;)&lt;/li&gt;
&lt;li&gt;Calendar resource in Polish (&lt;a href="https://github.com/orbeon/orbeon-forms/commit/da59e94de14c60d1e49239917ca2bb4e4488364d"&gt;da59e94de1&lt;/a&gt;)&lt;/li&gt;
&lt;/ul&gt;
&lt;ul&gt;
&lt;ul&gt;
&lt;/ul&gt;
&lt;/ul&gt;
&lt;/ul&gt;
More information is available in the in-progress &lt;a href="http://wiki.orbeon.com/forms/doc/developer-guide/release-notes/40"&gt;release notes for 4.0&lt;/a&gt;.&lt;br /&gt;
&lt;br /&gt;
You can download the builds using these links:&lt;br /&gt;
&lt;ul&gt;
&lt;li&gt;PE version:&amp;nbsp;&lt;a href="https://s3.amazonaws.com/orbeon-downloads/orbeon-4.0.0.M19.201212120146-PE.zip"&gt;orbeon-4.0.0.M19.201212120146-PE.zip&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;CE version:&amp;nbsp;&lt;a href="https://s3.amazonaws.com/orbeon-downloads/orbeon-4.0.0.M19.201212120202-CE.zip"&gt;orbeon-4.0.0.M19.201212120202-CE.zip&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
Don't forget to&amp;nbsp;&lt;a href="http://www.orbeon.com/orbeon/fr/orbeon/register/new"&gt;grab a trial license&lt;/a&gt;&amp;nbsp;for the PE version.&lt;br /&gt;
&lt;br /&gt;
Please send feedback:&lt;br /&gt;
&lt;ul&gt;
&lt;li&gt;via&amp;nbsp;&lt;a href="http://twitter.com/orbeon"&gt;twitter&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;to the &lt;a href="http://www.orbeon.com/forms/community"&gt;ops-users&lt;/a&gt; list&lt;/li&gt;
&lt;li&gt;or as comments on this blog entry&lt;/li&gt;
&lt;/ul&gt;
&lt;img src="http://feeds.feedburner.com/~r/xml-web-apps/~4/dH0o-09K8NI" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://blog.orbeon.com/feeds/2028632471780080213/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://blog.orbeon.com/2012/12/orbeon-forms-40-m19.html#comment-form" title="0 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/6819462794293857673/posts/default/2028632471780080213" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/6819462794293857673/posts/default/2028632471780080213" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/xml-web-apps/~3/dH0o-09K8NI/orbeon-forms-40-m19.html" title="Orbeon Forms 4.0 M19" /><author><name>Erik Bruchez</name><uri>http://www.blogger.com/profile/16139421434415219182</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="32" height="32" src="http://1.bp.blogspot.com/-8ltr6ezX1_I/UHBbhWdN8QI/AAAAAAAAAvg/wftQ4a7fHxU/s220/headshot_20120704%2B%2528square%2529.png" /></author><thr:total>0</thr:total><feedburner:origLink>http://blog.orbeon.com/2012/12/orbeon-forms-40-m19.html</feedburner:origLink></entry><entry><id>tag:blogger.com,1999:blog-6819462794293857673.post-753522968914580475</id><published>2012-12-10T15:40:00.001-08:00</published><updated>2012-12-10T15:47:49.529-08:00</updated><title type="text">Creating REST services with Google Apps Script</title><content type="html">&lt;p&gt;There are times when you'd like to &lt;b&gt;create a service&lt;/b&gt;, want the service to be available &lt;b&gt;publicly&lt;/b&gt;, and want to do this &lt;b&gt;quickly&lt;/b&gt;, maybe for testing or for a demo you're putting together. In those cases, Google Apps Script might just be the solution you're looking for.&lt;/p&gt;

&lt;p&gt;As an example, let's create a service that tells us if a number it receives is even. The number will be passed as a request parameter, e.g. &lt;code&gt;...?number=42&lt;/code&gt;, and will provide an XML response, e.g. &lt;code&gt;&amp;lt;result&amp;gt;true&amp;lt;/result&amp;gt;&lt;/code&gt;. Then, we will call this service from a form created with Form Builder, to show, next to an input field, whether the typed number is even or odd. Let's start by creating and deploying the service:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;&lt;p&gt;To &lt;b&gt;create a new script&lt;/b&gt;, load &lt;a href="https://drive.google.com/"&gt;Google Drive&lt;/a&gt;, click on &lt;i&gt;Create&lt;/i&gt;, and under &lt;i&gt;More&lt;/i&gt;, choose &lt;i&gt;Script&lt;/i&gt;. Click on &lt;i&gt;Untitled project&lt;/i&gt;, and name it &lt;i&gt;IsEven&lt;/i&gt;.&lt;/p&gt;&lt;/li&gt;

&lt;li&gt;&lt;p&gt;&lt;b&gt;Edit your script&lt;/b&gt;, or in this case copy-pate the following code in the editor:

&lt;pre&gt;&lt;code&gt;function doGet(request) {
    var result = '&lt;result&gt;' + (request.parameter.number % 2 == 0) + '&lt;/result&gt;';
    return ContentService.createTextOutput(result)
        .setMimeType(ContentService.MimeType.XML);
}&lt;/code&gt;&lt;/pre&gt;

&lt;/p&gt;&lt;/li&gt;

&lt;li&gt;&lt;p&gt;To &lt;b&gt;deploy your service&lt;/b&gt;, make sure it is first saved, then go to &lt;i&gt;File&lt;/i&gt; | &lt;i&gt;Manage Versions&lt;/i&gt;, click on &lt;i&gt;Save New Version&lt;/i&gt;, and click&amp;nbsp;&lt;i&gt;OK&lt;/i&gt;&amp;nbsp;to close the dialog. Go to &lt;i&gt;Publish&lt;/i&gt; | &lt;i&gt;Deploy as web app…&lt;/i&gt;, in &lt;i&gt;Who has access to the app&lt;/i&gt; choose &lt;i&gt;Anyone even anonymous&lt;/i&gt;, click &lt;i&gt;Deploy&lt;/i&gt;. Copy and save somewhere the URL given to you in the following dialog: this is the URL of your script.&lt;/p&gt;&lt;/li&gt;

&lt;li&gt;&lt;p&gt;&lt;b&gt;Test the service&lt;/b&gt; by pasting the URL in a new tab of your browser and adding &lt;code&gt;?parameter=42&lt;/code&gt;. The service should respond &lt;code&gt;&amp;lt;result&amp;gt;true&amp;lt;/result&amp;gt;&lt;/code&gt;.&lt;/p&gt;&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;Now let's call the service from a form we create with &lt;a href="http://www.orbeon.com/"&gt;Form Builder&lt;/a&gt;:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;&lt;p&gt;In Form Builder, &lt;b&gt;create a new form&lt;/b&gt;, create an input field, type a label and name it &lt;i&gt;number&lt;/i&gt;, create and output field, type a label and name it &lt;i&gt;even&lt;/i&gt;. Your form might look like:&lt;/p&gt;

&lt;p&gt;&lt;a href="http://1.bp.blogspot.com/-0JCGhqxvsZ4/UMZo5zSaNuI/AAAAAAAAEf4/PiHWzgiH4kY/s1600/form-1.png" imageanchor="1" style="clear: left; font-family: monospace; margin-bottom: 1em; margin-right: 1em; white-space: pre;"&gt;&lt;img border="0" src="http://1.bp.blogspot.com/-0JCGhqxvsZ4/UMZo5zSaNuI/AAAAAAAAEf4/PiHWzgiH4kY/s400/form-1.png" width="400" /&gt;&lt;/a&gt;&lt;/p&gt;&lt;/li&gt;

&lt;li&gt;&lt;p&gt;&lt;b&gt;Define an HTTP service&lt;/b&gt;, by clicking on &lt;i&gt;Add&lt;/i&gt; under &lt;i&gt;HTTP Service&lt;/i&gt; in the sidebar. Name the service &lt;i&gt;is-even&lt;/i&gt;, in Resource URL paste the URL from step 3 above. Under &lt;i&gt;Serialization&lt;/i&gt;, choose &lt;i&gt;HTML form&lt;/i&gt;. In &lt;i&gt;Request Body&lt;/i&gt; enter &lt;code&gt;&amp;lt;number/&amp;gt;&lt;/code&gt;.&lt;/p&gt;

&lt;p&gt;&lt;a href="http://4.bp.blogspot.com/-x_879aeraM0/UMZzlHOn6jI/AAAAAAAAEgQ/6mntHxFVyVc/s1600/service.png" imageanchor="1" style="margin-right:1em; margin-bottom:1em"&gt;&lt;img border="0" height="400" src="http://4.bp.blogspot.com/-x_879aeraM0/UMZzlHOn6jI/AAAAAAAAEgQ/6mntHxFVyVc/s400/service.png" /&gt;&lt;/a&gt;&lt;/p&gt;&lt;/li&gt;

&lt;li&gt;&lt;p&gt;&lt;b&gt;Define a action&lt;/b&gt;, by clicking on&amp;nbsp;&lt;i&gt;Add&lt;/i&gt;&amp;nbsp;under&amp;nbsp;&lt;i&gt;Actions&lt;/i&gt;&amp;nbsp;in the sidebar.&amp;nbsp;Name it &lt;i&gt;check-even&lt;/i&gt;, under &lt;i&gt;React To&lt;/i&gt; choose &lt;i&gt;Value Change&lt;/i&gt;, under &lt;i&gt;Control&lt;/i&gt; choose &lt;i&gt;number&lt;/i&gt;, in &lt;i&gt;Service to call&lt;/i&gt; to choose &lt;i&gt;is-even&lt;/i&gt;. In&amp;nbsp;&lt;i&gt;Set Service Request Values&lt;/i&gt; click the plus icon choose &lt;i&gt;number&lt;/i&gt; and type &lt;i&gt;/number&lt;/i&gt;, in&amp;nbsp;&lt;i&gt;Destination Control&lt;/i&gt;&amp;nbsp;choose &lt;i&gt;even&lt;/i&gt; and type&amp;nbsp;&lt;code&gt;/result&lt;/code&gt;.&lt;/p&gt;

&lt;p&gt;&lt;a href="http://3.bp.blogspot.com/-cSkfFaD5n5E/UMZ0NcURnsI/AAAAAAAAEgc/tyopmlL1iYU/s1600/action-1.png" imageanchor="1" style="margin-right:1em; margin-bottom:1em"&gt;&lt;img border="0" width="379" src="http://3.bp.blogspot.com/-cSkfFaD5n5E/UMZ0NcURnsI/AAAAAAAAEgc/tyopmlL1iYU/s400/action-1.png" /&gt;&lt;/a&gt;&lt;/p&gt;

&lt;/li&gt;

&lt;li&gt;&lt;p&gt;&lt;b&gt;Test the form&lt;/b&gt; by clicking on the Test button. Type 42 and hit enter: the output next to it should show &lt;i&gt;true&lt;/i&gt;.&amp;nbsp;Type 43 and hit enter:&amp;nbsp;similarly&amp;nbsp;the output should show&amp;nbsp;&lt;i&gt;false&lt;/i&gt;.&lt;/code&gt;&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;Congratulations, you just created a service and a form calling that service, and all this without leaving your web browser.&lt;/p&gt;&lt;img src="http://feeds.feedburner.com/~r/xml-web-apps/~4/yByiz_H5GRw" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://blog.orbeon.com/feeds/753522968914580475/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://blog.orbeon.com/2012/12/creating-rest-services-with-google-apps.html#comment-form" title="4 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/6819462794293857673/posts/default/753522968914580475" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/6819462794293857673/posts/default/753522968914580475" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/xml-web-apps/~3/yByiz_H5GRw/creating-rest-services-with-google-apps.html" title="Creating REST services with Google Apps Script" /><author><name>Alessandro Vernet</name><uri>http://www.blogger.com/profile/06085176014230803685</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="32" height="32" src="http://farm1.static.flickr.com/122/269903379_c4b40a3570.jpg" /></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="http://1.bp.blogspot.com/-0JCGhqxvsZ4/UMZo5zSaNuI/AAAAAAAAEf4/PiHWzgiH4kY/s72-c/form-1.png" height="72" width="72" /><thr:total>4</thr:total><feedburner:origLink>http://blog.orbeon.com/2012/12/creating-rest-services-with-google-apps.html</feedburner:origLink></entry></feed>
