Introducing Form Guides

,

It has been way too long since I last updated this blog.  Now that I back for what I hope to be much more frequent updates regarding LiveCycle, Flex and rich Internet applications I decided to give my blog a fresh new look as well.

Over the past year I have been on the team that has been actively developing the new form guide functionality released with the LiveCycle Enterprise Suite.  In particular I have been developing the new Guide Builder tool that is included with LiveCycle Designer.  Now that LiveCycle ES has been released this post is the first in a series I plan to write over the next couple of months that covers the new form guide technology and how it works.

Form guides are Flash Player compatible wizard-like panels that help guide people through a data capture experience which are rendered using LiveCycle Forms ES.  While the form guide technology is included with LiveCycle Forms ES, there is also a tool called Guide Builder included with LiveCycle Designer ES that enables form guides to be defined from existing PDF and XML templates.

Imagine you have a document-based PDF form.  While this form is very capable of collecting data it may not be the most intuitive experience for a novice user. Such a form is still required however for going offline, collecting signatures and printing.  Also, if the form has been already imported into LiveCycle Designer additional scripting may have been added. Form guides enable a user to take their document centric forms and apply a new skin or user interface to them while still maintaining the same underlying data model.  In fact, the data model is shared between form guides and the PDF so one could actually enter data in either and see instantly in both renderings of the form!

Providing a different skin to an exisintg PDF form is ony the first step in form guide generation.  Form guides also provide a wealth of new features not available when simply filling out a document-based PDF.  Navigation can be added, sections of the form will dynamically appear as a auser enters data and answers questions, transitions can be added and interactive content incorporated into the final application as well.

 

Share on Facebook

