About formsPlayer

formsPlayer is a full-featured XForms processor that provides a complete implementation of the W3C's XForms specification, made available in today's browsers. formsPlayer is currently available for Internet Explorer running on Windows. Versions for other browsers and operating systems are in development.

Deployment, licensing and support

There are a number of ways that formsPlayer can be deployed and used, ranging from straightforward web deployment in the same way as a normal web-site, to embedding within .NET applications.

Web-sites and intranets

The first and simplest deployment model is to ask your users to install the formsPlayer Community Edition, which is free. This provides core functionality for all of the XForms standards (XForms 1.0, XForms 1.0 Second Edition and XForms 1.1). x-port.net will always keep the Community Edition in sync with the latest specifications, allowing developers to experiment with XForms and then deploy, knowing that users will always be able to run their application.

Whilst the Community Edition provides a complete XForms implementation, there will be times when it is not appropriate for some particular web application. For example, if your application requires custom branding--such as changing the opening splash-page, or the logos on user messages--you will need either a Single Project License, or some User Licenses.

Single Project Licenses

A Single Project License controls formsPlayer configuration for an unlimited number of users, for all XForms within a given directory on a web-server. For example, if you have a web application that is located at:

http://www.example.org/accounts

then when formsPlayer loads any of the following XForms it will pick up the configuration options that have been specified:

http://www.example.org/accounts/form1.html
http://www.example.org/accounts/invoices/form2.html
http://www.example.org/accounts/purchase/form3.html

However, the following form would not receive the same configuration:

http://www.example.org/crm

In this situation, a second license could be purchased to provide distinct branding for the CRM application, or if no separate configuration is required--i.e., both the accounts application and the CRM application can use the same splash-page and branding--then the main license could refer to:

http://www.example.org

Now both the accounts and CRM applications would have the same configuration settings.

If you would like to buy Single Project Licenses they are available online from Grey Matter. Also see Using a formsPlayer Single Project License for instructions on how to use the license.

User Licenses

Whilst a Single Project License is appropriate when a large number of users will be accessing a single application, there will be times where a smaller number of users will be accessing many applications. This scenario is supported by formsPlayer User Licenses which will disable the Community Edition branding on a single machine, regardless of the web applications that the user looks at.

If you would like to buy User Licenses they are available online from Grey Matter. Also see Using a formsPlayer User License key for instructions on how to remove the Community Edition branding.

Using formsPlayer with server-side XForms processors

Since XForms can run on many different devices then it's obviously important for server-based systems such as Orbeon, Chiba and Intalio to be able to use any client-side XForms processor. This means that even if developers are aiming to avoid any installation requirement on the part of their users, it is still possible to make use of an XForms processor such as formsPlayer or the Firefox extension, if it is found to be already present on a user's machine.

To try to make this as easy as possible, we've released a GPL script that can be placed in an HTML or XHTML document, and which tries to assist in the use of client-side XForms processors if they are installed. The script will also help the user to install a processor if necessary.

The key point is to place control over whether or not to use a client-side processor in the hands of the user. When building HTML sites we try to make sure that browser choice is irrelevant, and the goal is to do the same for XForms. In this section we look at how we can do that.

The lib-xh project

To create a document that will work with many different processors we use lib-xh, an open source project hosted at Google Code :

  http://code.google.com/p/lib-xh

The source for the project is located here:

  http://lib-xh.googlecode.com/svn/trunk/

Using the library simply requires the main script to be included in source documents, as follows:

  <script src="http://lib-xh.googlecode.com/svn/trunk/xH.js" type="text/javascript">/**/</script>

Operation of lib-xH.js

At the moment the script checks for formsPlayer (if running within Internet Explorer) and for the Firefox XForms extension (if running within Firefox). If the Firefox extension is present then the script doesn't need to do anything else, but if formsPlayer is detected the correct tags need to be added to the source document so that the formsPlayer ActiveX component can be invoked. This also conveniently addresses the Eolas problem.

