Expand my Community achievements bar.

Don’t miss the AEM Skill Exchange in SF on Nov 14—hear from industry leaders, learn best practices, and enhance your AEM strategy with practical tips.
SOLVED

Unable to hide subform in table cell dynamically

Avatar

Level 1

Dear Friends,

i have a requirement where i need to make a subform in table row(cell) visible/invisible dynamically.

My Code:

data.#subform[0].#subform[2].#subform[3].GT_TABLE.DATA[0].#subform[1].#subform[2]::initialize - (JavaScript, client)
var length = xfa.resolveNodes("data.#subform[0].#subform[2].#subform[3].GT_TABLE.DATA").length;
//var fields = xfa.form.subform.table.row.all;
xfa.host.messageBox("Hi");
for (var i=0; i<=length; i++ )
{
xfa.host.messageBox("Hi");
if ( xfa.resolveNode("data.#subform[0].#subform[2].#subform[3].GT_TABLE.DATA["+ i +"].#subform[1].#subform[2].TextField1").rawValue == "X"){
this.presence = "hidden";
}else{
this.presence = "visible";
}
}

Problem 1. if the subform is hidden first row, it is hidden in all rows of table, where conditionally it should get visible/invisible.

               2. xfa.host.messageBox("Hi"); is not working, i have tried these as well none of the below is working for debugging purpose:

                    data.#pageSet[0].Page1.CurrentPage::initialize - (JavaScript, client)
                    xfa.host.messageBox("welcome","Error",3,0);
                   $host.messageBox("Welcome");
                   xfa.host.messageBox("Test");
                   app.alert("click");

 

 

1 Accepted Solution

Avatar

Correct answer by
Level 10

Well, you can simply use this JavaScript in the calculate event of SpouseSF.

 

this.presence = Textfield1.rawValue == "X" ? "visible" : "hidden";

 

View solution in original post

9 Replies

Avatar

Level 10

Well, I can't say what's wrong, without knowing the hierachy of you form. But I can already see some problems in your script.

 

1. DON'T name variables or form objects (subforms, fields …) after scripting properties or default form elements! That's a no go and can cause very strange effects! So you better use other names than "data" or "length".


2. This script will either return 0 or 1. It depends on, if the an element DATA below GT_TABLE below the fourth subform below the third subform below the first subform under the element data exists or nor. I think not, aand that would be, why you don't see the "Hi" message. 

// bad variable name "length", bad element name "data"! resolveNodes() will return 0 or 1 using this SOM expression.
var length = xfa.resolveNodes("data.#subform[0].#subform[2].#subform[3].GT_TABLE.DATA").length;

 

 

Avatar

Level 1
Dear radzmar,Please check my post i have provided herachy as well

Avatar

Level 1

Hi Radsmar,

 

I am attaching you screenshot for better understanding:Code_snippet.JPG

Scenario is like this a column in table has multiple subforms, so for each record the particular subform should be visible if it has data.

otherwise it should be invisble.

Note: i have renamed subforms names and made necessary code changes as well for better understanding.

 

Revised Code:

 data.#subform[0].#subform[2].#subform[3].GT_TABLE.DATA[0].FamilySF.SpouseSF::initialize - (JavaScript, client)var len = xfa.resolveNodes("data.#subform[0].#subform[2].#subform[3].GT_TABLE.DATA").length;
//var fields = xfa.form.subform.table.row.all;xfa.host.messageBox("Hi");
for (var i=0; i<=len; i++ )
{xfa.host.messageBox("Hi");
if ( xfa.resolveNode("data.#subform[0].#subform[2].#subform[3].GT_TABLE.DATA["+ i +"].FamilySF.SpouseSF.TextField1").rawValue == "X"){this.presence = "hidden";
}else{this.presence = "visible";
}
}

Avatar

Level 1

Dear Radmar,

 i am attaching with screenshot for better understanding with hirarachy and code as well.

Scenario is like this a column in table has multiple subforms, so for each record the particular subform should be visible if it has data.

otherwise it should be invisble.

Note: i have renamed subforms names and made necessary code changes as well for better understanding.

Code_snippet.JPG

code:

 data.#subform[0].#subform[2].#subform[3].GT_TABLE.DATA[0].FamilySF.SpouseSF::initialize - (JavaScript, client)var len = xfa.resolveNodes("data.#subform[0].#subform[2].#subform[3].GT_TABLE.DATA").length;
//var fields = xfa.form.subform.table.row.all;xfa.host.messageBox("Hi");
for (var i=0; i<=len; i++ )
{xfa.host.messageBox("Hi");
if ( xfa.resolveNode("data.#subform[0].#subform[2].#subform[3].GT_TABLE.DATA["+ i +"].FamilySF.SpouseSF.TextField1").rawValue == "X"){this.presence = "hidden";
}else{this.presence = "visible";
}
}

Avatar

Level 10

So, you want to hide subform "SpouseSF" if the field "Textfield1" is empty? 

I have a couple of questions about that:

 

1. Where does the data come from for "Textfield1"? 

2. What's the loop for?

Avatar

Level 1
1. Textfield1 I am filling it interface, it's actually flag I am setting it with "X" to hide subform

Avatar

Level 1

2. I am using loop becoz for each record I will check value of textfield1 is "X" or not. If "X" than I will hide otherwise I will make the subform(SpouseSF) visible.

Avatar

Correct answer by
Level 10

Well, you can simply use this JavaScript in the calculate event of SpouseSF.

 

this.presence = Textfield1.rawValue == "X" ? "visible" : "hidden";