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.
Solved! Go to Solution.
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
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
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
Views
Likes
Replies
Views
Likes
Replies