If neither plug-in is present then a small message is added to the top of the document along the lines of 'this form will run faster if you install x'. The message includes a link to make it easier for the user to download either the Firefox extension or formsPlayer, depending on the browser being used.

To see how this side of the script works, try running the following form in various browsers::

  http://lib-xh.googlecode.com/svn/trunk/test/basic.html

Using lib-xh to automatically install or upgrade formsPlayer

The script can also be used to automatically install formsPlayer, in situations where a project specifically requires formsPlayer to be present. It's also possible to indicate a required minimum version, which will force an upgrade if necessary. To make use of installation and upgrade features a version number is added to the document before the instruction to load lib-xH.js:

  <script type="text/javascript">
    var sLatestFpRelease = "1,5,4,1010";
  </script>
  <script src="http://lib-xh.googlecode.com/svn/trunk/xH.js" type="text/javascript">/**/</script>

An example that uses this technique is here:

  http://lib-xh.googlecode.com/svn/trunk/test/upgrade-fp.html

Note that loading this form in Firefox or Safari will give different messages to the previous example; since in this form we have specified that we must have formsPlayer installed, viewing the page in any browser other than IE will give users a message that there is no version of formsPlayer available for them, and that they should try again, using IE.

Deciding whether to deliver XForms or HTML

If you are running a server-side XForms processor then you'll also need to detect whether a client-side processor has been installed. To detect formsPlayer check the HTTP Accept headers for the string formsPlayer. If it's detected then your server can simply deliver the XForms untransformed.

[Need to check how this is done with Firefox.]

If no client-side XForms processor is detected then the transformation to HTML can continue, and the HTML delivered to the user. However, even then, if lib-xH.js is included in the output HTML, the user still has the option to install a client-side processor which would then be used for subsequent forms.

Conclusion

Since XForms can be run on a number of different processors, applications that make use of XForms would do well to empower their users to decide whether they use a client-side processor or not.

Deploying formsPlayer

A commercial license for formsPlayer entitles an organisation to distribute formsPlayer to their users, in any way they like--from their own servers, via CD-ROM, and so on. But whichever way is chosen, the technique is the same; an HTML file references a CAB file, which in turn contains formsPlayer. This allows organisations control over everything from the look-and-feel of the installation, to when exactly it should take place.

In the mark-up that follows we'll assume that the CAB file is to be distributed from an intranet server, and that the HTML file is at a different location to the CAB file (hence the need for absolute paths). But the same techniques will work if the HTML and CAB file are in the same directory on the same server, or if they are both in a ZIP file on a CD-ROM.

We'll assume that the CAB file containing the specific version of formsPlayer that needs to be installed, has been copied to this location:

http://intranet/files/formsPlayer1.4.3.1028.cab

Installing formsPlayer

Installation is as simple as creating an HTML page that contains the following:

<head>
  <object width="0" height="0" id="formsPlayer"
   classid="CLSID:4D0ABA11-C5F0-4478-991A-375C4B648F58"
   codebase="http://intranet/files/formsPlayer1.4.3.1028.cab"
  >
    <b>formsPlayer has not been installed.</b>
  </object>
  <?import namespace="xf" implementation="#formsPlayer"?>
  <title>Some XForm</title>
</head>

Using @codebase in this way will cause formsPlayer to be installed if it is not already present on the machine. However, if it has been installed already, it will not be automatically upgraded if the version in the CAB file being referenced is newer; in fact, the CAB file is not referenced at all if formsPlayer was successfully initialised.

Upgrading formsPlayer

To force Internet Explorer to test the version of a current installation of formsPlayer, #Version is added to the CAB file's URL:

<object width="0" height="0" id="formsPlayer"
 classid="CLSID:4D0ABA11-C5F0-4478-991A-375C4B648F58"
 codebase="http://intranet/files/formsPlayer1.4.3.1028.cab#Version=1,4,3,1028"
