Developer's Guide
0 THE VOICE FOUNDATION CLASSES VOICEXML PROGRAMMING GUIDE
FOR CISCO UNIFIED CUSTOMER VOICE PORTAL RELEASE 4.0(1)
77
VPreference pref = ved.getPreference();
VForm form = VForm.getNew(pref, "start");
Here, the VPreference object is obtained from the VoiceElementData object passed as input to
a voice element. It is used to create a VForm object. Assuming the application is using the voice
browser Foo, that choice is reflected in the VPreference object and therefore the getNew factory
method returns a VFormFoo object, which is automatically downcasted to a VForm object. The
developer then uses the form object as desired.
This ability to treat all objects returned as a root VFC object is not available when the developer
wishes to use functionality that exists either in a particular version of VoiceXML or a particular
voice browser. The developer must understand that doing so would prevent their code from
functioning on all voice browsers. In this case, the developer simply treats the return of the
factory method as a class higher in the class hierarchy (VFormV2 or VFormFoo in the example in
Figure 15-1).
The following Java code demonstrates this:
VGrammar myGrammar = VGrammar.getNew(pref);
((VGrammarV2) myGrammar).setMaxage(1000);
The setMaxage method exists only in the VGrammarV2 class since this is a feature that exists only
in VoiceXML 2.0. To call this method, one must first upcast the previously downcasted object
back to VGrammarV2. If this is not done, an exception will be thrown indicating that VGrammar
does not have a method named setMaxage. Also note that if the user in VoiceXML Studio chose
a voice browser that was compatible with VoiceXML 1.0 only, a runtime exception would be
thrown when this code is encountered because that browser would be unable to understand
VoiceXML referring to maxage.
VFC Classes
The following lists all the VFC classes (with full package names) and briefly explains what they
are responsible for. The Javadocs for Cisco Unified Customer Voice Portal for the VFCs provide
significantly more detail about the classes, their methods, and how they are used.
com.audium.core.vfc.util.VMain. This object is the container for a complete VoiceXML
document. It includes methods for managing information about the page such as the meta
tags, the doc type, and the value to put in the
<vxml> tag’s xml:lang attribute. It includes
methods for adding document-scope data such as links, variables, and VoiceXML properties.
VForm objects are added to this object to create the VoiceXML page. Unified CVP
VoiceXML Server uses the
VMain object to handle the printing of the VoiceXML page.
Voice elements receive an instantiated VMain object as input and the developer need only
worry about filling the object with the appropriate content.
com.audium.core.vfc.form.VForm. This class is a container for all the content in a VoiceXML
page not handled by the VMain class. It is a direct mapping of the <form> tag, though it also
produces other form-level tags such as <var> or <filled>.