Good Morning.
I have a flowed form that looks like this.
form1
Subform1
ACT (ExpandableTable)
Header
Row1
Row10
Footer
button
when the button in the footer is clicked a popup menu appears where users can insert a new instance of the Table, Copy current section, or delete current section. I have not been able to copy the values from the previous instance successfully when the copy current section is chosen. All fields need to be copied and there is probably 20 fields in all. Also how would I insert a new blank instance between two instances?
Here is the click event I have so far.
var cChoice = app.popUpMenu("Add a blank section", "Copy this section", "-", "Delete this section");
if (cChoice == "Delete this section"){
_ACT.removeInstance(ACT.instanceIndex);
}
else if
(cChoice == "Add a blank section"){
_ACT.addInstance(ACT.instanceIndex);
} else {
var intCount = xfa.resolveNode("ACT").instanceManager.count; xfa.resolveNode("ACT").instanceManager.addInstance(1);
xfa.resolveNode("ACT.Row1[" + intCount.toString() + "].AssetClass").rawValue = xfa.resolveNode("ACT.Row1[" + (intCount - 1).toString() + "].AssetClass").rawValue ; }
Views
Replies
Total Likes
This is an interesting problem. I am looking at it now. For adding and instance you would need to use:
Table1.Row1.instanceManager.insertInstance. You will need to get the index number and determine where to insert. I am attaching a link to a good blog on the topic.
Views
Replies
Total Likes
I have no problem creating a new instance. The problem is copying the values from the previous instance once the new instance has been created.
I am trying to figure that out. You had also asked about inserting a row and I was providing that info for you.
Views
Replies
Total Likes
Oh ok that is what I though but figured I would clarify just in case.
Thanks
Views
Replies
Total Likes
I did a basic test and was able to get it to work using the following simple script:
xfa.resolveNode("form1.#subform.Table1.Row1[1].Name").rawValue = xfa.resolveNode("form1.#subform.Table1.Row1").Name.rawValue
You will need to get the index of the row you want to copy and then you would need to programmatically replace the number inside the [ ] with the correct index number. You probably also want to create a loop to go through all the fields on that row and pull them over. if it is just a couple fields then you could just do a line for each.
Views
Replies
Total Likes
I still can't seem to get it to work. When I select 'copy this section' it just inserts a blank instance. In case I didn't explain it correctly when a user inserts an instance they are actually inserting a new instance of the ACT table which has a header, footer and nine rows of data.
Also I think I have done something wrong and am throwing the instance manager out of sync when selecting the other choices.
Here is my updated script.
var cChoice = app.popUpMenu("Insert a blank section above", "Insert a blank section below", "Copy this section", "-", "Delete this section");
if (cChoice == "Delete this section"){
_ACT.removeInstance(ACT.instanceIndex);
xfa.form.recalculate(1);
}
else if
(cChoice == "Insert a blank section below"){
var RowCount = _ACT.count - 1
_ACT.addInstance(RowCount + 1);
xfa.form.recalculate(1);
}
else if
(cChoice == "Insert a blank section above"){
var RowCount = _ACT.count - 1
_ACT.addInstance(RowCount);
xfa.form.recalculate(1);
}
else
{
_ACT.addInstance(ACT.instanceIndex);
var vRowCount = _ACT.instanceIndex - 1
var i=0;
for (i=1;i<=vRowCount;i++)
{
xfa.resolveNode("form1.#subform.ACT[" + (i-1) + "].AssetClass").rawValue = xfa.resolveNode("form1.#subform.ACT.Row1").AssetClass.rawValue
}
}
Views
Replies
Total Likes
I was able to get it working with the following. Right now there is no condition like you have in your script so mine replicates for each click.
var i = this.parent.index
xfa.resolveNode("form1.#subform.Table1.Row1[" +(i+1) + "].Name").rawValue = xfa.resolveNode("form1.#subform.Table1.Row1").Name.rawValue
Views
Replies
Total Likes
Still not working. New instance created but it is not carrying over the values from the text field.
_ACT.addInstance(ACT.instanceIndex); // Add a new instance(row) to the table
var i=this.parent.index;
xfa.resolveNode("form1.#subform.ACT.Row1[" + (i+1) + "].AssetClass").rawValue = xfa.resolveNode("form1.#subform.ACT.Row1").AssetClass.rawValue
Views
Replies
Total Likes
is it possible to send me the file? mousland@gmail.com
Views
Replies
Total Likes
I think I figured out how to do it. I do not have all the mechanics of it but I think it can work. What you need to do is remove rows 2-9. Have only 1 row but in the binding tab tell LCD to make that 9 instances. LCD will create a row[0] .. row[8] then set the field names across to something like assetClass for each of the fields so your field names would be assetClass[0].. assetClass[9]
now all you have to do is a loop to iterate through the field name and replace a var i for example with the numerical sequence 0, 1, 2, etc.
Essentially while i < 10 do...
You will need to replicate this for each row however I think you can handle that with a second loop that would set another variable like j to replace the row number.
Does that make sense?
Views
Replies
Total Likes
That won't work because in each row the column widths and number of columns are different. Some columns have been merged to provide a larger cell area.
Views
Replies
Total Likes
That should not matter. Ultimately you are taking table1, row1, column1 and moving it to table2, row2, column2. the only thing you will need to do is to loop through the list so that you replace the numbering table[1] row[1] column[1] to table[2] row[2] column[2]
Views
Replies
Total Likes
Ok maybe I am confused because you said to remove rows 2-9 and have LCD replicate the rows. Wouldn't that mean that all rows will mirror the original row? Can you post an example and I will try it?
Views
Replies
Total Likes
If your table rows need to be individually set then yes that will make it a bit harder but you can still do the same loop a row at a time. Your loop will iterate through each field in the row
Views
Replies
Total Likes
Mike,
I was finally able to get it to work except it will only copy the values on the first time. If I try and copy a second time it only inserts a blank instance. All of the text fields are nested in a subform named data do think that is throwing off the index?
var cChoice = app.popUpMenu("Add a blank section", "Copy this section", "-", "Delete this section");
if(cChoice == "Copy this section"){
ACT._Row1.addInstance(1)
var i = this.parent.instanceIndex
xfa.resolveNode("form1.#subform.ACT.Row1[" +(i+1) + "].data.AssetClass").rawValue = xfa.resolveNode("form1.#subform.ACT.Row1.data.AssetClass").rawValue
}
else
if(cChoice == "Add a blank section"){
ACT.Row1.instanceManager.addInstance(1)
}
else
if(cChoice == "Delete this section"){
ACT.Row1.instanceManager.removeInstance(this.parent.instanceIndex)
}
Views
Replies
Total Likes
You would need to step through all your rows. This will work on the row you are adding but my understanding is you want to copy the whole table.
Views
Replies
Total Likes
Following your advice I changed my method of approach. I am now inserting a new instance of Row1 which was merged into one subform (data) that contains all of the data fields(42 in total) that are required. I only posted the script for one textfield which is all I am testing it on until I get it working. Why does it only work the first time?
Views
Replies
Total Likes
Views
Likes
Replies