


I have a form to build flowable dynamic lesson plans for training. Each lesson plan form consists of multiple pages, some of the pages contain multiple subforms, several having dynamic table rows. I am attempting to place a single reset form button on the page to clear all field values and reset all table row instances to 1 by clicking a button on the form master page.
My Current XFA/javascript attempt is below;
LP.#pageSet[0].Pt1.sFrmPfHd.resetForm::click - (JavaScript, client)
xfa.host.resetData();
// xfa.host.remerge(); <- didn't work
// loop through table and delete rows
while (LP.Pg1.FlowContentPg1.rowSFrmTngMethodPick.tblData._rowSubform.count > 1)
{
LP.Pg1.FlowContentPg1.rowSFrmTngMethodPick.tblData._rowSubform.removeInstance(0);
}
while (LP.Pg1.FlowContentPg1.rowSFrmTngMethodsFree.tblData._rowSubform.count > 1)
{
LP.Pg1.FlowContentPg1.rowSFrmTngMethodsFree.tblData._rowSubform.removeInstance(0);
}
while (LP.Pg3.PgBody.rowSFrmTngMethodPick.tblData._rowSubform.count > 1)
{
LP.Pg3.PgBody.rowSFrmTngMethodPick.tblData._rowSubform.removeInstance(0);
}
while (LP.Pg3.PgBody.rowSFrmTngMethodsFree.tblData._rowSubform.count > 1)
{
LP.Pg3.PgBody.rowSFrmTngMethodsFree.tblData._rowSubform.removeInstance(0);
}
while (LP.Pg3.PgBody.rowSFrmLP.tblData._rowSubform.count > 1)
{
LP.Pg3.PgBody.rowSFrmLP.tblData._rowSubform.removeInstance(0);
}
I would attach the form but cannot seem to find that as an option. If you would like to see the actual form please email me.
This should do the trick.
// Reset subforms to inital number of occurences
function resetSubforms (oNode) {
if (oNode.className === "subform") {
if (oNode.instanceManager !== null) {
var iCount = oNode.instanceManager.count,
iMin = oNode.occur.min ? oNode.occur.min : 1,
iInit = oNode.occur.initial ? oNode.occur.initial : iMin;
if (iCount > iInit) {
oNode.instanceManager.setInstances(iInit);
}
}
}
for (var i = 0; i < oNode.nodes.length; i += 1) {
resetSubforms (oNode.nodes.item(i));
}
}
resetSubforms (xfa.form); // call the function
You should use the setInstances() method first to reset the table to the desired amount of rows.
Then use the resetData() method.
// Reset tables
LP.Pg1.FlowContentPg1.rowSFrmTngMethodPick.tblData._rowSubform.setInstances(1);
LP.Pg1.FlowContentPg1.rowSFrmTngMethodsFree.tblData._rowSubform.setInstances(1);
…
// reset data
xfa.host.resetData();
Views
Replies
Sign in to like this content
Total Likes
I tried your suggestion and was unable to make it work. I may not be addressing the dynamic node addresses quite the way I need to. Would it be possible to write a generic loop to loop through the node tree and reset all setInstances(1) without having to specify them individually? This would also make the function usefule in a multitude of forms...
Thank you for your time.
Views
Replies
Sign in to like this content
Total Likes
This should do the trick.
// Reset subforms to inital number of occurences
function resetSubforms (oNode) {
if (oNode.className === "subform") {
if (oNode.instanceManager !== null) {
var iCount = oNode.instanceManager.count,
iMin = oNode.occur.min ? oNode.occur.min : 1,
iInit = oNode.occur.initial ? oNode.occur.initial : iMin;
if (iCount > iInit) {
oNode.instanceManager.setInstances(iInit);
}
}
}
for (var i = 0; i < oNode.nodes.length; i += 1) {
resetSubforms (oNode.nodes.item(i));
}
}
resetSubforms (xfa.form); // call the function