>
  <b>formsPlayer has not been installed.</b>
</object>

With this combination, a user that doesn't have formsPlayer installed already will have version 1.4.3.1028 installed for them, whilst a user that has a version less than 1.4.3.1028 will be automatically upgraded. Nothing will happen for those that already have 1.4.3.1028 installed, and likewise, nothing will happen if a user obtained a newer version of formsPlayer via another route.

Enforcing a minimum version

The version number needn't be as specific as indicating an exact release of formsPlayer. For example, if we have a form that makes use of some XForms 1.1 features that were introduced in formsPlayer 1.5, we may want to insist on the user having some version of 1.5, but we might not mind which one. This scenario could be handled as follows:

<object width="0" height="0" id="formsPlayer"
 classid="CLSID:4D0ABA11-C5F0-4478-991A-375C4B648F58"
 codebase="http://intranet/files/formsPlayer1.5.1.1001.cab#Version=1,5"
>
  <b>formsPlayer has not been installed.</b>
</object>

As new versions of formsPlayer are placed on the server, the name of the CAB file can be updated, but the value of the Version parameter needn't change:

<object width="0" height="0" id="formsPlayer"
 classid="CLSID:4D0ABA11-C5F0-4478-991A-375C4B648F58"
 codebase="http://intranet/files/formsPlayer1.5.1.1002.cab#Version=1,5">
  <b>formsPlayer has not been installed.</b>
</object>

<object width="0" height="0" id="formsPlayer"
 classid="CLSID:4D0ABA11-C5F0-4478-991A-375C4B648F58"
 codebase="http://intranet/files/formsPlayer1.5.1.1003.cab#Version=1,5">
  <b>formsPlayer has not been installed.</b>
</object>

<object width="0" height="0" id="formsPlayer"
 classid="CLSID:4D0ABA11-C5F0-4478-991A-375C4B648F58"
 codebase="http://intranet/files/formsPlayer1.5.2.1001.cab#Version=1,5">
  <b>formsPlayer has not been installed.</b>
</object>

This has the effect of not upgrading everyone each time a new version of 1.5 is available, but it does ensure that anyone still using 1.4 or 1.3 will be upgraded.

Embedded within your application

A common use of formsPlayer is for it to be embedded as part of a more traditional desktop application. For example, an application can be built using .NET to provide the application logic, but declares much of the user interface using XForms.

Maintenance and Upgrade Licenses

When you purchase any of our licenses they are configured so that they can be used with any revisions of formsPlayer that are the same version as the license you have purchased. For example, a license for version 1.5 of formsPlayer would work with formsPlayer 1.5.1, 1.5.2 and so on.

When purchasing a license, you also have the option of purchasing a one year Maintenance and Upgrade License which would mean that your license would work with any release of formsPlayer within a year, such as 1.6, 1.7 and so on.

Maintenance and Upgrade Licenses can be obtained from Grey Matter.

Support

formsPlayer Developer Support helps developers resolve issues relating to their use of formsPlayer in web applications. Community support is available free of charge to the entire developer community on "best effort" basis. Developers who require clearly defined reaction time targets or want to keep their communication with formsPlayer confidential, can purchase professional support, either on a per-incident basis, or by becoming a Technology Partner. Developers can also purchase our fastStart consultancy if they need help designing or building an application.

Community support

Getting started

The best way to get started is to look at the documentation in the handbooks. In particular, read Programming with formsPlayer and XForms which will guide you through installing formsPlayer and setting up a development environment, which you can then use to work through the Introduction to XForms tutorial. The course shows many key XForms features by way of two useful forms; the first saves links to del.icio.us, whilst the second searches Flickr for images that match a tag.

Samples

There are many complete samples available, which will provide plenty of code to look at. The samples are categorised, with tags such as social-bookmarking, mapping, REST, 3D graphics, and more.

Forums

