Example: The Single Action Form
Using the HadronZoo naming convention, a single action form called "MyForm" whose purpose is to create/edit instances of "MyClass", is defined within a page or article either as:-
<xformDef name="form_MyForm" class="MyClass" action="fhdl_MyForm" url="/MyForm"> <xbutton name="Button"/> </xformDef>
<xformDef name="form_MyForm" class="MyClass"> <xbutton name="Button" action="fhdl_MyForm" url="/MyForm"/> </xformDef>
<xformDef name="form_MyForm" class="MyClass" action="fhdl_MyForm"> <xbutton name="Button"/> </xformDef>
<xformDef name="form_MyForm" class="MyClass"> <xbutton name="Button" action="fhdl_MyForm"/> </xformDef>
1) A single form definition named "form_MyForm" being created. 2) An entry in hdsApp::m_FormDefs with the form definition name "form_MyForm" as key and the form definition pointer as object. 3) For each page/article in which the form is referenced by an <xformRef>, a single form reference is created and a pointer to it is inserted into the visible entities of the page or article. 4) For each form action an entry in hdsApp::m_FormHdls with the form handler name of as key and a Null form handler pointer as object. 5) An entry in hdsApp::m_FormsUrl2Hdl with the URL of "/MyForm" as key and the form handler name "fhdl_MyForm" as object. 6) An entry in hdsApp::m_FormsUrl2Ref with the URL of "/MyForm" as key and the form reference pointer as object. 7) An entry in hdsApp::m_FormsRef2Url with the form reference pointer as key and the URL of "/MyForm" as object.
Example: The Multiple Action Form
Again using the HadronZoo naming convention, a multiple action form called "MyForm" for the same purpose, is defined within a page or article either as:-
<xformDef name="form_MyForm" class="MyClass" action="fhdl_MyForm" url="/MyFormA"> <xbutton name="ButtonA" action="fhdl_MyFormA"/> <xbutton name="ButtonB" action="fhdl_MyFormB" url="/MyFormB/> </xformDef>
Or:-
<xformDef name="form_MyForm" class="MyClass"> <xbutton name="ButtonA" action="fhdl_MyFormA" url="/MyFormA"/> <xbutton name="ButtonB" action="fhdl_MyFormB" url="/MyFormB"/> </xformDef>
Or in the independent case as either:-
<xformDef name="form_MyForm" class="MyClass" action="fhdl_MyForm""> <xbutton name="ButtonA" action="fhdl_MyFormA"/> <xbutton name="ButtonB" action="fhdl_MyFormB"/> </xformDef>
Or:-
<xformDef name="form_MyForm" class="MyClass"> <xbutton name="ButtonA" action="fhdl_MyFormA"/> <xbutton name="ButtonB" action="fhdl_MyFormB"/> </xformDef>
The form is referenced by <xformRef form="form_MyForm" context="MyClass" url="/MyFormA" url="/MyFormB"/>
The above configs result in:-
1) A single form definition named "form_MyForm" being created.
2) An entry in hdsApp::m_FormDefs with the form definition name "form_MyForm" as key and the form definition pointer as object.
3) For each page/article in which the form is referenced by an <xformRef>, a single form reference is created and a pointer to it is inserted into the visible entities of the page or article.
4) An entry in hdsApp::m_FormHdls with the name of "fhdl_MyForm" as key and a Null form handler pointer as object.
5) An entry in hdsApp::m_FormsUrl2Hdl with the URL of "/MyForm" as key and the form handler name "fhdl_MyForm" as object.
6) An entry in hdsApp::m_FormsUrl2Ref with the URL of "/MyForm" as key and the form reference pointer as object.
7) An entry in hdsApp::m_FormsRef2Url with the form reference pointer as key and the URL of "/MyForm" as object.
Note the entry in hdsApp::m_FormHdls awaits a subsequent <xformHdl> to define the form handler. The name is only reserved within the bounds of <xformDef>. Note also that in the above <xformRef> tag, the context attribute is set to 'MyClass'. If the data class 'MyClass' was being used as a sub-class in a member called 'MyClasses' of a parent data class 'MyBigClass', the context attribute would be 'MyBigClass.MyClasses'.