totalCount not working ??

I'm doing some testing with integrations and grid fields within Appian 17.3 and have a question on functionality ...

My integration returns rather a lot of data, lets say 1000 rows and I've coded a grid layout to display the data that is retrieved. 

given that it's returning 1000 rows, it's rather slow to display. (the actual integration is quite fast). I've set my totalCount to 10  (totalCount:10), in the hope that it would stop building the grid at 10 rows, but that doesnt seem to happen. Have I mis understood what totalCount is for ?

 

looking back I should have used a paging grid, but I was also wanting to experiment for the forEach functions ..

  Discussion posts and replies are publicly visible

Parents Reply Children
  • 0
    A Score Level 1
    in reply to Jamal Case

    load(
    	local!pagingInfo: topaginginfo(1,5),
    	local!items :{
    		'type!{urn:com:appian:types}PS_example1CDT'(number_int:1,text_txt:"Lorem Ipsum1"),
    		'type!{urn:com:appian:types}PS_example1CDT'(number_int:2,text_txt:"Lorem Ipsum2"),
    		'type!{urn:com:appian:types}PS_example1CDT'(number_int:3,text_txt:"Lorem Ipsum3"),
    		'type!{urn:com:appian:types}PS_example1CDT'(number_int:4,text_txt:"Lorem Ipsum4"),
    		'type!{urn:com:appian:types}PS_example1CDT'(number_int:5,text_txt:"Lorem Ipsum5"),
    		'type!{urn:com:appian:types}PS_example1CDT'(number_int:6,text_txt:"Lorem Ipsum6")
    	},
    	local!itemsToken: local!items,
    	local!selectedValues:{1,2,3,6,7},
    	a!sectionLayout_17r1(
    		label:"Paginated Editable Grid",
    		firstColumnContents:{
    			rule!PS_EditableGrid_SAIL_GetEditableGrid(
    		label: "",
    		instructions:null,
    		headerCells: {
    			a!gridLayoutHeaderCell(label: "Summary"),
    			a!gridLayoutHeaderCell(label: "Qty", align: "RIGHT"),
    			a!gridLayoutHeaderCell(label: "", align: "RIGHT")
    		},
    		nameOfItemsRowEachRule:rule!PS_EditableGrid_SAIL_TestUCItemsRowEach,
    		selectable:true,
    		selectionRequired: false,
    		selectionDisabled: false,
    		selectionValue: local!selectedValues,
    		selectionSaveInto: {
    		  local!selectedValues
    		},
    		validations: null,
    		validationGroup: null,
    		items:local!items,
    		itemsToken:local!itemsToken,
    		totalCount: length(local!items),
    		columnConfigs: {
    			a!gridLayoutColumnConfig(width: "DISTRIBUTE", weight: 5),
    			a!gridLayoutColumnConfig(width: "DISTRIBUTE"),
    			a!gridLayoutColumnConfig(width: "DISTRIBUTE")
    		},
    		pagingInfo: local!pagingInfo,
    		isValidateWhileNavigation:false,
    		addRowLinkLabel:"Add Item",
    		addRowLinkValue: 'type!{urn:com:appian:types}PS_example1CDT'()
    	)
    		}
    	)
    )
    load(
    	a!gridRowLayout(
      id: ri!index,
      contents: {
        a!textField(
          label: "summary " & ri!index,
          readOnly:true(),
          value: ri!items[ri!index].text_txt,
          saveInto: {
    		ri!items[ri!index].text_txt
    	  },
          required: true
        ),
        a!integerField(
          label: "qty " & ri!index,
          readOnly:true(),
    	  value: ri!items[ri!index].number_int,
          saveInto: {
    		ri!items[ri!index].number_int
    	  },
          align: "RIGHT"
        ),
        a!imageField( 
          label: "delete " & ri!index,
          images: a!documentImage(
            document: a!iconIndicator("REMOVE"),
            altText: "Remove",
            caption: "Remove " & ri!items[ri!index].number_int,
            link: a!dynamicLink(
              value: ri!index,
              saveInto: {
                a!save(ri!items, remove(ri!items, save!value)),
                a!save(ri!itemsToken, remove(ri!itemsToken, save!value)),
    			ri!removeAdditionalSaveArray
              }
            )
          ),
          size: "ICON"
        )
      }
    )
    )

    I have attached code for this implementations.

    Let me know if there is any problem to understand the code

  • 0
    Certified Lead Developer
    in reply to ankita0004

     Can you share your code for the "PS_EditableGrid_SAIL_GetEditableGrid" rule? I know a!gridLayout() doesn't have a pagingInfo parameter so I want to see how your using it in your implementation since I see it's being passed into that rule.

  • 0
    A Score Level 1
    in reply to Jamal Case

    /*
    	Optional Inputs:
    	----------------
    			01. label
    			02. instructions (Pagination Instructions if the input is null)
    			03. selectable (False if the input is null)
    			04. selectionRequired (False if the input is null)
    			05. selectionDisabled (True if the input is null)
    			06. selectionValue
    			07. selectionSaveArray
    			08. validations
    			09. validationGroup
    			10. helpTooltip
    			11. items
    			12. emptyGridMessage
    			13. isValidateWhileNavigation (False if the input is null)
    			14. firstPageSaveArray
    			15. lastPageSaveArray
    			16. nextPageSaveArray
    			17. previousPageSaveArray
    
    	Required Inputs:
    	----------------
    			01. headerCells 
    			02. nameOfItemsRowEachRule
    			03. columnConfigs
    			04. pagingInfo
    			05. addRowLinkLabel 
    			06. addRowLinkValue
    	
    	Example:
    	--------
    			rule!PS_EditableGrid_SAIL_GetEditableGrid(
    				label: "",
    				instructions:null,
    				headerCells: {
    					a!gridLayoutHeaderCell(label: "Summary"),
    					a!gridLayoutHeaderCell(label: "Qty", align: "RIGHT"),
    					a!gridLayoutHeaderCell(label: "", align: "RIGHT")
    				},
    				nameOfItemsRowEachRule: rule!PS_EditableGrid_SAIL_TestUCItemsRowEach,
    				selectable:true,
    				selectionRequired: false,
    				selectionDisabled: false,
    				selectionValue: {},
    				selectionSaveInto: {
    				  local!selectedValues
    				},
    				validations: null,
    				validationGroup: null,
    				totalCount: length(local!items),
    				columnConfigs: {
    					a!gridLayoutColumnConfig(width: "DISTRIBUTE", weight: 5),
    					a!gridLayoutColumnConfig(width: "DISTRIBUTE"),
    					a!gridLayoutColumnConfig(width: "DISTRIBUTE")
    				},
    				pagingInfo: local!pagingInfo,
    				isValidateWhileNavigation:false,
    				addRowLinkLabel:"Add Item",
    				addRowLinkValue: 'type!{urn:com:appian:types}PS_example1CDT'()
    			)
    */
    load(
     
      /* Length of items array */
      local!lengthOfItems: if(fn!isnull(ri!items),0,length(ri!items)),
      local!itemsToken: ri!items,
      
      /* Assign default values to the variables incase if the rule inputs aren't assigned values */
      local!isValidateWhileNavigation: rule!COMMON_Util_ReplaceNull(
    									nullableValue: ri!isValidateWhileNavigation,
    									replacementValue: fn!false()
      ),
      local!selectionRequired: rule!COMMON_Util_ReplaceNull(
    								nullableValue: ri!selectionRequired,
    								replacementValue: fn!false()
      ),
      local!selectionDisabled: rule!COMMON_Util_ReplaceNull(
    								nullableValue: ri!selectionDisabled,
    								replacementValue: fn!true()
      ),
      local!selectable: rule!COMMON_Util_ReplaceNull(
    								nullableValue: ri!selectable,
    								replacementValue: fn!false()
      ),
      local!instructions: rule!COMMON_Util_ReplaceNull(
    							nullableValue:ri!instructions,
    							replacementValue:fn!concat(fn!if(local!lengthOfItems=0,0,ri!pagingInfo.startIndex), "-", fn!if(local!lengthOfItems <= ((ri!pagingInfo.startIndex + ri!pagingInfo.batchSize) - 1),local!lengthOfItems,(ri!pagingInfo.startIndex + ri!pagingInfo.batchSize) - 1), " of ", local!lengthOfItems)
      ),
      
      /* Enable or Disable Navigations */
      local!isNextPageNavigationDisabled: (ri!pagingInfo.startIndex + ri!pagingInfo.batchSize) > local!lengthOfItems,
      local!isPreviousPageNavigationDisabled: ri!pagingInfo.startIndex = 1,
      local!isFirstPageNavigationDisabled: ri!pagingInfo.startIndex = 1,
      local!isLastPageNavigationDisabled: (ri!pagingInfo.startIndex + ri!pagingInfo.batchSize) > local!lengthOfItems,
    
    		{
    			/* Editable Grid with Pagination */
    			a!gridLayout(
    				
    				label: ri!label,
    				instructions: local!instructions,
    				helpTooltip: ri!helpTooltip,
    				totalCount: local!lengthOfItems,
    				emptyGridMessage: ri!emptyGridMessage,
    				columnConfigs: ri!columnConfigs,
    				selectable: local!selectable,
    				selectionRequired: local!selectionRequired,
    				selectionDisabled: local!selectionDisabled,
    				selectionValue: ri!selectionValue,
    				selectionSaveInto: {
    					ri!selectionValue,
    					
    					/* Any additional operations that should be performed upon making selections. This way any rule that invokes this rule can start making their own save operations apart from saving the selected values. */
    					ri!selectionSaveArray
    				},
    				addRowLink: a!dynamicLink(
    								  label: ri!addRowLinkLabel,
    								  value: ri!addRowLinkValue,
    								  saveInto: {
    								  
    										/* Append to items array */
    										a!save(
    											ri!items, 
    											fn!append(ri!items, save!value)
    										),
    										
    										/* Append to itemsToken array */
    										a!save(
    											local!itemsToken, 
    											ri!items
    										),
    										
    										/* Update the length of the items */
    										a!save(
    											local!lengthOfItems,
    											fn!if(fn!isnull(ri!items),0,fn!length(ri!items))
    										),
    										
    										/* Update Paging Info */
    										a!save(
    											ri!pagingInfo,
    											fn!topaginginfo(
    												fn!if(
    													local!lengthOfItems > ((ri!pagingInfo.startIndex + ri!pagingInfo.batchSize) - 1),
    													(fn!quotient(local!lengthOfItems,ri!pagingInfo.batchSize)*ri!pagingInfo.batchSize) + 1,
    													ri!pagingInfo.startIndex
    												),
    												ri!pagingInfo.batchSize
    											)
    										),
    										
    										/* Enable or Disable Navigations */
    										a!save(
    											local!isNextPageNavigationDisabled,
    											(ri!pagingInfo.startIndex + ri!pagingInfo.batchSize) > local!lengthOfItems
    										),
    										a!save(
    											local!isPreviousPageNavigationDisabled, 
    											ri!pagingInfo.startIndex = 1
    										),
    										a!save(
    											local!isFirstPageNavigationDisabled, 
    											ri!pagingInfo.startIndex = 1
    										),
    										a!save(
    											local!isLastPageNavigationDisabled, 
    											(ri!pagingInfo.startIndex + ri!pagingInfo.batchSize) > local!lengthOfItems
    										),
    										
    										/* Update Instructions */
    										a!save(
    											local!instructions,
    											rule!COMMON_Util_ReplaceNull(
    												nullableValue:ri!instructions,
    												replacementValue:fn!concat(fn!if(local!lengthOfItems=0,0,ri!pagingInfo.startIndex), "-", fn!if(local!lengthOfItems <= ((ri!pagingInfo.startIndex + ri!pagingInfo.batchSize) - 1),local!lengthOfItems,(ri!pagingInfo.startIndex + ri!pagingInfo.batchSize) - 1), " of ", local!lengthOfItems)
    											)
    										)
    								  }
    				),
    				validations: ri!validations,
    				validationGroup: ri!validationGroup,
    				headerCells: ri!headerCells,
    				
    				/* NOTE: Make sure that the Grid Row Layout rule has only four parameters namely  items, index, itemsToken and removeAdditionalSaveArray. This is a drawback/limitation/constraint. And removeAdditionalSaveArray should be configured in the saveInto of the Delete Operation */
    				rows: a!applyComponents(
    					  ri!nameOfItemsRowEachRule(
    							items:ri!items,
    							index:_,
    							itemsToken:local!itemsToken,
    							removeAdditionalSaveArray: {
    							
    											/* Update the length of the items */
    											a!save(
    												local!lengthOfItems,
    												fn!if(fn!isnull(ri!items),0,fn!length(ri!items))
    											),
    											
    											/* Update Paging Info */
    											a!save(
    												ri!pagingInfo,
    												fn!topaginginfo(
    													fn!if(
    														local!lengthOfItems <= ri!pagingInfo.batchSize,
    														1,
    														fn!if(
    															rule!COMMON_Util_IsEmpty(data:fn!index(ri!items,enumerate(ri!pagingInfo.batchSize)+ri!pagingInfo.startIndex,null)),
    															ri!pagingInfo.startIndex - ri!pagingInfo.batchSize,
    															ri!pagingInfo.startIndex
    														)
    													),
    													ri!pagingInfo.batchSize
    												)
    											),
    											
    											/* Enable or Disable Navigations */
    											a!save(
    												local!isNextPageNavigationDisabled,
    												(ri!pagingInfo.startIndex + ri!pagingInfo.batchSize) > local!lengthOfItems
    											),
    											a!save(
    												local!isPreviousPageNavigationDisabled, 
    												ri!pagingInfo.startIndex = 1
    											),
    											a!save(
    												local!isFirstPageNavigationDisabled, 
    												ri!pagingInfo.startIndex = 1
    											),
    											a!save(
    												local!isLastPageNavigationDisabled, 
    												(ri!pagingInfo.startIndex + ri!pagingInfo.batchSize) > local!lengthOfItems
    											),
    											
    											/* Update Instructions */
    											a!save(
    												local!instructions,
    												rule!COMMON_Util_ReplaceNull(
    													nullableValue:ri!instructions,
    													replacementValue:fn!concat(fn!if(local!lengthOfItems=0,0,ri!pagingInfo.startIndex), "-", fn!if(local!lengthOfItems <= ((ri!pagingInfo.startIndex + ri!pagingInfo.batchSize) - 1),local!lengthOfItems,(ri!pagingInfo.startIndex + ri!pagingInfo.batchSize) - 1), " of ", local!lengthOfItems)
    												)
    											)
    										}
    					  ),
    					  fn!if(
    							local!lengthOfItems=0,
    							{},
    							ri!pagingInfo.startIndex + fn!if(
    									local!lengthOfItems < ((ri!pagingInfo.startIndex + ri!pagingInfo.batchSize) - 1),
    									fn!enumerate((local!lengthOfItems - ri!pagingInfo.startIndex)+1),
    									fn!enumerate(ri!pagingInfo.batchSize)
    							)
    					  ),
    					  local!itemsToken
    				)
    			),
    			
    			/* Buttons that help navigating in Grid and also helps in simulating the Pagination functionality */
    			
    			/* Next Page Navigation */
    			a!buttonLayout(
    			  primaryButtons: {
    				a!buttonWidget(
    				  label: ">",
    				  style: "NORMAL",
    				  confirmMessage: null,
    				  submit: fn!false(),
    				  disabled: local!isNextPageNavigationDisabled,
    				  validate : local!isValidateWhileNavigation,
    				  validationGroup: null,
    				  value: null,
    				  saveInto: {
    					/* Update Paging Info */
    					a!save(
    						ri!pagingInfo,
    						fn!topaginginfo(
    							ri!pagingInfo.startIndex + ri!pagingInfo.batchSize,
    							ri!pagingInfo.batchSize
    						)
    					),
    					
    					/* Any additional operations that should be performed upon navigating to next page. This way any rule that invokes this rule can start making its specific save operations apart from default save operations. */
    					ri!nextPageSaveArray,
    
    					/* Enable or Disable Navigations */
    					a!save(
    						local!isNextPageNavigationDisabled,
    						(ri!pagingInfo.startIndex + ri!pagingInfo.batchSize) > local!lengthOfItems
    					),
    					a!save(
    						local!isPreviousPageNavigationDisabled, 
    						ri!pagingInfo.startIndex = 1
    					),
    					a!save(
    						local!isFirstPageNavigationDisabled, 
    						ri!pagingInfo.startIndex = 1
    					),
    					a!save(
    						local!isLastPageNavigationDisabled, 
    						(ri!pagingInfo.startIndex + ri!pagingInfo.batchSize) > local!lengthOfItems
    					),
                        
    					/* Update Instructions */
    					a!save(
    						local!instructions,
    						rule!COMMON_Util_ReplaceNull(
    							nullableValue:ri!instructions,
    							replacementValue:fn!concat(fn!if(local!lengthOfItems=0,0,ri!pagingInfo.startIndex), "-", fn!if(local!lengthOfItems <= ((ri!pagingInfo.startIndex + ri!pagingInfo.batchSize) - 1),local!lengthOfItems,(ri!pagingInfo.startIndex + ri!pagingInfo.batchSize) - 1), " of ", local!lengthOfItems)
    						)
    					)					
    				  }
    				),
    				
    				/* Last Page Navigation */
    				a!buttonWidget(
    				  label: ">>",
    				  style: "NORMAL",
    				  confirmMessage: null,
    				  submit: fn!false(),
    				  disabled: local!isLastPageNavigationDisabled,
    				  validate : local!isValidateWhileNavigation,
    				  value: null,
    				  saveInto: {
    					/* Update Paging Info */
    					a!save(
    						ri!pagingInfo,
    						fn!topaginginfo(
    							((fn!quotient(local!lengthOfItems,ri!pagingInfo.batchSize)-fn!if(fn!mod(local!lengthOfItems,ri!pagingInfo.batchSize)=0,1,0))*ri!pagingInfo.batchSize) + 1,
    							ri!pagingInfo.batchSize
    						)
    					),
    					
    					/* Any additional operations that should be performed upon navigating to last page. This way any rule that invokes this rule can start making its specific save operations apart from default save operations. */
    					ri!lastPageSaveArray,
    					
    					/* Enable or Disable Navigations */
    					a!save(
    						local!isNextPageNavigationDisabled,
    						(ri!pagingInfo.startIndex + ri!pagingInfo.batchSize) > local!lengthOfItems
    					),
    					a!save(
    						local!isPreviousPageNavigationDisabled, 
    						ri!pagingInfo.startIndex = 1
    					),
    					a!save(
    						local!isFirstPageNavigationDisabled, 
    						ri!pagingInfo.startIndex = 1
    					),
    					a!save(
    						local!isLastPageNavigationDisabled, 
    						(ri!pagingInfo.startIndex + ri!pagingInfo.batchSize) > local!lengthOfItems
    					),
    					
    					/* Update Instructions */
    					a!save(
    						local!instructions,
    						rule!COMMON_Util_ReplaceNull(
    							nullableValue:ri!instructions,
    							replacementValue:fn!concat(fn!if(local!lengthOfItems=0,0,ri!pagingInfo.startIndex), "-", fn!if(local!lengthOfItems <= ((ri!pagingInfo.startIndex + ri!pagingInfo.batchSize) - 1),local!lengthOfItems,(ri!pagingInfo.startIndex + ri!pagingInfo.batchSize) - 1), " of ", local!lengthOfItems)
    						)
    					)
    				  }
    				)
    			  },
    			  secondaryButtons: {
    			  
    				/* First Page Navigation */
    				a!buttonWidget(
    				  label: "<<",
    				  style: "NORMAL",
    				  confirmMessage: null,
    				  submit: false,
    				  disabled: local!isFirstPageNavigationDisabled,
    				  validate : local!isValidateWhileNavigation,
    				  validationGroup: null,
    				  value: null,
    				  saveInto: {
    					/* Update Paging Info */
    					a!save(
    						ri!pagingInfo,
    						fn!topaginginfo(1,ri!pagingInfo.batchSize)
    					),
    					
    					/* Any additional operations that should be performed upon navigating to first page. This way any rule that invokes this rule can start making its specific save operations apart from default save operations. */
    					ri!firstPageSaveArray,
    					
    					/* Enable or Disable Navigations */
    					a!save(
    						local!isNextPageNavigationDisabled,
    						(ri!pagingInfo.startIndex + ri!pagingInfo.batchSize) > local!lengthOfItems
    					),
    					a!save(
    						local!isPreviousPageNavigationDisabled, 
    						ri!pagingInfo.startIndex = 1
    					),
    					a!save(
    						local!isFirstPageNavigationDisabled, 
    						ri!pagingInfo.startIndex = 1
    					),
    					a!save(
    						local!isLastPageNavigationDisabled, 
    						(ri!pagingInfo.startIndex + ri!pagingInfo.batchSize) > local!lengthOfItems
    					),
    					
    					/* Update Instructions */
    					a!save(
    						local!instructions,
    						rule!COMMON_Util_ReplaceNull(
    							nullableValue:ri!instructions,
    							replacementValue:fn!concat(fn!if(local!lengthOfItems=0,0,ri!pagingInfo.startIndex), "-", fn!if(local!lengthOfItems <= ((ri!pagingInfo.startIndex + ri!pagingInfo.batchSize) - 1),local!lengthOfItems,(ri!pagingInfo.startIndex + ri!pagingInfo.batchSize) - 1), " of ", local!lengthOfItems)
    						)
    					)
    				  }
    				),
    				
    				/* Previous Page Navigation */
    				a!buttonWidget(
    				  label: "<",
    				  style: "NORMAL",
    				  confirmMessage: null,
    				  submit: false,
    				  disabled: local!isPreviousPageNavigationDisabled,
    				  validate : local!isValidateWhileNavigation,
    				  validationGroup: null,
    				  value: null,
    				  saveInto: {
    					/* Update Paging Info */
    					a!save(
    						ri!pagingInfo,
    						fn!topaginginfo(
    							ri!pagingInfo.startIndex - ri!pagingInfo.batchSize,
    							ri!pagingInfo.batchSize
    						)
    					),
    					
    					/* Any additional operations that should be performed upon navigating to last page. This way any rule that invokes this rule can start making its specific save operations apart from default save operations. */
    					ri!previousPageSaveArray,
    					
    					/* Enable or Disable Navigations */
    					a!save(
    						local!isNextPageNavigationDisabled,
    						(ri!pagingInfo.startIndex + ri!pagingInfo.batchSize) > local!lengthOfItems
    					),
    					a!save(
    						local!isPreviousPageNavigationDisabled, 
    						ri!pagingInfo.startIndex = 1
    					),
    					a!save(
    						local!isFirstPageNavigationDisabled, 
    						ri!pagingInfo.startIndex = 1
    					),
    					a!save(
    						local!isLastPageNavigationDisabled, 
    						(ri!pagingInfo.startIndex + ri!pagingInfo.batchSize) > local!lengthOfItems
    					),
    					
    					/* Update Instructions */
    					a!save(
    						local!instructions,
    						rule!COMMON_Util_ReplaceNull(
    							nullableValue:ri!instructions,
    							replacementValue:fn!concat(fn!if(local!lengthOfItems=0,0,ri!pagingInfo.startIndex), "-", fn!if(local!lengthOfItems <= ((ri!pagingInfo.startIndex + ri!pagingInfo.batchSize) - 1),local!lengthOfItems,(ri!pagingInfo.startIndex + ri!pagingInfo.batchSize) - 1), " of ", local!lengthOfItems)
    						)
    					)
    				  }
    				)
    			  }
    			)
    		}
    )

    Please find the attached document of code