Once you start developing your own XForms applications you'll find the forums a useful place to ask questions about development. If you've had any problems installing formsPlayer or setting up your development environment then also take a look at the installation forums. If you have any announcements about XForms or formsPlayer then post them in the News and announcements forum.

Bug reports

Please read the detailed description on using the issue-tracking system, linked to below.

Feature requests

We're always looking for ways to improve and enhance formsPlayer, so if you have ideas for features you'd like to see, we'd love to hear them. Please first search the list of feature requests to see if there is a similar suggestion. Even if someone has already made the same suggestion, feel free to add any further thoughts you have, so that if we do come to implement the feature, we'll fulfill as many requirements as possible. And if you find nothing similar then go ahead and add your request.

Using the issue-tracking system

We're currently experimenting with using the issue-tracking system here as the only tracking system. We used to use Bugzilla internally, and would enter bugs into the system as they were notified to us on our old Yahoo! Group. But that meant that formsPlayer users would never get to see the progress of a bug, or have any idea which of the bugs in the list were being worked on at any one time. (Or indeed, what bugs were outstanding.) So we decided to take the approach that unless there was a good reason for logging a bug in our internal Bugzilla system, we would always use the public system.

But that does have its problems, since we need people to use the tracking system in a fairly specific way.

Entering bugs

If you think you have found a bug in formsPlayer, please first search the bug list to see if someone has already raised the same problem, and then add your comments to the existing bug report. If you find nothing similar then go ahead and add a new issue. Each of the main samples also has its own project page and its own bug tracking area, so if you see a problem with a sample, please post to the specific area.

Assuming that you now definitely have a bug, the best way to use a bug-tracking system is start specific and work out. For example, imagine a bug entitled Submission errors when using HTTPS appear to no longer trigger xforms-submit-error. There is a strong possibility that this bug concerns all submissions, not just those that use HTTPS. And it's also possible that the bug is to do with the incorrect registering of event handlers (i.e., not specifically submission errors), or even that toggle is no longer working correctly (perhaps the handler for a submission error uses toggle and the person who entered the bug is not seeing a case change). These scenarios are unlikely, but it doesn't matter, since as a developer works on the bug, they can refine the title of the bug as necessary, should they find that the issue is not related to submission.

So the job of anyone entering a bug is mainly to give as much information as possible to help reproduce the error.

Reopening bugs, or creating new ones

Now, just say that by the time the bug is fixed, the title has been repeatedly changed (in line with whatever theory the developer was working on at the time) until it ends up being called Toggle fails on Wednesdays; in other words, it turns out that the bug was nothing to do with how it first appeared (submission errors not firing when using HTTPS). And then let's say that the day after this bug is fixed and close, the person who entered the bug discovers in some other form that they are workin on...that once again xforms-submit-error is not firing when using HTTPS!

Is this the same issue as before? Well, obviously it can't be, since the previous issue was "Toggle fails on Wednesdays. It may have started life as an HTTPS-related issue, but that turned out to be wrong, and it needs to be treated as if it always was an issue to do with toggle failing on a particular day of the week.

So it means a new issue has to be entered, and we then start from scratch.

Summary

So, to summarise...please enter lots of small issues, focusing on just one problem, and having clear descriptions. There is no need to try to second-guess what the underlying problem is--we'll leave that to the guys with the debugging tools. If we don't do it this way there is no way for developers to get a handle on what's going on, and no way to refer to bugs in an unambiguous way. And the open issues list becomes meaningless.

Professional support

Incident-based support

Professional support is an incident-based paid service, obtained by purchasing support vouchers, each valid for one single support request. Vouchers expire in one year from the purchase date, and you must have at least one unused voucher before we can start tracking your request. If you have none yet, you can either buy a pack of 10 vouchers, or become a Silver Technology Partner, which includes, amongst other things, a pack of 10 vouchers.

