I made a similar function to do just that. As long as the source set of subforms are named the same as the target, everything should transfer with ease. And it's reusable!
/************
*Build a target set of subforms
*based on a source making sure
*all objects are in the same order
*with same names
@para - source is the instanceManager object of the source set of subforms
@para - target is the instanceManager object of the target set of subforms(must be same name as source)
****************/
function loadData(source,target){
target.setInstances(source.count);//set the target's subform instances to match the source's
for (var a=0;a<source.count;a++){//loop through each subform instance
var sourceSubform=source.resolveNode(source.name.substr(1)).all.item(a);
var targetSubform=target.resolveNode(target.name.substr(1)).all.item(a);
for (var b=0;b<sourceSubform.nodes.length;b++){//loop through the children of each
if (sourceSubform.nodes.item(b).className=="field" && targetSubform.resolveNode(sourceSubform.nodes.item(b).name)!=null)//check for matching fields
if (typeof(targetSubform.resolveNode(sourceSubform.nodes.item(b).name).value.exData)=="undefined" ||
typeof(targetSubform.resolveNode(sourceSubform.nodes.item(b).name).value.exData.body)=="undefined")
targetSubform.resolveNode(sourceSubform.nodes.item(b).name).rawValue=sourceSubform.nodes.item(b).rawValue;
else
targetSubform.resolveNode(sourceSubform.nodes.item(b).name).value.exData.loadXML(sourceSubform.nodes.item(b).value.exData.saveXML(),1,1);
if (sourceSubform.nodes.item(b).className=="instanceManager" && targetSubform.resolveNode(sourceSubform.nodes.item(b).name)!=null)//check for matching subforms
loadData(sourceSubform.nodes.item(b),targetSubform.resolveNode(sourceSubform.nodes.item(b).name));
}
}
}
Kyle