Skip to main content
July 19, 2022
Solved

foreach incrementation

  • July 19, 2022
  • 15 replies
  • 0 views

{a!localVariables(
local!item:0,
a!forEach(
items: enumerate(2),
expression: a!columnsLayout(
columns: a!localVariables(
local!outerIndex: fv!item,
local!item:1,
a!forEach(
items: 1+enumerate(3),
expression: a!columnLayout(
contents: a!cardLayout(
style: "INFO",
contents: {
a!textField(
value:local!item,
saveInto:a!save(local!item,tointeger(local!item)+1),
),
a!richTextDisplayField(
labelPosition: "COLLAPSED",
align: "CENTER",
value: a!richTextItem(
text:local!item,
color: "#1a1a00",
size: "MEDIUM",
),
),
},
height: "MEDIUM",
shape: "ROUNDED",
),

)
)
)
)
),
)
}

The above code will have 2 columns and 3 rows.

it is giving the below output.

but i want to display 1 2 3

                                  4 5 6.

If i apply some logic , i will get 1 2 3

                                                 3 4 5

incrementing variable also not possible here. kindly help.

Best answer by mikes0011

I agree, getting used to the way local variables works in Appian (including scoping) takes some getting used to, as it doesn't behave the same way as it typically works in other programming languages, in a few important aspects.  But when you get used to how it DOES work, especially when you understand what i call "update chaining", it gets REALLY powerful.  Generally I suggest starting with smaller, simpler examples and gradually stepping up the complexity when you really understand what you currently have.

BTW if you found my above code snippet useful, I would appreciate a "verify answer" and/or upvote when convenient for you.

15 replies

harshitb6843
July 19, 2022

Isn't it somewhat the same post - community.appian.com/.../nested-for-each

July 20, 2022

if the number of row increases , the one which was discussed earlier was not working.

mikes0011
Brainy
July 19, 2022

Please use a Code Box, which preserves indentation/formatting and improves readability of code (back up out of the negatives)...

The Expression Guru
mikes0011
Brainy
July 19, 2022

I'm not really clear what you're trying to do here overall, but you seem to be misunderstanding how local variables work and how saveInto works.  For instance, the local!item: 0 you declare on line 2 is irrelevant to this code snippet as it's never used, since you supersede it in scope by re-declaring local!item inside your forEach loop, on line 8. 

Additionally, local!outerIndex is never used either.  And the saveInto you're doing in your text field (whether this is your intended behavior or not, i honestly can't tell), just adds 1 to the current grid row's local!item value, regardless of what the user inputs (and has no effect whatsoever prior to the user interacting with the text field).

The Expression Guru
July 20, 2022

i have 2 columns and number of rows depends on dynamic data.

if i have 20 values means first 10 value in column1 and next 10 value in column2.

e.g

outerforeach:enumerate(2)

innerforeach:enumerate(20)

i have used   (fv!index+(local!outerIndex-1)*2) ----this logic to print the number from 1 to 20 in the given column layout as suggested earlier in this forum..

but it is printing 1 to 10 in 1st column layout, and 3 to 12 in another column layout.

it is not in sequence. unable to increment the fv!index as well.

July 20, 2022

 a!localVariables(
   local!selectedColumn:0,
   local!createdcard:0,   
   local!datas: {
     {Name:"Name1",Description:"Description1"},
     {Name:"Name2",Description:"Description2"},
     {Name:"Name3",Description:"Description3"},                          
     {Name:"Name4",Description:"Description4"},                          
     {piName:"Name5",Description:"Description5"},
     {Name:"Name6",Description:"Description6"},
     {Name:"Name7",Description:"Description7"},
     {Name:"Name8",Description:"Description8"},                          
     {Name:"Name9",Description:"Description9"},                          
     {Name:"Name10",Description:"Description10"},  
     {Name:"Name11",Description:"Description11"},
     {Name:"Name12",Description:"Description12"},
     {Name:"Name13",Description:"Description13"},                          
     {Name:"Name14",Description:"Description14"},                          
     {Name:"Name15",Description:"Description15"},  
   },
 local!selectedCard,
 {
   a!richTextDisplayField(

     labelPosition: "COLLAPSED",
     value: {
       char(10),         
       a!richTextItem(
         text: "Datas",
         color: "#b366ff",
         size: "LARGE"
       ),
       char(10)
     },

     showWhen: isNull(local!selectedCard),
     align: "CENTER"
   ),  
 
 {
   a!columnsLayout(
     marginBelow: "NONE",
     spacing: "NONE",
     columns: {
       a!columnLayout(),
       a!forEach(
         items: 1+enumerate(2),                        
         expression: {
           a!localVariables(
             local!outerIndex:fv!index,
             a!columnLayout(
               contents: {
                 a!forEach(
                   items:1+enumerate(count(local!datas.Name)),
                   expression: {
                     a!localVariables(
                       local!innerIndex:fv!index,
                       a!cardLayout(
                         style: "INFO",                             
                         contents: {                                    
                           a!richTextDisplayField(
                             labelPosition: "COLLAPSED",
                             value: {
                               char(10),
                               char(10),
                               a!richTextItem(
                                 text:if(((fv!index+(local!outerIndex-1)*2)>count(local!datas.Name))," ",local!datas[fv!index+(local!outerIndex-1)*2].Name),
                                 color: "#1a1a00",
                                 size: "MEDIUM"
                               ),
                               char(10),
                               char(10),
                               a!richTextItem(
                                 text: if(((fv!index+(local!outerIndex-1)*2)>count(local!datas.Name))," ",local!datas[fv!index+(local!outerIndex-1)*2].Description),
                                 color: "#1a1a00",
                                 size: "SMALL",
                                 style: "PLAIN"
                               ),
                               char(10),
                               
                               a!richTextItem(
                                 text: " ",
                                 color: "#1a1a00",
                                 size: "SMALL",
                                 style: "PLAIN"
                               )

                             },
                             align: "LEFT"

                           ),
                           a!richTextDisplayField(
                             labelPosition: "COLLAPSED",                      
                             value: a!richTextItem(                        
                               text: {
                                 a!richTextIcon(
                                   icon: "external-link",
                                   altText: "external-link"

                                 ),
                                 " ",
                                 "viewmore" &" "&(fv!index+(local!outerIndex-1)*2),

                               },

                               link: a!dynamicLink(
                                 saveInto: {
                                   a!save(local!selectedCard, if(((fv!index+(local!outerIndex-1)*2)>count(local!datas.Name))," ",local!datas[fv!index+(local!outerIndex-1)*2].Name)),
                                   a!save(local!selectedColumn,1),
                                   a!save(local!createdcard,(fv!index+(local!outerIndex-1)*2)),
                                   

                                 }
                               ),
                               linkStyle: "STANDALONE",
                               color:"#a64dff"
                             ),
                             align: "CENTER",
                           ) 
                         },
                         height: "MEDIUM",
                         shape:"ROUNDED",
                         showWhen: tointeger((fv!index+(local!outerIndex-1)*2))<=count(local!datas.Name),
                       )
                       

                     ) ,
                     a!cardLayout(showBorder: false), 
                     
                   },

                 ) 
               },                          

               width: "MEDIUM_PLUS"
             )
           ),a!columnLayout()
         }
        
       ),
      
     },                  
     /*showWhen: isNull(local!selectedCard),                  */
     showWhen: tointeger(local!selectedColumn=0)

   ),
 }
 }
 
 )

This is code i have tried