Additional terms:

  • All professional support requests must be filed through our issue-tracking system.
  • Responses will be given through our issue-tracking system, and possibly via other channels (IM, e-mail, etc.). If other channels are used for quick interaction, a summary will still be recorded in the issue-tracking system as well.
  • Community support requests will only be handled after all professional support requests are taken care of.

If you would like to find out more about Professional Support then please contact us.

Purchase

If you would like to buy Single Project Licenses or User Licenses they are available online from Grey Matter.

If you would like to become a Silver Technology Partner, please go here.

If you would like to find out more about becoming a Technology Partner then please contact us.

Case studies

Some case studies are available here.

Moving between different formsPlayer versions

formsPlayer implements all of the W3C's XForms 1.0 specification. As with any specification, there have been clarifications about what exactly the original document meant, and these have recently been published in the form of XForms 1.0 Third Edition.

Some of these clarifications have a subtle effect on the way an XForms processor is to behave, and therefore how a form might be written. These changes are extremely unlikely to affect your forms, but if you have been using formsPlayer for a while you should take a look at the guide to be sure that your forms don't need changing.

If you are a new user of formsPlayer though, then you can ignore the distinction between different versions of formsPlayer, and just go right ahead and take a look at the latest release.

Moving from formsPlayer 1.3 to formsPlayer 1.4

One of the main goals for formsPlayer 1.4 was to fully support the second edition of XForms 1.0, since the new release of the specification contained quite a few clarifications as to how things should be implemented. However, in the process of doing this, we've also added asynchronous submissions, conditional action handlers (from XForms 1.1), better CSS support, numerous bug fixes and some speed improvements.

The next section details things to be aware of when moving from older versions of formsPlayer to version 1.4, and the section after details the changes between the first and second editions of XForms. This second section is mainly for reference--if you currently have forms deployed that use an older version of formsPlayer and you would like to upgrade to 1.4 then the first section is more important.

Updating deployed forms

The changes between XForms 1.0 and XForms 1.0 Second Edition are documented in the next section, although the only one that would affect deployed forms is the way that MIP events are dispatched.

A separate section also lists the changes that have ocurred in formsPlayer, but the most significant is that there are a couple of changes to submission.

Asynchronous submissions

For many of your forms the fact that submission is now asynchronous will not require a change, since it was already good practice to not execute code after a send. Take the following example:

<xf:action ev:event="my-event">
  <xf:send submission="sub" />
  <xf:setvalue ref="x" value=". + 1" />
</xf:action>

In previous versions of formsPlayer with synchronous submissions, the setvalue would not be executed until the submission had completed. However, there is no way to know whether the submission was successful or not. In some situations this may be ok, but in others--perhaps a case is toggled so that some search results can be shown--it is not, since if the submission fails there will be nothing to see.

So even with synchronous submission it was better to put the code that comes after the send into an xforms-submit-done handler:

<xf:action ev:event="my-event">
  <xf:send submission="sub" />
</xf:action>

<xf:action ev:observer="sub" ev:event="xforms-submit-done">
  <xf:setvalue ref="x" value=". + 1" />
</xf:action>

Now the setvalue will only take place if the data was correctly returned.

If your code already took this approach then you having nothing to change to take advantage of asynchronous submissions. But if it didn't you may see slightly different behaviour since actions following the send will now occur straight away. So toggling a case in a switch, for example, may not be desirable if the form then sits waiting for data to arrive.

For an example of how to make use of this to show an 'in progress' animation, see The Toggle action in the Introduction to XForms.

Default error messages in submission

To give the author more control over how errors are handled there is now no longer a default error message for a failed submission. This can be confusing to a user if you don't have a handler for xforms-submit-error in your forms. In the past this would have been handled by formsPlayer showing a default message, but since this would often conflict with any message that the form author might have added themselves we decided to remove it. It's therefore a good idea to add something like the following to your forms:

<xf:action ev:observer="sub" ev:event="xforms-submit-error">
  <xf:message level="modal">
    Failed to update the customer details.
  </xf:message>
