Overview
When XpressDox constructs an interview, it uses the document assembly instructions in the template to guide the layout of the interview. For example, if the first occurrence in the template of a fillpoint referencing the Name data element appears before the first occurrence of Date_Of_Birth, then the data element Name will appear before Date_Of_Birth in the interview.
A really powerful feature is the XpressDox Relevance Engine, which infers from the conditions in «If()»
and «Select()» ... «Case()»
commands whether a data element should appear in the interview, depending on data already entered in the interview. For example:
«ChooseFromList(PartyType,Individual,Company)»
«If(PartyType = 'Individual')»
Social Security Number:«Social_Security_Number»
«Else()
»
Company Number:«Company_Number»
«End()»
If the user chooses ‘Individual’ in the drop down list, then the data element Social_Security_Number will appear in the interview. If the user then changes the choice to ‘Company’, then Social_Security_Number will disappear from the interview, and Company_Number will appear instead.
Force Relevance
An interesting case is when the appearance of a data element in the document depends on its own value, for example:
«If(Name != '')»
The name is «Name»
.«End()»
In this situation the data element Name most likely has no value when the interview commences. But it would be inappropriate for the relevance engine to hide the data element under these circumstances (as the condition Name != ” would otherwise imply), because then the user would never be able to supply a value and then the sentence “The name is …” would never appear in the document!
Thus, when a data element appears in the document conditional on its own value, the relevance engine will always include that data element in the interview.
Similar behaviour is displayed in the case like:
«If(count(Child) > 0)»
The following will receive child benefits:
«ForEach(Child)»
Child’s Name:«ChildName»
«End(for each)»
«End(if)»
Here the repeater Child is always relevant in the interview, so that items can be added to it to render the value of count(Child) greater than zero.
Now, the above relevance inference works well when the data are being entered via the user typing it into the interview. However, there are some instances where the data arrive in the data set without the user specifically typing them in: for example, a ChooseFromDataSource or IncludeFileData command might result in many data elements being included in the data set. In such a case it might make sense not to allow the data elements included in this way to get into the interview.
Thus, for example, in the code snippet below, the repeater for the Child data element(s) will only be presented in the interview if there are already Child elements in the data set:
«InterviewRelevance(Child,count(Child) > 0)»
«If(count(Child) > 0)»
The following will receive child benefits:
«ForEach(Child)»
Child’s Name: «ChildName»
«End(for each)»
«End(if)»