12 Responses to Introducing Form Guides

  1. Gabriele says:

    Hello Anthony,I really enjoyed this short article.At the moment I am working with Adobe products like Flex, LiveCycle ES Platform,my currently task is to develop a Client that uses a FormGuide to capture data base on a PDF template structure and send this data to Forms ES to render then a static PDF.I have coded some code for the communication for a Flex application with LiveCylce Data Services ES so far,and data transmit works fine; but my Problem is, when I try from a FormGuide to connect to the LiveCycle Data Services ES I don’t get a connection established through the transport message channels which uses Data Services ES.My assume is, that a Flex application is compiled because its first a mxml file and than its invoke the Data Services ES services.The next milestone for me would be to establish a connection from a FormGuide to Data Services ES services I defined in the services-config.xml file (to then call Remote Java Object on the Server from a FormGuide).I really appreciate your help.Maybe you know how I could do it?Best regards,Gabriele Iannetti

  2. Anthony says:

    How are you trying to connect to LC Data Services through Form Guides? By default Form Guides are unable to communicate with LC DS. This is because the guide layouts provided do not have any support for LC DS.If you have a XDP or PDF that you want to render as a form guide and then connect to LC DS you will need to create a custom guide layout or panel layout in Flex that gets referenced using Guide Builder.Here is a good reference that goes over customizing form guides.http://www.adobe.com/go/learn_lc_fgCustomizing

  3. Gabriele says:

    Hello again,the mentioned problem I did solve.(I already have read the document how to customize formguides, but there is nothing about the data structure on a formgude, only about the layout – by the way, for customizing the layout it was essentially, my guides are based on the samples which are provided in the fgCustomizing)I really would appreciate your help in the following:I am tying to get the data into a FormGuide at runtime,doing this by invoking that code for example:panelManager.pages[0].panel.layout.panelItems, but if I try to access the “panelItems” by casting to PanelItem(var myPanelItem : PanelItem = panelManager.pages[0].panel.layout.panelItems[0];) I get an casting error from ClassFactory to PanelItem.I am running out of thougts to get full access to PanelItems in a FormGuide.Best regards,Gabriele Iannetti

  4. Anthony says:

    Each panel item in the array is a factory object that you will need to create an instance on.This should work…var oFactory:IFactory = panelManager.pages[0].panel.layout.panelItems[0]as IFactory;var oPanelItem:IPanelItem = oFactory.newInstance() as IPanelItem;

  5. Gabriele says:

    Hello Anthony,thank you very much for your nice support.Unfortunately the mentioned code fix does not work really.The error message does not return, but the attributes I get from such PanelItem are empty,furthermore I got an null pointer exception if I try to access to boundData/boundValue of a PanelItem (by the toString method).Here is the code for static access of the data model into a Form Guide, it works fine, but the access is very limited:xmlModel.Date = panelManager.lastPage.fields[0].toString();xmlModel.EmployeeName = panelManager.lastPage.fields[1].toString();// and so on…The disadvantage is that I need to know the XML schema of a given pdf/xdp template.I tried much code samples to get dynamic access with panel items,but I assume that the allocation is bad and so it fails.The data I get is empty and calling object attributes by toString returns bad allocs.I have analyzed the structure several times and I know that the panel with input fields returns by calling “panelManager.pages[1].hasInputFields.toString()” true.Now the lines of code I did use:var oFactory:IFactory = panelManager.pages[1].panel.layout.panelItems[1] as IFactory;var oPanelItem:IPanelItem = oFactory.newInstance() as IPanelItem;// always empty attributesAlert.show(oPanelItem.caption, “oPanelItem.caption”);Alert.show(oPanelItem.boundName, “oPanelItem.boundName”);Alert.show(oPanelItem.boundText, “oPanelItem.boundText”);// returns null errorAlert.show(oPanelItem.boundData.toString(), “oPanelItem.boundData.toString()”);Alert.show(oPanelItem.boundValue.toString(), “oPanelItem.boundValue.toString()”);What could be the error?The lines of code seems to be the right way.I appreciate your help.Sincerely yours,Gabriele

  6. Gabriele says:

    Dear Anthony,I can imagine that you don’t have much time for responding all messages you get.But I really do not have another reference except you about Form Guides (not layouting).I still have the problem with the PanelItems into a Form Guide, the objects I get are not null,but if I call a function on such a object the return value is empty.I would be really thankfully if you could take a minute to give me an answer on this.I got the right panels with its caption,the right number of PanelItems into a panel.That’s why I don’t understand why it does not work.Sincerely Yours,_Gabriele IannettiHere is my code:var oFactory : IFactory = null;var oPanelItem : IPanelItem = null;for(var i :int=0; i<PageArray.length; i++){Alert.show(PageArray[i].panel.layout.panelItems.length.toString(), “PageArray[i].panel.layout.panelItems[i].toString()”);Alert.show(PageArray[i].label, “PageArray.label”);for(var j :int=0; j<PageArray[i].panel.layout.panelItems.length; j++){oFactory = PageArray[i].panel.layout.panelItems[j] as IFactory;oPanelItem = oFactory.newInstance() as IPanelItem;var oObj : Object = oPanelItem as Object; // is an object with address}}

  7. Gabriele says:

    Hi again,I found out something interesting,maybe this could help.The dataref of the panelitems is set correctly,but unfortunately I don’t get the rest data of it.How can that be?// lastPage, panelItem[2] is a input fieldvar oFactory : IFactory = oPanelManager.lastPage.panel.layout.panelItems[2] as IFactory;var oPanelItem : PanelItem = oFactory.newInstance() as PanelItem;// dataRef is set correctlyAlert.show(oPanelItem.dataRef, “oPanelItem.dataRef”);// result => #som(Contact[0].BodyPage[0].EmployeeName[0])// but the caption for example is empty…Alert.show(oPanelItem.caption.toString(), “oPanelItem.caption”);I have also have checked the internal Form Guide output,where you can find the structure I used to access with.There is a PanelItem listened which contains a TextInput field,but other PanelItem objects may have other object types like DataFields or something,so I need to access by the PanelItem Interface only to get the value and caption for example.Best regards,Gabriele

  8. Anthony,I really like LiveCycle Designer’s ability to design forms from an XML schema – not so easy in Flex or AIR. Is it possible to import the Guide Content mxml from GuideBuilder and use this as the starting point for a Flex or Air project? I’ve tried it, referencing GuideBuilder SWCs etc but I get errors when I try to run the apps. I’ve readCustomizing Form Guides Using Flex™ Builder™but it focuses on going from Flex to LiveCycle – what if we want to go in the opposite direction?Many thanks,Neil

  9. Anthony says:

    Neil – it is possible to take the MXML generated by form guides and bring it into Flex Builder. All you should need to do is reference GAClientRuntime.swc, XFAModel.swc and their associated resource bundle SWCs located under the locale folder.I should also point out that this is venturing into unsupported territory. Once you go down this path you are decoupling your form guide from the source XDP and the LiveCycle Forms server processing. It may still be possible to hook up your augmented form guide back to LiveCycle but you may find it difficult to find help if you run into difficulties.Furthermore, you may be able to do what you want simple by creating custom components that can be imported into Guide Builder. I have created some wild and crazy guide and panel layouts in Flex Builder. After adding these custom SWCs to my guide it is possible to get a result that looks nothing like the default layouts provided and more like any other typical RIA.Anyway, just food for thought. Also, if you have specific customization questions fire away and hopefully I can help out.

  10. Mona says:

    Neil,How do you customize the guidebuilder to have a pop up screen and submit the values back to the page? Do you have an example of this? Do I have to do this in flex builder and how do you bring back the functionality back to guide builder?Thanks for help.