</xf:action>

Changes between XForms 1.0 and XForms 1.0 Second Edition

This section summarises the changes that were made in the move from XForms 1.0 to XForms 1.0 Second Edition.

Although it is worth reading through all of the changes, most of them are unlikely to alter the operation of current forms, except for the way that MIP events are dispatched.

Section 3.3.2 The instance Element

If creation of the detached copy of the inline instance data fails due to an XML error, then processing should halt with an xforms-link-exception.

All data relevant to the XPath data model must be preserved during processing and submission, including processing instructions, comment nodes and all whitespace.

Section 4.1 Events overview

The target for the xforms-submit-error event is now the submission object that is in error, rather than the model that contains it.

Section 4.3.2 The xforms-focus Event

Setting focus to a repeating structure sets the focus to the repeat item represented by the repeat index.

Section 4.3.4 The xforms-refresh Event

All UI bindings should be reevaluated as necessary.

If the value of an instance data node was changed, then the node must be marked for dispatching the xforms-value-changed event. A node can be changed by:

  • confirmed user input to a form control;
  • xforms-recalculate (section 4.3.6);
  • setvalue (section 10.1.9) action.

If the xforms-value-changed event is marked for dispatching, then all of the appropriate model item property notification events must also be marked for dispatching (xforms-optional or xforms-required, xforms-readwrite or xforms-readonly, and xforms-enabled or xforms-disabled).

For each form control, each notification event that is marked for dispatching on the bound node must be dispatched (xforms-value-changed, xforms-valid, xforms-invalid, xforms-optional, xforms-required, xforms-readwrite, xforms-readonly, and xforms-enabled, xforms-disabled). The notification events xforms-out-of-range or xforms-in-range must also be dispatched as appropriate. No ordering is specified for the events.

Section 4.3.6 The xforms-recalculate Event

Events are "marked for dispatch" instead of dispatched as they are tested.

Section 4.4.2 The xforms-value-changed Event

This event is now dispatched during xforms-refresh if the bound instance data node has changed.

Section 4.4.3 The xforms-select and xforms-deselect Events

itemset now supports xforms-select and xforms-deselect.

Section 4.4.6 to 4.4.15 The MIP Events

These are now dispatched whenever the instance node changes, not just when the state of the MIP changes. This means it is no longer possible to spot when the transition is made from enabled to disabled, for example, and also means that a form that is using any of these events will now receive more occurrences than it used to.

Section 4.5.1 The xforms-binding-exception Event

This is now also dispatched if the instance attribute on the submission element refers to an instance element that is in a different model to the submission element.

Section 4.6.7 Sequence: Value Change

The event sequence is now slightly different.

Section 6.1.4 The relevant Property

When false, associated form controls (and any children) and group and switch elements (including content) should be made unavailable, removed from the navigation order, and not allowed focus.

Section 7.7.1 The boolean-from-string() Function

This function now returns false() if it receives an invalid value, rather than throwing a compute exception.

Section 7.8.1 The avg() Function

If any of the input nodes evaluate to NaN then the return value is also NaN.

Section 7.8.5 The index() Function

If the argument to the function does not actually identify a repeat element then the function returns NaN.

Section 9.1.1 The group Element

If a group is non-relevant, then the rendering approach used to signify non-relevance is applied to the entire content of the group. This clarification was made because the old wording implied that when a group was non-relevant, its children could still be relevant.

Section 9.3.5 The insert Element

The at attribute used in insert and delete is evaluated in the context created by nodeset.

Sections 10.1.3, .4, .5, .6 and .11 The rebuild, recalculate, revalidate, refresh and reset Elements

The model is now optional and if absent obeys the usual 'first model' rule.

Sections 7.10.2 and 7.10.3 The days-from-date() and seconds-from-dateTime() Functions

These functions now clarify that the return value is normalised to UTC.

Section 11.1 The xforms-submit Event

All selected instance data nodes are checked for validity as if the xforms-revalidate event was being executed, but no notification events are marked for dispatching. Any selected instance data node that is required but empty, or is found to be invalid, stops submission processing after dispatching the xforms-submit-error event.

If the response includes a body of a non-XML media type (i.e. with a content type not matching any of the specifiers in [RFC 3023]), when the value of the replace attribute on element submission is "instance", nothing is replaced and submit processing concludes after dispatching the xforms-submit-error event.

If an instance is replaced, then the rebuild, recalculate, revalidate and refresh operations are performed on the model, but without dispatching events to invoke those four operations.

Moving from formsPlayer 1.4 to formsPlayer 1.5

The 1.5 release adds XBL functionality. It is currently a preview, but this section will be updated when 1.5 is finalised.

Tips for posting to the forums

The following was lifted from the Drupal.org site, but seems pretty applicable. We'll add notes that are more specific to us, such as choosing categories, and so on, but the following will do for now.

The following best practice tips can make participating in the forums a more pleasurable and productive experience for everyone:

  • Context-sensitive forum post titles. Good titles are just as important in forum posting as they are in email. Many newbies believe that the easiest way to get support is to scream "HELP" in all caps in a subject line. However, many forum members check the tracker page and scan the titles. They prioritize how they may use their limited time by offering support where they feel they can provide direct assistance. So a post like "Getting error X in installation" or "Help with thinking through corporate forms system" is more likely to attract someone who can assist with your problem.
  • Detailed specifics. Often, before someone may be able to assist you, they will need to know the formsPlayer or Sidewinder version number, the environment, the specific error generated, and other information. Vague support requests just end up requiring a volley of question and answer, lengthening the time it takes to resolve an issue.
  • Ignore flames and rude tones. Since many members are not native English speakers, realize that a brusque tone may be a result of language differences and should not be immediately interpreted as rude. Regardless, if you feel like another user has flamed you, the best response is to ignore the offense and continue working toward discussing productive solutions.
  • You get more bees with honey than with vinegar. While it is very easy to become frustrated when grappling with a problem, remember that forum members donate their time in offering support. People are more likely to respond to posts which ask nicely for assistance over those that demand it or complain. Politeness can make a difference.
  • With volunteer support, not everyone gets a response. If your post has gone unanswered, perhaps no one that has read your post has the solution to your problem. You might also consider whether the title for the post is specific enough. And if you feel like support response could be better, please donate some of your time, too, to answering support questions.
  • Enable your contact tab. So that people may offer assistance privately by email, be sure to edit your user account and check the Personal contact form box. This feature does not share your email address, but rather forwards the message to you.

Additional reading;

The famous How To Ask Questions The Smart Way

Version numbers and build policies

Which version to use

The most stable and tested version of formsPlayer is 1.4.3.1040. This is the version that will be automatically installed for your users if you place the lib-xh script into your applications, and is the version we recommend you use if you have a commercial license.

If you do not have a commercial license linked to in your forms, then users viewing your forms with formsPlayer 1.4 will see the formsPlayer branding. To avoid this, have your users install version 1.5.4.1006. This can be done either be referring them directly to the download page, or by adding a minimum version requirement to your forms before the reference to lib-xh, as follows:

  <head>
    <title>My XForm</title>
    <script type="text/javascript">
      var sLatestFpRelease = "1,5,4,1006";
    </script>
    <script src="http://lib-xh.googlecode.com/svn/trunk/xH.js" type="text/javascript">/**/</script>
  </head>

Interim builds

In addition to the two versions mentioned above, we will often make interim builds available which will preview new features. These are aimed at developers, and may not always contain the latest bug fixes. However, if they contain a feature that you need then you will almost certainly find them useful, and as you evaluate the new features we'd appreciate feedback on performance and bugs. The latest interim build is 1.5.5.1017, which supports re-architected select and select1 controls.