<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="en">
	<id>https://izara.io/wiki/api.php?action=feedcontributions&amp;feedformat=atom&amp;user=Rut</id>
	<title>Izara Wiki - User contributions [en]</title>
	<link rel="self" type="application/atom+xml" href="https://izara.io/wiki/api.php?action=feedcontributions&amp;feedformat=atom&amp;user=Rut"/>
	<link rel="alternate" type="text/html" href="https://izara.io/wiki/index.php/Special:Contributions/Rut"/>
	<updated>2026-05-05T11:20:27Z</updated>
	<subtitle>User contributions</subtitle>
	<generator>MediaWiki 1.38.4</generator>
	<entry>
		<id>https://izara.io/wiki/index.php?title=2025-04-14_-_Frontend_LinkPath_structure_for_tableOutput&amp;diff=4169</id>
		<title>2025-04-14 - Frontend LinkPath structure for tableOutput</title>
		<link rel="alternate" type="text/html" href="https://izara.io/wiki/index.php?title=2025-04-14_-_Frontend_LinkPath_structure_for_tableOutput&amp;diff=4169"/>
		<updated>2026-03-16T05:29:00Z</updated>

		<summary type="html">&lt;p&gt;Rut: /* Example params sent to backend */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Service - Search Results]]&lt;br /&gt;
&lt;br /&gt;
= Overview =&lt;br /&gt;
&lt;br /&gt;
Structure frontend TableConfig and Output prepare for shared library that creates complexFilter and requestProperties&lt;br /&gt;
&lt;br /&gt;
= Example params in tableConfig =&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;JavaScript&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
let paramFromTableOutput = {&lt;br /&gt;
&lt;br /&gt;
	// .. other properties same as params sent to backend&lt;br /&gt;
	// requiredDataFields not needed in tableConfig as referenced in elements and sortFields&lt;br /&gt;
	// header/footer filterDataField elements reference valueUserTag&lt;br /&gt;
&lt;br /&gt;
	&amp;quot;elements&amp;quot;: {&lt;br /&gt;
		// shared types&lt;br /&gt;
		&amp;quot;elementId12&amp;quot;:{&lt;br /&gt;
			&amp;quot;elementType&amp;quot;: &amp;quot;freetext&amp;quot;,&lt;br /&gt;
			&amp;quot;value&amp;quot;: &amp;quot;aa&amp;quot;&lt;br /&gt;
		}&lt;br /&gt;
&lt;br /&gt;
		// headerFooter types&lt;br /&gt;
		&amp;quot;elementId1&amp;quot;:{&lt;br /&gt;
			&amp;quot;elementType&amp;quot;: &amp;quot;valueUserTag&amp;quot;,&lt;br /&gt;
			&amp;quot;valueUserTag&amp;quot;: &amp;quot;userTag_9&amp;quot;,&lt;br /&gt;
			&amp;quot;inputType&amp;quot;: &amp;quot;text&amp;quot; // || &amp;quot;select&amp;quot; || &amp;quot;checkbox&amp;quot; || &amp;quot;radio&amp;quot; ,&lt;br /&gt;
		},&lt;br /&gt;
		&amp;quot;elementId2&amp;quot;:{&lt;br /&gt;
			&amp;quot;elementType&amp;quot;: &amp;quot;valueUserTag&amp;quot;,&lt;br /&gt;
			&amp;quot;inputType&amp;quot;: &amp;quot;select&amp;quot;,&lt;br /&gt;
			&amp;quot;options&amp;quot;: [&lt;br /&gt;
	         {&lt;br /&gt;
               optionText:&amp;quot;option1&amp;quot;,&lt;br /&gt;
               valueUserTag:{ &lt;br /&gt;
                 userTag_1:&amp;quot;valueA&amp;quot;, //value not ref valueUserTag&lt;br /&gt;
                 userTag_2:&amp;quot;valueB&amp;quot; &lt;br /&gt;
              },&lt;br /&gt;
	         {&lt;br /&gt;
               optionText:&amp;quot;option2&amp;quot;,&lt;br /&gt;
               valueUserTag:{ &lt;br /&gt;
                 userTag_9:&amp;quot;valueC&amp;quot; &lt;br /&gt;
&lt;br /&gt;
              },&lt;br /&gt;
			],&lt;br /&gt;
		},&lt;br /&gt;
        &amp;quot;elementId21&amp;quot;:{&lt;br /&gt;
			&amp;quot;elementType&amp;quot;: &amp;quot;valueUserTag&amp;quot;,&lt;br /&gt;
			&amp;quot;inputType&amp;quot;: &amp;quot;checkbox&amp;quot;,&lt;br /&gt;
			&amp;quot;onSetting:{&lt;br /&gt;
               optionText:&amp;quot;on&amp;quot;,&lt;br /&gt;
               valueUserTag:{ &lt;br /&gt;
                 userTag_1:&amp;quot;valueA&amp;quot;, //value not ref valueUserTag&lt;br /&gt;
                 userTag_2:&amp;quot;valueB&amp;quot; &lt;br /&gt;
&lt;br /&gt;
              },&lt;br /&gt;
             },&lt;br /&gt;
             &amp;quot;offSetting&amp;quot;:{&lt;br /&gt;
               optionText:&amp;quot;off&amp;quot;,&lt;br /&gt;
               valueUserTag:{ &lt;br /&gt;
                 userTag_9:&amp;quot;valueC&amp;quot; &lt;br /&gt;
&lt;br /&gt;
              },&lt;br /&gt;
             },&lt;br /&gt;
		   &lt;br /&gt;
           &lt;br /&gt;
		},&lt;br /&gt;
		&amp;quot;elementId3&amp;quot;:{&lt;br /&gt;
			&amp;quot;elementType&amp;quot;: &amp;quot;sort&amp;quot;,&lt;br /&gt;
			&amp;quot;display&amp;quot;: &amp;quot;downArrow&amp;quot;, // || upArrow&lt;br /&gt;
			&amp;quot;requiredDataLinkStepObjectId&amp;quot;: &amp;quot;userTag_LinkStepObjectC&amp;quot;,&lt;br /&gt;
			&amp;quot;dataType&amp;quot;: &amp;quot;number&amp;quot;, // &amp;quot;number&amp;quot; | &amp;quot;string&amp;quot;&lt;br /&gt;
			&amp;quot;sortOrder&amp;quot;: &amp;quot;ascending&amp;quot; // &amp;quot;ascending&amp;quot;|&amp;quot;descending&amp;quot; (default ascending)&lt;br /&gt;
		},&lt;br /&gt;
		&amp;quot;elementId4&amp;quot;:{&lt;br /&gt;
			&amp;quot;elementType&amp;quot;: &amp;quot;numberOfRows&amp;quot;,&lt;br /&gt;
			&amp;quot;inputType&amp;quot;: &amp;quot;text&amp;quot; // || &amp;quot;select&amp;quot; || &amp;quot;checkbox&amp;quot; || &amp;quot;radio&amp;quot; ,&lt;br /&gt;
		},&lt;br /&gt;
		&amp;quot;elementId5&amp;quot;:{&lt;br /&gt;
			&amp;quot;elementType&amp;quot;:&amp;quot;numberOfRows&amp;quot;,&lt;br /&gt;
			&amp;quot;inputType&amp;quot;: &amp;quot;select&amp;quot;,&lt;br /&gt;
			&amp;quot;options&amp;quot;: [&lt;br /&gt;
	         {&lt;br /&gt;
               optionText:&amp;quot;page5&amp;quot;,&lt;br /&gt;
               value:5&lt;br /&gt;
             },&lt;br /&gt;
	       	 {&lt;br /&gt;
               optionText:&amp;quot;page7&amp;quot;,&lt;br /&gt;
               value:7&lt;br /&gt;
             },&lt;br /&gt;
			],&lt;br /&gt;
		},&lt;br /&gt;
		&amp;quot;elementId6&amp;quot;:{&lt;br /&gt;
			&amp;quot;elementType&amp;quot;: &amp;quot;submit&amp;quot;,&lt;br /&gt;
			&amp;quot;display&amp;quot;: &amp;quot;submit&amp;quot;, // any text to be shown&lt;br /&gt;
			&amp;quot;sendRequest&amp;quot;: [&amp;quot;sort&amp;quot;, &amp;quot;numberOfRows&amp;quot;, &amp;quot;filter&amp;quot;] &lt;br /&gt;
		},&lt;br /&gt;
		&amp;quot;elementId7&amp;quot;:{&lt;br /&gt;
			&amp;quot;elementType&amp;quot;: &amp;quot;reset&amp;quot;,&lt;br /&gt;
			&amp;quot;display&amp;quot;: &amp;quot;reset rows&amp;quot;, // any text to be shown&lt;br /&gt;
			&amp;quot;sendRequest&amp;quot;: [&amp;quot;sort&amp;quot;, &amp;quot;numberOfRows&amp;quot;, &amp;quot;filter&amp;quot;] &lt;br /&gt;
		},&lt;br /&gt;
		&amp;quot;elementId9&amp;quot;:{&lt;br /&gt;
			&amp;quot;elementType&amp;quot;: &amp;quot;totalDatafield&amp;quot;,&lt;br /&gt;
			&amp;quot;requiredDataLinkStepObjectId&amp;quot;: &amp;quot;link1&amp;quot;,&lt;br /&gt;
			&amp;quot;showIfNotAllRowsLoaded&amp;quot;: true // || false&lt;br /&gt;
		},&lt;br /&gt;
		&amp;quot;elementId11&amp;quot;:{&lt;br /&gt;
			// will need to link to per record check box&lt;br /&gt;
			&amp;quot;elementType&amp;quot;: &amp;quot;bulkAction&amp;quot;,&lt;br /&gt;
			&amp;quot;action&amp;quot;: &amp;quot;on&amp;quot; // on | off | switch&lt;br /&gt;
			&amp;quot;bulkActionUserTag&amp;quot;: &amp;quot;tagA&amp;quot;, // have normalized list of bulkActionTags, with list of &amp;quot;bulkAction&amp;quot; and &amp;quot;bulkActionCheckBox&amp;quot; elements linked to it&lt;br /&gt;
		},&lt;br /&gt;
		&amp;quot;elementId8&amp;quot;:{&lt;br /&gt;
			&amp;quot;elementType&amp;quot;: &amp;quot;pageNumbers&amp;quot;,&lt;br /&gt;
			&amp;quot;linksAfter&amp;quot;: [&lt;br /&gt;
				{&lt;br /&gt;
					&amp;quot;action&amp;quot;: &amp;quot;jumpNumberOfPages&amp;quot;,&lt;br /&gt;
					&amp;quot;jumpPages&amp;quot;: 7,&lt;br /&gt;
					&amp;quot;string&amp;quot;: &amp;quot;..&amp;quot;&lt;br /&gt;
				},&lt;br /&gt;
				{&lt;br /&gt;
					&amp;quot;action&amp;quot;: &amp;quot;jumpNumberOfPages&amp;quot;,&lt;br /&gt;
					&amp;quot;jumpPages&amp;quot;: 1,&lt;br /&gt;
					&amp;quot;string&amp;quot;: &amp;quot;&amp;gt;&amp;quot;&lt;br /&gt;
				},&lt;br /&gt;
				{&lt;br /&gt;
					&amp;quot;action&amp;quot;: &amp;quot;goToLastPage&amp;quot;,&lt;br /&gt;
					&amp;quot;hideWhenLastPageShown&amp;quot;: true,&lt;br /&gt;
					&amp;quot;string&amp;quot;: &amp;quot;&amp;gt;&amp;gt;&amp;quot;&lt;br /&gt;
				}&lt;br /&gt;
			],&lt;br /&gt;
			&amp;quot;linksBefore&amp;quot;: [&lt;br /&gt;
				{&lt;br /&gt;
					&amp;quot;action&amp;quot;: &amp;quot;goToFirstPage&amp;quot;,&lt;br /&gt;
					&amp;quot;hideWhenFirstPageShown&amp;quot;: true,&lt;br /&gt;
					&amp;quot;string&amp;quot;: &amp;quot;&amp;lt;&amp;lt;&amp;quot;&lt;br /&gt;
				},&lt;br /&gt;
				{&lt;br /&gt;
					&amp;quot;action&amp;quot;: &amp;quot;jumpNumberOfPages&amp;quot;,&lt;br /&gt;
					&amp;quot;jumpPages&amp;quot;: 1,&lt;br /&gt;
					&amp;quot;string&amp;quot;: &amp;quot;&amp;lt;&amp;quot;&lt;br /&gt;
				},&lt;br /&gt;
				{&lt;br /&gt;
					&amp;quot;action&amp;quot;: &amp;quot;jumpNumberOfPages&amp;quot;,&lt;br /&gt;
					&amp;quot;jumpPages&amp;quot;: 7,&lt;br /&gt;
					&amp;quot;string&amp;quot;: &amp;quot;..&amp;quot;&lt;br /&gt;
				}&lt;br /&gt;
			],&lt;br /&gt;
			&amp;quot;showPagesAfter&amp;quot;: 3,&lt;br /&gt;
			&amp;quot;showPagesBefore&amp;quot;: 3&lt;br /&gt;
		},&lt;br /&gt;
		&lt;br /&gt;
		// records types    &lt;br /&gt;
		&amp;quot;elementId5&amp;quot;:{&lt;br /&gt;
			&amp;quot;elementType&amp;quot;: &amp;quot;requiredDataLinkStepObject&amp;quot;, // in record&lt;br /&gt;
			&amp;quot;requiredDataLinkStepObjectId&amp;quot;: &amp;quot;link1&amp;quot;,&lt;br /&gt;
		},&lt;br /&gt;
		&amp;quot;elementIdxx&amp;quot;:{&lt;br /&gt;
			&amp;quot;elementType&amp;quot;: &amp;quot;bulkActionCheckBox&amp;quot;,&lt;br /&gt;
			&amp;quot;bulkActionUserTag&amp;quot;: &amp;quot;tagA&amp;quot;,&lt;br /&gt;
		},&lt;br /&gt;
	},&lt;br /&gt;
	&lt;br /&gt;
	valueUserTags: {&lt;br /&gt;
		// values are shared between requestProperties and filter values. This set can be iterated to overwrite values using userTag to identify&lt;br /&gt;
		userTag_1:{&lt;br /&gt;
			defaultValue: &amp;quot;xx&amp;quot;,&lt;br /&gt;
		},&lt;br /&gt;
		userTag_2:{&lt;br /&gt;
			defaultValue: &amp;quot;xx&amp;quot;,&lt;br /&gt;
		},&lt;br /&gt;
		userTag_3:{&lt;br /&gt;
			defaultValue: &amp;quot;xx&amp;quot;,&lt;br /&gt;
		},&lt;br /&gt;
		userTag_4:{&lt;br /&gt;
			defaultValue: &amp;quot;xx&amp;quot;,&lt;br /&gt;
		},&lt;br /&gt;
		userTag_5:{&lt;br /&gt;
			defaultValue: &amp;quot;xx&amp;quot;,&lt;br /&gt;
		},&lt;br /&gt;
		userTag_6:{&lt;br /&gt;
			valueSource: &amp;quot;complexFilterCombination&amp;quot;,&lt;br /&gt;
            complexFilterCombinationId: &amp;quot;hash_complexFilterCombinationA&amp;quot;,&lt;br /&gt;
		},&lt;br /&gt;
		userTag_7:{&lt;br /&gt;
			valueSource: &amp;quot;perParentCombination&amp;quot;,&lt;br /&gt;
            perParentCombinationId: &amp;quot;hash_perParentCombinationA&amp;quot;,&lt;br /&gt;
		},&lt;br /&gt;
        userTag_8: {&lt;br /&gt;
            valueSource: 'perParentIdentifier',&lt;br /&gt;
            perParentIdentifierFieldname: 'sellOfferId'&lt;br /&gt;
        },,&lt;br /&gt;
		userTag_9:{&lt;br /&gt;
			defaultValue: &amp;quot;xx&amp;quot;,&lt;br /&gt;
		},&lt;br /&gt;
		userTag_10:{&lt;br /&gt;
			defaultValue: &amp;quot;xx&amp;quot;,&lt;br /&gt;
		},&lt;br /&gt;
		userTag_11:{&lt;br /&gt;
			defaultValue: &amp;quot;xx&amp;quot;,&lt;br /&gt;
		},&lt;br /&gt;
	},&lt;br /&gt;
&lt;br /&gt;
	bulkActionUserTags: {&lt;br /&gt;
		tagA:{&lt;br /&gt;
			bulkActions: [&lt;br /&gt;
                &amp;quot;elementId11&amp;quot;,&lt;br /&gt;
                // ...&lt;br /&gt;
            ],&lt;br /&gt;
            bulkActionCheckBoxes: [&lt;br /&gt;
                &amp;quot;elementIdxx&amp;quot;,&lt;br /&gt;
                // ...&lt;br /&gt;
            ],&lt;br /&gt;
		},&lt;br /&gt;
        // ...&lt;br /&gt;
	},&lt;br /&gt;
&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= Example params sent to backend =&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;JavaScript&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
let paramFromTableOutput = {&lt;br /&gt;
	objType: { //* main objType&lt;br /&gt;
		serviceTag: &amp;quot;ProductManager&amp;quot;,&lt;br /&gt;
		objectType: &amp;quot;Product&amp;quot;&lt;br /&gt;
	},&lt;br /&gt;
    initialLogicalElementId: &amp;quot;uuid_logical_1&amp;quot;,&lt;br /&gt;
    logicalElements: {&lt;br /&gt;
       uuid_logical_1: {&lt;br /&gt;
         logicalElementType: &amp;quot;logical&amp;quot;,&lt;br /&gt;
         previousLogicalElementId: null,&lt;br /&gt;
         nextLogicalElementId: null,&lt;br /&gt;
&lt;br /&gt;
         objType: {&lt;br /&gt;
           serviceTag: &amp;quot;ProductManager&amp;quot;,&lt;br /&gt;
           objectType: &amp;quot;product&amp;quot;&lt;br /&gt;
         },&lt;br /&gt;
          partitionKeyValueUserTags: {&lt;br /&gt;
            productId: &amp;quot;userTag_1&amp;quot;,&lt;br /&gt;
          },&lt;br /&gt;
          // sortKeyValueUserTags: {&lt;br /&gt;
          //    productId: &amp;quot;valueB&amp;quot;,&lt;br /&gt;
          // },&lt;br /&gt;
          // comparison: &amp;quot;equals&amp;quot;,&lt;br /&gt;
          // conditionalFieldValues: [&lt;br /&gt;
          //  {&lt;br /&gt;
          //    fieldname: &amp;quot;language&amp;quot;,&lt;br /&gt;
          //   includeValueUserTags: [&amp;quot;th&amp;quot;],&lt;br /&gt;
          //    // excludeValueUserTags: [&amp;quot;xx&amp;quot;,&amp;quot;sdd&amp;quot;]&lt;br /&gt;
          //  }&lt;br /&gt;
          // ]&lt;br /&gt;
       },&lt;br /&gt;
       &lt;br /&gt;
       // ex. traversal type&lt;br /&gt;
       // hash_traversal: {&lt;br /&gt;
       //   logicalElementType: &amp;quot;traversal&amp;quot;,&lt;br /&gt;
       //   previousLogicalElementId: null,&lt;br /&gt;
       //   nextLogicalElementId: null,&lt;br /&gt;
&lt;br /&gt;
       //   objType: {&lt;br /&gt;
       //     objectType: &amp;quot;locationNode&amp;quot;,&lt;br /&gt;
       //     serviceTag: &amp;quot;Locations&amp;quot;,&lt;br /&gt;
       //   },&lt;br /&gt;
       //   traversalSteps: [&lt;br /&gt;
       //     &amp;quot;hash_traversal_1&amp;quot;,&lt;br /&gt;
       //     &amp;quot;hash_traversal_2&amp;quot;,&lt;br /&gt;
       //     &amp;quot;hash_traversal_3&amp;quot;,&lt;br /&gt;
       //   ]&lt;br /&gt;
       // }&lt;br /&gt;
    },&lt;br /&gt;
    traversalSteps: {&lt;br /&gt;
       hash_traversal_1: {&lt;br /&gt;
		pathLinkType: {&lt;br /&gt;
            objType: {&lt;br /&gt;
			   serviceTag: &amp;quot;Locations&amp;quot;,&lt;br /&gt;
			   objectType: &amp;quot;localtionLink&amp;quot;&lt;br /&gt;
		    },&lt;br /&gt;
			relType: {&lt;br /&gt;
			  serviceTag: &amp;quot;Locations&amp;quot;,&lt;br /&gt;
			  relationshipTag: &amp;quot;hasLocationLink&amp;quot;&lt;br /&gt;
			},&lt;br /&gt;
			direction: &amp;quot;to&amp;quot;&lt;br /&gt;
		},&lt;br /&gt;
		hopsPassObjType: true, //optional&lt;br /&gt;
		hopsEnd: 10, //optional  &lt;br /&gt;
       },&lt;br /&gt;
       hash_traversal_2: {&lt;br /&gt;
		pathLinkType: {&lt;br /&gt;
            objType: {&lt;br /&gt;
			   serviceTag: &amp;quot;Locations&amp;quot;,&lt;br /&gt;
			   objectType: &amp;quot;locationNode&amp;quot;&lt;br /&gt;
		    },&lt;br /&gt;
			relType: {&lt;br /&gt;
			  serviceTag: &amp;quot;Locations&amp;quot;,&lt;br /&gt;
			  relationshipTag: &amp;quot;isLocationNode&amp;quot;&lt;br /&gt;
			},&lt;br /&gt;
			direction: &amp;quot;to&amp;quot;&lt;br /&gt;
		},&lt;br /&gt;
		fieldValueUserTags: [...],//optional  &lt;br /&gt;
		hopsEnd: 10, //optional  &lt;br /&gt;
       },&lt;br /&gt;
       hash_traversal_3:{&lt;br /&gt;
         fieldValueUserTags: [&lt;br /&gt;
           {&lt;br /&gt;
             categoryId: &amp;quot;valueD&amp;quot;&lt;br /&gt;
           },&lt;br /&gt;
           {&lt;br /&gt;
             categoryId: &amp;quot;valueA&amp;quot;&lt;br /&gt;
           },&lt;br /&gt;
           {&lt;br /&gt;
             price: &amp;quot;valueF&amp;quot;&lt;br /&gt;
           },&lt;br /&gt;
           {&lt;br /&gt;
             categoryId: &amp;quot;valueA&amp;quot;&lt;br /&gt;
           },&lt;br /&gt;
           {&lt;br /&gt;
             categoryId: &amp;quot;valueB&amp;quot;&lt;br /&gt;
           },&lt;br /&gt;
         ]&lt;br /&gt;
       }&lt;br /&gt;
    },&lt;br /&gt;
	requiredDataFields: [ //* linkStepObjects to create main sort result's requiredData and sortFields&lt;br /&gt;
        // not needed at tableConfig level because can be built from table's elements and sortFields before sending to lib that converts to backend structure&lt;br /&gt;
        &amp;quot;userTag_LinkStepObjectA&amp;quot;, // no link, field in main objType (structure same linkPath but only one step)&lt;br /&gt;
        &amp;quot;userTag_LinkStepObjectB&amp;quot;, // has link&lt;br /&gt;
	],&lt;br /&gt;
	complexFilterCombinations:{&lt;br /&gt;
		hash_complexFilterCombinationA: {&lt;br /&gt;
          objType: {&lt;br /&gt;
            serviceTag: &amp;quot;Locations&amp;quot;,&lt;br /&gt;
            objectType: &amp;quot;locationNode&amp;quot;&lt;br /&gt;
          },&lt;br /&gt;
          initialLogicalElementId: &amp;quot;child_complexFilter_localtionNode&amp;quot;,&lt;br /&gt;
          logicalElements: {&lt;br /&gt;
            child_complexFilter_localtionNode: {&lt;br /&gt;
              logicalElementType: &amp;quot;childComplexFilter&amp;quot;,&lt;br /&gt;
              previousLogicalElementId: null,&lt;br /&gt;
              nextLogicalElementId: null,&lt;br /&gt;
&lt;br /&gt;
              childLogicalElementId: &amp;quot;logical_locationNode&amp;quot;,&lt;br /&gt;
              objType: {&lt;br /&gt;
                serviceTag: &amp;quot;Locations&amp;quot;,&lt;br /&gt;
                objectType: &amp;quot;locationNode&amp;quot;&lt;br /&gt;
              },&lt;br /&gt;
              pathLinkType: {&lt;br /&gt;
                objType: {&lt;br /&gt;
                  serviceTag: &amp;quot;Locations&amp;quot;,&lt;br /&gt;
                  objectType: &amp;quot;locationNode&amp;quot;&lt;br /&gt;
                },&lt;br /&gt;
                relType: {&lt;br /&gt;
                  serviceTag: &amp;quot;Locations&amp;quot;,&lt;br /&gt;
                  relationshipTag: &amp;quot;hasParentLocationNode&amp;quot;&lt;br /&gt;
                },&lt;br /&gt;
                direction: &amp;quot;to&amp;quot;&lt;br /&gt;
              },&lt;br /&gt;
            },&lt;br /&gt;
            logical_locationNode: {&lt;br /&gt;
               logicalElementType: &amp;quot;logical&amp;quot;,&lt;br /&gt;
               previousLogicalElementId: &amp;quot;child_complexFilter_localtionNode&amp;quot;,&lt;br /&gt;
               nextLogicalElementId: null,&lt;br /&gt;
&lt;br /&gt;
               objType: {&lt;br /&gt;
                serviceTag: &amp;quot;Locations&amp;quot;,&lt;br /&gt;
                objectType: &amp;quot;locationNode&amp;quot;&lt;br /&gt;
               },&lt;br /&gt;
                partitionKeyValueUserTags: {&lt;br /&gt;
                   locationNodeId: &amp;quot;userTag_7&amp;quot;,&lt;br /&gt;
                },&lt;br /&gt;
                // sortKeyValueUserTags: {&lt;br /&gt;
                //    productId: &amp;quot;valueB&amp;quot;,&lt;br /&gt;
                // },&lt;br /&gt;
                // comparison: &amp;quot;equals&amp;quot;,&lt;br /&gt;
                // conditionalFieldValues: [&lt;br /&gt;
                //  {&lt;br /&gt;
                //    fieldname: &amp;quot;language&amp;quot;,&lt;br /&gt;
                //   includeValueUserTags: [&amp;quot;th&amp;quot;],&lt;br /&gt;
                //    // excludeValueUserTags: [&amp;quot;xx&amp;quot;,&amp;quot;sdd&amp;quot;]&lt;br /&gt;
                //  }&lt;br /&gt;
                // ]&lt;br /&gt;
            }&lt;br /&gt;
         }&lt;br /&gt;
       },&lt;br /&gt;
	},&lt;br /&gt;
	perParentCombinations:{&lt;br /&gt;
		hash_perParentCombinationA: {&lt;br /&gt;
          objType: {&lt;br /&gt;
            serviceTag: &amp;quot;SellOfferPlan&amp;quot;,&lt;br /&gt;
            objectType: &amp;quot;sellOfferPlan&amp;quot;&lt;br /&gt;
          },&lt;br /&gt;
          initialLogicalElementId: &amp;quot;child_complexFilter_1&amp;quot;,&lt;br /&gt;
          logicalElements: {&lt;br /&gt;
            child_complexFilter_1: {&lt;br /&gt;
              logicalElementType: &amp;quot;childComplexFilter&amp;quot;,&lt;br /&gt;
              previousLogicalElementId: null,&lt;br /&gt;
              nextLogicalElementId: null,&lt;br /&gt;
&lt;br /&gt;
              childLogicalElementId: &amp;quot;logical_sellOffer&amp;quot;,&lt;br /&gt;
              objType: {&lt;br /&gt;
                serviceTag: &amp;quot;SellOfferPlan&amp;quot;,&lt;br /&gt;
                objectType: &amp;quot;sellOfferPlan&amp;quot;&lt;br /&gt;
              },&lt;br /&gt;
              pathLinkType: {&lt;br /&gt;
                objType: {&lt;br /&gt;
                  serviceTag: &amp;quot;SellOfferManager&amp;quot;,&lt;br /&gt;
                  objectType: &amp;quot;sellOffer&amp;quot;&lt;br /&gt;
                }, &lt;br /&gt;
                relType: {&lt;br /&gt;
                  serviceTag: &amp;quot;SellOfferManager&amp;quot;,&lt;br /&gt;
                  relationshipTag: &amp;quot;usesSellOfferPlan&amp;quot;&lt;br /&gt;
                },&lt;br /&gt;
                direction: &amp;quot;to&amp;quot;&lt;br /&gt;
              },&lt;br /&gt;
              requestProperties: {&lt;br /&gt;
                tag_orderQuantity: &amp;quot;userTag_9&amp;quot;&lt;br /&gt;
              }&lt;br /&gt;
           },&lt;br /&gt;
           logical_sellOffer: {&lt;br /&gt;
              logicalElementType: &amp;quot;logical&amp;quot;,&lt;br /&gt;
              previousLogicalElementId: &amp;quot;child_complexFilter_1&amp;quot;,&lt;br /&gt;
              nextLogicalElementId: null,&lt;br /&gt;
&lt;br /&gt;
              objType: {&lt;br /&gt;
                serviceTag: &amp;quot;SellOfferManager&amp;quot;,&lt;br /&gt;
                objectType: &amp;quot;sellOffer&amp;quot;&lt;br /&gt;
              },&lt;br /&gt;
               partitionKeyValueUserTags: {&lt;br /&gt;
                   sellOfferId: &amp;quot;userTag_8&amp;quot;,&lt;br /&gt;
               },&lt;br /&gt;
               // sortKeyValueUserTags: {&lt;br /&gt;
               //    productId: &amp;quot;valueB&amp;quot;,&lt;br /&gt;
               // },&lt;br /&gt;
               // comparison: &amp;quot;equals&amp;quot;,&lt;br /&gt;
               // conditionalFieldValues: [&lt;br /&gt;
               //  {&lt;br /&gt;
               //    fieldname: &amp;quot;language&amp;quot;,&lt;br /&gt;
               //   includeValueUserTags: [&amp;quot;th&amp;quot;],&lt;br /&gt;
               //    // excludeValueUserTags: [&amp;quot;xx&amp;quot;,&amp;quot;sdd&amp;quot;]&lt;br /&gt;
               //  }&lt;br /&gt;
               // ]&lt;br /&gt;
           }&lt;br /&gt;
        }&lt;br /&gt;
      },&lt;br /&gt;
	},&lt;br /&gt;
	requiredDataLinkStepObjects: {&lt;br /&gt;
		userTag_LinkStepObjectA: { //* requiredData no linkPath&lt;br /&gt;
			initialObjType: { //* main objType&lt;br /&gt;
				serviceTag: &amp;quot;ProductManager&amp;quot;,&lt;br /&gt;
				objectType: &amp;quot;Product&amp;quot;&lt;br /&gt;
			},&lt;br /&gt;
			linkSteps: [&amp;quot;hash_linkStepA_1&amp;quot;],&lt;br /&gt;
		},&lt;br /&gt;
        userTag_LinkStepObjectB: { // requiredDataFields for finding max orderTotal&lt;br /&gt;
            initialObjType: { //* main objType&lt;br /&gt;
				serviceTag: &amp;quot;ProductManager&amp;quot;,&lt;br /&gt;
				objectType: &amp;quot;Product&amp;quot;&lt;br /&gt;
			},&lt;br /&gt;
			linkSteps: [&amp;quot;hash_linkStepB_1&amp;quot;, &amp;quot;hash_linkStepB_2&amp;quot;, &amp;quot;hash_linkStepB_3&amp;quot;],&lt;br /&gt;
        }&lt;br /&gt;
        // userTag_LinkStepObjectC&lt;br /&gt;
        // userTag_LinkStepObjectD&lt;br /&gt;
	},&lt;br /&gt;
	requiredDataLinkSteps: {&lt;br /&gt;
		hash_linkStepA_1:{&lt;br /&gt;
          fieldName: &amp;quot;xxx&amp;quot; &lt;br /&gt;
        },&lt;br /&gt;
        hash_linkStepB_1:{&lt;br /&gt;
          pathLinkType: {&lt;br /&gt;
             objType: {&lt;br /&gt;
               serviceTag: &amp;quot;SellOfferManager&amp;quot;,&lt;br /&gt;
               objectType: &amp;quot;SellOffer&amp;quot;&lt;br /&gt;
             },&lt;br /&gt;
             relType: {&lt;br /&gt;
               serviceTag: &amp;quot;ProductManager&amp;quot;,&lt;br /&gt;
               relationshipTag: &amp;quot;hasSellOffer&amp;quot;&lt;br /&gt;
             },&lt;br /&gt;
             direction: &amp;quot;to&amp;quot;,&lt;br /&gt;
          },&lt;br /&gt;
           addFilterMain: true, //default: false =&amp;gt; need to add filterMain set = true&lt;br /&gt;
           filterElements: { //* filter in linkPath&lt;br /&gt;
             objType: {&lt;br /&gt;
               serviceTag: &amp;quot;SellOfferManager&amp;quot;,&lt;br /&gt;
               objectType: &amp;quot;SellOffer&amp;quot;&lt;br /&gt;
             },&lt;br /&gt;
             initialLogicalElementId: &amp;quot;logical_sellOffer_in_link&amp;quot;,&lt;br /&gt;
             logicalElements: {&lt;br /&gt;
               logical_sellOffer_in_link: {&lt;br /&gt;
                  logicalElementType: &amp;quot;logical&amp;quot;,&lt;br /&gt;
                  previousLogicalElementId: null,&lt;br /&gt;
                  nextLogicalElementId: null,&lt;br /&gt;
&lt;br /&gt;
                  objType: {&lt;br /&gt;
                    serviceTag: &amp;quot;SellOfferManager&amp;quot;,&lt;br /&gt;
                    objectType: &amp;quot;SellOffer&amp;quot;&lt;br /&gt;
                  },&lt;br /&gt;
                  partitionKeyValueUserTags: {&lt;br /&gt;
                     sellOfferId: &amp;quot;userTag_8&amp;quot;,&lt;br /&gt;
                  },&lt;br /&gt;
                  // sortKeyValueUserTags: {&lt;br /&gt;
                  //    productId: &amp;quot;valueB&amp;quot;,&lt;br /&gt;
                  // },&lt;br /&gt;
                  // comparison: &amp;quot;equals&amp;quot;,&lt;br /&gt;
                  conditionalFieldValues: [&lt;br /&gt;
                    {&lt;br /&gt;
                      fieldname: &amp;quot;userId&amp;quot;,&lt;br /&gt;
                      includeValueUserTags: [&amp;quot;userTag_2&amp;quot;], // &lt;br /&gt;
                      // excludeValueUserTags: [&amp;quot;xx&amp;quot;,&amp;quot;sdd&amp;quot;]&lt;br /&gt;
                    }&lt;br /&gt;
                   ]&lt;br /&gt;
               }&lt;br /&gt;
            }&lt;br /&gt;
          },&lt;br /&gt;
&lt;br /&gt;
        }, &lt;br /&gt;
        hash_linkStepB_2: {&lt;br /&gt;
           pathLinkType: {&lt;br /&gt;
             objType: {&lt;br /&gt;
               serviceTag: &amp;quot;OrderPrice&amp;quot;,&lt;br /&gt;
               objectType: &amp;quot;OrderPrice&amp;quot;&lt;br /&gt;
             },&lt;br /&gt;
             relType: {&lt;br /&gt;
               serviceTag: &amp;quot;sellOfferStandard&amp;quot;,&lt;br /&gt;
               relationshipTag: &amp;quot;hasOrderPrice&amp;quot;&lt;br /&gt;
             },&lt;br /&gt;
             direction: &amp;quot;to&amp;quot;,&lt;br /&gt;
           },&lt;br /&gt;
          requestProperties: {&lt;br /&gt;
            tag_deliverTo: &amp;quot;userTag_3&amp;quot;,&lt;br /&gt;
            tag_sellOfferPlan: &amp;quot;userTag_4&amp;quot;,&lt;br /&gt;
            // tag_sellOfferPlanDeliveryMethodLink: &amp;quot;userTag_5&amp;quot;,&lt;br /&gt;
            // tag_sellOfferPlanUserPaymentMethodLink: &amp;quot;userTag_6&amp;quot;&lt;br /&gt;
          }&lt;br /&gt;
          aggregate: &amp;quot;max&amp;quot;,&lt;br /&gt;
          sortFields: [&lt;br /&gt;
       			{&lt;br /&gt;
            		requiredDataLinkStepObjectId: &amp;quot;userTag_LinkStepObjectC&amp;quot;,&lt;br /&gt;
		            dataType: &amp;quot;number&amp;quot;,&lt;br /&gt;
                    sortOrder: &amp;quot;ascending&amp;quot;|&amp;quot;descending&amp;quot;&lt;br /&gt;
        		},&lt;br /&gt;
				{&lt;br /&gt;
        		     requiredDataLinkStepObjectId: &amp;quot;userTag_LinkStepObjectD&amp;quot;,&lt;br /&gt;
		             dataType: &amp;quot;string&amp;quot;,&lt;br /&gt;
                     sortOrder: &amp;quot;ascending&amp;quot;|&amp;quot;descending&amp;quot;&lt;br /&gt;
		         },&lt;br /&gt;
                {&lt;br /&gt;
        		     requiredDataLinkStepObjectId: &amp;quot;userTag_LinkStepObjectD&amp;quot;,&lt;br /&gt;
		             dataType: &amp;quot;array&amp;quot;,&lt;br /&gt;
                     sortByValueUserTags:[&amp;quot;userTag_1&amp;quot;,&amp;quot;userTag_2&amp;quot;],&lt;br /&gt;
                     sortOrder: &amp;quot;ascending&amp;quot;|&amp;quot;descending&amp;quot;&lt;br /&gt;
		        }&lt;br /&gt;
            ],&lt;br /&gt;
          comparison: &amp;quot;greaterThan&amp;quot;,&lt;br /&gt;
          comparisonSortField: &amp;quot;upToValue&amp;quot;,&lt;br /&gt;
          comparisonSortDataType: &amp;quot;string&amp;quot;,&lt;br /&gt;
          comparisonValue: &amp;quot;userTag_2&amp;quot;,&lt;br /&gt;
        }, &lt;br /&gt;
        hash_linkStepB_3: {&lt;br /&gt;
           fieldName: &amp;quot;zzz&amp;quot;,&lt;br /&gt;
        }&lt;br /&gt;
	},&lt;br /&gt;
	sortFields: [&lt;br /&gt;
        {&lt;br /&gt;
             requiredDataLinkStepObjectId: &amp;quot;userTag_LinkStepObjectB&amp;quot;,&lt;br /&gt;
             dataType: &amp;quot;number&amp;quot;,&lt;br /&gt;
             sortOrder: &amp;quot;ascending&amp;quot;|&amp;quot;descending&amp;quot;&lt;br /&gt;
        },&lt;br /&gt;
		{&lt;br /&gt;
             requiredDataLinkStepObjectId: &amp;quot;userTag_LinkStepObjectA&amp;quot;,&lt;br /&gt;
             dataType: &amp;quot;string&amp;quot;,&lt;br /&gt;
             sortOrder: &amp;quot;ascending&amp;quot;|&amp;quot;descending&amp;quot;&lt;br /&gt;
         },&lt;br /&gt;
        {&lt;br /&gt;
             requiredDataLinkStepObjectId: &amp;quot;userTag_LinkStepObjectD&amp;quot;,&lt;br /&gt;
		     dataType: &amp;quot;array&amp;quot;,&lt;br /&gt;
             sortByValueUserTags:[&amp;quot;userTag_1&amp;quot;,&amp;quot;userTag_2&amp;quot;],&lt;br /&gt;
             sortOrder: &amp;quot;ascending&amp;quot;|&amp;quot;descending&amp;quot;&lt;br /&gt;
		}&lt;br /&gt;
    ],&lt;br /&gt;
	valueUserTags: {&lt;br /&gt;
		userTag_1:{&lt;br /&gt;
			value: &amp;quot;xx&amp;quot;,&lt;br /&gt;
		},&lt;br /&gt;
		userTag_2:{&lt;br /&gt;
			value: &amp;quot;yy&amp;quot;,&lt;br /&gt;
		},&lt;br /&gt;
		userTag_3:{&lt;br /&gt;
			valueSource: &amp;quot;complexFilterCombination&amp;quot;,&lt;br /&gt;
            complexFilterCombinationId: &amp;quot;hash_complexFilterCombinationA&amp;quot;,&lt;br /&gt;
		},&lt;br /&gt;
		userTag_4:{&lt;br /&gt;
			valueSource: &amp;quot;perParentCombination&amp;quot;,&lt;br /&gt;
            perParentCombinationId: &amp;quot;hash_perParentCombinationA&amp;quot;,&lt;br /&gt;
		},&lt;br /&gt;
		userTag_7: {&lt;br /&gt;
          value: &amp;quot;zz&amp;quot;,&lt;br /&gt;
        },&lt;br /&gt;
        userTag_8: {&lt;br /&gt;
          valueSource: 'perParentIdentifier',&lt;br /&gt;
          perParentIdentifierFieldname: 'sellOfferId'&lt;br /&gt;
        },&lt;br /&gt;
        userTag_9: {&lt;br /&gt;
          value: 2,&lt;br /&gt;
        },&lt;br /&gt;
	 }&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[Category:Working documents| 2025-04-14]]&lt;br /&gt;
[[Category:Working documents - Search Results| 2025-04-14]]&lt;/div&gt;</summary>
		<author><name>Rut</name></author>
	</entry>
	<entry>
		<id>https://izara.io/wiki/index.php?title=2025-04-14_-_Frontend_LinkPath_structure_for_tableOutput&amp;diff=4130</id>
		<title>2025-04-14 - Frontend LinkPath structure for tableOutput</title>
		<link rel="alternate" type="text/html" href="https://izara.io/wiki/index.php?title=2025-04-14_-_Frontend_LinkPath_structure_for_tableOutput&amp;diff=4130"/>
		<updated>2026-03-03T05:46:43Z</updated>

		<summary type="html">&lt;p&gt;Rut: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Service - Search Results]]&lt;br /&gt;
&lt;br /&gt;
= Overview =&lt;br /&gt;
&lt;br /&gt;
Structure frontend TableConfig and Output prepare for shared library that creates complexFilter and requestProperties&lt;br /&gt;
&lt;br /&gt;
= Example params in tableConfig =&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;JavaScript&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
let paramFromTableOutput = {&lt;br /&gt;
&lt;br /&gt;
	// .. other properties same as params sent to backend&lt;br /&gt;
	// requiredDataFields not needed in tableConfig as referenced in elements and sortFields&lt;br /&gt;
	// header/footer filterDataField elements reference valueUserTag&lt;br /&gt;
&lt;br /&gt;
	&amp;quot;elements&amp;quot;: {&lt;br /&gt;
		// shared types&lt;br /&gt;
		&amp;quot;elementId12&amp;quot;:{&lt;br /&gt;
			&amp;quot;elementType&amp;quot;: &amp;quot;freetext&amp;quot;,&lt;br /&gt;
			&amp;quot;value&amp;quot;: &amp;quot;aa&amp;quot;&lt;br /&gt;
		}&lt;br /&gt;
&lt;br /&gt;
		// headerFooter types&lt;br /&gt;
		&amp;quot;elementId1&amp;quot;:{&lt;br /&gt;
			&amp;quot;elementType&amp;quot;: &amp;quot;valueUserTag&amp;quot;,&lt;br /&gt;
			&amp;quot;valueUserTag&amp;quot;: &amp;quot;userTag_9&amp;quot;,&lt;br /&gt;
			&amp;quot;inputType&amp;quot;: &amp;quot;text&amp;quot; // || &amp;quot;select&amp;quot; || &amp;quot;checkbox&amp;quot; || &amp;quot;radio&amp;quot; ,&lt;br /&gt;
		},&lt;br /&gt;
		&amp;quot;elementId2&amp;quot;:{&lt;br /&gt;
			&amp;quot;elementType&amp;quot;: &amp;quot;valueUserTag&amp;quot;,&lt;br /&gt;
			&amp;quot;inputType&amp;quot;: &amp;quot;select&amp;quot;,&lt;br /&gt;
			&amp;quot;options&amp;quot;: [&lt;br /&gt;
	         {&lt;br /&gt;
               optionText:&amp;quot;option1&amp;quot;,&lt;br /&gt;
               valueUserTag:{ &lt;br /&gt;
                 userTag_1:&amp;quot;valueA&amp;quot;, //value not ref valueUserTag&lt;br /&gt;
                 userTag_2:&amp;quot;valueB&amp;quot; &lt;br /&gt;
              },&lt;br /&gt;
	         {&lt;br /&gt;
               optionText:&amp;quot;option2&amp;quot;,&lt;br /&gt;
               valueUserTag:{ &lt;br /&gt;
                 userTag_9:&amp;quot;valueC&amp;quot; &lt;br /&gt;
&lt;br /&gt;
              },&lt;br /&gt;
			],&lt;br /&gt;
		},&lt;br /&gt;
        &amp;quot;elementId21&amp;quot;:{&lt;br /&gt;
			&amp;quot;elementType&amp;quot;: &amp;quot;valueUserTag&amp;quot;,&lt;br /&gt;
			&amp;quot;inputType&amp;quot;: &amp;quot;checkbox&amp;quot;,&lt;br /&gt;
			&amp;quot;onSetting:{&lt;br /&gt;
               optionText:&amp;quot;on&amp;quot;,&lt;br /&gt;
               valueUserTag:{ &lt;br /&gt;
                 userTag_1:&amp;quot;valueA&amp;quot;, //value not ref valueUserTag&lt;br /&gt;
                 userTag_2:&amp;quot;valueB&amp;quot; &lt;br /&gt;
&lt;br /&gt;
              },&lt;br /&gt;
             },&lt;br /&gt;
             &amp;quot;offSetting&amp;quot;:{&lt;br /&gt;
               optionText:&amp;quot;off&amp;quot;,&lt;br /&gt;
               valueUserTag:{ &lt;br /&gt;
                 userTag_9:&amp;quot;valueC&amp;quot; &lt;br /&gt;
&lt;br /&gt;
              },&lt;br /&gt;
             },&lt;br /&gt;
		   &lt;br /&gt;
           &lt;br /&gt;
		},&lt;br /&gt;
		&amp;quot;elementId3&amp;quot;:{&lt;br /&gt;
			&amp;quot;elementType&amp;quot;: &amp;quot;sort&amp;quot;,&lt;br /&gt;
			&amp;quot;display&amp;quot;: &amp;quot;downArrow&amp;quot;, // || upArrow&lt;br /&gt;
			&amp;quot;requiredDataLinkStepObjectId&amp;quot;: &amp;quot;userTag_LinkStepObjectC&amp;quot;,&lt;br /&gt;
			&amp;quot;dataType&amp;quot;: &amp;quot;number&amp;quot;, // &amp;quot;number&amp;quot; | &amp;quot;string&amp;quot;&lt;br /&gt;
			&amp;quot;sortOrder&amp;quot;: &amp;quot;ascending&amp;quot; // &amp;quot;ascending&amp;quot;|&amp;quot;descending&amp;quot; (default ascending)&lt;br /&gt;
		},&lt;br /&gt;
		&amp;quot;elementId4&amp;quot;:{&lt;br /&gt;
			&amp;quot;elementType&amp;quot;: &amp;quot;numberOfRows&amp;quot;,&lt;br /&gt;
			&amp;quot;inputType&amp;quot;: &amp;quot;text&amp;quot; // || &amp;quot;select&amp;quot; || &amp;quot;checkbox&amp;quot; || &amp;quot;radio&amp;quot; ,&lt;br /&gt;
		},&lt;br /&gt;
		&amp;quot;elementId5&amp;quot;:{&lt;br /&gt;
			&amp;quot;elementType&amp;quot;:&amp;quot;numberOfRows&amp;quot;,&lt;br /&gt;
			&amp;quot;inputType&amp;quot;: &amp;quot;select&amp;quot;,&lt;br /&gt;
			&amp;quot;options&amp;quot;: [&lt;br /&gt;
	         {&lt;br /&gt;
               optionText:&amp;quot;page5&amp;quot;,&lt;br /&gt;
               value:5&lt;br /&gt;
             },&lt;br /&gt;
	       	 {&lt;br /&gt;
               optionText:&amp;quot;page7&amp;quot;,&lt;br /&gt;
               value:7&lt;br /&gt;
             },&lt;br /&gt;
			],&lt;br /&gt;
		},&lt;br /&gt;
		&amp;quot;elementId6&amp;quot;:{&lt;br /&gt;
			&amp;quot;elementType&amp;quot;: &amp;quot;submit&amp;quot;,&lt;br /&gt;
			&amp;quot;display&amp;quot;: &amp;quot;submit&amp;quot;, // any text to be shown&lt;br /&gt;
			&amp;quot;sendRequest&amp;quot;: [&amp;quot;sort&amp;quot;, &amp;quot;numberOfRows&amp;quot;, &amp;quot;filter&amp;quot;] &lt;br /&gt;
		},&lt;br /&gt;
		&amp;quot;elementId7&amp;quot;:{&lt;br /&gt;
			&amp;quot;elementType&amp;quot;: &amp;quot;reset&amp;quot;,&lt;br /&gt;
			&amp;quot;display&amp;quot;: &amp;quot;reset rows&amp;quot;, // any text to be shown&lt;br /&gt;
			&amp;quot;sendRequest&amp;quot;: [&amp;quot;sort&amp;quot;, &amp;quot;numberOfRows&amp;quot;, &amp;quot;filter&amp;quot;] &lt;br /&gt;
		},&lt;br /&gt;
		&amp;quot;elementId9&amp;quot;:{&lt;br /&gt;
			&amp;quot;elementType&amp;quot;: &amp;quot;totalDatafield&amp;quot;,&lt;br /&gt;
			&amp;quot;requiredDataLinkStepObjectId&amp;quot;: &amp;quot;link1&amp;quot;,&lt;br /&gt;
			&amp;quot;showIfNotAllRowsLoaded&amp;quot;: true // || false&lt;br /&gt;
		},&lt;br /&gt;
		&amp;quot;elementId11&amp;quot;:{&lt;br /&gt;
			// will need to link to per record check box&lt;br /&gt;
			&amp;quot;elementType&amp;quot;: &amp;quot;bulkAction&amp;quot;,&lt;br /&gt;
			&amp;quot;action&amp;quot;: &amp;quot;on&amp;quot; // on | off | switch&lt;br /&gt;
			&amp;quot;bulkActionUserTag&amp;quot;: &amp;quot;tagA&amp;quot;, // have normalized list of bulkActionTags, with list of &amp;quot;bulkAction&amp;quot; and &amp;quot;bulkActionCheckBox&amp;quot; elements linked to it&lt;br /&gt;
		},&lt;br /&gt;
		&amp;quot;elementId8&amp;quot;:{&lt;br /&gt;
			&amp;quot;elementType&amp;quot;: &amp;quot;pageNumbers&amp;quot;,&lt;br /&gt;
			&amp;quot;linksAfter&amp;quot;: [&lt;br /&gt;
				{&lt;br /&gt;
					&amp;quot;action&amp;quot;: &amp;quot;jumpNumberOfPages&amp;quot;,&lt;br /&gt;
					&amp;quot;jumpPages&amp;quot;: 7,&lt;br /&gt;
					&amp;quot;string&amp;quot;: &amp;quot;..&amp;quot;&lt;br /&gt;
				},&lt;br /&gt;
				{&lt;br /&gt;
					&amp;quot;action&amp;quot;: &amp;quot;jumpNumberOfPages&amp;quot;,&lt;br /&gt;
					&amp;quot;jumpPages&amp;quot;: 1,&lt;br /&gt;
					&amp;quot;string&amp;quot;: &amp;quot;&amp;gt;&amp;quot;&lt;br /&gt;
				},&lt;br /&gt;
				{&lt;br /&gt;
					&amp;quot;action&amp;quot;: &amp;quot;goToLastPage&amp;quot;,&lt;br /&gt;
					&amp;quot;hideWhenLastPageShown&amp;quot;: true,&lt;br /&gt;
					&amp;quot;string&amp;quot;: &amp;quot;&amp;gt;&amp;gt;&amp;quot;&lt;br /&gt;
				}&lt;br /&gt;
			],&lt;br /&gt;
			&amp;quot;linksBefore&amp;quot;: [&lt;br /&gt;
				{&lt;br /&gt;
					&amp;quot;action&amp;quot;: &amp;quot;goToFirstPage&amp;quot;,&lt;br /&gt;
					&amp;quot;hideWhenFirstPageShown&amp;quot;: true,&lt;br /&gt;
					&amp;quot;string&amp;quot;: &amp;quot;&amp;lt;&amp;lt;&amp;quot;&lt;br /&gt;
				},&lt;br /&gt;
				{&lt;br /&gt;
					&amp;quot;action&amp;quot;: &amp;quot;jumpNumberOfPages&amp;quot;,&lt;br /&gt;
					&amp;quot;jumpPages&amp;quot;: 1,&lt;br /&gt;
					&amp;quot;string&amp;quot;: &amp;quot;&amp;lt;&amp;quot;&lt;br /&gt;
				},&lt;br /&gt;
				{&lt;br /&gt;
					&amp;quot;action&amp;quot;: &amp;quot;jumpNumberOfPages&amp;quot;,&lt;br /&gt;
					&amp;quot;jumpPages&amp;quot;: 7,&lt;br /&gt;
					&amp;quot;string&amp;quot;: &amp;quot;..&amp;quot;&lt;br /&gt;
				}&lt;br /&gt;
			],&lt;br /&gt;
			&amp;quot;showPagesAfter&amp;quot;: 3,&lt;br /&gt;
			&amp;quot;showPagesBefore&amp;quot;: 3&lt;br /&gt;
		},&lt;br /&gt;
		&lt;br /&gt;
		// records types    &lt;br /&gt;
		&amp;quot;elementId5&amp;quot;:{&lt;br /&gt;
			&amp;quot;elementType&amp;quot;: &amp;quot;requiredDataLinkStepObject&amp;quot;, // in record&lt;br /&gt;
			&amp;quot;requiredDataLinkStepObjectId&amp;quot;: &amp;quot;link1&amp;quot;,&lt;br /&gt;
		},&lt;br /&gt;
		&amp;quot;elementIdxx&amp;quot;:{&lt;br /&gt;
			&amp;quot;elementType&amp;quot;: &amp;quot;bulkActionCheckBox&amp;quot;,&lt;br /&gt;
			&amp;quot;bulkActionUserTag&amp;quot;: &amp;quot;tagA&amp;quot;,&lt;br /&gt;
		},&lt;br /&gt;
	},&lt;br /&gt;
	&lt;br /&gt;
	valueUserTags: {&lt;br /&gt;
		// values are shared between requestProperties and filter values. This set can be iterated to overwrite values using userTag to identify&lt;br /&gt;
		userTag_1:{&lt;br /&gt;
			defaultValue: &amp;quot;xx&amp;quot;,&lt;br /&gt;
		},&lt;br /&gt;
		userTag_2:{&lt;br /&gt;
			defaultValue: &amp;quot;xx&amp;quot;,&lt;br /&gt;
		},&lt;br /&gt;
		userTag_3:{&lt;br /&gt;
			defaultValue: &amp;quot;xx&amp;quot;,&lt;br /&gt;
		},&lt;br /&gt;
		userTag_4:{&lt;br /&gt;
			defaultValue: &amp;quot;xx&amp;quot;,&lt;br /&gt;
		},&lt;br /&gt;
		userTag_5:{&lt;br /&gt;
			defaultValue: &amp;quot;xx&amp;quot;,&lt;br /&gt;
		},&lt;br /&gt;
		userTag_6:{&lt;br /&gt;
			valueSource: &amp;quot;complexFilterCombination&amp;quot;,&lt;br /&gt;
            complexFilterCombinationId: &amp;quot;hash_complexFilterCombinationA&amp;quot;,&lt;br /&gt;
		},&lt;br /&gt;
		userTag_7:{&lt;br /&gt;
			valueSource: &amp;quot;perParentCombination&amp;quot;,&lt;br /&gt;
            perParentCombinationId: &amp;quot;hash_perParentCombinationA&amp;quot;,&lt;br /&gt;
		},&lt;br /&gt;
        userTag_8: {&lt;br /&gt;
            valueSource: 'perParentIdentifier',&lt;br /&gt;
            perParentIdentifierFieldname: 'sellOfferId'&lt;br /&gt;
        },,&lt;br /&gt;
		userTag_9:{&lt;br /&gt;
			defaultValue: &amp;quot;xx&amp;quot;,&lt;br /&gt;
		},&lt;br /&gt;
		userTag_10:{&lt;br /&gt;
			defaultValue: &amp;quot;xx&amp;quot;,&lt;br /&gt;
		},&lt;br /&gt;
		userTag_11:{&lt;br /&gt;
			defaultValue: &amp;quot;xx&amp;quot;,&lt;br /&gt;
		},&lt;br /&gt;
	},&lt;br /&gt;
&lt;br /&gt;
	bulkActionUserTags: {&lt;br /&gt;
		tagA:{&lt;br /&gt;
			bulkActions: [&lt;br /&gt;
                &amp;quot;elementId11&amp;quot;,&lt;br /&gt;
                // ...&lt;br /&gt;
            ],&lt;br /&gt;
            bulkActionCheckBoxes: [&lt;br /&gt;
                &amp;quot;elementIdxx&amp;quot;,&lt;br /&gt;
                // ...&lt;br /&gt;
            ],&lt;br /&gt;
		},&lt;br /&gt;
        // ...&lt;br /&gt;
	},&lt;br /&gt;
&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= Example params sent to backend =&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;JavaScript&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
let paramFromTableOutput = {&lt;br /&gt;
	objType: { //* main objType&lt;br /&gt;
		serviceTag: &amp;quot;ProductManager&amp;quot;,&lt;br /&gt;
		objectType: &amp;quot;Product&amp;quot;&lt;br /&gt;
	},&lt;br /&gt;
    initialLogicalElementId: &amp;quot;uuid_logical_1&amp;quot;,&lt;br /&gt;
    logicalElements: {&lt;br /&gt;
       uuid_logical_1: {&lt;br /&gt;
         logicalElementType: &amp;quot;logical&amp;quot;,&lt;br /&gt;
         previousLogicalElementId: null,&lt;br /&gt;
         nextLogicalElementId: null,&lt;br /&gt;
&lt;br /&gt;
         objType: {&lt;br /&gt;
           serviceTag: &amp;quot;ProductManager&amp;quot;,&lt;br /&gt;
           objectType: &amp;quot;product&amp;quot;&lt;br /&gt;
         },&lt;br /&gt;
          partitionKeyValueUserTags: {&lt;br /&gt;
            productId: &amp;quot;userTag_1&amp;quot;,&lt;br /&gt;
          },&lt;br /&gt;
          // sortKeyValueUserTags: {&lt;br /&gt;
          //    productId: &amp;quot;valueB&amp;quot;,&lt;br /&gt;
          // },&lt;br /&gt;
          // comparison: &amp;quot;equals&amp;quot;,&lt;br /&gt;
          // conditionalFieldValues: [&lt;br /&gt;
          //  {&lt;br /&gt;
          //    fieldname: &amp;quot;language&amp;quot;,&lt;br /&gt;
          //   includeValueUserTags: [&amp;quot;th&amp;quot;],&lt;br /&gt;
          //    // excludeValueUserTags: [&amp;quot;xx&amp;quot;,&amp;quot;sdd&amp;quot;]&lt;br /&gt;
          //  }&lt;br /&gt;
          // ]&lt;br /&gt;
       },&lt;br /&gt;
       &lt;br /&gt;
       // ex. traversal type&lt;br /&gt;
       // uuid_traversal: {&lt;br /&gt;
       //   logicalElementType: &amp;quot;traversal&amp;quot;,&lt;br /&gt;
       //   previousLogicalElementId: null,&lt;br /&gt;
       //   nextLogicalElementId: null,&lt;br /&gt;
&lt;br /&gt;
       //   objType: {&lt;br /&gt;
       //     objectType: &amp;quot;locationNode&amp;quot;,&lt;br /&gt;
       //     serviceTag: &amp;quot;Locations&amp;quot;,&lt;br /&gt;
       //   },&lt;br /&gt;
       //   traversalSteps: [&lt;br /&gt;
       //     &amp;quot;uuid_traversal_1&amp;quot;,&lt;br /&gt;
       //     &amp;quot;uuid_traversal_2&amp;quot;,&lt;br /&gt;
       //     &amp;quot;uuid_traversal_3&amp;quot;,&lt;br /&gt;
       //   ]&lt;br /&gt;
       // }&lt;br /&gt;
    },&lt;br /&gt;
    traversalSteps: {&lt;br /&gt;
       uuid_traversal_1: {&lt;br /&gt;
		pathLinkType: {&lt;br /&gt;
            objType: {&lt;br /&gt;
			   serviceTag: &amp;quot;Locations&amp;quot;,&lt;br /&gt;
			   objectType: &amp;quot;localtionLink&amp;quot;&lt;br /&gt;
		    },&lt;br /&gt;
			relType: {&lt;br /&gt;
			  serviceTag: &amp;quot;Locations&amp;quot;,&lt;br /&gt;
			  relationshipTag: &amp;quot;hasLocationLink&amp;quot;&lt;br /&gt;
			},&lt;br /&gt;
			direction: &amp;quot;to&amp;quot;&lt;br /&gt;
		},&lt;br /&gt;
		hopsPassObjType: true, //optional&lt;br /&gt;
		hopsEnd: 10, //optional  &lt;br /&gt;
       },&lt;br /&gt;
       uuid_traversal_2: {&lt;br /&gt;
		pathLinkType: {&lt;br /&gt;
            objType: {&lt;br /&gt;
			   serviceTag: &amp;quot;Locations&amp;quot;,&lt;br /&gt;
			   objectType: &amp;quot;locationNode&amp;quot;&lt;br /&gt;
		    },&lt;br /&gt;
			relType: {&lt;br /&gt;
			  serviceTag: &amp;quot;Locations&amp;quot;,&lt;br /&gt;
			  relationshipTag: &amp;quot;isLocationNode&amp;quot;&lt;br /&gt;
			},&lt;br /&gt;
			direction: &amp;quot;to&amp;quot;&lt;br /&gt;
		},&lt;br /&gt;
		//* last traversal cannot set hopPassObjType&lt;br /&gt;
		hopsEnd: 10, //optional  &lt;br /&gt;
       },&lt;br /&gt;
       uuid_traversal_3:{&lt;br /&gt;
         fieldValueUserTags: [&lt;br /&gt;
           {&lt;br /&gt;
             categoryId: &amp;quot;valueD&amp;quot;&lt;br /&gt;
           },&lt;br /&gt;
           {&lt;br /&gt;
             categoryId: &amp;quot;valueA&amp;quot;&lt;br /&gt;
           },&lt;br /&gt;
           {&lt;br /&gt;
             price: &amp;quot;valueF&amp;quot;&lt;br /&gt;
           },&lt;br /&gt;
           {&lt;br /&gt;
             categoryId: &amp;quot;valueA&amp;quot;&lt;br /&gt;
           },&lt;br /&gt;
           {&lt;br /&gt;
             categoryId: &amp;quot;valueB&amp;quot;&lt;br /&gt;
           },&lt;br /&gt;
         ]&lt;br /&gt;
       }&lt;br /&gt;
    },&lt;br /&gt;
	requiredDataFields: [ //* linkStepObjects to create main sort result's requiredData and sortFields&lt;br /&gt;
        // not needed at tableConfig level because can be built from table's elements and sortFields before sending to lib that converts to backend structure&lt;br /&gt;
        &amp;quot;userTag_LinkStepObjectA&amp;quot;, // no link, field in main objType (structure same linkPath but only one step)&lt;br /&gt;
        &amp;quot;userTag_LinkStepObjectB&amp;quot;, // has link&lt;br /&gt;
	],&lt;br /&gt;
	complexFilterCombinations:{&lt;br /&gt;
		hash_complexFilterCombinationA: {&lt;br /&gt;
          objType: {&lt;br /&gt;
            serviceTag: &amp;quot;Locations&amp;quot;,&lt;br /&gt;
            objectType: &amp;quot;locationNode&amp;quot;&lt;br /&gt;
          },&lt;br /&gt;
          initialLogicalElementId: &amp;quot;child_complexFilter_localtionNode&amp;quot;,&lt;br /&gt;
          logicalElements: {&lt;br /&gt;
            child_complexFilter_localtionNode: {&lt;br /&gt;
              logicalElementType: &amp;quot;childComplexFilter&amp;quot;,&lt;br /&gt;
              previousLogicalElementId: null,&lt;br /&gt;
              nextLogicalElementId: null,&lt;br /&gt;
&lt;br /&gt;
              childLogicalElementId: &amp;quot;logical_locationNode&amp;quot;,&lt;br /&gt;
              objType: {&lt;br /&gt;
                serviceTag: &amp;quot;Locations&amp;quot;,&lt;br /&gt;
                objectType: &amp;quot;locationNode&amp;quot;&lt;br /&gt;
              },&lt;br /&gt;
              pathLinkType: {&lt;br /&gt;
                objType: {&lt;br /&gt;
                  serviceTag: &amp;quot;Locations&amp;quot;,&lt;br /&gt;
                  objectType: &amp;quot;locationNode&amp;quot;&lt;br /&gt;
                },&lt;br /&gt;
                relType: {&lt;br /&gt;
                  serviceTag: &amp;quot;Locations&amp;quot;,&lt;br /&gt;
                  relationshipTag: &amp;quot;hasParentLocationNode&amp;quot;&lt;br /&gt;
                },&lt;br /&gt;
                direction: &amp;quot;to&amp;quot;&lt;br /&gt;
              },&lt;br /&gt;
            },&lt;br /&gt;
            logical_locationNode: {&lt;br /&gt;
               logicalElementType: &amp;quot;logical&amp;quot;,&lt;br /&gt;
               previousLogicalElementId: &amp;quot;child_complexFilter_localtionNode&amp;quot;,&lt;br /&gt;
               nextLogicalElementId: null,&lt;br /&gt;
&lt;br /&gt;
               objType: {&lt;br /&gt;
                serviceTag: &amp;quot;Locations&amp;quot;,&lt;br /&gt;
                objectType: &amp;quot;locationNode&amp;quot;&lt;br /&gt;
               },&lt;br /&gt;
                partitionKeyValueUserTags: {&lt;br /&gt;
                   locationNodeId: &amp;quot;userTag_7&amp;quot;,&lt;br /&gt;
                },&lt;br /&gt;
                // sortKeyValueUserTags: {&lt;br /&gt;
                //    productId: &amp;quot;valueB&amp;quot;,&lt;br /&gt;
                // },&lt;br /&gt;
                // comparison: &amp;quot;equals&amp;quot;,&lt;br /&gt;
                // conditionalFieldValues: [&lt;br /&gt;
                //  {&lt;br /&gt;
                //    fieldname: &amp;quot;language&amp;quot;,&lt;br /&gt;
                //   includeValueUserTags: [&amp;quot;th&amp;quot;],&lt;br /&gt;
                //    // excludeValueUserTags: [&amp;quot;xx&amp;quot;,&amp;quot;sdd&amp;quot;]&lt;br /&gt;
                //  }&lt;br /&gt;
                // ]&lt;br /&gt;
            }&lt;br /&gt;
         }&lt;br /&gt;
       },&lt;br /&gt;
	},&lt;br /&gt;
	perParentCombinations:{&lt;br /&gt;
		hash_perParentCombinationA: {&lt;br /&gt;
          objType: {&lt;br /&gt;
            serviceTag: &amp;quot;SellOfferPlan&amp;quot;,&lt;br /&gt;
            objectType: &amp;quot;sellOfferPlan&amp;quot;&lt;br /&gt;
          },&lt;br /&gt;
          initialLogicalElementId: &amp;quot;child_complexFilter_1&amp;quot;,&lt;br /&gt;
          logicalElements: {&lt;br /&gt;
            child_complexFilter_1: {&lt;br /&gt;
              logicalElementType: &amp;quot;childComplexFilter&amp;quot;,&lt;br /&gt;
              previousLogicalElementId: null,&lt;br /&gt;
              nextLogicalElementId: null,&lt;br /&gt;
&lt;br /&gt;
              childLogicalElementId: &amp;quot;logical_sellOffer&amp;quot;,&lt;br /&gt;
              objType: {&lt;br /&gt;
                serviceTag: &amp;quot;SellOfferPlan&amp;quot;,&lt;br /&gt;
                objectType: &amp;quot;sellOfferPlan&amp;quot;&lt;br /&gt;
              },&lt;br /&gt;
              pathLinkType: {&lt;br /&gt;
                objType: {&lt;br /&gt;
                  serviceTag: &amp;quot;SellOfferManager&amp;quot;,&lt;br /&gt;
                  objectType: &amp;quot;sellOffer&amp;quot;&lt;br /&gt;
                }, &lt;br /&gt;
                relType: {&lt;br /&gt;
                  serviceTag: &amp;quot;SellOfferManager&amp;quot;,&lt;br /&gt;
                  relationshipTag: &amp;quot;usesSellOfferPlan&amp;quot;&lt;br /&gt;
                },&lt;br /&gt;
                direction: &amp;quot;to&amp;quot;&lt;br /&gt;
              },&lt;br /&gt;
              requestProperties: {&lt;br /&gt;
                tag_orderQuantity: &amp;quot;userTag_9&amp;quot;&lt;br /&gt;
              }&lt;br /&gt;
           },&lt;br /&gt;
           logical_sellOffer: {&lt;br /&gt;
              logicalElementType: &amp;quot;logical&amp;quot;,&lt;br /&gt;
              previousLogicalElementId: &amp;quot;child_complexFilter_1&amp;quot;,&lt;br /&gt;
              nextLogicalElementId: null,&lt;br /&gt;
&lt;br /&gt;
              objType: {&lt;br /&gt;
                serviceTag: &amp;quot;SellOfferManager&amp;quot;,&lt;br /&gt;
                objectType: &amp;quot;sellOffer&amp;quot;&lt;br /&gt;
              },&lt;br /&gt;
               partitionKeyValueUserTags: {&lt;br /&gt;
                   sellOfferId: &amp;quot;userTag_8&amp;quot;,&lt;br /&gt;
               },&lt;br /&gt;
               // sortKeyValueUserTags: {&lt;br /&gt;
               //    productId: &amp;quot;valueB&amp;quot;,&lt;br /&gt;
               // },&lt;br /&gt;
               // comparison: &amp;quot;equals&amp;quot;,&lt;br /&gt;
               // conditionalFieldValues: [&lt;br /&gt;
               //  {&lt;br /&gt;
               //    fieldname: &amp;quot;language&amp;quot;,&lt;br /&gt;
               //   includeValueUserTags: [&amp;quot;th&amp;quot;],&lt;br /&gt;
               //    // excludeValueUserTags: [&amp;quot;xx&amp;quot;,&amp;quot;sdd&amp;quot;]&lt;br /&gt;
               //  }&lt;br /&gt;
               // ]&lt;br /&gt;
           }&lt;br /&gt;
        }&lt;br /&gt;
      },&lt;br /&gt;
	},&lt;br /&gt;
	requiredDataLinkStepObjects: {&lt;br /&gt;
		userTag_LinkStepObjectA: { //* requiredData no linkPath&lt;br /&gt;
			initialObjType: { //* main objType&lt;br /&gt;
				serviceTag: &amp;quot;ProductManager&amp;quot;,&lt;br /&gt;
				objectType: &amp;quot;Product&amp;quot;&lt;br /&gt;
			},&lt;br /&gt;
			linkSteps: [&amp;quot;hash_linkStepA_1&amp;quot;],&lt;br /&gt;
		},&lt;br /&gt;
        userTag_LinkStepObjectB: { // requiredDataFields for finding max orderTotal&lt;br /&gt;
            initialObjType: { //* main objType&lt;br /&gt;
				serviceTag: &amp;quot;ProductManager&amp;quot;,&lt;br /&gt;
				objectType: &amp;quot;Product&amp;quot;&lt;br /&gt;
			},&lt;br /&gt;
			linkSteps: [&amp;quot;hash_linkStepB_1&amp;quot;, &amp;quot;hash_linkStepB_2&amp;quot;, &amp;quot;hash_linkStepB_3&amp;quot;],&lt;br /&gt;
        }&lt;br /&gt;
        // userTag_LinkStepObjectC&lt;br /&gt;
        // userTag_LinkStepObjectD&lt;br /&gt;
	},&lt;br /&gt;
	requiredDataLinkSteps: {&lt;br /&gt;
		hash_linkStepA_1:{&lt;br /&gt;
          fieldName: &amp;quot;xxx&amp;quot; &lt;br /&gt;
        },&lt;br /&gt;
        hash_linkStepB_1:{&lt;br /&gt;
          pathLinkType: {&lt;br /&gt;
             objType: {&lt;br /&gt;
               serviceTag: &amp;quot;SellOfferManager&amp;quot;,&lt;br /&gt;
               objectType: &amp;quot;SellOffer&amp;quot;&lt;br /&gt;
             },&lt;br /&gt;
             relType: {&lt;br /&gt;
               serviceTag: &amp;quot;ProductManager&amp;quot;,&lt;br /&gt;
               relationshipTag: &amp;quot;hasSellOffer&amp;quot;&lt;br /&gt;
             },&lt;br /&gt;
             direction: &amp;quot;to&amp;quot;,&lt;br /&gt;
          },&lt;br /&gt;
           addFilterMain: true, //default: false =&amp;gt; need to add filterMain set = true&lt;br /&gt;
           filterElements: { //* filter in linkPath&lt;br /&gt;
             objType: {&lt;br /&gt;
               serviceTag: &amp;quot;SellOfferManager&amp;quot;,&lt;br /&gt;
               objectType: &amp;quot;SellOffer&amp;quot;&lt;br /&gt;
             },&lt;br /&gt;
             initialLogicalElementId: &amp;quot;logical_sellOffer_in_link&amp;quot;,&lt;br /&gt;
             logicalElements: {&lt;br /&gt;
               logical_sellOffer_in_link: {&lt;br /&gt;
                  logicalElementType: &amp;quot;logical&amp;quot;,&lt;br /&gt;
                  previousLogicalElementId: null,&lt;br /&gt;
                  nextLogicalElementId: null,&lt;br /&gt;
&lt;br /&gt;
                  objType: {&lt;br /&gt;
                    serviceTag: &amp;quot;SellOfferManager&amp;quot;,&lt;br /&gt;
                    objectType: &amp;quot;SellOffer&amp;quot;&lt;br /&gt;
                  },&lt;br /&gt;
                  partitionKeyValueUserTags: {&lt;br /&gt;
                     sellOfferId: &amp;quot;userTag_8&amp;quot;,&lt;br /&gt;
                  },&lt;br /&gt;
                  // sortKeyValueUserTags: {&lt;br /&gt;
                  //    productId: &amp;quot;valueB&amp;quot;,&lt;br /&gt;
                  // },&lt;br /&gt;
                  // comparison: &amp;quot;equals&amp;quot;,&lt;br /&gt;
                  conditionalFieldValues: [&lt;br /&gt;
                    {&lt;br /&gt;
                      fieldname: &amp;quot;userId&amp;quot;,&lt;br /&gt;
                      includeValueUserTags: [&amp;quot;userTag_2&amp;quot;], // &lt;br /&gt;
                      // excludeValueUserTags: [&amp;quot;xx&amp;quot;,&amp;quot;sdd&amp;quot;]&lt;br /&gt;
                    }&lt;br /&gt;
                   ]&lt;br /&gt;
               }&lt;br /&gt;
            }&lt;br /&gt;
          },&lt;br /&gt;
&lt;br /&gt;
        }, &lt;br /&gt;
        hash_linkStepB_2: {&lt;br /&gt;
           pathLinkType: {&lt;br /&gt;
             objType: {&lt;br /&gt;
               serviceTag: &amp;quot;OrderPrice&amp;quot;,&lt;br /&gt;
               objectType: &amp;quot;OrderPrice&amp;quot;&lt;br /&gt;
             },&lt;br /&gt;
             relType: {&lt;br /&gt;
               serviceTag: &amp;quot;sellOfferStandard&amp;quot;,&lt;br /&gt;
               relationshipTag: &amp;quot;hasOrderPrice&amp;quot;&lt;br /&gt;
             },&lt;br /&gt;
             direction: &amp;quot;to&amp;quot;,&lt;br /&gt;
           },&lt;br /&gt;
          requestProperties: {&lt;br /&gt;
            tag_deliverTo: &amp;quot;userTag_3&amp;quot;,&lt;br /&gt;
            tag_sellOfferPlan: &amp;quot;userTag_4&amp;quot;,&lt;br /&gt;
            // tag_sellOfferPlanDeliveryMethodLink: &amp;quot;userTag_5&amp;quot;,&lt;br /&gt;
            // tag_sellOfferPlanUserPaymentMethodLink: &amp;quot;userTag_6&amp;quot;&lt;br /&gt;
          }&lt;br /&gt;
          aggregate: &amp;quot;max&amp;quot;,&lt;br /&gt;
          sortFields: [&lt;br /&gt;
       			{&lt;br /&gt;
            		requiredDataLinkStepObjectId: &amp;quot;userTag_LinkStepObjectC&amp;quot;,&lt;br /&gt;
		            dataType: &amp;quot;number&amp;quot;,&lt;br /&gt;
                    sortOrder: &amp;quot;ascending&amp;quot;|&amp;quot;descending&amp;quot;&lt;br /&gt;
        		},&lt;br /&gt;
				{&lt;br /&gt;
        		     requiredDataLinkStepObjectId: &amp;quot;userTag_LinkStepObjectD&amp;quot;,&lt;br /&gt;
		             dataType: &amp;quot;string&amp;quot;,&lt;br /&gt;
                     sortOrder: &amp;quot;ascending&amp;quot;|&amp;quot;descending&amp;quot;&lt;br /&gt;
		         },&lt;br /&gt;
                {&lt;br /&gt;
        		     requiredDataLinkStepObjectId: &amp;quot;userTag_LinkStepObjectD&amp;quot;,&lt;br /&gt;
		             dataType: &amp;quot;array&amp;quot;,&lt;br /&gt;
                     sortByValueUserTags:[&amp;quot;userTag_1&amp;quot;,&amp;quot;userTag_2&amp;quot;],&lt;br /&gt;
                     sortOrder: &amp;quot;ascending&amp;quot;|&amp;quot;descending&amp;quot;&lt;br /&gt;
		        }&lt;br /&gt;
            ],&lt;br /&gt;
          comparison: &amp;quot;greaterThan&amp;quot;,&lt;br /&gt;
          comparisonSortField: &amp;quot;upToValue&amp;quot;,&lt;br /&gt;
          comparisonSortDataType: &amp;quot;string&amp;quot;,&lt;br /&gt;
          comparisonValue: &amp;quot;userTag_2&amp;quot;,&lt;br /&gt;
        }, &lt;br /&gt;
        hash_linkStepB_3: {&lt;br /&gt;
           fieldName: &amp;quot;zzz&amp;quot;,&lt;br /&gt;
        }&lt;br /&gt;
	},&lt;br /&gt;
	sortFields: [&lt;br /&gt;
        {&lt;br /&gt;
             requiredDataLinkStepObjectId: &amp;quot;userTag_LinkStepObjectB&amp;quot;,&lt;br /&gt;
             dataType: &amp;quot;number&amp;quot;,&lt;br /&gt;
             sortOrder: &amp;quot;ascending&amp;quot;|&amp;quot;descending&amp;quot;&lt;br /&gt;
        },&lt;br /&gt;
		{&lt;br /&gt;
             requiredDataLinkStepObjectId: &amp;quot;userTag_LinkStepObjectA&amp;quot;,&lt;br /&gt;
             dataType: &amp;quot;string&amp;quot;,&lt;br /&gt;
             sortOrder: &amp;quot;ascending&amp;quot;|&amp;quot;descending&amp;quot;&lt;br /&gt;
         },&lt;br /&gt;
        {&lt;br /&gt;
             requiredDataLinkStepObjectId: &amp;quot;userTag_LinkStepObjectD&amp;quot;,&lt;br /&gt;
		     dataType: &amp;quot;array&amp;quot;,&lt;br /&gt;
             sortByValueUserTags:[&amp;quot;userTag_1&amp;quot;,&amp;quot;userTag_2&amp;quot;],&lt;br /&gt;
             sortOrder: &amp;quot;ascending&amp;quot;|&amp;quot;descending&amp;quot;&lt;br /&gt;
		}&lt;br /&gt;
    ],&lt;br /&gt;
	valueUserTags: {&lt;br /&gt;
		userTag_1:{&lt;br /&gt;
			value: &amp;quot;xx&amp;quot;,&lt;br /&gt;
		},&lt;br /&gt;
		userTag_2:{&lt;br /&gt;
			value: &amp;quot;yy&amp;quot;,&lt;br /&gt;
		},&lt;br /&gt;
		userTag_3:{&lt;br /&gt;
			valueSource: &amp;quot;complexFilterCombination&amp;quot;,&lt;br /&gt;
            complexFilterCombinationId: &amp;quot;hash_complexFilterCombinationA&amp;quot;,&lt;br /&gt;
		},&lt;br /&gt;
		userTag_4:{&lt;br /&gt;
			valueSource: &amp;quot;perParentCombination&amp;quot;,&lt;br /&gt;
            perParentCombinationId: &amp;quot;hash_perParentCombinationA&amp;quot;,&lt;br /&gt;
		},&lt;br /&gt;
		userTag_7: {&lt;br /&gt;
          value: &amp;quot;zz&amp;quot;,&lt;br /&gt;
        },&lt;br /&gt;
        userTag_8: {&lt;br /&gt;
          valueSource: 'perParentIdentifier',&lt;br /&gt;
          perParentIdentifierFieldname: 'sellOfferId'&lt;br /&gt;
        },&lt;br /&gt;
        userTag_9: {&lt;br /&gt;
          value: 2,&lt;br /&gt;
        },&lt;br /&gt;
	 }&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[Category:Working documents| 2025-04-14]]&lt;br /&gt;
[[Category:Working documents - Search Results| 2025-04-14]]&lt;/div&gt;</summary>
		<author><name>Rut</name></author>
	</entry>
	<entry>
		<id>https://izara.io/wiki/index.php?title=2026-02-12_-_Frontend_LinkPath_structure_Lib_requiredData_And_ComplexFilter&amp;diff=4090</id>
		<title>2026-02-12 - Frontend LinkPath structure Lib requiredData And ComplexFilter</title>
		<link rel="alternate" type="text/html" href="https://izara.io/wiki/index.php?title=2026-02-12_-_Frontend_LinkPath_structure_Lib_requiredData_And_ComplexFilter&amp;diff=4090"/>
		<updated>2026-02-12T10:44:17Z</updated>

		<summary type="html">&lt;p&gt;Rut: Created page with &amp;quot;==Lib RequiredData== how to use  &amp;lt;syntaxhighlight lang=&amp;quot;JavaScript&amp;quot;&amp;gt; ``` const [modalSettingRequiredData, setModalSettingRequiredData] = useState(false);  //state for open/close Modal    function statusModalSettingLogicalElement(status) {     setModalSettingLogicalElement(status);   } //function for open/close Modal  &amp;lt;ModalRequiredData 	//------------------standard-------------------------------   titleModel={&amp;quot;sortField&amp;quot;} //HeaderModal   statusModal={statusModalSettingRe...&amp;quot;&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;==Lib RequiredData==&lt;br /&gt;
how to use&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;JavaScript&amp;quot;&amp;gt;&lt;br /&gt;
```&lt;br /&gt;
const [modalSettingRequiredData, setModalSettingRequiredData] = useState(false);  //state for open/close Modal&lt;br /&gt;
&lt;br /&gt;
  function statusModalSettingLogicalElement(status) {&lt;br /&gt;
    setModalSettingLogicalElement(status);&lt;br /&gt;
  } //function for open/close Modal&lt;br /&gt;
&lt;br /&gt;
&amp;lt;ModalRequiredData&lt;br /&gt;
	//------------------standard-------------------------------&lt;br /&gt;
  titleModel={&amp;quot;sortField&amp;quot;} //HeaderModal&lt;br /&gt;
  statusModal={statusModalSettingRequiredData} &lt;br /&gt;
	objTypeMain={objConfig.pageOutputMainConfigUseCase.objType}//serviceTag objectType&lt;br /&gt;
  objConfigUseCase={objConfig.pageOutputMainConfigUseCase}&lt;br /&gt;
  nameReducer={nameReducer}&lt;br /&gt;
  parentOutputId={parentOutputId}&lt;br /&gt;
  successFunction={successRequiredDataConfig}&lt;br /&gt;
	userTag={modalSettingRequiredData === true ? &amp;quot;&amp;quot;: modalSettingRequiredData}&lt;br /&gt;
  //userTag object for update requirdData&lt;br /&gt;
	FieldNameComponent={} //Lib export Component FiledName of LinkSteps But type traversal will send prop traversalComponent from Lib ComplexFilter &lt;br /&gt;
	&lt;br /&gt;
&lt;br /&gt;
//---------------------useCase-----------------------------&lt;br /&gt;
 sortFieldStatus={true} // if working sortField&lt;br /&gt;
&lt;br /&gt;
//--------------------Lib Seagame----------------------------&lt;br /&gt;
  collectObjectLinksWithRequestProperties={&lt;br /&gt;
                collectObjectLinksWithRequestProperties&lt;br /&gt;
              }&lt;br /&gt;
 collectObjectSchemaWithHierarchy={&lt;br /&gt;
                collectObjectSchemaWithHierarchy&lt;br /&gt;
              }	&lt;br /&gt;
            /&amp;gt;&lt;br /&gt;
```&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;/div&gt;</summary>
		<author><name>Rut</name></author>
	</entry>
	<entry>
		<id>https://izara.io/wiki/index.php?title=2025-04-14_-_Frontend_LinkPath_structure_for_tableOutput&amp;diff=4087</id>
		<title>2025-04-14 - Frontend LinkPath structure for tableOutput</title>
		<link rel="alternate" type="text/html" href="https://izara.io/wiki/index.php?title=2025-04-14_-_Frontend_LinkPath_structure_for_tableOutput&amp;diff=4087"/>
		<updated>2026-02-10T11:21:20Z</updated>

		<summary type="html">&lt;p&gt;Rut: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Service - Search Results]]&lt;br /&gt;
&lt;br /&gt;
= Overview =&lt;br /&gt;
&lt;br /&gt;
Structure frontend TableConfig and Output prepare for shared library that creates complexFilter and requestProperties&lt;br /&gt;
&lt;br /&gt;
= Example params in tableConfig =&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;JavaScript&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
let paramFromTableOutput = {&lt;br /&gt;
&lt;br /&gt;
	// .. other properties same as params sent to backend&lt;br /&gt;
	// requiredDataFields not needed in tableConfig as referenced in elements and sortFields&lt;br /&gt;
	// header/footer filterDataField elements reference valueUserTag&lt;br /&gt;
&lt;br /&gt;
	&amp;quot;elements&amp;quot;: {&lt;br /&gt;
		// shared types&lt;br /&gt;
		&amp;quot;elementId12&amp;quot;:{&lt;br /&gt;
			&amp;quot;elementType&amp;quot;: &amp;quot;freetext&amp;quot;,&lt;br /&gt;
			&amp;quot;value&amp;quot;: &amp;quot;aa&amp;quot;&lt;br /&gt;
		}&lt;br /&gt;
&lt;br /&gt;
		// headerFooter types&lt;br /&gt;
		&amp;quot;elementId1&amp;quot;:{&lt;br /&gt;
			&amp;quot;elementType&amp;quot;: &amp;quot;valueUserTag&amp;quot;,&lt;br /&gt;
			&amp;quot;valueUserTag&amp;quot;: &amp;quot;userTag_9&amp;quot;,&lt;br /&gt;
			&amp;quot;inputType&amp;quot;: &amp;quot;text&amp;quot; // || &amp;quot;select&amp;quot; || &amp;quot;checkbox&amp;quot; || &amp;quot;radio&amp;quot; ,&lt;br /&gt;
		},&lt;br /&gt;
		&amp;quot;elementId2&amp;quot;:{&lt;br /&gt;
			&amp;quot;elementType&amp;quot;: &amp;quot;valueUserTag&amp;quot;,&lt;br /&gt;
			&amp;quot;inputType&amp;quot;: &amp;quot;select&amp;quot;,&lt;br /&gt;
			&amp;quot;options&amp;quot;: [&lt;br /&gt;
	         {&lt;br /&gt;
               optionText:&amp;quot;option1&amp;quot;,&lt;br /&gt;
               valueUserTag:{ &lt;br /&gt;
                 userTag_1:&amp;quot;valueA&amp;quot;, //value not ref valueUserTag&lt;br /&gt;
                 userTag_2:&amp;quot;valueB&amp;quot; &lt;br /&gt;
              },&lt;br /&gt;
	         {&lt;br /&gt;
               optionText:&amp;quot;option2&amp;quot;,&lt;br /&gt;
               valueUserTag:{ &lt;br /&gt;
                 userTag_9:&amp;quot;valueC&amp;quot; &lt;br /&gt;
&lt;br /&gt;
              },&lt;br /&gt;
			],&lt;br /&gt;
		},&lt;br /&gt;
        &amp;quot;elementId21&amp;quot;:{&lt;br /&gt;
			&amp;quot;elementType&amp;quot;: &amp;quot;valueUserTag&amp;quot;,&lt;br /&gt;
			&amp;quot;inputType&amp;quot;: &amp;quot;checkbox&amp;quot;,&lt;br /&gt;
			&amp;quot;onSetting:{&lt;br /&gt;
               optionText:&amp;quot;on&amp;quot;,&lt;br /&gt;
               valueUserTag:{ &lt;br /&gt;
                 userTag_1:&amp;quot;valueA&amp;quot;, //value not ref valueUserTag&lt;br /&gt;
                 userTag_2:&amp;quot;valueB&amp;quot; &lt;br /&gt;
&lt;br /&gt;
              },&lt;br /&gt;
             },&lt;br /&gt;
             &amp;quot;offSetting&amp;quot;:{&lt;br /&gt;
               optionText:&amp;quot;off&amp;quot;,&lt;br /&gt;
               valueUserTag:{ &lt;br /&gt;
                 userTag_9:&amp;quot;valueC&amp;quot; &lt;br /&gt;
&lt;br /&gt;
              },&lt;br /&gt;
             },&lt;br /&gt;
		   &lt;br /&gt;
           &lt;br /&gt;
		},&lt;br /&gt;
		&amp;quot;elementId3&amp;quot;:{&lt;br /&gt;
			&amp;quot;elementType&amp;quot;: &amp;quot;sort&amp;quot;,&lt;br /&gt;
			&amp;quot;display&amp;quot;: &amp;quot;downArrow&amp;quot;, // || upArrow&lt;br /&gt;
			&amp;quot;requiredDataLinkStepObjectId&amp;quot;: &amp;quot;userTag_LinkStepObjectC&amp;quot;,&lt;br /&gt;
			&amp;quot;dataType&amp;quot;: &amp;quot;number&amp;quot;, // &amp;quot;number&amp;quot; | &amp;quot;string&amp;quot;&lt;br /&gt;
			&amp;quot;sortOrder&amp;quot;: &amp;quot;ascending&amp;quot; // &amp;quot;ascending&amp;quot;|&amp;quot;descending&amp;quot; (default ascending)&lt;br /&gt;
		},&lt;br /&gt;
		&amp;quot;elementId4&amp;quot;:{&lt;br /&gt;
			&amp;quot;elementType&amp;quot;: &amp;quot;numberOfRows&amp;quot;,&lt;br /&gt;
			&amp;quot;inputType&amp;quot;: &amp;quot;text&amp;quot; // || &amp;quot;select&amp;quot; || &amp;quot;checkbox&amp;quot; || &amp;quot;radio&amp;quot; ,&lt;br /&gt;
		},&lt;br /&gt;
		&amp;quot;elementId5&amp;quot;:{&lt;br /&gt;
			&amp;quot;elementType&amp;quot;:&amp;quot;numberOfRows&amp;quot;,&lt;br /&gt;
			&amp;quot;inputType&amp;quot;: &amp;quot;select&amp;quot;,&lt;br /&gt;
			&amp;quot;options&amp;quot;: [&lt;br /&gt;
	         {&lt;br /&gt;
               optionText:&amp;quot;page5&amp;quot;,&lt;br /&gt;
               value:5&lt;br /&gt;
             },&lt;br /&gt;
	       	 {&lt;br /&gt;
               optionText:&amp;quot;page7&amp;quot;,&lt;br /&gt;
               value:7&lt;br /&gt;
             },&lt;br /&gt;
			],&lt;br /&gt;
		},&lt;br /&gt;
		&amp;quot;elementId6&amp;quot;:{&lt;br /&gt;
			&amp;quot;elementType&amp;quot;: &amp;quot;submit&amp;quot;,&lt;br /&gt;
			&amp;quot;display&amp;quot;: &amp;quot;submit&amp;quot;, // any text to be shown&lt;br /&gt;
			&amp;quot;sendRequest&amp;quot;: &amp;quot;all&amp;quot; // numberOfRows || all || filters&lt;br /&gt;
		},&lt;br /&gt;
		&amp;quot;elementId7&amp;quot;:{&lt;br /&gt;
			&amp;quot;elementType&amp;quot;: &amp;quot;reset&amp;quot;,&lt;br /&gt;
			&amp;quot;display&amp;quot;: &amp;quot;reset rows&amp;quot;, // any text to be shown&lt;br /&gt;
			&amp;quot;sendRequest&amp;quot;: &amp;quot;numberOfRows&amp;quot; // numberOfRows || all || filters&lt;br /&gt;
		},&lt;br /&gt;
		&amp;quot;elementId9&amp;quot;:{&lt;br /&gt;
			&amp;quot;elementType&amp;quot;: &amp;quot;totalDatafield&amp;quot;,&lt;br /&gt;
			&amp;quot;requiredDataLinkStepObjectId&amp;quot;: &amp;quot;link1&amp;quot;,&lt;br /&gt;
			&amp;quot;showIfNotAllRowsLoaded&amp;quot;: true // || false&lt;br /&gt;
		},&lt;br /&gt;
		&amp;quot;elementId11&amp;quot;:{&lt;br /&gt;
			// will need to link to per record check box&lt;br /&gt;
			&amp;quot;elementType&amp;quot;: &amp;quot;bulkAction&amp;quot;,&lt;br /&gt;
			&amp;quot;action&amp;quot;: &amp;quot;on&amp;quot; // on | off | switch&lt;br /&gt;
			&amp;quot;bulkActionUserTag&amp;quot;: &amp;quot;tagA&amp;quot;, // have normalized list of bulkActionTags, with list of &amp;quot;bulkAction&amp;quot; and &amp;quot;bulkActionCheckBox&amp;quot; elements linked to it&lt;br /&gt;
		},&lt;br /&gt;
		&amp;quot;elementId8&amp;quot;:{&lt;br /&gt;
			&amp;quot;elementType&amp;quot;: &amp;quot;pageNumbers&amp;quot;,&lt;br /&gt;
			&amp;quot;linksAfter&amp;quot;: [&lt;br /&gt;
				{&lt;br /&gt;
					&amp;quot;action&amp;quot;: &amp;quot;jumpNumberOfPages&amp;quot;,&lt;br /&gt;
					&amp;quot;jumpPages&amp;quot;: 7,&lt;br /&gt;
					&amp;quot;string&amp;quot;: &amp;quot;..&amp;quot;&lt;br /&gt;
				},&lt;br /&gt;
				{&lt;br /&gt;
					&amp;quot;action&amp;quot;: &amp;quot;jumpNumberOfPages&amp;quot;,&lt;br /&gt;
					&amp;quot;jumpPages&amp;quot;: 1,&lt;br /&gt;
					&amp;quot;string&amp;quot;: &amp;quot;&amp;gt;&amp;quot;&lt;br /&gt;
				},&lt;br /&gt;
				{&lt;br /&gt;
					&amp;quot;action&amp;quot;: &amp;quot;goToLastPage&amp;quot;,&lt;br /&gt;
					&amp;quot;hideWhenLastPageShown&amp;quot;: true,&lt;br /&gt;
					&amp;quot;string&amp;quot;: &amp;quot;&amp;gt;&amp;gt;&amp;quot;&lt;br /&gt;
				}&lt;br /&gt;
			],&lt;br /&gt;
			&amp;quot;linksBefore&amp;quot;: [&lt;br /&gt;
				{&lt;br /&gt;
					&amp;quot;action&amp;quot;: &amp;quot;goToFirstPage&amp;quot;,&lt;br /&gt;
					&amp;quot;hideWhenFirstPageShown&amp;quot;: true,&lt;br /&gt;
					&amp;quot;string&amp;quot;: &amp;quot;&amp;lt;&amp;lt;&amp;quot;&lt;br /&gt;
				},&lt;br /&gt;
				{&lt;br /&gt;
					&amp;quot;action&amp;quot;: &amp;quot;jumpNumberOfPages&amp;quot;,&lt;br /&gt;
					&amp;quot;jumpPages&amp;quot;: 1,&lt;br /&gt;
					&amp;quot;string&amp;quot;: &amp;quot;&amp;lt;&amp;quot;&lt;br /&gt;
				},&lt;br /&gt;
				{&lt;br /&gt;
					&amp;quot;action&amp;quot;: &amp;quot;jumpNumberOfPages&amp;quot;,&lt;br /&gt;
					&amp;quot;jumpPages&amp;quot;: 7,&lt;br /&gt;
					&amp;quot;string&amp;quot;: &amp;quot;..&amp;quot;&lt;br /&gt;
				}&lt;br /&gt;
			],&lt;br /&gt;
			&amp;quot;showPagesAfter&amp;quot;: 3,&lt;br /&gt;
			&amp;quot;showPagesBefore&amp;quot;: 3&lt;br /&gt;
		},&lt;br /&gt;
		&lt;br /&gt;
		// records types    &lt;br /&gt;
		&amp;quot;elementId5&amp;quot;:{&lt;br /&gt;
			&amp;quot;elementType&amp;quot;: &amp;quot;requiredDataLinkStepObject&amp;quot;, // in record&lt;br /&gt;
			&amp;quot;requiredDataLinkStepObjectId&amp;quot;: &amp;quot;link1&amp;quot;,&lt;br /&gt;
		},&lt;br /&gt;
		&amp;quot;elementIdxx&amp;quot;:{&lt;br /&gt;
			&amp;quot;elementType&amp;quot;: &amp;quot;bulkActionCheckBox&amp;quot;,&lt;br /&gt;
			&amp;quot;bulkActionUserTag&amp;quot;: &amp;quot;tagA&amp;quot;,&lt;br /&gt;
		},&lt;br /&gt;
	},&lt;br /&gt;
	&lt;br /&gt;
	values: {&lt;br /&gt;
		// values are shared between requestProperties and filter values. This set can be iterated to overwrite values using userTag to identify&lt;br /&gt;
		userTag_1:{&lt;br /&gt;
			defaultValue: &amp;quot;xx&amp;quot;,&lt;br /&gt;
		},&lt;br /&gt;
		userTag_2:{&lt;br /&gt;
			defaultValue: &amp;quot;xx&amp;quot;,&lt;br /&gt;
		},&lt;br /&gt;
		userTag_3:{&lt;br /&gt;
			defaultValue: &amp;quot;xx&amp;quot;,&lt;br /&gt;
		},&lt;br /&gt;
		userTag_4:{&lt;br /&gt;
			defaultValue: &amp;quot;xx&amp;quot;,&lt;br /&gt;
		},&lt;br /&gt;
		userTag_5:{&lt;br /&gt;
			defaultValue: &amp;quot;xx&amp;quot;,&lt;br /&gt;
		},&lt;br /&gt;
		userTag_6:{&lt;br /&gt;
			valueSource: &amp;quot;complexFilterCombination&amp;quot;,&lt;br /&gt;
            complexFilterCombinationId: &amp;quot;hash_complexFilterCombinationA&amp;quot;,&lt;br /&gt;
		},&lt;br /&gt;
		userTag_7:{&lt;br /&gt;
			valueSource: &amp;quot;perParentCombination&amp;quot;,&lt;br /&gt;
            perParentCombinationId: &amp;quot;hash_perParentCombinationA&amp;quot;,&lt;br /&gt;
		},&lt;br /&gt;
        userTag_8: {&lt;br /&gt;
            valueSource: 'perParentIdentifier',&lt;br /&gt;
            perParentIdentifierFieldname: 'sellOfferId'&lt;br /&gt;
        },,&lt;br /&gt;
		userTag_9:{&lt;br /&gt;
			defaultValue: &amp;quot;xx&amp;quot;,&lt;br /&gt;
		},&lt;br /&gt;
		userTag_10:{&lt;br /&gt;
			defaultValue: &amp;quot;xx&amp;quot;,&lt;br /&gt;
		},&lt;br /&gt;
		userTag_11:{&lt;br /&gt;
			defaultValue: &amp;quot;xx&amp;quot;,&lt;br /&gt;
		},&lt;br /&gt;
	},&lt;br /&gt;
&lt;br /&gt;
	bulkActionUserTags: {&lt;br /&gt;
		tagA:{&lt;br /&gt;
			bulkActions: [&lt;br /&gt;
                &amp;quot;elementId11&amp;quot;,&lt;br /&gt;
                // ...&lt;br /&gt;
            ],&lt;br /&gt;
            bulkActionCheckBoxes: [&lt;br /&gt;
                &amp;quot;elementIdxx&amp;quot;,&lt;br /&gt;
                // ...&lt;br /&gt;
            ],&lt;br /&gt;
		},&lt;br /&gt;
        // ...&lt;br /&gt;
	},&lt;br /&gt;
&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= Example params sent to backend =&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;JavaScript&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
let paramFromTableOutput = {&lt;br /&gt;
	objType: { //* main objType&lt;br /&gt;
		serviceTag: &amp;quot;ProductManager&amp;quot;,&lt;br /&gt;
		objectType: &amp;quot;Product&amp;quot;&lt;br /&gt;
	},&lt;br /&gt;
    initialLogicalElementId: &amp;quot;uuid_logical_1&amp;quot;,&lt;br /&gt;
    logicalElements: {&lt;br /&gt;
       uuid_logical_1: {&lt;br /&gt;
         logicalElementType: &amp;quot;logical&amp;quot;,&lt;br /&gt;
         previousLogicalElementId: null,&lt;br /&gt;
         nextLogicalElementId: null,&lt;br /&gt;
&lt;br /&gt;
         objType: {&lt;br /&gt;
           serviceTag: &amp;quot;ProductManager&amp;quot;,&lt;br /&gt;
           objectType: &amp;quot;product&amp;quot;&lt;br /&gt;
         },&lt;br /&gt;
          partitionKeyValueUserTags: {&lt;br /&gt;
            productId: &amp;quot;userTag_1&amp;quot;,&lt;br /&gt;
          },&lt;br /&gt;
          // sortKeyValueUserTags: {&lt;br /&gt;
          //    productId: &amp;quot;valueB&amp;quot;,&lt;br /&gt;
          // },&lt;br /&gt;
          // comparison: &amp;quot;equals&amp;quot;,&lt;br /&gt;
          // conditionalFieldValues: [&lt;br /&gt;
          //  {&lt;br /&gt;
          //    fieldname: &amp;quot;language&amp;quot;,&lt;br /&gt;
          //   includeValueUserTags: [&amp;quot;th&amp;quot;],&lt;br /&gt;
          //    // excludeValueUserTags: [&amp;quot;xx&amp;quot;,&amp;quot;sdd&amp;quot;]&lt;br /&gt;
          //  }&lt;br /&gt;
          // ]&lt;br /&gt;
       },&lt;br /&gt;
       &lt;br /&gt;
       // ex. traversal type&lt;br /&gt;
       // uuid_traversal: {&lt;br /&gt;
       //   logicalElementType: &amp;quot;traversal&amp;quot;,&lt;br /&gt;
       //   previousLogicalElementId: null,&lt;br /&gt;
       //   nextLogicalElementId: null,&lt;br /&gt;
&lt;br /&gt;
       //   objType: {&lt;br /&gt;
       //     objectType: &amp;quot;locationNode&amp;quot;,&lt;br /&gt;
       //     serviceTag: &amp;quot;Locations&amp;quot;,&lt;br /&gt;
       //   },&lt;br /&gt;
       //   traversalSteps: [&lt;br /&gt;
       //     &amp;quot;uuid_traversal_1&amp;quot;,&lt;br /&gt;
       //     &amp;quot;uuid_traversal_2&amp;quot;,&lt;br /&gt;
       //   ]&lt;br /&gt;
       // }&lt;br /&gt;
    },&lt;br /&gt;
    traversalSteps: {&lt;br /&gt;
       uuid_traversal_1: {&lt;br /&gt;
		objType: {&lt;br /&gt;
			serviceTag: &amp;quot;Locations&amp;quot;,&lt;br /&gt;
			objectType: &amp;quot;localtionLink&amp;quot;&lt;br /&gt;
		},&lt;br /&gt;
		link: {&lt;br /&gt;
			relType: {&lt;br /&gt;
			  serviceTag: &amp;quot;Locations&amp;quot;,&lt;br /&gt;
			  relationshipTag: &amp;quot;hasLocationLink&amp;quot;&lt;br /&gt;
			},&lt;br /&gt;
			relationshipDirection: &amp;quot;to&amp;quot;&lt;br /&gt;
		},&lt;br /&gt;
		hopsPassObjType: true, //optional&lt;br /&gt;
		hopsEnd: 10, //optional  &lt;br /&gt;
       },&lt;br /&gt;
       uuid_traversal_2: {&lt;br /&gt;
        objType: {&lt;br /&gt;
			serviceTag: &amp;quot;Locations&amp;quot;,&lt;br /&gt;
			objectType: &amp;quot;locationNode&amp;quot;&lt;br /&gt;
		},&lt;br /&gt;
		link: {&lt;br /&gt;
			relType: {&lt;br /&gt;
			  serviceTag: &amp;quot;Locations&amp;quot;,&lt;br /&gt;
			  relationshipTag: &amp;quot;isLocationNode&amp;quot;&lt;br /&gt;
			},&lt;br /&gt;
			relationshipDirection: &amp;quot;to&amp;quot;&lt;br /&gt;
		},&lt;br /&gt;
		//* last traversal cannot set hopPassObjType&lt;br /&gt;
		hopsEnd: 10, //optional  &lt;br /&gt;
        fieldValueUserTags: [&lt;br /&gt;
        {&lt;br /&gt;
          categoryId: &amp;quot;valueD&amp;quot;&lt;br /&gt;
        },&lt;br /&gt;
        {&lt;br /&gt;
          categoryId: &amp;quot;valueA&amp;quot;&lt;br /&gt;
        },&lt;br /&gt;
        {&lt;br /&gt;
          price: &amp;quot;valueF&amp;quot;&lt;br /&gt;
        },&lt;br /&gt;
        {&lt;br /&gt;
          categoryId: &amp;quot;valueA&amp;quot;&lt;br /&gt;
        },&lt;br /&gt;
        {&lt;br /&gt;
          categoryId: &amp;quot;valueB&amp;quot;&lt;br /&gt;
        },&lt;br /&gt;
      ]&lt;br /&gt;
       }&lt;br /&gt;
    },&lt;br /&gt;
	requiredDataFields: [ //* linkStepObjects to create main sort result's requiredData and sortFields&lt;br /&gt;
        // not needed at tableConfig level because can be built from table's elements and sortFields before sending to lib that converts to backend structure&lt;br /&gt;
        &amp;quot;userTag_LinkStepObjectA&amp;quot;, // no link, field in main objType (structure same linkPath but only one step)&lt;br /&gt;
        &amp;quot;userTag_LinkStepObjectB&amp;quot;, // has link&lt;br /&gt;
	],&lt;br /&gt;
	complexFilterCombinations:{&lt;br /&gt;
		hash_complexFilterCombinationA: {&lt;br /&gt;
          objType: {&lt;br /&gt;
            serviceTag: &amp;quot;Locations&amp;quot;,&lt;br /&gt;
            objectType: &amp;quot;locationNode&amp;quot;&lt;br /&gt;
          },&lt;br /&gt;
          initialLogicalElementId: &amp;quot;child_complexFilter_localtionNode&amp;quot;,&lt;br /&gt;
          logicalElements: {&lt;br /&gt;
            child_complexFilter_localtionNode: {&lt;br /&gt;
              logicalElementType: &amp;quot;childComplexFilter&amp;quot;,&lt;br /&gt;
              previousLogicalElementId: null,&lt;br /&gt;
              nextLogicalElementId: null,&lt;br /&gt;
&lt;br /&gt;
              childLogicalElementId: &amp;quot;logical_locationNode&amp;quot;,&lt;br /&gt;
              objType: {&lt;br /&gt;
                serviceTag: &amp;quot;Locations&amp;quot;,&lt;br /&gt;
                objectType: &amp;quot;locationNode&amp;quot;&lt;br /&gt;
              },&lt;br /&gt;
              pathLinkType: {&lt;br /&gt;
                objType: {&lt;br /&gt;
                  serviceTag: &amp;quot;Locations&amp;quot;,&lt;br /&gt;
                  objectType: &amp;quot;locationNode&amp;quot;&lt;br /&gt;
                },&lt;br /&gt;
                relType: {&lt;br /&gt;
                  serviceTag: &amp;quot;Locations&amp;quot;,&lt;br /&gt;
                  relationshipTag: &amp;quot;hasParentLocationNode&amp;quot;&lt;br /&gt;
                },&lt;br /&gt;
                direction: &amp;quot;to&amp;quot;&lt;br /&gt;
              },&lt;br /&gt;
            },&lt;br /&gt;
            logical_locationNode: {&lt;br /&gt;
               logicalElementType: &amp;quot;logical&amp;quot;,&lt;br /&gt;
               previousLogicalElementId: &amp;quot;child_complexFilter_localtionNode&amp;quot;,&lt;br /&gt;
               nextLogicalElementId: null,&lt;br /&gt;
&lt;br /&gt;
               objType: {&lt;br /&gt;
                serviceTag: &amp;quot;Locations&amp;quot;,&lt;br /&gt;
                objectType: &amp;quot;locationNode&amp;quot;&lt;br /&gt;
               },&lt;br /&gt;
                partitionKeyValueUserTags: {&lt;br /&gt;
                   locationNodeId: &amp;quot;userTag_7&amp;quot;,&lt;br /&gt;
                },&lt;br /&gt;
                // sortKeyValueUserTags: {&lt;br /&gt;
                //    productId: &amp;quot;valueB&amp;quot;,&lt;br /&gt;
                // },&lt;br /&gt;
                // comparison: &amp;quot;equals&amp;quot;,&lt;br /&gt;
                // conditionalFieldValues: [&lt;br /&gt;
                //  {&lt;br /&gt;
                //    fieldname: &amp;quot;language&amp;quot;,&lt;br /&gt;
                //   includeValueUserTags: [&amp;quot;th&amp;quot;],&lt;br /&gt;
                //    // excludeValueUserTags: [&amp;quot;xx&amp;quot;,&amp;quot;sdd&amp;quot;]&lt;br /&gt;
                //  }&lt;br /&gt;
                // ]&lt;br /&gt;
            }&lt;br /&gt;
         }&lt;br /&gt;
       },&lt;br /&gt;
	},&lt;br /&gt;
	perParentCombinations:{&lt;br /&gt;
		hash_perParentCombinationA: {&lt;br /&gt;
          objType: {&lt;br /&gt;
            serviceTag: &amp;quot;SellOfferPlan&amp;quot;,&lt;br /&gt;
            objectType: &amp;quot;sellOfferPlan&amp;quot;&lt;br /&gt;
          },&lt;br /&gt;
          initialLogicalElementId: &amp;quot;child_complexFilter_1&amp;quot;,&lt;br /&gt;
          logicalElements: {&lt;br /&gt;
            child_complexFilter_1: {&lt;br /&gt;
              logicalElementType: &amp;quot;childComplexFilter&amp;quot;,&lt;br /&gt;
              previousLogicalElementId: null,&lt;br /&gt;
              nextLogicalElementId: null,&lt;br /&gt;
&lt;br /&gt;
              childLogicalElementId: &amp;quot;logical_sellOffer&amp;quot;,&lt;br /&gt;
              objType: {&lt;br /&gt;
                serviceTag: &amp;quot;SellOfferPlan&amp;quot;,&lt;br /&gt;
                objectType: &amp;quot;sellOfferPlan&amp;quot;&lt;br /&gt;
              },&lt;br /&gt;
              pathLinkType: {&lt;br /&gt;
                objType: {&lt;br /&gt;
                  serviceTag: &amp;quot;SellOfferManager&amp;quot;,&lt;br /&gt;
                  objectType: &amp;quot;sellOffer&amp;quot;&lt;br /&gt;
                }, &lt;br /&gt;
                relType: {&lt;br /&gt;
                  serviceTag: &amp;quot;SellOfferManager&amp;quot;,&lt;br /&gt;
                  relationshipTag: &amp;quot;usesSellOfferPlan&amp;quot;&lt;br /&gt;
                },&lt;br /&gt;
                direction: &amp;quot;to&amp;quot;&lt;br /&gt;
              },&lt;br /&gt;
              requestProperties: {&lt;br /&gt;
                tag_orderQuantity: &amp;quot;userTag_9&amp;quot;&lt;br /&gt;
              }&lt;br /&gt;
           },&lt;br /&gt;
           logical_sellOffer: {&lt;br /&gt;
              logicalElementType: &amp;quot;logical&amp;quot;,&lt;br /&gt;
              previousLogicalElementId: &amp;quot;child_complexFilter_1&amp;quot;,&lt;br /&gt;
              nextLogicalElementId: null,&lt;br /&gt;
&lt;br /&gt;
              objType: {&lt;br /&gt;
                serviceTag: &amp;quot;SellOfferManager&amp;quot;,&lt;br /&gt;
                objectType: &amp;quot;sellOffer&amp;quot;&lt;br /&gt;
              },&lt;br /&gt;
               partitionKeyValueUserTags: {&lt;br /&gt;
                   sellOfferId: &amp;quot;userTag_8&amp;quot;,&lt;br /&gt;
               },&lt;br /&gt;
               // sortKeyValueUserTags: {&lt;br /&gt;
               //    productId: &amp;quot;valueB&amp;quot;,&lt;br /&gt;
               // },&lt;br /&gt;
               // comparison: &amp;quot;equals&amp;quot;,&lt;br /&gt;
               // conditionalFieldValues: [&lt;br /&gt;
               //  {&lt;br /&gt;
               //    fieldname: &amp;quot;language&amp;quot;,&lt;br /&gt;
               //   includeValueUserTags: [&amp;quot;th&amp;quot;],&lt;br /&gt;
               //    // excludeValueUserTags: [&amp;quot;xx&amp;quot;,&amp;quot;sdd&amp;quot;]&lt;br /&gt;
               //  }&lt;br /&gt;
               // ]&lt;br /&gt;
           }&lt;br /&gt;
        }&lt;br /&gt;
      },&lt;br /&gt;
	},&lt;br /&gt;
	requiredDataLinkStepObjects: {&lt;br /&gt;
		userTag_LinkStepObjectA: { //* requiredData no linkPath&lt;br /&gt;
			initialObjType: { //* main objType&lt;br /&gt;
				serviceTag: &amp;quot;ProductManager&amp;quot;,&lt;br /&gt;
				objectType: &amp;quot;Product&amp;quot;&lt;br /&gt;
			},&lt;br /&gt;
			linkSteps: [&amp;quot;hash_linkStepA_1&amp;quot;],&lt;br /&gt;
		},&lt;br /&gt;
        userTag_LinkStepObjectB: { // requiredDataFields for finding max orderTotal&lt;br /&gt;
            initialObjType: { //* main objType&lt;br /&gt;
				serviceTag: &amp;quot;ProductManager&amp;quot;,&lt;br /&gt;
				objectType: &amp;quot;Product&amp;quot;&lt;br /&gt;
			},&lt;br /&gt;
			linkSteps: [&amp;quot;hash_linkStepB_1&amp;quot;, &amp;quot;hash_linkStepB_2&amp;quot;, &amp;quot;hash_linkStepB_3&amp;quot;],&lt;br /&gt;
        }&lt;br /&gt;
        // userTag_LinkStepObjectC&lt;br /&gt;
        // userTag_LinkStepObjectD&lt;br /&gt;
	},&lt;br /&gt;
	requiredDataLinkSteps: {&lt;br /&gt;
		hash_linkStepA_1:{&lt;br /&gt;
          fieldName: &amp;quot;xxx&amp;quot; &lt;br /&gt;
        },&lt;br /&gt;
        hash_linkStepB_1:{&lt;br /&gt;
          pathLinkType: {&lt;br /&gt;
             objType: {&lt;br /&gt;
               serviceTag: &amp;quot;SellOfferManager&amp;quot;,&lt;br /&gt;
               objectType: &amp;quot;SellOffer&amp;quot;&lt;br /&gt;
             },&lt;br /&gt;
             relType: {&lt;br /&gt;
               serviceTag: &amp;quot;ProductManager&amp;quot;,&lt;br /&gt;
               relationshipTag: &amp;quot;hasSellOffer&amp;quot;&lt;br /&gt;
             },&lt;br /&gt;
             direction: &amp;quot;to&amp;quot;,&lt;br /&gt;
          },&lt;br /&gt;
           addFilterMain: true, //default: false =&amp;gt; need to add filterMain set = true&lt;br /&gt;
           filterElements: { //* filter in linkPath&lt;br /&gt;
             objType: {&lt;br /&gt;
               serviceTag: &amp;quot;SellOfferManager&amp;quot;,&lt;br /&gt;
               objectType: &amp;quot;SellOffer&amp;quot;&lt;br /&gt;
             },&lt;br /&gt;
             initialLogicalElementId: &amp;quot;logical_sellOffer_in_link&amp;quot;,&lt;br /&gt;
             logicalElements: {&lt;br /&gt;
               logical_sellOffer_in_link: {&lt;br /&gt;
                  logicalElementType: &amp;quot;logical&amp;quot;,&lt;br /&gt;
                  previousLogicalElementId: null,&lt;br /&gt;
                  nextLogicalElementId: null,&lt;br /&gt;
&lt;br /&gt;
                  objType: {&lt;br /&gt;
                    serviceTag: &amp;quot;SellOfferManager&amp;quot;,&lt;br /&gt;
                    objectType: &amp;quot;SellOffer&amp;quot;&lt;br /&gt;
                  },&lt;br /&gt;
                  partitionKeyValueUserTags: {&lt;br /&gt;
                     sellOfferId: &amp;quot;userTag_8&amp;quot;,&lt;br /&gt;
                  },&lt;br /&gt;
                  // sortKeyValueUserTags: {&lt;br /&gt;
                  //    productId: &amp;quot;valueB&amp;quot;,&lt;br /&gt;
                  // },&lt;br /&gt;
                  // comparison: &amp;quot;equals&amp;quot;,&lt;br /&gt;
                  conditionalFieldValues: [&lt;br /&gt;
                    {&lt;br /&gt;
                      fieldname: &amp;quot;userId&amp;quot;,&lt;br /&gt;
                      includeValueUserTags: [&amp;quot;userTag_2&amp;quot;], // &lt;br /&gt;
                      // excludeValueUserTags: [&amp;quot;xx&amp;quot;,&amp;quot;sdd&amp;quot;]&lt;br /&gt;
                    }&lt;br /&gt;
                   ]&lt;br /&gt;
               }&lt;br /&gt;
            }&lt;br /&gt;
          },&lt;br /&gt;
&lt;br /&gt;
        }, &lt;br /&gt;
        hash_linkStepB_2: {&lt;br /&gt;
           pathLinkType: {&lt;br /&gt;
             objType: {&lt;br /&gt;
               serviceTag: &amp;quot;OrderPrice&amp;quot;,&lt;br /&gt;
               objectType: &amp;quot;OrderPrice&amp;quot;&lt;br /&gt;
             },&lt;br /&gt;
             relType: {&lt;br /&gt;
               serviceTag: &amp;quot;sellOfferStandard&amp;quot;,&lt;br /&gt;
               relationshipTag: &amp;quot;hasOrderPrice&amp;quot;&lt;br /&gt;
             },&lt;br /&gt;
             direction: &amp;quot;to&amp;quot;,&lt;br /&gt;
           },&lt;br /&gt;
          requestProperties: {&lt;br /&gt;
            tag_deliverTo: &amp;quot;userTag_3&amp;quot;,&lt;br /&gt;
            tag_sellOfferPlan: &amp;quot;userTag_4&amp;quot;,&lt;br /&gt;
            // tag_sellOfferPlanDeliveryMethodLink: &amp;quot;userTag_5&amp;quot;,&lt;br /&gt;
            // tag_sellOfferPlanUserPaymentMethodLink: &amp;quot;userTag_6&amp;quot;&lt;br /&gt;
          }&lt;br /&gt;
          aggregate: &amp;quot;max&amp;quot;,&lt;br /&gt;
          sortFields: [&lt;br /&gt;
       			{&lt;br /&gt;
            		requiredDataLinkStepObjectId: &amp;quot;userTag_LinkStepObjectC&amp;quot;,&lt;br /&gt;
		            dataType: &amp;quot;number&amp;quot;,&lt;br /&gt;
                    sortOrder: &amp;quot;ascending&amp;quot;|&amp;quot;descending&amp;quot;&lt;br /&gt;
        		},&lt;br /&gt;
				{&lt;br /&gt;
        		     requiredDataLinkStepObjectId: &amp;quot;userTag_LinkStepObjectD&amp;quot;,&lt;br /&gt;
		             dataType: &amp;quot;string&amp;quot;,&lt;br /&gt;
                     sortOrder: &amp;quot;ascending&amp;quot;|&amp;quot;descending&amp;quot;&lt;br /&gt;
		         },&lt;br /&gt;
                {&lt;br /&gt;
        		     requiredDataLinkStepObjectId: &amp;quot;userTag_LinkStepObjectD&amp;quot;,&lt;br /&gt;
		             dataType: &amp;quot;array&amp;quot;,&lt;br /&gt;
                     sortByValueUserTags:[&amp;quot;userTag_1&amp;quot;,&amp;quot;userTag_2&amp;quot;],&lt;br /&gt;
                     sortOrder: &amp;quot;ascending&amp;quot;|&amp;quot;descending&amp;quot;&lt;br /&gt;
		        }&lt;br /&gt;
            ],&lt;br /&gt;
          comparison: &amp;quot;greaterThan&amp;quot;,&lt;br /&gt;
          comparisonSortField: &amp;quot;upToValue&amp;quot;,&lt;br /&gt;
          comparisonSortDataType: &amp;quot;string&amp;quot;,&lt;br /&gt;
          comparisonValue: &amp;quot;userTag_2&amp;quot;,&lt;br /&gt;
        }, &lt;br /&gt;
        hash_linkStepB_3: {&lt;br /&gt;
           fieldName: &amp;quot;zzz&amp;quot;,&lt;br /&gt;
        }&lt;br /&gt;
	},&lt;br /&gt;
	sortFields: [&lt;br /&gt;
        {&lt;br /&gt;
             requiredDataLinkStepObjectId: &amp;quot;userTag_LinkStepObjectB&amp;quot;,&lt;br /&gt;
             dataType: &amp;quot;number&amp;quot;,&lt;br /&gt;
             sortOrder: &amp;quot;ascending&amp;quot;|&amp;quot;descending&amp;quot;&lt;br /&gt;
        },&lt;br /&gt;
		{&lt;br /&gt;
             requiredDataLinkStepObjectId: &amp;quot;userTag_LinkStepObjectA&amp;quot;,&lt;br /&gt;
             dataType: &amp;quot;string&amp;quot;,&lt;br /&gt;
             sortOrder: &amp;quot;ascending&amp;quot;|&amp;quot;descending&amp;quot;&lt;br /&gt;
         },&lt;br /&gt;
        {&lt;br /&gt;
             requiredDataLinkStepObjectId: &amp;quot;userTag_LinkStepObjectD&amp;quot;,&lt;br /&gt;
		     dataType: &amp;quot;array&amp;quot;,&lt;br /&gt;
             sortByValueUserTags:[&amp;quot;userTag_1&amp;quot;,&amp;quot;userTag_2&amp;quot;],&lt;br /&gt;
             sortOrder: &amp;quot;ascending&amp;quot;|&amp;quot;descending&amp;quot;&lt;br /&gt;
		}&lt;br /&gt;
    ],&lt;br /&gt;
	valueUserTags: {&lt;br /&gt;
		userTag_1:{&lt;br /&gt;
			value: &amp;quot;xx&amp;quot;,&lt;br /&gt;
		},&lt;br /&gt;
		userTag_2:{&lt;br /&gt;
			value: &amp;quot;yy&amp;quot;,&lt;br /&gt;
		},&lt;br /&gt;
		userTag_3:{&lt;br /&gt;
			valueSource: &amp;quot;complexFilterCombination&amp;quot;,&lt;br /&gt;
            complexFilterCombinationId: &amp;quot;hash_complexFilterCombinationA&amp;quot;,&lt;br /&gt;
		},&lt;br /&gt;
		userTag_4:{&lt;br /&gt;
			valueSource: &amp;quot;perParentCombination&amp;quot;,&lt;br /&gt;
            perParentCombinationId: &amp;quot;hash_perParentCombinationA&amp;quot;,&lt;br /&gt;
		},&lt;br /&gt;
		userTag_7: {&lt;br /&gt;
          value: &amp;quot;zz&amp;quot;,&lt;br /&gt;
        },&lt;br /&gt;
        userTag_8: {&lt;br /&gt;
          valueSource: 'perParentIdentifier',&lt;br /&gt;
          perParentIdentifierFieldname: 'sellOfferId'&lt;br /&gt;
        },&lt;br /&gt;
        userTag_9: {&lt;br /&gt;
          value: 2,&lt;br /&gt;
        },&lt;br /&gt;
	 }&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[Category:Working documents| 2025-04-14]]&lt;br /&gt;
[[Category:Working documents - Search Results| 2025-04-14]]&lt;/div&gt;</summary>
		<author><name>Rut</name></author>
	</entry>
	<entry>
		<id>https://izara.io/wiki/index.php?title=2025-04-14_-_Frontend_LinkPath_structure_for_tableOutput&amp;diff=4086</id>
		<title>2025-04-14 - Frontend LinkPath structure for tableOutput</title>
		<link rel="alternate" type="text/html" href="https://izara.io/wiki/index.php?title=2025-04-14_-_Frontend_LinkPath_structure_for_tableOutput&amp;diff=4086"/>
		<updated>2026-02-10T09:38:15Z</updated>

		<summary type="html">&lt;p&gt;Rut: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Service - Search Results]]&lt;br /&gt;
&lt;br /&gt;
= Overview =&lt;br /&gt;
&lt;br /&gt;
Structure frontend TableConfig and Output prepare for shared library that creates complexFilter and requestProperties&lt;br /&gt;
&lt;br /&gt;
= Example params in tableConfig =&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;JavaScript&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
let paramFromTableOutput = {&lt;br /&gt;
&lt;br /&gt;
	// .. other properties same as params sent to backend&lt;br /&gt;
	// requiredDataFields not needed in tableConfig as referenced in elements and sortFields&lt;br /&gt;
	// header/footer filterDataField elements reference valueUserTag&lt;br /&gt;
&lt;br /&gt;
	&amp;quot;elements&amp;quot;: {&lt;br /&gt;
		// shared types&lt;br /&gt;
		&amp;quot;elementId12&amp;quot;:{&lt;br /&gt;
			&amp;quot;elementType&amp;quot;: &amp;quot;freetext&amp;quot;,&lt;br /&gt;
			&amp;quot;value&amp;quot;: &amp;quot;aa&amp;quot;&lt;br /&gt;
		}&lt;br /&gt;
&lt;br /&gt;
		// headerFooter types&lt;br /&gt;
		&amp;quot;elementId1&amp;quot;:{&lt;br /&gt;
			&amp;quot;elementType&amp;quot;: &amp;quot;valueUserTag&amp;quot;,&lt;br /&gt;
			&amp;quot;valueUserTag&amp;quot;: &amp;quot;userTag_9&amp;quot;,&lt;br /&gt;
			&amp;quot;inputType&amp;quot;: &amp;quot;text&amp;quot; // || &amp;quot;select&amp;quot; || &amp;quot;checkbox&amp;quot; || &amp;quot;radio&amp;quot; ,&lt;br /&gt;
		},&lt;br /&gt;
		&amp;quot;elementId2&amp;quot;:{&lt;br /&gt;
			&amp;quot;elementType&amp;quot;: &amp;quot;valueUserTag&amp;quot;,&lt;br /&gt;
			&amp;quot;inputType&amp;quot;: &amp;quot;select&amp;quot;,&lt;br /&gt;
			&amp;quot;options&amp;quot;: [&lt;br /&gt;
	         {&lt;br /&gt;
               optionText:&amp;quot;option1&amp;quot;,&lt;br /&gt;
               valueUserTag:{ &lt;br /&gt;
                 userTag_1:&amp;quot;valueA&amp;quot;, //value not ref valueUserTag&lt;br /&gt;
                 userTag_2:&amp;quot;valueB&amp;quot; &lt;br /&gt;
              },&lt;br /&gt;
	         {&lt;br /&gt;
               optionText:&amp;quot;option2&amp;quot;,&lt;br /&gt;
               valueUserTag:{ &lt;br /&gt;
                 userTag_9:&amp;quot;valueC&amp;quot; &lt;br /&gt;
&lt;br /&gt;
              },&lt;br /&gt;
			],&lt;br /&gt;
		},&lt;br /&gt;
        &amp;quot;elementId21&amp;quot;:{&lt;br /&gt;
			&amp;quot;elementType&amp;quot;: &amp;quot;valueUserTag&amp;quot;,&lt;br /&gt;
			&amp;quot;inputType&amp;quot;: &amp;quot;checkbox&amp;quot;,&lt;br /&gt;
			&amp;quot;onSetting:{&lt;br /&gt;
               optionText:&amp;quot;on&amp;quot;,&lt;br /&gt;
               valueUserTag:{ &lt;br /&gt;
                 userTag_1:&amp;quot;valueA&amp;quot;, //value not ref valueUserTag&lt;br /&gt;
                 userTag_2:&amp;quot;valueB&amp;quot; &lt;br /&gt;
&lt;br /&gt;
              },&lt;br /&gt;
             },&lt;br /&gt;
             &amp;quot;offSetting&amp;quot;:{&lt;br /&gt;
               optionText:&amp;quot;off&amp;quot;,&lt;br /&gt;
               valueUserTag:{ &lt;br /&gt;
                 userTag_9:&amp;quot;valueC&amp;quot; &lt;br /&gt;
&lt;br /&gt;
              },&lt;br /&gt;
             },&lt;br /&gt;
		   &lt;br /&gt;
           &lt;br /&gt;
		},&lt;br /&gt;
		&amp;quot;elementId3&amp;quot;:{&lt;br /&gt;
			&amp;quot;elementType&amp;quot;: &amp;quot;sort&amp;quot;,&lt;br /&gt;
			&amp;quot;display&amp;quot;: &amp;quot;downArrow&amp;quot;, // || upArrow&lt;br /&gt;
			&amp;quot;requiredDataLinkStepObjectId&amp;quot;: &amp;quot;userTag_LinkStepObjectC&amp;quot;,&lt;br /&gt;
			&amp;quot;dataType&amp;quot;: &amp;quot;number&amp;quot;, // &amp;quot;number&amp;quot; | &amp;quot;string&amp;quot;&lt;br /&gt;
			&amp;quot;sortOrder&amp;quot;: &amp;quot;ascending&amp;quot; // &amp;quot;ascending&amp;quot;|&amp;quot;descending&amp;quot; (default ascending)&lt;br /&gt;
		},&lt;br /&gt;
		&amp;quot;elementId4&amp;quot;:{&lt;br /&gt;
			&amp;quot;elementType&amp;quot;: &amp;quot;numberOfRows&amp;quot;,&lt;br /&gt;
			&amp;quot;selection&amp;quot;: &amp;quot;input&amp;quot;, // || list&lt;br /&gt;
		},&lt;br /&gt;
		&amp;quot;elementId5&amp;quot;:{&lt;br /&gt;
			&amp;quot;elementType&amp;quot;: &amp;quot;numberOfRows&amp;quot;,&lt;br /&gt;
			&amp;quot;selection&amp;quot;: &amp;quot;list&amp;quot;,&lt;br /&gt;
            &amp;quot;list&amp;quot;:[&amp;quot;1&amp;quot;,&amp;quot;5&amp;quot;,&amp;quot;7&amp;quot;], //not sure&lt;br /&gt;
		},&lt;br /&gt;
		&amp;quot;elementId6&amp;quot;:{&lt;br /&gt;
			&amp;quot;elementType&amp;quot;: &amp;quot;submit&amp;quot;,&lt;br /&gt;
			&amp;quot;display&amp;quot;: &amp;quot;submit&amp;quot;, // any text to be shown&lt;br /&gt;
			&amp;quot;sendRequest&amp;quot;: &amp;quot;all&amp;quot; // numberOfRows || all || filters&lt;br /&gt;
		},&lt;br /&gt;
		&amp;quot;elementId7&amp;quot;:{&lt;br /&gt;
			&amp;quot;elementType&amp;quot;: &amp;quot;reset&amp;quot;,&lt;br /&gt;
			&amp;quot;display&amp;quot;: &amp;quot;reset rows&amp;quot;, // any text to be shown&lt;br /&gt;
			&amp;quot;sendRequest&amp;quot;: &amp;quot;numberOfRows&amp;quot; // numberOfRows || all || filters&lt;br /&gt;
		},&lt;br /&gt;
		&amp;quot;elementId9&amp;quot;:{&lt;br /&gt;
			&amp;quot;elementType&amp;quot;: &amp;quot;totalDatafield&amp;quot;,&lt;br /&gt;
			&amp;quot;requiredDataLinkStepObjectId&amp;quot;: &amp;quot;link1&amp;quot;,&lt;br /&gt;
			&amp;quot;showIfNotAllRowsLoaded&amp;quot;: true // || false&lt;br /&gt;
		},&lt;br /&gt;
		&amp;quot;elementId11&amp;quot;:{&lt;br /&gt;
			// will need to link to per record check box&lt;br /&gt;
			&amp;quot;elementType&amp;quot;: &amp;quot;bulkAction&amp;quot;,&lt;br /&gt;
			&amp;quot;action&amp;quot;: &amp;quot;on&amp;quot; // on | off | switch&lt;br /&gt;
			&amp;quot;bulkActionUserTag&amp;quot;: &amp;quot;tagA&amp;quot;, // have normalized list of bulkActionTags, with list of &amp;quot;bulkAction&amp;quot; and &amp;quot;bulkActionCheckBox&amp;quot; elements linked to it&lt;br /&gt;
		},&lt;br /&gt;
		&amp;quot;elementId8&amp;quot;:{&lt;br /&gt;
			&amp;quot;elementType&amp;quot;: &amp;quot;pageNumbers&amp;quot;,&lt;br /&gt;
			&amp;quot;linksAfter&amp;quot;: [&lt;br /&gt;
				{&lt;br /&gt;
					&amp;quot;action&amp;quot;: &amp;quot;jumpNumberOfPages&amp;quot;,&lt;br /&gt;
					&amp;quot;jumpPages&amp;quot;: 7,&lt;br /&gt;
					&amp;quot;string&amp;quot;: &amp;quot;..&amp;quot;&lt;br /&gt;
				},&lt;br /&gt;
				{&lt;br /&gt;
					&amp;quot;action&amp;quot;: &amp;quot;jumpNumberOfPages&amp;quot;,&lt;br /&gt;
					&amp;quot;jumpPages&amp;quot;: 1,&lt;br /&gt;
					&amp;quot;string&amp;quot;: &amp;quot;&amp;gt;&amp;quot;&lt;br /&gt;
				},&lt;br /&gt;
				{&lt;br /&gt;
					&amp;quot;action&amp;quot;: &amp;quot;goToLastPage&amp;quot;,&lt;br /&gt;
					&amp;quot;hideWhenLastPageShown&amp;quot;: true,&lt;br /&gt;
					&amp;quot;string&amp;quot;: &amp;quot;&amp;gt;&amp;gt;&amp;quot;&lt;br /&gt;
				}&lt;br /&gt;
			],&lt;br /&gt;
			&amp;quot;linksBefore&amp;quot;: [&lt;br /&gt;
				{&lt;br /&gt;
					&amp;quot;action&amp;quot;: &amp;quot;goToFirstPage&amp;quot;,&lt;br /&gt;
					&amp;quot;hideWhenFirstPageShown&amp;quot;: true,&lt;br /&gt;
					&amp;quot;string&amp;quot;: &amp;quot;&amp;lt;&amp;lt;&amp;quot;&lt;br /&gt;
				},&lt;br /&gt;
				{&lt;br /&gt;
					&amp;quot;action&amp;quot;: &amp;quot;jumpNumberOfPages&amp;quot;,&lt;br /&gt;
					&amp;quot;jumpPages&amp;quot;: 1,&lt;br /&gt;
					&amp;quot;string&amp;quot;: &amp;quot;&amp;lt;&amp;quot;&lt;br /&gt;
				},&lt;br /&gt;
				{&lt;br /&gt;
					&amp;quot;action&amp;quot;: &amp;quot;jumpNumberOfPages&amp;quot;,&lt;br /&gt;
					&amp;quot;jumpPages&amp;quot;: 7,&lt;br /&gt;
					&amp;quot;string&amp;quot;: &amp;quot;..&amp;quot;&lt;br /&gt;
				}&lt;br /&gt;
			],&lt;br /&gt;
			&amp;quot;showPagesAfter&amp;quot;: 3,&lt;br /&gt;
			&amp;quot;showPagesBefore&amp;quot;: 3&lt;br /&gt;
		},&lt;br /&gt;
		&lt;br /&gt;
		// records types    &lt;br /&gt;
		&amp;quot;elementId5&amp;quot;:{&lt;br /&gt;
			&amp;quot;elementType&amp;quot;: &amp;quot;requiredDataLinkStepObject&amp;quot;, // in record&lt;br /&gt;
			&amp;quot;requiredDataLinkStepObjectId&amp;quot;: &amp;quot;link1&amp;quot;,&lt;br /&gt;
		},&lt;br /&gt;
		&amp;quot;elementIdxx&amp;quot;:{&lt;br /&gt;
			&amp;quot;elementType&amp;quot;: &amp;quot;bulkActionCheckBox&amp;quot;,&lt;br /&gt;
			&amp;quot;bulkActionUserTag&amp;quot;: &amp;quot;tagA&amp;quot;,&lt;br /&gt;
		},&lt;br /&gt;
	},&lt;br /&gt;
	&lt;br /&gt;
	values: {&lt;br /&gt;
		// values are shared between requestProperties and filter values. This set can be iterated to overwrite values using userTag to identify&lt;br /&gt;
		userTag_1:{&lt;br /&gt;
			defaultValue: &amp;quot;xx&amp;quot;,&lt;br /&gt;
		},&lt;br /&gt;
		userTag_2:{&lt;br /&gt;
			defaultValue: &amp;quot;xx&amp;quot;,&lt;br /&gt;
		},&lt;br /&gt;
		userTag_3:{&lt;br /&gt;
			defaultValue: &amp;quot;xx&amp;quot;,&lt;br /&gt;
		},&lt;br /&gt;
		userTag_4:{&lt;br /&gt;
			defaultValue: &amp;quot;xx&amp;quot;,&lt;br /&gt;
		},&lt;br /&gt;
		userTag_5:{&lt;br /&gt;
			defaultValue: &amp;quot;xx&amp;quot;,&lt;br /&gt;
		},&lt;br /&gt;
		userTag_6:{&lt;br /&gt;
			valueSource: &amp;quot;complexFilterCombination&amp;quot;,&lt;br /&gt;
            complexFilterCombinationId: &amp;quot;hash_complexFilterCombinationA&amp;quot;,&lt;br /&gt;
		},&lt;br /&gt;
		userTag_7:{&lt;br /&gt;
			valueSource: &amp;quot;perParentCombination&amp;quot;,&lt;br /&gt;
            perParentCombinationId: &amp;quot;hash_perParentCombinationA&amp;quot;,&lt;br /&gt;
		},&lt;br /&gt;
        userTag_8: {&lt;br /&gt;
            valueSource: 'perParentIdentifier',&lt;br /&gt;
            perParentIdentifierFieldname: 'sellOfferId'&lt;br /&gt;
        },,&lt;br /&gt;
		userTag_9:{&lt;br /&gt;
			defaultValue: &amp;quot;xx&amp;quot;,&lt;br /&gt;
		},&lt;br /&gt;
		userTag_10:{&lt;br /&gt;
			defaultValue: &amp;quot;xx&amp;quot;,&lt;br /&gt;
		},&lt;br /&gt;
		userTag_11:{&lt;br /&gt;
			defaultValue: &amp;quot;xx&amp;quot;,&lt;br /&gt;
		},&lt;br /&gt;
	},&lt;br /&gt;
&lt;br /&gt;
	bulkActionUserTags: {&lt;br /&gt;
		tagA:{&lt;br /&gt;
			bulkActions: [&lt;br /&gt;
                &amp;quot;elementId11&amp;quot;,&lt;br /&gt;
                // ...&lt;br /&gt;
            ],&lt;br /&gt;
            bulkActionCheckBoxes: [&lt;br /&gt;
                &amp;quot;elementIdxx&amp;quot;,&lt;br /&gt;
                // ...&lt;br /&gt;
            ],&lt;br /&gt;
		},&lt;br /&gt;
        // ...&lt;br /&gt;
	},&lt;br /&gt;
&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= Example params sent to backend =&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;JavaScript&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
let paramFromTableOutput = {&lt;br /&gt;
	objType: { //* main objType&lt;br /&gt;
		serviceTag: &amp;quot;ProductManager&amp;quot;,&lt;br /&gt;
		objectType: &amp;quot;Product&amp;quot;&lt;br /&gt;
	},&lt;br /&gt;
    initialLogicalElementId: &amp;quot;uuid_logical_1&amp;quot;,&lt;br /&gt;
    logicalElements: {&lt;br /&gt;
       uuid_logical_1: {&lt;br /&gt;
         logicalElementType: &amp;quot;logical&amp;quot;,&lt;br /&gt;
         previousLogicalElementId: null,&lt;br /&gt;
         nextLogicalElementId: null,&lt;br /&gt;
&lt;br /&gt;
         objType: {&lt;br /&gt;
           serviceTag: &amp;quot;ProductManager&amp;quot;,&lt;br /&gt;
           objectType: &amp;quot;product&amp;quot;&lt;br /&gt;
         },&lt;br /&gt;
          partitionKeyValueUserTags: {&lt;br /&gt;
            productId: &amp;quot;userTag_1&amp;quot;,&lt;br /&gt;
          },&lt;br /&gt;
          // sortKeyValueUserTags: {&lt;br /&gt;
          //    productId: &amp;quot;valueB&amp;quot;,&lt;br /&gt;
          // },&lt;br /&gt;
          // comparison: &amp;quot;equals&amp;quot;,&lt;br /&gt;
          // conditionalFieldValues: [&lt;br /&gt;
          //  {&lt;br /&gt;
          //    fieldname: &amp;quot;language&amp;quot;,&lt;br /&gt;
          //   includeValueUserTags: [&amp;quot;th&amp;quot;],&lt;br /&gt;
          //    // excludeValueUserTags: [&amp;quot;xx&amp;quot;,&amp;quot;sdd&amp;quot;]&lt;br /&gt;
          //  }&lt;br /&gt;
          // ]&lt;br /&gt;
       },&lt;br /&gt;
       &lt;br /&gt;
       // ex. traversal type&lt;br /&gt;
       // uuid_traversal: {&lt;br /&gt;
       //   logicalElementType: &amp;quot;traversal&amp;quot;,&lt;br /&gt;
       //   previousLogicalElementId: null,&lt;br /&gt;
       //   nextLogicalElementId: null,&lt;br /&gt;
&lt;br /&gt;
       //   objType: {&lt;br /&gt;
       //     objectType: &amp;quot;locationNode&amp;quot;,&lt;br /&gt;
       //     serviceTag: &amp;quot;Locations&amp;quot;,&lt;br /&gt;
       //   },&lt;br /&gt;
       //   traversalSteps: [&lt;br /&gt;
       //     &amp;quot;uuid_traversal_1&amp;quot;,&lt;br /&gt;
       //     &amp;quot;uuid_traversal_2&amp;quot;,&lt;br /&gt;
       //   ]&lt;br /&gt;
       // }&lt;br /&gt;
    },&lt;br /&gt;
    traversalSteps: {&lt;br /&gt;
       uuid_traversal_1: {&lt;br /&gt;
		objType: {&lt;br /&gt;
			serviceTag: &amp;quot;Locations&amp;quot;,&lt;br /&gt;
			objectType: &amp;quot;localtionLink&amp;quot;&lt;br /&gt;
		},&lt;br /&gt;
		link: {&lt;br /&gt;
			relType: {&lt;br /&gt;
			  serviceTag: &amp;quot;Locations&amp;quot;,&lt;br /&gt;
			  relationshipTag: &amp;quot;hasLocationLink&amp;quot;&lt;br /&gt;
			},&lt;br /&gt;
			relationshipDirection: &amp;quot;to&amp;quot;&lt;br /&gt;
		},&lt;br /&gt;
		hopsPassObjType: true, //optional&lt;br /&gt;
		hopsEnd: 10, //optional  &lt;br /&gt;
       },&lt;br /&gt;
       uuid_traversal_2: {&lt;br /&gt;
        objType: {&lt;br /&gt;
			serviceTag: &amp;quot;Locations&amp;quot;,&lt;br /&gt;
			objectType: &amp;quot;locationNode&amp;quot;&lt;br /&gt;
		},&lt;br /&gt;
		link: {&lt;br /&gt;
			relType: {&lt;br /&gt;
			  serviceTag: &amp;quot;Locations&amp;quot;,&lt;br /&gt;
			  relationshipTag: &amp;quot;isLocationNode&amp;quot;&lt;br /&gt;
			},&lt;br /&gt;
			relationshipDirection: &amp;quot;to&amp;quot;&lt;br /&gt;
		},&lt;br /&gt;
		//* last traversal cannot set hopPassObjType&lt;br /&gt;
		hopsEnd: 10, //optional  &lt;br /&gt;
        fieldValueUserTags: [&lt;br /&gt;
        {&lt;br /&gt;
          categoryId: &amp;quot;valueD&amp;quot;&lt;br /&gt;
        },&lt;br /&gt;
        {&lt;br /&gt;
          categoryId: &amp;quot;valueA&amp;quot;&lt;br /&gt;
        },&lt;br /&gt;
        {&lt;br /&gt;
          price: &amp;quot;valueF&amp;quot;&lt;br /&gt;
        },&lt;br /&gt;
        {&lt;br /&gt;
          categoryId: &amp;quot;valueA&amp;quot;&lt;br /&gt;
        },&lt;br /&gt;
        {&lt;br /&gt;
          categoryId: &amp;quot;valueB&amp;quot;&lt;br /&gt;
        },&lt;br /&gt;
      ]&lt;br /&gt;
       }&lt;br /&gt;
    },&lt;br /&gt;
	requiredDataFields: [ //* linkStepObjects to create main sort result's requiredData and sortFields&lt;br /&gt;
        // not needed at tableConfig level because can be built from table's elements and sortFields before sending to lib that converts to backend structure&lt;br /&gt;
        &amp;quot;userTag_LinkStepObjectA&amp;quot;, // no link, field in main objType (structure same linkPath but only one step)&lt;br /&gt;
        &amp;quot;userTag_LinkStepObjectB&amp;quot;, // has link&lt;br /&gt;
	],&lt;br /&gt;
	complexFilterCombinations:{&lt;br /&gt;
		hash_complexFilterCombinationA: {&lt;br /&gt;
          objType: {&lt;br /&gt;
            serviceTag: &amp;quot;Locations&amp;quot;,&lt;br /&gt;
            objectType: &amp;quot;locationNode&amp;quot;&lt;br /&gt;
          },&lt;br /&gt;
          initialLogicalElementId: &amp;quot;child_complexFilter_localtionNode&amp;quot;,&lt;br /&gt;
          logicalElements: {&lt;br /&gt;
            child_complexFilter_localtionNode: {&lt;br /&gt;
              logicalElementType: &amp;quot;childComplexFilter&amp;quot;,&lt;br /&gt;
              previousLogicalElementId: null,&lt;br /&gt;
              nextLogicalElementId: null,&lt;br /&gt;
&lt;br /&gt;
              childLogicalElementId: &amp;quot;logical_locationNode&amp;quot;,&lt;br /&gt;
              objType: {&lt;br /&gt;
                serviceTag: &amp;quot;Locations&amp;quot;,&lt;br /&gt;
                objectType: &amp;quot;locationNode&amp;quot;&lt;br /&gt;
              },&lt;br /&gt;
              pathLinkType: {&lt;br /&gt;
                objType: {&lt;br /&gt;
                  serviceTag: &amp;quot;Locations&amp;quot;,&lt;br /&gt;
                  objectType: &amp;quot;locationNode&amp;quot;&lt;br /&gt;
                },&lt;br /&gt;
                relType: {&lt;br /&gt;
                  serviceTag: &amp;quot;Locations&amp;quot;,&lt;br /&gt;
                  relationshipTag: &amp;quot;hasParentLocationNode&amp;quot;&lt;br /&gt;
                },&lt;br /&gt;
                direction: &amp;quot;to&amp;quot;&lt;br /&gt;
              },&lt;br /&gt;
            },&lt;br /&gt;
            logical_locationNode: {&lt;br /&gt;
               logicalElementType: &amp;quot;logical&amp;quot;,&lt;br /&gt;
               previousLogicalElementId: &amp;quot;child_complexFilter_localtionNode&amp;quot;,&lt;br /&gt;
               nextLogicalElementId: null,&lt;br /&gt;
&lt;br /&gt;
               objType: {&lt;br /&gt;
                serviceTag: &amp;quot;Locations&amp;quot;,&lt;br /&gt;
                objectType: &amp;quot;locationNode&amp;quot;&lt;br /&gt;
               },&lt;br /&gt;
                partitionKeyValueUserTags: {&lt;br /&gt;
                   locationNodeId: &amp;quot;userTag_7&amp;quot;,&lt;br /&gt;
                },&lt;br /&gt;
                // sortKeyValueUserTags: {&lt;br /&gt;
                //    productId: &amp;quot;valueB&amp;quot;,&lt;br /&gt;
                // },&lt;br /&gt;
                // comparison: &amp;quot;equals&amp;quot;,&lt;br /&gt;
                // conditionalFieldValues: [&lt;br /&gt;
                //  {&lt;br /&gt;
                //    fieldname: &amp;quot;language&amp;quot;,&lt;br /&gt;
                //   includeValueUserTags: [&amp;quot;th&amp;quot;],&lt;br /&gt;
                //    // excludeValueUserTags: [&amp;quot;xx&amp;quot;,&amp;quot;sdd&amp;quot;]&lt;br /&gt;
                //  }&lt;br /&gt;
                // ]&lt;br /&gt;
            }&lt;br /&gt;
         }&lt;br /&gt;
       },&lt;br /&gt;
	},&lt;br /&gt;
	perParentCombinations:{&lt;br /&gt;
		hash_perParentCombinationA: {&lt;br /&gt;
          objType: {&lt;br /&gt;
            serviceTag: &amp;quot;SellOfferPlan&amp;quot;,&lt;br /&gt;
            objectType: &amp;quot;sellOfferPlan&amp;quot;&lt;br /&gt;
          },&lt;br /&gt;
          initialLogicalElementId: &amp;quot;child_complexFilter_1&amp;quot;,&lt;br /&gt;
          logicalElements: {&lt;br /&gt;
            child_complexFilter_1: {&lt;br /&gt;
              logicalElementType: &amp;quot;childComplexFilter&amp;quot;,&lt;br /&gt;
              previousLogicalElementId: null,&lt;br /&gt;
              nextLogicalElementId: null,&lt;br /&gt;
&lt;br /&gt;
              childLogicalElementId: &amp;quot;logical_sellOffer&amp;quot;,&lt;br /&gt;
              objType: {&lt;br /&gt;
                serviceTag: &amp;quot;SellOfferPlan&amp;quot;,&lt;br /&gt;
                objectType: &amp;quot;sellOfferPlan&amp;quot;&lt;br /&gt;
              },&lt;br /&gt;
              pathLinkType: {&lt;br /&gt;
                objType: {&lt;br /&gt;
                  serviceTag: &amp;quot;SellOfferManager&amp;quot;,&lt;br /&gt;
                  objectType: &amp;quot;sellOffer&amp;quot;&lt;br /&gt;
                }, &lt;br /&gt;
                relType: {&lt;br /&gt;
                  serviceTag: &amp;quot;SellOfferManager&amp;quot;,&lt;br /&gt;
                  relationshipTag: &amp;quot;usesSellOfferPlan&amp;quot;&lt;br /&gt;
                },&lt;br /&gt;
                direction: &amp;quot;to&amp;quot;&lt;br /&gt;
              },&lt;br /&gt;
              requestProperties: {&lt;br /&gt;
                tag_orderQuantity: &amp;quot;userTag_9&amp;quot;&lt;br /&gt;
              }&lt;br /&gt;
           },&lt;br /&gt;
           logical_sellOffer: {&lt;br /&gt;
              logicalElementType: &amp;quot;logical&amp;quot;,&lt;br /&gt;
              previousLogicalElementId: &amp;quot;child_complexFilter_1&amp;quot;,&lt;br /&gt;
              nextLogicalElementId: null,&lt;br /&gt;
&lt;br /&gt;
              objType: {&lt;br /&gt;
                serviceTag: &amp;quot;SellOfferManager&amp;quot;,&lt;br /&gt;
                objectType: &amp;quot;sellOffer&amp;quot;&lt;br /&gt;
              },&lt;br /&gt;
               partitionKeyValueUserTags: {&lt;br /&gt;
                   sellOfferId: &amp;quot;userTag_8&amp;quot;,&lt;br /&gt;
               },&lt;br /&gt;
               // sortKeyValueUserTags: {&lt;br /&gt;
               //    productId: &amp;quot;valueB&amp;quot;,&lt;br /&gt;
               // },&lt;br /&gt;
               // comparison: &amp;quot;equals&amp;quot;,&lt;br /&gt;
               // conditionalFieldValues: [&lt;br /&gt;
               //  {&lt;br /&gt;
               //    fieldname: &amp;quot;language&amp;quot;,&lt;br /&gt;
               //   includeValueUserTags: [&amp;quot;th&amp;quot;],&lt;br /&gt;
               //    // excludeValueUserTags: [&amp;quot;xx&amp;quot;,&amp;quot;sdd&amp;quot;]&lt;br /&gt;
               //  }&lt;br /&gt;
               // ]&lt;br /&gt;
           }&lt;br /&gt;
        }&lt;br /&gt;
      },&lt;br /&gt;
	},&lt;br /&gt;
	requiredDataLinkStepObjects: {&lt;br /&gt;
		userTag_LinkStepObjectA: { //* requiredData no linkPath&lt;br /&gt;
			initialObjType: { //* main objType&lt;br /&gt;
				serviceTag: &amp;quot;ProductManager&amp;quot;,&lt;br /&gt;
				objectType: &amp;quot;Product&amp;quot;&lt;br /&gt;
			},&lt;br /&gt;
			linkSteps: [&amp;quot;hash_linkStepA_1&amp;quot;],&lt;br /&gt;
		},&lt;br /&gt;
        userTag_LinkStepObjectB: { // requiredDataFields for finding max orderTotal&lt;br /&gt;
            initialObjType: { //* main objType&lt;br /&gt;
				serviceTag: &amp;quot;ProductManager&amp;quot;,&lt;br /&gt;
				objectType: &amp;quot;Product&amp;quot;&lt;br /&gt;
			},&lt;br /&gt;
			linkSteps: [&amp;quot;hash_linkStepB_1&amp;quot;, &amp;quot;hash_linkStepB_2&amp;quot;, &amp;quot;hash_linkStepB_3&amp;quot;],&lt;br /&gt;
        }&lt;br /&gt;
        // userTag_LinkStepObjectC&lt;br /&gt;
        // userTag_LinkStepObjectD&lt;br /&gt;
	},&lt;br /&gt;
	requiredDataLinkSteps: {&lt;br /&gt;
		hash_linkStepA_1:{&lt;br /&gt;
          fieldName: &amp;quot;xxx&amp;quot; &lt;br /&gt;
        },&lt;br /&gt;
        hash_linkStepB_1:{&lt;br /&gt;
          pathLinkType: {&lt;br /&gt;
             objType: {&lt;br /&gt;
               serviceTag: &amp;quot;SellOfferManager&amp;quot;,&lt;br /&gt;
               objectType: &amp;quot;SellOffer&amp;quot;&lt;br /&gt;
             },&lt;br /&gt;
             relType: {&lt;br /&gt;
               serviceTag: &amp;quot;ProductManager&amp;quot;,&lt;br /&gt;
               relationshipTag: &amp;quot;hasSellOffer&amp;quot;&lt;br /&gt;
             },&lt;br /&gt;
             direction: &amp;quot;to&amp;quot;,&lt;br /&gt;
          },&lt;br /&gt;
           addFilterMain: true, //default: false =&amp;gt; need to add filterMain set = true&lt;br /&gt;
           filterElements: { //* filter in linkPath&lt;br /&gt;
             objType: {&lt;br /&gt;
               serviceTag: &amp;quot;SellOfferManager&amp;quot;,&lt;br /&gt;
               objectType: &amp;quot;SellOffer&amp;quot;&lt;br /&gt;
             },&lt;br /&gt;
             initialLogicalElementId: &amp;quot;logical_sellOffer_in_link&amp;quot;,&lt;br /&gt;
             logicalElements: {&lt;br /&gt;
               logical_sellOffer_in_link: {&lt;br /&gt;
                  logicalElementType: &amp;quot;logical&amp;quot;,&lt;br /&gt;
                  previousLogicalElementId: null,&lt;br /&gt;
                  nextLogicalElementId: null,&lt;br /&gt;
&lt;br /&gt;
                  objType: {&lt;br /&gt;
                    serviceTag: &amp;quot;SellOfferManager&amp;quot;,&lt;br /&gt;
                    objectType: &amp;quot;SellOffer&amp;quot;&lt;br /&gt;
                  },&lt;br /&gt;
                  partitionKeyValueUserTags: {&lt;br /&gt;
                     sellOfferId: &amp;quot;userTag_8&amp;quot;,&lt;br /&gt;
                  },&lt;br /&gt;
                  // sortKeyValueUserTags: {&lt;br /&gt;
                  //    productId: &amp;quot;valueB&amp;quot;,&lt;br /&gt;
                  // },&lt;br /&gt;
                  // comparison: &amp;quot;equals&amp;quot;,&lt;br /&gt;
                  conditionalFieldValues: [&lt;br /&gt;
                    {&lt;br /&gt;
                      fieldname: &amp;quot;userId&amp;quot;,&lt;br /&gt;
                      includeValueUserTags: [&amp;quot;userTag_2&amp;quot;], // &lt;br /&gt;
                      // excludeValueUserTags: [&amp;quot;xx&amp;quot;,&amp;quot;sdd&amp;quot;]&lt;br /&gt;
                    }&lt;br /&gt;
                   ]&lt;br /&gt;
               }&lt;br /&gt;
            }&lt;br /&gt;
          },&lt;br /&gt;
&lt;br /&gt;
        }, &lt;br /&gt;
        hash_linkStepB_2: {&lt;br /&gt;
           pathLinkType: {&lt;br /&gt;
             objType: {&lt;br /&gt;
               serviceTag: &amp;quot;OrderPrice&amp;quot;,&lt;br /&gt;
               objectType: &amp;quot;OrderPrice&amp;quot;&lt;br /&gt;
             },&lt;br /&gt;
             relType: {&lt;br /&gt;
               serviceTag: &amp;quot;sellOfferStandard&amp;quot;,&lt;br /&gt;
               relationshipTag: &amp;quot;hasOrderPrice&amp;quot;&lt;br /&gt;
             },&lt;br /&gt;
             direction: &amp;quot;to&amp;quot;,&lt;br /&gt;
           },&lt;br /&gt;
          requestProperties: {&lt;br /&gt;
            tag_deliverTo: &amp;quot;userTag_3&amp;quot;,&lt;br /&gt;
            tag_sellOfferPlan: &amp;quot;userTag_4&amp;quot;,&lt;br /&gt;
            // tag_sellOfferPlanDeliveryMethodLink: &amp;quot;userTag_5&amp;quot;,&lt;br /&gt;
            // tag_sellOfferPlanUserPaymentMethodLink: &amp;quot;userTag_6&amp;quot;&lt;br /&gt;
          }&lt;br /&gt;
          aggregate: &amp;quot;max&amp;quot;,&lt;br /&gt;
          sortFields: [&lt;br /&gt;
       			{&lt;br /&gt;
            		requiredDataLinkStepObjectId: &amp;quot;userTag_LinkStepObjectC&amp;quot;,&lt;br /&gt;
		            dataType: &amp;quot;number&amp;quot;,&lt;br /&gt;
                    sortOrder: &amp;quot;ascending&amp;quot;|&amp;quot;descending&amp;quot;&lt;br /&gt;
        		},&lt;br /&gt;
				{&lt;br /&gt;
        		     requiredDataLinkStepObjectId: &amp;quot;userTag_LinkStepObjectD&amp;quot;,&lt;br /&gt;
		             dataType: &amp;quot;string&amp;quot;,&lt;br /&gt;
                     sortOrder: &amp;quot;ascending&amp;quot;|&amp;quot;descending&amp;quot;&lt;br /&gt;
		         },&lt;br /&gt;
                {&lt;br /&gt;
        		     requiredDataLinkStepObjectId: &amp;quot;userTag_LinkStepObjectD&amp;quot;,&lt;br /&gt;
		             dataType: &amp;quot;array&amp;quot;,&lt;br /&gt;
                     sortByValueUserTags:[&amp;quot;userTag_1&amp;quot;,&amp;quot;userTag_2&amp;quot;],&lt;br /&gt;
                     sortOrder: &amp;quot;ascending&amp;quot;|&amp;quot;descending&amp;quot;&lt;br /&gt;
		        }&lt;br /&gt;
            ],&lt;br /&gt;
          comparison: &amp;quot;greaterThan&amp;quot;,&lt;br /&gt;
          comparisonSortField: &amp;quot;upToValue&amp;quot;,&lt;br /&gt;
          comparisonSortDataType: &amp;quot;string&amp;quot;,&lt;br /&gt;
          comparisonValue: &amp;quot;userTag_2&amp;quot;,&lt;br /&gt;
        }, &lt;br /&gt;
        hash_linkStepB_3: {&lt;br /&gt;
           fieldName: &amp;quot;zzz&amp;quot;,&lt;br /&gt;
        }&lt;br /&gt;
	},&lt;br /&gt;
	sortFields: [&lt;br /&gt;
        {&lt;br /&gt;
             requiredDataLinkStepObjectId: &amp;quot;userTag_LinkStepObjectB&amp;quot;,&lt;br /&gt;
             dataType: &amp;quot;number&amp;quot;,&lt;br /&gt;
             sortOrder: &amp;quot;ascending&amp;quot;|&amp;quot;descending&amp;quot;&lt;br /&gt;
        },&lt;br /&gt;
		{&lt;br /&gt;
             requiredDataLinkStepObjectId: &amp;quot;userTag_LinkStepObjectA&amp;quot;,&lt;br /&gt;
             dataType: &amp;quot;string&amp;quot;,&lt;br /&gt;
             sortOrder: &amp;quot;ascending&amp;quot;|&amp;quot;descending&amp;quot;&lt;br /&gt;
         },&lt;br /&gt;
        {&lt;br /&gt;
             requiredDataLinkStepObjectId: &amp;quot;userTag_LinkStepObjectD&amp;quot;,&lt;br /&gt;
		     dataType: &amp;quot;array&amp;quot;,&lt;br /&gt;
             sortByValueUserTags:[&amp;quot;userTag_1&amp;quot;,&amp;quot;userTag_2&amp;quot;],&lt;br /&gt;
             sortOrder: &amp;quot;ascending&amp;quot;|&amp;quot;descending&amp;quot;&lt;br /&gt;
		}&lt;br /&gt;
    ],&lt;br /&gt;
	valueUserTags: {&lt;br /&gt;
		userTag_1:{&lt;br /&gt;
			value: &amp;quot;xx&amp;quot;,&lt;br /&gt;
		},&lt;br /&gt;
		userTag_2:{&lt;br /&gt;
			value: &amp;quot;yy&amp;quot;,&lt;br /&gt;
		},&lt;br /&gt;
		userTag_3:{&lt;br /&gt;
			valueSource: &amp;quot;complexFilterCombination&amp;quot;,&lt;br /&gt;
            complexFilterCombinationId: &amp;quot;hash_complexFilterCombinationA&amp;quot;,&lt;br /&gt;
		},&lt;br /&gt;
		userTag_4:{&lt;br /&gt;
			valueSource: &amp;quot;perParentCombination&amp;quot;,&lt;br /&gt;
            perParentCombinationId: &amp;quot;hash_perParentCombinationA&amp;quot;,&lt;br /&gt;
		},&lt;br /&gt;
		userTag_7: {&lt;br /&gt;
          value: &amp;quot;zz&amp;quot;,&lt;br /&gt;
        },&lt;br /&gt;
        userTag_8: {&lt;br /&gt;
          valueSource: 'perParentIdentifier',&lt;br /&gt;
          perParentIdentifierFieldname: 'sellOfferId'&lt;br /&gt;
        },&lt;br /&gt;
        userTag_9: {&lt;br /&gt;
          value: 2,&lt;br /&gt;
        },&lt;br /&gt;
	 }&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[Category:Working documents| 2025-04-14]]&lt;br /&gt;
[[Category:Working documents - Search Results| 2025-04-14]]&lt;/div&gt;</summary>
		<author><name>Rut</name></author>
	</entry>
	<entry>
		<id>https://izara.io/wiki/index.php?title=2025-04-14_-_Frontend_LinkPath_structure_for_tableOutput&amp;diff=4085</id>
		<title>2025-04-14 - Frontend LinkPath structure for tableOutput</title>
		<link rel="alternate" type="text/html" href="https://izara.io/wiki/index.php?title=2025-04-14_-_Frontend_LinkPath_structure_for_tableOutput&amp;diff=4085"/>
		<updated>2026-02-10T09:38:00Z</updated>

		<summary type="html">&lt;p&gt;Rut: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Service - Search Results]]&lt;br /&gt;
&lt;br /&gt;
= Overview =&lt;br /&gt;
&lt;br /&gt;
Structure frontend TableConfig and Output prepare for shared library that creates complexFilter and requestProperties&lt;br /&gt;
&lt;br /&gt;
= Example params in tableConfig =&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;JavaScript&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
let paramFromTableOutput = {&lt;br /&gt;
&lt;br /&gt;
	// .. other properties same as params sent to backend&lt;br /&gt;
	// requiredDataFields not needed in tableConfig as referenced in elements and sortFields&lt;br /&gt;
	// header/footer filterDataField elements reference valueUserTag&lt;br /&gt;
&lt;br /&gt;
	&amp;quot;elements&amp;quot;: {&lt;br /&gt;
		// shared types&lt;br /&gt;
		&amp;quot;elementId12&amp;quot;:{&lt;br /&gt;
			&amp;quot;elementType&amp;quot;: &amp;quot;freetext&amp;quot;,&lt;br /&gt;
			&amp;quot;value&amp;quot;: &amp;quot;aa&amp;quot;&lt;br /&gt;
		}&lt;br /&gt;
&lt;br /&gt;
		// headerFooter types&lt;br /&gt;
		&amp;quot;elementId1&amp;quot;:{&lt;br /&gt;
			&amp;quot;elementType&amp;quot;: &amp;quot;valueUserTag&amp;quot;,&lt;br /&gt;
			&amp;quot;valueUserTag&amp;quot;: &amp;quot;userTag_9&amp;quot;,&lt;br /&gt;
			&amp;quot;inputType&amp;quot;: &amp;quot;text&amp;quot; // || &amp;quot;select&amp;quot; || &amp;quot;checkbox&amp;quot; || &amp;quot;radio&amp;quot; ,&lt;br /&gt;
		},&lt;br /&gt;
		&amp;quot;elementId2&amp;quot;:{&lt;br /&gt;
			&amp;quot;elementType&amp;quot;: &amp;quot;valueUserTag&amp;quot;,&lt;br /&gt;
			&amp;quot;inputType&amp;quot;: &amp;quot;select&amp;quot;,&lt;br /&gt;
			&amp;quot;options&amp;quot;: [&lt;br /&gt;
	         {&lt;br /&gt;
               optionText:&amp;quot;option1&amp;quot;,&lt;br /&gt;
               valueUserTag:{ &lt;br /&gt;
                 userTag_1:&amp;quot;valueA&amp;quot;, //value not ref valueUserTag&lt;br /&gt;
                 userTag_2:&amp;quot;valueB&amp;quot; &lt;br /&gt;
              },&lt;br /&gt;
	         {&lt;br /&gt;
               optionText:&amp;quot;option2&amp;quot;,&lt;br /&gt;
               valueUserTag:{ &lt;br /&gt;
                 userTag_9:&amp;quot;valueC&amp;quot; &lt;br /&gt;
&lt;br /&gt;
              },&lt;br /&gt;
			],&lt;br /&gt;
		},&lt;br /&gt;
        &amp;quot;elementId21&amp;quot;:{&lt;br /&gt;
			&amp;quot;elementType&amp;quot;: &amp;quot;valueUserTag&amp;quot;,&lt;br /&gt;
			&amp;quot;inputType&amp;quot;: &amp;quot;checkbox&amp;quot;,&lt;br /&gt;
			&amp;quot;onSetting:{&lt;br /&gt;
               optionText:&amp;quot;on&amp;quot;,&lt;br /&gt;
               valueUserTag:{ &lt;br /&gt;
                 userTag_1:&amp;quot;valueA&amp;quot;, //value not ref valueUserTag&lt;br /&gt;
                 userTag_2:&amp;quot;valueB&amp;quot; &lt;br /&gt;
&lt;br /&gt;
              },&lt;br /&gt;
             },&lt;br /&gt;
             &amp;quot;offSetting&amp;quot;:{&lt;br /&gt;
               optionText:&amp;quot;off&amp;quot;,&lt;br /&gt;
               valueUserTag:{ &lt;br /&gt;
                 userTag_9:&amp;quot;valueC&amp;quot; &lt;br /&gt;
&lt;br /&gt;
              },&lt;br /&gt;
             },&lt;br /&gt;
		   &lt;br /&gt;
           &lt;br /&gt;
		},&lt;br /&gt;
		&amp;quot;elementId3&amp;quot;:{&lt;br /&gt;
			&amp;quot;elementType&amp;quot;: &amp;quot;sort&amp;quot;,&lt;br /&gt;
			&amp;quot;display&amp;quot;: &amp;quot;downArrow&amp;quot;, // || upArrow&lt;br /&gt;
			&amp;quot;requiredDataLinkStepObjectId&amp;quot;: &amp;quot;userTag_LinkStepObjectC&amp;quot;,&lt;br /&gt;
			&amp;quot;dataType&amp;quot;: &amp;quot;number&amp;quot;, // &amp;quot;number&amp;quot; | &amp;quot;string&amp;quot;&lt;br /&gt;
			&amp;quot;sortOrder&amp;quot;: &amp;quot;ascending&amp;quot; // &amp;quot;ascending&amp;quot;|&amp;quot;descending&amp;quot; (default ascending)&lt;br /&gt;
		},&lt;br /&gt;
		&amp;quot;elementId4&amp;quot;:{&lt;br /&gt;
			&amp;quot;elementType&amp;quot;: &amp;quot;numberOfRows&amp;quot;,&lt;br /&gt;
			&amp;quot;selection&amp;quot;: &amp;quot;input&amp;quot;, // || list&lt;br /&gt;
		},&lt;br /&gt;
		&amp;quot;elementId4&amp;quot;:{&lt;br /&gt;
			&amp;quot;elementType&amp;quot;: &amp;quot;numberOfRows&amp;quot;,&lt;br /&gt;
			&amp;quot;selection&amp;quot;: &amp;quot;list&amp;quot;,&lt;br /&gt;
            &amp;quot;list&amp;quot;:[&amp;quot;1&amp;quot;,&amp;quot;5&amp;quot;,&amp;quot;7&amp;quot;], //not sure&lt;br /&gt;
		},&lt;br /&gt;
		&amp;quot;elementId6&amp;quot;:{&lt;br /&gt;
			&amp;quot;elementType&amp;quot;: &amp;quot;submit&amp;quot;,&lt;br /&gt;
			&amp;quot;display&amp;quot;: &amp;quot;submit&amp;quot;, // any text to be shown&lt;br /&gt;
			&amp;quot;sendRequest&amp;quot;: &amp;quot;all&amp;quot; // numberOfRows || all || filters&lt;br /&gt;
		},&lt;br /&gt;
		&amp;quot;elementId7&amp;quot;:{&lt;br /&gt;
			&amp;quot;elementType&amp;quot;: &amp;quot;reset&amp;quot;,&lt;br /&gt;
			&amp;quot;display&amp;quot;: &amp;quot;reset rows&amp;quot;, // any text to be shown&lt;br /&gt;
			&amp;quot;sendRequest&amp;quot;: &amp;quot;numberOfRows&amp;quot; // numberOfRows || all || filters&lt;br /&gt;
		},&lt;br /&gt;
		&amp;quot;elementId9&amp;quot;:{&lt;br /&gt;
			&amp;quot;elementType&amp;quot;: &amp;quot;totalDatafield&amp;quot;,&lt;br /&gt;
			&amp;quot;requiredDataLinkStepObjectId&amp;quot;: &amp;quot;link1&amp;quot;,&lt;br /&gt;
			&amp;quot;showIfNotAllRowsLoaded&amp;quot;: true // || false&lt;br /&gt;
		},&lt;br /&gt;
		&amp;quot;elementId11&amp;quot;:{&lt;br /&gt;
			// will need to link to per record check box&lt;br /&gt;
			&amp;quot;elementType&amp;quot;: &amp;quot;bulkAction&amp;quot;,&lt;br /&gt;
			&amp;quot;action&amp;quot;: &amp;quot;on&amp;quot; // on | off | switch&lt;br /&gt;
			&amp;quot;bulkActionUserTag&amp;quot;: &amp;quot;tagA&amp;quot;, // have normalized list of bulkActionTags, with list of &amp;quot;bulkAction&amp;quot; and &amp;quot;bulkActionCheckBox&amp;quot; elements linked to it&lt;br /&gt;
		},&lt;br /&gt;
		&amp;quot;elementId8&amp;quot;:{&lt;br /&gt;
			&amp;quot;elementType&amp;quot;: &amp;quot;pageNumbers&amp;quot;,&lt;br /&gt;
			&amp;quot;linksAfter&amp;quot;: [&lt;br /&gt;
				{&lt;br /&gt;
					&amp;quot;action&amp;quot;: &amp;quot;jumpNumberOfPages&amp;quot;,&lt;br /&gt;
					&amp;quot;jumpPages&amp;quot;: 7,&lt;br /&gt;
					&amp;quot;string&amp;quot;: &amp;quot;..&amp;quot;&lt;br /&gt;
				},&lt;br /&gt;
				{&lt;br /&gt;
					&amp;quot;action&amp;quot;: &amp;quot;jumpNumberOfPages&amp;quot;,&lt;br /&gt;
					&amp;quot;jumpPages&amp;quot;: 1,&lt;br /&gt;
					&amp;quot;string&amp;quot;: &amp;quot;&amp;gt;&amp;quot;&lt;br /&gt;
				},&lt;br /&gt;
				{&lt;br /&gt;
					&amp;quot;action&amp;quot;: &amp;quot;goToLastPage&amp;quot;,&lt;br /&gt;
					&amp;quot;hideWhenLastPageShown&amp;quot;: true,&lt;br /&gt;
					&amp;quot;string&amp;quot;: &amp;quot;&amp;gt;&amp;gt;&amp;quot;&lt;br /&gt;
				}&lt;br /&gt;
			],&lt;br /&gt;
			&amp;quot;linksBefore&amp;quot;: [&lt;br /&gt;
				{&lt;br /&gt;
					&amp;quot;action&amp;quot;: &amp;quot;goToFirstPage&amp;quot;,&lt;br /&gt;
					&amp;quot;hideWhenFirstPageShown&amp;quot;: true,&lt;br /&gt;
					&amp;quot;string&amp;quot;: &amp;quot;&amp;lt;&amp;lt;&amp;quot;&lt;br /&gt;
				},&lt;br /&gt;
				{&lt;br /&gt;
					&amp;quot;action&amp;quot;: &amp;quot;jumpNumberOfPages&amp;quot;,&lt;br /&gt;
					&amp;quot;jumpPages&amp;quot;: 1,&lt;br /&gt;
					&amp;quot;string&amp;quot;: &amp;quot;&amp;lt;&amp;quot;&lt;br /&gt;
				},&lt;br /&gt;
				{&lt;br /&gt;
					&amp;quot;action&amp;quot;: &amp;quot;jumpNumberOfPages&amp;quot;,&lt;br /&gt;
					&amp;quot;jumpPages&amp;quot;: 7,&lt;br /&gt;
					&amp;quot;string&amp;quot;: &amp;quot;..&amp;quot;&lt;br /&gt;
				}&lt;br /&gt;
			],&lt;br /&gt;
			&amp;quot;showPagesAfter&amp;quot;: 3,&lt;br /&gt;
			&amp;quot;showPagesBefore&amp;quot;: 3&lt;br /&gt;
		},&lt;br /&gt;
		&lt;br /&gt;
		// records types    &lt;br /&gt;
		&amp;quot;elementId5&amp;quot;:{&lt;br /&gt;
			&amp;quot;elementType&amp;quot;: &amp;quot;requiredDataLinkStepObject&amp;quot;, // in record&lt;br /&gt;
			&amp;quot;requiredDataLinkStepObjectId&amp;quot;: &amp;quot;link1&amp;quot;,&lt;br /&gt;
		},&lt;br /&gt;
		&amp;quot;elementIdxx&amp;quot;:{&lt;br /&gt;
			&amp;quot;elementType&amp;quot;: &amp;quot;bulkActionCheckBox&amp;quot;,&lt;br /&gt;
			&amp;quot;bulkActionUserTag&amp;quot;: &amp;quot;tagA&amp;quot;,&lt;br /&gt;
		},&lt;br /&gt;
	},&lt;br /&gt;
	&lt;br /&gt;
	values: {&lt;br /&gt;
		// values are shared between requestProperties and filter values. This set can be iterated to overwrite values using userTag to identify&lt;br /&gt;
		userTag_1:{&lt;br /&gt;
			defaultValue: &amp;quot;xx&amp;quot;,&lt;br /&gt;
		},&lt;br /&gt;
		userTag_2:{&lt;br /&gt;
			defaultValue: &amp;quot;xx&amp;quot;,&lt;br /&gt;
		},&lt;br /&gt;
		userTag_3:{&lt;br /&gt;
			defaultValue: &amp;quot;xx&amp;quot;,&lt;br /&gt;
		},&lt;br /&gt;
		userTag_4:{&lt;br /&gt;
			defaultValue: &amp;quot;xx&amp;quot;,&lt;br /&gt;
		},&lt;br /&gt;
		userTag_5:{&lt;br /&gt;
			defaultValue: &amp;quot;xx&amp;quot;,&lt;br /&gt;
		},&lt;br /&gt;
		userTag_6:{&lt;br /&gt;
			valueSource: &amp;quot;complexFilterCombination&amp;quot;,&lt;br /&gt;
            complexFilterCombinationId: &amp;quot;hash_complexFilterCombinationA&amp;quot;,&lt;br /&gt;
		},&lt;br /&gt;
		userTag_7:{&lt;br /&gt;
			valueSource: &amp;quot;perParentCombination&amp;quot;,&lt;br /&gt;
            perParentCombinationId: &amp;quot;hash_perParentCombinationA&amp;quot;,&lt;br /&gt;
		},&lt;br /&gt;
        userTag_8: {&lt;br /&gt;
            valueSource: 'perParentIdentifier',&lt;br /&gt;
            perParentIdentifierFieldname: 'sellOfferId'&lt;br /&gt;
        },,&lt;br /&gt;
		userTag_9:{&lt;br /&gt;
			defaultValue: &amp;quot;xx&amp;quot;,&lt;br /&gt;
		},&lt;br /&gt;
		userTag_10:{&lt;br /&gt;
			defaultValue: &amp;quot;xx&amp;quot;,&lt;br /&gt;
		},&lt;br /&gt;
		userTag_11:{&lt;br /&gt;
			defaultValue: &amp;quot;xx&amp;quot;,&lt;br /&gt;
		},&lt;br /&gt;
	},&lt;br /&gt;
&lt;br /&gt;
	bulkActionUserTags: {&lt;br /&gt;
		tagA:{&lt;br /&gt;
			bulkActions: [&lt;br /&gt;
                &amp;quot;elementId11&amp;quot;,&lt;br /&gt;
                // ...&lt;br /&gt;
            ],&lt;br /&gt;
            bulkActionCheckBoxes: [&lt;br /&gt;
                &amp;quot;elementIdxx&amp;quot;,&lt;br /&gt;
                // ...&lt;br /&gt;
            ],&lt;br /&gt;
		},&lt;br /&gt;
        // ...&lt;br /&gt;
	},&lt;br /&gt;
&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= Example params sent to backend =&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;JavaScript&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
let paramFromTableOutput = {&lt;br /&gt;
	objType: { //* main objType&lt;br /&gt;
		serviceTag: &amp;quot;ProductManager&amp;quot;,&lt;br /&gt;
		objectType: &amp;quot;Product&amp;quot;&lt;br /&gt;
	},&lt;br /&gt;
    initialLogicalElementId: &amp;quot;uuid_logical_1&amp;quot;,&lt;br /&gt;
    logicalElements: {&lt;br /&gt;
       uuid_logical_1: {&lt;br /&gt;
         logicalElementType: &amp;quot;logical&amp;quot;,&lt;br /&gt;
         previousLogicalElementId: null,&lt;br /&gt;
         nextLogicalElementId: null,&lt;br /&gt;
&lt;br /&gt;
         objType: {&lt;br /&gt;
           serviceTag: &amp;quot;ProductManager&amp;quot;,&lt;br /&gt;
           objectType: &amp;quot;product&amp;quot;&lt;br /&gt;
         },&lt;br /&gt;
          partitionKeyValueUserTags: {&lt;br /&gt;
            productId: &amp;quot;userTag_1&amp;quot;,&lt;br /&gt;
          },&lt;br /&gt;
          // sortKeyValueUserTags: {&lt;br /&gt;
          //    productId: &amp;quot;valueB&amp;quot;,&lt;br /&gt;
          // },&lt;br /&gt;
          // comparison: &amp;quot;equals&amp;quot;,&lt;br /&gt;
          // conditionalFieldValues: [&lt;br /&gt;
          //  {&lt;br /&gt;
          //    fieldname: &amp;quot;language&amp;quot;,&lt;br /&gt;
          //   includeValueUserTags: [&amp;quot;th&amp;quot;],&lt;br /&gt;
          //    // excludeValueUserTags: [&amp;quot;xx&amp;quot;,&amp;quot;sdd&amp;quot;]&lt;br /&gt;
          //  }&lt;br /&gt;
          // ]&lt;br /&gt;
       },&lt;br /&gt;
       &lt;br /&gt;
       // ex. traversal type&lt;br /&gt;
       // uuid_traversal: {&lt;br /&gt;
       //   logicalElementType: &amp;quot;traversal&amp;quot;,&lt;br /&gt;
       //   previousLogicalElementId: null,&lt;br /&gt;
       //   nextLogicalElementId: null,&lt;br /&gt;
&lt;br /&gt;
       //   objType: {&lt;br /&gt;
       //     objectType: &amp;quot;locationNode&amp;quot;,&lt;br /&gt;
       //     serviceTag: &amp;quot;Locations&amp;quot;,&lt;br /&gt;
       //   },&lt;br /&gt;
       //   traversalSteps: [&lt;br /&gt;
       //     &amp;quot;uuid_traversal_1&amp;quot;,&lt;br /&gt;
       //     &amp;quot;uuid_traversal_2&amp;quot;,&lt;br /&gt;
       //   ]&lt;br /&gt;
       // }&lt;br /&gt;
    },&lt;br /&gt;
    traversalSteps: {&lt;br /&gt;
       uuid_traversal_1: {&lt;br /&gt;
		objType: {&lt;br /&gt;
			serviceTag: &amp;quot;Locations&amp;quot;,&lt;br /&gt;
			objectType: &amp;quot;localtionLink&amp;quot;&lt;br /&gt;
		},&lt;br /&gt;
		link: {&lt;br /&gt;
			relType: {&lt;br /&gt;
			  serviceTag: &amp;quot;Locations&amp;quot;,&lt;br /&gt;
			  relationshipTag: &amp;quot;hasLocationLink&amp;quot;&lt;br /&gt;
			},&lt;br /&gt;
			relationshipDirection: &amp;quot;to&amp;quot;&lt;br /&gt;
		},&lt;br /&gt;
		hopsPassObjType: true, //optional&lt;br /&gt;
		hopsEnd: 10, //optional  &lt;br /&gt;
       },&lt;br /&gt;
       uuid_traversal_2: {&lt;br /&gt;
        objType: {&lt;br /&gt;
			serviceTag: &amp;quot;Locations&amp;quot;,&lt;br /&gt;
			objectType: &amp;quot;locationNode&amp;quot;&lt;br /&gt;
		},&lt;br /&gt;
		link: {&lt;br /&gt;
			relType: {&lt;br /&gt;
			  serviceTag: &amp;quot;Locations&amp;quot;,&lt;br /&gt;
			  relationshipTag: &amp;quot;isLocationNode&amp;quot;&lt;br /&gt;
			},&lt;br /&gt;
			relationshipDirection: &amp;quot;to&amp;quot;&lt;br /&gt;
		},&lt;br /&gt;
		//* last traversal cannot set hopPassObjType&lt;br /&gt;
		hopsEnd: 10, //optional  &lt;br /&gt;
        fieldValueUserTags: [&lt;br /&gt;
        {&lt;br /&gt;
          categoryId: &amp;quot;valueD&amp;quot;&lt;br /&gt;
        },&lt;br /&gt;
        {&lt;br /&gt;
          categoryId: &amp;quot;valueA&amp;quot;&lt;br /&gt;
        },&lt;br /&gt;
        {&lt;br /&gt;
          price: &amp;quot;valueF&amp;quot;&lt;br /&gt;
        },&lt;br /&gt;
        {&lt;br /&gt;
          categoryId: &amp;quot;valueA&amp;quot;&lt;br /&gt;
        },&lt;br /&gt;
        {&lt;br /&gt;
          categoryId: &amp;quot;valueB&amp;quot;&lt;br /&gt;
        },&lt;br /&gt;
      ]&lt;br /&gt;
       }&lt;br /&gt;
    },&lt;br /&gt;
	requiredDataFields: [ //* linkStepObjects to create main sort result's requiredData and sortFields&lt;br /&gt;
        // not needed at tableConfig level because can be built from table's elements and sortFields before sending to lib that converts to backend structure&lt;br /&gt;
        &amp;quot;userTag_LinkStepObjectA&amp;quot;, // no link, field in main objType (structure same linkPath but only one step)&lt;br /&gt;
        &amp;quot;userTag_LinkStepObjectB&amp;quot;, // has link&lt;br /&gt;
	],&lt;br /&gt;
	complexFilterCombinations:{&lt;br /&gt;
		hash_complexFilterCombinationA: {&lt;br /&gt;
          objType: {&lt;br /&gt;
            serviceTag: &amp;quot;Locations&amp;quot;,&lt;br /&gt;
            objectType: &amp;quot;locationNode&amp;quot;&lt;br /&gt;
          },&lt;br /&gt;
          initialLogicalElementId: &amp;quot;child_complexFilter_localtionNode&amp;quot;,&lt;br /&gt;
          logicalElements: {&lt;br /&gt;
            child_complexFilter_localtionNode: {&lt;br /&gt;
              logicalElementType: &amp;quot;childComplexFilter&amp;quot;,&lt;br /&gt;
              previousLogicalElementId: null,&lt;br /&gt;
              nextLogicalElementId: null,&lt;br /&gt;
&lt;br /&gt;
              childLogicalElementId: &amp;quot;logical_locationNode&amp;quot;,&lt;br /&gt;
              objType: {&lt;br /&gt;
                serviceTag: &amp;quot;Locations&amp;quot;,&lt;br /&gt;
                objectType: &amp;quot;locationNode&amp;quot;&lt;br /&gt;
              },&lt;br /&gt;
              pathLinkType: {&lt;br /&gt;
                objType: {&lt;br /&gt;
                  serviceTag: &amp;quot;Locations&amp;quot;,&lt;br /&gt;
                  objectType: &amp;quot;locationNode&amp;quot;&lt;br /&gt;
                },&lt;br /&gt;
                relType: {&lt;br /&gt;
                  serviceTag: &amp;quot;Locations&amp;quot;,&lt;br /&gt;
                  relationshipTag: &amp;quot;hasParentLocationNode&amp;quot;&lt;br /&gt;
                },&lt;br /&gt;
                direction: &amp;quot;to&amp;quot;&lt;br /&gt;
              },&lt;br /&gt;
            },&lt;br /&gt;
            logical_locationNode: {&lt;br /&gt;
               logicalElementType: &amp;quot;logical&amp;quot;,&lt;br /&gt;
               previousLogicalElementId: &amp;quot;child_complexFilter_localtionNode&amp;quot;,&lt;br /&gt;
               nextLogicalElementId: null,&lt;br /&gt;
&lt;br /&gt;
               objType: {&lt;br /&gt;
                serviceTag: &amp;quot;Locations&amp;quot;,&lt;br /&gt;
                objectType: &amp;quot;locationNode&amp;quot;&lt;br /&gt;
               },&lt;br /&gt;
                partitionKeyValueUserTags: {&lt;br /&gt;
                   locationNodeId: &amp;quot;userTag_7&amp;quot;,&lt;br /&gt;
                },&lt;br /&gt;
                // sortKeyValueUserTags: {&lt;br /&gt;
                //    productId: &amp;quot;valueB&amp;quot;,&lt;br /&gt;
                // },&lt;br /&gt;
                // comparison: &amp;quot;equals&amp;quot;,&lt;br /&gt;
                // conditionalFieldValues: [&lt;br /&gt;
                //  {&lt;br /&gt;
                //    fieldname: &amp;quot;language&amp;quot;,&lt;br /&gt;
                //   includeValueUserTags: [&amp;quot;th&amp;quot;],&lt;br /&gt;
                //    // excludeValueUserTags: [&amp;quot;xx&amp;quot;,&amp;quot;sdd&amp;quot;]&lt;br /&gt;
                //  }&lt;br /&gt;
                // ]&lt;br /&gt;
            }&lt;br /&gt;
         }&lt;br /&gt;
       },&lt;br /&gt;
	},&lt;br /&gt;
	perParentCombinations:{&lt;br /&gt;
		hash_perParentCombinationA: {&lt;br /&gt;
          objType: {&lt;br /&gt;
            serviceTag: &amp;quot;SellOfferPlan&amp;quot;,&lt;br /&gt;
            objectType: &amp;quot;sellOfferPlan&amp;quot;&lt;br /&gt;
          },&lt;br /&gt;
          initialLogicalElementId: &amp;quot;child_complexFilter_1&amp;quot;,&lt;br /&gt;
          logicalElements: {&lt;br /&gt;
            child_complexFilter_1: {&lt;br /&gt;
              logicalElementType: &amp;quot;childComplexFilter&amp;quot;,&lt;br /&gt;
              previousLogicalElementId: null,&lt;br /&gt;
              nextLogicalElementId: null,&lt;br /&gt;
&lt;br /&gt;
              childLogicalElementId: &amp;quot;logical_sellOffer&amp;quot;,&lt;br /&gt;
              objType: {&lt;br /&gt;
                serviceTag: &amp;quot;SellOfferPlan&amp;quot;,&lt;br /&gt;
                objectType: &amp;quot;sellOfferPlan&amp;quot;&lt;br /&gt;
              },&lt;br /&gt;
              pathLinkType: {&lt;br /&gt;
                objType: {&lt;br /&gt;
                  serviceTag: &amp;quot;SellOfferManager&amp;quot;,&lt;br /&gt;
                  objectType: &amp;quot;sellOffer&amp;quot;&lt;br /&gt;
                }, &lt;br /&gt;
                relType: {&lt;br /&gt;
                  serviceTag: &amp;quot;SellOfferManager&amp;quot;,&lt;br /&gt;
                  relationshipTag: &amp;quot;usesSellOfferPlan&amp;quot;&lt;br /&gt;
                },&lt;br /&gt;
                direction: &amp;quot;to&amp;quot;&lt;br /&gt;
              },&lt;br /&gt;
              requestProperties: {&lt;br /&gt;
                tag_orderQuantity: &amp;quot;userTag_9&amp;quot;&lt;br /&gt;
              }&lt;br /&gt;
           },&lt;br /&gt;
           logical_sellOffer: {&lt;br /&gt;
              logicalElementType: &amp;quot;logical&amp;quot;,&lt;br /&gt;
              previousLogicalElementId: &amp;quot;child_complexFilter_1&amp;quot;,&lt;br /&gt;
              nextLogicalElementId: null,&lt;br /&gt;
&lt;br /&gt;
              objType: {&lt;br /&gt;
                serviceTag: &amp;quot;SellOfferManager&amp;quot;,&lt;br /&gt;
                objectType: &amp;quot;sellOffer&amp;quot;&lt;br /&gt;
              },&lt;br /&gt;
               partitionKeyValueUserTags: {&lt;br /&gt;
                   sellOfferId: &amp;quot;userTag_8&amp;quot;,&lt;br /&gt;
               },&lt;br /&gt;
               // sortKeyValueUserTags: {&lt;br /&gt;
               //    productId: &amp;quot;valueB&amp;quot;,&lt;br /&gt;
               // },&lt;br /&gt;
               // comparison: &amp;quot;equals&amp;quot;,&lt;br /&gt;
               // conditionalFieldValues: [&lt;br /&gt;
               //  {&lt;br /&gt;
               //    fieldname: &amp;quot;language&amp;quot;,&lt;br /&gt;
               //   includeValueUserTags: [&amp;quot;th&amp;quot;],&lt;br /&gt;
               //    // excludeValueUserTags: [&amp;quot;xx&amp;quot;,&amp;quot;sdd&amp;quot;]&lt;br /&gt;
               //  }&lt;br /&gt;
               // ]&lt;br /&gt;
           }&lt;br /&gt;
        }&lt;br /&gt;
      },&lt;br /&gt;
	},&lt;br /&gt;
	requiredDataLinkStepObjects: {&lt;br /&gt;
		userTag_LinkStepObjectA: { //* requiredData no linkPath&lt;br /&gt;
			initialObjType: { //* main objType&lt;br /&gt;
				serviceTag: &amp;quot;ProductManager&amp;quot;,&lt;br /&gt;
				objectType: &amp;quot;Product&amp;quot;&lt;br /&gt;
			},&lt;br /&gt;
			linkSteps: [&amp;quot;hash_linkStepA_1&amp;quot;],&lt;br /&gt;
		},&lt;br /&gt;
        userTag_LinkStepObjectB: { // requiredDataFields for finding max orderTotal&lt;br /&gt;
            initialObjType: { //* main objType&lt;br /&gt;
				serviceTag: &amp;quot;ProductManager&amp;quot;,&lt;br /&gt;
				objectType: &amp;quot;Product&amp;quot;&lt;br /&gt;
			},&lt;br /&gt;
			linkSteps: [&amp;quot;hash_linkStepB_1&amp;quot;, &amp;quot;hash_linkStepB_2&amp;quot;, &amp;quot;hash_linkStepB_3&amp;quot;],&lt;br /&gt;
        }&lt;br /&gt;
        // userTag_LinkStepObjectC&lt;br /&gt;
        // userTag_LinkStepObjectD&lt;br /&gt;
	},&lt;br /&gt;
	requiredDataLinkSteps: {&lt;br /&gt;
		hash_linkStepA_1:{&lt;br /&gt;
          fieldName: &amp;quot;xxx&amp;quot; &lt;br /&gt;
        },&lt;br /&gt;
        hash_linkStepB_1:{&lt;br /&gt;
          pathLinkType: {&lt;br /&gt;
             objType: {&lt;br /&gt;
               serviceTag: &amp;quot;SellOfferManager&amp;quot;,&lt;br /&gt;
               objectType: &amp;quot;SellOffer&amp;quot;&lt;br /&gt;
             },&lt;br /&gt;
             relType: {&lt;br /&gt;
               serviceTag: &amp;quot;ProductManager&amp;quot;,&lt;br /&gt;
               relationshipTag: &amp;quot;hasSellOffer&amp;quot;&lt;br /&gt;
             },&lt;br /&gt;
             direction: &amp;quot;to&amp;quot;,&lt;br /&gt;
          },&lt;br /&gt;
           addFilterMain: true, //default: false =&amp;gt; need to add filterMain set = true&lt;br /&gt;
           filterElements: { //* filter in linkPath&lt;br /&gt;
             objType: {&lt;br /&gt;
               serviceTag: &amp;quot;SellOfferManager&amp;quot;,&lt;br /&gt;
               objectType: &amp;quot;SellOffer&amp;quot;&lt;br /&gt;
             },&lt;br /&gt;
             initialLogicalElementId: &amp;quot;logical_sellOffer_in_link&amp;quot;,&lt;br /&gt;
             logicalElements: {&lt;br /&gt;
               logical_sellOffer_in_link: {&lt;br /&gt;
                  logicalElementType: &amp;quot;logical&amp;quot;,&lt;br /&gt;
                  previousLogicalElementId: null,&lt;br /&gt;
                  nextLogicalElementId: null,&lt;br /&gt;
&lt;br /&gt;
                  objType: {&lt;br /&gt;
                    serviceTag: &amp;quot;SellOfferManager&amp;quot;,&lt;br /&gt;
                    objectType: &amp;quot;SellOffer&amp;quot;&lt;br /&gt;
                  },&lt;br /&gt;
                  partitionKeyValueUserTags: {&lt;br /&gt;
                     sellOfferId: &amp;quot;userTag_8&amp;quot;,&lt;br /&gt;
                  },&lt;br /&gt;
                  // sortKeyValueUserTags: {&lt;br /&gt;
                  //    productId: &amp;quot;valueB&amp;quot;,&lt;br /&gt;
                  // },&lt;br /&gt;
                  // comparison: &amp;quot;equals&amp;quot;,&lt;br /&gt;
                  conditionalFieldValues: [&lt;br /&gt;
                    {&lt;br /&gt;
                      fieldname: &amp;quot;userId&amp;quot;,&lt;br /&gt;
                      includeValueUserTags: [&amp;quot;userTag_2&amp;quot;], // &lt;br /&gt;
                      // excludeValueUserTags: [&amp;quot;xx&amp;quot;,&amp;quot;sdd&amp;quot;]&lt;br /&gt;
                    }&lt;br /&gt;
                   ]&lt;br /&gt;
               }&lt;br /&gt;
            }&lt;br /&gt;
          },&lt;br /&gt;
&lt;br /&gt;
        }, &lt;br /&gt;
        hash_linkStepB_2: {&lt;br /&gt;
           pathLinkType: {&lt;br /&gt;
             objType: {&lt;br /&gt;
               serviceTag: &amp;quot;OrderPrice&amp;quot;,&lt;br /&gt;
               objectType: &amp;quot;OrderPrice&amp;quot;&lt;br /&gt;
             },&lt;br /&gt;
             relType: {&lt;br /&gt;
               serviceTag: &amp;quot;sellOfferStandard&amp;quot;,&lt;br /&gt;
               relationshipTag: &amp;quot;hasOrderPrice&amp;quot;&lt;br /&gt;
             },&lt;br /&gt;
             direction: &amp;quot;to&amp;quot;,&lt;br /&gt;
           },&lt;br /&gt;
          requestProperties: {&lt;br /&gt;
            tag_deliverTo: &amp;quot;userTag_3&amp;quot;,&lt;br /&gt;
            tag_sellOfferPlan: &amp;quot;userTag_4&amp;quot;,&lt;br /&gt;
            // tag_sellOfferPlanDeliveryMethodLink: &amp;quot;userTag_5&amp;quot;,&lt;br /&gt;
            // tag_sellOfferPlanUserPaymentMethodLink: &amp;quot;userTag_6&amp;quot;&lt;br /&gt;
          }&lt;br /&gt;
          aggregate: &amp;quot;max&amp;quot;,&lt;br /&gt;
          sortFields: [&lt;br /&gt;
       			{&lt;br /&gt;
            		requiredDataLinkStepObjectId: &amp;quot;userTag_LinkStepObjectC&amp;quot;,&lt;br /&gt;
		            dataType: &amp;quot;number&amp;quot;,&lt;br /&gt;
                    sortOrder: &amp;quot;ascending&amp;quot;|&amp;quot;descending&amp;quot;&lt;br /&gt;
        		},&lt;br /&gt;
				{&lt;br /&gt;
        		     requiredDataLinkStepObjectId: &amp;quot;userTag_LinkStepObjectD&amp;quot;,&lt;br /&gt;
		             dataType: &amp;quot;string&amp;quot;,&lt;br /&gt;
                     sortOrder: &amp;quot;ascending&amp;quot;|&amp;quot;descending&amp;quot;&lt;br /&gt;
		         },&lt;br /&gt;
                {&lt;br /&gt;
        		     requiredDataLinkStepObjectId: &amp;quot;userTag_LinkStepObjectD&amp;quot;,&lt;br /&gt;
		             dataType: &amp;quot;array&amp;quot;,&lt;br /&gt;
                     sortByValueUserTags:[&amp;quot;userTag_1&amp;quot;,&amp;quot;userTag_2&amp;quot;],&lt;br /&gt;
                     sortOrder: &amp;quot;ascending&amp;quot;|&amp;quot;descending&amp;quot;&lt;br /&gt;
		        }&lt;br /&gt;
            ],&lt;br /&gt;
          comparison: &amp;quot;greaterThan&amp;quot;,&lt;br /&gt;
          comparisonSortField: &amp;quot;upToValue&amp;quot;,&lt;br /&gt;
          comparisonSortDataType: &amp;quot;string&amp;quot;,&lt;br /&gt;
          comparisonValue: &amp;quot;userTag_2&amp;quot;,&lt;br /&gt;
        }, &lt;br /&gt;
        hash_linkStepB_3: {&lt;br /&gt;
           fieldName: &amp;quot;zzz&amp;quot;,&lt;br /&gt;
        }&lt;br /&gt;
	},&lt;br /&gt;
	sortFields: [&lt;br /&gt;
        {&lt;br /&gt;
             requiredDataLinkStepObjectId: &amp;quot;userTag_LinkStepObjectB&amp;quot;,&lt;br /&gt;
             dataType: &amp;quot;number&amp;quot;,&lt;br /&gt;
             sortOrder: &amp;quot;ascending&amp;quot;|&amp;quot;descending&amp;quot;&lt;br /&gt;
        },&lt;br /&gt;
		{&lt;br /&gt;
             requiredDataLinkStepObjectId: &amp;quot;userTag_LinkStepObjectA&amp;quot;,&lt;br /&gt;
             dataType: &amp;quot;string&amp;quot;,&lt;br /&gt;
             sortOrder: &amp;quot;ascending&amp;quot;|&amp;quot;descending&amp;quot;&lt;br /&gt;
         },&lt;br /&gt;
        {&lt;br /&gt;
             requiredDataLinkStepObjectId: &amp;quot;userTag_LinkStepObjectD&amp;quot;,&lt;br /&gt;
		     dataType: &amp;quot;array&amp;quot;,&lt;br /&gt;
             sortByValueUserTags:[&amp;quot;userTag_1&amp;quot;,&amp;quot;userTag_2&amp;quot;],&lt;br /&gt;
             sortOrder: &amp;quot;ascending&amp;quot;|&amp;quot;descending&amp;quot;&lt;br /&gt;
		}&lt;br /&gt;
    ],&lt;br /&gt;
	valueUserTags: {&lt;br /&gt;
		userTag_1:{&lt;br /&gt;
			value: &amp;quot;xx&amp;quot;,&lt;br /&gt;
		},&lt;br /&gt;
		userTag_2:{&lt;br /&gt;
			value: &amp;quot;yy&amp;quot;,&lt;br /&gt;
		},&lt;br /&gt;
		userTag_3:{&lt;br /&gt;
			valueSource: &amp;quot;complexFilterCombination&amp;quot;,&lt;br /&gt;
            complexFilterCombinationId: &amp;quot;hash_complexFilterCombinationA&amp;quot;,&lt;br /&gt;
		},&lt;br /&gt;
		userTag_4:{&lt;br /&gt;
			valueSource: &amp;quot;perParentCombination&amp;quot;,&lt;br /&gt;
            perParentCombinationId: &amp;quot;hash_perParentCombinationA&amp;quot;,&lt;br /&gt;
		},&lt;br /&gt;
		userTag_7: {&lt;br /&gt;
          value: &amp;quot;zz&amp;quot;,&lt;br /&gt;
        },&lt;br /&gt;
        userTag_8: {&lt;br /&gt;
          valueSource: 'perParentIdentifier',&lt;br /&gt;
          perParentIdentifierFieldname: 'sellOfferId'&lt;br /&gt;
        },&lt;br /&gt;
        userTag_9: {&lt;br /&gt;
          value: 2,&lt;br /&gt;
        },&lt;br /&gt;
	 }&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[Category:Working documents| 2025-04-14]]&lt;br /&gt;
[[Category:Working documents - Search Results| 2025-04-14]]&lt;/div&gt;</summary>
		<author><name>Rut</name></author>
	</entry>
	<entry>
		<id>https://izara.io/wiki/index.php?title=2025-04-14_-_Frontend_LinkPath_structure_for_tableOutput&amp;diff=4084</id>
		<title>2025-04-14 - Frontend LinkPath structure for tableOutput</title>
		<link rel="alternate" type="text/html" href="https://izara.io/wiki/index.php?title=2025-04-14_-_Frontend_LinkPath_structure_for_tableOutput&amp;diff=4084"/>
		<updated>2026-02-10T09:37:06Z</updated>

		<summary type="html">&lt;p&gt;Rut: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Service - Search Results]]&lt;br /&gt;
&lt;br /&gt;
= Overview =&lt;br /&gt;
&lt;br /&gt;
Structure frontend TableConfig and Output prepare for shared library that creates complexFilter and requestProperties&lt;br /&gt;
&lt;br /&gt;
= Example params in tableConfig =&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;JavaScript&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
let paramFromTableOutput = {&lt;br /&gt;
&lt;br /&gt;
	// .. other properties same as params sent to backend&lt;br /&gt;
	// requiredDataFields not needed in tableConfig as referenced in elements and sortFields&lt;br /&gt;
	// header/footer filterDataField elements reference valueUserTag&lt;br /&gt;
&lt;br /&gt;
	&amp;quot;elements&amp;quot;: {&lt;br /&gt;
		// shared types&lt;br /&gt;
		&amp;quot;elementId12&amp;quot;:{&lt;br /&gt;
			&amp;quot;elementType&amp;quot;: &amp;quot;freetext&amp;quot;,&lt;br /&gt;
			&amp;quot;value&amp;quot;: &amp;quot;aa&amp;quot;&lt;br /&gt;
		}&lt;br /&gt;
&lt;br /&gt;
		// headerFooter types&lt;br /&gt;
		&amp;quot;elementId1&amp;quot;:{&lt;br /&gt;
			&amp;quot;elementType&amp;quot;: &amp;quot;valueUserTag&amp;quot;,&lt;br /&gt;
			&amp;quot;valueUserTag&amp;quot;: &amp;quot;userTag_9&amp;quot;,&lt;br /&gt;
			&amp;quot;inputType&amp;quot;: &amp;quot;text&amp;quot; // || &amp;quot;select&amp;quot; || &amp;quot;checkbox&amp;quot; || &amp;quot;radio&amp;quot; ,&lt;br /&gt;
		},&lt;br /&gt;
		&amp;quot;elementId2&amp;quot;:{&lt;br /&gt;
			&amp;quot;elementType&amp;quot;: &amp;quot;valueUserTag&amp;quot;,&lt;br /&gt;
			&amp;quot;inputType&amp;quot;: &amp;quot;select&amp;quot;,&lt;br /&gt;
			&amp;quot;options&amp;quot;: [&lt;br /&gt;
	         {&lt;br /&gt;
               optionText:&amp;quot;option1&amp;quot;,&lt;br /&gt;
               valueUserTag:{ &lt;br /&gt;
                 userTag_1:&amp;quot;valueA&amp;quot;, //value not ref valueUserTag&lt;br /&gt;
                 userTag_2:&amp;quot;valueB&amp;quot; &lt;br /&gt;
              },&lt;br /&gt;
	         {&lt;br /&gt;
               optionText:&amp;quot;option2&amp;quot;,&lt;br /&gt;
               valueUserTag:{ &lt;br /&gt;
                 userTag_9:&amp;quot;valueC&amp;quot; &lt;br /&gt;
&lt;br /&gt;
              },&lt;br /&gt;
			],&lt;br /&gt;
		},&lt;br /&gt;
        &amp;quot;elementId21&amp;quot;:{&lt;br /&gt;
			&amp;quot;elementType&amp;quot;: &amp;quot;valueUserTag&amp;quot;,&lt;br /&gt;
			&amp;quot;inputType&amp;quot;: &amp;quot;checkbox&amp;quot;,&lt;br /&gt;
			&amp;quot;onSetting:{&lt;br /&gt;
               optionText:&amp;quot;on&amp;quot;,&lt;br /&gt;
               valueUserTag:{ &lt;br /&gt;
                 userTag_1:&amp;quot;valueA&amp;quot;, //value not ref valueUserTag&lt;br /&gt;
                 userTag_2:&amp;quot;valueB&amp;quot; &lt;br /&gt;
&lt;br /&gt;
              },&lt;br /&gt;
             },&lt;br /&gt;
             &amp;quot;offSetting&amp;quot;:{&lt;br /&gt;
               optionText:&amp;quot;off&amp;quot;,&lt;br /&gt;
               valueUserTag:{ &lt;br /&gt;
                 userTag_9:&amp;quot;valueC&amp;quot; &lt;br /&gt;
&lt;br /&gt;
              },&lt;br /&gt;
             },&lt;br /&gt;
		   &lt;br /&gt;
           &lt;br /&gt;
		},&lt;br /&gt;
		&amp;quot;elementId3&amp;quot;:{&lt;br /&gt;
			&amp;quot;elementType&amp;quot;: &amp;quot;sort&amp;quot;,&lt;br /&gt;
			&amp;quot;display&amp;quot;: &amp;quot;downArrow&amp;quot;, // || upArrow&lt;br /&gt;
			&amp;quot;requiredDataLinkStepObjectId&amp;quot;: &amp;quot;userTag_LinkStepObjectC&amp;quot;,&lt;br /&gt;
			&amp;quot;dataType&amp;quot;: &amp;quot;number&amp;quot;, // &amp;quot;number&amp;quot; | &amp;quot;string&amp;quot;&lt;br /&gt;
			&amp;quot;sortOrder&amp;quot;: &amp;quot;ascending&amp;quot; // &amp;quot;ascending&amp;quot;|&amp;quot;descending&amp;quot; (default ascending)&lt;br /&gt;
		},&lt;br /&gt;
		&amp;quot;elementId4&amp;quot;:{&lt;br /&gt;
			&amp;quot;elementType&amp;quot;: &amp;quot;numberOfRows&amp;quot;,&lt;br /&gt;
			&amp;quot;selection&amp;quot;: &amp;quot;input&amp;quot;, // || list&lt;br /&gt;
            &amp;quot;list&amp;quot;:[&amp;quot;1&amp;quot;,&amp;quot;5&amp;quot;,&amp;quot;7&amp;quot;], //not sure&lt;br /&gt;
		},&lt;br /&gt;
		&amp;quot;elementId6&amp;quot;:{&lt;br /&gt;
			&amp;quot;elementType&amp;quot;: &amp;quot;submit&amp;quot;,&lt;br /&gt;
			&amp;quot;display&amp;quot;: &amp;quot;submit&amp;quot;, // any text to be shown&lt;br /&gt;
			&amp;quot;sendRequest&amp;quot;: &amp;quot;all&amp;quot; // numberOfRows || all || filters&lt;br /&gt;
		},&lt;br /&gt;
		&amp;quot;elementId7&amp;quot;:{&lt;br /&gt;
			&amp;quot;elementType&amp;quot;: &amp;quot;reset&amp;quot;,&lt;br /&gt;
			&amp;quot;display&amp;quot;: &amp;quot;reset rows&amp;quot;, // any text to be shown&lt;br /&gt;
			&amp;quot;sendRequest&amp;quot;: &amp;quot;numberOfRows&amp;quot; // numberOfRows || all || filters&lt;br /&gt;
		},&lt;br /&gt;
		&amp;quot;elementId9&amp;quot;:{&lt;br /&gt;
			&amp;quot;elementType&amp;quot;: &amp;quot;totalDatafield&amp;quot;,&lt;br /&gt;
			&amp;quot;requiredDataLinkStepObjectId&amp;quot;: &amp;quot;link1&amp;quot;,&lt;br /&gt;
			&amp;quot;showIfNotAllRowsLoaded&amp;quot;: true // || false&lt;br /&gt;
		},&lt;br /&gt;
		&amp;quot;elementId11&amp;quot;:{&lt;br /&gt;
			// will need to link to per record check box&lt;br /&gt;
			&amp;quot;elementType&amp;quot;: &amp;quot;bulkAction&amp;quot;,&lt;br /&gt;
			&amp;quot;action&amp;quot;: &amp;quot;on&amp;quot; // on | off | switch&lt;br /&gt;
			&amp;quot;bulkActionUserTag&amp;quot;: &amp;quot;tagA&amp;quot;, // have normalized list of bulkActionTags, with list of &amp;quot;bulkAction&amp;quot; and &amp;quot;bulkActionCheckBox&amp;quot; elements linked to it&lt;br /&gt;
		},&lt;br /&gt;
		&amp;quot;elementId8&amp;quot;:{&lt;br /&gt;
			&amp;quot;elementType&amp;quot;: &amp;quot;pageNumbers&amp;quot;,&lt;br /&gt;
			&amp;quot;linksAfter&amp;quot;: [&lt;br /&gt;
				{&lt;br /&gt;
					&amp;quot;action&amp;quot;: &amp;quot;jumpNumberOfPages&amp;quot;,&lt;br /&gt;
					&amp;quot;jumpPages&amp;quot;: 7,&lt;br /&gt;
					&amp;quot;string&amp;quot;: &amp;quot;..&amp;quot;&lt;br /&gt;
				},&lt;br /&gt;
				{&lt;br /&gt;
					&amp;quot;action&amp;quot;: &amp;quot;jumpNumberOfPages&amp;quot;,&lt;br /&gt;
					&amp;quot;jumpPages&amp;quot;: 1,&lt;br /&gt;
					&amp;quot;string&amp;quot;: &amp;quot;&amp;gt;&amp;quot;&lt;br /&gt;
				},&lt;br /&gt;
				{&lt;br /&gt;
					&amp;quot;action&amp;quot;: &amp;quot;goToLastPage&amp;quot;,&lt;br /&gt;
					&amp;quot;hideWhenLastPageShown&amp;quot;: true,&lt;br /&gt;
					&amp;quot;string&amp;quot;: &amp;quot;&amp;gt;&amp;gt;&amp;quot;&lt;br /&gt;
				}&lt;br /&gt;
			],&lt;br /&gt;
			&amp;quot;linksBefore&amp;quot;: [&lt;br /&gt;
				{&lt;br /&gt;
					&amp;quot;action&amp;quot;: &amp;quot;goToFirstPage&amp;quot;,&lt;br /&gt;
					&amp;quot;hideWhenFirstPageShown&amp;quot;: true,&lt;br /&gt;
					&amp;quot;string&amp;quot;: &amp;quot;&amp;lt;&amp;lt;&amp;quot;&lt;br /&gt;
				},&lt;br /&gt;
				{&lt;br /&gt;
					&amp;quot;action&amp;quot;: &amp;quot;jumpNumberOfPages&amp;quot;,&lt;br /&gt;
					&amp;quot;jumpPages&amp;quot;: 1,&lt;br /&gt;
					&amp;quot;string&amp;quot;: &amp;quot;&amp;lt;&amp;quot;&lt;br /&gt;
				},&lt;br /&gt;
				{&lt;br /&gt;
					&amp;quot;action&amp;quot;: &amp;quot;jumpNumberOfPages&amp;quot;,&lt;br /&gt;
					&amp;quot;jumpPages&amp;quot;: 7,&lt;br /&gt;
					&amp;quot;string&amp;quot;: &amp;quot;..&amp;quot;&lt;br /&gt;
				}&lt;br /&gt;
			],&lt;br /&gt;
			&amp;quot;showPagesAfter&amp;quot;: 3,&lt;br /&gt;
			&amp;quot;showPagesBefore&amp;quot;: 3&lt;br /&gt;
		},&lt;br /&gt;
		&lt;br /&gt;
		// records types    &lt;br /&gt;
		&amp;quot;elementId5&amp;quot;:{&lt;br /&gt;
			&amp;quot;elementType&amp;quot;: &amp;quot;requiredDataLinkStepObject&amp;quot;, // in record&lt;br /&gt;
			&amp;quot;requiredDataLinkStepObjectId&amp;quot;: &amp;quot;link1&amp;quot;,&lt;br /&gt;
		},&lt;br /&gt;
		&amp;quot;elementIdxx&amp;quot;:{&lt;br /&gt;
			&amp;quot;elementType&amp;quot;: &amp;quot;bulkActionCheckBox&amp;quot;,&lt;br /&gt;
			&amp;quot;bulkActionUserTag&amp;quot;: &amp;quot;tagA&amp;quot;,&lt;br /&gt;
		},&lt;br /&gt;
	},&lt;br /&gt;
	&lt;br /&gt;
	values: {&lt;br /&gt;
		// values are shared between requestProperties and filter values. This set can be iterated to overwrite values using userTag to identify&lt;br /&gt;
		userTag_1:{&lt;br /&gt;
			defaultValue: &amp;quot;xx&amp;quot;,&lt;br /&gt;
		},&lt;br /&gt;
		userTag_2:{&lt;br /&gt;
			defaultValue: &amp;quot;xx&amp;quot;,&lt;br /&gt;
		},&lt;br /&gt;
		userTag_3:{&lt;br /&gt;
			defaultValue: &amp;quot;xx&amp;quot;,&lt;br /&gt;
		},&lt;br /&gt;
		userTag_4:{&lt;br /&gt;
			defaultValue: &amp;quot;xx&amp;quot;,&lt;br /&gt;
		},&lt;br /&gt;
		userTag_5:{&lt;br /&gt;
			defaultValue: &amp;quot;xx&amp;quot;,&lt;br /&gt;
		},&lt;br /&gt;
		userTag_6:{&lt;br /&gt;
			valueSource: &amp;quot;complexFilterCombination&amp;quot;,&lt;br /&gt;
            complexFilterCombinationId: &amp;quot;hash_complexFilterCombinationA&amp;quot;,&lt;br /&gt;
		},&lt;br /&gt;
		userTag_7:{&lt;br /&gt;
			valueSource: &amp;quot;perParentCombination&amp;quot;,&lt;br /&gt;
            perParentCombinationId: &amp;quot;hash_perParentCombinationA&amp;quot;,&lt;br /&gt;
		},&lt;br /&gt;
        userTag_8: {&lt;br /&gt;
            valueSource: 'perParentIdentifier',&lt;br /&gt;
            perParentIdentifierFieldname: 'sellOfferId'&lt;br /&gt;
        },,&lt;br /&gt;
		userTag_9:{&lt;br /&gt;
			defaultValue: &amp;quot;xx&amp;quot;,&lt;br /&gt;
		},&lt;br /&gt;
		userTag_10:{&lt;br /&gt;
			defaultValue: &amp;quot;xx&amp;quot;,&lt;br /&gt;
		},&lt;br /&gt;
		userTag_11:{&lt;br /&gt;
			defaultValue: &amp;quot;xx&amp;quot;,&lt;br /&gt;
		},&lt;br /&gt;
	},&lt;br /&gt;
&lt;br /&gt;
	bulkActionUserTags: {&lt;br /&gt;
		tagA:{&lt;br /&gt;
			bulkActions: [&lt;br /&gt;
                &amp;quot;elementId11&amp;quot;,&lt;br /&gt;
                // ...&lt;br /&gt;
            ],&lt;br /&gt;
            bulkActionCheckBoxes: [&lt;br /&gt;
                &amp;quot;elementIdxx&amp;quot;,&lt;br /&gt;
                // ...&lt;br /&gt;
            ],&lt;br /&gt;
		},&lt;br /&gt;
        // ...&lt;br /&gt;
	},&lt;br /&gt;
&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= Example params sent to backend =&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;JavaScript&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
let paramFromTableOutput = {&lt;br /&gt;
	objType: { //* main objType&lt;br /&gt;
		serviceTag: &amp;quot;ProductManager&amp;quot;,&lt;br /&gt;
		objectType: &amp;quot;Product&amp;quot;&lt;br /&gt;
	},&lt;br /&gt;
    initialLogicalElementId: &amp;quot;uuid_logical_1&amp;quot;,&lt;br /&gt;
    logicalElements: {&lt;br /&gt;
       uuid_logical_1: {&lt;br /&gt;
         logicalElementType: &amp;quot;logical&amp;quot;,&lt;br /&gt;
         previousLogicalElementId: null,&lt;br /&gt;
         nextLogicalElementId: null,&lt;br /&gt;
&lt;br /&gt;
         objType: {&lt;br /&gt;
           serviceTag: &amp;quot;ProductManager&amp;quot;,&lt;br /&gt;
           objectType: &amp;quot;product&amp;quot;&lt;br /&gt;
         },&lt;br /&gt;
          partitionKeyValueUserTags: {&lt;br /&gt;
            productId: &amp;quot;userTag_1&amp;quot;,&lt;br /&gt;
          },&lt;br /&gt;
          // sortKeyValueUserTags: {&lt;br /&gt;
          //    productId: &amp;quot;valueB&amp;quot;,&lt;br /&gt;
          // },&lt;br /&gt;
          // comparison: &amp;quot;equals&amp;quot;,&lt;br /&gt;
          // conditionalFieldValues: [&lt;br /&gt;
          //  {&lt;br /&gt;
          //    fieldname: &amp;quot;language&amp;quot;,&lt;br /&gt;
          //   includeValueUserTags: [&amp;quot;th&amp;quot;],&lt;br /&gt;
          //    // excludeValueUserTags: [&amp;quot;xx&amp;quot;,&amp;quot;sdd&amp;quot;]&lt;br /&gt;
          //  }&lt;br /&gt;
          // ]&lt;br /&gt;
       },&lt;br /&gt;
       &lt;br /&gt;
       // ex. traversal type&lt;br /&gt;
       // uuid_traversal: {&lt;br /&gt;
       //   logicalElementType: &amp;quot;traversal&amp;quot;,&lt;br /&gt;
       //   previousLogicalElementId: null,&lt;br /&gt;
       //   nextLogicalElementId: null,&lt;br /&gt;
&lt;br /&gt;
       //   objType: {&lt;br /&gt;
       //     objectType: &amp;quot;locationNode&amp;quot;,&lt;br /&gt;
       //     serviceTag: &amp;quot;Locations&amp;quot;,&lt;br /&gt;
       //   },&lt;br /&gt;
       //   traversalSteps: [&lt;br /&gt;
       //     &amp;quot;uuid_traversal_1&amp;quot;,&lt;br /&gt;
       //     &amp;quot;uuid_traversal_2&amp;quot;,&lt;br /&gt;
       //   ]&lt;br /&gt;
       // }&lt;br /&gt;
    },&lt;br /&gt;
    traversalSteps: {&lt;br /&gt;
       uuid_traversal_1: {&lt;br /&gt;
		objType: {&lt;br /&gt;
			serviceTag: &amp;quot;Locations&amp;quot;,&lt;br /&gt;
			objectType: &amp;quot;localtionLink&amp;quot;&lt;br /&gt;
		},&lt;br /&gt;
		link: {&lt;br /&gt;
			relType: {&lt;br /&gt;
			  serviceTag: &amp;quot;Locations&amp;quot;,&lt;br /&gt;
			  relationshipTag: &amp;quot;hasLocationLink&amp;quot;&lt;br /&gt;
			},&lt;br /&gt;
			relationshipDirection: &amp;quot;to&amp;quot;&lt;br /&gt;
		},&lt;br /&gt;
		hopsPassObjType: true, //optional&lt;br /&gt;
		hopsEnd: 10, //optional  &lt;br /&gt;
       },&lt;br /&gt;
       uuid_traversal_2: {&lt;br /&gt;
        objType: {&lt;br /&gt;
			serviceTag: &amp;quot;Locations&amp;quot;,&lt;br /&gt;
			objectType: &amp;quot;locationNode&amp;quot;&lt;br /&gt;
		},&lt;br /&gt;
		link: {&lt;br /&gt;
			relType: {&lt;br /&gt;
			  serviceTag: &amp;quot;Locations&amp;quot;,&lt;br /&gt;
			  relationshipTag: &amp;quot;isLocationNode&amp;quot;&lt;br /&gt;
			},&lt;br /&gt;
			relationshipDirection: &amp;quot;to&amp;quot;&lt;br /&gt;
		},&lt;br /&gt;
		//* last traversal cannot set hopPassObjType&lt;br /&gt;
		hopsEnd: 10, //optional  &lt;br /&gt;
        fieldValueUserTags: [&lt;br /&gt;
        {&lt;br /&gt;
          categoryId: &amp;quot;valueD&amp;quot;&lt;br /&gt;
        },&lt;br /&gt;
        {&lt;br /&gt;
          categoryId: &amp;quot;valueA&amp;quot;&lt;br /&gt;
        },&lt;br /&gt;
        {&lt;br /&gt;
          price: &amp;quot;valueF&amp;quot;&lt;br /&gt;
        },&lt;br /&gt;
        {&lt;br /&gt;
          categoryId: &amp;quot;valueA&amp;quot;&lt;br /&gt;
        },&lt;br /&gt;
        {&lt;br /&gt;
          categoryId: &amp;quot;valueB&amp;quot;&lt;br /&gt;
        },&lt;br /&gt;
      ]&lt;br /&gt;
       }&lt;br /&gt;
    },&lt;br /&gt;
	requiredDataFields: [ //* linkStepObjects to create main sort result's requiredData and sortFields&lt;br /&gt;
        // not needed at tableConfig level because can be built from table's elements and sortFields before sending to lib that converts to backend structure&lt;br /&gt;
        &amp;quot;userTag_LinkStepObjectA&amp;quot;, // no link, field in main objType (structure same linkPath but only one step)&lt;br /&gt;
        &amp;quot;userTag_LinkStepObjectB&amp;quot;, // has link&lt;br /&gt;
	],&lt;br /&gt;
	complexFilterCombinations:{&lt;br /&gt;
		hash_complexFilterCombinationA: {&lt;br /&gt;
          objType: {&lt;br /&gt;
            serviceTag: &amp;quot;Locations&amp;quot;,&lt;br /&gt;
            objectType: &amp;quot;locationNode&amp;quot;&lt;br /&gt;
          },&lt;br /&gt;
          initialLogicalElementId: &amp;quot;child_complexFilter_localtionNode&amp;quot;,&lt;br /&gt;
          logicalElements: {&lt;br /&gt;
            child_complexFilter_localtionNode: {&lt;br /&gt;
              logicalElementType: &amp;quot;childComplexFilter&amp;quot;,&lt;br /&gt;
              previousLogicalElementId: null,&lt;br /&gt;
              nextLogicalElementId: null,&lt;br /&gt;
&lt;br /&gt;
              childLogicalElementId: &amp;quot;logical_locationNode&amp;quot;,&lt;br /&gt;
              objType: {&lt;br /&gt;
                serviceTag: &amp;quot;Locations&amp;quot;,&lt;br /&gt;
                objectType: &amp;quot;locationNode&amp;quot;&lt;br /&gt;
              },&lt;br /&gt;
              pathLinkType: {&lt;br /&gt;
                objType: {&lt;br /&gt;
                  serviceTag: &amp;quot;Locations&amp;quot;,&lt;br /&gt;
                  objectType: &amp;quot;locationNode&amp;quot;&lt;br /&gt;
                },&lt;br /&gt;
                relType: {&lt;br /&gt;
                  serviceTag: &amp;quot;Locations&amp;quot;,&lt;br /&gt;
                  relationshipTag: &amp;quot;hasParentLocationNode&amp;quot;&lt;br /&gt;
                },&lt;br /&gt;
                direction: &amp;quot;to&amp;quot;&lt;br /&gt;
              },&lt;br /&gt;
            },&lt;br /&gt;
            logical_locationNode: {&lt;br /&gt;
               logicalElementType: &amp;quot;logical&amp;quot;,&lt;br /&gt;
               previousLogicalElementId: &amp;quot;child_complexFilter_localtionNode&amp;quot;,&lt;br /&gt;
               nextLogicalElementId: null,&lt;br /&gt;
&lt;br /&gt;
               objType: {&lt;br /&gt;
                serviceTag: &amp;quot;Locations&amp;quot;,&lt;br /&gt;
                objectType: &amp;quot;locationNode&amp;quot;&lt;br /&gt;
               },&lt;br /&gt;
                partitionKeyValueUserTags: {&lt;br /&gt;
                   locationNodeId: &amp;quot;userTag_7&amp;quot;,&lt;br /&gt;
                },&lt;br /&gt;
                // sortKeyValueUserTags: {&lt;br /&gt;
                //    productId: &amp;quot;valueB&amp;quot;,&lt;br /&gt;
                // },&lt;br /&gt;
                // comparison: &amp;quot;equals&amp;quot;,&lt;br /&gt;
                // conditionalFieldValues: [&lt;br /&gt;
                //  {&lt;br /&gt;
                //    fieldname: &amp;quot;language&amp;quot;,&lt;br /&gt;
                //   includeValueUserTags: [&amp;quot;th&amp;quot;],&lt;br /&gt;
                //    // excludeValueUserTags: [&amp;quot;xx&amp;quot;,&amp;quot;sdd&amp;quot;]&lt;br /&gt;
                //  }&lt;br /&gt;
                // ]&lt;br /&gt;
            }&lt;br /&gt;
         }&lt;br /&gt;
       },&lt;br /&gt;
	},&lt;br /&gt;
	perParentCombinations:{&lt;br /&gt;
		hash_perParentCombinationA: {&lt;br /&gt;
          objType: {&lt;br /&gt;
            serviceTag: &amp;quot;SellOfferPlan&amp;quot;,&lt;br /&gt;
            objectType: &amp;quot;sellOfferPlan&amp;quot;&lt;br /&gt;
          },&lt;br /&gt;
          initialLogicalElementId: &amp;quot;child_complexFilter_1&amp;quot;,&lt;br /&gt;
          logicalElements: {&lt;br /&gt;
            child_complexFilter_1: {&lt;br /&gt;
              logicalElementType: &amp;quot;childComplexFilter&amp;quot;,&lt;br /&gt;
              previousLogicalElementId: null,&lt;br /&gt;
              nextLogicalElementId: null,&lt;br /&gt;
&lt;br /&gt;
              childLogicalElementId: &amp;quot;logical_sellOffer&amp;quot;,&lt;br /&gt;
              objType: {&lt;br /&gt;
                serviceTag: &amp;quot;SellOfferPlan&amp;quot;,&lt;br /&gt;
                objectType: &amp;quot;sellOfferPlan&amp;quot;&lt;br /&gt;
              },&lt;br /&gt;
              pathLinkType: {&lt;br /&gt;
                objType: {&lt;br /&gt;
                  serviceTag: &amp;quot;SellOfferManager&amp;quot;,&lt;br /&gt;
                  objectType: &amp;quot;sellOffer&amp;quot;&lt;br /&gt;
                }, &lt;br /&gt;
                relType: {&lt;br /&gt;
                  serviceTag: &amp;quot;SellOfferManager&amp;quot;,&lt;br /&gt;
                  relationshipTag: &amp;quot;usesSellOfferPlan&amp;quot;&lt;br /&gt;
                },&lt;br /&gt;
                direction: &amp;quot;to&amp;quot;&lt;br /&gt;
              },&lt;br /&gt;
              requestProperties: {&lt;br /&gt;
                tag_orderQuantity: &amp;quot;userTag_9&amp;quot;&lt;br /&gt;
              }&lt;br /&gt;
           },&lt;br /&gt;
           logical_sellOffer: {&lt;br /&gt;
              logicalElementType: &amp;quot;logical&amp;quot;,&lt;br /&gt;
              previousLogicalElementId: &amp;quot;child_complexFilter_1&amp;quot;,&lt;br /&gt;
              nextLogicalElementId: null,&lt;br /&gt;
&lt;br /&gt;
              objType: {&lt;br /&gt;
                serviceTag: &amp;quot;SellOfferManager&amp;quot;,&lt;br /&gt;
                objectType: &amp;quot;sellOffer&amp;quot;&lt;br /&gt;
              },&lt;br /&gt;
               partitionKeyValueUserTags: {&lt;br /&gt;
                   sellOfferId: &amp;quot;userTag_8&amp;quot;,&lt;br /&gt;
               },&lt;br /&gt;
               // sortKeyValueUserTags: {&lt;br /&gt;
               //    productId: &amp;quot;valueB&amp;quot;,&lt;br /&gt;
               // },&lt;br /&gt;
               // comparison: &amp;quot;equals&amp;quot;,&lt;br /&gt;
               // conditionalFieldValues: [&lt;br /&gt;
               //  {&lt;br /&gt;
               //    fieldname: &amp;quot;language&amp;quot;,&lt;br /&gt;
               //   includeValueUserTags: [&amp;quot;th&amp;quot;],&lt;br /&gt;
               //    // excludeValueUserTags: [&amp;quot;xx&amp;quot;,&amp;quot;sdd&amp;quot;]&lt;br /&gt;
               //  }&lt;br /&gt;
               // ]&lt;br /&gt;
           }&lt;br /&gt;
        }&lt;br /&gt;
      },&lt;br /&gt;
	},&lt;br /&gt;
	requiredDataLinkStepObjects: {&lt;br /&gt;
		userTag_LinkStepObjectA: { //* requiredData no linkPath&lt;br /&gt;
			initialObjType: { //* main objType&lt;br /&gt;
				serviceTag: &amp;quot;ProductManager&amp;quot;,&lt;br /&gt;
				objectType: &amp;quot;Product&amp;quot;&lt;br /&gt;
			},&lt;br /&gt;
			linkSteps: [&amp;quot;hash_linkStepA_1&amp;quot;],&lt;br /&gt;
		},&lt;br /&gt;
        userTag_LinkStepObjectB: { // requiredDataFields for finding max orderTotal&lt;br /&gt;
            initialObjType: { //* main objType&lt;br /&gt;
				serviceTag: &amp;quot;ProductManager&amp;quot;,&lt;br /&gt;
				objectType: &amp;quot;Product&amp;quot;&lt;br /&gt;
			},&lt;br /&gt;
			linkSteps: [&amp;quot;hash_linkStepB_1&amp;quot;, &amp;quot;hash_linkStepB_2&amp;quot;, &amp;quot;hash_linkStepB_3&amp;quot;],&lt;br /&gt;
        }&lt;br /&gt;
        // userTag_LinkStepObjectC&lt;br /&gt;
        // userTag_LinkStepObjectD&lt;br /&gt;
	},&lt;br /&gt;
	requiredDataLinkSteps: {&lt;br /&gt;
		hash_linkStepA_1:{&lt;br /&gt;
          fieldName: &amp;quot;xxx&amp;quot; &lt;br /&gt;
        },&lt;br /&gt;
        hash_linkStepB_1:{&lt;br /&gt;
          pathLinkType: {&lt;br /&gt;
             objType: {&lt;br /&gt;
               serviceTag: &amp;quot;SellOfferManager&amp;quot;,&lt;br /&gt;
               objectType: &amp;quot;SellOffer&amp;quot;&lt;br /&gt;
             },&lt;br /&gt;
             relType: {&lt;br /&gt;
               serviceTag: &amp;quot;ProductManager&amp;quot;,&lt;br /&gt;
               relationshipTag: &amp;quot;hasSellOffer&amp;quot;&lt;br /&gt;
             },&lt;br /&gt;
             direction: &amp;quot;to&amp;quot;,&lt;br /&gt;
          },&lt;br /&gt;
           addFilterMain: true, //default: false =&amp;gt; need to add filterMain set = true&lt;br /&gt;
           filterElements: { //* filter in linkPath&lt;br /&gt;
             objType: {&lt;br /&gt;
               serviceTag: &amp;quot;SellOfferManager&amp;quot;,&lt;br /&gt;
               objectType: &amp;quot;SellOffer&amp;quot;&lt;br /&gt;
             },&lt;br /&gt;
             initialLogicalElementId: &amp;quot;logical_sellOffer_in_link&amp;quot;,&lt;br /&gt;
             logicalElements: {&lt;br /&gt;
               logical_sellOffer_in_link: {&lt;br /&gt;
                  logicalElementType: &amp;quot;logical&amp;quot;,&lt;br /&gt;
                  previousLogicalElementId: null,&lt;br /&gt;
                  nextLogicalElementId: null,&lt;br /&gt;
&lt;br /&gt;
                  objType: {&lt;br /&gt;
                    serviceTag: &amp;quot;SellOfferManager&amp;quot;,&lt;br /&gt;
                    objectType: &amp;quot;SellOffer&amp;quot;&lt;br /&gt;
                  },&lt;br /&gt;
                  partitionKeyValueUserTags: {&lt;br /&gt;
                     sellOfferId: &amp;quot;userTag_8&amp;quot;,&lt;br /&gt;
                  },&lt;br /&gt;
                  // sortKeyValueUserTags: {&lt;br /&gt;
                  //    productId: &amp;quot;valueB&amp;quot;,&lt;br /&gt;
                  // },&lt;br /&gt;
                  // comparison: &amp;quot;equals&amp;quot;,&lt;br /&gt;
                  conditionalFieldValues: [&lt;br /&gt;
                    {&lt;br /&gt;
                      fieldname: &amp;quot;userId&amp;quot;,&lt;br /&gt;
                      includeValueUserTags: [&amp;quot;userTag_2&amp;quot;], // &lt;br /&gt;
                      // excludeValueUserTags: [&amp;quot;xx&amp;quot;,&amp;quot;sdd&amp;quot;]&lt;br /&gt;
                    }&lt;br /&gt;
                   ]&lt;br /&gt;
               }&lt;br /&gt;
            }&lt;br /&gt;
          },&lt;br /&gt;
&lt;br /&gt;
        }, &lt;br /&gt;
        hash_linkStepB_2: {&lt;br /&gt;
           pathLinkType: {&lt;br /&gt;
             objType: {&lt;br /&gt;
               serviceTag: &amp;quot;OrderPrice&amp;quot;,&lt;br /&gt;
               objectType: &amp;quot;OrderPrice&amp;quot;&lt;br /&gt;
             },&lt;br /&gt;
             relType: {&lt;br /&gt;
               serviceTag: &amp;quot;sellOfferStandard&amp;quot;,&lt;br /&gt;
               relationshipTag: &amp;quot;hasOrderPrice&amp;quot;&lt;br /&gt;
             },&lt;br /&gt;
             direction: &amp;quot;to&amp;quot;,&lt;br /&gt;
           },&lt;br /&gt;
          requestProperties: {&lt;br /&gt;
            tag_deliverTo: &amp;quot;userTag_3&amp;quot;,&lt;br /&gt;
            tag_sellOfferPlan: &amp;quot;userTag_4&amp;quot;,&lt;br /&gt;
            // tag_sellOfferPlanDeliveryMethodLink: &amp;quot;userTag_5&amp;quot;,&lt;br /&gt;
            // tag_sellOfferPlanUserPaymentMethodLink: &amp;quot;userTag_6&amp;quot;&lt;br /&gt;
          }&lt;br /&gt;
          aggregate: &amp;quot;max&amp;quot;,&lt;br /&gt;
          sortFields: [&lt;br /&gt;
       			{&lt;br /&gt;
            		requiredDataLinkStepObjectId: &amp;quot;userTag_LinkStepObjectC&amp;quot;,&lt;br /&gt;
		            dataType: &amp;quot;number&amp;quot;,&lt;br /&gt;
                    sortOrder: &amp;quot;ascending&amp;quot;|&amp;quot;descending&amp;quot;&lt;br /&gt;
        		},&lt;br /&gt;
				{&lt;br /&gt;
        		     requiredDataLinkStepObjectId: &amp;quot;userTag_LinkStepObjectD&amp;quot;,&lt;br /&gt;
		             dataType: &amp;quot;string&amp;quot;,&lt;br /&gt;
                     sortOrder: &amp;quot;ascending&amp;quot;|&amp;quot;descending&amp;quot;&lt;br /&gt;
		         },&lt;br /&gt;
                {&lt;br /&gt;
        		     requiredDataLinkStepObjectId: &amp;quot;userTag_LinkStepObjectD&amp;quot;,&lt;br /&gt;
		             dataType: &amp;quot;array&amp;quot;,&lt;br /&gt;
                     sortByValueUserTags:[&amp;quot;userTag_1&amp;quot;,&amp;quot;userTag_2&amp;quot;],&lt;br /&gt;
                     sortOrder: &amp;quot;ascending&amp;quot;|&amp;quot;descending&amp;quot;&lt;br /&gt;
		        }&lt;br /&gt;
            ],&lt;br /&gt;
          comparison: &amp;quot;greaterThan&amp;quot;,&lt;br /&gt;
          comparisonSortField: &amp;quot;upToValue&amp;quot;,&lt;br /&gt;
          comparisonSortDataType: &amp;quot;string&amp;quot;,&lt;br /&gt;
          comparisonValue: &amp;quot;userTag_2&amp;quot;,&lt;br /&gt;
        }, &lt;br /&gt;
        hash_linkStepB_3: {&lt;br /&gt;
           fieldName: &amp;quot;zzz&amp;quot;,&lt;br /&gt;
        }&lt;br /&gt;
	},&lt;br /&gt;
	sortFields: [&lt;br /&gt;
        {&lt;br /&gt;
             requiredDataLinkStepObjectId: &amp;quot;userTag_LinkStepObjectB&amp;quot;,&lt;br /&gt;
             dataType: &amp;quot;number&amp;quot;,&lt;br /&gt;
             sortOrder: &amp;quot;ascending&amp;quot;|&amp;quot;descending&amp;quot;&lt;br /&gt;
        },&lt;br /&gt;
		{&lt;br /&gt;
             requiredDataLinkStepObjectId: &amp;quot;userTag_LinkStepObjectA&amp;quot;,&lt;br /&gt;
             dataType: &amp;quot;string&amp;quot;,&lt;br /&gt;
             sortOrder: &amp;quot;ascending&amp;quot;|&amp;quot;descending&amp;quot;&lt;br /&gt;
         },&lt;br /&gt;
        {&lt;br /&gt;
             requiredDataLinkStepObjectId: &amp;quot;userTag_LinkStepObjectD&amp;quot;,&lt;br /&gt;
		     dataType: &amp;quot;array&amp;quot;,&lt;br /&gt;
             sortByValueUserTags:[&amp;quot;userTag_1&amp;quot;,&amp;quot;userTag_2&amp;quot;],&lt;br /&gt;
             sortOrder: &amp;quot;ascending&amp;quot;|&amp;quot;descending&amp;quot;&lt;br /&gt;
		}&lt;br /&gt;
    ],&lt;br /&gt;
	valueUserTags: {&lt;br /&gt;
		userTag_1:{&lt;br /&gt;
			value: &amp;quot;xx&amp;quot;,&lt;br /&gt;
		},&lt;br /&gt;
		userTag_2:{&lt;br /&gt;
			value: &amp;quot;yy&amp;quot;,&lt;br /&gt;
		},&lt;br /&gt;
		userTag_3:{&lt;br /&gt;
			valueSource: &amp;quot;complexFilterCombination&amp;quot;,&lt;br /&gt;
            complexFilterCombinationId: &amp;quot;hash_complexFilterCombinationA&amp;quot;,&lt;br /&gt;
		},&lt;br /&gt;
		userTag_4:{&lt;br /&gt;
			valueSource: &amp;quot;perParentCombination&amp;quot;,&lt;br /&gt;
            perParentCombinationId: &amp;quot;hash_perParentCombinationA&amp;quot;,&lt;br /&gt;
		},&lt;br /&gt;
		userTag_7: {&lt;br /&gt;
          value: &amp;quot;zz&amp;quot;,&lt;br /&gt;
        },&lt;br /&gt;
        userTag_8: {&lt;br /&gt;
          valueSource: 'perParentIdentifier',&lt;br /&gt;
          perParentIdentifierFieldname: 'sellOfferId'&lt;br /&gt;
        },&lt;br /&gt;
        userTag_9: {&lt;br /&gt;
          value: 2,&lt;br /&gt;
        },&lt;br /&gt;
	 }&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[Category:Working documents| 2025-04-14]]&lt;br /&gt;
[[Category:Working documents - Search Results| 2025-04-14]]&lt;/div&gt;</summary>
		<author><name>Rut</name></author>
	</entry>
	<entry>
		<id>https://izara.io/wiki/index.php?title=2025-04-14_-_Frontend_LinkPath_structure_for_tableOutput&amp;diff=4083</id>
		<title>2025-04-14 - Frontend LinkPath structure for tableOutput</title>
		<link rel="alternate" type="text/html" href="https://izara.io/wiki/index.php?title=2025-04-14_-_Frontend_LinkPath_structure_for_tableOutput&amp;diff=4083"/>
		<updated>2026-02-10T09:36:37Z</updated>

		<summary type="html">&lt;p&gt;Rut: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Service - Search Results]]&lt;br /&gt;
&lt;br /&gt;
= Overview =&lt;br /&gt;
&lt;br /&gt;
Structure frontend TableConfig and Output prepare for shared library that creates complexFilter and requestProperties&lt;br /&gt;
&lt;br /&gt;
= Example params in tableConfig =&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;JavaScript&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
let paramFromTableOutput = {&lt;br /&gt;
&lt;br /&gt;
	// .. other properties same as params sent to backend&lt;br /&gt;
	// requiredDataFields not needed in tableConfig as referenced in elements and sortFields&lt;br /&gt;
	// header/footer filterDataField elements reference valueUserTag&lt;br /&gt;
&lt;br /&gt;
	&amp;quot;elements&amp;quot;: {&lt;br /&gt;
		// shared types&lt;br /&gt;
		&amp;quot;elementId12&amp;quot;:{&lt;br /&gt;
			&amp;quot;elementType&amp;quot;: &amp;quot;freetext&amp;quot;,&lt;br /&gt;
			&amp;quot;value&amp;quot;: &amp;quot;aa&amp;quot;&lt;br /&gt;
		}&lt;br /&gt;
&lt;br /&gt;
		// headerFooter types&lt;br /&gt;
		&amp;quot;elementId1&amp;quot;:{&lt;br /&gt;
			&amp;quot;elementType&amp;quot;: &amp;quot;valueUserTag&amp;quot;,&lt;br /&gt;
			&amp;quot;valueUserTag&amp;quot;: &amp;quot;userTag_9&amp;quot;,&lt;br /&gt;
			&amp;quot;inputType&amp;quot;: &amp;quot;text&amp;quot; // || &amp;quot;select&amp;quot; || &amp;quot;checkbox&amp;quot; || &amp;quot;radio&amp;quot; ,&lt;br /&gt;
		},&lt;br /&gt;
		&amp;quot;elementId2&amp;quot;:{&lt;br /&gt;
			&amp;quot;elementType&amp;quot;: &amp;quot;valueUserTag&amp;quot;,&lt;br /&gt;
			&amp;quot;inputType&amp;quot;: &amp;quot;select&amp;quot;,&lt;br /&gt;
			&amp;quot;options&amp;quot;: [&lt;br /&gt;
	         {&lt;br /&gt;
               optionText:&amp;quot;option1&amp;quot;,&lt;br /&gt;
               valueUserTag:{ &lt;br /&gt;
                 userTag_1:&amp;quot;valueA&amp;quot;, //value not ref valueUserTag&lt;br /&gt;
                 userTag_2:&amp;quot;valueB&amp;quot; &lt;br /&gt;
              },&lt;br /&gt;
	         {&lt;br /&gt;
               optionText:&amp;quot;option2&amp;quot;,&lt;br /&gt;
               valueUserTag:{ &lt;br /&gt;
                 userTag_9:&amp;quot;valueC&amp;quot; &lt;br /&gt;
&lt;br /&gt;
              },&lt;br /&gt;
			],&lt;br /&gt;
		},&lt;br /&gt;
        &amp;quot;elementId21&amp;quot;:{&lt;br /&gt;
			&amp;quot;elementType&amp;quot;: &amp;quot;valueUserTag&amp;quot;,&lt;br /&gt;
			&amp;quot;inputType&amp;quot;: &amp;quot;checkbox&amp;quot;,&lt;br /&gt;
			&amp;quot;onSetting:{&lt;br /&gt;
               optionText:&amp;quot;on&amp;quot;,&lt;br /&gt;
               valueUserTag:{ &lt;br /&gt;
                 userTag_1:&amp;quot;valueA&amp;quot;, //value not ref valueUserTag&lt;br /&gt;
                 userTag_2:&amp;quot;valueB&amp;quot; &lt;br /&gt;
&lt;br /&gt;
              },&lt;br /&gt;
             },&lt;br /&gt;
             &amp;quot;offSetting&amp;quot;:{&lt;br /&gt;
               optionText:&amp;quot;off&amp;quot;,&lt;br /&gt;
               valueUserTag:{ &lt;br /&gt;
                 userTag_9:&amp;quot;valueC&amp;quot; &lt;br /&gt;
&lt;br /&gt;
              },&lt;br /&gt;
             },&lt;br /&gt;
		   &lt;br /&gt;
           &lt;br /&gt;
		},&lt;br /&gt;
		&amp;quot;elementId3&amp;quot;:{&lt;br /&gt;
			&amp;quot;elementType&amp;quot;: &amp;quot;sort&amp;quot;,&lt;br /&gt;
			&amp;quot;display&amp;quot;: &amp;quot;downArrow&amp;quot;, // || upArrow&lt;br /&gt;
			&amp;quot;requiredDataLinkStepObjectId&amp;quot;: &amp;quot;userTag_LinkStepObjectC&amp;quot;,&lt;br /&gt;
			&amp;quot;dataType&amp;quot;: &amp;quot;number&amp;quot;, // &amp;quot;number&amp;quot; | &amp;quot;string&amp;quot;&lt;br /&gt;
			&amp;quot;sortOrder&amp;quot;: &amp;quot;ascending&amp;quot; // &amp;quot;ascending&amp;quot;|&amp;quot;descending&amp;quot; (default ascending)&lt;br /&gt;
		},&lt;br /&gt;
		&amp;quot;elementId4&amp;quot;:{&lt;br /&gt;
			&amp;quot;elementType&amp;quot;: &amp;quot;numberOfRows&amp;quot;,&lt;br /&gt;
			&amp;quot;selection&amp;quot;: &amp;quot;input&amp;quot;, // || list&lt;br /&gt;
            &amp;quot;list&amp;quot;:[&amp;quot;1&amp;quot;,&amp;quot;5&amp;quot;,&amp;quot;7&amp;quot;],&lt;br /&gt;
		},&lt;br /&gt;
		&amp;quot;elementId6&amp;quot;:{&lt;br /&gt;
			&amp;quot;elementType&amp;quot;: &amp;quot;submit&amp;quot;,&lt;br /&gt;
			&amp;quot;display&amp;quot;: &amp;quot;submit&amp;quot;, // any text to be shown&lt;br /&gt;
			&amp;quot;sendRequest&amp;quot;: &amp;quot;all&amp;quot; // numberOfRows || all || filters&lt;br /&gt;
		},&lt;br /&gt;
		&amp;quot;elementId7&amp;quot;:{&lt;br /&gt;
			&amp;quot;elementType&amp;quot;: &amp;quot;reset&amp;quot;,&lt;br /&gt;
			&amp;quot;display&amp;quot;: &amp;quot;reset rows&amp;quot;, // any text to be shown&lt;br /&gt;
			&amp;quot;sendRequest&amp;quot;: &amp;quot;numberOfRows&amp;quot; // numberOfRows || all || filters&lt;br /&gt;
		},&lt;br /&gt;
		&amp;quot;elementId9&amp;quot;:{&lt;br /&gt;
			&amp;quot;elementType&amp;quot;: &amp;quot;totalDatafield&amp;quot;,&lt;br /&gt;
			&amp;quot;requiredDataLinkStepObjectId&amp;quot;: &amp;quot;link1&amp;quot;,&lt;br /&gt;
			&amp;quot;showIfNotAllRowsLoaded&amp;quot;: true // || false&lt;br /&gt;
		},&lt;br /&gt;
		&amp;quot;elementId11&amp;quot;:{&lt;br /&gt;
			// will need to link to per record check box&lt;br /&gt;
			&amp;quot;elementType&amp;quot;: &amp;quot;bulkAction&amp;quot;,&lt;br /&gt;
			&amp;quot;action&amp;quot;: &amp;quot;on&amp;quot; // on | off | switch&lt;br /&gt;
			&amp;quot;bulkActionUserTag&amp;quot;: &amp;quot;tagA&amp;quot;, // have normalized list of bulkActionTags, with list of &amp;quot;bulkAction&amp;quot; and &amp;quot;bulkActionCheckBox&amp;quot; elements linked to it&lt;br /&gt;
		},&lt;br /&gt;
		&amp;quot;elementId8&amp;quot;:{&lt;br /&gt;
			&amp;quot;elementType&amp;quot;: &amp;quot;pageNumbers&amp;quot;,&lt;br /&gt;
			&amp;quot;linksAfter&amp;quot;: [&lt;br /&gt;
				{&lt;br /&gt;
					&amp;quot;action&amp;quot;: &amp;quot;jumpNumberOfPages&amp;quot;,&lt;br /&gt;
					&amp;quot;jumpPages&amp;quot;: 7,&lt;br /&gt;
					&amp;quot;string&amp;quot;: &amp;quot;..&amp;quot;&lt;br /&gt;
				},&lt;br /&gt;
				{&lt;br /&gt;
					&amp;quot;action&amp;quot;: &amp;quot;jumpNumberOfPages&amp;quot;,&lt;br /&gt;
					&amp;quot;jumpPages&amp;quot;: 1,&lt;br /&gt;
					&amp;quot;string&amp;quot;: &amp;quot;&amp;gt;&amp;quot;&lt;br /&gt;
				},&lt;br /&gt;
				{&lt;br /&gt;
					&amp;quot;action&amp;quot;: &amp;quot;goToLastPage&amp;quot;,&lt;br /&gt;
					&amp;quot;hideWhenLastPageShown&amp;quot;: true,&lt;br /&gt;
					&amp;quot;string&amp;quot;: &amp;quot;&amp;gt;&amp;gt;&amp;quot;&lt;br /&gt;
				}&lt;br /&gt;
			],&lt;br /&gt;
			&amp;quot;linksBefore&amp;quot;: [&lt;br /&gt;
				{&lt;br /&gt;
					&amp;quot;action&amp;quot;: &amp;quot;goToFirstPage&amp;quot;,&lt;br /&gt;
					&amp;quot;hideWhenFirstPageShown&amp;quot;: true,&lt;br /&gt;
					&amp;quot;string&amp;quot;: &amp;quot;&amp;lt;&amp;lt;&amp;quot;&lt;br /&gt;
				},&lt;br /&gt;
				{&lt;br /&gt;
					&amp;quot;action&amp;quot;: &amp;quot;jumpNumberOfPages&amp;quot;,&lt;br /&gt;
					&amp;quot;jumpPages&amp;quot;: 1,&lt;br /&gt;
					&amp;quot;string&amp;quot;: &amp;quot;&amp;lt;&amp;quot;&lt;br /&gt;
				},&lt;br /&gt;
				{&lt;br /&gt;
					&amp;quot;action&amp;quot;: &amp;quot;jumpNumberOfPages&amp;quot;,&lt;br /&gt;
					&amp;quot;jumpPages&amp;quot;: 7,&lt;br /&gt;
					&amp;quot;string&amp;quot;: &amp;quot;..&amp;quot;&lt;br /&gt;
				}&lt;br /&gt;
			],&lt;br /&gt;
			&amp;quot;showPagesAfter&amp;quot;: 3,&lt;br /&gt;
			&amp;quot;showPagesBefore&amp;quot;: 3&lt;br /&gt;
		},&lt;br /&gt;
		&lt;br /&gt;
		// records types    &lt;br /&gt;
		&amp;quot;elementId5&amp;quot;:{&lt;br /&gt;
			&amp;quot;elementType&amp;quot;: &amp;quot;requiredDataLinkStepObject&amp;quot;, // in record&lt;br /&gt;
			&amp;quot;requiredDataLinkStepObjectId&amp;quot;: &amp;quot;link1&amp;quot;,&lt;br /&gt;
		},&lt;br /&gt;
		&amp;quot;elementIdxx&amp;quot;:{&lt;br /&gt;
			&amp;quot;elementType&amp;quot;: &amp;quot;bulkActionCheckBox&amp;quot;,&lt;br /&gt;
			&amp;quot;bulkActionUserTag&amp;quot;: &amp;quot;tagA&amp;quot;,&lt;br /&gt;
		},&lt;br /&gt;
	},&lt;br /&gt;
	&lt;br /&gt;
	values: {&lt;br /&gt;
		// values are shared between requestProperties and filter values. This set can be iterated to overwrite values using userTag to identify&lt;br /&gt;
		userTag_1:{&lt;br /&gt;
			defaultValue: &amp;quot;xx&amp;quot;,&lt;br /&gt;
		},&lt;br /&gt;
		userTag_2:{&lt;br /&gt;
			defaultValue: &amp;quot;xx&amp;quot;,&lt;br /&gt;
		},&lt;br /&gt;
		userTag_3:{&lt;br /&gt;
			defaultValue: &amp;quot;xx&amp;quot;,&lt;br /&gt;
		},&lt;br /&gt;
		userTag_4:{&lt;br /&gt;
			defaultValue: &amp;quot;xx&amp;quot;,&lt;br /&gt;
		},&lt;br /&gt;
		userTag_5:{&lt;br /&gt;
			defaultValue: &amp;quot;xx&amp;quot;,&lt;br /&gt;
		},&lt;br /&gt;
		userTag_6:{&lt;br /&gt;
			valueSource: &amp;quot;complexFilterCombination&amp;quot;,&lt;br /&gt;
            complexFilterCombinationId: &amp;quot;hash_complexFilterCombinationA&amp;quot;,&lt;br /&gt;
		},&lt;br /&gt;
		userTag_7:{&lt;br /&gt;
			valueSource: &amp;quot;perParentCombination&amp;quot;,&lt;br /&gt;
            perParentCombinationId: &amp;quot;hash_perParentCombinationA&amp;quot;,&lt;br /&gt;
		},&lt;br /&gt;
        userTag_8: {&lt;br /&gt;
            valueSource: 'perParentIdentifier',&lt;br /&gt;
            perParentIdentifierFieldname: 'sellOfferId'&lt;br /&gt;
        },,&lt;br /&gt;
		userTag_9:{&lt;br /&gt;
			defaultValue: &amp;quot;xx&amp;quot;,&lt;br /&gt;
		},&lt;br /&gt;
		userTag_10:{&lt;br /&gt;
			defaultValue: &amp;quot;xx&amp;quot;,&lt;br /&gt;
		},&lt;br /&gt;
		userTag_11:{&lt;br /&gt;
			defaultValue: &amp;quot;xx&amp;quot;,&lt;br /&gt;
		},&lt;br /&gt;
	},&lt;br /&gt;
&lt;br /&gt;
	bulkActionUserTags: {&lt;br /&gt;
		tagA:{&lt;br /&gt;
			bulkActions: [&lt;br /&gt;
                &amp;quot;elementId11&amp;quot;,&lt;br /&gt;
                // ...&lt;br /&gt;
            ],&lt;br /&gt;
            bulkActionCheckBoxes: [&lt;br /&gt;
                &amp;quot;elementIdxx&amp;quot;,&lt;br /&gt;
                // ...&lt;br /&gt;
            ],&lt;br /&gt;
		},&lt;br /&gt;
        // ...&lt;br /&gt;
	},&lt;br /&gt;
&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= Example params sent to backend =&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;JavaScript&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
let paramFromTableOutput = {&lt;br /&gt;
	objType: { //* main objType&lt;br /&gt;
		serviceTag: &amp;quot;ProductManager&amp;quot;,&lt;br /&gt;
		objectType: &amp;quot;Product&amp;quot;&lt;br /&gt;
	},&lt;br /&gt;
    initialLogicalElementId: &amp;quot;uuid_logical_1&amp;quot;,&lt;br /&gt;
    logicalElements: {&lt;br /&gt;
       uuid_logical_1: {&lt;br /&gt;
         logicalElementType: &amp;quot;logical&amp;quot;,&lt;br /&gt;
         previousLogicalElementId: null,&lt;br /&gt;
         nextLogicalElementId: null,&lt;br /&gt;
&lt;br /&gt;
         objType: {&lt;br /&gt;
           serviceTag: &amp;quot;ProductManager&amp;quot;,&lt;br /&gt;
           objectType: &amp;quot;product&amp;quot;&lt;br /&gt;
         },&lt;br /&gt;
          partitionKeyValueUserTags: {&lt;br /&gt;
            productId: &amp;quot;userTag_1&amp;quot;,&lt;br /&gt;
          },&lt;br /&gt;
          // sortKeyValueUserTags: {&lt;br /&gt;
          //    productId: &amp;quot;valueB&amp;quot;,&lt;br /&gt;
          // },&lt;br /&gt;
          // comparison: &amp;quot;equals&amp;quot;,&lt;br /&gt;
          // conditionalFieldValues: [&lt;br /&gt;
          //  {&lt;br /&gt;
          //    fieldname: &amp;quot;language&amp;quot;,&lt;br /&gt;
          //   includeValueUserTags: [&amp;quot;th&amp;quot;],&lt;br /&gt;
          //    // excludeValueUserTags: [&amp;quot;xx&amp;quot;,&amp;quot;sdd&amp;quot;]&lt;br /&gt;
          //  }&lt;br /&gt;
          // ]&lt;br /&gt;
       },&lt;br /&gt;
       &lt;br /&gt;
       // ex. traversal type&lt;br /&gt;
       // uuid_traversal: {&lt;br /&gt;
       //   logicalElementType: &amp;quot;traversal&amp;quot;,&lt;br /&gt;
       //   previousLogicalElementId: null,&lt;br /&gt;
       //   nextLogicalElementId: null,&lt;br /&gt;
&lt;br /&gt;
       //   objType: {&lt;br /&gt;
       //     objectType: &amp;quot;locationNode&amp;quot;,&lt;br /&gt;
       //     serviceTag: &amp;quot;Locations&amp;quot;,&lt;br /&gt;
       //   },&lt;br /&gt;
       //   traversalSteps: [&lt;br /&gt;
       //     &amp;quot;uuid_traversal_1&amp;quot;,&lt;br /&gt;
       //     &amp;quot;uuid_traversal_2&amp;quot;,&lt;br /&gt;
       //   ]&lt;br /&gt;
       // }&lt;br /&gt;
    },&lt;br /&gt;
    traversalSteps: {&lt;br /&gt;
       uuid_traversal_1: {&lt;br /&gt;
		objType: {&lt;br /&gt;
			serviceTag: &amp;quot;Locations&amp;quot;,&lt;br /&gt;
			objectType: &amp;quot;localtionLink&amp;quot;&lt;br /&gt;
		},&lt;br /&gt;
		link: {&lt;br /&gt;
			relType: {&lt;br /&gt;
			  serviceTag: &amp;quot;Locations&amp;quot;,&lt;br /&gt;
			  relationshipTag: &amp;quot;hasLocationLink&amp;quot;&lt;br /&gt;
			},&lt;br /&gt;
			relationshipDirection: &amp;quot;to&amp;quot;&lt;br /&gt;
		},&lt;br /&gt;
		hopsPassObjType: true, //optional&lt;br /&gt;
		hopsEnd: 10, //optional  &lt;br /&gt;
       },&lt;br /&gt;
       uuid_traversal_2: {&lt;br /&gt;
        objType: {&lt;br /&gt;
			serviceTag: &amp;quot;Locations&amp;quot;,&lt;br /&gt;
			objectType: &amp;quot;locationNode&amp;quot;&lt;br /&gt;
		},&lt;br /&gt;
		link: {&lt;br /&gt;
			relType: {&lt;br /&gt;
			  serviceTag: &amp;quot;Locations&amp;quot;,&lt;br /&gt;
			  relationshipTag: &amp;quot;isLocationNode&amp;quot;&lt;br /&gt;
			},&lt;br /&gt;
			relationshipDirection: &amp;quot;to&amp;quot;&lt;br /&gt;
		},&lt;br /&gt;
		//* last traversal cannot set hopPassObjType&lt;br /&gt;
		hopsEnd: 10, //optional  &lt;br /&gt;
        fieldValueUserTags: [&lt;br /&gt;
        {&lt;br /&gt;
          categoryId: &amp;quot;valueD&amp;quot;&lt;br /&gt;
        },&lt;br /&gt;
        {&lt;br /&gt;
          categoryId: &amp;quot;valueA&amp;quot;&lt;br /&gt;
        },&lt;br /&gt;
        {&lt;br /&gt;
          price: &amp;quot;valueF&amp;quot;&lt;br /&gt;
        },&lt;br /&gt;
        {&lt;br /&gt;
          categoryId: &amp;quot;valueA&amp;quot;&lt;br /&gt;
        },&lt;br /&gt;
        {&lt;br /&gt;
          categoryId: &amp;quot;valueB&amp;quot;&lt;br /&gt;
        },&lt;br /&gt;
      ]&lt;br /&gt;
       }&lt;br /&gt;
    },&lt;br /&gt;
	requiredDataFields: [ //* linkStepObjects to create main sort result's requiredData and sortFields&lt;br /&gt;
        // not needed at tableConfig level because can be built from table's elements and sortFields before sending to lib that converts to backend structure&lt;br /&gt;
        &amp;quot;userTag_LinkStepObjectA&amp;quot;, // no link, field in main objType (structure same linkPath but only one step)&lt;br /&gt;
        &amp;quot;userTag_LinkStepObjectB&amp;quot;, // has link&lt;br /&gt;
	],&lt;br /&gt;
	complexFilterCombinations:{&lt;br /&gt;
		hash_complexFilterCombinationA: {&lt;br /&gt;
          objType: {&lt;br /&gt;
            serviceTag: &amp;quot;Locations&amp;quot;,&lt;br /&gt;
            objectType: &amp;quot;locationNode&amp;quot;&lt;br /&gt;
          },&lt;br /&gt;
          initialLogicalElementId: &amp;quot;child_complexFilter_localtionNode&amp;quot;,&lt;br /&gt;
          logicalElements: {&lt;br /&gt;
            child_complexFilter_localtionNode: {&lt;br /&gt;
              logicalElementType: &amp;quot;childComplexFilter&amp;quot;,&lt;br /&gt;
              previousLogicalElementId: null,&lt;br /&gt;
              nextLogicalElementId: null,&lt;br /&gt;
&lt;br /&gt;
              childLogicalElementId: &amp;quot;logical_locationNode&amp;quot;,&lt;br /&gt;
              objType: {&lt;br /&gt;
                serviceTag: &amp;quot;Locations&amp;quot;,&lt;br /&gt;
                objectType: &amp;quot;locationNode&amp;quot;&lt;br /&gt;
              },&lt;br /&gt;
              pathLinkType: {&lt;br /&gt;
                objType: {&lt;br /&gt;
                  serviceTag: &amp;quot;Locations&amp;quot;,&lt;br /&gt;
                  objectType: &amp;quot;locationNode&amp;quot;&lt;br /&gt;
                },&lt;br /&gt;
                relType: {&lt;br /&gt;
                  serviceTag: &amp;quot;Locations&amp;quot;,&lt;br /&gt;
                  relationshipTag: &amp;quot;hasParentLocationNode&amp;quot;&lt;br /&gt;
                },&lt;br /&gt;
                direction: &amp;quot;to&amp;quot;&lt;br /&gt;
              },&lt;br /&gt;
            },&lt;br /&gt;
            logical_locationNode: {&lt;br /&gt;
               logicalElementType: &amp;quot;logical&amp;quot;,&lt;br /&gt;
               previousLogicalElementId: &amp;quot;child_complexFilter_localtionNode&amp;quot;,&lt;br /&gt;
               nextLogicalElementId: null,&lt;br /&gt;
&lt;br /&gt;
               objType: {&lt;br /&gt;
                serviceTag: &amp;quot;Locations&amp;quot;,&lt;br /&gt;
                objectType: &amp;quot;locationNode&amp;quot;&lt;br /&gt;
               },&lt;br /&gt;
                partitionKeyValueUserTags: {&lt;br /&gt;
                   locationNodeId: &amp;quot;userTag_7&amp;quot;,&lt;br /&gt;
                },&lt;br /&gt;
                // sortKeyValueUserTags: {&lt;br /&gt;
                //    productId: &amp;quot;valueB&amp;quot;,&lt;br /&gt;
                // },&lt;br /&gt;
                // comparison: &amp;quot;equals&amp;quot;,&lt;br /&gt;
                // conditionalFieldValues: [&lt;br /&gt;
                //  {&lt;br /&gt;
                //    fieldname: &amp;quot;language&amp;quot;,&lt;br /&gt;
                //   includeValueUserTags: [&amp;quot;th&amp;quot;],&lt;br /&gt;
                //    // excludeValueUserTags: [&amp;quot;xx&amp;quot;,&amp;quot;sdd&amp;quot;]&lt;br /&gt;
                //  }&lt;br /&gt;
                // ]&lt;br /&gt;
            }&lt;br /&gt;
         }&lt;br /&gt;
       },&lt;br /&gt;
	},&lt;br /&gt;
	perParentCombinations:{&lt;br /&gt;
		hash_perParentCombinationA: {&lt;br /&gt;
          objType: {&lt;br /&gt;
            serviceTag: &amp;quot;SellOfferPlan&amp;quot;,&lt;br /&gt;
            objectType: &amp;quot;sellOfferPlan&amp;quot;&lt;br /&gt;
          },&lt;br /&gt;
          initialLogicalElementId: &amp;quot;child_complexFilter_1&amp;quot;,&lt;br /&gt;
          logicalElements: {&lt;br /&gt;
            child_complexFilter_1: {&lt;br /&gt;
              logicalElementType: &amp;quot;childComplexFilter&amp;quot;,&lt;br /&gt;
              previousLogicalElementId: null,&lt;br /&gt;
              nextLogicalElementId: null,&lt;br /&gt;
&lt;br /&gt;
              childLogicalElementId: &amp;quot;logical_sellOffer&amp;quot;,&lt;br /&gt;
              objType: {&lt;br /&gt;
                serviceTag: &amp;quot;SellOfferPlan&amp;quot;,&lt;br /&gt;
                objectType: &amp;quot;sellOfferPlan&amp;quot;&lt;br /&gt;
              },&lt;br /&gt;
              pathLinkType: {&lt;br /&gt;
                objType: {&lt;br /&gt;
                  serviceTag: &amp;quot;SellOfferManager&amp;quot;,&lt;br /&gt;
                  objectType: &amp;quot;sellOffer&amp;quot;&lt;br /&gt;
                }, &lt;br /&gt;
                relType: {&lt;br /&gt;
                  serviceTag: &amp;quot;SellOfferManager&amp;quot;,&lt;br /&gt;
                  relationshipTag: &amp;quot;usesSellOfferPlan&amp;quot;&lt;br /&gt;
                },&lt;br /&gt;
                direction: &amp;quot;to&amp;quot;&lt;br /&gt;
              },&lt;br /&gt;
              requestProperties: {&lt;br /&gt;
                tag_orderQuantity: &amp;quot;userTag_9&amp;quot;&lt;br /&gt;
              }&lt;br /&gt;
           },&lt;br /&gt;
           logical_sellOffer: {&lt;br /&gt;
              logicalElementType: &amp;quot;logical&amp;quot;,&lt;br /&gt;
              previousLogicalElementId: &amp;quot;child_complexFilter_1&amp;quot;,&lt;br /&gt;
              nextLogicalElementId: null,&lt;br /&gt;
&lt;br /&gt;
              objType: {&lt;br /&gt;
                serviceTag: &amp;quot;SellOfferManager&amp;quot;,&lt;br /&gt;
                objectType: &amp;quot;sellOffer&amp;quot;&lt;br /&gt;
              },&lt;br /&gt;
               partitionKeyValueUserTags: {&lt;br /&gt;
                   sellOfferId: &amp;quot;userTag_8&amp;quot;,&lt;br /&gt;
               },&lt;br /&gt;
               // sortKeyValueUserTags: {&lt;br /&gt;
               //    productId: &amp;quot;valueB&amp;quot;,&lt;br /&gt;
               // },&lt;br /&gt;
               // comparison: &amp;quot;equals&amp;quot;,&lt;br /&gt;
               // conditionalFieldValues: [&lt;br /&gt;
               //  {&lt;br /&gt;
               //    fieldname: &amp;quot;language&amp;quot;,&lt;br /&gt;
               //   includeValueUserTags: [&amp;quot;th&amp;quot;],&lt;br /&gt;
               //    // excludeValueUserTags: [&amp;quot;xx&amp;quot;,&amp;quot;sdd&amp;quot;]&lt;br /&gt;
               //  }&lt;br /&gt;
               // ]&lt;br /&gt;
           }&lt;br /&gt;
        }&lt;br /&gt;
      },&lt;br /&gt;
	},&lt;br /&gt;
	requiredDataLinkStepObjects: {&lt;br /&gt;
		userTag_LinkStepObjectA: { //* requiredData no linkPath&lt;br /&gt;
			initialObjType: { //* main objType&lt;br /&gt;
				serviceTag: &amp;quot;ProductManager&amp;quot;,&lt;br /&gt;
				objectType: &amp;quot;Product&amp;quot;&lt;br /&gt;
			},&lt;br /&gt;
			linkSteps: [&amp;quot;hash_linkStepA_1&amp;quot;],&lt;br /&gt;
		},&lt;br /&gt;
        userTag_LinkStepObjectB: { // requiredDataFields for finding max orderTotal&lt;br /&gt;
            initialObjType: { //* main objType&lt;br /&gt;
				serviceTag: &amp;quot;ProductManager&amp;quot;,&lt;br /&gt;
				objectType: &amp;quot;Product&amp;quot;&lt;br /&gt;
			},&lt;br /&gt;
			linkSteps: [&amp;quot;hash_linkStepB_1&amp;quot;, &amp;quot;hash_linkStepB_2&amp;quot;, &amp;quot;hash_linkStepB_3&amp;quot;],&lt;br /&gt;
        }&lt;br /&gt;
        // userTag_LinkStepObjectC&lt;br /&gt;
        // userTag_LinkStepObjectD&lt;br /&gt;
	},&lt;br /&gt;
	requiredDataLinkSteps: {&lt;br /&gt;
		hash_linkStepA_1:{&lt;br /&gt;
          fieldName: &amp;quot;xxx&amp;quot; &lt;br /&gt;
        },&lt;br /&gt;
        hash_linkStepB_1:{&lt;br /&gt;
          pathLinkType: {&lt;br /&gt;
             objType: {&lt;br /&gt;
               serviceTag: &amp;quot;SellOfferManager&amp;quot;,&lt;br /&gt;
               objectType: &amp;quot;SellOffer&amp;quot;&lt;br /&gt;
             },&lt;br /&gt;
             relType: {&lt;br /&gt;
               serviceTag: &amp;quot;ProductManager&amp;quot;,&lt;br /&gt;
               relationshipTag: &amp;quot;hasSellOffer&amp;quot;&lt;br /&gt;
             },&lt;br /&gt;
             direction: &amp;quot;to&amp;quot;,&lt;br /&gt;
          },&lt;br /&gt;
           addFilterMain: true, //default: false =&amp;gt; need to add filterMain set = true&lt;br /&gt;
           filterElements: { //* filter in linkPath&lt;br /&gt;
             objType: {&lt;br /&gt;
               serviceTag: &amp;quot;SellOfferManager&amp;quot;,&lt;br /&gt;
               objectType: &amp;quot;SellOffer&amp;quot;&lt;br /&gt;
             },&lt;br /&gt;
             initialLogicalElementId: &amp;quot;logical_sellOffer_in_link&amp;quot;,&lt;br /&gt;
             logicalElements: {&lt;br /&gt;
               logical_sellOffer_in_link: {&lt;br /&gt;
                  logicalElementType: &amp;quot;logical&amp;quot;,&lt;br /&gt;
                  previousLogicalElementId: null,&lt;br /&gt;
                  nextLogicalElementId: null,&lt;br /&gt;
&lt;br /&gt;
                  objType: {&lt;br /&gt;
                    serviceTag: &amp;quot;SellOfferManager&amp;quot;,&lt;br /&gt;
                    objectType: &amp;quot;SellOffer&amp;quot;&lt;br /&gt;
                  },&lt;br /&gt;
                  partitionKeyValueUserTags: {&lt;br /&gt;
                     sellOfferId: &amp;quot;userTag_8&amp;quot;,&lt;br /&gt;
                  },&lt;br /&gt;
                  // sortKeyValueUserTags: {&lt;br /&gt;
                  //    productId: &amp;quot;valueB&amp;quot;,&lt;br /&gt;
                  // },&lt;br /&gt;
                  // comparison: &amp;quot;equals&amp;quot;,&lt;br /&gt;
                  conditionalFieldValues: [&lt;br /&gt;
                    {&lt;br /&gt;
                      fieldname: &amp;quot;userId&amp;quot;,&lt;br /&gt;
                      includeValueUserTags: [&amp;quot;userTag_2&amp;quot;], // &lt;br /&gt;
                      // excludeValueUserTags: [&amp;quot;xx&amp;quot;,&amp;quot;sdd&amp;quot;]&lt;br /&gt;
                    }&lt;br /&gt;
                   ]&lt;br /&gt;
               }&lt;br /&gt;
            }&lt;br /&gt;
          },&lt;br /&gt;
&lt;br /&gt;
        }, &lt;br /&gt;
        hash_linkStepB_2: {&lt;br /&gt;
           pathLinkType: {&lt;br /&gt;
             objType: {&lt;br /&gt;
               serviceTag: &amp;quot;OrderPrice&amp;quot;,&lt;br /&gt;
               objectType: &amp;quot;OrderPrice&amp;quot;&lt;br /&gt;
             },&lt;br /&gt;
             relType: {&lt;br /&gt;
               serviceTag: &amp;quot;sellOfferStandard&amp;quot;,&lt;br /&gt;
               relationshipTag: &amp;quot;hasOrderPrice&amp;quot;&lt;br /&gt;
             },&lt;br /&gt;
             direction: &amp;quot;to&amp;quot;,&lt;br /&gt;
           },&lt;br /&gt;
          requestProperties: {&lt;br /&gt;
            tag_deliverTo: &amp;quot;userTag_3&amp;quot;,&lt;br /&gt;
            tag_sellOfferPlan: &amp;quot;userTag_4&amp;quot;,&lt;br /&gt;
            // tag_sellOfferPlanDeliveryMethodLink: &amp;quot;userTag_5&amp;quot;,&lt;br /&gt;
            // tag_sellOfferPlanUserPaymentMethodLink: &amp;quot;userTag_6&amp;quot;&lt;br /&gt;
          }&lt;br /&gt;
          aggregate: &amp;quot;max&amp;quot;,&lt;br /&gt;
          sortFields: [&lt;br /&gt;
       			{&lt;br /&gt;
            		requiredDataLinkStepObjectId: &amp;quot;userTag_LinkStepObjectC&amp;quot;,&lt;br /&gt;
		            dataType: &amp;quot;number&amp;quot;,&lt;br /&gt;
                    sortOrder: &amp;quot;ascending&amp;quot;|&amp;quot;descending&amp;quot;&lt;br /&gt;
        		},&lt;br /&gt;
				{&lt;br /&gt;
        		     requiredDataLinkStepObjectId: &amp;quot;userTag_LinkStepObjectD&amp;quot;,&lt;br /&gt;
		             dataType: &amp;quot;string&amp;quot;,&lt;br /&gt;
                     sortOrder: &amp;quot;ascending&amp;quot;|&amp;quot;descending&amp;quot;&lt;br /&gt;
		         },&lt;br /&gt;
                {&lt;br /&gt;
        		     requiredDataLinkStepObjectId: &amp;quot;userTag_LinkStepObjectD&amp;quot;,&lt;br /&gt;
		             dataType: &amp;quot;array&amp;quot;,&lt;br /&gt;
                     sortByValueUserTags:[&amp;quot;userTag_1&amp;quot;,&amp;quot;userTag_2&amp;quot;],&lt;br /&gt;
                     sortOrder: &amp;quot;ascending&amp;quot;|&amp;quot;descending&amp;quot;&lt;br /&gt;
		        }&lt;br /&gt;
            ],&lt;br /&gt;
          comparison: &amp;quot;greaterThan&amp;quot;,&lt;br /&gt;
          comparisonSortField: &amp;quot;upToValue&amp;quot;,&lt;br /&gt;
          comparisonSortDataType: &amp;quot;string&amp;quot;,&lt;br /&gt;
          comparisonValue: &amp;quot;userTag_2&amp;quot;,&lt;br /&gt;
        }, &lt;br /&gt;
        hash_linkStepB_3: {&lt;br /&gt;
           fieldName: &amp;quot;zzz&amp;quot;,&lt;br /&gt;
        }&lt;br /&gt;
	},&lt;br /&gt;
	sortFields: [&lt;br /&gt;
        {&lt;br /&gt;
             requiredDataLinkStepObjectId: &amp;quot;userTag_LinkStepObjectB&amp;quot;,&lt;br /&gt;
             dataType: &amp;quot;number&amp;quot;,&lt;br /&gt;
             sortOrder: &amp;quot;ascending&amp;quot;|&amp;quot;descending&amp;quot;&lt;br /&gt;
        },&lt;br /&gt;
		{&lt;br /&gt;
             requiredDataLinkStepObjectId: &amp;quot;userTag_LinkStepObjectA&amp;quot;,&lt;br /&gt;
             dataType: &amp;quot;string&amp;quot;,&lt;br /&gt;
             sortOrder: &amp;quot;ascending&amp;quot;|&amp;quot;descending&amp;quot;&lt;br /&gt;
         },&lt;br /&gt;
        {&lt;br /&gt;
             requiredDataLinkStepObjectId: &amp;quot;userTag_LinkStepObjectD&amp;quot;,&lt;br /&gt;
		     dataType: &amp;quot;array&amp;quot;,&lt;br /&gt;
             sortByValueUserTags:[&amp;quot;userTag_1&amp;quot;,&amp;quot;userTag_2&amp;quot;],&lt;br /&gt;
             sortOrder: &amp;quot;ascending&amp;quot;|&amp;quot;descending&amp;quot;&lt;br /&gt;
		}&lt;br /&gt;
    ],&lt;br /&gt;
	valueUserTags: {&lt;br /&gt;
		userTag_1:{&lt;br /&gt;
			value: &amp;quot;xx&amp;quot;,&lt;br /&gt;
		},&lt;br /&gt;
		userTag_2:{&lt;br /&gt;
			value: &amp;quot;yy&amp;quot;,&lt;br /&gt;
		},&lt;br /&gt;
		userTag_3:{&lt;br /&gt;
			valueSource: &amp;quot;complexFilterCombination&amp;quot;,&lt;br /&gt;
            complexFilterCombinationId: &amp;quot;hash_complexFilterCombinationA&amp;quot;,&lt;br /&gt;
		},&lt;br /&gt;
		userTag_4:{&lt;br /&gt;
			valueSource: &amp;quot;perParentCombination&amp;quot;,&lt;br /&gt;
            perParentCombinationId: &amp;quot;hash_perParentCombinationA&amp;quot;,&lt;br /&gt;
		},&lt;br /&gt;
		userTag_7: {&lt;br /&gt;
          value: &amp;quot;zz&amp;quot;,&lt;br /&gt;
        },&lt;br /&gt;
        userTag_8: {&lt;br /&gt;
          valueSource: 'perParentIdentifier',&lt;br /&gt;
          perParentIdentifierFieldname: 'sellOfferId'&lt;br /&gt;
        },&lt;br /&gt;
        userTag_9: {&lt;br /&gt;
          value: 2,&lt;br /&gt;
        },&lt;br /&gt;
	 }&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[Category:Working documents| 2025-04-14]]&lt;br /&gt;
[[Category:Working documents - Search Results| 2025-04-14]]&lt;/div&gt;</summary>
		<author><name>Rut</name></author>
	</entry>
	<entry>
		<id>https://izara.io/wiki/index.php?title=2025-04-14_-_Frontend_LinkPath_structure_for_tableOutput&amp;diff=4075</id>
		<title>2025-04-14 - Frontend LinkPath structure for tableOutput</title>
		<link rel="alternate" type="text/html" href="https://izara.io/wiki/index.php?title=2025-04-14_-_Frontend_LinkPath_structure_for_tableOutput&amp;diff=4075"/>
		<updated>2026-01-30T10:15:19Z</updated>

		<summary type="html">&lt;p&gt;Rut: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Service - Search Results]]&lt;br /&gt;
&lt;br /&gt;
= Overview =&lt;br /&gt;
&lt;br /&gt;
Structure frontend TableConfig and Output prepare for shared library that creates complexFilter and requestProperties&lt;br /&gt;
&lt;br /&gt;
= Example params in tableConfig =&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;JavaScript&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
let paramFromTableOutput = {&lt;br /&gt;
&lt;br /&gt;
	// .. other properties same as params sent to backend&lt;br /&gt;
	// requiredDataFields not needed in tableConfig as referenced in elements and sortFields&lt;br /&gt;
	// header/footer filterDataField elements reference valueUserTag&lt;br /&gt;
&lt;br /&gt;
	&amp;quot;elements&amp;quot;: {&lt;br /&gt;
		// shared types&lt;br /&gt;
		&amp;quot;elementId12&amp;quot;:{&lt;br /&gt;
			&amp;quot;elementType&amp;quot;: &amp;quot;freetext&amp;quot;,&lt;br /&gt;
			&amp;quot;value&amp;quot;: &amp;quot;aa&amp;quot;&lt;br /&gt;
		}&lt;br /&gt;
&lt;br /&gt;
		// headerFooter types&lt;br /&gt;
		&amp;quot;elementId1&amp;quot;:{&lt;br /&gt;
			&amp;quot;elementType&amp;quot;: &amp;quot;valueUserTag&amp;quot;,&lt;br /&gt;
			&amp;quot;valueUserTag&amp;quot;: &amp;quot;userTag_9&amp;quot;,&lt;br /&gt;
			&amp;quot;inputType&amp;quot;: &amp;quot;text&amp;quot; // || &amp;quot;select&amp;quot; || &amp;quot;checkbox&amp;quot; || &amp;quot;radio&amp;quot; ,&lt;br /&gt;
		},&lt;br /&gt;
		&amp;quot;elementId2&amp;quot;:{&lt;br /&gt;
			&amp;quot;elementType&amp;quot;: &amp;quot;valueUserTag&amp;quot;,&lt;br /&gt;
			&amp;quot;inputType&amp;quot;: &amp;quot;select&amp;quot;,&lt;br /&gt;
			&amp;quot;options&amp;quot;: [&lt;br /&gt;
	         {&lt;br /&gt;
               optionText:&amp;quot;option1&amp;quot;,&lt;br /&gt;
               valueUserTag:{ &lt;br /&gt;
                 userTag_1:&amp;quot;valueA&amp;quot;, //value not ref valueUserTag&lt;br /&gt;
                 userTag_2:&amp;quot;valueB&amp;quot; &lt;br /&gt;
              },&lt;br /&gt;
	         {&lt;br /&gt;
               optionText:&amp;quot;option2&amp;quot;,&lt;br /&gt;
               valueUserTag:{ &lt;br /&gt;
                 userTag_9:&amp;quot;valueC&amp;quot; &lt;br /&gt;
&lt;br /&gt;
              },&lt;br /&gt;
			],&lt;br /&gt;
		},&lt;br /&gt;
        &amp;quot;elementId21&amp;quot;:{&lt;br /&gt;
			&amp;quot;elementType&amp;quot;: &amp;quot;valueUserTag&amp;quot;,&lt;br /&gt;
			&amp;quot;inputType&amp;quot;: &amp;quot;checkbox&amp;quot;,&lt;br /&gt;
			&amp;quot;onSetting:{&lt;br /&gt;
               optionText:&amp;quot;on&amp;quot;,&lt;br /&gt;
               valueUserTag:{ &lt;br /&gt;
                 userTag_1:&amp;quot;valueA&amp;quot;, //value not ref valueUserTag&lt;br /&gt;
                 userTag_2:&amp;quot;valueB&amp;quot; &lt;br /&gt;
&lt;br /&gt;
              },&lt;br /&gt;
             },&lt;br /&gt;
             &amp;quot;offSetting&amp;quot;:{&lt;br /&gt;
               optionText:&amp;quot;off&amp;quot;,&lt;br /&gt;
               valueUserTag:{ &lt;br /&gt;
                 userTag_9:&amp;quot;valueC&amp;quot; &lt;br /&gt;
&lt;br /&gt;
              },&lt;br /&gt;
             },&lt;br /&gt;
		   &lt;br /&gt;
           &lt;br /&gt;
		},&lt;br /&gt;
		&amp;quot;elementId3&amp;quot;:{&lt;br /&gt;
			&amp;quot;elementType&amp;quot;: &amp;quot;sort&amp;quot;,&lt;br /&gt;
			&amp;quot;display&amp;quot;: &amp;quot;downArrow&amp;quot;, // || upArrow&lt;br /&gt;
			&amp;quot;requiredDataLinkStepObjectId&amp;quot;: &amp;quot;userTag_LinkStepObjectC&amp;quot;,&lt;br /&gt;
			&amp;quot;dataType&amp;quot;: &amp;quot;number&amp;quot;, // &amp;quot;number&amp;quot; | &amp;quot;string&amp;quot;&lt;br /&gt;
			&amp;quot;sortOrder&amp;quot;: &amp;quot;ascending&amp;quot; // &amp;quot;ascending&amp;quot;|&amp;quot;descending&amp;quot; (default ascending)&lt;br /&gt;
		},&lt;br /&gt;
		&amp;quot;elementId4&amp;quot;:{&lt;br /&gt;
			&amp;quot;elementType&amp;quot;: &amp;quot;numberOfRows&amp;quot;,&lt;br /&gt;
			&amp;quot;selection&amp;quot;: &amp;quot;input&amp;quot; // || list&lt;br /&gt;
		},&lt;br /&gt;
		&amp;quot;elementId6&amp;quot;:{&lt;br /&gt;
			&amp;quot;elementType&amp;quot;: &amp;quot;submit&amp;quot;,&lt;br /&gt;
			&amp;quot;display&amp;quot;: &amp;quot;submit&amp;quot;, // any text to be shown&lt;br /&gt;
			&amp;quot;sendRequest&amp;quot;: &amp;quot;all&amp;quot; // numberOfRows || all || filters&lt;br /&gt;
		},&lt;br /&gt;
		&amp;quot;elementId7&amp;quot;:{&lt;br /&gt;
			&amp;quot;elementType&amp;quot;: &amp;quot;reset&amp;quot;,&lt;br /&gt;
			&amp;quot;display&amp;quot;: &amp;quot;reset rows&amp;quot;, // any text to be shown&lt;br /&gt;
			&amp;quot;sendRequest&amp;quot;: &amp;quot;numberOfRows&amp;quot; // numberOfRows || all || filters&lt;br /&gt;
		},&lt;br /&gt;
		&amp;quot;elementId9&amp;quot;:{&lt;br /&gt;
			&amp;quot;elementType&amp;quot;: &amp;quot;totalDatafield&amp;quot;,&lt;br /&gt;
			&amp;quot;requiredDataLinkStepObjectId&amp;quot;: &amp;quot;link1&amp;quot;,&lt;br /&gt;
			&amp;quot;showIfNotAllRowsLoaded&amp;quot;: true // || false&lt;br /&gt;
		},&lt;br /&gt;
		&amp;quot;elementId11&amp;quot;:{&lt;br /&gt;
			// will need to link to per record check box&lt;br /&gt;
			&amp;quot;elementType&amp;quot;: &amp;quot;bulkAction&amp;quot;,&lt;br /&gt;
			&amp;quot;action&amp;quot;: &amp;quot;on&amp;quot; // on | off | switch&lt;br /&gt;
			&amp;quot;bulkActionUserTag&amp;quot;: &amp;quot;tagA&amp;quot;, // have normalized list of bulkActionTags, with list of &amp;quot;bulkAction&amp;quot; and &amp;quot;bulkActionCheckBox&amp;quot; elements linked to it&lt;br /&gt;
		},&lt;br /&gt;
		&amp;quot;elementId8&amp;quot;:{&lt;br /&gt;
			&amp;quot;elementType&amp;quot;: &amp;quot;pageNumbers&amp;quot;,&lt;br /&gt;
			&amp;quot;linksAfter&amp;quot;: [&lt;br /&gt;
				{&lt;br /&gt;
					&amp;quot;action&amp;quot;: &amp;quot;jumpNumberOfPages&amp;quot;,&lt;br /&gt;
					&amp;quot;jumpPages&amp;quot;: 7,&lt;br /&gt;
					&amp;quot;string&amp;quot;: &amp;quot;..&amp;quot;&lt;br /&gt;
				},&lt;br /&gt;
				{&lt;br /&gt;
					&amp;quot;action&amp;quot;: &amp;quot;jumpNumberOfPages&amp;quot;,&lt;br /&gt;
					&amp;quot;jumpPages&amp;quot;: 1,&lt;br /&gt;
					&amp;quot;string&amp;quot;: &amp;quot;&amp;gt;&amp;quot;&lt;br /&gt;
				},&lt;br /&gt;
				{&lt;br /&gt;
					&amp;quot;action&amp;quot;: &amp;quot;goToLastPage&amp;quot;,&lt;br /&gt;
					&amp;quot;hideWhenLastPageShown&amp;quot;: true,&lt;br /&gt;
					&amp;quot;string&amp;quot;: &amp;quot;&amp;gt;&amp;gt;&amp;quot;&lt;br /&gt;
				}&lt;br /&gt;
			],&lt;br /&gt;
			&amp;quot;linksBefore&amp;quot;: [&lt;br /&gt;
				{&lt;br /&gt;
					&amp;quot;action&amp;quot;: &amp;quot;goToFirstPage&amp;quot;,&lt;br /&gt;
					&amp;quot;hideWhenFirstPageShown&amp;quot;: true,&lt;br /&gt;
					&amp;quot;string&amp;quot;: &amp;quot;&amp;lt;&amp;lt;&amp;quot;&lt;br /&gt;
				},&lt;br /&gt;
				{&lt;br /&gt;
					&amp;quot;action&amp;quot;: &amp;quot;jumpNumberOfPages&amp;quot;,&lt;br /&gt;
					&amp;quot;jumpPages&amp;quot;: 1,&lt;br /&gt;
					&amp;quot;string&amp;quot;: &amp;quot;&amp;lt;&amp;quot;&lt;br /&gt;
				},&lt;br /&gt;
				{&lt;br /&gt;
					&amp;quot;action&amp;quot;: &amp;quot;jumpNumberOfPages&amp;quot;,&lt;br /&gt;
					&amp;quot;jumpPages&amp;quot;: 7,&lt;br /&gt;
					&amp;quot;string&amp;quot;: &amp;quot;..&amp;quot;&lt;br /&gt;
				}&lt;br /&gt;
			],&lt;br /&gt;
			&amp;quot;showPagesAfter&amp;quot;: 3,&lt;br /&gt;
			&amp;quot;showPagesBefore&amp;quot;: 3&lt;br /&gt;
		},&lt;br /&gt;
		&lt;br /&gt;
		// records types    &lt;br /&gt;
		&amp;quot;elementId5&amp;quot;:{&lt;br /&gt;
			&amp;quot;elementType&amp;quot;: &amp;quot;requiredDataLinkStepObject&amp;quot;, // in record&lt;br /&gt;
			&amp;quot;requiredDataLinkStepObjectId&amp;quot;: &amp;quot;link1&amp;quot;,&lt;br /&gt;
		},&lt;br /&gt;
		&amp;quot;elementIdxx&amp;quot;:{&lt;br /&gt;
			&amp;quot;elementType&amp;quot;: &amp;quot;bulkActionCheckBox&amp;quot;,&lt;br /&gt;
			&amp;quot;bulkActionUserTag&amp;quot;: &amp;quot;tagA&amp;quot;,&lt;br /&gt;
		},&lt;br /&gt;
	},&lt;br /&gt;
	&lt;br /&gt;
	values: {&lt;br /&gt;
		// values are shared between requestProperties and filter values. This set can be iterated to overwrite values using userTag to identify&lt;br /&gt;
		userTag_1:{&lt;br /&gt;
			defaultValue: &amp;quot;xx&amp;quot;,&lt;br /&gt;
		},&lt;br /&gt;
		userTag_2:{&lt;br /&gt;
			defaultValue: &amp;quot;xx&amp;quot;,&lt;br /&gt;
		},&lt;br /&gt;
		userTag_3:{&lt;br /&gt;
			defaultValue: &amp;quot;xx&amp;quot;,&lt;br /&gt;
		},&lt;br /&gt;
		userTag_4:{&lt;br /&gt;
			defaultValue: &amp;quot;xx&amp;quot;,&lt;br /&gt;
		},&lt;br /&gt;
		userTag_5:{&lt;br /&gt;
			defaultValue: &amp;quot;xx&amp;quot;,&lt;br /&gt;
		},&lt;br /&gt;
		userTag_6:{&lt;br /&gt;
			valueSource: &amp;quot;complexFilterCombination&amp;quot;,&lt;br /&gt;
            complexFilterCombinationId: &amp;quot;hash_complexFilterCombinationA&amp;quot;,&lt;br /&gt;
		},&lt;br /&gt;
		userTag_7:{&lt;br /&gt;
			valueSource: &amp;quot;perParentCombination&amp;quot;,&lt;br /&gt;
            perParentCombinationId: &amp;quot;hash_perParentCombinationA&amp;quot;,&lt;br /&gt;
		},&lt;br /&gt;
        userTag_8: {&lt;br /&gt;
            valueSource: 'perParentIdentifier',&lt;br /&gt;
            perParentIdentifierFieldname: 'sellOfferId'&lt;br /&gt;
        },,&lt;br /&gt;
		userTag_9:{&lt;br /&gt;
			defaultValue: &amp;quot;xx&amp;quot;,&lt;br /&gt;
		},&lt;br /&gt;
		userTag_10:{&lt;br /&gt;
			defaultValue: &amp;quot;xx&amp;quot;,&lt;br /&gt;
		},&lt;br /&gt;
		userTag_11:{&lt;br /&gt;
			defaultValue: &amp;quot;xx&amp;quot;,&lt;br /&gt;
		},&lt;br /&gt;
	},&lt;br /&gt;
&lt;br /&gt;
	bulkActionUserTags: {&lt;br /&gt;
		tagA:{&lt;br /&gt;
			bulkActions: [&lt;br /&gt;
                &amp;quot;elementId11&amp;quot;,&lt;br /&gt;
                // ...&lt;br /&gt;
            ],&lt;br /&gt;
            bulkActionCheckBoxes: [&lt;br /&gt;
                &amp;quot;elementIdxx&amp;quot;,&lt;br /&gt;
                // ...&lt;br /&gt;
            ],&lt;br /&gt;
		},&lt;br /&gt;
        // ...&lt;br /&gt;
	},&lt;br /&gt;
&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= Example params sent to backend =&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;JavaScript&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
let paramFromTableOutput = {&lt;br /&gt;
	objType: { //* main objType&lt;br /&gt;
		serviceTag: &amp;quot;ProductManager&amp;quot;,&lt;br /&gt;
		objectType: &amp;quot;Product&amp;quot;&lt;br /&gt;
	},&lt;br /&gt;
    initialLogicalElementId: &amp;quot;uuid_logical_1&amp;quot;,&lt;br /&gt;
    logicalElements: {&lt;br /&gt;
       uuid_logical_1: {&lt;br /&gt;
         logicalElementType: &amp;quot;logical&amp;quot;,&lt;br /&gt;
         previousLogicalElementId: null,&lt;br /&gt;
         nextLogicalElementId: null,&lt;br /&gt;
&lt;br /&gt;
         objType: {&lt;br /&gt;
           serviceTag: &amp;quot;ProductManager&amp;quot;,&lt;br /&gt;
           objectType: &amp;quot;product&amp;quot;&lt;br /&gt;
         },&lt;br /&gt;
         fieldName: &amp;quot;productId&amp;quot;,&lt;br /&gt;
         comparison: &amp;quot;equals&amp;quot;,&lt;br /&gt;
         valueUserTag: &amp;quot;userTag_1&amp;quot;&lt;br /&gt;
       }&lt;br /&gt;
    },&lt;br /&gt;
	requiredDataFields: [ //* linkStepObjects to create main sort result's requiredData and sortFields&lt;br /&gt;
        // not needed at tableConfig level because can be built from table's elements and sortFields before sending to lib that converts to backend structure&lt;br /&gt;
        &amp;quot;userTag_LinkStepObjectA&amp;quot;, // no link, field in main objType (structure same linkPath but only one step)&lt;br /&gt;
        &amp;quot;userTag_LinkStepObjectB&amp;quot;, // has link&lt;br /&gt;
	],&lt;br /&gt;
	complexFilterCombinations:{&lt;br /&gt;
		hash_complexFilterCombinationA: {&lt;br /&gt;
          objType: {&lt;br /&gt;
            serviceTag: &amp;quot;Locations&amp;quot;,&lt;br /&gt;
            objectType: &amp;quot;locationNode&amp;quot;&lt;br /&gt;
          },&lt;br /&gt;
          initialLogicalElementId: &amp;quot;child_complexFilter_localtionNode&amp;quot;,&lt;br /&gt;
          logicalElements: {&lt;br /&gt;
            child_complexFilter_localtionNode: {&lt;br /&gt;
              logicalElementType: &amp;quot;childComplexFilter&amp;quot;,&lt;br /&gt;
              previousLogicalElementId: null,&lt;br /&gt;
              nextLogicalElementId: null,&lt;br /&gt;
&lt;br /&gt;
              childLogicalElementId: &amp;quot;logical_locationNode&amp;quot;,&lt;br /&gt;
              objType: {&lt;br /&gt;
                serviceTag: &amp;quot;Locations&amp;quot;,&lt;br /&gt;
                objectType: &amp;quot;locationNode&amp;quot;&lt;br /&gt;
              },&lt;br /&gt;
              pathLinkType: {&lt;br /&gt;
                objType: {&lt;br /&gt;
                  serviceTag: &amp;quot;Locations&amp;quot;,&lt;br /&gt;
                  objectType: &amp;quot;locationNode&amp;quot;&lt;br /&gt;
                },&lt;br /&gt;
                relType: {&lt;br /&gt;
                  serviceTag: &amp;quot;Locations&amp;quot;,&lt;br /&gt;
                  relationshipTag: &amp;quot;hasParentLocationNode&amp;quot;&lt;br /&gt;
                },&lt;br /&gt;
                direction: &amp;quot;to&amp;quot;&lt;br /&gt;
              },&lt;br /&gt;
            },&lt;br /&gt;
            logical_locationNode: {&lt;br /&gt;
               logicalElementType: &amp;quot;logical&amp;quot;,&lt;br /&gt;
               previousLogicalElementId: &amp;quot;child_complexFilter_localtionNode&amp;quot;,&lt;br /&gt;
               nextLogicalElementId: null,&lt;br /&gt;
&lt;br /&gt;
               objType: {&lt;br /&gt;
                serviceTag: &amp;quot;Locations&amp;quot;,&lt;br /&gt;
                objectType: &amp;quot;locationNode&amp;quot;&lt;br /&gt;
               },&lt;br /&gt;
               fieldName: &amp;quot;locationNodeId&amp;quot;,&lt;br /&gt;
               comparison: &amp;quot;equals&amp;quot;,&lt;br /&gt;
               valueUserTag: &amp;quot;userTag_7&amp;quot;&lt;br /&gt;
            }&lt;br /&gt;
         }&lt;br /&gt;
       },&lt;br /&gt;
	},&lt;br /&gt;
	perParentCombinations:{&lt;br /&gt;
		hash_perParentCombinationA: {&lt;br /&gt;
          objType: {&lt;br /&gt;
            serviceTag: &amp;quot;SellOfferPlan&amp;quot;,&lt;br /&gt;
            objectType: &amp;quot;sellOfferPlan&amp;quot;&lt;br /&gt;
          },&lt;br /&gt;
          initialLogicalElementId: &amp;quot;child_complexFilter_1&amp;quot;,&lt;br /&gt;
          logicalElements: {&lt;br /&gt;
            child_complexFilter_1: {&lt;br /&gt;
              logicalElementType: &amp;quot;childComplexFilter&amp;quot;,&lt;br /&gt;
              previousLogicalElementId: null,&lt;br /&gt;
              nextLogicalElementId: null,&lt;br /&gt;
&lt;br /&gt;
              childLogicalElementId: &amp;quot;logical_sellOffer&amp;quot;,&lt;br /&gt;
              objType: {&lt;br /&gt;
                serviceTag: &amp;quot;SellOfferPlan&amp;quot;,&lt;br /&gt;
                objectType: &amp;quot;sellOfferPlan&amp;quot;&lt;br /&gt;
              },&lt;br /&gt;
              pathLinkType: {&lt;br /&gt;
                objType: {&lt;br /&gt;
                  serviceTag: &amp;quot;SellOfferManager&amp;quot;,&lt;br /&gt;
                  objectType: &amp;quot;sellOffer&amp;quot;&lt;br /&gt;
                }, &lt;br /&gt;
                relType: {&lt;br /&gt;
                  serviceTag: &amp;quot;SellOfferManager&amp;quot;,&lt;br /&gt;
                  relationshipTag: &amp;quot;usesSellOfferPlan&amp;quot;&lt;br /&gt;
                },&lt;br /&gt;
                direction: &amp;quot;to&amp;quot;&lt;br /&gt;
              },&lt;br /&gt;
              requestProperties: {&lt;br /&gt;
                tag_orderQuantity: &amp;quot;userTag_9&amp;quot;&lt;br /&gt;
              }&lt;br /&gt;
           },&lt;br /&gt;
           logical_sellOffer: {&lt;br /&gt;
              logicalElementType: &amp;quot;logical&amp;quot;,&lt;br /&gt;
              previousLogicalElementId: &amp;quot;child_complexFilter_1&amp;quot;,&lt;br /&gt;
              nextLogicalElementId: null,&lt;br /&gt;
&lt;br /&gt;
              objType: {&lt;br /&gt;
                serviceTag: &amp;quot;SellOfferManager&amp;quot;,&lt;br /&gt;
                objectType: &amp;quot;sellOffer&amp;quot;&lt;br /&gt;
              },&lt;br /&gt;
              fieldName: &amp;quot;sellOfferId&amp;quot;,&lt;br /&gt;
              comparison: &amp;quot;equals&amp;quot;,&lt;br /&gt;
              valueUserTag: &amp;quot;userTag_8&amp;quot;&lt;br /&gt;
           }&lt;br /&gt;
        }&lt;br /&gt;
      },&lt;br /&gt;
	},&lt;br /&gt;
	requiredDataLinkStepObjects: {&lt;br /&gt;
		userTag_LinkStepObjectA: { //* requiredData no linkPath&lt;br /&gt;
			initialObjType: { //* main objType&lt;br /&gt;
				serviceTag: &amp;quot;ProductManager&amp;quot;,&lt;br /&gt;
				objectType: &amp;quot;Product&amp;quot;&lt;br /&gt;
			},&lt;br /&gt;
			linkSteps: [&amp;quot;hash_linkStepA_1&amp;quot;],&lt;br /&gt;
		},&lt;br /&gt;
        userTag_LinkStepObjectB: { // requiredDataFields for finding max orderTotal&lt;br /&gt;
            initialObjType: { //* main objType&lt;br /&gt;
				serviceTag: &amp;quot;ProductManager&amp;quot;,&lt;br /&gt;
				objectType: &amp;quot;Product&amp;quot;&lt;br /&gt;
			},&lt;br /&gt;
			linkSteps: [&amp;quot;hash_linkStepB_1&amp;quot;, &amp;quot;hash_linkStepB_2&amp;quot;, &amp;quot;hash_linkStepB_3&amp;quot;],&lt;br /&gt;
        }&lt;br /&gt;
        // userTag_LinkStepObjectC&lt;br /&gt;
        // userTag_LinkStepObjectD&lt;br /&gt;
	},&lt;br /&gt;
	requiredDataLinkSteps: {&lt;br /&gt;
		hash_linkStepA_1:{&lt;br /&gt;
          fieldName: &amp;quot;xxx&amp;quot; &lt;br /&gt;
        },&lt;br /&gt;
        hash_linkStepB_1:{&lt;br /&gt;
          pathLinkType: {&lt;br /&gt;
             objType: {&lt;br /&gt;
               serviceTag: &amp;quot;SellOfferManager&amp;quot;,&lt;br /&gt;
               objectType: &amp;quot;SellOffer&amp;quot;&lt;br /&gt;
             },&lt;br /&gt;
             relType: {&lt;br /&gt;
               serviceTag: &amp;quot;ProductManager&amp;quot;,&lt;br /&gt;
               relationshipTag: &amp;quot;hasSellOffer&amp;quot;&lt;br /&gt;
             },&lt;br /&gt;
             direction: &amp;quot;to&amp;quot;,&lt;br /&gt;
          },&lt;br /&gt;
           addFilterMain: true, //default: false =&amp;gt; need to add filterMain set = true&lt;br /&gt;
           filterElements: { //* filter in linkPath&lt;br /&gt;
             objType: {&lt;br /&gt;
               serviceTag: &amp;quot;SellOfferManager&amp;quot;,&lt;br /&gt;
               objectType: &amp;quot;SellOffer&amp;quot;&lt;br /&gt;
             },&lt;br /&gt;
             initialLogicalElementId: &amp;quot;logical_sellOffer_in_link&amp;quot;,&lt;br /&gt;
             logicalElements: {&lt;br /&gt;
               logical_sellOffer_in_link: {&lt;br /&gt;
                  logicalElementType: &amp;quot;logical&amp;quot;,&lt;br /&gt;
                  previousLogicalElementId: null,&lt;br /&gt;
                  nextLogicalElementId: null,&lt;br /&gt;
&lt;br /&gt;
                  objType: {&lt;br /&gt;
                    serviceTag: &amp;quot;SellOfferManager&amp;quot;,&lt;br /&gt;
                    objectType: &amp;quot;SellOffer&amp;quot;&lt;br /&gt;
                  },&lt;br /&gt;
                  fieldName: &amp;quot;userId&amp;quot;,&lt;br /&gt;
                  comparison: &amp;quot;equals&amp;quot;,&lt;br /&gt;
                  valueUserTag: &amp;quot;userTag_2&amp;quot;&lt;br /&gt;
               }&lt;br /&gt;
            }&lt;br /&gt;
          },&lt;br /&gt;
&lt;br /&gt;
        }, &lt;br /&gt;
        hash_linkStepB_2: {&lt;br /&gt;
           pathLinkType: {&lt;br /&gt;
             objType: {&lt;br /&gt;
               serviceTag: &amp;quot;OrderPrice&amp;quot;,&lt;br /&gt;
               objectType: &amp;quot;OrderPrice&amp;quot;&lt;br /&gt;
             },&lt;br /&gt;
             relType: {&lt;br /&gt;
               serviceTag: &amp;quot;sellOfferStandard&amp;quot;,&lt;br /&gt;
               relationshipTag: &amp;quot;hasOrderPrice&amp;quot;&lt;br /&gt;
             },&lt;br /&gt;
             direction: &amp;quot;to&amp;quot;,&lt;br /&gt;
           },&lt;br /&gt;
          requestProperties: {&lt;br /&gt;
            tag_deliverTo: &amp;quot;userTag_3&amp;quot;,&lt;br /&gt;
            tag_sellOfferPlan: &amp;quot;userTag_4&amp;quot;,&lt;br /&gt;
            // tag_sellOfferPlanDeliveryMethodLink: &amp;quot;userTag_5&amp;quot;,&lt;br /&gt;
            // tag_sellOfferPlanUserPaymentMethodLink: &amp;quot;userTag_6&amp;quot;&lt;br /&gt;
          }&lt;br /&gt;
          aggregate: &amp;quot;max&amp;quot;,&lt;br /&gt;
          sortFields: [&lt;br /&gt;
       			{&lt;br /&gt;
            		requiredDataLinkStepObjectId: &amp;quot;userTag_LinkStepObjectC&amp;quot;,&lt;br /&gt;
		            dataType: &amp;quot;number&amp;quot;&lt;br /&gt;
        		},&lt;br /&gt;
				{&lt;br /&gt;
        		     requiredDataLinkStepObjectId: &amp;quot;userTag_LinkStepObjectD&amp;quot;,&lt;br /&gt;
		             dataType: &amp;quot;string&amp;quot;&lt;br /&gt;
		         },&lt;br /&gt;
&lt;br /&gt;
                {&lt;br /&gt;
        		     requiredDataLinkStepObjectId: &amp;quot;userTag_LinkStepObjectD&amp;quot;,&lt;br /&gt;
		             dataType: &amp;quot;array&amp;quot;,&lt;br /&gt;
                     sortByValueUserTags:[&amp;quot;userTag_1&amp;quot;,&amp;quot;userTag_2&amp;quot;]&lt;br /&gt;
		        }&lt;br /&gt;
            ],&lt;br /&gt;
          comparison: &amp;quot;greaterThan&amp;quot;,&lt;br /&gt;
          comparisonSortField: &amp;quot;upToValue&amp;quot;,&lt;br /&gt;
          comparisonSortDataType: &amp;quot;string&amp;quot;,&lt;br /&gt;
          comparisonValue: &amp;quot;userTag_2&amp;quot;,&lt;br /&gt;
        }, &lt;br /&gt;
        hash_linkStepB_3: {&lt;br /&gt;
           fieldName: &amp;quot;zzz&amp;quot;,&lt;br /&gt;
        }&lt;br /&gt;
	},&lt;br /&gt;
	sortFields: [&lt;br /&gt;
        {&lt;br /&gt;
             requiredDataLinkStepObjectId: &amp;quot;userTag_LinkStepObjectB&amp;quot;,&lt;br /&gt;
             dataType: &amp;quot;number&amp;quot;,&lt;br /&gt;
             sortOrder: &amp;quot;descending&amp;quot;&lt;br /&gt;
        },&lt;br /&gt;
		{&lt;br /&gt;
             requiredDataLinkStepObjectId: &amp;quot;userTag_LinkStepObjectA&amp;quot;,&lt;br /&gt;
             dataType: &amp;quot;string&amp;quot;&lt;br /&gt;
         },&lt;br /&gt;
        {&lt;br /&gt;
             requiredDataLinkStepObjectId: &amp;quot;userTag_LinkStepObjectD&amp;quot;,&lt;br /&gt;
		     dataType: &amp;quot;array&amp;quot;,&lt;br /&gt;
             sortByValueUserTags:[&amp;quot;userTag_1&amp;quot;,&amp;quot;userTag_2&amp;quot;]&lt;br /&gt;
		}&lt;br /&gt;
    ],&lt;br /&gt;
	valueUserTags: {&lt;br /&gt;
		userTag_1:{&lt;br /&gt;
			value: &amp;quot;xx&amp;quot;,&lt;br /&gt;
		},&lt;br /&gt;
		userTag_2:{&lt;br /&gt;
			value: &amp;quot;yy&amp;quot;,&lt;br /&gt;
		},&lt;br /&gt;
		userTag_3:{&lt;br /&gt;
			valueSource: &amp;quot;complexFilterCombination&amp;quot;,&lt;br /&gt;
            complexFilterCombinationId: &amp;quot;hash_complexFilterCombinationA&amp;quot;,&lt;br /&gt;
		},&lt;br /&gt;
		userTag_4:{&lt;br /&gt;
			valueSource: &amp;quot;perParentCombination&amp;quot;,&lt;br /&gt;
            perParentCombinationId: &amp;quot;hash_perParentCombinationA&amp;quot;,&lt;br /&gt;
		},&lt;br /&gt;
		userTag_7: {&lt;br /&gt;
          value: &amp;quot;zz&amp;quot;,&lt;br /&gt;
        },&lt;br /&gt;
        userTag_8: {&lt;br /&gt;
          valueSource: 'perParentIdentifier',&lt;br /&gt;
          perParentIdentifierFieldname: 'sellOfferId'&lt;br /&gt;
        },&lt;br /&gt;
        userTag_9: {&lt;br /&gt;
          value: 2,&lt;br /&gt;
        },&lt;br /&gt;
	 }&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[Category:Working documents| 2025-04-14]]&lt;br /&gt;
[[Category:Working documents - Search Results| 2025-04-14]]&lt;/div&gt;</summary>
		<author><name>Rut</name></author>
	</entry>
	<entry>
		<id>https://izara.io/wiki/index.php?title=2025-04-14_-_Frontend_LinkPath_structure_for_tableOutput&amp;diff=4024</id>
		<title>2025-04-14 - Frontend LinkPath structure for tableOutput</title>
		<link rel="alternate" type="text/html" href="https://izara.io/wiki/index.php?title=2025-04-14_-_Frontend_LinkPath_structure_for_tableOutput&amp;diff=4024"/>
		<updated>2026-01-20T10:08:23Z</updated>

		<summary type="html">&lt;p&gt;Rut: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Service - Search Results]]&lt;br /&gt;
&lt;br /&gt;
= Overview =&lt;br /&gt;
&lt;br /&gt;
Structure frontend TableConfig and Output prepare for shared library that creates complexFilter and requestProperties&lt;br /&gt;
&lt;br /&gt;
= Example params in tableConfig =&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;JavaScript&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
let paramFromTableOutput = {&lt;br /&gt;
&lt;br /&gt;
	// .. other properties same as params sent to backend&lt;br /&gt;
	// requiredDataFields not needed in tableConfig as referenced in elements and sortFields&lt;br /&gt;
	// header/footer filterDataField elements reference valueUserTag&lt;br /&gt;
&lt;br /&gt;
	&amp;quot;elements&amp;quot;: {&lt;br /&gt;
		// shared types&lt;br /&gt;
		&amp;quot;elementId12&amp;quot;:{&lt;br /&gt;
			&amp;quot;elementType&amp;quot;: &amp;quot;freetext&amp;quot;,&lt;br /&gt;
			&amp;quot;value&amp;quot;: &amp;quot;aa&amp;quot;&lt;br /&gt;
		}&lt;br /&gt;
&lt;br /&gt;
		// headerFooter types&lt;br /&gt;
		&amp;quot;elementId1&amp;quot;:{&lt;br /&gt;
			&amp;quot;elementType&amp;quot;: &amp;quot;valueUserTag&amp;quot;,&lt;br /&gt;
			&amp;quot;valueUserTag&amp;quot;: &amp;quot;userTag_9&amp;quot;,&lt;br /&gt;
			&amp;quot;inputType&amp;quot;: &amp;quot;text&amp;quot; // || &amp;quot;select&amp;quot; || &amp;quot;checkbox&amp;quot; || &amp;quot;radio&amp;quot; ,&lt;br /&gt;
		},&lt;br /&gt;
		&amp;quot;elementId2&amp;quot;:{&lt;br /&gt;
			&amp;quot;elementType&amp;quot;: &amp;quot;valueUserTag&amp;quot;,&lt;br /&gt;
			&amp;quot;valueUserTag&amp;quot;: &amp;quot;userTag_9&amp;quot;&lt;br /&gt;
			&amp;quot;inputType&amp;quot;: &amp;quot;select&amp;quot;,&lt;br /&gt;
			&amp;quot;options&amp;quot;: [&lt;br /&gt;
	         {&lt;br /&gt;
               optionText:&amp;quot;option1&amp;quot;,&lt;br /&gt;
               valueUserTag:{ &lt;br /&gt;
                 userTag_1:&amp;quot;valueA&amp;quot;, //value not ref valueUserTag&lt;br /&gt;
                 userTag_2:&amp;quot;valueB&amp;quot; &lt;br /&gt;
              },&lt;br /&gt;
	         {&lt;br /&gt;
               optionText:&amp;quot;option2&amp;quot;,&lt;br /&gt;
               valueUserTag:{ &lt;br /&gt;
                 userTag_9:&amp;quot;valueC&amp;quot; &lt;br /&gt;
&lt;br /&gt;
              },&lt;br /&gt;
			],&lt;br /&gt;
		},&lt;br /&gt;
        &amp;quot;elementId21&amp;quot;:{&lt;br /&gt;
			&amp;quot;elementType&amp;quot;: &amp;quot;valueUserTag&amp;quot;,&lt;br /&gt;
			&amp;quot;valueUserTag&amp;quot;: &amp;quot;userTag_8&amp;quot;&lt;br /&gt;
			&amp;quot;inputType&amp;quot;: &amp;quot;checkbox&amp;quot;,&lt;br /&gt;
			&amp;quot;onSetting:{&lt;br /&gt;
               optionText:&amp;quot;on&amp;quot;,&lt;br /&gt;
               valueUserTag:{ &lt;br /&gt;
                 userTag_1:&amp;quot;valueA&amp;quot;, //value not ref valueUserTag&lt;br /&gt;
                 userTag_2:&amp;quot;valueB&amp;quot; &lt;br /&gt;
&lt;br /&gt;
              },&lt;br /&gt;
             },&lt;br /&gt;
             &amp;quot;offSetting&amp;quot;:{&lt;br /&gt;
               optionText:&amp;quot;off&amp;quot;,&lt;br /&gt;
               valueUserTag:{ &lt;br /&gt;
                 userTag_9:&amp;quot;valueC&amp;quot; &lt;br /&gt;
&lt;br /&gt;
              },&lt;br /&gt;
             },&lt;br /&gt;
		   &lt;br /&gt;
           &lt;br /&gt;
		},&lt;br /&gt;
		&amp;quot;elementId3&amp;quot;:{&lt;br /&gt;
			&amp;quot;elementType&amp;quot;: &amp;quot;sort&amp;quot;,&lt;br /&gt;
			&amp;quot;display&amp;quot;: &amp;quot;downArrow&amp;quot;, // || upArrow&lt;br /&gt;
			&amp;quot;requiredDataLinkStepObjectId&amp;quot;: &amp;quot;userTag_LinkStepObjectC&amp;quot;,&lt;br /&gt;
			&amp;quot;dataType&amp;quot;: &amp;quot;number&amp;quot;, // &amp;quot;number&amp;quot; | &amp;quot;string&amp;quot;&lt;br /&gt;
			&amp;quot;sortOrder&amp;quot;: &amp;quot;ascending&amp;quot; // &amp;quot;ascending&amp;quot;|&amp;quot;descending&amp;quot; (default ascending)&lt;br /&gt;
		},&lt;br /&gt;
		&amp;quot;elementId4&amp;quot;:{&lt;br /&gt;
			&amp;quot;elementType&amp;quot;: &amp;quot;numberOfRows&amp;quot;,&lt;br /&gt;
			&amp;quot;selection&amp;quot;: &amp;quot;input&amp;quot; // || list&lt;br /&gt;
		},&lt;br /&gt;
		&amp;quot;elementId6&amp;quot;:{&lt;br /&gt;
			&amp;quot;elementType&amp;quot;: &amp;quot;submit&amp;quot;,&lt;br /&gt;
			&amp;quot;display&amp;quot;: &amp;quot;submit&amp;quot;, // any text to be shown&lt;br /&gt;
			&amp;quot;sendRequest&amp;quot;: &amp;quot;all&amp;quot; // numberOfRows || all || filters&lt;br /&gt;
		},&lt;br /&gt;
		&amp;quot;elementId7&amp;quot;:{&lt;br /&gt;
			&amp;quot;elementType&amp;quot;: &amp;quot;reset&amp;quot;,&lt;br /&gt;
			&amp;quot;display&amp;quot;: &amp;quot;reset rows&amp;quot;, // any text to be shown&lt;br /&gt;
			&amp;quot;sendRequest&amp;quot;: &amp;quot;numberOfRows&amp;quot; // numberOfRows || all || filters&lt;br /&gt;
		},&lt;br /&gt;
		&amp;quot;elementId9&amp;quot;:{&lt;br /&gt;
			&amp;quot;elementType&amp;quot;: &amp;quot;totalDatafield&amp;quot;,&lt;br /&gt;
			&amp;quot;requiredDataLinkStepObjectId&amp;quot;: &amp;quot;link1&amp;quot;,&lt;br /&gt;
			&amp;quot;showIfNotAllRowsLoaded&amp;quot;: true // || false&lt;br /&gt;
		},&lt;br /&gt;
		&amp;quot;elementId11&amp;quot;:{&lt;br /&gt;
			// will need to link to per record check box&lt;br /&gt;
			&amp;quot;elementType&amp;quot;: &amp;quot;bulkAction&amp;quot;,&lt;br /&gt;
			&amp;quot;action&amp;quot;: &amp;quot;on&amp;quot; // on | off | switch&lt;br /&gt;
			&amp;quot;bulkActionUserTag&amp;quot;: &amp;quot;tagA&amp;quot;, // have normalized list of bulkActionTags, with list of &amp;quot;bulkAction&amp;quot; and &amp;quot;bulkActionCheckBox&amp;quot; elements linked to it&lt;br /&gt;
		},&lt;br /&gt;
		&amp;quot;elementId8&amp;quot;:{&lt;br /&gt;
			&amp;quot;elementType&amp;quot;: &amp;quot;pageNumbers&amp;quot;,&lt;br /&gt;
			&amp;quot;linksAfter&amp;quot;: [&lt;br /&gt;
				{&lt;br /&gt;
					&amp;quot;action&amp;quot;: &amp;quot;jumpNumberOfPages&amp;quot;,&lt;br /&gt;
					&amp;quot;jumpPages&amp;quot;: 7,&lt;br /&gt;
					&amp;quot;string&amp;quot;: &amp;quot;..&amp;quot;&lt;br /&gt;
				},&lt;br /&gt;
				{&lt;br /&gt;
					&amp;quot;action&amp;quot;: &amp;quot;jumpNumberOfPages&amp;quot;,&lt;br /&gt;
					&amp;quot;jumpPages&amp;quot;: 1,&lt;br /&gt;
					&amp;quot;string&amp;quot;: &amp;quot;&amp;gt;&amp;quot;&lt;br /&gt;
				},&lt;br /&gt;
				{&lt;br /&gt;
					&amp;quot;action&amp;quot;: &amp;quot;goToLastPage&amp;quot;,&lt;br /&gt;
					&amp;quot;hideWhenLastPageShown&amp;quot;: true,&lt;br /&gt;
					&amp;quot;string&amp;quot;: &amp;quot;&amp;gt;&amp;gt;&amp;quot;&lt;br /&gt;
				}&lt;br /&gt;
			],&lt;br /&gt;
			&amp;quot;linksBefore&amp;quot;: [&lt;br /&gt;
				{&lt;br /&gt;
					&amp;quot;action&amp;quot;: &amp;quot;goToFirstPage&amp;quot;,&lt;br /&gt;
					&amp;quot;hideWhenFirstPageShown&amp;quot;: true,&lt;br /&gt;
					&amp;quot;string&amp;quot;: &amp;quot;&amp;lt;&amp;lt;&amp;quot;&lt;br /&gt;
				},&lt;br /&gt;
				{&lt;br /&gt;
					&amp;quot;action&amp;quot;: &amp;quot;jumpNumberOfPages&amp;quot;,&lt;br /&gt;
					&amp;quot;jumpPages&amp;quot;: 1,&lt;br /&gt;
					&amp;quot;string&amp;quot;: &amp;quot;&amp;lt;&amp;quot;&lt;br /&gt;
				},&lt;br /&gt;
				{&lt;br /&gt;
					&amp;quot;action&amp;quot;: &amp;quot;jumpNumberOfPages&amp;quot;,&lt;br /&gt;
					&amp;quot;jumpPages&amp;quot;: 7,&lt;br /&gt;
					&amp;quot;string&amp;quot;: &amp;quot;..&amp;quot;&lt;br /&gt;
				}&lt;br /&gt;
			],&lt;br /&gt;
			&amp;quot;showPagesAfter&amp;quot;: 3,&lt;br /&gt;
			&amp;quot;showPagesBefore&amp;quot;: 3&lt;br /&gt;
		},&lt;br /&gt;
		&lt;br /&gt;
		// records types    &lt;br /&gt;
		&amp;quot;elementId5&amp;quot;:{&lt;br /&gt;
			&amp;quot;elementType&amp;quot;: &amp;quot;requiredDataLinkStepObject&amp;quot;, // in record&lt;br /&gt;
			&amp;quot;requiredDataLinkStepObjectId&amp;quot;: &amp;quot;link1&amp;quot;,&lt;br /&gt;
		},&lt;br /&gt;
		&amp;quot;elementIdxx&amp;quot;:{&lt;br /&gt;
			&amp;quot;elementType&amp;quot;: &amp;quot;bulkActionCheckBox&amp;quot;,&lt;br /&gt;
			&amp;quot;bulkActionUserTag&amp;quot;: &amp;quot;tagA&amp;quot;,&lt;br /&gt;
		},&lt;br /&gt;
	},&lt;br /&gt;
	&lt;br /&gt;
	values: {&lt;br /&gt;
		// values are shared between requestProperties and filter values. This set can be iterated to overwrite values using userTag to identify&lt;br /&gt;
		userTag_1:{&lt;br /&gt;
			defaultValue: &amp;quot;xx&amp;quot;,&lt;br /&gt;
		},&lt;br /&gt;
		userTag_2:{&lt;br /&gt;
			defaultValue: &amp;quot;xx&amp;quot;,&lt;br /&gt;
		},&lt;br /&gt;
		userTag_3:{&lt;br /&gt;
			defaultValue: &amp;quot;xx&amp;quot;,&lt;br /&gt;
		},&lt;br /&gt;
		userTag_4:{&lt;br /&gt;
			defaultValue: &amp;quot;xx&amp;quot;,&lt;br /&gt;
		},&lt;br /&gt;
		userTag_5:{&lt;br /&gt;
			defaultValue: &amp;quot;xx&amp;quot;,&lt;br /&gt;
		},&lt;br /&gt;
		userTag_6:{&lt;br /&gt;
			valueSource: &amp;quot;complexFilterCombination&amp;quot;,&lt;br /&gt;
            complexFilterCombinationId: &amp;quot;hash_complexFilterCombinationA&amp;quot;,&lt;br /&gt;
		},&lt;br /&gt;
		userTag_7:{&lt;br /&gt;
			valueSource: &amp;quot;perParentCombination&amp;quot;,&lt;br /&gt;
            perParentCombinationId: &amp;quot;hash_perParentCombinationA&amp;quot;,&lt;br /&gt;
		},&lt;br /&gt;
        userTag_8: {&lt;br /&gt;
            valueSource: 'perParentIdentifier',&lt;br /&gt;
            perParentIdentifierFieldname: 'sellOfferId'&lt;br /&gt;
        },,&lt;br /&gt;
		userTag_9:{&lt;br /&gt;
			defaultValue: &amp;quot;xx&amp;quot;,&lt;br /&gt;
		},&lt;br /&gt;
		userTag_10:{&lt;br /&gt;
			defaultValue: &amp;quot;xx&amp;quot;,&lt;br /&gt;
		},&lt;br /&gt;
		userTag_11:{&lt;br /&gt;
			defaultValue: &amp;quot;xx&amp;quot;,&lt;br /&gt;
		},&lt;br /&gt;
	},&lt;br /&gt;
&lt;br /&gt;
	bulkActionUserTags: {&lt;br /&gt;
		tagA:{&lt;br /&gt;
			bulkActions: [&lt;br /&gt;
                &amp;quot;elementId11&amp;quot;,&lt;br /&gt;
                // ...&lt;br /&gt;
            ],&lt;br /&gt;
            bulkActionCheckBoxes: [&lt;br /&gt;
                &amp;quot;elementIdxx&amp;quot;,&lt;br /&gt;
                // ...&lt;br /&gt;
            ],&lt;br /&gt;
		},&lt;br /&gt;
        // ...&lt;br /&gt;
	},&lt;br /&gt;
&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= Example params sent to backend =&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;JavaScript&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
let paramFromTableOutput = {&lt;br /&gt;
	objType: { //* main objType&lt;br /&gt;
		serviceTag: &amp;quot;ProductManager&amp;quot;,&lt;br /&gt;
		objectType: &amp;quot;Product&amp;quot;&lt;br /&gt;
	},&lt;br /&gt;
    initialLogicalElementId: &amp;quot;uuid_logical_1&amp;quot;,&lt;br /&gt;
    logicalElements: {&lt;br /&gt;
       uuid_logical_1: {&lt;br /&gt;
         logicalElementType: &amp;quot;logical&amp;quot;,&lt;br /&gt;
         previousLogicalElementId: null,&lt;br /&gt;
         nextLogicalElementId: null,&lt;br /&gt;
&lt;br /&gt;
         objType: {&lt;br /&gt;
           serviceTag: &amp;quot;ProductManager&amp;quot;,&lt;br /&gt;
           objectType: &amp;quot;product&amp;quot;&lt;br /&gt;
         },&lt;br /&gt;
         fieldName: &amp;quot;productId&amp;quot;,&lt;br /&gt;
         comparison: &amp;quot;equals&amp;quot;,&lt;br /&gt;
         valueUserTag: &amp;quot;userTag_1&amp;quot;&lt;br /&gt;
       }&lt;br /&gt;
    },&lt;br /&gt;
	requiredDataFields: [ //* linkStepObjects to create main sort result's requiredData and sortFields&lt;br /&gt;
        // not needed at tableConfig level because can be built from table's elements and sortFields before sending to lib that converts to backend structure&lt;br /&gt;
        &amp;quot;userTag_LinkStepObjectA&amp;quot;, // no link, field in main objType (structure same linkPath but only one step)&lt;br /&gt;
        &amp;quot;userTag_LinkStepObjectB&amp;quot;, // has link&lt;br /&gt;
	],&lt;br /&gt;
	complexFilterCombinations:{&lt;br /&gt;
		hash_complexFilterCombinationA: {&lt;br /&gt;
          objType: {&lt;br /&gt;
            serviceTag: &amp;quot;Locations&amp;quot;,&lt;br /&gt;
            objectType: &amp;quot;locationNode&amp;quot;&lt;br /&gt;
          },&lt;br /&gt;
          initialLogicalElementId: &amp;quot;child_complexFilter_localtionNode&amp;quot;,&lt;br /&gt;
          logicalElements: {&lt;br /&gt;
            child_complexFilter_localtionNode: {&lt;br /&gt;
              logicalElementType: &amp;quot;childComplexFilter&amp;quot;,&lt;br /&gt;
              previousLogicalElementId: null,&lt;br /&gt;
              nextLogicalElementId: null,&lt;br /&gt;
&lt;br /&gt;
              childLogicalElementId: &amp;quot;logical_locationNode&amp;quot;,&lt;br /&gt;
              objType: {&lt;br /&gt;
                serviceTag: &amp;quot;Locations&amp;quot;,&lt;br /&gt;
                objectType: &amp;quot;locationNode&amp;quot;&lt;br /&gt;
              },&lt;br /&gt;
              pathLinkType: {&lt;br /&gt;
                objType: {&lt;br /&gt;
                  serviceTag: &amp;quot;Locations&amp;quot;,&lt;br /&gt;
                  objectType: &amp;quot;locationNode&amp;quot;&lt;br /&gt;
                },&lt;br /&gt;
                relType: {&lt;br /&gt;
                  serviceTag: &amp;quot;Locations&amp;quot;,&lt;br /&gt;
                  relationshipTag: &amp;quot;hasParentLocationNode&amp;quot;&lt;br /&gt;
                },&lt;br /&gt;
                direction: &amp;quot;to&amp;quot;&lt;br /&gt;
              },&lt;br /&gt;
            },&lt;br /&gt;
            logical_locationNode: {&lt;br /&gt;
               logicalElementType: &amp;quot;logical&amp;quot;,&lt;br /&gt;
               previousLogicalElementId: &amp;quot;child_complexFilter_localtionNode&amp;quot;,&lt;br /&gt;
               nextLogicalElementId: null,&lt;br /&gt;
&lt;br /&gt;
               objType: {&lt;br /&gt;
                serviceTag: &amp;quot;Locations&amp;quot;,&lt;br /&gt;
                objectType: &amp;quot;locationNode&amp;quot;&lt;br /&gt;
               },&lt;br /&gt;
               fieldName: &amp;quot;locationNodeId&amp;quot;,&lt;br /&gt;
               comparison: &amp;quot;equals&amp;quot;,&lt;br /&gt;
               valueUserTag: &amp;quot;userTag_7&amp;quot;&lt;br /&gt;
            }&lt;br /&gt;
         }&lt;br /&gt;
       },&lt;br /&gt;
	},&lt;br /&gt;
	perParentCombinations:{&lt;br /&gt;
		hash_perParentCombinationA: {&lt;br /&gt;
          objType: {&lt;br /&gt;
            serviceTag: &amp;quot;SellOfferPlan&amp;quot;,&lt;br /&gt;
            objectType: &amp;quot;sellOfferPlan&amp;quot;&lt;br /&gt;
          },&lt;br /&gt;
          initialLogicalElementId: &amp;quot;child_complexFilter_1&amp;quot;,&lt;br /&gt;
          logicalElements: {&lt;br /&gt;
            child_complexFilter_1: {&lt;br /&gt;
              logicalElementType: &amp;quot;childComplexFilter&amp;quot;,&lt;br /&gt;
              previousLogicalElementId: null,&lt;br /&gt;
              nextLogicalElementId: null,&lt;br /&gt;
&lt;br /&gt;
              childLogicalElementId: &amp;quot;logical_sellOffer&amp;quot;,&lt;br /&gt;
              objType: {&lt;br /&gt;
                serviceTag: &amp;quot;SellOfferPlan&amp;quot;,&lt;br /&gt;
                objectType: &amp;quot;sellOfferPlan&amp;quot;&lt;br /&gt;
              },&lt;br /&gt;
              pathLinkType: {&lt;br /&gt;
                objType: {&lt;br /&gt;
                  serviceTag: &amp;quot;SellOfferManager&amp;quot;,&lt;br /&gt;
                  objectType: &amp;quot;sellOffer&amp;quot;&lt;br /&gt;
                }, &lt;br /&gt;
                relType: {&lt;br /&gt;
                  serviceTag: &amp;quot;SellOfferManager&amp;quot;,&lt;br /&gt;
                  relationshipTag: &amp;quot;usesSellOfferPlan&amp;quot;&lt;br /&gt;
                },&lt;br /&gt;
                direction: &amp;quot;to&amp;quot;&lt;br /&gt;
              },&lt;br /&gt;
              requestProperties: {&lt;br /&gt;
                tag_orderQuantity: &amp;quot;userTag_9&amp;quot;&lt;br /&gt;
              }&lt;br /&gt;
           },&lt;br /&gt;
           logical_sellOffer: {&lt;br /&gt;
              logicalElementType: &amp;quot;logical&amp;quot;,&lt;br /&gt;
              previousLogicalElementId: &amp;quot;child_complexFilter_1&amp;quot;,&lt;br /&gt;
              nextLogicalElementId: null,&lt;br /&gt;
&lt;br /&gt;
              objType: {&lt;br /&gt;
                serviceTag: &amp;quot;SellOfferManager&amp;quot;,&lt;br /&gt;
                objectType: &amp;quot;sellOffer&amp;quot;&lt;br /&gt;
              },&lt;br /&gt;
              fieldName: &amp;quot;sellOfferId&amp;quot;,&lt;br /&gt;
              comparison: &amp;quot;equals&amp;quot;,&lt;br /&gt;
              valueUserTag: &amp;quot;userTag_8&amp;quot;&lt;br /&gt;
           }&lt;br /&gt;
        }&lt;br /&gt;
      },&lt;br /&gt;
	},&lt;br /&gt;
	requiredDataLinkStepObjects: {&lt;br /&gt;
		userTag_LinkStepObjectA: { //* requiredData no linkPath&lt;br /&gt;
			initialObjType: { //* main objType&lt;br /&gt;
				serviceTag: &amp;quot;ProductManager&amp;quot;,&lt;br /&gt;
				objectType: &amp;quot;Product&amp;quot;&lt;br /&gt;
			},&lt;br /&gt;
			linkSteps: [&amp;quot;hash_linkStepA_1&amp;quot;],&lt;br /&gt;
		},&lt;br /&gt;
        userTag_LinkStepObjectB: { // requiredDataFields for finding max orderTotal&lt;br /&gt;
            initialObjType: { //* main objType&lt;br /&gt;
				serviceTag: &amp;quot;ProductManager&amp;quot;,&lt;br /&gt;
				objectType: &amp;quot;Product&amp;quot;&lt;br /&gt;
			},&lt;br /&gt;
			linkSteps: [&amp;quot;hash_linkStepB_1&amp;quot;, &amp;quot;hash_linkStepB_2&amp;quot;, &amp;quot;hash_linkStepB_3&amp;quot;],&lt;br /&gt;
        }&lt;br /&gt;
        // userTag_LinkStepObjectC&lt;br /&gt;
        // userTag_LinkStepObjectD&lt;br /&gt;
	},&lt;br /&gt;
	requiredDataLinkSteps: {&lt;br /&gt;
		hash_linkStepA_1:{&lt;br /&gt;
          fieldName: &amp;quot;xxx&amp;quot; &lt;br /&gt;
        },&lt;br /&gt;
        hash_linkStepB_1:{&lt;br /&gt;
          pathLinkType: {&lt;br /&gt;
             objType: {&lt;br /&gt;
               serviceTag: &amp;quot;SellOfferManager&amp;quot;,&lt;br /&gt;
               objectType: &amp;quot;SellOffer&amp;quot;&lt;br /&gt;
             },&lt;br /&gt;
             relType: {&lt;br /&gt;
               serviceTag: &amp;quot;ProductManager&amp;quot;,&lt;br /&gt;
               relationshipTag: &amp;quot;hasSellOffer&amp;quot;&lt;br /&gt;
             },&lt;br /&gt;
             direction: &amp;quot;to&amp;quot;,&lt;br /&gt;
          },&lt;br /&gt;
           addFilterMain: true, //default: false =&amp;gt; need to add filterMain set = true&lt;br /&gt;
           filterElements: { //* filter in linkPath&lt;br /&gt;
             objType: {&lt;br /&gt;
               serviceTag: &amp;quot;SellOfferManager&amp;quot;,&lt;br /&gt;
               objectType: &amp;quot;SellOffer&amp;quot;&lt;br /&gt;
             },&lt;br /&gt;
             initialLogicalElementId: &amp;quot;logical_sellOffer_in_link&amp;quot;,&lt;br /&gt;
             logicalElements: {&lt;br /&gt;
               logical_sellOffer_in_link: {&lt;br /&gt;
                  logicalElementType: &amp;quot;logical&amp;quot;,&lt;br /&gt;
                  previousLogicalElementId: null,&lt;br /&gt;
                  nextLogicalElementId: null,&lt;br /&gt;
&lt;br /&gt;
                  objType: {&lt;br /&gt;
                    serviceTag: &amp;quot;SellOfferManager&amp;quot;,&lt;br /&gt;
                    objectType: &amp;quot;SellOffer&amp;quot;&lt;br /&gt;
                  },&lt;br /&gt;
                  fieldName: &amp;quot;userId&amp;quot;,&lt;br /&gt;
                  comparison: &amp;quot;equals&amp;quot;,&lt;br /&gt;
                  valueUserTag: &amp;quot;userTag_2&amp;quot;&lt;br /&gt;
               }&lt;br /&gt;
            }&lt;br /&gt;
          },&lt;br /&gt;
&lt;br /&gt;
        }, &lt;br /&gt;
        hash_linkStepB_2: {&lt;br /&gt;
           pathLinkType: {&lt;br /&gt;
             objType: {&lt;br /&gt;
               serviceTag: &amp;quot;OrderPrice&amp;quot;,&lt;br /&gt;
               objectType: &amp;quot;OrderPrice&amp;quot;&lt;br /&gt;
             },&lt;br /&gt;
             relType: {&lt;br /&gt;
               serviceTag: &amp;quot;sellOfferStandard&amp;quot;,&lt;br /&gt;
               relationshipTag: &amp;quot;hasOrderPrice&amp;quot;&lt;br /&gt;
             },&lt;br /&gt;
             direction: &amp;quot;to&amp;quot;,&lt;br /&gt;
           },&lt;br /&gt;
          requestProperties: {&lt;br /&gt;
            tag_deliverTo: &amp;quot;userTag_3&amp;quot;,&lt;br /&gt;
            tag_sellOfferPlan: &amp;quot;userTag_4&amp;quot;,&lt;br /&gt;
            // tag_sellOfferPlanDeliveryMethodLink: &amp;quot;userTag_5&amp;quot;,&lt;br /&gt;
            // tag_sellOfferPlanUserPaymentMethodLink: &amp;quot;userTag_6&amp;quot;&lt;br /&gt;
          }&lt;br /&gt;
          aggregate: &amp;quot;max&amp;quot;,&lt;br /&gt;
          sortFields: [&lt;br /&gt;
       			{&lt;br /&gt;
            		requiredDataLinkStepObjectId: &amp;quot;userTag_LinkStepObjectC&amp;quot;,&lt;br /&gt;
		            dataType: &amp;quot;number&amp;quot;&lt;br /&gt;
        		},&lt;br /&gt;
				{&lt;br /&gt;
        		     requiredDataLinkStepObjectId: &amp;quot;userTag_LinkStepObjectD&amp;quot;,&lt;br /&gt;
		             dataType: &amp;quot;string&amp;quot;&lt;br /&gt;
		         },&lt;br /&gt;
&lt;br /&gt;
                {&lt;br /&gt;
        		     requiredDataLinkStepObjectId: &amp;quot;userTag_LinkStepObjectD&amp;quot;,&lt;br /&gt;
		             dataType: &amp;quot;array&amp;quot;,&lt;br /&gt;
                     sortByValueUserTags:[&amp;quot;userTag_1&amp;quot;,&amp;quot;userTag_2&amp;quot;]&lt;br /&gt;
		        }&lt;br /&gt;
            ],&lt;br /&gt;
          comparison: &amp;quot;greaterThan&amp;quot;,&lt;br /&gt;
          comparisonSortField: &amp;quot;upToValue&amp;quot;,&lt;br /&gt;
          comparisonSortDataType: &amp;quot;string&amp;quot;,&lt;br /&gt;
          comparisonValue: &amp;quot;userTag_2&amp;quot;,&lt;br /&gt;
        }, &lt;br /&gt;
        hash_linkStepB_3: {&lt;br /&gt;
           fieldName: &amp;quot;zzz&amp;quot;,&lt;br /&gt;
        }&lt;br /&gt;
	},&lt;br /&gt;
	sortFields: [&lt;br /&gt;
        {&lt;br /&gt;
             requiredDataLinkStepObjectId: &amp;quot;userTag_LinkStepObjectB&amp;quot;,&lt;br /&gt;
             dataType: &amp;quot;number&amp;quot;,&lt;br /&gt;
             sortOrder: &amp;quot;descending&amp;quot;&lt;br /&gt;
        },&lt;br /&gt;
		{&lt;br /&gt;
             requiredDataLinkStepObjectId: &amp;quot;userTag_LinkStepObjectA&amp;quot;,&lt;br /&gt;
             dataType: &amp;quot;string&amp;quot;&lt;br /&gt;
         },&lt;br /&gt;
        {&lt;br /&gt;
             requiredDataLinkStepObjectId: &amp;quot;userTag_LinkStepObjectD&amp;quot;,&lt;br /&gt;
		     dataType: &amp;quot;array&amp;quot;,&lt;br /&gt;
             sortByValueUserTags:[&amp;quot;userTag_1&amp;quot;,&amp;quot;userTag_2&amp;quot;]&lt;br /&gt;
		}&lt;br /&gt;
    ],&lt;br /&gt;
	valueUserTags: {&lt;br /&gt;
		userTag_1:{&lt;br /&gt;
			value: &amp;quot;xx&amp;quot;,&lt;br /&gt;
		},&lt;br /&gt;
		userTag_2:{&lt;br /&gt;
			value: &amp;quot;yy&amp;quot;,&lt;br /&gt;
		},&lt;br /&gt;
		userTag_3:{&lt;br /&gt;
			valueSource: &amp;quot;complexFilterCombination&amp;quot;,&lt;br /&gt;
            complexFilterCombinationId: &amp;quot;hash_complexFilterCombinationA&amp;quot;,&lt;br /&gt;
		},&lt;br /&gt;
		userTag_4:{&lt;br /&gt;
			valueSource: &amp;quot;perParentCombination&amp;quot;,&lt;br /&gt;
            perParentCombinationId: &amp;quot;hash_perParentCombinationA&amp;quot;,&lt;br /&gt;
		},&lt;br /&gt;
		userTag_7: {&lt;br /&gt;
          value: &amp;quot;zz&amp;quot;,&lt;br /&gt;
        },&lt;br /&gt;
        userTag_8: {&lt;br /&gt;
          valueSource: 'perParentIdentifier',&lt;br /&gt;
          perParentIdentifierFieldname: 'sellOfferId'&lt;br /&gt;
        },&lt;br /&gt;
        userTag_9: {&lt;br /&gt;
          value: 2,&lt;br /&gt;
        },&lt;br /&gt;
	 }&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[Category:Working documents| 2025-04-14]]&lt;br /&gt;
[[Category:Working documents - Search Results| 2025-04-14]]&lt;/div&gt;</summary>
		<author><name>Rut</name></author>
	</entry>
	<entry>
		<id>https://izara.io/wiki/index.php?title=2025-04-14_-_Frontend_LinkPath_structure_for_tableOutput&amp;diff=4023</id>
		<title>2025-04-14 - Frontend LinkPath structure for tableOutput</title>
		<link rel="alternate" type="text/html" href="https://izara.io/wiki/index.php?title=2025-04-14_-_Frontend_LinkPath_structure_for_tableOutput&amp;diff=4023"/>
		<updated>2026-01-20T09:24:51Z</updated>

		<summary type="html">&lt;p&gt;Rut: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Service - Search Results]]&lt;br /&gt;
&lt;br /&gt;
= Overview =&lt;br /&gt;
&lt;br /&gt;
Structure frontend TableConfig and Output prepare for shared library that creates complexFilter and requestProperties&lt;br /&gt;
&lt;br /&gt;
= Example params in tableConfig =&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;JavaScript&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
let paramFromTableOutput = {&lt;br /&gt;
&lt;br /&gt;
	// .. other properties same as params sent to backend&lt;br /&gt;
	// requiredDataFields not needed in tableConfig as referenced in elements and sortFields&lt;br /&gt;
	// header/footer filterDataField elements reference valueUserTag&lt;br /&gt;
&lt;br /&gt;
	&amp;quot;elements&amp;quot;: {&lt;br /&gt;
		// shared types&lt;br /&gt;
		&amp;quot;elementId12&amp;quot;:{&lt;br /&gt;
			&amp;quot;elementType&amp;quot;: &amp;quot;freetext&amp;quot;,&lt;br /&gt;
			&amp;quot;value&amp;quot;: &amp;quot;aa&amp;quot;&lt;br /&gt;
		}&lt;br /&gt;
&lt;br /&gt;
		// headerFooter types&lt;br /&gt;
		&amp;quot;elementId1&amp;quot;:{&lt;br /&gt;
			&amp;quot;elementType&amp;quot;: &amp;quot;valueUserTag&amp;quot;,&lt;br /&gt;
			&amp;quot;valueUserTag&amp;quot;: &amp;quot;userTag_9&amp;quot;,&lt;br /&gt;
			&amp;quot;inputType&amp;quot;: &amp;quot;text&amp;quot; // || &amp;quot;select&amp;quot; || &amp;quot;checkbox&amp;quot; || &amp;quot;radio&amp;quot; ,&lt;br /&gt;
		},&lt;br /&gt;
		&amp;quot;elementId2&amp;quot;:{&lt;br /&gt;
			&amp;quot;elementType&amp;quot;: &amp;quot;valueUserTag&amp;quot;,&lt;br /&gt;
			&amp;quot;valueUserTag&amp;quot;: &amp;quot;userTag_9&amp;quot;&lt;br /&gt;
			&amp;quot;inputType&amp;quot;: &amp;quot;select&amp;quot;,&lt;br /&gt;
			&amp;quot;options&amp;quot;: [&lt;br /&gt;
	         {&lt;br /&gt;
               optionText:&amp;quot;option1&amp;quot;,&lt;br /&gt;
               valueUserTag:{ &lt;br /&gt;
                 userTag_1:&amp;quot;valueA&amp;quot;, //value not ref valueUserTag&lt;br /&gt;
                 userTag_2:&amp;quot;valueB&amp;quot; &lt;br /&gt;
&lt;br /&gt;
              },&lt;br /&gt;
             },&lt;br /&gt;
	         {&lt;br /&gt;
               optionText:&amp;quot;option2&amp;quot;,&lt;br /&gt;
               valueUserTag:{ &lt;br /&gt;
                 userTag_9:&amp;quot;valueC&amp;quot; &lt;br /&gt;
&lt;br /&gt;
              },&lt;br /&gt;
             },&lt;br /&gt;
			],&lt;br /&gt;
		},&lt;br /&gt;
        &amp;quot;elementId21&amp;quot;:{&lt;br /&gt;
			&amp;quot;elementType&amp;quot;: &amp;quot;valueUserTag&amp;quot;,&lt;br /&gt;
			&amp;quot;valueUserTag&amp;quot;: &amp;quot;userTag_8&amp;quot;&lt;br /&gt;
			&amp;quot;inputType&amp;quot;: &amp;quot;checkbox&amp;quot;,&lt;br /&gt;
			&amp;quot;onSetting:{&lt;br /&gt;
               optionText:&amp;quot;on&amp;quot;,&lt;br /&gt;
               valueUserTag:{ &lt;br /&gt;
                 userTag_1:&amp;quot;valueA&amp;quot;, //value not ref valueUserTag&lt;br /&gt;
                 userTag_2:&amp;quot;valueB&amp;quot; &lt;br /&gt;
&lt;br /&gt;
              },&lt;br /&gt;
             },&lt;br /&gt;
             &amp;quot;offSetting&amp;quot;:{&lt;br /&gt;
               optionText:&amp;quot;off&amp;quot;,&lt;br /&gt;
               valueUserTag:{ &lt;br /&gt;
                 userTag_9:&amp;quot;valueC&amp;quot; &lt;br /&gt;
&lt;br /&gt;
              },&lt;br /&gt;
             },&lt;br /&gt;
		   &lt;br /&gt;
           &lt;br /&gt;
		},&lt;br /&gt;
		&amp;quot;elementId3&amp;quot;:{&lt;br /&gt;
			&amp;quot;elementType&amp;quot;: &amp;quot;sort&amp;quot;,&lt;br /&gt;
			&amp;quot;display&amp;quot;: &amp;quot;downArrow&amp;quot;, // || upArrow&lt;br /&gt;
			&amp;quot;requiredDataLinkStepObjectId&amp;quot;: &amp;quot;userTag_LinkStepObjectC&amp;quot;,&lt;br /&gt;
			&amp;quot;dataType&amp;quot;: &amp;quot;number&amp;quot;, // &amp;quot;number&amp;quot; | &amp;quot;string&amp;quot;&lt;br /&gt;
			&amp;quot;sortOrder&amp;quot;: &amp;quot;ascending&amp;quot; // &amp;quot;ascending&amp;quot;|&amp;quot;descending&amp;quot; (default ascending)&lt;br /&gt;
		},&lt;br /&gt;
		&amp;quot;elementId4&amp;quot;:{&lt;br /&gt;
			&amp;quot;elementType&amp;quot;: &amp;quot;numberOfRows&amp;quot;,&lt;br /&gt;
			&amp;quot;selection&amp;quot;: &amp;quot;input&amp;quot; // || list&lt;br /&gt;
		},&lt;br /&gt;
		&amp;quot;elementId6&amp;quot;:{&lt;br /&gt;
			&amp;quot;elementType&amp;quot;: &amp;quot;submit&amp;quot;,&lt;br /&gt;
			&amp;quot;display&amp;quot;: &amp;quot;submit&amp;quot;, // any text to be shown&lt;br /&gt;
			&amp;quot;sendRequest&amp;quot;: &amp;quot;all&amp;quot; // numberOfRows || all || filters&lt;br /&gt;
		},&lt;br /&gt;
		&amp;quot;elementId7&amp;quot;:{&lt;br /&gt;
			&amp;quot;elementType&amp;quot;: &amp;quot;reset&amp;quot;,&lt;br /&gt;
			&amp;quot;display&amp;quot;: &amp;quot;reset rows&amp;quot;, // any text to be shown&lt;br /&gt;
			&amp;quot;sendRequest&amp;quot;: &amp;quot;numberOfRows&amp;quot; // numberOfRows || all || filters&lt;br /&gt;
		},&lt;br /&gt;
		&amp;quot;elementId9&amp;quot;:{&lt;br /&gt;
			&amp;quot;elementType&amp;quot;: &amp;quot;totalDatafield&amp;quot;,&lt;br /&gt;
			&amp;quot;requiredDataLinkStepObjectId&amp;quot;: &amp;quot;link1&amp;quot;,&lt;br /&gt;
			&amp;quot;showIfNotAllRowsLoaded&amp;quot;: true // || false&lt;br /&gt;
		},&lt;br /&gt;
		&amp;quot;elementId11&amp;quot;:{&lt;br /&gt;
			// will need to link to per record check box&lt;br /&gt;
			&amp;quot;elementType&amp;quot;: &amp;quot;bulkAction&amp;quot;,&lt;br /&gt;
			&amp;quot;action&amp;quot;: &amp;quot;on&amp;quot; // on | off | switch&lt;br /&gt;
			&amp;quot;bulkActionUserTag&amp;quot;: &amp;quot;tagA&amp;quot;, // have normalized list of bulkActionTags, with list of &amp;quot;bulkAction&amp;quot; and &amp;quot;bulkActionCheckBox&amp;quot; elements linked to it&lt;br /&gt;
		},&lt;br /&gt;
		&amp;quot;elementId8&amp;quot;:{&lt;br /&gt;
			&amp;quot;elementType&amp;quot;: &amp;quot;pageNumbers&amp;quot;,&lt;br /&gt;
			&amp;quot;linksAfter&amp;quot;: [&lt;br /&gt;
				{&lt;br /&gt;
					&amp;quot;action&amp;quot;: &amp;quot;jumpNumberOfPages&amp;quot;,&lt;br /&gt;
					&amp;quot;jumpPages&amp;quot;: 7,&lt;br /&gt;
					&amp;quot;string&amp;quot;: &amp;quot;..&amp;quot;&lt;br /&gt;
				},&lt;br /&gt;
				{&lt;br /&gt;
					&amp;quot;action&amp;quot;: &amp;quot;jumpNumberOfPages&amp;quot;,&lt;br /&gt;
					&amp;quot;jumpPages&amp;quot;: 1,&lt;br /&gt;
					&amp;quot;string&amp;quot;: &amp;quot;&amp;gt;&amp;quot;&lt;br /&gt;
				},&lt;br /&gt;
				{&lt;br /&gt;
					&amp;quot;action&amp;quot;: &amp;quot;goToLastPage&amp;quot;,&lt;br /&gt;
					&amp;quot;hideWhenLastPageShown&amp;quot;: true,&lt;br /&gt;
					&amp;quot;string&amp;quot;: &amp;quot;&amp;gt;&amp;gt;&amp;quot;&lt;br /&gt;
				}&lt;br /&gt;
			],&lt;br /&gt;
			&amp;quot;linksBefore&amp;quot;: [&lt;br /&gt;
				{&lt;br /&gt;
					&amp;quot;action&amp;quot;: &amp;quot;goToFirstPage&amp;quot;,&lt;br /&gt;
					&amp;quot;hideWhenFirstPageShown&amp;quot;: true,&lt;br /&gt;
					&amp;quot;string&amp;quot;: &amp;quot;&amp;lt;&amp;lt;&amp;quot;&lt;br /&gt;
				},&lt;br /&gt;
				{&lt;br /&gt;
					&amp;quot;action&amp;quot;: &amp;quot;jumpNumberOfPages&amp;quot;,&lt;br /&gt;
					&amp;quot;jumpPages&amp;quot;: 1,&lt;br /&gt;
					&amp;quot;string&amp;quot;: &amp;quot;&amp;lt;&amp;quot;&lt;br /&gt;
				},&lt;br /&gt;
				{&lt;br /&gt;
					&amp;quot;action&amp;quot;: &amp;quot;jumpNumberOfPages&amp;quot;,&lt;br /&gt;
					&amp;quot;jumpPages&amp;quot;: 7,&lt;br /&gt;
					&amp;quot;string&amp;quot;: &amp;quot;..&amp;quot;&lt;br /&gt;
				}&lt;br /&gt;
			],&lt;br /&gt;
			&amp;quot;showPagesAfter&amp;quot;: 3,&lt;br /&gt;
			&amp;quot;showPagesBefore&amp;quot;: 3&lt;br /&gt;
		},&lt;br /&gt;
		&lt;br /&gt;
		// records types    &lt;br /&gt;
		&amp;quot;elementId5&amp;quot;:{&lt;br /&gt;
			&amp;quot;elementType&amp;quot;: &amp;quot;requiredDataLinkStepObject&amp;quot;, // in record&lt;br /&gt;
			&amp;quot;requiredDataLinkStepObjectId&amp;quot;: &amp;quot;link1&amp;quot;,&lt;br /&gt;
		},&lt;br /&gt;
		&amp;quot;elementIdxx&amp;quot;:{&lt;br /&gt;
			&amp;quot;elementType&amp;quot;: &amp;quot;bulkActionCheckBox&amp;quot;,&lt;br /&gt;
			&amp;quot;bulkActionUserTag&amp;quot;: &amp;quot;tagA&amp;quot;,&lt;br /&gt;
		},&lt;br /&gt;
	},&lt;br /&gt;
	&lt;br /&gt;
	values: {&lt;br /&gt;
		// values are shared between requestProperties and filter values. This set can be iterated to overwrite values using userTag to identify&lt;br /&gt;
		userTag_1:{&lt;br /&gt;
			defaultValue: &amp;quot;xx&amp;quot;,&lt;br /&gt;
		},&lt;br /&gt;
		userTag_2:{&lt;br /&gt;
			defaultValue: &amp;quot;xx&amp;quot;,&lt;br /&gt;
		},&lt;br /&gt;
		userTag_3:{&lt;br /&gt;
			defaultValue: &amp;quot;xx&amp;quot;,&lt;br /&gt;
		},&lt;br /&gt;
		userTag_4:{&lt;br /&gt;
			defaultValue: &amp;quot;xx&amp;quot;,&lt;br /&gt;
		},&lt;br /&gt;
		userTag_5:{&lt;br /&gt;
			defaultValue: &amp;quot;xx&amp;quot;,&lt;br /&gt;
		},&lt;br /&gt;
		userTag_6:{&lt;br /&gt;
			valueSource: &amp;quot;complexFilterCombination&amp;quot;,&lt;br /&gt;
            complexFilterCombinationId: &amp;quot;hash_complexFilterCombinationA&amp;quot;,&lt;br /&gt;
		},&lt;br /&gt;
		userTag_7:{&lt;br /&gt;
			valueSource: &amp;quot;perParentCombination&amp;quot;,&lt;br /&gt;
            perParentCombinationId: &amp;quot;hash_perParentCombinationA&amp;quot;,&lt;br /&gt;
		},&lt;br /&gt;
        userTag_8: {&lt;br /&gt;
            valueSource: 'perParentIdentifier',&lt;br /&gt;
            perParentIdentifierFieldname: 'sellOfferId'&lt;br /&gt;
        },,&lt;br /&gt;
		userTag_9:{&lt;br /&gt;
			defaultValue: &amp;quot;xx&amp;quot;,&lt;br /&gt;
		},&lt;br /&gt;
		userTag_10:{&lt;br /&gt;
			defaultValue: &amp;quot;xx&amp;quot;,&lt;br /&gt;
		},&lt;br /&gt;
		userTag_11:{&lt;br /&gt;
			defaultValue: &amp;quot;xx&amp;quot;,&lt;br /&gt;
		},&lt;br /&gt;
	},&lt;br /&gt;
&lt;br /&gt;
	bulkActionUserTags: {&lt;br /&gt;
		tagA:{&lt;br /&gt;
			bulkActions: [&lt;br /&gt;
                &amp;quot;elementId11&amp;quot;,&lt;br /&gt;
                // ...&lt;br /&gt;
            ],&lt;br /&gt;
            bulkActionCheckBoxes: [&lt;br /&gt;
                &amp;quot;elementIdxx&amp;quot;,&lt;br /&gt;
                // ...&lt;br /&gt;
            ],&lt;br /&gt;
		},&lt;br /&gt;
        // ...&lt;br /&gt;
	},&lt;br /&gt;
&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= Example params sent to backend =&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;JavaScript&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
let paramFromTableOutput = {&lt;br /&gt;
	objType: { //* main objType&lt;br /&gt;
		serviceTag: &amp;quot;ProductManager&amp;quot;,&lt;br /&gt;
		objectType: &amp;quot;Product&amp;quot;&lt;br /&gt;
	},&lt;br /&gt;
    initialLogicalElementId: &amp;quot;uuid_logical_1&amp;quot;,&lt;br /&gt;
    logicalElements: {&lt;br /&gt;
       uuid_logical_1: {&lt;br /&gt;
         logicalElementType: &amp;quot;logical&amp;quot;,&lt;br /&gt;
         previousLogicalElementId: null,&lt;br /&gt;
         nextLogicalElementId: null,&lt;br /&gt;
&lt;br /&gt;
         objType: {&lt;br /&gt;
           serviceTag: &amp;quot;ProductManager&amp;quot;,&lt;br /&gt;
           objectType: &amp;quot;product&amp;quot;&lt;br /&gt;
         },&lt;br /&gt;
         fieldName: &amp;quot;productId&amp;quot;,&lt;br /&gt;
         comparison: &amp;quot;equals&amp;quot;,&lt;br /&gt;
         valueUserTag: &amp;quot;userTag_1&amp;quot;&lt;br /&gt;
       }&lt;br /&gt;
    },&lt;br /&gt;
	requiredDataFields: [ //* linkStepObjects to create main sort result's requiredData and sortFields&lt;br /&gt;
        // not needed at tableConfig level because can be built from table's elements and sortFields before sending to lib that converts to backend structure&lt;br /&gt;
        &amp;quot;userTag_LinkStepObjectA&amp;quot;, // no link, field in main objType (structure same linkPath but only one step)&lt;br /&gt;
        &amp;quot;userTag_LinkStepObjectB&amp;quot;, // has link&lt;br /&gt;
	],&lt;br /&gt;
	complexFilterCombinations:{&lt;br /&gt;
		hash_complexFilterCombinationA: {&lt;br /&gt;
          objType: {&lt;br /&gt;
            serviceTag: &amp;quot;Locations&amp;quot;,&lt;br /&gt;
            objectType: &amp;quot;locationNode&amp;quot;&lt;br /&gt;
          },&lt;br /&gt;
          initialLogicalElementId: &amp;quot;child_complexFilter_localtionNode&amp;quot;,&lt;br /&gt;
          logicalElements: {&lt;br /&gt;
            child_complexFilter_localtionNode: {&lt;br /&gt;
              logicalElementType: &amp;quot;childComplexFilter&amp;quot;,&lt;br /&gt;
              previousLogicalElementId: null,&lt;br /&gt;
              nextLogicalElementId: null,&lt;br /&gt;
&lt;br /&gt;
              childLogicalElementId: &amp;quot;logical_locationNode&amp;quot;,&lt;br /&gt;
              objType: {&lt;br /&gt;
                serviceTag: &amp;quot;Locations&amp;quot;,&lt;br /&gt;
                objectType: &amp;quot;locationNode&amp;quot;&lt;br /&gt;
              },&lt;br /&gt;
              pathLinkType: {&lt;br /&gt;
                objType: {&lt;br /&gt;
                  serviceTag: &amp;quot;Locations&amp;quot;,&lt;br /&gt;
                  objectType: &amp;quot;locationNode&amp;quot;&lt;br /&gt;
                },&lt;br /&gt;
                relType: {&lt;br /&gt;
                  serviceTag: &amp;quot;Locations&amp;quot;,&lt;br /&gt;
                  relationshipTag: &amp;quot;hasParentLocationNode&amp;quot;&lt;br /&gt;
                },&lt;br /&gt;
                direction: &amp;quot;to&amp;quot;&lt;br /&gt;
              },&lt;br /&gt;
            },&lt;br /&gt;
            logical_locationNode: {&lt;br /&gt;
               logicalElementType: &amp;quot;logical&amp;quot;,&lt;br /&gt;
               previousLogicalElementId: &amp;quot;child_complexFilter_localtionNode&amp;quot;,&lt;br /&gt;
               nextLogicalElementId: null,&lt;br /&gt;
&lt;br /&gt;
               objType: {&lt;br /&gt;
                serviceTag: &amp;quot;Locations&amp;quot;,&lt;br /&gt;
                objectType: &amp;quot;locationNode&amp;quot;&lt;br /&gt;
               },&lt;br /&gt;
               fieldName: &amp;quot;locationNodeId&amp;quot;,&lt;br /&gt;
               comparison: &amp;quot;equals&amp;quot;,&lt;br /&gt;
               valueUserTag: &amp;quot;userTag_7&amp;quot;&lt;br /&gt;
            }&lt;br /&gt;
         }&lt;br /&gt;
       },&lt;br /&gt;
	},&lt;br /&gt;
	perParentCombinations:{&lt;br /&gt;
		hash_perParentCombinationA: {&lt;br /&gt;
          objType: {&lt;br /&gt;
            serviceTag: &amp;quot;SellOfferPlan&amp;quot;,&lt;br /&gt;
            objectType: &amp;quot;sellOfferPlan&amp;quot;&lt;br /&gt;
          },&lt;br /&gt;
          initialLogicalElementId: &amp;quot;child_complexFilter_1&amp;quot;,&lt;br /&gt;
          logicalElements: {&lt;br /&gt;
            child_complexFilter_1: {&lt;br /&gt;
              logicalElementType: &amp;quot;childComplexFilter&amp;quot;,&lt;br /&gt;
              previousLogicalElementId: null,&lt;br /&gt;
              nextLogicalElementId: null,&lt;br /&gt;
&lt;br /&gt;
              childLogicalElementId: &amp;quot;logical_sellOffer&amp;quot;,&lt;br /&gt;
              objType: {&lt;br /&gt;
                serviceTag: &amp;quot;SellOfferPlan&amp;quot;,&lt;br /&gt;
                objectType: &amp;quot;sellOfferPlan&amp;quot;&lt;br /&gt;
              },&lt;br /&gt;
              pathLinkType: {&lt;br /&gt;
                objType: {&lt;br /&gt;
                  serviceTag: &amp;quot;SellOfferManager&amp;quot;,&lt;br /&gt;
                  objectType: &amp;quot;sellOffer&amp;quot;&lt;br /&gt;
                }, &lt;br /&gt;
                relType: {&lt;br /&gt;
                  serviceTag: &amp;quot;SellOfferManager&amp;quot;,&lt;br /&gt;
                  relationshipTag: &amp;quot;usesSellOfferPlan&amp;quot;&lt;br /&gt;
                },&lt;br /&gt;
                direction: &amp;quot;to&amp;quot;&lt;br /&gt;
              },&lt;br /&gt;
              requestProperties: {&lt;br /&gt;
                tag_orderQuantity: &amp;quot;userTag_9&amp;quot;&lt;br /&gt;
              }&lt;br /&gt;
           },&lt;br /&gt;
           logical_sellOffer: {&lt;br /&gt;
              logicalElementType: &amp;quot;logical&amp;quot;,&lt;br /&gt;
              previousLogicalElementId: &amp;quot;child_complexFilter_1&amp;quot;,&lt;br /&gt;
              nextLogicalElementId: null,&lt;br /&gt;
&lt;br /&gt;
              objType: {&lt;br /&gt;
                serviceTag: &amp;quot;SellOfferManager&amp;quot;,&lt;br /&gt;
                objectType: &amp;quot;sellOffer&amp;quot;&lt;br /&gt;
              },&lt;br /&gt;
              fieldName: &amp;quot;sellOfferId&amp;quot;,&lt;br /&gt;
              comparison: &amp;quot;equals&amp;quot;,&lt;br /&gt;
              valueUserTag: &amp;quot;userTag_8&amp;quot;&lt;br /&gt;
           }&lt;br /&gt;
        }&lt;br /&gt;
      },&lt;br /&gt;
	},&lt;br /&gt;
	requiredDataLinkStepObjects: {&lt;br /&gt;
		userTag_LinkStepObjectA: { //* requiredData no linkPath&lt;br /&gt;
			initialObjType: { //* main objType&lt;br /&gt;
				serviceTag: &amp;quot;ProductManager&amp;quot;,&lt;br /&gt;
				objectType: &amp;quot;Product&amp;quot;&lt;br /&gt;
			},&lt;br /&gt;
			linkSteps: [&amp;quot;hash_linkStepA_1&amp;quot;],&lt;br /&gt;
		},&lt;br /&gt;
        userTag_LinkStepObjectB: { // requiredDataFields for finding max orderTotal&lt;br /&gt;
            initialObjType: { //* main objType&lt;br /&gt;
				serviceTag: &amp;quot;ProductManager&amp;quot;,&lt;br /&gt;
				objectType: &amp;quot;Product&amp;quot;&lt;br /&gt;
			},&lt;br /&gt;
			linkSteps: [&amp;quot;hash_linkStepB_1&amp;quot;, &amp;quot;hash_linkStepB_2&amp;quot;, &amp;quot;hash_linkStepB_3&amp;quot;],&lt;br /&gt;
        }&lt;br /&gt;
        // userTag_LinkStepObjectC&lt;br /&gt;
        // userTag_LinkStepObjectD&lt;br /&gt;
	},&lt;br /&gt;
	requiredDataLinkSteps: {&lt;br /&gt;
		hash_linkStepA_1:{&lt;br /&gt;
          fieldName: &amp;quot;xxx&amp;quot; &lt;br /&gt;
        },&lt;br /&gt;
        hash_linkStepB_1:{&lt;br /&gt;
          pathLinkType: {&lt;br /&gt;
             objType: {&lt;br /&gt;
               serviceTag: &amp;quot;SellOfferManager&amp;quot;,&lt;br /&gt;
               objectType: &amp;quot;SellOffer&amp;quot;&lt;br /&gt;
             },&lt;br /&gt;
             relType: {&lt;br /&gt;
               serviceTag: &amp;quot;ProductManager&amp;quot;,&lt;br /&gt;
               relationshipTag: &amp;quot;hasSellOffer&amp;quot;&lt;br /&gt;
             },&lt;br /&gt;
             direction: &amp;quot;to&amp;quot;,&lt;br /&gt;
          },&lt;br /&gt;
           addFilterMain: true, //default: false =&amp;gt; need to add filterMain set = true&lt;br /&gt;
           filterElements: { //* filter in linkPath&lt;br /&gt;
             objType: {&lt;br /&gt;
               serviceTag: &amp;quot;SellOfferManager&amp;quot;,&lt;br /&gt;
               objectType: &amp;quot;SellOffer&amp;quot;&lt;br /&gt;
             },&lt;br /&gt;
             initialLogicalElementId: &amp;quot;logical_sellOffer_in_link&amp;quot;,&lt;br /&gt;
             logicalElements: {&lt;br /&gt;
               logical_sellOffer_in_link: {&lt;br /&gt;
                  logicalElementType: &amp;quot;logical&amp;quot;,&lt;br /&gt;
                  previousLogicalElementId: null,&lt;br /&gt;
                  nextLogicalElementId: null,&lt;br /&gt;
&lt;br /&gt;
                  objType: {&lt;br /&gt;
                    serviceTag: &amp;quot;SellOfferManager&amp;quot;,&lt;br /&gt;
                    objectType: &amp;quot;SellOffer&amp;quot;&lt;br /&gt;
                  },&lt;br /&gt;
                  fieldName: &amp;quot;userId&amp;quot;,&lt;br /&gt;
                  comparison: &amp;quot;equals&amp;quot;,&lt;br /&gt;
                  valueUserTag: &amp;quot;userTag_2&amp;quot;&lt;br /&gt;
               }&lt;br /&gt;
            }&lt;br /&gt;
          },&lt;br /&gt;
&lt;br /&gt;
        }, &lt;br /&gt;
        hash_linkStepB_2: {&lt;br /&gt;
           pathLinkType: {&lt;br /&gt;
             objType: {&lt;br /&gt;
               serviceTag: &amp;quot;OrderPrice&amp;quot;,&lt;br /&gt;
               objectType: &amp;quot;OrderPrice&amp;quot;&lt;br /&gt;
             },&lt;br /&gt;
             relType: {&lt;br /&gt;
               serviceTag: &amp;quot;sellOfferStandard&amp;quot;,&lt;br /&gt;
               relationshipTag: &amp;quot;hasOrderPrice&amp;quot;&lt;br /&gt;
             },&lt;br /&gt;
             direction: &amp;quot;to&amp;quot;,&lt;br /&gt;
           },&lt;br /&gt;
          requestProperties: {&lt;br /&gt;
            tag_deliverTo: &amp;quot;userTag_3&amp;quot;,&lt;br /&gt;
            tag_sellOfferPlan: &amp;quot;userTag_4&amp;quot;,&lt;br /&gt;
            // tag_sellOfferPlanDeliveryMethodLink: &amp;quot;userTag_5&amp;quot;,&lt;br /&gt;
            // tag_sellOfferPlanUserPaymentMethodLink: &amp;quot;userTag_6&amp;quot;&lt;br /&gt;
          }&lt;br /&gt;
          aggregate: &amp;quot;max&amp;quot;,&lt;br /&gt;
          sortFields: [&lt;br /&gt;
       			{&lt;br /&gt;
            		requiredDataLinkStepObjectId: &amp;quot;userTag_LinkStepObjectC&amp;quot;,&lt;br /&gt;
		            dataType: &amp;quot;number&amp;quot;&lt;br /&gt;
        		},&lt;br /&gt;
				{&lt;br /&gt;
        		     requiredDataLinkStepObjectId: &amp;quot;userTag_LinkStepObjectD&amp;quot;,&lt;br /&gt;
		             dataType: &amp;quot;string&amp;quot;&lt;br /&gt;
		         },&lt;br /&gt;
&lt;br /&gt;
                {&lt;br /&gt;
        		     requiredDataLinkStepObjectId: &amp;quot;userTag_LinkStepObjectD&amp;quot;,&lt;br /&gt;
		             dataType: &amp;quot;array&amp;quot;,&lt;br /&gt;
                     sortByValueUserTags:[&amp;quot;userTag_1&amp;quot;,&amp;quot;userTag_2&amp;quot;]&lt;br /&gt;
		        }&lt;br /&gt;
            ],&lt;br /&gt;
          comparison: &amp;quot;greaterThan&amp;quot;,&lt;br /&gt;
          comparisonSortField: &amp;quot;upToValue&amp;quot;,&lt;br /&gt;
          comparisonSortDataType: &amp;quot;string&amp;quot;,&lt;br /&gt;
          comparisonValue: &amp;quot;userTag_2&amp;quot;,&lt;br /&gt;
        }, &lt;br /&gt;
        hash_linkStepB_3: {&lt;br /&gt;
           fieldName: &amp;quot;zzz&amp;quot;,&lt;br /&gt;
        }&lt;br /&gt;
	},&lt;br /&gt;
	sortFields: [&lt;br /&gt;
        {&lt;br /&gt;
             requiredDataLinkStepObjectId: &amp;quot;userTag_LinkStepObjectB&amp;quot;,&lt;br /&gt;
             dataType: &amp;quot;number&amp;quot;,&lt;br /&gt;
             sortOrder: &amp;quot;descending&amp;quot;&lt;br /&gt;
        },&lt;br /&gt;
		{&lt;br /&gt;
             requiredDataLinkStepObjectId: &amp;quot;userTag_LinkStepObjectA&amp;quot;,&lt;br /&gt;
             dataType: &amp;quot;string&amp;quot;&lt;br /&gt;
         },&lt;br /&gt;
        {&lt;br /&gt;
             requiredDataLinkStepObjectId: &amp;quot;userTag_LinkStepObjectD&amp;quot;,&lt;br /&gt;
		     dataType: &amp;quot;array&amp;quot;,&lt;br /&gt;
             sortByValueUserTags:[&amp;quot;userTag_1&amp;quot;,&amp;quot;userTag_2&amp;quot;]&lt;br /&gt;
		}&lt;br /&gt;
    ],&lt;br /&gt;
	valueUserTags: {&lt;br /&gt;
		userTag_1:{&lt;br /&gt;
			value: &amp;quot;xx&amp;quot;,&lt;br /&gt;
		},&lt;br /&gt;
		userTag_2:{&lt;br /&gt;
			value: &amp;quot;yy&amp;quot;,&lt;br /&gt;
		},&lt;br /&gt;
		userTag_3:{&lt;br /&gt;
			valueSource: &amp;quot;complexFilterCombination&amp;quot;,&lt;br /&gt;
            complexFilterCombinationId: &amp;quot;hash_complexFilterCombinationA&amp;quot;,&lt;br /&gt;
		},&lt;br /&gt;
		userTag_4:{&lt;br /&gt;
			valueSource: &amp;quot;perParentCombination&amp;quot;,&lt;br /&gt;
            perParentCombinationId: &amp;quot;hash_perParentCombinationA&amp;quot;,&lt;br /&gt;
		},&lt;br /&gt;
		userTag_7: {&lt;br /&gt;
          value: &amp;quot;zz&amp;quot;,&lt;br /&gt;
        },&lt;br /&gt;
        userTag_8: {&lt;br /&gt;
          valueSource: 'perParentIdentifier',&lt;br /&gt;
          perParentIdentifierFieldname: 'sellOfferId'&lt;br /&gt;
        },&lt;br /&gt;
        userTag_9: {&lt;br /&gt;
          value: 2,&lt;br /&gt;
        },&lt;br /&gt;
	 }&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[Category:Working documents| 2025-04-14]]&lt;br /&gt;
[[Category:Working documents - Search Results| 2025-04-14]]&lt;/div&gt;</summary>
		<author><name>Rut</name></author>
	</entry>
	<entry>
		<id>https://izara.io/wiki/index.php?title=2025-04-14_-_Frontend_LinkPath_structure_for_tableOutput&amp;diff=4000</id>
		<title>2025-04-14 - Frontend LinkPath structure for tableOutput</title>
		<link rel="alternate" type="text/html" href="https://izara.io/wiki/index.php?title=2025-04-14_-_Frontend_LinkPath_structure_for_tableOutput&amp;diff=4000"/>
		<updated>2026-01-19T04:45:16Z</updated>

		<summary type="html">&lt;p&gt;Rut: /* Example params in tableConfig */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Service - Search Results]]&lt;br /&gt;
&lt;br /&gt;
= Overview =&lt;br /&gt;
&lt;br /&gt;
Structure frontend TableConfig and Output prepare for shared library that creates complexFilter and requestProperties&lt;br /&gt;
&lt;br /&gt;
= Example params in tableConfig =&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;JavaScript&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
let paramFromTableOutput = {&lt;br /&gt;
&lt;br /&gt;
	// .. other properties same as params sent to backend&lt;br /&gt;
	// requiredDataFields not needed in tableConfig as referenced in elements and sortFields&lt;br /&gt;
	// header/footer filterDataField elements reference valueUserTag&lt;br /&gt;
&lt;br /&gt;
	&amp;quot;elements&amp;quot;: {&lt;br /&gt;
		// shared types&lt;br /&gt;
		&amp;quot;elementId12&amp;quot;:{&lt;br /&gt;
			&amp;quot;elementType&amp;quot;: &amp;quot;freetext&amp;quot;,&lt;br /&gt;
			&amp;quot;value&amp;quot;: &amp;quot;aa&amp;quot;&lt;br /&gt;
		}&lt;br /&gt;
&lt;br /&gt;
		// headerFooter types&lt;br /&gt;
		&amp;quot;elementId1&amp;quot;:{&lt;br /&gt;
			&amp;quot;elementType&amp;quot;: &amp;quot;valueUserTag&amp;quot;,&lt;br /&gt;
			&amp;quot;valueUserTag&amp;quot;: &amp;quot;userTag_9&amp;quot;,&lt;br /&gt;
			&amp;quot;inputType&amp;quot;: &amp;quot;text&amp;quot; // || &amp;quot;select&amp;quot; || &amp;quot;checkbox&amp;quot; || &amp;quot;radio&amp;quot; ,&lt;br /&gt;
		},&lt;br /&gt;
		&amp;quot;elementId2&amp;quot;:{&lt;br /&gt;
			&amp;quot;elementType&amp;quot;: &amp;quot;valueUserTag&amp;quot;,&lt;br /&gt;
			&amp;quot;valueUserTag&amp;quot;: &amp;quot;userTag_9&amp;quot;&lt;br /&gt;
			&amp;quot;inputType&amp;quot;: &amp;quot;select&amp;quot;,&lt;br /&gt;
			&amp;quot;options&amp;quot;: [&lt;br /&gt;
				&amp;quot;x&amp;quot;,&lt;br /&gt;
				&amp;quot;y&amp;quot;,&lt;br /&gt;
				&amp;quot;z&amp;quot;&lt;br /&gt;
			]&lt;br /&gt;
		},&lt;br /&gt;
		&amp;quot;elementId3&amp;quot;:{&lt;br /&gt;
			&amp;quot;elementType&amp;quot;: &amp;quot;sort&amp;quot;,&lt;br /&gt;
			&amp;quot;display&amp;quot;: &amp;quot;downArrow&amp;quot;, // || upArrow&lt;br /&gt;
			&amp;quot;requiredDataLinkStepObjectId&amp;quot;: &amp;quot;userTag_LinkStepObjectC&amp;quot;,&lt;br /&gt;
			&amp;quot;dataType&amp;quot;: &amp;quot;number&amp;quot;, // &amp;quot;number&amp;quot; | &amp;quot;string&amp;quot;&lt;br /&gt;
			&amp;quot;sortOrder&amp;quot;: &amp;quot;ascending&amp;quot; // &amp;quot;ascending&amp;quot;|&amp;quot;descending&amp;quot; (default ascending)&lt;br /&gt;
		},&lt;br /&gt;
		&amp;quot;elementId4&amp;quot;:{&lt;br /&gt;
			&amp;quot;elementType&amp;quot;: &amp;quot;numberOfRows&amp;quot;,&lt;br /&gt;
			&amp;quot;selection&amp;quot;: &amp;quot;input&amp;quot; // || list&lt;br /&gt;
		},&lt;br /&gt;
		&amp;quot;elementId6&amp;quot;:{&lt;br /&gt;
			&amp;quot;elementType&amp;quot;: &amp;quot;submit&amp;quot;,&lt;br /&gt;
			&amp;quot;display&amp;quot;: &amp;quot;submit&amp;quot;, // any text to be shown&lt;br /&gt;
			&amp;quot;sendRequest&amp;quot;: &amp;quot;all&amp;quot; // numberOfRows || all || filters&lt;br /&gt;
		},&lt;br /&gt;
		&amp;quot;elementId7&amp;quot;:{&lt;br /&gt;
			&amp;quot;elementType&amp;quot;: &amp;quot;reset&amp;quot;,&lt;br /&gt;
			&amp;quot;display&amp;quot;: &amp;quot;reset rows&amp;quot;, // any text to be shown&lt;br /&gt;
			&amp;quot;sendRequest&amp;quot;: &amp;quot;numberOfRows&amp;quot; // numberOfRows || all || filters&lt;br /&gt;
		},&lt;br /&gt;
		&amp;quot;elementId9&amp;quot;:{&lt;br /&gt;
			&amp;quot;elementType&amp;quot;: &amp;quot;totalDatafield&amp;quot;,&lt;br /&gt;
			&amp;quot;requiredDataLinkStepObjectId&amp;quot;: &amp;quot;link1&amp;quot;,&lt;br /&gt;
			&amp;quot;showIfNotAllRowsLoaded&amp;quot;: true // || false&lt;br /&gt;
		},&lt;br /&gt;
		&amp;quot;elementId11&amp;quot;:{&lt;br /&gt;
			// will need to link to per record check box&lt;br /&gt;
			&amp;quot;elementType&amp;quot;: &amp;quot;bulkAction&amp;quot;,&lt;br /&gt;
			&amp;quot;action&amp;quot;: &amp;quot;on&amp;quot; // on | off | switch&lt;br /&gt;
			&amp;quot;bulkActionUserTag&amp;quot;: &amp;quot;tagA&amp;quot;, // have normalized list of bulkActionTags, with list of &amp;quot;bulkAction&amp;quot; and &amp;quot;bulkActionCheckBox&amp;quot; elements linked to it&lt;br /&gt;
		},&lt;br /&gt;
		&amp;quot;elementId8&amp;quot;:{&lt;br /&gt;
			&amp;quot;elementType&amp;quot;: &amp;quot;pageNumbers&amp;quot;,&lt;br /&gt;
			&amp;quot;linksAfter&amp;quot;: [&lt;br /&gt;
				{&lt;br /&gt;
					&amp;quot;action&amp;quot;: &amp;quot;jumpNumberOfPages&amp;quot;,&lt;br /&gt;
					&amp;quot;jumpPages&amp;quot;: 7,&lt;br /&gt;
					&amp;quot;string&amp;quot;: &amp;quot;..&amp;quot;&lt;br /&gt;
				},&lt;br /&gt;
				{&lt;br /&gt;
					&amp;quot;action&amp;quot;: &amp;quot;jumpNumberOfPages&amp;quot;,&lt;br /&gt;
					&amp;quot;jumpPages&amp;quot;: 1,&lt;br /&gt;
					&amp;quot;string&amp;quot;: &amp;quot;&amp;gt;&amp;quot;&lt;br /&gt;
				},&lt;br /&gt;
				{&lt;br /&gt;
					&amp;quot;action&amp;quot;: &amp;quot;goToLastPage&amp;quot;,&lt;br /&gt;
					&amp;quot;hideWhenLastPageShown&amp;quot;: true,&lt;br /&gt;
					&amp;quot;string&amp;quot;: &amp;quot;&amp;gt;&amp;gt;&amp;quot;&lt;br /&gt;
				}&lt;br /&gt;
			],&lt;br /&gt;
			&amp;quot;linksBefore&amp;quot;: [&lt;br /&gt;
				{&lt;br /&gt;
					&amp;quot;action&amp;quot;: &amp;quot;goToFirstPage&amp;quot;,&lt;br /&gt;
					&amp;quot;hideWhenFirstPageShown&amp;quot;: true,&lt;br /&gt;
					&amp;quot;string&amp;quot;: &amp;quot;&amp;lt;&amp;lt;&amp;quot;&lt;br /&gt;
				},&lt;br /&gt;
				{&lt;br /&gt;
					&amp;quot;action&amp;quot;: &amp;quot;jumpNumberOfPages&amp;quot;,&lt;br /&gt;
					&amp;quot;jumpPages&amp;quot;: 1,&lt;br /&gt;
					&amp;quot;string&amp;quot;: &amp;quot;&amp;lt;&amp;quot;&lt;br /&gt;
				},&lt;br /&gt;
				{&lt;br /&gt;
					&amp;quot;action&amp;quot;: &amp;quot;jumpNumberOfPages&amp;quot;,&lt;br /&gt;
					&amp;quot;jumpPages&amp;quot;: 7,&lt;br /&gt;
					&amp;quot;string&amp;quot;: &amp;quot;..&amp;quot;&lt;br /&gt;
				}&lt;br /&gt;
			],&lt;br /&gt;
			&amp;quot;showPagesAfter&amp;quot;: 3,&lt;br /&gt;
			&amp;quot;showPagesBefore&amp;quot;: 3&lt;br /&gt;
		},&lt;br /&gt;
		&lt;br /&gt;
		// records types    &lt;br /&gt;
		&amp;quot;elementId5&amp;quot;:{&lt;br /&gt;
			&amp;quot;elementType&amp;quot;: &amp;quot;requiredDataLinkStepObject&amp;quot;, // in record&lt;br /&gt;
			&amp;quot;requiredDataLinkStepObjectId&amp;quot;: &amp;quot;link1&amp;quot;,&lt;br /&gt;
		},&lt;br /&gt;
		&amp;quot;elementIdxx&amp;quot;:{&lt;br /&gt;
			&amp;quot;elementType&amp;quot;: &amp;quot;bulkActionCheckBox&amp;quot;,&lt;br /&gt;
			&amp;quot;bulkActionUserTag&amp;quot;: &amp;quot;tagA&amp;quot;,&lt;br /&gt;
		},&lt;br /&gt;
	},&lt;br /&gt;
	&lt;br /&gt;
	values: {&lt;br /&gt;
		// values are shared between requestProperties and filter values. This set can be iterated to overwrite values using userTag to identify&lt;br /&gt;
		userTag_1:{&lt;br /&gt;
			defaultValue: &amp;quot;xx&amp;quot;,&lt;br /&gt;
		},&lt;br /&gt;
		userTag_2:{&lt;br /&gt;
			defaultValue: &amp;quot;xx&amp;quot;,&lt;br /&gt;
		},&lt;br /&gt;
		userTag_3:{&lt;br /&gt;
			defaultValue: &amp;quot;xx&amp;quot;,&lt;br /&gt;
		},&lt;br /&gt;
		userTag_4:{&lt;br /&gt;
			defaultValue: &amp;quot;xx&amp;quot;,&lt;br /&gt;
		},&lt;br /&gt;
		userTag_5:{&lt;br /&gt;
			defaultValue: &amp;quot;xx&amp;quot;,&lt;br /&gt;
		},&lt;br /&gt;
		userTag_6:{&lt;br /&gt;
			valueSource: &amp;quot;complexFilterCombination&amp;quot;,&lt;br /&gt;
            complexFilterCombinationId: &amp;quot;hash_complexFilterCombinationA&amp;quot;,&lt;br /&gt;
		},&lt;br /&gt;
		userTag_7:{&lt;br /&gt;
			valueSource: &amp;quot;perParentCombination&amp;quot;,&lt;br /&gt;
            perParentCombinationId: &amp;quot;hash_perParentCombinationA&amp;quot;,&lt;br /&gt;
		},&lt;br /&gt;
        userTag_8: {&lt;br /&gt;
            valueSource: 'perParentIdentifier',&lt;br /&gt;
            perParentIdentifierFieldname: 'sellOfferId'&lt;br /&gt;
        },,&lt;br /&gt;
		userTag_9:{&lt;br /&gt;
			defaultValue: &amp;quot;xx&amp;quot;,&lt;br /&gt;
		},&lt;br /&gt;
		userTag_10:{&lt;br /&gt;
			defaultValue: &amp;quot;xx&amp;quot;,&lt;br /&gt;
		},&lt;br /&gt;
		userTag_11:{&lt;br /&gt;
			defaultValue: &amp;quot;xx&amp;quot;,&lt;br /&gt;
		},&lt;br /&gt;
	},&lt;br /&gt;
&lt;br /&gt;
	bulkActionUserTags: {&lt;br /&gt;
		tagA:{&lt;br /&gt;
			bulkActions: [&lt;br /&gt;
                &amp;quot;elementId11&amp;quot;,&lt;br /&gt;
                // ...&lt;br /&gt;
            ],&lt;br /&gt;
            bulkActionCheckBoxes: [&lt;br /&gt;
                &amp;quot;elementIdxx&amp;quot;,&lt;br /&gt;
                // ...&lt;br /&gt;
            ],&lt;br /&gt;
		},&lt;br /&gt;
        // ...&lt;br /&gt;
	},&lt;br /&gt;
&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= Example params sent to backend =&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;JavaScript&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
let paramFromTableOutput = {&lt;br /&gt;
	objType: { //* main objType&lt;br /&gt;
		serviceTag: &amp;quot;ProductManager&amp;quot;,&lt;br /&gt;
		objectType: &amp;quot;Product&amp;quot;&lt;br /&gt;
	},&lt;br /&gt;
    initialLogicalElementId: &amp;quot;uuid_logical_1&amp;quot;,&lt;br /&gt;
    logicalElements: {&lt;br /&gt;
       uuid_logical_1: {&lt;br /&gt;
         logicalElementType: &amp;quot;logical&amp;quot;,&lt;br /&gt;
         previousLogicalElementId: null,&lt;br /&gt;
         nextLogicalElementId: null,&lt;br /&gt;
&lt;br /&gt;
         objType: {&lt;br /&gt;
           serviceTag: &amp;quot;ProductManager&amp;quot;,&lt;br /&gt;
           objectType: &amp;quot;product&amp;quot;&lt;br /&gt;
         },&lt;br /&gt;
         fieldName: &amp;quot;productId&amp;quot;,&lt;br /&gt;
         comparison: &amp;quot;equals&amp;quot;,&lt;br /&gt;
         valueUserTag: &amp;quot;userTag_1&amp;quot;&lt;br /&gt;
       }&lt;br /&gt;
    },&lt;br /&gt;
	requiredDataFields: [ //* linkStepObjects to create main sort result's requiredData and sortFields&lt;br /&gt;
        // not needed at tableConfig level because can be built from table's elements and sortFields before sending to lib that converts to backend structure&lt;br /&gt;
        &amp;quot;userTag_LinkStepObjectA&amp;quot;, // no link, field in main objType (structure same linkPath but only one step)&lt;br /&gt;
        &amp;quot;userTag_LinkStepObjectB&amp;quot;, // has link&lt;br /&gt;
	],&lt;br /&gt;
	complexFilterCombinations:{&lt;br /&gt;
		hash_complexFilterCombinationA: {&lt;br /&gt;
          objType: {&lt;br /&gt;
            serviceTag: &amp;quot;Locations&amp;quot;,&lt;br /&gt;
            objectType: &amp;quot;locationNode&amp;quot;&lt;br /&gt;
          },&lt;br /&gt;
          initialLogicalElementId: &amp;quot;child_complexFilter_localtionNode&amp;quot;,&lt;br /&gt;
          logicalElements: {&lt;br /&gt;
            child_complexFilter_localtionNode: {&lt;br /&gt;
              logicalElementType: &amp;quot;childComplexFilter&amp;quot;,&lt;br /&gt;
              previousLogicalElementId: null,&lt;br /&gt;
              nextLogicalElementId: null,&lt;br /&gt;
&lt;br /&gt;
              childLogicalElementId: &amp;quot;logical_locationNode&amp;quot;,&lt;br /&gt;
              objType: {&lt;br /&gt;
                serviceTag: &amp;quot;Locations&amp;quot;,&lt;br /&gt;
                objectType: &amp;quot;locationNode&amp;quot;&lt;br /&gt;
              },&lt;br /&gt;
              pathLinkType: {&lt;br /&gt;
                objType: {&lt;br /&gt;
                  serviceTag: &amp;quot;Locations&amp;quot;,&lt;br /&gt;
                  objectType: &amp;quot;locationNode&amp;quot;&lt;br /&gt;
                },&lt;br /&gt;
                relType: {&lt;br /&gt;
                  serviceTag: &amp;quot;Locations&amp;quot;,&lt;br /&gt;
                  relationshipTag: &amp;quot;hasParentLocationNode&amp;quot;&lt;br /&gt;
                },&lt;br /&gt;
                direction: &amp;quot;to&amp;quot;&lt;br /&gt;
              },&lt;br /&gt;
            },&lt;br /&gt;
            logical_locationNode: {&lt;br /&gt;
               logicalElementType: &amp;quot;logical&amp;quot;,&lt;br /&gt;
               previousLogicalElementId: &amp;quot;child_complexFilter_localtionNode&amp;quot;,&lt;br /&gt;
               nextLogicalElementId: null,&lt;br /&gt;
&lt;br /&gt;
               objType: {&lt;br /&gt;
                serviceTag: &amp;quot;Locations&amp;quot;,&lt;br /&gt;
                objectType: &amp;quot;locationNode&amp;quot;&lt;br /&gt;
               },&lt;br /&gt;
               fieldName: &amp;quot;locationNodeId&amp;quot;,&lt;br /&gt;
               comparison: &amp;quot;equals&amp;quot;,&lt;br /&gt;
               valueUserTag: &amp;quot;userTag_7&amp;quot;&lt;br /&gt;
            }&lt;br /&gt;
         }&lt;br /&gt;
       },&lt;br /&gt;
	},&lt;br /&gt;
	perParentCombinations:{&lt;br /&gt;
		hash_perParentCombinationA: {&lt;br /&gt;
          objType: {&lt;br /&gt;
            serviceTag: &amp;quot;SellOfferPlan&amp;quot;,&lt;br /&gt;
            objectType: &amp;quot;sellOfferPlan&amp;quot;&lt;br /&gt;
          },&lt;br /&gt;
          initialLogicalElementId: &amp;quot;child_complexFilter_1&amp;quot;,&lt;br /&gt;
          logicalElements: {&lt;br /&gt;
            child_complexFilter_1: {&lt;br /&gt;
              logicalElementType: &amp;quot;childComplexFilter&amp;quot;,&lt;br /&gt;
              previousLogicalElementId: null,&lt;br /&gt;
              nextLogicalElementId: null,&lt;br /&gt;
&lt;br /&gt;
              childLogicalElementId: &amp;quot;logical_sellOffer&amp;quot;,&lt;br /&gt;
              objType: {&lt;br /&gt;
                serviceTag: &amp;quot;SellOfferPlan&amp;quot;,&lt;br /&gt;
                objectType: &amp;quot;sellOfferPlan&amp;quot;&lt;br /&gt;
              },&lt;br /&gt;
              pathLinkType: {&lt;br /&gt;
                objType: {&lt;br /&gt;
                  serviceTag: &amp;quot;SellOfferManager&amp;quot;,&lt;br /&gt;
                  objectType: &amp;quot;sellOffer&amp;quot;&lt;br /&gt;
                }, &lt;br /&gt;
                relType: {&lt;br /&gt;
                  serviceTag: &amp;quot;SellOfferManager&amp;quot;,&lt;br /&gt;
                  relationshipTag: &amp;quot;usesSellOfferPlan&amp;quot;&lt;br /&gt;
                },&lt;br /&gt;
                direction: &amp;quot;to&amp;quot;&lt;br /&gt;
              },&lt;br /&gt;
              requestProperties: {&lt;br /&gt;
                tag_orderQuantity: &amp;quot;userTag_9&amp;quot;&lt;br /&gt;
              }&lt;br /&gt;
           },&lt;br /&gt;
           logical_sellOffer: {&lt;br /&gt;
              logicalElementType: &amp;quot;logical&amp;quot;,&lt;br /&gt;
              previousLogicalElementId: &amp;quot;child_complexFilter_1&amp;quot;,&lt;br /&gt;
              nextLogicalElementId: null,&lt;br /&gt;
&lt;br /&gt;
              objType: {&lt;br /&gt;
                serviceTag: &amp;quot;SellOfferManager&amp;quot;,&lt;br /&gt;
                objectType: &amp;quot;sellOffer&amp;quot;&lt;br /&gt;
              },&lt;br /&gt;
              fieldName: &amp;quot;sellOfferId&amp;quot;,&lt;br /&gt;
              comparison: &amp;quot;equals&amp;quot;,&lt;br /&gt;
              valueUserTag: &amp;quot;userTag_8&amp;quot;&lt;br /&gt;
           }&lt;br /&gt;
        }&lt;br /&gt;
      },&lt;br /&gt;
	},&lt;br /&gt;
	requiredDataLinkStepObjects: {&lt;br /&gt;
		userTag_LinkStepObjectA: { //* requiredData no linkPath&lt;br /&gt;
			initialObjType: { //* main objType&lt;br /&gt;
				serviceTag: &amp;quot;ProductManager&amp;quot;,&lt;br /&gt;
				objectType: &amp;quot;Product&amp;quot;&lt;br /&gt;
			},&lt;br /&gt;
			linkSteps: [&amp;quot;hash_linkStepA_1&amp;quot;],&lt;br /&gt;
		},&lt;br /&gt;
        userTag_LinkStepObjectB: { // requiredDataFields for finding max orderTotal&lt;br /&gt;
            initialObjType: { //* main objType&lt;br /&gt;
				serviceTag: &amp;quot;ProductManager&amp;quot;,&lt;br /&gt;
				objectType: &amp;quot;Product&amp;quot;&lt;br /&gt;
			},&lt;br /&gt;
			linkSteps: [&amp;quot;hash_linkStepB_1&amp;quot;, &amp;quot;hash_linkStepB_2&amp;quot;, &amp;quot;hash_linkStepB_3&amp;quot;],&lt;br /&gt;
        }&lt;br /&gt;
        // userTag_LinkStepObjectC&lt;br /&gt;
        // userTag_LinkStepObjectD&lt;br /&gt;
	},&lt;br /&gt;
	requiredDataLinkSteps: {&lt;br /&gt;
		hash_linkStepA_1:{&lt;br /&gt;
          fieldName: &amp;quot;xxx&amp;quot; &lt;br /&gt;
        },&lt;br /&gt;
        hash_linkStepB_1:{&lt;br /&gt;
          pathLinkType: {&lt;br /&gt;
             objType: {&lt;br /&gt;
               serviceTag: &amp;quot;SellOfferManager&amp;quot;,&lt;br /&gt;
               objectType: &amp;quot;SellOffer&amp;quot;&lt;br /&gt;
             },&lt;br /&gt;
             relType: {&lt;br /&gt;
               serviceTag: &amp;quot;ProductManager&amp;quot;,&lt;br /&gt;
               relationshipTag: &amp;quot;hasSellOffer&amp;quot;&lt;br /&gt;
             },&lt;br /&gt;
             direction: &amp;quot;to&amp;quot;,&lt;br /&gt;
          },&lt;br /&gt;
           addFilterMain: true, //default: false =&amp;gt; need to add filterMain set = true&lt;br /&gt;
           filterElements: { //* filter in linkPath&lt;br /&gt;
             objType: {&lt;br /&gt;
               serviceTag: &amp;quot;SellOfferManager&amp;quot;,&lt;br /&gt;
               objectType: &amp;quot;SellOffer&amp;quot;&lt;br /&gt;
             },&lt;br /&gt;
             initialLogicalElementId: &amp;quot;logical_sellOffer_in_link&amp;quot;,&lt;br /&gt;
             logicalElements: {&lt;br /&gt;
               logical_sellOffer_in_link: {&lt;br /&gt;
                  logicalElementType: &amp;quot;logical&amp;quot;,&lt;br /&gt;
                  previousLogicalElementId: null,&lt;br /&gt;
                  nextLogicalElementId: null,&lt;br /&gt;
&lt;br /&gt;
                  objType: {&lt;br /&gt;
                    serviceTag: &amp;quot;SellOfferManager&amp;quot;,&lt;br /&gt;
                    objectType: &amp;quot;SellOffer&amp;quot;&lt;br /&gt;
                  },&lt;br /&gt;
                  fieldName: &amp;quot;userId&amp;quot;,&lt;br /&gt;
                  comparison: &amp;quot;equals&amp;quot;,&lt;br /&gt;
                  valueUserTag: &amp;quot;userTag_2&amp;quot;&lt;br /&gt;
               }&lt;br /&gt;
            }&lt;br /&gt;
          },&lt;br /&gt;
&lt;br /&gt;
        }, &lt;br /&gt;
        hash_linkStepB_2: {&lt;br /&gt;
           pathLinkType: {&lt;br /&gt;
             objType: {&lt;br /&gt;
               serviceTag: &amp;quot;OrderPrice&amp;quot;,&lt;br /&gt;
               objectType: &amp;quot;OrderPrice&amp;quot;&lt;br /&gt;
             },&lt;br /&gt;
             relType: {&lt;br /&gt;
               serviceTag: &amp;quot;sellOfferStandard&amp;quot;,&lt;br /&gt;
               relationshipTag: &amp;quot;hasOrderPrice&amp;quot;&lt;br /&gt;
             },&lt;br /&gt;
             direction: &amp;quot;to&amp;quot;,&lt;br /&gt;
           },&lt;br /&gt;
          requestProperties: {&lt;br /&gt;
            tag_deliverTo: &amp;quot;userTag_3&amp;quot;,&lt;br /&gt;
            tag_sellOfferPlan: &amp;quot;userTag_4&amp;quot;,&lt;br /&gt;
            // tag_sellOfferPlanDeliveryMethodLink: &amp;quot;userTag_5&amp;quot;,&lt;br /&gt;
            // tag_sellOfferPlanUserPaymentMethodLink: &amp;quot;userTag_6&amp;quot;&lt;br /&gt;
          }&lt;br /&gt;
          aggregate: &amp;quot;max&amp;quot;,&lt;br /&gt;
          sortFields: [&lt;br /&gt;
       			{&lt;br /&gt;
            		requiredDataLinkStepObjectId: &amp;quot;userTag_LinkStepObjectC&amp;quot;,&lt;br /&gt;
		            dataType: &amp;quot;number&amp;quot;&lt;br /&gt;
        		},&lt;br /&gt;
				{&lt;br /&gt;
        		     requiredDataLinkStepObjectId: &amp;quot;userTag_LinkStepObjectD&amp;quot;,&lt;br /&gt;
		             dataType: &amp;quot;string&amp;quot;&lt;br /&gt;
		         },&lt;br /&gt;
&lt;br /&gt;
                {&lt;br /&gt;
        		     requiredDataLinkStepObjectId: &amp;quot;userTag_LinkStepObjectD&amp;quot;,&lt;br /&gt;
		             dataType: &amp;quot;array&amp;quot;,&lt;br /&gt;
                     sortByValueUserTags:[&amp;quot;userTag_1&amp;quot;,&amp;quot;userTag_2&amp;quot;]&lt;br /&gt;
		        }&lt;br /&gt;
            ],&lt;br /&gt;
          comparison: &amp;quot;greaterThan&amp;quot;,&lt;br /&gt;
          comparisonSortField: &amp;quot;upToValue&amp;quot;,&lt;br /&gt;
          comparisonSortDataType: &amp;quot;string&amp;quot;,&lt;br /&gt;
          comparisonValue: &amp;quot;userTag_2&amp;quot;,&lt;br /&gt;
        }, &lt;br /&gt;
        hash_linkStepB_3: {&lt;br /&gt;
           fieldName: &amp;quot;zzz&amp;quot;,&lt;br /&gt;
        }&lt;br /&gt;
	},&lt;br /&gt;
	sortFields: [&lt;br /&gt;
        {&lt;br /&gt;
             requiredDataLinkStepObjectId: &amp;quot;userTag_LinkStepObjectB&amp;quot;,&lt;br /&gt;
             dataType: &amp;quot;number&amp;quot;,&lt;br /&gt;
             sortOrder: &amp;quot;descending&amp;quot;&lt;br /&gt;
        },&lt;br /&gt;
		{&lt;br /&gt;
             requiredDataLinkStepObjectId: &amp;quot;userTag_LinkStepObjectA&amp;quot;,&lt;br /&gt;
             dataType: &amp;quot;string&amp;quot;&lt;br /&gt;
         },&lt;br /&gt;
        {&lt;br /&gt;
             requiredDataLinkStepObjectId: &amp;quot;userTag_LinkStepObjectD&amp;quot;,&lt;br /&gt;
		     dataType: &amp;quot;array&amp;quot;,&lt;br /&gt;
             sortByValueUserTags:[&amp;quot;userTag_1&amp;quot;,&amp;quot;userTag_2&amp;quot;]&lt;br /&gt;
		}&lt;br /&gt;
    ],&lt;br /&gt;
	valueUserTags: {&lt;br /&gt;
		userTag_1:{&lt;br /&gt;
			value: &amp;quot;xx&amp;quot;,&lt;br /&gt;
		},&lt;br /&gt;
		userTag_2:{&lt;br /&gt;
			value: &amp;quot;yy&amp;quot;,&lt;br /&gt;
		},&lt;br /&gt;
		userTag_3:{&lt;br /&gt;
			valueSource: &amp;quot;complexFilterCombination&amp;quot;,&lt;br /&gt;
            complexFilterCombinationId: &amp;quot;hash_complexFilterCombinationA&amp;quot;,&lt;br /&gt;
		},&lt;br /&gt;
		userTag_4:{&lt;br /&gt;
			valueSource: &amp;quot;perParentCombination&amp;quot;,&lt;br /&gt;
            perParentCombinationId: &amp;quot;hash_perParentCombinationA&amp;quot;,&lt;br /&gt;
		},&lt;br /&gt;
		userTag_7: {&lt;br /&gt;
          value: &amp;quot;zz&amp;quot;,&lt;br /&gt;
        },&lt;br /&gt;
        userTag_8: {&lt;br /&gt;
          valueSource: 'perParentIdentifier',&lt;br /&gt;
          perParentIdentifierFieldname: 'sellOfferId'&lt;br /&gt;
        },&lt;br /&gt;
        userTag_9: {&lt;br /&gt;
          value: 2,&lt;br /&gt;
        },&lt;br /&gt;
	 }&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[Category:Working documents| 2025-04-14]]&lt;br /&gt;
[[Category:Working documents - Search Results| 2025-04-14]]&lt;/div&gt;</summary>
		<author><name>Rut</name></author>
	</entry>
	<entry>
		<id>https://izara.io/wiki/index.php?title=2025-04-14_-_Frontend_LinkPath_structure_for_tableOutput&amp;diff=3999</id>
		<title>2025-04-14 - Frontend LinkPath structure for tableOutput</title>
		<link rel="alternate" type="text/html" href="https://izara.io/wiki/index.php?title=2025-04-14_-_Frontend_LinkPath_structure_for_tableOutput&amp;diff=3999"/>
		<updated>2026-01-19T04:32:05Z</updated>

		<summary type="html">&lt;p&gt;Rut: /* Example params in tableConfig */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Service - Search Results]]&lt;br /&gt;
&lt;br /&gt;
= Overview =&lt;br /&gt;
&lt;br /&gt;
Structure frontend TableConfig and Output prepare for shared library that creates complexFilter and requestProperties&lt;br /&gt;
&lt;br /&gt;
= Example params in tableConfig =&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;JavaScript&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
let paramFromTableOutput = {&lt;br /&gt;
&lt;br /&gt;
	// .. other properties same as params sent to backend&lt;br /&gt;
	// requiredDataFields not needed in tableConfig as referenced in elements and sortFields&lt;br /&gt;
	// header/footer filterDataField elements reference valueUserTag&lt;br /&gt;
&lt;br /&gt;
	&amp;quot;elements&amp;quot;: {&lt;br /&gt;
		// shared types&lt;br /&gt;
		&amp;quot;elementId12&amp;quot;:{&lt;br /&gt;
			&amp;quot;elementType&amp;quot;: &amp;quot;freetext&amp;quot;,&lt;br /&gt;
			&amp;quot;value&amp;quot;: &amp;quot;aa&amp;quot;&lt;br /&gt;
		}&lt;br /&gt;
&lt;br /&gt;
		// headerFooter types&lt;br /&gt;
		&amp;quot;elementId1&amp;quot;:{&lt;br /&gt;
			&amp;quot;elementType&amp;quot;: &amp;quot;valueUserTag&amp;quot;,&lt;br /&gt;
			&amp;quot;valueUserTag&amp;quot;: &amp;quot;userTag_9&amp;quot;,&lt;br /&gt;
			&amp;quot;inputType&amp;quot;: &amp;quot;text&amp;quot; // || &amp;quot;select&amp;quot; || &amp;quot;checkbox&amp;quot; || &amp;quot;radio&amp;quot; ,&lt;br /&gt;
		},&lt;br /&gt;
		&amp;quot;elementId2&amp;quot;:{&lt;br /&gt;
			&amp;quot;elementType&amp;quot;: &amp;quot;valueUserTag&amp;quot;,&lt;br /&gt;
			&amp;quot;valueUserTag&amp;quot;: &amp;quot;userTag_9&amp;quot;&lt;br /&gt;
			&amp;quot;inputType&amp;quot;: &amp;quot;select&amp;quot;,&lt;br /&gt;
			&amp;quot;options&amp;quot;: [&lt;br /&gt;
				&amp;quot;x&amp;quot;,&lt;br /&gt;
				&amp;quot;y&amp;quot;,&lt;br /&gt;
				&amp;quot;z&amp;quot;&lt;br /&gt;
			]&lt;br /&gt;
		},&lt;br /&gt;
		&amp;quot;elementId3&amp;quot;:{&lt;br /&gt;
			&amp;quot;elementType&amp;quot;: &amp;quot;sort&amp;quot;,&lt;br /&gt;
			&amp;quot;display&amp;quot;: &amp;quot;downArrow&amp;quot;, // || upArrow&lt;br /&gt;
			&amp;quot;requiredDataLinkStepObjectId&amp;quot;: &amp;quot;userTag_LinkStepObjectC&amp;quot;,&lt;br /&gt;
			&amp;quot;dataType&amp;quot;: &amp;quot;number&amp;quot;, // &amp;quot;number&amp;quot; | &amp;quot;string&amp;quot;&lt;br /&gt;
			&amp;quot;sortOrder&amp;quot;: &amp;quot;ascending&amp;quot; // &amp;quot;ascending&amp;quot;|&amp;quot;descending&amp;quot; (default ascending)&lt;br /&gt;
		},&lt;br /&gt;
		&amp;quot;elementId4&amp;quot;:{&lt;br /&gt;
			&amp;quot;elementType&amp;quot;: &amp;quot;numberOfRows&amp;quot;,&lt;br /&gt;
			&amp;quot;selection&amp;quot;: &amp;quot;input&amp;quot; // || list&lt;br /&gt;
		},&lt;br /&gt;
		&amp;quot;elementId6&amp;quot;:{&lt;br /&gt;
			&amp;quot;elementType&amp;quot;: &amp;quot;submit&amp;quot;,&lt;br /&gt;
			&amp;quot;display&amp;quot;: &amp;quot;submit&amp;quot;, // any text to be shown&lt;br /&gt;
			&amp;quot;sendRequest&amp;quot;: &amp;quot;all&amp;quot; // numberOfRows || all || filters&lt;br /&gt;
		},&lt;br /&gt;
		&amp;quot;elementId7&amp;quot;:{&lt;br /&gt;
			&amp;quot;elementType&amp;quot;: &amp;quot;reset&amp;quot;,&lt;br /&gt;
			&amp;quot;display&amp;quot;: &amp;quot;reset rows&amp;quot;, // any text to be shown&lt;br /&gt;
			&amp;quot;sendRequest&amp;quot;: &amp;quot;numberOfRows&amp;quot; // numberOfRows || all || filters&lt;br /&gt;
		},&lt;br /&gt;
		&amp;quot;elementId9&amp;quot;:{&lt;br /&gt;
			&amp;quot;elementType&amp;quot;: &amp;quot;totalDatafield&amp;quot;,&lt;br /&gt;
			&amp;quot;requiredDataLinkStepObjectId&amp;quot;: &amp;quot;link1&amp;quot;,&lt;br /&gt;
			&amp;quot;showIfNotAllRowsLoaded&amp;quot;: true // || false&lt;br /&gt;
		},&lt;br /&gt;
		&amp;quot;elementId11&amp;quot;:{&lt;br /&gt;
			// will need to link to per record check box&lt;br /&gt;
			&amp;quot;elementType&amp;quot;: &amp;quot;bulkAction&amp;quot;,&lt;br /&gt;
			&amp;quot;action&amp;quot;: &amp;quot;on&amp;quot; // on | off | switch&lt;br /&gt;
			&amp;quot;bulkActionTag&amp;quot;: &amp;quot;tagA&amp;quot;, // have normalized list of bulkActionTags, with list of &amp;quot;bulkAction&amp;quot; and &amp;quot;bulkActionCheckBox&amp;quot; elements linked to it&lt;br /&gt;
		},&lt;br /&gt;
		&amp;quot;elementId8&amp;quot;:{&lt;br /&gt;
			&amp;quot;elementType&amp;quot;: &amp;quot;pageNumbers&amp;quot;,&lt;br /&gt;
			&amp;quot;linksAfter&amp;quot;: [&lt;br /&gt;
				{&lt;br /&gt;
					&amp;quot;action&amp;quot;: &amp;quot;jumpNumberOfPages&amp;quot;,&lt;br /&gt;
					&amp;quot;jumpPages&amp;quot;: 7,&lt;br /&gt;
					&amp;quot;string&amp;quot;: &amp;quot;..&amp;quot;&lt;br /&gt;
				},&lt;br /&gt;
				{&lt;br /&gt;
					&amp;quot;action&amp;quot;: &amp;quot;jumpNumberOfPages&amp;quot;,&lt;br /&gt;
					&amp;quot;jumpPages&amp;quot;: 1,&lt;br /&gt;
					&amp;quot;string&amp;quot;: &amp;quot;&amp;gt;&amp;quot;&lt;br /&gt;
				},&lt;br /&gt;
				{&lt;br /&gt;
					&amp;quot;action&amp;quot;: &amp;quot;goToLastPage&amp;quot;,&lt;br /&gt;
					&amp;quot;hideWhenLastPageShown&amp;quot;: true,&lt;br /&gt;
					&amp;quot;string&amp;quot;: &amp;quot;&amp;gt;&amp;gt;&amp;quot;&lt;br /&gt;
				}&lt;br /&gt;
			],&lt;br /&gt;
			&amp;quot;linksBefore&amp;quot;: [&lt;br /&gt;
				{&lt;br /&gt;
					&amp;quot;action&amp;quot;: &amp;quot;goToFirstPage&amp;quot;,&lt;br /&gt;
					&amp;quot;hideWhenFirstPageShown&amp;quot;: true,&lt;br /&gt;
					&amp;quot;string&amp;quot;: &amp;quot;&amp;lt;&amp;lt;&amp;quot;&lt;br /&gt;
				},&lt;br /&gt;
				{&lt;br /&gt;
					&amp;quot;action&amp;quot;: &amp;quot;jumpNumberOfPages&amp;quot;,&lt;br /&gt;
					&amp;quot;jumpPages&amp;quot;: 1,&lt;br /&gt;
					&amp;quot;string&amp;quot;: &amp;quot;&amp;lt;&amp;quot;&lt;br /&gt;
				},&lt;br /&gt;
				{&lt;br /&gt;
					&amp;quot;action&amp;quot;: &amp;quot;jumpNumberOfPages&amp;quot;,&lt;br /&gt;
					&amp;quot;jumpPages&amp;quot;: 7,&lt;br /&gt;
					&amp;quot;string&amp;quot;: &amp;quot;..&amp;quot;&lt;br /&gt;
				}&lt;br /&gt;
			],&lt;br /&gt;
			&amp;quot;showPagesAfter&amp;quot;: 3,&lt;br /&gt;
			&amp;quot;showPagesBefore&amp;quot;: 3&lt;br /&gt;
		},&lt;br /&gt;
		&lt;br /&gt;
		// records types    &lt;br /&gt;
		&amp;quot;elementId5&amp;quot;:{&lt;br /&gt;
			&amp;quot;elementType&amp;quot;: &amp;quot;requiredDataLinkStepObject&amp;quot;, // in record&lt;br /&gt;
			&amp;quot;requiredDataLinkStepObjectId&amp;quot;: &amp;quot;link1&amp;quot;,&lt;br /&gt;
		},&lt;br /&gt;
		&amp;quot;elementIdxx&amp;quot;:{&lt;br /&gt;
			&amp;quot;elementType&amp;quot;: &amp;quot;bulkActionCheckBox&amp;quot;,&lt;br /&gt;
			&amp;quot;bulkActionTag&amp;quot;: &amp;quot;tagA&amp;quot;,&lt;br /&gt;
		},&lt;br /&gt;
	},&lt;br /&gt;
	&lt;br /&gt;
	values: {&lt;br /&gt;
		// values are shared between requestProperties and filter values. This set can be iterated to overwrite values using userTag to identify&lt;br /&gt;
		userTag_1:{&lt;br /&gt;
			defaultValue: &amp;quot;xx&amp;quot;,&lt;br /&gt;
		},&lt;br /&gt;
		userTag_2:{&lt;br /&gt;
			defaultValue: &amp;quot;xx&amp;quot;,&lt;br /&gt;
		},&lt;br /&gt;
		userTag_3:{&lt;br /&gt;
			defaultValue: &amp;quot;xx&amp;quot;,&lt;br /&gt;
		},&lt;br /&gt;
		userTag_4:{&lt;br /&gt;
			defaultValue: &amp;quot;xx&amp;quot;,&lt;br /&gt;
		},&lt;br /&gt;
		userTag_5:{&lt;br /&gt;
			defaultValue: &amp;quot;xx&amp;quot;,&lt;br /&gt;
		},&lt;br /&gt;
		userTag_6:{&lt;br /&gt;
			valueSource: &amp;quot;complexFilterCombination&amp;quot;,&lt;br /&gt;
            complexFilterCombinationId: &amp;quot;hash_complexFilterCombinationA&amp;quot;,&lt;br /&gt;
		},&lt;br /&gt;
		userTag_7:{&lt;br /&gt;
			valueSource: &amp;quot;perParentCombination&amp;quot;,&lt;br /&gt;
            perParentCombinationId: &amp;quot;hash_perParentCombinationA&amp;quot;,&lt;br /&gt;
		},&lt;br /&gt;
        userTag_8: {&lt;br /&gt;
            valueSource: 'perParentIdentifier',&lt;br /&gt;
            perParentIdentifierFieldname: 'sellOfferId'&lt;br /&gt;
        },,&lt;br /&gt;
		userTag_9:{&lt;br /&gt;
			defaultValue: &amp;quot;xx&amp;quot;,&lt;br /&gt;
		},&lt;br /&gt;
		userTag_10:{&lt;br /&gt;
			defaultValue: &amp;quot;xx&amp;quot;,&lt;br /&gt;
		},&lt;br /&gt;
		userTag_11:{&lt;br /&gt;
			defaultValue: &amp;quot;xx&amp;quot;,&lt;br /&gt;
		},&lt;br /&gt;
	}&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= Example params sent to backend =&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;JavaScript&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
let paramFromTableOutput = {&lt;br /&gt;
	objType: { //* main objType&lt;br /&gt;
		serviceTag: &amp;quot;ProductManager&amp;quot;,&lt;br /&gt;
		objectType: &amp;quot;Product&amp;quot;&lt;br /&gt;
	},&lt;br /&gt;
    initialLogicalElementId: &amp;quot;uuid_logical_1&amp;quot;,&lt;br /&gt;
    logicalElements: {&lt;br /&gt;
       uuid_logical_1: {&lt;br /&gt;
         logicalElementType: &amp;quot;logical&amp;quot;,&lt;br /&gt;
         previousLogicalElementId: null,&lt;br /&gt;
         nextLogicalElementId: null,&lt;br /&gt;
&lt;br /&gt;
         objType: {&lt;br /&gt;
           serviceTag: &amp;quot;ProductManager&amp;quot;,&lt;br /&gt;
           objectType: &amp;quot;product&amp;quot;&lt;br /&gt;
         },&lt;br /&gt;
         fieldName: &amp;quot;productId&amp;quot;,&lt;br /&gt;
         comparison: &amp;quot;equals&amp;quot;,&lt;br /&gt;
         valueUserTag: &amp;quot;userTag_1&amp;quot;&lt;br /&gt;
       }&lt;br /&gt;
    },&lt;br /&gt;
	requiredDataFields: [ //* linkStepObjects to create main sort result's requiredData and sortFields&lt;br /&gt;
        // not needed at tableConfig level because can be built from table's elements and sortFields before sending to lib that converts to backend structure&lt;br /&gt;
        &amp;quot;userTag_LinkStepObjectA&amp;quot;, // no link, field in main objType (structure same linkPath but only one step)&lt;br /&gt;
        &amp;quot;userTag_LinkStepObjectB&amp;quot;, // has link&lt;br /&gt;
	],&lt;br /&gt;
	complexFilterCombinations:{&lt;br /&gt;
		hash_complexFilterCombinationA: {&lt;br /&gt;
          objType: {&lt;br /&gt;
            serviceTag: &amp;quot;Locations&amp;quot;,&lt;br /&gt;
            objectType: &amp;quot;locationNode&amp;quot;&lt;br /&gt;
          },&lt;br /&gt;
          initialLogicalElementId: &amp;quot;child_complexFilter_localtionNode&amp;quot;,&lt;br /&gt;
          logicalElements: {&lt;br /&gt;
            child_complexFilter_localtionNode: {&lt;br /&gt;
              logicalElementType: &amp;quot;childComplexFilter&amp;quot;,&lt;br /&gt;
              previousLogicalElementId: null,&lt;br /&gt;
              nextLogicalElementId: null,&lt;br /&gt;
&lt;br /&gt;
              childLogicalElementId: &amp;quot;logical_locationNode&amp;quot;,&lt;br /&gt;
              objType: {&lt;br /&gt;
                serviceTag: &amp;quot;Locations&amp;quot;,&lt;br /&gt;
                objectType: &amp;quot;locationNode&amp;quot;&lt;br /&gt;
              },&lt;br /&gt;
              pathLinkType: {&lt;br /&gt;
                objType: {&lt;br /&gt;
                  serviceTag: &amp;quot;Locations&amp;quot;,&lt;br /&gt;
                  objectType: &amp;quot;locationNode&amp;quot;&lt;br /&gt;
                },&lt;br /&gt;
                relType: {&lt;br /&gt;
                  serviceTag: &amp;quot;Locations&amp;quot;,&lt;br /&gt;
                  relationshipTag: &amp;quot;hasParentLocationNode&amp;quot;&lt;br /&gt;
                },&lt;br /&gt;
                direction: &amp;quot;to&amp;quot;&lt;br /&gt;
              },&lt;br /&gt;
            },&lt;br /&gt;
            logical_locationNode: {&lt;br /&gt;
               logicalElementType: &amp;quot;logical&amp;quot;,&lt;br /&gt;
               previousLogicalElementId: &amp;quot;child_complexFilter_localtionNode&amp;quot;,&lt;br /&gt;
               nextLogicalElementId: null,&lt;br /&gt;
&lt;br /&gt;
               objType: {&lt;br /&gt;
                serviceTag: &amp;quot;Locations&amp;quot;,&lt;br /&gt;
                objectType: &amp;quot;locationNode&amp;quot;&lt;br /&gt;
               },&lt;br /&gt;
               fieldName: &amp;quot;locationNodeId&amp;quot;,&lt;br /&gt;
               comparison: &amp;quot;equals&amp;quot;,&lt;br /&gt;
               valueUserTag: &amp;quot;userTag_7&amp;quot;&lt;br /&gt;
            }&lt;br /&gt;
         }&lt;br /&gt;
       },&lt;br /&gt;
	},&lt;br /&gt;
	perParentCombinations:{&lt;br /&gt;
		hash_perParentCombinationA: {&lt;br /&gt;
          objType: {&lt;br /&gt;
            serviceTag: &amp;quot;SellOfferPlan&amp;quot;,&lt;br /&gt;
            objectType: &amp;quot;sellOfferPlan&amp;quot;&lt;br /&gt;
          },&lt;br /&gt;
          initialLogicalElementId: &amp;quot;child_complexFilter_1&amp;quot;,&lt;br /&gt;
          logicalElements: {&lt;br /&gt;
            child_complexFilter_1: {&lt;br /&gt;
              logicalElementType: &amp;quot;childComplexFilter&amp;quot;,&lt;br /&gt;
              previousLogicalElementId: null,&lt;br /&gt;
              nextLogicalElementId: null,&lt;br /&gt;
&lt;br /&gt;
              childLogicalElementId: &amp;quot;logical_sellOffer&amp;quot;,&lt;br /&gt;
              objType: {&lt;br /&gt;
                serviceTag: &amp;quot;SellOfferPlan&amp;quot;,&lt;br /&gt;
                objectType: &amp;quot;sellOfferPlan&amp;quot;&lt;br /&gt;
              },&lt;br /&gt;
              pathLinkType: {&lt;br /&gt;
                objType: {&lt;br /&gt;
                  serviceTag: &amp;quot;SellOfferManager&amp;quot;,&lt;br /&gt;
                  objectType: &amp;quot;sellOffer&amp;quot;&lt;br /&gt;
                }, &lt;br /&gt;
                relType: {&lt;br /&gt;
                  serviceTag: &amp;quot;SellOfferManager&amp;quot;,&lt;br /&gt;
                  relationshipTag: &amp;quot;usesSellOfferPlan&amp;quot;&lt;br /&gt;
                },&lt;br /&gt;
                direction: &amp;quot;to&amp;quot;&lt;br /&gt;
              },&lt;br /&gt;
              requestProperties: {&lt;br /&gt;
                tag_orderQuantity: &amp;quot;userTag_9&amp;quot;&lt;br /&gt;
              }&lt;br /&gt;
           },&lt;br /&gt;
           logical_sellOffer: {&lt;br /&gt;
              logicalElementType: &amp;quot;logical&amp;quot;,&lt;br /&gt;
              previousLogicalElementId: &amp;quot;child_complexFilter_1&amp;quot;,&lt;br /&gt;
              nextLogicalElementId: null,&lt;br /&gt;
&lt;br /&gt;
              objType: {&lt;br /&gt;
                serviceTag: &amp;quot;SellOfferManager&amp;quot;,&lt;br /&gt;
                objectType: &amp;quot;sellOffer&amp;quot;&lt;br /&gt;
              },&lt;br /&gt;
              fieldName: &amp;quot;sellOfferId&amp;quot;,&lt;br /&gt;
              comparison: &amp;quot;equals&amp;quot;,&lt;br /&gt;
              valueUserTag: &amp;quot;userTag_8&amp;quot;&lt;br /&gt;
           }&lt;br /&gt;
        }&lt;br /&gt;
      },&lt;br /&gt;
	},&lt;br /&gt;
	requiredDataLinkStepObjects: {&lt;br /&gt;
		userTag_LinkStepObjectA: { //* requiredData no linkPath&lt;br /&gt;
			initialObjType: { //* main objType&lt;br /&gt;
				serviceTag: &amp;quot;ProductManager&amp;quot;,&lt;br /&gt;
				objectType: &amp;quot;Product&amp;quot;&lt;br /&gt;
			},&lt;br /&gt;
			linkSteps: [&amp;quot;hash_linkStepA_1&amp;quot;],&lt;br /&gt;
		},&lt;br /&gt;
        userTag_LinkStepObjectB: { // requiredDataFields for finding max orderTotal&lt;br /&gt;
            initialObjType: { //* main objType&lt;br /&gt;
				serviceTag: &amp;quot;ProductManager&amp;quot;,&lt;br /&gt;
				objectType: &amp;quot;Product&amp;quot;&lt;br /&gt;
			},&lt;br /&gt;
			linkSteps: [&amp;quot;hash_linkStepB_1&amp;quot;, &amp;quot;hash_linkStepB_2&amp;quot;, &amp;quot;hash_linkStepB_3&amp;quot;],&lt;br /&gt;
        }&lt;br /&gt;
        // userTag_LinkStepObjectC&lt;br /&gt;
        // userTag_LinkStepObjectD&lt;br /&gt;
	},&lt;br /&gt;
	requiredDataLinkSteps: {&lt;br /&gt;
		hash_linkStepA_1:{&lt;br /&gt;
          fieldName: &amp;quot;xxx&amp;quot; &lt;br /&gt;
        },&lt;br /&gt;
        hash_linkStepB_1:{&lt;br /&gt;
          pathLinkType: {&lt;br /&gt;
             objType: {&lt;br /&gt;
               serviceTag: &amp;quot;SellOfferManager&amp;quot;,&lt;br /&gt;
               objectType: &amp;quot;SellOffer&amp;quot;&lt;br /&gt;
             },&lt;br /&gt;
             relType: {&lt;br /&gt;
               serviceTag: &amp;quot;ProductManager&amp;quot;,&lt;br /&gt;
               relationshipTag: &amp;quot;hasSellOffer&amp;quot;&lt;br /&gt;
             },&lt;br /&gt;
             direction: &amp;quot;to&amp;quot;,&lt;br /&gt;
          },&lt;br /&gt;
           addFilterMain: true, //default: false =&amp;gt; need to add filterMain set = true&lt;br /&gt;
           filterElements: { //* filter in linkPath&lt;br /&gt;
             objType: {&lt;br /&gt;
               serviceTag: &amp;quot;SellOfferManager&amp;quot;,&lt;br /&gt;
               objectType: &amp;quot;SellOffer&amp;quot;&lt;br /&gt;
             },&lt;br /&gt;
             initialLogicalElementId: &amp;quot;logical_sellOffer_in_link&amp;quot;,&lt;br /&gt;
             logicalElements: {&lt;br /&gt;
               logical_sellOffer_in_link: {&lt;br /&gt;
                  logicalElementType: &amp;quot;logical&amp;quot;,&lt;br /&gt;
                  previousLogicalElementId: null,&lt;br /&gt;
                  nextLogicalElementId: null,&lt;br /&gt;
&lt;br /&gt;
                  objType: {&lt;br /&gt;
                    serviceTag: &amp;quot;SellOfferManager&amp;quot;,&lt;br /&gt;
                    objectType: &amp;quot;SellOffer&amp;quot;&lt;br /&gt;
                  },&lt;br /&gt;
                  fieldName: &amp;quot;userId&amp;quot;,&lt;br /&gt;
                  comparison: &amp;quot;equals&amp;quot;,&lt;br /&gt;
                  valueUserTag: &amp;quot;userTag_2&amp;quot;&lt;br /&gt;
               }&lt;br /&gt;
            }&lt;br /&gt;
          },&lt;br /&gt;
&lt;br /&gt;
        }, &lt;br /&gt;
        hash_linkStepB_2: {&lt;br /&gt;
           pathLinkType: {&lt;br /&gt;
             objType: {&lt;br /&gt;
               serviceTag: &amp;quot;OrderPrice&amp;quot;,&lt;br /&gt;
               objectType: &amp;quot;OrderPrice&amp;quot;&lt;br /&gt;
             },&lt;br /&gt;
             relType: {&lt;br /&gt;
               serviceTag: &amp;quot;sellOfferStandard&amp;quot;,&lt;br /&gt;
               relationshipTag: &amp;quot;hasOrderPrice&amp;quot;&lt;br /&gt;
             },&lt;br /&gt;
             direction: &amp;quot;to&amp;quot;,&lt;br /&gt;
           },&lt;br /&gt;
          requestProperties: {&lt;br /&gt;
            tag_deliverTo: &amp;quot;userTag_3&amp;quot;,&lt;br /&gt;
            tag_sellOfferPlan: &amp;quot;userTag_4&amp;quot;,&lt;br /&gt;
            // tag_sellOfferPlanDeliveryMethodLink: &amp;quot;userTag_5&amp;quot;,&lt;br /&gt;
            // tag_sellOfferPlanUserPaymentMethodLink: &amp;quot;userTag_6&amp;quot;&lt;br /&gt;
          }&lt;br /&gt;
          aggregate: &amp;quot;max&amp;quot;,&lt;br /&gt;
          sortFields: [&lt;br /&gt;
       			{&lt;br /&gt;
            		requiredDataLinkStepObjectId: &amp;quot;userTag_LinkStepObjectC&amp;quot;,&lt;br /&gt;
		            dataType: &amp;quot;number&amp;quot;&lt;br /&gt;
        		},&lt;br /&gt;
				{&lt;br /&gt;
        		     requiredDataLinkStepObjectId: &amp;quot;userTag_LinkStepObjectD&amp;quot;,&lt;br /&gt;
		             dataType: &amp;quot;string&amp;quot;&lt;br /&gt;
		         },&lt;br /&gt;
&lt;br /&gt;
                {&lt;br /&gt;
        		     requiredDataLinkStepObjectId: &amp;quot;userTag_LinkStepObjectD&amp;quot;,&lt;br /&gt;
		             dataType: &amp;quot;array&amp;quot;,&lt;br /&gt;
                     sortByValueUserTags:[&amp;quot;userTag_1&amp;quot;,&amp;quot;userTag_2&amp;quot;]&lt;br /&gt;
		        }&lt;br /&gt;
            ],&lt;br /&gt;
          comparison: &amp;quot;greaterThan&amp;quot;,&lt;br /&gt;
          comparisonSortField: &amp;quot;upToValue&amp;quot;,&lt;br /&gt;
          comparisonSortDataType: &amp;quot;string&amp;quot;,&lt;br /&gt;
          comparisonValue: &amp;quot;userTag_2&amp;quot;,&lt;br /&gt;
        }, &lt;br /&gt;
        hash_linkStepB_3: {&lt;br /&gt;
           fieldName: &amp;quot;zzz&amp;quot;,&lt;br /&gt;
        }&lt;br /&gt;
	},&lt;br /&gt;
	sortFields: [&lt;br /&gt;
        {&lt;br /&gt;
             requiredDataLinkStepObjectId: &amp;quot;userTag_LinkStepObjectB&amp;quot;,&lt;br /&gt;
             dataType: &amp;quot;number&amp;quot;,&lt;br /&gt;
             sortOrder: &amp;quot;descending&amp;quot;&lt;br /&gt;
        },&lt;br /&gt;
		{&lt;br /&gt;
             requiredDataLinkStepObjectId: &amp;quot;userTag_LinkStepObjectA&amp;quot;,&lt;br /&gt;
             dataType: &amp;quot;string&amp;quot;&lt;br /&gt;
         },&lt;br /&gt;
        {&lt;br /&gt;
             requiredDataLinkStepObjectId: &amp;quot;userTag_LinkStepObjectD&amp;quot;,&lt;br /&gt;
		     dataType: &amp;quot;array&amp;quot;,&lt;br /&gt;
             sortByValueUserTags:[&amp;quot;userTag_1&amp;quot;,&amp;quot;userTag_2&amp;quot;]&lt;br /&gt;
		}&lt;br /&gt;
    ],&lt;br /&gt;
	valueUserTags: {&lt;br /&gt;
		userTag_1:{&lt;br /&gt;
			value: &amp;quot;xx&amp;quot;,&lt;br /&gt;
		},&lt;br /&gt;
		userTag_2:{&lt;br /&gt;
			value: &amp;quot;yy&amp;quot;,&lt;br /&gt;
		},&lt;br /&gt;
		userTag_3:{&lt;br /&gt;
			valueSource: &amp;quot;complexFilterCombination&amp;quot;,&lt;br /&gt;
            complexFilterCombinationId: &amp;quot;hash_complexFilterCombinationA&amp;quot;,&lt;br /&gt;
		},&lt;br /&gt;
		userTag_4:{&lt;br /&gt;
			valueSource: &amp;quot;perParentCombination&amp;quot;,&lt;br /&gt;
            perParentCombinationId: &amp;quot;hash_perParentCombinationA&amp;quot;,&lt;br /&gt;
		},&lt;br /&gt;
		userTag_7: {&lt;br /&gt;
          value: &amp;quot;zz&amp;quot;,&lt;br /&gt;
        },&lt;br /&gt;
        userTag_8: {&lt;br /&gt;
          valueSource: 'perParentIdentifier',&lt;br /&gt;
          perParentIdentifierFieldname: 'sellOfferId'&lt;br /&gt;
        },&lt;br /&gt;
        userTag_9: {&lt;br /&gt;
          value: 2,&lt;br /&gt;
        },&lt;br /&gt;
	 }&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[Category:Working documents| 2025-04-14]]&lt;br /&gt;
[[Category:Working documents - Search Results| 2025-04-14]]&lt;/div&gt;</summary>
		<author><name>Rut</name></author>
	</entry>
	<entry>
		<id>https://izara.io/wiki/index.php?title=2025-04-14_-_Frontend_LinkPath_structure_for_tableOutput&amp;diff=3998</id>
		<title>2025-04-14 - Frontend LinkPath structure for tableOutput</title>
		<link rel="alternate" type="text/html" href="https://izara.io/wiki/index.php?title=2025-04-14_-_Frontend_LinkPath_structure_for_tableOutput&amp;diff=3998"/>
		<updated>2026-01-19T04:28:43Z</updated>

		<summary type="html">&lt;p&gt;Rut: /* Example params in tableConfig */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Service - Search Results]]&lt;br /&gt;
&lt;br /&gt;
= Overview =&lt;br /&gt;
&lt;br /&gt;
Structure frontend TableConfig and Output prepare for shared library that creates complexFilter and requestProperties&lt;br /&gt;
&lt;br /&gt;
= Example params in tableConfig =&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;JavaScript&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
let paramFromTableOutput = {&lt;br /&gt;
&lt;br /&gt;
	// .. other properties same as params sent to backend&lt;br /&gt;
	// requiredDataFields not needed in tableConfig as referenced in elements and sortFields&lt;br /&gt;
	// header/footer filterDataField elements reference valueUserTag&lt;br /&gt;
&lt;br /&gt;
	&amp;quot;elements&amp;quot;: {&lt;br /&gt;
		// shared types&lt;br /&gt;
		&amp;quot;elementId12&amp;quot;:{&lt;br /&gt;
			&amp;quot;elementType&amp;quot;: &amp;quot;freetext&amp;quot;,&lt;br /&gt;
			&amp;quot;value&amp;quot;: &amp;quot;aa&amp;quot;&lt;br /&gt;
		}&lt;br /&gt;
&lt;br /&gt;
		// headerFooter types&lt;br /&gt;
		&amp;quot;elementId1&amp;quot;:{&lt;br /&gt;
			&amp;quot;elementType&amp;quot;: &amp;quot;valueUserTag&amp;quot;,&lt;br /&gt;
			&amp;quot;valueUserTag&amp;quot;: &amp;quot;userTag_9&amp;quot;,&lt;br /&gt;
			&amp;quot;inputType&amp;quot;: &amp;quot;text&amp;quot; // || &amp;quot;select&amp;quot; || &amp;quot;checkbox&amp;quot; || &amp;quot;radio&amp;quot; ,&lt;br /&gt;
		},&lt;br /&gt;
		&amp;quot;elementId2&amp;quot;:{&lt;br /&gt;
			&amp;quot;elementType&amp;quot;: &amp;quot;valueUserTag&amp;quot;,&lt;br /&gt;
			&amp;quot;valueUserTag&amp;quot;: &amp;quot;userTag_9&amp;quot;&lt;br /&gt;
			&amp;quot;inputType&amp;quot;: &amp;quot;select&amp;quot;,&lt;br /&gt;
			&amp;quot;options&amp;quot;: [&lt;br /&gt;
				&amp;quot;x&amp;quot;,&lt;br /&gt;
				&amp;quot;y&amp;quot;,&lt;br /&gt;
				&amp;quot;z&amp;quot;&lt;br /&gt;
			]&lt;br /&gt;
		},&lt;br /&gt;
		&amp;quot;elementId3&amp;quot;:{&lt;br /&gt;
			&amp;quot;elementType&amp;quot;: &amp;quot;sort&amp;quot;,&lt;br /&gt;
			&amp;quot;display&amp;quot;: &amp;quot;downArrow&amp;quot;, // || upArrow&lt;br /&gt;
			&amp;quot;requiredDataLinkStepObjectId&amp;quot;: &amp;quot;userTag_LinkStepObjectC&amp;quot;,&lt;br /&gt;
			&amp;quot;dataType&amp;quot;: &amp;quot;number&amp;quot;,&lt;br /&gt;
			&amp;quot;sortOrder&amp;quot;: &amp;quot;ascending&amp;quot; // &amp;quot;ascending&amp;quot;|&amp;quot;descending&amp;quot; (default ascending)&lt;br /&gt;
		},&lt;br /&gt;
		&amp;quot;elementId4&amp;quot;:{&lt;br /&gt;
			&amp;quot;elementType&amp;quot;: &amp;quot;numberOfRows&amp;quot;,&lt;br /&gt;
			&amp;quot;selection&amp;quot;: &amp;quot;input&amp;quot; // || list&lt;br /&gt;
		},&lt;br /&gt;
		&amp;quot;elementId6&amp;quot;:{&lt;br /&gt;
			&amp;quot;elementType&amp;quot;: &amp;quot;submit&amp;quot;,&lt;br /&gt;
			&amp;quot;display&amp;quot;: &amp;quot;submit&amp;quot;, // any text to be shown&lt;br /&gt;
			&amp;quot;sendRequest&amp;quot;: &amp;quot;all&amp;quot; // numberOfRows || all || filters&lt;br /&gt;
		},&lt;br /&gt;
		&amp;quot;elementId7&amp;quot;:{&lt;br /&gt;
			&amp;quot;elementType&amp;quot;: &amp;quot;reset&amp;quot;,&lt;br /&gt;
			&amp;quot;display&amp;quot;: &amp;quot;reset rows&amp;quot;, // any text to be shown&lt;br /&gt;
			&amp;quot;sendRequest&amp;quot;: &amp;quot;numberOfRows&amp;quot; // numberOfRows || all || filters&lt;br /&gt;
		},&lt;br /&gt;
		&amp;quot;elementId9&amp;quot;:{&lt;br /&gt;
			&amp;quot;elementType&amp;quot;: &amp;quot;totalDatafield&amp;quot;,&lt;br /&gt;
			&amp;quot;requiredDataLinkStepObjectId&amp;quot;: &amp;quot;link1&amp;quot;,&lt;br /&gt;
			&amp;quot;showIfNotAllRowsLoaded&amp;quot;: true // || false&lt;br /&gt;
		},&lt;br /&gt;
		&amp;quot;elementId11&amp;quot;:{&lt;br /&gt;
			// will need to link to per record check box&lt;br /&gt;
			&amp;quot;elementType&amp;quot;: &amp;quot;bulkAction&amp;quot;,&lt;br /&gt;
			&amp;quot;action&amp;quot;: &amp;quot;on&amp;quot; // on | off | switch&lt;br /&gt;
			&amp;quot;bulkActionTag&amp;quot;: &amp;quot;tagA&amp;quot;, // have normalized list of bulkActionTags, with list of &amp;quot;bulkAction&amp;quot; and &amp;quot;bulkActionCheckBox&amp;quot; elements linked to it&lt;br /&gt;
		},&lt;br /&gt;
		&amp;quot;elementId8&amp;quot;:{&lt;br /&gt;
			&amp;quot;elementType&amp;quot;: &amp;quot;pageNumbers&amp;quot;,&lt;br /&gt;
			&amp;quot;linksAfter&amp;quot;: [&lt;br /&gt;
				{&lt;br /&gt;
					&amp;quot;action&amp;quot;: &amp;quot;jumpNumberOfPages&amp;quot;,&lt;br /&gt;
					&amp;quot;jumpPages&amp;quot;: 7,&lt;br /&gt;
					&amp;quot;string&amp;quot;: &amp;quot;..&amp;quot;&lt;br /&gt;
				},&lt;br /&gt;
				{&lt;br /&gt;
					&amp;quot;action&amp;quot;: &amp;quot;jumpNumberOfPages&amp;quot;,&lt;br /&gt;
					&amp;quot;jumpPages&amp;quot;: 1,&lt;br /&gt;
					&amp;quot;string&amp;quot;: &amp;quot;&amp;gt;&amp;quot;&lt;br /&gt;
				},&lt;br /&gt;
				{&lt;br /&gt;
					&amp;quot;action&amp;quot;: &amp;quot;goToLastPage&amp;quot;,&lt;br /&gt;
					&amp;quot;hideWhenLastPageShown&amp;quot;: true,&lt;br /&gt;
					&amp;quot;string&amp;quot;: &amp;quot;&amp;gt;&amp;gt;&amp;quot;&lt;br /&gt;
				}&lt;br /&gt;
			],&lt;br /&gt;
			&amp;quot;linksBefore&amp;quot;: [&lt;br /&gt;
				{&lt;br /&gt;
					&amp;quot;action&amp;quot;: &amp;quot;goToFirstPage&amp;quot;,&lt;br /&gt;
					&amp;quot;hideWhenFirstPageShown&amp;quot;: true,&lt;br /&gt;
					&amp;quot;string&amp;quot;: &amp;quot;&amp;lt;&amp;lt;&amp;quot;&lt;br /&gt;
				},&lt;br /&gt;
				{&lt;br /&gt;
					&amp;quot;action&amp;quot;: &amp;quot;jumpNumberOfPages&amp;quot;,&lt;br /&gt;
					&amp;quot;jumpPages&amp;quot;: 1,&lt;br /&gt;
					&amp;quot;string&amp;quot;: &amp;quot;&amp;lt;&amp;quot;&lt;br /&gt;
				},&lt;br /&gt;
				{&lt;br /&gt;
					&amp;quot;action&amp;quot;: &amp;quot;jumpNumberOfPages&amp;quot;,&lt;br /&gt;
					&amp;quot;jumpPages&amp;quot;: 7,&lt;br /&gt;
					&amp;quot;string&amp;quot;: &amp;quot;..&amp;quot;&lt;br /&gt;
				}&lt;br /&gt;
			],&lt;br /&gt;
			&amp;quot;showPagesAfter&amp;quot;: 3,&lt;br /&gt;
			&amp;quot;showPagesBefore&amp;quot;: 3&lt;br /&gt;
		},&lt;br /&gt;
		&lt;br /&gt;
		// records types    &lt;br /&gt;
		&amp;quot;elementId5&amp;quot;:{&lt;br /&gt;
			&amp;quot;elementType&amp;quot;: &amp;quot;requiredDataLinkStepObject&amp;quot;, // in record&lt;br /&gt;
			&amp;quot;requiredDataLinkStepObjectId&amp;quot;: &amp;quot;link1&amp;quot;,&lt;br /&gt;
		},&lt;br /&gt;
		&amp;quot;elementIdxx&amp;quot;:{&lt;br /&gt;
			&amp;quot;elementType&amp;quot;: &amp;quot;bulkActionCheckBox&amp;quot;,&lt;br /&gt;
			&amp;quot;bulkActionTag&amp;quot;: &amp;quot;tagA&amp;quot;,&lt;br /&gt;
		},&lt;br /&gt;
	},&lt;br /&gt;
	&lt;br /&gt;
	values: {&lt;br /&gt;
		// values are shared between requestProperties and filter values. This set can be iterated to overwrite values using userTag to identify&lt;br /&gt;
		userTag_1:{&lt;br /&gt;
			defaultValue: &amp;quot;xx&amp;quot;,&lt;br /&gt;
		},&lt;br /&gt;
		userTag_2:{&lt;br /&gt;
			defaultValue: &amp;quot;xx&amp;quot;,&lt;br /&gt;
		},&lt;br /&gt;
		userTag_3:{&lt;br /&gt;
			defaultValue: &amp;quot;xx&amp;quot;,&lt;br /&gt;
		},&lt;br /&gt;
		userTag_4:{&lt;br /&gt;
			defaultValue: &amp;quot;xx&amp;quot;,&lt;br /&gt;
		},&lt;br /&gt;
		userTag_5:{&lt;br /&gt;
			defaultValue: &amp;quot;xx&amp;quot;,&lt;br /&gt;
		},&lt;br /&gt;
		userTag_6:{&lt;br /&gt;
			valueSource: &amp;quot;complexFilterCombination&amp;quot;,&lt;br /&gt;
            complexFilterCombinationId: &amp;quot;hash_complexFilterCombinationA&amp;quot;,&lt;br /&gt;
		},&lt;br /&gt;
		userTag_7:{&lt;br /&gt;
			valueSource: &amp;quot;perParentCombination&amp;quot;,&lt;br /&gt;
            perParentCombinationId: &amp;quot;hash_perParentCombinationA&amp;quot;,&lt;br /&gt;
		},&lt;br /&gt;
        userTag_8: {&lt;br /&gt;
            valueSource: 'perParentIdentifier',&lt;br /&gt;
            perParentIdentifierFieldname: 'sellOfferId'&lt;br /&gt;
        },,&lt;br /&gt;
		userTag_9:{&lt;br /&gt;
			defaultValue: &amp;quot;xx&amp;quot;,&lt;br /&gt;
		},&lt;br /&gt;
		userTag_10:{&lt;br /&gt;
			defaultValue: &amp;quot;xx&amp;quot;,&lt;br /&gt;
		},&lt;br /&gt;
		userTag_11:{&lt;br /&gt;
			defaultValue: &amp;quot;xx&amp;quot;,&lt;br /&gt;
		},&lt;br /&gt;
	}&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= Example params sent to backend =&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;JavaScript&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
let paramFromTableOutput = {&lt;br /&gt;
	objType: { //* main objType&lt;br /&gt;
		serviceTag: &amp;quot;ProductManager&amp;quot;,&lt;br /&gt;
		objectType: &amp;quot;Product&amp;quot;&lt;br /&gt;
	},&lt;br /&gt;
    initialLogicalElementId: &amp;quot;uuid_logical_1&amp;quot;,&lt;br /&gt;
    logicalElements: {&lt;br /&gt;
       uuid_logical_1: {&lt;br /&gt;
         logicalElementType: &amp;quot;logical&amp;quot;,&lt;br /&gt;
         previousLogicalElementId: null,&lt;br /&gt;
         nextLogicalElementId: null,&lt;br /&gt;
&lt;br /&gt;
         objType: {&lt;br /&gt;
           serviceTag: &amp;quot;ProductManager&amp;quot;,&lt;br /&gt;
           objectType: &amp;quot;product&amp;quot;&lt;br /&gt;
         },&lt;br /&gt;
         fieldName: &amp;quot;productId&amp;quot;,&lt;br /&gt;
         comparison: &amp;quot;equals&amp;quot;,&lt;br /&gt;
         valueUserTag: &amp;quot;userTag_1&amp;quot;&lt;br /&gt;
       }&lt;br /&gt;
    },&lt;br /&gt;
	requiredDataFields: [ //* linkStepObjects to create main sort result's requiredData and sortFields&lt;br /&gt;
        // not needed at tableConfig level because can be built from table's elements and sortFields before sending to lib that converts to backend structure&lt;br /&gt;
        &amp;quot;userTag_LinkStepObjectA&amp;quot;, // no link, field in main objType (structure same linkPath but only one step)&lt;br /&gt;
        &amp;quot;userTag_LinkStepObjectB&amp;quot;, // has link&lt;br /&gt;
	],&lt;br /&gt;
	complexFilterCombinations:{&lt;br /&gt;
		hash_complexFilterCombinationA: {&lt;br /&gt;
          objType: {&lt;br /&gt;
            serviceTag: &amp;quot;Locations&amp;quot;,&lt;br /&gt;
            objectType: &amp;quot;locationNode&amp;quot;&lt;br /&gt;
          },&lt;br /&gt;
          initialLogicalElementId: &amp;quot;child_complexFilter_localtionNode&amp;quot;,&lt;br /&gt;
          logicalElements: {&lt;br /&gt;
            child_complexFilter_localtionNode: {&lt;br /&gt;
              logicalElementType: &amp;quot;childComplexFilter&amp;quot;,&lt;br /&gt;
              previousLogicalElementId: null,&lt;br /&gt;
              nextLogicalElementId: null,&lt;br /&gt;
&lt;br /&gt;
              childLogicalElementId: &amp;quot;logical_locationNode&amp;quot;,&lt;br /&gt;
              objType: {&lt;br /&gt;
                serviceTag: &amp;quot;Locations&amp;quot;,&lt;br /&gt;
                objectType: &amp;quot;locationNode&amp;quot;&lt;br /&gt;
              },&lt;br /&gt;
              pathLinkType: {&lt;br /&gt;
                objType: {&lt;br /&gt;
                  serviceTag: &amp;quot;Locations&amp;quot;,&lt;br /&gt;
                  objectType: &amp;quot;locationNode&amp;quot;&lt;br /&gt;
                },&lt;br /&gt;
                relType: {&lt;br /&gt;
                  serviceTag: &amp;quot;Locations&amp;quot;,&lt;br /&gt;
                  relationshipTag: &amp;quot;hasParentLocationNode&amp;quot;&lt;br /&gt;
                },&lt;br /&gt;
                direction: &amp;quot;to&amp;quot;&lt;br /&gt;
              },&lt;br /&gt;
            },&lt;br /&gt;
            logical_locationNode: {&lt;br /&gt;
               logicalElementType: &amp;quot;logical&amp;quot;,&lt;br /&gt;
               previousLogicalElementId: &amp;quot;child_complexFilter_localtionNode&amp;quot;,&lt;br /&gt;
               nextLogicalElementId: null,&lt;br /&gt;
&lt;br /&gt;
               objType: {&lt;br /&gt;
                serviceTag: &amp;quot;Locations&amp;quot;,&lt;br /&gt;
                objectType: &amp;quot;locationNode&amp;quot;&lt;br /&gt;
               },&lt;br /&gt;
               fieldName: &amp;quot;locationNodeId&amp;quot;,&lt;br /&gt;
               comparison: &amp;quot;equals&amp;quot;,&lt;br /&gt;
               valueUserTag: &amp;quot;userTag_7&amp;quot;&lt;br /&gt;
            }&lt;br /&gt;
         }&lt;br /&gt;
       },&lt;br /&gt;
	},&lt;br /&gt;
	perParentCombinations:{&lt;br /&gt;
		hash_perParentCombinationA: {&lt;br /&gt;
          objType: {&lt;br /&gt;
            serviceTag: &amp;quot;SellOfferPlan&amp;quot;,&lt;br /&gt;
            objectType: &amp;quot;sellOfferPlan&amp;quot;&lt;br /&gt;
          },&lt;br /&gt;
          initialLogicalElementId: &amp;quot;child_complexFilter_1&amp;quot;,&lt;br /&gt;
          logicalElements: {&lt;br /&gt;
            child_complexFilter_1: {&lt;br /&gt;
              logicalElementType: &amp;quot;childComplexFilter&amp;quot;,&lt;br /&gt;
              previousLogicalElementId: null,&lt;br /&gt;
              nextLogicalElementId: null,&lt;br /&gt;
&lt;br /&gt;
              childLogicalElementId: &amp;quot;logical_sellOffer&amp;quot;,&lt;br /&gt;
              objType: {&lt;br /&gt;
                serviceTag: &amp;quot;SellOfferPlan&amp;quot;,&lt;br /&gt;
                objectType: &amp;quot;sellOfferPlan&amp;quot;&lt;br /&gt;
              },&lt;br /&gt;
              pathLinkType: {&lt;br /&gt;
                objType: {&lt;br /&gt;
                  serviceTag: &amp;quot;SellOfferManager&amp;quot;,&lt;br /&gt;
                  objectType: &amp;quot;sellOffer&amp;quot;&lt;br /&gt;
                }, &lt;br /&gt;
                relType: {&lt;br /&gt;
                  serviceTag: &amp;quot;SellOfferManager&amp;quot;,&lt;br /&gt;
                  relationshipTag: &amp;quot;usesSellOfferPlan&amp;quot;&lt;br /&gt;
                },&lt;br /&gt;
                direction: &amp;quot;to&amp;quot;&lt;br /&gt;
              },&lt;br /&gt;
              requestProperties: {&lt;br /&gt;
                tag_orderQuantity: &amp;quot;userTag_9&amp;quot;&lt;br /&gt;
              }&lt;br /&gt;
           },&lt;br /&gt;
           logical_sellOffer: {&lt;br /&gt;
              logicalElementType: &amp;quot;logical&amp;quot;,&lt;br /&gt;
              previousLogicalElementId: &amp;quot;child_complexFilter_1&amp;quot;,&lt;br /&gt;
              nextLogicalElementId: null,&lt;br /&gt;
&lt;br /&gt;
              objType: {&lt;br /&gt;
                serviceTag: &amp;quot;SellOfferManager&amp;quot;,&lt;br /&gt;
                objectType: &amp;quot;sellOffer&amp;quot;&lt;br /&gt;
              },&lt;br /&gt;
              fieldName: &amp;quot;sellOfferId&amp;quot;,&lt;br /&gt;
              comparison: &amp;quot;equals&amp;quot;,&lt;br /&gt;
              valueUserTag: &amp;quot;userTag_8&amp;quot;&lt;br /&gt;
           }&lt;br /&gt;
        }&lt;br /&gt;
      },&lt;br /&gt;
	},&lt;br /&gt;
	requiredDataLinkStepObjects: {&lt;br /&gt;
		userTag_LinkStepObjectA: { //* requiredData no linkPath&lt;br /&gt;
			initialObjType: { //* main objType&lt;br /&gt;
				serviceTag: &amp;quot;ProductManager&amp;quot;,&lt;br /&gt;
				objectType: &amp;quot;Product&amp;quot;&lt;br /&gt;
			},&lt;br /&gt;
			linkSteps: [&amp;quot;hash_linkStepA_1&amp;quot;],&lt;br /&gt;
		},&lt;br /&gt;
        userTag_LinkStepObjectB: { // requiredDataFields for finding max orderTotal&lt;br /&gt;
            initialObjType: { //* main objType&lt;br /&gt;
				serviceTag: &amp;quot;ProductManager&amp;quot;,&lt;br /&gt;
				objectType: &amp;quot;Product&amp;quot;&lt;br /&gt;
			},&lt;br /&gt;
			linkSteps: [&amp;quot;hash_linkStepB_1&amp;quot;, &amp;quot;hash_linkStepB_2&amp;quot;, &amp;quot;hash_linkStepB_3&amp;quot;],&lt;br /&gt;
        }&lt;br /&gt;
        // userTag_LinkStepObjectC&lt;br /&gt;
        // userTag_LinkStepObjectD&lt;br /&gt;
	},&lt;br /&gt;
	requiredDataLinkSteps: {&lt;br /&gt;
		hash_linkStepA_1:{&lt;br /&gt;
          fieldName: &amp;quot;xxx&amp;quot; &lt;br /&gt;
        },&lt;br /&gt;
        hash_linkStepB_1:{&lt;br /&gt;
          pathLinkType: {&lt;br /&gt;
             objType: {&lt;br /&gt;
               serviceTag: &amp;quot;SellOfferManager&amp;quot;,&lt;br /&gt;
               objectType: &amp;quot;SellOffer&amp;quot;&lt;br /&gt;
             },&lt;br /&gt;
             relType: {&lt;br /&gt;
               serviceTag: &amp;quot;ProductManager&amp;quot;,&lt;br /&gt;
               relationshipTag: &amp;quot;hasSellOffer&amp;quot;&lt;br /&gt;
             },&lt;br /&gt;
             direction: &amp;quot;to&amp;quot;,&lt;br /&gt;
          },&lt;br /&gt;
           addFilterMain: true, //default: false =&amp;gt; need to add filterMain set = true&lt;br /&gt;
           filterElements: { //* filter in linkPath&lt;br /&gt;
             objType: {&lt;br /&gt;
               serviceTag: &amp;quot;SellOfferManager&amp;quot;,&lt;br /&gt;
               objectType: &amp;quot;SellOffer&amp;quot;&lt;br /&gt;
             },&lt;br /&gt;
             initialLogicalElementId: &amp;quot;logical_sellOffer_in_link&amp;quot;,&lt;br /&gt;
             logicalElements: {&lt;br /&gt;
               logical_sellOffer_in_link: {&lt;br /&gt;
                  logicalElementType: &amp;quot;logical&amp;quot;,&lt;br /&gt;
                  previousLogicalElementId: null,&lt;br /&gt;
                  nextLogicalElementId: null,&lt;br /&gt;
&lt;br /&gt;
                  objType: {&lt;br /&gt;
                    serviceTag: &amp;quot;SellOfferManager&amp;quot;,&lt;br /&gt;
                    objectType: &amp;quot;SellOffer&amp;quot;&lt;br /&gt;
                  },&lt;br /&gt;
                  fieldName: &amp;quot;userId&amp;quot;,&lt;br /&gt;
                  comparison: &amp;quot;equals&amp;quot;,&lt;br /&gt;
                  valueUserTag: &amp;quot;userTag_2&amp;quot;&lt;br /&gt;
               }&lt;br /&gt;
            }&lt;br /&gt;
          },&lt;br /&gt;
&lt;br /&gt;
        }, &lt;br /&gt;
        hash_linkStepB_2: {&lt;br /&gt;
           pathLinkType: {&lt;br /&gt;
             objType: {&lt;br /&gt;
               serviceTag: &amp;quot;OrderPrice&amp;quot;,&lt;br /&gt;
               objectType: &amp;quot;OrderPrice&amp;quot;&lt;br /&gt;
             },&lt;br /&gt;
             relType: {&lt;br /&gt;
               serviceTag: &amp;quot;sellOfferStandard&amp;quot;,&lt;br /&gt;
               relationshipTag: &amp;quot;hasOrderPrice&amp;quot;&lt;br /&gt;
             },&lt;br /&gt;
             direction: &amp;quot;to&amp;quot;,&lt;br /&gt;
           },&lt;br /&gt;
          requestProperties: {&lt;br /&gt;
            tag_deliverTo: &amp;quot;userTag_3&amp;quot;,&lt;br /&gt;
            tag_sellOfferPlan: &amp;quot;userTag_4&amp;quot;,&lt;br /&gt;
            // tag_sellOfferPlanDeliveryMethodLink: &amp;quot;userTag_5&amp;quot;,&lt;br /&gt;
            // tag_sellOfferPlanUserPaymentMethodLink: &amp;quot;userTag_6&amp;quot;&lt;br /&gt;
          }&lt;br /&gt;
          aggregate: &amp;quot;max&amp;quot;,&lt;br /&gt;
          sortFields: [&lt;br /&gt;
       			{&lt;br /&gt;
            		requiredDataLinkStepObjectId: &amp;quot;userTag_LinkStepObjectC&amp;quot;,&lt;br /&gt;
		            dataType: &amp;quot;number&amp;quot;&lt;br /&gt;
        		},&lt;br /&gt;
				{&lt;br /&gt;
        		     requiredDataLinkStepObjectId: &amp;quot;userTag_LinkStepObjectD&amp;quot;,&lt;br /&gt;
		             dataType: &amp;quot;string&amp;quot;&lt;br /&gt;
		         },&lt;br /&gt;
&lt;br /&gt;
                {&lt;br /&gt;
        		     requiredDataLinkStepObjectId: &amp;quot;userTag_LinkStepObjectD&amp;quot;,&lt;br /&gt;
		             dataType: &amp;quot;array&amp;quot;,&lt;br /&gt;
                     sortByValueUserTags:[&amp;quot;userTag_1&amp;quot;,&amp;quot;userTag_2&amp;quot;]&lt;br /&gt;
		        }&lt;br /&gt;
            ],&lt;br /&gt;
          comparison: &amp;quot;greaterThan&amp;quot;,&lt;br /&gt;
          comparisonSortField: &amp;quot;upToValue&amp;quot;,&lt;br /&gt;
          comparisonSortDataType: &amp;quot;string&amp;quot;,&lt;br /&gt;
          comparisonValue: &amp;quot;userTag_2&amp;quot;,&lt;br /&gt;
        }, &lt;br /&gt;
        hash_linkStepB_3: {&lt;br /&gt;
           fieldName: &amp;quot;zzz&amp;quot;,&lt;br /&gt;
        }&lt;br /&gt;
	},&lt;br /&gt;
	sortFields: [&lt;br /&gt;
        {&lt;br /&gt;
             requiredDataLinkStepObjectId: &amp;quot;userTag_LinkStepObjectB&amp;quot;,&lt;br /&gt;
             dataType: &amp;quot;number&amp;quot;,&lt;br /&gt;
             sortOrder: &amp;quot;descending&amp;quot;&lt;br /&gt;
        },&lt;br /&gt;
		{&lt;br /&gt;
             requiredDataLinkStepObjectId: &amp;quot;userTag_LinkStepObjectA&amp;quot;,&lt;br /&gt;
             dataType: &amp;quot;string&amp;quot;&lt;br /&gt;
         },&lt;br /&gt;
        {&lt;br /&gt;
             requiredDataLinkStepObjectId: &amp;quot;userTag_LinkStepObjectD&amp;quot;,&lt;br /&gt;
		     dataType: &amp;quot;array&amp;quot;,&lt;br /&gt;
             sortByValueUserTags:[&amp;quot;userTag_1&amp;quot;,&amp;quot;userTag_2&amp;quot;]&lt;br /&gt;
		}&lt;br /&gt;
    ],&lt;br /&gt;
	valueUserTags: {&lt;br /&gt;
		userTag_1:{&lt;br /&gt;
			value: &amp;quot;xx&amp;quot;,&lt;br /&gt;
		},&lt;br /&gt;
		userTag_2:{&lt;br /&gt;
			value: &amp;quot;yy&amp;quot;,&lt;br /&gt;
		},&lt;br /&gt;
		userTag_3:{&lt;br /&gt;
			valueSource: &amp;quot;complexFilterCombination&amp;quot;,&lt;br /&gt;
            complexFilterCombinationId: &amp;quot;hash_complexFilterCombinationA&amp;quot;,&lt;br /&gt;
		},&lt;br /&gt;
		userTag_4:{&lt;br /&gt;
			valueSource: &amp;quot;perParentCombination&amp;quot;,&lt;br /&gt;
            perParentCombinationId: &amp;quot;hash_perParentCombinationA&amp;quot;,&lt;br /&gt;
		},&lt;br /&gt;
		userTag_7: {&lt;br /&gt;
          value: &amp;quot;zz&amp;quot;,&lt;br /&gt;
        },&lt;br /&gt;
        userTag_8: {&lt;br /&gt;
          valueSource: 'perParentIdentifier',&lt;br /&gt;
          perParentIdentifierFieldname: 'sellOfferId'&lt;br /&gt;
        },&lt;br /&gt;
        userTag_9: {&lt;br /&gt;
          value: 2,&lt;br /&gt;
        },&lt;br /&gt;
	 }&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[Category:Working documents| 2025-04-14]]&lt;br /&gt;
[[Category:Working documents - Search Results| 2025-04-14]]&lt;/div&gt;</summary>
		<author><name>Rut</name></author>
	</entry>
	<entry>
		<id>https://izara.io/wiki/index.php?title=2025-04-14_-_Frontend_LinkPath_structure_for_tableOutput&amp;diff=3751</id>
		<title>2025-04-14 - Frontend LinkPath structure for tableOutput</title>
		<link rel="alternate" type="text/html" href="https://izara.io/wiki/index.php?title=2025-04-14_-_Frontend_LinkPath_structure_for_tableOutput&amp;diff=3751"/>
		<updated>2025-12-26T09:21:18Z</updated>

		<summary type="html">&lt;p&gt;Rut: /* Example params sent to backend */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Service - Search Results]]&lt;br /&gt;
&lt;br /&gt;
= Overview =&lt;br /&gt;
&lt;br /&gt;
Structure frontend TableConfig and Output prepare for shared library that creates complexFilter and requestProperties&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Service - Search Results]]&lt;br /&gt;
&lt;br /&gt;
= Overview =&lt;br /&gt;
&lt;br /&gt;
Structure frontend TableConfig and Output prepare for shared library that creates complexFilter and requestProperties&lt;br /&gt;
&lt;br /&gt;
= Example params in tableConfig =&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;JavaScript&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
let paramFromTableOutput = {&lt;br /&gt;
&lt;br /&gt;
	// .. other properties same as params sent to backend&lt;br /&gt;
	// requiredDataFields not needed in tableConfig as referenced in elements and sortFields&lt;br /&gt;
	// header/footer filterDataField elements reference valueUserTag&lt;br /&gt;
&lt;br /&gt;
	elements: {&lt;br /&gt;
        // add example of pageOutput element that references requiredDataLinkStepObjects and valueUserTags&lt;br /&gt;
    },&lt;br /&gt;
	values: {&lt;br /&gt;
		// values are shared between requestProperties and filter values. This set can be iterated to overwrite values using userTag to identify&lt;br /&gt;
		userTag_1:{&lt;br /&gt;
			defaultValue: &amp;quot;xx&amp;quot;,&lt;br /&gt;
		},&lt;br /&gt;
		userTag_2:{&lt;br /&gt;
			defaultValue: &amp;quot;xx&amp;quot;,&lt;br /&gt;
		},&lt;br /&gt;
		userTag_3:{&lt;br /&gt;
			defaultValue: &amp;quot;xx&amp;quot;,&lt;br /&gt;
		},&lt;br /&gt;
		userTag_4:{&lt;br /&gt;
			defaultValue: &amp;quot;xx&amp;quot;,&lt;br /&gt;
		},&lt;br /&gt;
		userTag_5:{&lt;br /&gt;
			defaultValue: &amp;quot;xx&amp;quot;,&lt;br /&gt;
		},&lt;br /&gt;
		userTag_6:{&lt;br /&gt;
			valueSource: &amp;quot;complexFilterCombination&amp;quot;,&lt;br /&gt;
            complexFilterCombinationId: &amp;quot;hash_complexFilterCombinationA&amp;quot;,&lt;br /&gt;
		},&lt;br /&gt;
		userTag_7:{&lt;br /&gt;
			valueSource: &amp;quot;perParentCombination&amp;quot;,&lt;br /&gt;
            perParentCombinationId: &amp;quot;hash_perParentCombinationA&amp;quot;,&lt;br /&gt;
		},&lt;br /&gt;
        userTag_8: {&lt;br /&gt;
            valueSource: 'perParentIdentifier',&lt;br /&gt;
            perParentIdentifierFieldname: 'sellOfferId'&lt;br /&gt;
        },,&lt;br /&gt;
		userTag_9:{&lt;br /&gt;
			defaultValue: &amp;quot;xx&amp;quot;,&lt;br /&gt;
		},&lt;br /&gt;
		userTag_10:{&lt;br /&gt;
			defaultValue: &amp;quot;xx&amp;quot;,&lt;br /&gt;
		},&lt;br /&gt;
		userTag_11:{&lt;br /&gt;
			defaultValue: &amp;quot;xx&amp;quot;,&lt;br /&gt;
		},&lt;br /&gt;
	}&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= Example params sent to backend =&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;JavaScript&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
let paramFromTableOutput = {&lt;br /&gt;
	objType: { //* main objType&lt;br /&gt;
		serviceTag: &amp;quot;ProductManager&amp;quot;,&lt;br /&gt;
		objectType: &amp;quot;Product&amp;quot;&lt;br /&gt;
	},&lt;br /&gt;
    initialLogicalElementId: &amp;quot;uuid_logical_1&amp;quot;,&lt;br /&gt;
    logicalElements: {&lt;br /&gt;
       uuid_logical_1: {&lt;br /&gt;
         logicalElementType: &amp;quot;logical&amp;quot;,&lt;br /&gt;
         previousLogicalElementId: null,&lt;br /&gt;
         nextLogicalElementId: null,&lt;br /&gt;
&lt;br /&gt;
         objType: {&lt;br /&gt;
           serviceTag: &amp;quot;ProductManager&amp;quot;,&lt;br /&gt;
           objectType: &amp;quot;product&amp;quot;&lt;br /&gt;
         },&lt;br /&gt;
         fieldName: &amp;quot;productId&amp;quot;,&lt;br /&gt;
         comparison: &amp;quot;equals&amp;quot;,&lt;br /&gt;
         valueUserTag: &amp;quot;userTag_1&amp;quot;&lt;br /&gt;
       }&lt;br /&gt;
    },&lt;br /&gt;
	requiredDataFields: [ //* linkStepObjects to create main sort result's requiredData and sortFields&lt;br /&gt;
        // not needed at tableConfig level because can be built from table's elements and sortFields before sending to lib that converts to backend structure&lt;br /&gt;
        &amp;quot;userTag_LinkStepObjectA&amp;quot;, // no link, field in main objType (structure same linkPath but only one step)&lt;br /&gt;
        &amp;quot;userTag_LinkStepObjectB&amp;quot;, // has link&lt;br /&gt;
	],&lt;br /&gt;
	complexFilterCombinations:{&lt;br /&gt;
		hash_complexFilterCombinationA: {&lt;br /&gt;
          objType: {&lt;br /&gt;
            serviceTag: &amp;quot;Locations&amp;quot;,&lt;br /&gt;
            objectType: &amp;quot;locationNode&amp;quot;&lt;br /&gt;
          },&lt;br /&gt;
          initialLogicalElementId: &amp;quot;child_complexFilter_localtionNode&amp;quot;,&lt;br /&gt;
          logicalElements: {&lt;br /&gt;
            child_complexFilter_localtionNode: {&lt;br /&gt;
              logicalElementType: &amp;quot;childComplexFilter&amp;quot;,&lt;br /&gt;
              previousLogicalElementId: null,&lt;br /&gt;
              nextLogicalElementId: null,&lt;br /&gt;
&lt;br /&gt;
              childLogicalElementId: &amp;quot;logical_locationNode&amp;quot;,&lt;br /&gt;
              objType: {&lt;br /&gt;
                serviceTag: &amp;quot;Locations&amp;quot;,&lt;br /&gt;
                objectType: &amp;quot;locationNode&amp;quot;&lt;br /&gt;
              },&lt;br /&gt;
              pathLinkType: {&lt;br /&gt;
                objType: {&lt;br /&gt;
                  serviceTag: &amp;quot;Locations&amp;quot;,&lt;br /&gt;
                  objectType: &amp;quot;locationNode&amp;quot;&lt;br /&gt;
                },&lt;br /&gt;
                relType: {&lt;br /&gt;
                  serviceTag: &amp;quot;Locations&amp;quot;,&lt;br /&gt;
                  relationshipTag: &amp;quot;hasParentLocationNode&amp;quot;&lt;br /&gt;
                },&lt;br /&gt;
                direction: &amp;quot;to&amp;quot;&lt;br /&gt;
              },&lt;br /&gt;
            },&lt;br /&gt;
            logical_locationNode: {&lt;br /&gt;
               logicalElementType: &amp;quot;logical&amp;quot;,&lt;br /&gt;
               previousLogicalElementId: &amp;quot;child_complexFilter_localtionNode&amp;quot;,&lt;br /&gt;
               nextLogicalElementId: null,&lt;br /&gt;
&lt;br /&gt;
               objType: {&lt;br /&gt;
                serviceTag: &amp;quot;Locations&amp;quot;,&lt;br /&gt;
                objectType: &amp;quot;locationNode&amp;quot;&lt;br /&gt;
               },&lt;br /&gt;
               fieldName: &amp;quot;locationNodeId&amp;quot;,&lt;br /&gt;
               comparison: &amp;quot;equals&amp;quot;,&lt;br /&gt;
               valueUserTag: &amp;quot;userTag_7&amp;quot;&lt;br /&gt;
            }&lt;br /&gt;
         }&lt;br /&gt;
       },&lt;br /&gt;
	},&lt;br /&gt;
	perParentCombinations:{&lt;br /&gt;
		hash_perParentCombinationA: {&lt;br /&gt;
          objType: {&lt;br /&gt;
            serviceTag: &amp;quot;SellOfferPlan&amp;quot;,&lt;br /&gt;
            objectType: &amp;quot;sellOfferPlan&amp;quot;&lt;br /&gt;
          },&lt;br /&gt;
          initialLogicalElementId: &amp;quot;child_complexFilter_1&amp;quot;,&lt;br /&gt;
          logicalElements: {&lt;br /&gt;
            child_complexFilter_1: {&lt;br /&gt;
              logicalElementType: &amp;quot;childComplexFilter&amp;quot;,&lt;br /&gt;
              previousLogicalElementId: null,&lt;br /&gt;
              nextLogicalElementId: null,&lt;br /&gt;
&lt;br /&gt;
              childLogicalElementId: &amp;quot;logical_sellOffer&amp;quot;,&lt;br /&gt;
              objType: {&lt;br /&gt;
                serviceTag: &amp;quot;SellOfferPlan&amp;quot;,&lt;br /&gt;
                objectType: &amp;quot;sellOfferPlan&amp;quot;&lt;br /&gt;
              },&lt;br /&gt;
              pathLinkType: {&lt;br /&gt;
                objType: {&lt;br /&gt;
                  serviceTag: &amp;quot;SellOfferManager&amp;quot;,&lt;br /&gt;
                  objectType: &amp;quot;sellOffer&amp;quot;&lt;br /&gt;
                }, &lt;br /&gt;
                relType: {&lt;br /&gt;
                  serviceTag: &amp;quot;SellOfferManager&amp;quot;,&lt;br /&gt;
                  relationshipTag: &amp;quot;usesSellOfferPlan&amp;quot;&lt;br /&gt;
                },&lt;br /&gt;
                direction: &amp;quot;to&amp;quot;&lt;br /&gt;
              },&lt;br /&gt;
              requestProperties: {&lt;br /&gt;
                tag_orderQuantity: &amp;quot;userTag_9&amp;quot;&lt;br /&gt;
              }&lt;br /&gt;
           },&lt;br /&gt;
           logical_sellOffer: {&lt;br /&gt;
              logicalElementType: &amp;quot;logical&amp;quot;,&lt;br /&gt;
              previousLogicalElementId: &amp;quot;child_complexFilter_1&amp;quot;,&lt;br /&gt;
              nextLogicalElementId: null,&lt;br /&gt;
&lt;br /&gt;
              objType: {&lt;br /&gt;
                serviceTag: &amp;quot;SellOfferManager&amp;quot;,&lt;br /&gt;
                objectType: &amp;quot;sellOffer&amp;quot;&lt;br /&gt;
              },&lt;br /&gt;
              fieldName: &amp;quot;sellOfferId&amp;quot;,&lt;br /&gt;
              comparison: &amp;quot;equals&amp;quot;,&lt;br /&gt;
              valueUserTag: &amp;quot;userTag_8&amp;quot;&lt;br /&gt;
           }&lt;br /&gt;
        }&lt;br /&gt;
      },&lt;br /&gt;
	},&lt;br /&gt;
	requiredDataLinkStepObjects: {&lt;br /&gt;
		userTag_LinkStepObjectA: { //* requiredData no linkPath&lt;br /&gt;
			initialObjType: { //* main objType&lt;br /&gt;
				serviceTag: &amp;quot;ProductManager&amp;quot;,&lt;br /&gt;
				objectType: &amp;quot;Product&amp;quot;&lt;br /&gt;
			},&lt;br /&gt;
			linkSteps: [&amp;quot;hash_linkStepA_1&amp;quot;],&lt;br /&gt;
		},&lt;br /&gt;
        userTag_LinkStepObjectB: { // requiredDataFields for finding max orderTotal&lt;br /&gt;
            initialObjType: { //* main objType&lt;br /&gt;
				serviceTag: &amp;quot;ProductManager&amp;quot;,&lt;br /&gt;
				objectType: &amp;quot;Product&amp;quot;&lt;br /&gt;
			},&lt;br /&gt;
			linkSteps: [&amp;quot;hash_linkStepB_1&amp;quot;, &amp;quot;hash_linkStepB_2&amp;quot;, &amp;quot;hash_linkStepB_3&amp;quot;],&lt;br /&gt;
        }&lt;br /&gt;
        // userTag_LinkStepObjectC&lt;br /&gt;
        // userTag_LinkStepObjectD&lt;br /&gt;
	},&lt;br /&gt;
	requiredDataLinkSteps: {&lt;br /&gt;
		hash_linkStepA_1:{&lt;br /&gt;
          fieldName: &amp;quot;xxx&amp;quot; &lt;br /&gt;
        },&lt;br /&gt;
        hash_linkStepB_1:{&lt;br /&gt;
          pathLinkType: {&lt;br /&gt;
             objType: {&lt;br /&gt;
               serviceTag: &amp;quot;SellOfferManager&amp;quot;,&lt;br /&gt;
               objectType: &amp;quot;SellOffer&amp;quot;&lt;br /&gt;
             },&lt;br /&gt;
             relType: {&lt;br /&gt;
               serviceTag: &amp;quot;ProductManager&amp;quot;,&lt;br /&gt;
               relationshipTag: &amp;quot;hasSellOffer&amp;quot;&lt;br /&gt;
             },&lt;br /&gt;
             direction: &amp;quot;to&amp;quot;,&lt;br /&gt;
          },&lt;br /&gt;
           addFilterMain: true, //default: false =&amp;gt; need to add filterMain set = true&lt;br /&gt;
           filterElements: { //* filter in linkPath&lt;br /&gt;
             objType: {&lt;br /&gt;
               serviceTag: &amp;quot;SellOfferManager&amp;quot;,&lt;br /&gt;
               objectType: &amp;quot;SellOffer&amp;quot;&lt;br /&gt;
             },&lt;br /&gt;
             initialLogicalElementId: &amp;quot;logical_sellOffer_in_link&amp;quot;,&lt;br /&gt;
             logicalElements: {&lt;br /&gt;
               logical_sellOffer_in_link: {&lt;br /&gt;
                  logicalElementType: &amp;quot;logical&amp;quot;,&lt;br /&gt;
                  previousLogicalElementId: null,&lt;br /&gt;
                  nextLogicalElementId: null,&lt;br /&gt;
&lt;br /&gt;
                  objType: {&lt;br /&gt;
                    serviceTag: &amp;quot;SellOfferManager&amp;quot;,&lt;br /&gt;
                    objectType: &amp;quot;SellOffer&amp;quot;&lt;br /&gt;
                  },&lt;br /&gt;
                  fieldName: &amp;quot;userId&amp;quot;,&lt;br /&gt;
                  comparison: &amp;quot;equals&amp;quot;,&lt;br /&gt;
                  valueUserTag: &amp;quot;userTag_2&amp;quot;&lt;br /&gt;
               }&lt;br /&gt;
            }&lt;br /&gt;
          },&lt;br /&gt;
&lt;br /&gt;
        }, &lt;br /&gt;
        hash_linkStepB_2: {&lt;br /&gt;
           pathLinkType: {&lt;br /&gt;
             objType: {&lt;br /&gt;
               serviceTag: &amp;quot;OrderPrice&amp;quot;,&lt;br /&gt;
               objectType: &amp;quot;OrderPrice&amp;quot;&lt;br /&gt;
             },&lt;br /&gt;
             relType: {&lt;br /&gt;
               serviceTag: &amp;quot;sellOfferStandard&amp;quot;,&lt;br /&gt;
               relationshipTag: &amp;quot;hasOrderPrice&amp;quot;&lt;br /&gt;
             },&lt;br /&gt;
             direction: &amp;quot;to&amp;quot;,&lt;br /&gt;
           },&lt;br /&gt;
          requestProperties: {&lt;br /&gt;
            tag_deliverTo: &amp;quot;userTag_3&amp;quot;,&lt;br /&gt;
            tag_sellOfferPlan: &amp;quot;userTag_4&amp;quot;,&lt;br /&gt;
            // tag_sellOfferPlanDeliveryMethodLink: &amp;quot;userTag_5&amp;quot;,&lt;br /&gt;
            // tag_sellOfferPlanUserPaymentMethodLink: &amp;quot;userTag_6&amp;quot;&lt;br /&gt;
          }&lt;br /&gt;
          aggregate: &amp;quot;max&amp;quot;,&lt;br /&gt;
          sortFields: [&lt;br /&gt;
       			{&lt;br /&gt;
            		requiredDataLinkStepObjectId: &amp;quot;userTag_LinkStepObjectC&amp;quot;,&lt;br /&gt;
		            dataType: &amp;quot;number&amp;quot;&lt;br /&gt;
        		},&lt;br /&gt;
				{&lt;br /&gt;
        		     requiredDataLinkStepObjectId: &amp;quot;userTag_LinkStepObjectD&amp;quot;,&lt;br /&gt;
		             dataType: &amp;quot;string&amp;quot;&lt;br /&gt;
		         }&lt;br /&gt;
            ],&lt;br /&gt;
        }, &lt;br /&gt;
        hash_linkStepB_3: {&lt;br /&gt;
           fieldName: &amp;quot;zzz&amp;quot;,&lt;br /&gt;
        }&lt;br /&gt;
	},&lt;br /&gt;
	sortFields: [&lt;br /&gt;
        {&lt;br /&gt;
             requiredDataLinkStepObjectId: &amp;quot;userTag_LinkStepObjectB&amp;quot;,&lt;br /&gt;
             dataType: &amp;quot;number&amp;quot;&lt;br /&gt;
        },&lt;br /&gt;
		{&lt;br /&gt;
             requiredDataLinkStepObjectId: &amp;quot;userTag_LinkStepObjectA&amp;quot;,&lt;br /&gt;
             dataType: &amp;quot;string&amp;quot;&lt;br /&gt;
         }&lt;br /&gt;
    ],&lt;br /&gt;
	valueUserTags: {&lt;br /&gt;
		userTag_1:{&lt;br /&gt;
			value: &amp;quot;xx&amp;quot;,&lt;br /&gt;
		},&lt;br /&gt;
		userTag_2:{&lt;br /&gt;
			value: &amp;quot;yy&amp;quot;,&lt;br /&gt;
		},&lt;br /&gt;
		userTag_3:{&lt;br /&gt;
			valueSource: &amp;quot;complexFilterCombination&amp;quot;,&lt;br /&gt;
            complexFilterCombinationId: &amp;quot;hash_complexFilterCombinationA&amp;quot;,&lt;br /&gt;
		},&lt;br /&gt;
		userTag_4:{&lt;br /&gt;
			valueSource: &amp;quot;perParentCombination&amp;quot;,&lt;br /&gt;
            perParentCombinationId: &amp;quot;hash_perParentCombinationA&amp;quot;,&lt;br /&gt;
		},&lt;br /&gt;
		userTag_7: {&lt;br /&gt;
          value: &amp;quot;zz&amp;quot;,&lt;br /&gt;
        },&lt;br /&gt;
        userTag_8: {&lt;br /&gt;
          valueSource: 'perParentIdentifier',&lt;br /&gt;
          perParentIdentifierFieldname: 'sellOfferId'&lt;br /&gt;
        },&lt;br /&gt;
        userTag_9: {&lt;br /&gt;
          value: 2,&lt;br /&gt;
        },&lt;br /&gt;
	 }&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[Category:Working documents| 2025-04-14]]&lt;br /&gt;
[[Category:Working documents - Search Results| 2025-04-14]]&lt;/div&gt;</summary>
		<author><name>Rut</name></author>
	</entry>
	<entry>
		<id>https://izara.io/wiki/index.php?title=2025-04-14_-_Frontend_LinkPath_structure_for_tableOutput&amp;diff=3750</id>
		<title>2025-04-14 - Frontend LinkPath structure for tableOutput</title>
		<link rel="alternate" type="text/html" href="https://izara.io/wiki/index.php?title=2025-04-14_-_Frontend_LinkPath_structure_for_tableOutput&amp;diff=3750"/>
		<updated>2025-12-26T09:18:49Z</updated>

		<summary type="html">&lt;p&gt;Rut: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Service - Search Results]]&lt;br /&gt;
&lt;br /&gt;
= Overview =&lt;br /&gt;
&lt;br /&gt;
Structure frontend TableConfig and Output prepare for shared library that creates complexFilter and requestProperties&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Service - Search Results]]&lt;br /&gt;
&lt;br /&gt;
= Overview =&lt;br /&gt;
&lt;br /&gt;
Structure frontend TableConfig and Output prepare for shared library that creates complexFilter and requestProperties&lt;br /&gt;
&lt;br /&gt;
= Example params in tableConfig =&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;JavaScript&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
let paramFromTableOutput = {&lt;br /&gt;
&lt;br /&gt;
	// .. other properties same as params sent to backend&lt;br /&gt;
	// requiredDataFields not needed in tableConfig as referenced in elements and sortFields&lt;br /&gt;
	// header/footer filterDataField elements reference valueUserTag&lt;br /&gt;
&lt;br /&gt;
	elements: {&lt;br /&gt;
        // add example of pageOutput element that references requiredDataLinkStepObjects and valueUserTags&lt;br /&gt;
    },&lt;br /&gt;
	values: {&lt;br /&gt;
		// values are shared between requestProperties and filter values. This set can be iterated to overwrite values using userTag to identify&lt;br /&gt;
		userTag_1:{&lt;br /&gt;
			defaultValue: &amp;quot;xx&amp;quot;,&lt;br /&gt;
		},&lt;br /&gt;
		userTag_2:{&lt;br /&gt;
			defaultValue: &amp;quot;xx&amp;quot;,&lt;br /&gt;
		},&lt;br /&gt;
		userTag_3:{&lt;br /&gt;
			defaultValue: &amp;quot;xx&amp;quot;,&lt;br /&gt;
		},&lt;br /&gt;
		userTag_4:{&lt;br /&gt;
			defaultValue: &amp;quot;xx&amp;quot;,&lt;br /&gt;
		},&lt;br /&gt;
		userTag_5:{&lt;br /&gt;
			defaultValue: &amp;quot;xx&amp;quot;,&lt;br /&gt;
		},&lt;br /&gt;
		userTag_6:{&lt;br /&gt;
			valueSource: &amp;quot;complexFilterCombination&amp;quot;,&lt;br /&gt;
            complexFilterCombinationId: &amp;quot;hash_complexFilterCombinationA&amp;quot;,&lt;br /&gt;
		},&lt;br /&gt;
		userTag_7:{&lt;br /&gt;
			valueSource: &amp;quot;perParentCombination&amp;quot;,&lt;br /&gt;
            perParentCombinationId: &amp;quot;hash_perParentCombinationA&amp;quot;,&lt;br /&gt;
		},&lt;br /&gt;
        userTag_8: {&lt;br /&gt;
            valueSource: 'perParentIdentifier',&lt;br /&gt;
            perParentIdentifierFieldname: 'sellOfferId'&lt;br /&gt;
        },,&lt;br /&gt;
		userTag_9:{&lt;br /&gt;
			defaultValue: &amp;quot;xx&amp;quot;,&lt;br /&gt;
		},&lt;br /&gt;
		userTag_10:{&lt;br /&gt;
			defaultValue: &amp;quot;xx&amp;quot;,&lt;br /&gt;
		},&lt;br /&gt;
		userTag_11:{&lt;br /&gt;
			defaultValue: &amp;quot;xx&amp;quot;,&lt;br /&gt;
		},&lt;br /&gt;
	}&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= Example params sent to backend =&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;JavaScript&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
let paramFromTableOutput = {&lt;br /&gt;
	objType: { //* main objType&lt;br /&gt;
		serviceTag: &amp;quot;ProductManager&amp;quot;,&lt;br /&gt;
		objectType: &amp;quot;Product&amp;quot;&lt;br /&gt;
	},&lt;br /&gt;
    initialLogicalElementId: &amp;quot;uuid_logical_1&amp;quot;,&lt;br /&gt;
    logicalElements: {&lt;br /&gt;
       uuid_logical_1: {&lt;br /&gt;
         logicalElementType: &amp;quot;logical&amp;quot;,&lt;br /&gt;
         previousLogicalElementId: null,&lt;br /&gt;
         nextLogicalElementId: null,&lt;br /&gt;
&lt;br /&gt;
         objType: {&lt;br /&gt;
           serviceTag: &amp;quot;ProductManager&amp;quot;,&lt;br /&gt;
           objectType: &amp;quot;product&amp;quot;&lt;br /&gt;
         },&lt;br /&gt;
         fieldName: &amp;quot;productId&amp;quot;,&lt;br /&gt;
         comparison: &amp;quot;equals&amp;quot;,&lt;br /&gt;
         valueUserTag: &amp;quot;userTag_1&amp;quot;&lt;br /&gt;
       }&lt;br /&gt;
    },&lt;br /&gt;
	requiredDataFields: [ //* linkStepObjects to create main sort result's requiredData and sortFields&lt;br /&gt;
        // not needed at tableConfig level because can be built from table's elements and sortFields before sending to lib that converts to backend structure&lt;br /&gt;
        &amp;quot;userTag_LinkStepObjectA&amp;quot;, // no link, field in main objType (structure same linkPath but only one step)&lt;br /&gt;
        &amp;quot;userTag_LinkStepObjectB&amp;quot;, // has link&lt;br /&gt;
	],&lt;br /&gt;
	complexFilterCombinations:{&lt;br /&gt;
		hash_complexFilterCombinationA: {&lt;br /&gt;
          objType: {&lt;br /&gt;
            serviceTag: &amp;quot;Locations&amp;quot;,&lt;br /&gt;
            objectType: &amp;quot;locationNode&amp;quot;&lt;br /&gt;
          },&lt;br /&gt;
          initialLogicalElementId: &amp;quot;child_complexFilter_localtionNode&amp;quot;,&lt;br /&gt;
          logicalElements: {&lt;br /&gt;
            child_complexFilter_localtionNode: {&lt;br /&gt;
              logicalElementType: &amp;quot;childComplexFilter&amp;quot;,&lt;br /&gt;
              previousLogicalElementId: null,&lt;br /&gt;
              nextLogicalElementId: null,&lt;br /&gt;
&lt;br /&gt;
              childLogicalElementId: &amp;quot;logical_locationNode&amp;quot;,&lt;br /&gt;
              objType: {&lt;br /&gt;
                serviceTag: &amp;quot;Locations&amp;quot;,&lt;br /&gt;
                objectType: &amp;quot;locationNode&amp;quot;&lt;br /&gt;
              },&lt;br /&gt;
              pathLinkType: {&lt;br /&gt;
                objType: {&lt;br /&gt;
                  serviceTag: &amp;quot;Locations&amp;quot;,&lt;br /&gt;
                  objectType: &amp;quot;locationNode&amp;quot;&lt;br /&gt;
                },&lt;br /&gt;
                relType: {&lt;br /&gt;
                  serviceTag: &amp;quot;Locations&amp;quot;,&lt;br /&gt;
                  relationshipTag: &amp;quot;hasParentLocationNode&amp;quot;&lt;br /&gt;
                },&lt;br /&gt;
                direction: &amp;quot;to&amp;quot;&lt;br /&gt;
              },&lt;br /&gt;
            },&lt;br /&gt;
            logical_locationNode: {&lt;br /&gt;
               logicalElementType: &amp;quot;logical&amp;quot;,&lt;br /&gt;
               previousLogicalElementId: &amp;quot;child_complexFilter_localtionNode&amp;quot;,&lt;br /&gt;
               nextLogicalElementId: null,&lt;br /&gt;
&lt;br /&gt;
               objType: {&lt;br /&gt;
                serviceTag: &amp;quot;Locations&amp;quot;,&lt;br /&gt;
                objectType: &amp;quot;locationNode&amp;quot;&lt;br /&gt;
               },&lt;br /&gt;
               fieldName: &amp;quot;locationNodeId&amp;quot;,&lt;br /&gt;
               comparison: &amp;quot;equals&amp;quot;,&lt;br /&gt;
               valueUserTag: &amp;quot;userTag_7&amp;quot;&lt;br /&gt;
            }&lt;br /&gt;
         }&lt;br /&gt;
       },&lt;br /&gt;
	},&lt;br /&gt;
	perParentCombinations:{&lt;br /&gt;
		hash_perParentCombinationA: {&lt;br /&gt;
          objType: {&lt;br /&gt;
            serviceTag: &amp;quot;SellOfferPlan&amp;quot;,&lt;br /&gt;
            objectType: &amp;quot;sellOfferPlan&amp;quot;&lt;br /&gt;
          },&lt;br /&gt;
          initialLogicalElementId: &amp;quot;child_complexFilter_1&amp;quot;,&lt;br /&gt;
          logicalElements: {&lt;br /&gt;
            child_complexFilter_1: {&lt;br /&gt;
              logicalElementType: &amp;quot;childComplexFilter&amp;quot;,&lt;br /&gt;
              previousLogicalElementId: null,&lt;br /&gt;
              nextLogicalElementId: null,&lt;br /&gt;
&lt;br /&gt;
              childLogicalElementId: &amp;quot;logical_sellOffer&amp;quot;,&lt;br /&gt;
              objType: {&lt;br /&gt;
                serviceTag: &amp;quot;SellOfferPlan&amp;quot;,&lt;br /&gt;
                objectType: &amp;quot;sellOfferPlan&amp;quot;&lt;br /&gt;
              },&lt;br /&gt;
              pathLinkType: {&lt;br /&gt;
                objType: {&lt;br /&gt;
                  serviceTag: &amp;quot;SellOfferManager&amp;quot;,&lt;br /&gt;
                  objectType: &amp;quot;sellOffer&amp;quot;&lt;br /&gt;
                }, &lt;br /&gt;
                relType: {&lt;br /&gt;
                  serviceTag: &amp;quot;SellOfferManager&amp;quot;,&lt;br /&gt;
                  relationshipTag: &amp;quot;usesSellOfferPlan&amp;quot;&lt;br /&gt;
                },&lt;br /&gt;
                direction: &amp;quot;to&amp;quot;&lt;br /&gt;
              },&lt;br /&gt;
              requestProperties: {&lt;br /&gt;
                tag_orderQuantity: &amp;quot;userTag_9&amp;quot;&lt;br /&gt;
              }&lt;br /&gt;
           },&lt;br /&gt;
           logical_sellOffer: {&lt;br /&gt;
              logicalElementType: &amp;quot;logical&amp;quot;,&lt;br /&gt;
              previousLogicalElementId: &amp;quot;child_complexFilter_1&amp;quot;,&lt;br /&gt;
              nextLogicalElementId: null,&lt;br /&gt;
&lt;br /&gt;
              objType: {&lt;br /&gt;
                serviceTag: &amp;quot;SellOfferManager&amp;quot;,&lt;br /&gt;
                objectType: &amp;quot;sellOffer&amp;quot;&lt;br /&gt;
              },&lt;br /&gt;
              fieldName: &amp;quot;sellOfferId&amp;quot;,&lt;br /&gt;
              comparison: &amp;quot;equals&amp;quot;,&lt;br /&gt;
              valueUserTag: &amp;quot;userTag_8&amp;quot;&lt;br /&gt;
           }&lt;br /&gt;
        }&lt;br /&gt;
      },&lt;br /&gt;
	},&lt;br /&gt;
	requiredDataLinkStepObjects: {&lt;br /&gt;
		userTag_LinkStepObjectA: { //* requiredData no linkPath&lt;br /&gt;
			initialObjType: { //* main objType&lt;br /&gt;
				serviceTag: &amp;quot;ProductManager&amp;quot;,&lt;br /&gt;
				objectType: &amp;quot;Product&amp;quot;&lt;br /&gt;
			},&lt;br /&gt;
			linkSteps: [&amp;quot;hash_linkStepA_1&amp;quot;],&lt;br /&gt;
		},&lt;br /&gt;
        userTag_LinkStepObjectB: { // requiredDataFields for finding max orderTotal&lt;br /&gt;
            initialObjType: { //* main objType&lt;br /&gt;
				serviceTag: &amp;quot;ProductManager&amp;quot;,&lt;br /&gt;
				objectType: &amp;quot;Product&amp;quot;&lt;br /&gt;
			},&lt;br /&gt;
			linkSteps: [&amp;quot;hash_linkStepB_1&amp;quot;, &amp;quot;hash_linkStepB_2&amp;quot;, &amp;quot;hash_linkStepB_3&amp;quot;],&lt;br /&gt;
        }&lt;br /&gt;
        // userTag_LinkStepObjectC&lt;br /&gt;
        // userTag_LinkStepObjectD&lt;br /&gt;
	},&lt;br /&gt;
	requiredDataLinkSteps: {&lt;br /&gt;
		hash_linkStepA_1:{&lt;br /&gt;
          fieldName: &amp;quot;xxx&amp;quot; &lt;br /&gt;
        },&lt;br /&gt;
        hash_linkStepB_1:{&lt;br /&gt;
          pathLinkType: {&lt;br /&gt;
             objType: {&lt;br /&gt;
               serviceTag: &amp;quot;SellOfferManager&amp;quot;,&lt;br /&gt;
               objectType: &amp;quot;SellOffer&amp;quot;&lt;br /&gt;
             },&lt;br /&gt;
             relType: {&lt;br /&gt;
               serviceTag: &amp;quot;ProductManager&amp;quot;,&lt;br /&gt;
               relationshipTag: &amp;quot;hasSellOffer&amp;quot;&lt;br /&gt;
             },&lt;br /&gt;
             direction: &amp;quot;to&amp;quot;,&lt;br /&gt;
          },&lt;br /&gt;
           addFilterMain: true, //default: false =&amp;gt; need to add filterMain set = true&lt;br /&gt;
           filterElements: { //* filter in linkPath&lt;br /&gt;
             objType: {&lt;br /&gt;
               serviceTag: &amp;quot;SellOfferManager&amp;quot;,&lt;br /&gt;
               objectType: &amp;quot;SellOffer&amp;quot;&lt;br /&gt;
             },&lt;br /&gt;
             initialLogicalElementId: &amp;quot;logical_sellOffer_in_link&amp;quot;,&lt;br /&gt;
             logicalElements: {&lt;br /&gt;
               logical_sellOffer_in_link: {&lt;br /&gt;
                  logicalElementType: &amp;quot;logical&amp;quot;,&lt;br /&gt;
                  previousLogicalElementId: null,&lt;br /&gt;
                  nextLogicalElementId: null,&lt;br /&gt;
&lt;br /&gt;
                  objType: {&lt;br /&gt;
                    serviceTag: &amp;quot;SellOfferManager&amp;quot;,&lt;br /&gt;
                    objectType: &amp;quot;SellOffer&amp;quot;&lt;br /&gt;
                  },&lt;br /&gt;
                  fieldName: &amp;quot;userId&amp;quot;,&lt;br /&gt;
                  comparison: &amp;quot;equals&amp;quot;,&lt;br /&gt;
                  valueUserTag: &amp;quot;userTag_2&amp;quot;&lt;br /&gt;
               }&lt;br /&gt;
            }&lt;br /&gt;
          },&lt;br /&gt;
&lt;br /&gt;
        }, &lt;br /&gt;
        hash_linkStepB_2: {&lt;br /&gt;
           pathLinkType: {&lt;br /&gt;
             objType: {&lt;br /&gt;
               serviceTag: &amp;quot;OrderPrice&amp;quot;,&lt;br /&gt;
               objectType: &amp;quot;OrderPrice&amp;quot;&lt;br /&gt;
             },&lt;br /&gt;
             relType: {&lt;br /&gt;
               serviceTag: &amp;quot;sellOfferStandard&amp;quot;,&lt;br /&gt;
               relationshipTag: &amp;quot;hasOrderPrice&amp;quot;&lt;br /&gt;
             },&lt;br /&gt;
             direction: &amp;quot;to&amp;quot;,&lt;br /&gt;
           },&lt;br /&gt;
          requestProperties: {&lt;br /&gt;
            tag_deliverTo: &amp;quot;userTag_3&amp;quot;,&lt;br /&gt;
            tag_sellOfferPlan: &amp;quot;userTag_4&amp;quot;,&lt;br /&gt;
            // tag_sellOfferPlanDeliveryMethodLink: &amp;quot;userTag_5&amp;quot;,&lt;br /&gt;
            // tag_sellOfferPlanUserPaymentMethodLink: &amp;quot;userTag_6&amp;quot;&lt;br /&gt;
          }&lt;br /&gt;
          aggregate: &amp;quot;max&amp;quot;,&lt;br /&gt;
          sortFields: [&lt;br /&gt;
       			{&lt;br /&gt;
            		requiredDataLinkStepObjectId: &amp;quot;userTag_LinkStepObjectC&amp;quot;,&lt;br /&gt;
		            dataType: &amp;quot;number&amp;quot;&lt;br /&gt;
        		},&lt;br /&gt;
				{&lt;br /&gt;
        		     requiredDataLinkStepObjectId: &amp;quot;userTag_LinkStepObjectD&amp;quot;,&lt;br /&gt;
		             dataType: &amp;quot;string&amp;quot;&lt;br /&gt;
		         }&lt;br /&gt;
            ],&lt;br /&gt;
        }, &lt;br /&gt;
        hash_linkStepB_3: {&lt;br /&gt;
           fieldName: &amp;quot;zzz&amp;quot;,&lt;br /&gt;
        }&lt;br /&gt;
	},&lt;br /&gt;
	sortFields: [&lt;br /&gt;
        {&lt;br /&gt;
             requiredDataLinkStepObjectId: &amp;quot;userTag_LinkStepObjectB&amp;quot;,&lt;br /&gt;
             dataType: &amp;quot;number&amp;quot;&lt;br /&gt;
        },&lt;br /&gt;
		{&lt;br /&gt;
             requiredDataLinkStepObjectId: &amp;quot;userTag_LinkStepObjectA&amp;quot;,&lt;br /&gt;
             dataType: &amp;quot;string&amp;quot;&lt;br /&gt;
         }&lt;br /&gt;
    ],&lt;br /&gt;
	values: {&lt;br /&gt;
		userTag_1:{&lt;br /&gt;
			value: &amp;quot;xx&amp;quot;,&lt;br /&gt;
		},&lt;br /&gt;
		userTag_2:{&lt;br /&gt;
			value: &amp;quot;yy&amp;quot;,&lt;br /&gt;
		},&lt;br /&gt;
		userTag_3:{&lt;br /&gt;
			valueSource: &amp;quot;complexFilterCombination&amp;quot;,&lt;br /&gt;
            complexFilterCombinationId: &amp;quot;hash_complexFilterCombinationA&amp;quot;,&lt;br /&gt;
		},&lt;br /&gt;
		userTag_4:{&lt;br /&gt;
			valueSource: &amp;quot;perParentCombination&amp;quot;,&lt;br /&gt;
            perParentCombinationId: &amp;quot;hash_perParentCombinationA&amp;quot;,&lt;br /&gt;
		},&lt;br /&gt;
		userTag_7: {&lt;br /&gt;
          value: &amp;quot;zz&amp;quot;,&lt;br /&gt;
        },&lt;br /&gt;
        userTag_8: {&lt;br /&gt;
          valueSource: 'perParentIdentifier',&lt;br /&gt;
          perParentIdentifierFieldname: 'sellOfferId'&lt;br /&gt;
        },&lt;br /&gt;
        userTag_9: {&lt;br /&gt;
          value: 2,&lt;br /&gt;
        },&lt;br /&gt;
	 }&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[Category:Working documents| 2025-04-14]]&lt;br /&gt;
[[Category:Working documents - Search Results| 2025-04-14]]&lt;/div&gt;</summary>
		<author><name>Rut</name></author>
	</entry>
	<entry>
		<id>https://izara.io/wiki/index.php?title=2025-01-23_-_Standard_Object_and_Relationship_Data_Structures&amp;diff=3648</id>
		<title>2025-01-23 - Standard Object and Relationship Data Structures</title>
		<link rel="alternate" type="text/html" href="https://izara.io/wiki/index.php?title=2025-01-23_-_Standard_Object_and_Relationship_Data_Structures&amp;diff=3648"/>
		<updated>2025-11-21T03:41:19Z</updated>

		<summary type="html">&lt;p&gt;Rut: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= Overview =&lt;br /&gt;
Standard structure and definition of object. &lt;br /&gt;
&lt;br /&gt;
= Definition =&lt;br /&gt;
&lt;br /&gt;
== objType ==&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;JavaScript&amp;quot;&amp;gt;&lt;br /&gt;
{&lt;br /&gt;
	serviceTag: &amp;quot;xxx&amp;quot;,&lt;br /&gt;
	objectType: &amp;quot;yyy&amp;quot;&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
use to identify which serviceTag that object schema located&lt;br /&gt;
* serviceTag: service tag that stored object schema&lt;br /&gt;
* objectType: name of object schema&lt;br /&gt;
&lt;br /&gt;
== objTypeConcat ==&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;JavaScript&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;serviceTag&amp;gt;_&amp;lt;objectType&amp;gt;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
* objTypeConcat: &amp;quot;serviceTag&amp;quot; + &amp;quot;_&amp;quot; + &amp;quot;objectType&amp;quot;&lt;br /&gt;
* now use as the name of node label in graph database&lt;br /&gt;
&lt;br /&gt;
== objTypeId ==&lt;br /&gt;
* hash of objType object&lt;br /&gt;
&lt;br /&gt;
== relType ==&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;JavaScript&amp;quot;&amp;gt;&lt;br /&gt;
{&lt;br /&gt;
	serviceTag: &amp;quot;xxx&amp;quot;,&lt;br /&gt;
	relationshipTag: &amp;quot;yyy&amp;quot;&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
use to identify which serviceTag that relationship schema  located&lt;br /&gt;
* serviceTag: service tag that stored object schema&lt;br /&gt;
* relationshipTag: name of relationship schema&lt;br /&gt;
&lt;br /&gt;
== relTypeConcat ==&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;JavaScript&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;serviceTag&amp;gt;_&amp;lt;relationshipTag&amp;gt;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
* relTypeConcat: &amp;quot;serviceTag&amp;quot; + &amp;quot;_&amp;quot; + &amp;quot;relationshipTag&amp;quot;&lt;br /&gt;
* now use as the name of relationshipType in graph database&lt;br /&gt;
&lt;br /&gt;
== relTypeId ==&lt;br /&gt;
* hash of relType object&lt;br /&gt;
&lt;br /&gt;
== relTypeAndDirection ==&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;JavaScript&amp;quot;&amp;gt;&lt;br /&gt;
{&lt;br /&gt;
	relType: {&lt;br /&gt;
		serviceTag: &amp;quot;xxx&amp;quot;,&lt;br /&gt;
		relationshipTag: &amp;quot;yyy&amp;quot;&lt;br /&gt;
	},&lt;br /&gt;
	relationshipDirection: &amp;quot;to&amp;quot;, // &amp;quot;from&amp;quot; || &amp;quot;to&amp;quot;&lt;br /&gt;
    relationshipProperties: {}&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== linkType ==&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;JavaScript&amp;quot;&amp;gt;&lt;br /&gt;
{&lt;br /&gt;
  firstObjType: {&lt;br /&gt;
    serviceTag: &amp;quot;xx&amp;quot;,&lt;br /&gt;
    objectType: &amp;quot;yy&amp;quot;,&lt;br /&gt;
  },&lt;br /&gt;
  secondObjType: {&lt;br /&gt;
    serviceTag: &amp;quot;xxx&amp;quot;,&lt;br /&gt;
    objectType: &amp;quot;yyy&amp;quot;&lt;br /&gt;
  },&lt;br /&gt;
&lt;br /&gt;
  relType: {&lt;br /&gt;
    serviceTag: &amp;quot;xxxx&amp;quot;,&lt;br /&gt;
    relationshipTag: &amp;quot;yyyy&amp;quot;&lt;br /&gt;
  },&lt;br /&gt;
  relationshipDirection: &amp;quot;to&amp;quot; // &amp;quot;from&amp;quot; || &amp;quot;to&amp;quot;&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
use to identify relationship between 2 objectSchema&lt;br /&gt;
&lt;br /&gt;
== linkTypeId ==&lt;br /&gt;
create hash id from linkType&lt;br /&gt;
&lt;br /&gt;
== pathLinkType ==&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;JavaScript&amp;quot;&amp;gt;&lt;br /&gt;
{&lt;br /&gt;
  objType: {&lt;br /&gt;
    serviceTag: &amp;quot;xxx&amp;quot;,&lt;br /&gt;
    objectType: &amp;quot;yyy&amp;quot;&lt;br /&gt;
  },&lt;br /&gt;
  relType: {&lt;br /&gt;
    serviceTag: &amp;quot;xxxx&amp;quot;,&lt;br /&gt;
    relationshipTag: &amp;quot;yyyy&amp;quot;&lt;br /&gt;
  },&lt;br /&gt;
  relationshipDirection: &amp;quot;to&amp;quot; // &amp;quot;from&amp;quot; || &amp;quot;to&amp;quot;&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
* pathLinkType is used at each step of traversal/path&lt;br /&gt;
* when joined with the previous objType/baseObjType can be used to create linkType (and request linkConfig)&lt;br /&gt;
&lt;br /&gt;
== flowType ==&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;JavaScript&amp;quot;&amp;gt;&lt;br /&gt;
{&lt;br /&gt;
	serviceTag: &amp;quot;xxx&amp;quot;,&lt;br /&gt;
	flowTag: &amp;quot;yyy&amp;quot;&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
use to identify which serviceTag that flow schema is located&lt;br /&gt;
&lt;br /&gt;
== identifiers ==&lt;br /&gt;
An object that has fieldName’s identifiers inside&lt;br /&gt;
=== example identifiers ===&lt;br /&gt;
* example identifiers inside objectSchema&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;JavaScript&amp;quot;&amp;gt;&lt;br /&gt;
identifiers:[&lt;br /&gt;
  {    &lt;br /&gt;
    type: &amp;quot;partitionKey&amp;quot;,&lt;br /&gt;
    fieldNames: [&amp;quot;xx&amp;quot;,&amp;quot;yy&amp;quot;],&lt;br /&gt;
    name: &amp;quot;zz&amp;quot;&lt;br /&gt;
  }&lt;br /&gt;
]&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
* example identifiers object&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;JavaScript&amp;quot;&amp;gt;&lt;br /&gt;
{    &lt;br /&gt;
  xx:&amp;quot;xx value&amp;quot;,&lt;br /&gt;
  yy:&amp;quot;yy value&amp;quot;&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The example above identifiers is the value of fieldNames that part of identifiers &lt;br /&gt;
&lt;br /&gt;
== identifiersBase ==&lt;br /&gt;
concatenated identifiers object &lt;br /&gt;
=== example identifiersBase ===&lt;br /&gt;
* example identifiers inside objectSchema&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;JavaScript&amp;quot;&amp;gt;&lt;br /&gt;
identifiers:[&lt;br /&gt;
  {    &lt;br /&gt;
    type: &amp;quot;partitionKey&amp;quot;,&lt;br /&gt;
    fieldNames: [&amp;quot;xx&amp;quot;,&amp;quot;yy&amp;quot;],&lt;br /&gt;
    name: &amp;quot;zz&amp;quot;&lt;br /&gt;
  }&lt;br /&gt;
]&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
* example identifiersBase object&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;JavaScript&amp;quot;&amp;gt;&lt;br /&gt;
{    &lt;br /&gt;
  zz:&amp;quot;xxValue_yyValue&amp;quot;,&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The example above identifiersBase is the value of each identifier of objectSchema &lt;br /&gt;
&lt;br /&gt;
== identifiersId ==&lt;br /&gt;
hash of identifiers object &lt;br /&gt;
&lt;br /&gt;
== identifiersConcat ==&lt;br /&gt;
string that concatenate all identifiers&lt;br /&gt;
* Note!: Will ordered concatenate value by objectSchema.identifiers array &lt;br /&gt;
&lt;br /&gt;
== objInstanceBase ==&lt;br /&gt;
result from dynamoDB that contains relevant and not relevant data of objectSchema &lt;br /&gt;
* identifiers from in objInstanceBase will concatenated or not concatenated depending on objectSchema&lt;br /&gt;
* izContext field not relevant with objectSchema but it contains inside objInstanceBase&lt;br /&gt;
&lt;br /&gt;
== objInstance ==&lt;br /&gt;
similar objInstanceBase but split concatenateIdentifier to each fieldName&lt;br /&gt;
&lt;br /&gt;
== objInstanceFull ==&lt;br /&gt;
object that separated fields and identifiers and identifiers cannot concatenated&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;JavaScript&amp;quot;&amp;gt;&lt;br /&gt;
{    &lt;br /&gt;
  identifiers:{&lt;br /&gt;
    //... identifiers fieldName of objectSchema&lt;br /&gt;
  }, &lt;br /&gt;
  fields:{&lt;br /&gt;
    //.. data of objectSchema&lt;br /&gt;
  }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
* identifiers: contains identifiers data&lt;br /&gt;
* fields: another data except  &lt;br /&gt;
&lt;br /&gt;
== example data  ==&lt;br /&gt;
=== example objectSchema ===&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;JavaScript&amp;quot;&amp;gt;&lt;br /&gt;
// example objectSchema&lt;br /&gt;
{    &lt;br /&gt;
  fieldNames:{&lt;br /&gt;
    id:{&lt;br /&gt;
      type:”string”,&lt;br /&gt;
      // … another fieldName settings&lt;br /&gt;
    },&lt;br /&gt;
    createTime: {},     //  filedName settings&lt;br /&gt;
    location: {},       //  filedName settings&lt;br /&gt;
    value: {},          //  filedName settings&lt;br /&gt;
  },&lt;br /&gt;
  identifiers:[&lt;br /&gt;
    {&lt;br /&gt;
      type: &amp;quot;partitionKey&amp;quot;,&lt;br /&gt;
      fieldNames: [&amp;quot;id&amp;quot;,&amp;quot;createTime&amp;quot;],   // composite partition keys in DynamoDB&lt;br /&gt;
      deliminator: &amp;quot;_&amp;quot;,                  // optional, defaults to &amp;quot;_&amp;quot;&lt;br /&gt;
      name: &amp;quot;createId&amp;quot;                   // name of field in database&lt;br /&gt;
    },&lt;br /&gt;
    {&lt;br /&gt;
      type: &amp;quot;sortKey&amp;quot;,&lt;br /&gt;
      fieldName: “location”&lt;br /&gt;
    }&lt;br /&gt;
  ]&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== objInstanceBase ===&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;JavaScript&amp;quot;&amp;gt;&lt;br /&gt;
// example objInstanceBase data&lt;br /&gt;
{&lt;br /&gt;
  createId:&amp;quot;id_createTime&amp;quot;,&lt;br /&gt;
  location:&amp;quot;cnx&amp;quot;,&lt;br /&gt;
  value:199,&lt;br /&gt;
  errorsFound:[],&lt;br /&gt;
  izContext:{&lt;br /&gt;
  // ...izContext&lt;br /&gt;
  },&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
Normally objInstanceBase is the result from dynamoDB and it will include data that is not relevant to objectSchema. In example above errorsFound and izContext not contain in objectSchema.&lt;br /&gt;
&lt;br /&gt;
=== objInstance ===&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;JavaScript&amp;quot;&amp;gt;&lt;br /&gt;
// example objInstance data&lt;br /&gt;
{&lt;br /&gt;
  id:&amp;quot;id&amp;quot;,&lt;br /&gt;
  createTime:&amp;quot;createTime&amp;quot;&lt;br /&gt;
  location:&amp;quot;cnx&amp;quot;,&lt;br /&gt;
  value:199,&lt;br /&gt;
  errorsFound:[],&lt;br /&gt;
  izContext:{&lt;br /&gt;
  // ...izContext&lt;br /&gt;
  },&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
objInstance is object that already refactored identifiers but another fields same as objInstanceBase &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== objInstanceFull ===&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;JavaScript&amp;quot;&amp;gt;&lt;br /&gt;
// example objInstanceFull data&lt;br /&gt;
{    &lt;br /&gt;
  identifiers:{&lt;br /&gt;
    id:&amp;quot;id&amp;quot;,&lt;br /&gt;
    createTime:&amp;quot;createTime&amp;quot;&lt;br /&gt;
    location:&amp;quot;cnx&amp;quot;,&lt;br /&gt;
  }, &lt;br /&gt;
  fields:{&lt;br /&gt;
    value:199,&lt;br /&gt;
  }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== identifiersBase ===&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;JavaScript&amp;quot;&amp;gt;&lt;br /&gt;
// example identifiersBase data&lt;br /&gt;
{&lt;br /&gt;
  createId:&amp;quot;id_createTime&amp;quot;,&lt;br /&gt;
  location:&amp;quot;cnx&amp;quot;&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== identifiers ===&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;JavaScript&amp;quot;&amp;gt;&lt;br /&gt;
// example identifiers data&lt;br /&gt;
{&lt;br /&gt;
  id: &amp;quot;id&amp;quot;,&lt;br /&gt;
  createTime: &amp;quot;createTime&amp;quot;,&lt;br /&gt;
  location: &amp;quot;cnx&amp;quot;&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Category:Working documents| 2025-01-23]]&lt;br /&gt;
[[Category:Working documents - Per Service Schemas| 2025-01-23]]&lt;/div&gt;</summary>
		<author><name>Rut</name></author>
	</entry>
	<entry>
		<id>https://izara.io/wiki/index.php?title=2025-01-23_-_Standard_Object_and_Relationship_Data_Structures&amp;diff=3647</id>
		<title>2025-01-23 - Standard Object and Relationship Data Structures</title>
		<link rel="alternate" type="text/html" href="https://izara.io/wiki/index.php?title=2025-01-23_-_Standard_Object_and_Relationship_Data_Structures&amp;diff=3647"/>
		<updated>2025-11-21T03:37:48Z</updated>

		<summary type="html">&lt;p&gt;Rut: /* pathLinkTypeObject */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= Overview =&lt;br /&gt;
Standard structure and definition of object. &lt;br /&gt;
&lt;br /&gt;
= Definition =&lt;br /&gt;
&lt;br /&gt;
== objType ==&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;JavaScript&amp;quot;&amp;gt;&lt;br /&gt;
{&lt;br /&gt;
	serviceTag: &amp;quot;xxx&amp;quot;,&lt;br /&gt;
	objectType: &amp;quot;yyy&amp;quot;&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
use to identify which serviceTag that object schema located&lt;br /&gt;
* serviceTag: service tag that stored object schema&lt;br /&gt;
* objectType: name of object schema&lt;br /&gt;
&lt;br /&gt;
== objTypeConcat ==&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;JavaScript&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;serviceTag&amp;gt;_&amp;lt;objectType&amp;gt;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
* objTypeConcat: &amp;quot;serviceTag&amp;quot; + &amp;quot;_&amp;quot; + &amp;quot;objectType&amp;quot;&lt;br /&gt;
* now use as the name of node label in graph database&lt;br /&gt;
&lt;br /&gt;
== objTypeId ==&lt;br /&gt;
* hash of objType object&lt;br /&gt;
&lt;br /&gt;
== relType ==&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;JavaScript&amp;quot;&amp;gt;&lt;br /&gt;
{&lt;br /&gt;
	serviceTag: &amp;quot;xxx&amp;quot;,&lt;br /&gt;
	relationshipTag: &amp;quot;yyy&amp;quot;&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
use to identify which serviceTag that relationship schema  located&lt;br /&gt;
* serviceTag: service tag that stored object schema&lt;br /&gt;
* relationshipTag: name of relationship schema&lt;br /&gt;
&lt;br /&gt;
== relTypeConcat ==&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;JavaScript&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;serviceTag&amp;gt;_&amp;lt;relationshipTag&amp;gt;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
* relTypeConcat: &amp;quot;serviceTag&amp;quot; + &amp;quot;_&amp;quot; + &amp;quot;relationshipTag&amp;quot;&lt;br /&gt;
* now use as the name of relationshipType in graph database&lt;br /&gt;
&lt;br /&gt;
== relTypeId ==&lt;br /&gt;
* hash of relType object&lt;br /&gt;
&lt;br /&gt;
== relTypeAndDirection ==&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;JavaScript&amp;quot;&amp;gt;&lt;br /&gt;
{&lt;br /&gt;
	relType: {&lt;br /&gt;
		serviceTag: &amp;quot;xxx&amp;quot;,&lt;br /&gt;
		relationshipTag: &amp;quot;yyy&amp;quot;&lt;br /&gt;
	},&lt;br /&gt;
	relationshipDirection: &amp;quot;to&amp;quot;, // &amp;quot;from&amp;quot; || &amp;quot;to&amp;quot;&lt;br /&gt;
    relationshipProperties: {}&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== linkType ==&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;JavaScript&amp;quot;&amp;gt;&lt;br /&gt;
{&lt;br /&gt;
  firstObjType: {&lt;br /&gt;
    serviceTag: &amp;quot;xx&amp;quot;,&lt;br /&gt;
    objectType: &amp;quot;yy&amp;quot;,&lt;br /&gt;
  },&lt;br /&gt;
  secondObjType: {&lt;br /&gt;
    serviceTag: &amp;quot;xxx&amp;quot;,&lt;br /&gt;
    objectType: &amp;quot;yyy&amp;quot;&lt;br /&gt;
  },&lt;br /&gt;
&lt;br /&gt;
  relType: {&lt;br /&gt;
    serviceTag: &amp;quot;xxxx&amp;quot;,&lt;br /&gt;
    relationshipTag: &amp;quot;yyyy&amp;quot;&lt;br /&gt;
  },&lt;br /&gt;
  relationshipDirection: &amp;quot;to&amp;quot; // &amp;quot;from&amp;quot; || &amp;quot;to&amp;quot;&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
use to identify relationship between 2 objectSchema&lt;br /&gt;
&lt;br /&gt;
== linkTypeId ==&lt;br /&gt;
create hash id from linkType&lt;br /&gt;
&lt;br /&gt;
== pathLinkType ==&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;JavaScript&amp;quot;&amp;gt;&lt;br /&gt;
{&lt;br /&gt;
  objType: {&lt;br /&gt;
    serviceTag: &amp;quot;xxx&amp;quot;,&lt;br /&gt;
    objectType: &amp;quot;yyy&amp;quot;&lt;br /&gt;
  },&lt;br /&gt;
  relType: {&lt;br /&gt;
    serviceTag: &amp;quot;xxxx&amp;quot;,&lt;br /&gt;
    relationshipTag: &amp;quot;yyyy&amp;quot;&lt;br /&gt;
  },&lt;br /&gt;
  relationshipDirection: &amp;quot;to&amp;quot; // &amp;quot;from&amp;quot; || &amp;quot;to&amp;quot;&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
* pathLinkType is used at each step of traversal/path&lt;br /&gt;
* when joined with the previous objType/baseObjType can be used to create linkType (and request linkConfig)&lt;br /&gt;
&lt;br /&gt;
== pathLinkTypeObject ==&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;JavaScript&amp;quot;&amp;gt;&lt;br /&gt;
{&lt;br /&gt;
  initialObjType: {},&lt;br /&gt;
  pathLinkTypes: [&lt;br /&gt;
    {&lt;br /&gt;
      objType: {&lt;br /&gt;
        serviceTag: &amp;quot;xxx&amp;quot;,&lt;br /&gt;
        objectType: &amp;quot;yyy&amp;quot;&lt;br /&gt;
      },&lt;br /&gt;
      relType: {&lt;br /&gt;
        serviceTag: &amp;quot;xxxx&amp;quot;,&lt;br /&gt;
        relationshipTag: &amp;quot;yyyy&amp;quot;&lt;br /&gt;
      },&lt;br /&gt;
      relationshipDirection: &amp;quot;to&amp;quot; // &amp;quot;from&amp;quot; || &amp;quot;to&amp;quot;&lt;br /&gt;
    },&lt;br /&gt;
    // ...&lt;br /&gt;
  ]&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
* creates a single path to final linkType from initial objType&lt;br /&gt;
&lt;br /&gt;
== flowType ==&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;JavaScript&amp;quot;&amp;gt;&lt;br /&gt;
{&lt;br /&gt;
	serviceTag: &amp;quot;xxx&amp;quot;,&lt;br /&gt;
	flowTag: &amp;quot;yyy&amp;quot;&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
use to identify which serviceTag that flow schema is located&lt;br /&gt;
&lt;br /&gt;
== identifiers ==&lt;br /&gt;
An object that has fieldName’s identifiers inside&lt;br /&gt;
=== example identifiers ===&lt;br /&gt;
* example identifiers inside objectSchema&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;JavaScript&amp;quot;&amp;gt;&lt;br /&gt;
identifiers:[&lt;br /&gt;
  {    &lt;br /&gt;
    type: &amp;quot;partitionKey&amp;quot;,&lt;br /&gt;
    fieldNames: [&amp;quot;xx&amp;quot;,&amp;quot;yy&amp;quot;],&lt;br /&gt;
    name: &amp;quot;zz&amp;quot;&lt;br /&gt;
  }&lt;br /&gt;
]&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
* example identifiers object&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;JavaScript&amp;quot;&amp;gt;&lt;br /&gt;
{    &lt;br /&gt;
  xx:&amp;quot;xx value&amp;quot;,&lt;br /&gt;
  yy:&amp;quot;yy value&amp;quot;&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The example above identifiers is the value of fieldNames that part of identifiers &lt;br /&gt;
&lt;br /&gt;
== identifiersBase ==&lt;br /&gt;
concatenated identifiers object &lt;br /&gt;
=== example identifiersBase ===&lt;br /&gt;
* example identifiers inside objectSchema&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;JavaScript&amp;quot;&amp;gt;&lt;br /&gt;
identifiers:[&lt;br /&gt;
  {    &lt;br /&gt;
    type: &amp;quot;partitionKey&amp;quot;,&lt;br /&gt;
    fieldNames: [&amp;quot;xx&amp;quot;,&amp;quot;yy&amp;quot;],&lt;br /&gt;
    name: &amp;quot;zz&amp;quot;&lt;br /&gt;
  }&lt;br /&gt;
]&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
* example identifiersBase object&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;JavaScript&amp;quot;&amp;gt;&lt;br /&gt;
{    &lt;br /&gt;
  zz:&amp;quot;xxValue_yyValue&amp;quot;,&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The example above identifiersBase is the value of each identifier of objectSchema &lt;br /&gt;
&lt;br /&gt;
== identifiersId ==&lt;br /&gt;
hash of identifiers object &lt;br /&gt;
&lt;br /&gt;
== identifiersConcat ==&lt;br /&gt;
string that concatenate all identifiers&lt;br /&gt;
* Note!: Will ordered concatenate value by objectSchema.identifiers array &lt;br /&gt;
&lt;br /&gt;
== objInstanceBase ==&lt;br /&gt;
result from dynamoDB that contains relevant and not relevant data of objectSchema &lt;br /&gt;
* identifiers from in objInstanceBase will concatenated or not concatenated depending on objectSchema&lt;br /&gt;
* izContext field not relevant with objectSchema but it contains inside objInstanceBase&lt;br /&gt;
&lt;br /&gt;
== objInstance ==&lt;br /&gt;
similar objInstanceBase but split concatenateIdentifier to each fieldName&lt;br /&gt;
&lt;br /&gt;
== objInstanceFull ==&lt;br /&gt;
object that separated fields and identifiers and identifiers cannot concatenated&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;JavaScript&amp;quot;&amp;gt;&lt;br /&gt;
{    &lt;br /&gt;
  identifiers:{&lt;br /&gt;
    //... identifiers fieldName of objectSchema&lt;br /&gt;
  }, &lt;br /&gt;
  fields:{&lt;br /&gt;
    //.. data of objectSchema&lt;br /&gt;
  }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
* identifiers: contains identifiers data&lt;br /&gt;
* fields: another data except  &lt;br /&gt;
&lt;br /&gt;
== example data  ==&lt;br /&gt;
=== example objectSchema ===&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;JavaScript&amp;quot;&amp;gt;&lt;br /&gt;
// example objectSchema&lt;br /&gt;
{    &lt;br /&gt;
  fieldNames:{&lt;br /&gt;
    id:{&lt;br /&gt;
      type:”string”,&lt;br /&gt;
      // … another fieldName settings&lt;br /&gt;
    },&lt;br /&gt;
    createTime: {},     //  filedName settings&lt;br /&gt;
    location: {},       //  filedName settings&lt;br /&gt;
    value: {},          //  filedName settings&lt;br /&gt;
  },&lt;br /&gt;
  identifiers:[&lt;br /&gt;
    {&lt;br /&gt;
      type: &amp;quot;partitionKey&amp;quot;,&lt;br /&gt;
      fieldNames: [&amp;quot;id&amp;quot;,&amp;quot;createTime&amp;quot;],   // composite partition keys in DynamoDB&lt;br /&gt;
      deliminator: &amp;quot;_&amp;quot;,                  // optional, defaults to &amp;quot;_&amp;quot;&lt;br /&gt;
      name: &amp;quot;createId&amp;quot;                   // name of field in database&lt;br /&gt;
    },&lt;br /&gt;
    {&lt;br /&gt;
      type: &amp;quot;sortKey&amp;quot;,&lt;br /&gt;
      fieldName: “location”&lt;br /&gt;
    }&lt;br /&gt;
  ]&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== objInstanceBase ===&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;JavaScript&amp;quot;&amp;gt;&lt;br /&gt;
// example objInstanceBase data&lt;br /&gt;
{&lt;br /&gt;
  createId:&amp;quot;id_createTime&amp;quot;,&lt;br /&gt;
  location:&amp;quot;cnx&amp;quot;,&lt;br /&gt;
  value:199,&lt;br /&gt;
  errorsFound:[],&lt;br /&gt;
  izContext:{&lt;br /&gt;
  // ...izContext&lt;br /&gt;
  },&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
Normally objInstanceBase is the result from dynamoDB and it will include data that is not relevant to objectSchema. In example above errorsFound and izContext not contain in objectSchema.&lt;br /&gt;
&lt;br /&gt;
=== objInstance ===&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;JavaScript&amp;quot;&amp;gt;&lt;br /&gt;
// example objInstance data&lt;br /&gt;
{&lt;br /&gt;
  id:&amp;quot;id&amp;quot;,&lt;br /&gt;
  createTime:&amp;quot;createTime&amp;quot;&lt;br /&gt;
  location:&amp;quot;cnx&amp;quot;,&lt;br /&gt;
  value:199,&lt;br /&gt;
  errorsFound:[],&lt;br /&gt;
  izContext:{&lt;br /&gt;
  // ...izContext&lt;br /&gt;
  },&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
objInstance is object that already refactored identifiers but another fields same as objInstanceBase &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== objInstanceFull ===&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;JavaScript&amp;quot;&amp;gt;&lt;br /&gt;
// example objInstanceFull data&lt;br /&gt;
{    &lt;br /&gt;
  identifiers:{&lt;br /&gt;
    id:&amp;quot;id&amp;quot;,&lt;br /&gt;
    createTime:&amp;quot;createTime&amp;quot;&lt;br /&gt;
    location:&amp;quot;cnx&amp;quot;,&lt;br /&gt;
  }, &lt;br /&gt;
  fields:{&lt;br /&gt;
    value:199,&lt;br /&gt;
  }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== identifiersBase ===&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;JavaScript&amp;quot;&amp;gt;&lt;br /&gt;
// example identifiersBase data&lt;br /&gt;
{&lt;br /&gt;
  createId:&amp;quot;id_createTime&amp;quot;,&lt;br /&gt;
  location:&amp;quot;cnx&amp;quot;&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== identifiers ===&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;JavaScript&amp;quot;&amp;gt;&lt;br /&gt;
// example identifiers data&lt;br /&gt;
{&lt;br /&gt;
  id: &amp;quot;id&amp;quot;,&lt;br /&gt;
  createTime: &amp;quot;createTime&amp;quot;,&lt;br /&gt;
  location: &amp;quot;cnx&amp;quot;&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Category:Working documents| 2025-01-23]]&lt;br /&gt;
[[Category:Working documents - Per Service Schemas| 2025-01-23]]&lt;/div&gt;</summary>
		<author><name>Rut</name></author>
	</entry>
	<entry>
		<id>https://izara.io/wiki/index.php?title=2025-01-23_-_Standard_Object_and_Relationship_Data_Structures&amp;diff=3646</id>
		<title>2025-01-23 - Standard Object and Relationship Data Structures</title>
		<link rel="alternate" type="text/html" href="https://izara.io/wiki/index.php?title=2025-01-23_-_Standard_Object_and_Relationship_Data_Structures&amp;diff=3646"/>
		<updated>2025-11-21T03:37:22Z</updated>

		<summary type="html">&lt;p&gt;Rut: /* pathLinkTypeObject */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= Overview =&lt;br /&gt;
Standard structure and definition of object. &lt;br /&gt;
&lt;br /&gt;
= Definition =&lt;br /&gt;
&lt;br /&gt;
== objType ==&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;JavaScript&amp;quot;&amp;gt;&lt;br /&gt;
{&lt;br /&gt;
	serviceTag: &amp;quot;xxx&amp;quot;,&lt;br /&gt;
	objectType: &amp;quot;yyy&amp;quot;&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
use to identify which serviceTag that object schema located&lt;br /&gt;
* serviceTag: service tag that stored object schema&lt;br /&gt;
* objectType: name of object schema&lt;br /&gt;
&lt;br /&gt;
== objTypeConcat ==&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;JavaScript&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;serviceTag&amp;gt;_&amp;lt;objectType&amp;gt;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
* objTypeConcat: &amp;quot;serviceTag&amp;quot; + &amp;quot;_&amp;quot; + &amp;quot;objectType&amp;quot;&lt;br /&gt;
* now use as the name of node label in graph database&lt;br /&gt;
&lt;br /&gt;
== objTypeId ==&lt;br /&gt;
* hash of objType object&lt;br /&gt;
&lt;br /&gt;
== relType ==&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;JavaScript&amp;quot;&amp;gt;&lt;br /&gt;
{&lt;br /&gt;
	serviceTag: &amp;quot;xxx&amp;quot;,&lt;br /&gt;
	relationshipTag: &amp;quot;yyy&amp;quot;&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
use to identify which serviceTag that relationship schema  located&lt;br /&gt;
* serviceTag: service tag that stored object schema&lt;br /&gt;
* relationshipTag: name of relationship schema&lt;br /&gt;
&lt;br /&gt;
== relTypeConcat ==&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;JavaScript&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;serviceTag&amp;gt;_&amp;lt;relationshipTag&amp;gt;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
* relTypeConcat: &amp;quot;serviceTag&amp;quot; + &amp;quot;_&amp;quot; + &amp;quot;relationshipTag&amp;quot;&lt;br /&gt;
* now use as the name of relationshipType in graph database&lt;br /&gt;
&lt;br /&gt;
== relTypeId ==&lt;br /&gt;
* hash of relType object&lt;br /&gt;
&lt;br /&gt;
== relTypeAndDirection ==&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;JavaScript&amp;quot;&amp;gt;&lt;br /&gt;
{&lt;br /&gt;
	relType: {&lt;br /&gt;
		serviceTag: &amp;quot;xxx&amp;quot;,&lt;br /&gt;
		relationshipTag: &amp;quot;yyy&amp;quot;&lt;br /&gt;
	},&lt;br /&gt;
	relationshipDirection: &amp;quot;to&amp;quot;, // &amp;quot;from&amp;quot; || &amp;quot;to&amp;quot;&lt;br /&gt;
    relationshipProperties: {}&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== linkType ==&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;JavaScript&amp;quot;&amp;gt;&lt;br /&gt;
{&lt;br /&gt;
  firstObjType: {&lt;br /&gt;
    serviceTag: &amp;quot;xx&amp;quot;,&lt;br /&gt;
    objectType: &amp;quot;yy&amp;quot;,&lt;br /&gt;
  },&lt;br /&gt;
  secondObjType: {&lt;br /&gt;
    serviceTag: &amp;quot;xxx&amp;quot;,&lt;br /&gt;
    objectType: &amp;quot;yyy&amp;quot;&lt;br /&gt;
  },&lt;br /&gt;
&lt;br /&gt;
  relType: {&lt;br /&gt;
    serviceTag: &amp;quot;xxxx&amp;quot;,&lt;br /&gt;
    relationshipTag: &amp;quot;yyyy&amp;quot;&lt;br /&gt;
  },&lt;br /&gt;
  relationshipDirection: &amp;quot;to&amp;quot; // &amp;quot;from&amp;quot; || &amp;quot;to&amp;quot;&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
use to identify relationship between 2 objectSchema&lt;br /&gt;
&lt;br /&gt;
== linkTypeId ==&lt;br /&gt;
create hash id from linkType&lt;br /&gt;
&lt;br /&gt;
== pathLinkType ==&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;JavaScript&amp;quot;&amp;gt;&lt;br /&gt;
{&lt;br /&gt;
  objType: {&lt;br /&gt;
    serviceTag: &amp;quot;xxx&amp;quot;,&lt;br /&gt;
    objectType: &amp;quot;yyy&amp;quot;&lt;br /&gt;
  },&lt;br /&gt;
  relType: {&lt;br /&gt;
    serviceTag: &amp;quot;xxxx&amp;quot;,&lt;br /&gt;
    relationshipTag: &amp;quot;yyyy&amp;quot;&lt;br /&gt;
  },&lt;br /&gt;
  relationshipDirection: &amp;quot;to&amp;quot; // &amp;quot;from&amp;quot; || &amp;quot;to&amp;quot;&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
* pathLinkType is used at each step of traversal/path&lt;br /&gt;
* when joined with the previous objType/baseObjType can be used to create linkType (and request linkConfig)&lt;br /&gt;
&lt;br /&gt;
== pathLinkTypeObject ==&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;JavaScript&amp;quot;&amp;gt;&lt;br /&gt;
{&lt;br /&gt;
  initialObjType: {},&lt;br /&gt;
  pathLinkTypes: [&lt;br /&gt;
    {&lt;br /&gt;
      objType: {&lt;br /&gt;
        serviceTag: &amp;quot;xxx&amp;quot;,&lt;br /&gt;
        objectType: &amp;quot;yyy&amp;quot;&lt;br /&gt;
      },&lt;br /&gt;
      relType: {&lt;br /&gt;
        serviceTag: &amp;quot;xxxx&amp;quot;,&lt;br /&gt;
        relationshipTag: &amp;quot;yyyy&amp;quot;&lt;br /&gt;
      },&lt;br /&gt;
      relationshipDirection: &amp;quot;to&amp;quot; // &amp;quot;from&amp;quot; || &amp;quot;to&amp;quot;&lt;br /&gt;
    }&lt;br /&gt;
  ],&lt;br /&gt;
  // ...&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
* creates a single path to final linkType from initial objType&lt;br /&gt;
&lt;br /&gt;
== flowType ==&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;JavaScript&amp;quot;&amp;gt;&lt;br /&gt;
{&lt;br /&gt;
	serviceTag: &amp;quot;xxx&amp;quot;,&lt;br /&gt;
	flowTag: &amp;quot;yyy&amp;quot;&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
use to identify which serviceTag that flow schema is located&lt;br /&gt;
&lt;br /&gt;
== identifiers ==&lt;br /&gt;
An object that has fieldName’s identifiers inside&lt;br /&gt;
=== example identifiers ===&lt;br /&gt;
* example identifiers inside objectSchema&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;JavaScript&amp;quot;&amp;gt;&lt;br /&gt;
identifiers:[&lt;br /&gt;
  {    &lt;br /&gt;
    type: &amp;quot;partitionKey&amp;quot;,&lt;br /&gt;
    fieldNames: [&amp;quot;xx&amp;quot;,&amp;quot;yy&amp;quot;],&lt;br /&gt;
    name: &amp;quot;zz&amp;quot;&lt;br /&gt;
  }&lt;br /&gt;
]&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
* example identifiers object&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;JavaScript&amp;quot;&amp;gt;&lt;br /&gt;
{    &lt;br /&gt;
  xx:&amp;quot;xx value&amp;quot;,&lt;br /&gt;
  yy:&amp;quot;yy value&amp;quot;&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The example above identifiers is the value of fieldNames that part of identifiers &lt;br /&gt;
&lt;br /&gt;
== identifiersBase ==&lt;br /&gt;
concatenated identifiers object &lt;br /&gt;
=== example identifiersBase ===&lt;br /&gt;
* example identifiers inside objectSchema&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;JavaScript&amp;quot;&amp;gt;&lt;br /&gt;
identifiers:[&lt;br /&gt;
  {    &lt;br /&gt;
    type: &amp;quot;partitionKey&amp;quot;,&lt;br /&gt;
    fieldNames: [&amp;quot;xx&amp;quot;,&amp;quot;yy&amp;quot;],&lt;br /&gt;
    name: &amp;quot;zz&amp;quot;&lt;br /&gt;
  }&lt;br /&gt;
]&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
* example identifiersBase object&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;JavaScript&amp;quot;&amp;gt;&lt;br /&gt;
{    &lt;br /&gt;
  zz:&amp;quot;xxValue_yyValue&amp;quot;,&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The example above identifiersBase is the value of each identifier of objectSchema &lt;br /&gt;
&lt;br /&gt;
== identifiersId ==&lt;br /&gt;
hash of identifiers object &lt;br /&gt;
&lt;br /&gt;
== identifiersConcat ==&lt;br /&gt;
string that concatenate all identifiers&lt;br /&gt;
* Note!: Will ordered concatenate value by objectSchema.identifiers array &lt;br /&gt;
&lt;br /&gt;
== objInstanceBase ==&lt;br /&gt;
result from dynamoDB that contains relevant and not relevant data of objectSchema &lt;br /&gt;
* identifiers from in objInstanceBase will concatenated or not concatenated depending on objectSchema&lt;br /&gt;
* izContext field not relevant with objectSchema but it contains inside objInstanceBase&lt;br /&gt;
&lt;br /&gt;
== objInstance ==&lt;br /&gt;
similar objInstanceBase but split concatenateIdentifier to each fieldName&lt;br /&gt;
&lt;br /&gt;
== objInstanceFull ==&lt;br /&gt;
object that separated fields and identifiers and identifiers cannot concatenated&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;JavaScript&amp;quot;&amp;gt;&lt;br /&gt;
{    &lt;br /&gt;
  identifiers:{&lt;br /&gt;
    //... identifiers fieldName of objectSchema&lt;br /&gt;
  }, &lt;br /&gt;
  fields:{&lt;br /&gt;
    //.. data of objectSchema&lt;br /&gt;
  }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
* identifiers: contains identifiers data&lt;br /&gt;
* fields: another data except  &lt;br /&gt;
&lt;br /&gt;
== example data  ==&lt;br /&gt;
=== example objectSchema ===&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;JavaScript&amp;quot;&amp;gt;&lt;br /&gt;
// example objectSchema&lt;br /&gt;
{    &lt;br /&gt;
  fieldNames:{&lt;br /&gt;
    id:{&lt;br /&gt;
      type:”string”,&lt;br /&gt;
      // … another fieldName settings&lt;br /&gt;
    },&lt;br /&gt;
    createTime: {},     //  filedName settings&lt;br /&gt;
    location: {},       //  filedName settings&lt;br /&gt;
    value: {},          //  filedName settings&lt;br /&gt;
  },&lt;br /&gt;
  identifiers:[&lt;br /&gt;
    {&lt;br /&gt;
      type: &amp;quot;partitionKey&amp;quot;,&lt;br /&gt;
      fieldNames: [&amp;quot;id&amp;quot;,&amp;quot;createTime&amp;quot;],   // composite partition keys in DynamoDB&lt;br /&gt;
      deliminator: &amp;quot;_&amp;quot;,                  // optional, defaults to &amp;quot;_&amp;quot;&lt;br /&gt;
      name: &amp;quot;createId&amp;quot;                   // name of field in database&lt;br /&gt;
    },&lt;br /&gt;
    {&lt;br /&gt;
      type: &amp;quot;sortKey&amp;quot;,&lt;br /&gt;
      fieldName: “location”&lt;br /&gt;
    }&lt;br /&gt;
  ]&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== objInstanceBase ===&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;JavaScript&amp;quot;&amp;gt;&lt;br /&gt;
// example objInstanceBase data&lt;br /&gt;
{&lt;br /&gt;
  createId:&amp;quot;id_createTime&amp;quot;,&lt;br /&gt;
  location:&amp;quot;cnx&amp;quot;,&lt;br /&gt;
  value:199,&lt;br /&gt;
  errorsFound:[],&lt;br /&gt;
  izContext:{&lt;br /&gt;
  // ...izContext&lt;br /&gt;
  },&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
Normally objInstanceBase is the result from dynamoDB and it will include data that is not relevant to objectSchema. In example above errorsFound and izContext not contain in objectSchema.&lt;br /&gt;
&lt;br /&gt;
=== objInstance ===&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;JavaScript&amp;quot;&amp;gt;&lt;br /&gt;
// example objInstance data&lt;br /&gt;
{&lt;br /&gt;
  id:&amp;quot;id&amp;quot;,&lt;br /&gt;
  createTime:&amp;quot;createTime&amp;quot;&lt;br /&gt;
  location:&amp;quot;cnx&amp;quot;,&lt;br /&gt;
  value:199,&lt;br /&gt;
  errorsFound:[],&lt;br /&gt;
  izContext:{&lt;br /&gt;
  // ...izContext&lt;br /&gt;
  },&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
objInstance is object that already refactored identifiers but another fields same as objInstanceBase &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== objInstanceFull ===&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;JavaScript&amp;quot;&amp;gt;&lt;br /&gt;
// example objInstanceFull data&lt;br /&gt;
{    &lt;br /&gt;
  identifiers:{&lt;br /&gt;
    id:&amp;quot;id&amp;quot;,&lt;br /&gt;
    createTime:&amp;quot;createTime&amp;quot;&lt;br /&gt;
    location:&amp;quot;cnx&amp;quot;,&lt;br /&gt;
  }, &lt;br /&gt;
  fields:{&lt;br /&gt;
    value:199,&lt;br /&gt;
  }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== identifiersBase ===&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;JavaScript&amp;quot;&amp;gt;&lt;br /&gt;
// example identifiersBase data&lt;br /&gt;
{&lt;br /&gt;
  createId:&amp;quot;id_createTime&amp;quot;,&lt;br /&gt;
  location:&amp;quot;cnx&amp;quot;&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== identifiers ===&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;JavaScript&amp;quot;&amp;gt;&lt;br /&gt;
// example identifiers data&lt;br /&gt;
{&lt;br /&gt;
  id: &amp;quot;id&amp;quot;,&lt;br /&gt;
  createTime: &amp;quot;createTime&amp;quot;,&lt;br /&gt;
  location: &amp;quot;cnx&amp;quot;&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Category:Working documents| 2025-01-23]]&lt;br /&gt;
[[Category:Working documents - Per Service Schemas| 2025-01-23]]&lt;/div&gt;</summary>
		<author><name>Rut</name></author>
	</entry>
	<entry>
		<id>https://izara.io/wiki/index.php?title=2025-01-23_-_Standard_Object_and_Relationship_Data_Structures&amp;diff=3645</id>
		<title>2025-01-23 - Standard Object and Relationship Data Structures</title>
		<link rel="alternate" type="text/html" href="https://izara.io/wiki/index.php?title=2025-01-23_-_Standard_Object_and_Relationship_Data_Structures&amp;diff=3645"/>
		<updated>2025-11-21T03:36:00Z</updated>

		<summary type="html">&lt;p&gt;Rut: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= Overview =&lt;br /&gt;
Standard structure and definition of object. &lt;br /&gt;
&lt;br /&gt;
= Definition =&lt;br /&gt;
&lt;br /&gt;
== objType ==&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;JavaScript&amp;quot;&amp;gt;&lt;br /&gt;
{&lt;br /&gt;
	serviceTag: &amp;quot;xxx&amp;quot;,&lt;br /&gt;
	objectType: &amp;quot;yyy&amp;quot;&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
use to identify which serviceTag that object schema located&lt;br /&gt;
* serviceTag: service tag that stored object schema&lt;br /&gt;
* objectType: name of object schema&lt;br /&gt;
&lt;br /&gt;
== objTypeConcat ==&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;JavaScript&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;serviceTag&amp;gt;_&amp;lt;objectType&amp;gt;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
* objTypeConcat: &amp;quot;serviceTag&amp;quot; + &amp;quot;_&amp;quot; + &amp;quot;objectType&amp;quot;&lt;br /&gt;
* now use as the name of node label in graph database&lt;br /&gt;
&lt;br /&gt;
== objTypeId ==&lt;br /&gt;
* hash of objType object&lt;br /&gt;
&lt;br /&gt;
== relType ==&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;JavaScript&amp;quot;&amp;gt;&lt;br /&gt;
{&lt;br /&gt;
	serviceTag: &amp;quot;xxx&amp;quot;,&lt;br /&gt;
	relationshipTag: &amp;quot;yyy&amp;quot;&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
use to identify which serviceTag that relationship schema  located&lt;br /&gt;
* serviceTag: service tag that stored object schema&lt;br /&gt;
* relationshipTag: name of relationship schema&lt;br /&gt;
&lt;br /&gt;
== relTypeConcat ==&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;JavaScript&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;serviceTag&amp;gt;_&amp;lt;relationshipTag&amp;gt;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
* relTypeConcat: &amp;quot;serviceTag&amp;quot; + &amp;quot;_&amp;quot; + &amp;quot;relationshipTag&amp;quot;&lt;br /&gt;
* now use as the name of relationshipType in graph database&lt;br /&gt;
&lt;br /&gt;
== relTypeId ==&lt;br /&gt;
* hash of relType object&lt;br /&gt;
&lt;br /&gt;
== relTypeAndDirection ==&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;JavaScript&amp;quot;&amp;gt;&lt;br /&gt;
{&lt;br /&gt;
	relType: {&lt;br /&gt;
		serviceTag: &amp;quot;xxx&amp;quot;,&lt;br /&gt;
		relationshipTag: &amp;quot;yyy&amp;quot;&lt;br /&gt;
	},&lt;br /&gt;
	relationshipDirection: &amp;quot;to&amp;quot;, // &amp;quot;from&amp;quot; || &amp;quot;to&amp;quot;&lt;br /&gt;
    relationshipProperties: {}&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== linkType ==&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;JavaScript&amp;quot;&amp;gt;&lt;br /&gt;
{&lt;br /&gt;
  firstObjType: {&lt;br /&gt;
    serviceTag: &amp;quot;xx&amp;quot;,&lt;br /&gt;
    objectType: &amp;quot;yy&amp;quot;,&lt;br /&gt;
  },&lt;br /&gt;
  secondObjType: {&lt;br /&gt;
    serviceTag: &amp;quot;xxx&amp;quot;,&lt;br /&gt;
    objectType: &amp;quot;yyy&amp;quot;&lt;br /&gt;
  },&lt;br /&gt;
&lt;br /&gt;
  relType: {&lt;br /&gt;
    serviceTag: &amp;quot;xxxx&amp;quot;,&lt;br /&gt;
    relationshipTag: &amp;quot;yyyy&amp;quot;&lt;br /&gt;
  },&lt;br /&gt;
  relationshipDirection: &amp;quot;to&amp;quot; // &amp;quot;from&amp;quot; || &amp;quot;to&amp;quot;&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
use to identify relationship between 2 objectSchema&lt;br /&gt;
&lt;br /&gt;
== linkTypeId ==&lt;br /&gt;
create hash id from linkType&lt;br /&gt;
&lt;br /&gt;
== pathLinkType ==&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;JavaScript&amp;quot;&amp;gt;&lt;br /&gt;
{&lt;br /&gt;
  objType: {&lt;br /&gt;
    serviceTag: &amp;quot;xxx&amp;quot;,&lt;br /&gt;
    objectType: &amp;quot;yyy&amp;quot;&lt;br /&gt;
  },&lt;br /&gt;
  relType: {&lt;br /&gt;
    serviceTag: &amp;quot;xxxx&amp;quot;,&lt;br /&gt;
    relationshipTag: &amp;quot;yyyy&amp;quot;&lt;br /&gt;
  },&lt;br /&gt;
  relationshipDirection: &amp;quot;to&amp;quot; // &amp;quot;from&amp;quot; || &amp;quot;to&amp;quot;&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
* pathLinkType is used at each step of traversal/path&lt;br /&gt;
* when joined with the previous objType/baseObjType can be used to create linkType (and request linkConfig)&lt;br /&gt;
&lt;br /&gt;
== pathLinkTypeObject ==&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;JavaScript&amp;quot;&amp;gt;&lt;br /&gt;
{&lt;br /&gt;
  initialObjType: {},&lt;br /&gt;
  pathLinkType:{&lt;br /&gt;
    objType: {&lt;br /&gt;
      serviceTag: &amp;quot;xxx&amp;quot;,&lt;br /&gt;
      objectType: &amp;quot;yyy&amp;quot;&lt;br /&gt;
    },&lt;br /&gt;
    relType: {&lt;br /&gt;
      serviceTag: &amp;quot;xxxx&amp;quot;,&lt;br /&gt;
      relationshipTag: &amp;quot;yyyy&amp;quot;&lt;br /&gt;
    },&lt;br /&gt;
    relationshipDirection: &amp;quot;to&amp;quot; // &amp;quot;from&amp;quot; || &amp;quot;to&amp;quot;&lt;br /&gt;
  }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
* pathLinkType is used at each step of traversal/path&lt;br /&gt;
* when joined with the previous objType/baseObjType can be used to create linkType (and request linkConfig)&lt;br /&gt;
&lt;br /&gt;
== flowType ==&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;JavaScript&amp;quot;&amp;gt;&lt;br /&gt;
{&lt;br /&gt;
	serviceTag: &amp;quot;xxx&amp;quot;,&lt;br /&gt;
	flowTag: &amp;quot;yyy&amp;quot;&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
use to identify which serviceTag that flow schema is located&lt;br /&gt;
&lt;br /&gt;
== identifiers ==&lt;br /&gt;
An object that has fieldName’s identifiers inside&lt;br /&gt;
=== example identifiers ===&lt;br /&gt;
* example identifiers inside objectSchema&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;JavaScript&amp;quot;&amp;gt;&lt;br /&gt;
identifiers:[&lt;br /&gt;
  {    &lt;br /&gt;
    type: &amp;quot;partitionKey&amp;quot;,&lt;br /&gt;
    fieldNames: [&amp;quot;xx&amp;quot;,&amp;quot;yy&amp;quot;],&lt;br /&gt;
    name: &amp;quot;zz&amp;quot;&lt;br /&gt;
  }&lt;br /&gt;
]&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
* example identifiers object&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;JavaScript&amp;quot;&amp;gt;&lt;br /&gt;
{    &lt;br /&gt;
  xx:&amp;quot;xx value&amp;quot;,&lt;br /&gt;
  yy:&amp;quot;yy value&amp;quot;&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The example above identifiers is the value of fieldNames that part of identifiers &lt;br /&gt;
&lt;br /&gt;
== identifiersBase ==&lt;br /&gt;
concatenated identifiers object &lt;br /&gt;
=== example identifiersBase ===&lt;br /&gt;
* example identifiers inside objectSchema&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;JavaScript&amp;quot;&amp;gt;&lt;br /&gt;
identifiers:[&lt;br /&gt;
  {    &lt;br /&gt;
    type: &amp;quot;partitionKey&amp;quot;,&lt;br /&gt;
    fieldNames: [&amp;quot;xx&amp;quot;,&amp;quot;yy&amp;quot;],&lt;br /&gt;
    name: &amp;quot;zz&amp;quot;&lt;br /&gt;
  }&lt;br /&gt;
]&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
* example identifiersBase object&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;JavaScript&amp;quot;&amp;gt;&lt;br /&gt;
{    &lt;br /&gt;
  zz:&amp;quot;xxValue_yyValue&amp;quot;,&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The example above identifiersBase is the value of each identifier of objectSchema &lt;br /&gt;
&lt;br /&gt;
== identifiersId ==&lt;br /&gt;
hash of identifiers object &lt;br /&gt;
&lt;br /&gt;
== identifiersConcat ==&lt;br /&gt;
string that concatenate all identifiers&lt;br /&gt;
* Note!: Will ordered concatenate value by objectSchema.identifiers array &lt;br /&gt;
&lt;br /&gt;
== objInstanceBase ==&lt;br /&gt;
result from dynamoDB that contains relevant and not relevant data of objectSchema &lt;br /&gt;
* identifiers from in objInstanceBase will concatenated or not concatenated depending on objectSchema&lt;br /&gt;
* izContext field not relevant with objectSchema but it contains inside objInstanceBase&lt;br /&gt;
&lt;br /&gt;
== objInstance ==&lt;br /&gt;
similar objInstanceBase but split concatenateIdentifier to each fieldName&lt;br /&gt;
&lt;br /&gt;
== objInstanceFull ==&lt;br /&gt;
object that separated fields and identifiers and identifiers cannot concatenated&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;JavaScript&amp;quot;&amp;gt;&lt;br /&gt;
{    &lt;br /&gt;
  identifiers:{&lt;br /&gt;
    //... identifiers fieldName of objectSchema&lt;br /&gt;
  }, &lt;br /&gt;
  fields:{&lt;br /&gt;
    //.. data of objectSchema&lt;br /&gt;
  }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
* identifiers: contains identifiers data&lt;br /&gt;
* fields: another data except  &lt;br /&gt;
&lt;br /&gt;
== example data  ==&lt;br /&gt;
=== example objectSchema ===&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;JavaScript&amp;quot;&amp;gt;&lt;br /&gt;
// example objectSchema&lt;br /&gt;
{    &lt;br /&gt;
  fieldNames:{&lt;br /&gt;
    id:{&lt;br /&gt;
      type:”string”,&lt;br /&gt;
      // … another fieldName settings&lt;br /&gt;
    },&lt;br /&gt;
    createTime: {},     //  filedName settings&lt;br /&gt;
    location: {},       //  filedName settings&lt;br /&gt;
    value: {},          //  filedName settings&lt;br /&gt;
  },&lt;br /&gt;
  identifiers:[&lt;br /&gt;
    {&lt;br /&gt;
      type: &amp;quot;partitionKey&amp;quot;,&lt;br /&gt;
      fieldNames: [&amp;quot;id&amp;quot;,&amp;quot;createTime&amp;quot;],   // composite partition keys in DynamoDB&lt;br /&gt;
      deliminator: &amp;quot;_&amp;quot;,                  // optional, defaults to &amp;quot;_&amp;quot;&lt;br /&gt;
      name: &amp;quot;createId&amp;quot;                   // name of field in database&lt;br /&gt;
    },&lt;br /&gt;
    {&lt;br /&gt;
      type: &amp;quot;sortKey&amp;quot;,&lt;br /&gt;
      fieldName: “location”&lt;br /&gt;
    }&lt;br /&gt;
  ]&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== objInstanceBase ===&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;JavaScript&amp;quot;&amp;gt;&lt;br /&gt;
// example objInstanceBase data&lt;br /&gt;
{&lt;br /&gt;
  createId:&amp;quot;id_createTime&amp;quot;,&lt;br /&gt;
  location:&amp;quot;cnx&amp;quot;,&lt;br /&gt;
  value:199,&lt;br /&gt;
  errorsFound:[],&lt;br /&gt;
  izContext:{&lt;br /&gt;
  // ...izContext&lt;br /&gt;
  },&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
Normally objInstanceBase is the result from dynamoDB and it will include data that is not relevant to objectSchema. In example above errorsFound and izContext not contain in objectSchema.&lt;br /&gt;
&lt;br /&gt;
=== objInstance ===&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;JavaScript&amp;quot;&amp;gt;&lt;br /&gt;
// example objInstance data&lt;br /&gt;
{&lt;br /&gt;
  id:&amp;quot;id&amp;quot;,&lt;br /&gt;
  createTime:&amp;quot;createTime&amp;quot;&lt;br /&gt;
  location:&amp;quot;cnx&amp;quot;,&lt;br /&gt;
  value:199,&lt;br /&gt;
  errorsFound:[],&lt;br /&gt;
  izContext:{&lt;br /&gt;
  // ...izContext&lt;br /&gt;
  },&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
objInstance is object that already refactored identifiers but another fields same as objInstanceBase &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== objInstanceFull ===&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;JavaScript&amp;quot;&amp;gt;&lt;br /&gt;
// example objInstanceFull data&lt;br /&gt;
{    &lt;br /&gt;
  identifiers:{&lt;br /&gt;
    id:&amp;quot;id&amp;quot;,&lt;br /&gt;
    createTime:&amp;quot;createTime&amp;quot;&lt;br /&gt;
    location:&amp;quot;cnx&amp;quot;,&lt;br /&gt;
  }, &lt;br /&gt;
  fields:{&lt;br /&gt;
    value:199,&lt;br /&gt;
  }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== identifiersBase ===&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;JavaScript&amp;quot;&amp;gt;&lt;br /&gt;
// example identifiersBase data&lt;br /&gt;
{&lt;br /&gt;
  createId:&amp;quot;id_createTime&amp;quot;,&lt;br /&gt;
  location:&amp;quot;cnx&amp;quot;&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== identifiers ===&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;JavaScript&amp;quot;&amp;gt;&lt;br /&gt;
// example identifiers data&lt;br /&gt;
{&lt;br /&gt;
  id: &amp;quot;id&amp;quot;,&lt;br /&gt;
  createTime: &amp;quot;createTime&amp;quot;,&lt;br /&gt;
  location: &amp;quot;cnx&amp;quot;&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Category:Working documents| 2025-01-23]]&lt;br /&gt;
[[Category:Working documents - Per Service Schemas| 2025-01-23]]&lt;/div&gt;</summary>
		<author><name>Rut</name></author>
	</entry>
	<entry>
		<id>https://izara.io/wiki/index.php?title=2025-04-14_-_Frontend_LinkPath_structure_for_tableOutput&amp;diff=3614</id>
		<title>2025-04-14 - Frontend LinkPath structure for tableOutput</title>
		<link rel="alternate" type="text/html" href="https://izara.io/wiki/index.php?title=2025-04-14_-_Frontend_LinkPath_structure_for_tableOutput&amp;diff=3614"/>
		<updated>2025-11-13T06:37:18Z</updated>

		<summary type="html">&lt;p&gt;Rut: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Service - Search Results]]&lt;br /&gt;
&lt;br /&gt;
= Overview =&lt;br /&gt;
&lt;br /&gt;
Structure frontend TableConfig and Output prepare for shared library that creates complexFilter and requestProperties&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Service - Search Results]]&lt;br /&gt;
&lt;br /&gt;
= Overview =&lt;br /&gt;
&lt;br /&gt;
Structure frontend TableConfig and Output prepare for shared library that creates complexFilter and requestProperties&lt;br /&gt;
&lt;br /&gt;
= Example params in tableConfig =&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;JavaScript&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
let paramFromTableOutput = {&lt;br /&gt;
&lt;br /&gt;
	// .. other properties same as sent to backend&lt;br /&gt;
	// requiredDataFields not needed in tableConfig as referenced in elements and sortFields&lt;br /&gt;
&lt;br /&gt;
	elements: {&lt;br /&gt;
        // add example of pageOutput element that references requiredDataLinkStepObjects&lt;br /&gt;
    },&lt;br /&gt;
	values: {&lt;br /&gt;
		// values are shared between requestProperties and filter values. This set can be iterated to overwrite values using userTag to identify&lt;br /&gt;
		userTag_1:{&lt;br /&gt;
			defaultValue: &amp;quot;xx&amp;quot;,&lt;br /&gt;
		},&lt;br /&gt;
		userTag_2:{&lt;br /&gt;
			defaultValue: &amp;quot;xx&amp;quot;,&lt;br /&gt;
		},&lt;br /&gt;
		userTag_3:{&lt;br /&gt;
			defaultValue: &amp;quot;xx&amp;quot;,&lt;br /&gt;
		},&lt;br /&gt;
		userTag_4:{&lt;br /&gt;
			defaultValue: &amp;quot;xx&amp;quot;,&lt;br /&gt;
		},&lt;br /&gt;
		userTag_5:{&lt;br /&gt;
			defaultValue: &amp;quot;xx&amp;quot;,&lt;br /&gt;
		},&lt;br /&gt;
		userTag_6:{&lt;br /&gt;
			valueSource: &amp;quot;complexFilterCombination&amp;quot;,&lt;br /&gt;
            complexFilterCombinationId: &amp;quot;hash_complexFilterCombinationA&amp;quot;,&lt;br /&gt;
		},&lt;br /&gt;
		userTag_7:{&lt;br /&gt;
			valueSource: &amp;quot;perParentCombination&amp;quot;,&lt;br /&gt;
            perParentCombinationId: &amp;quot;hash_perParentCombinationA&amp;quot;,&lt;br /&gt;
		},&lt;br /&gt;
        userTag_8: {&lt;br /&gt;
            valueSource: 'perParentIdentifier',&lt;br /&gt;
            perParentIdentifierFieldname: 'sellOfferId'&lt;br /&gt;
        },,&lt;br /&gt;
		userTag_9:{&lt;br /&gt;
			defaultValue: &amp;quot;xx&amp;quot;,&lt;br /&gt;
		},&lt;br /&gt;
		userTag_10:{&lt;br /&gt;
			defaultValue: &amp;quot;xx&amp;quot;,&lt;br /&gt;
		},&lt;br /&gt;
		userTag_11:{&lt;br /&gt;
			defaultValue: &amp;quot;xx&amp;quot;,&lt;br /&gt;
		},&lt;br /&gt;
	}&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= Example params sent to backend =&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;JavaScript&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
let paramFromTableOutput = {&lt;br /&gt;
	objType: { //* main objType&lt;br /&gt;
		serviceTag: &amp;quot;ProductManager&amp;quot;,&lt;br /&gt;
		objectType: &amp;quot;Product&amp;quot;&lt;br /&gt;
	},&lt;br /&gt;
    initialLogicalElementId: &amp;quot;uuid_logical_1&amp;quot;,&lt;br /&gt;
    logicalElements: {&lt;br /&gt;
       uuid_logical_1: {&lt;br /&gt;
         logicalElementType: &amp;quot;logical&amp;quot;,&lt;br /&gt;
         previousLogicalElementId: null,&lt;br /&gt;
         nextLogicalElementId: null,&lt;br /&gt;
&lt;br /&gt;
         objType: {&lt;br /&gt;
           serviceTag: &amp;quot;ProductManager&amp;quot;,&lt;br /&gt;
           objectType: &amp;quot;product&amp;quot;&lt;br /&gt;
         },&lt;br /&gt;
         fieldName: &amp;quot;productId&amp;quot;,&lt;br /&gt;
         comparison: &amp;quot;equals&amp;quot;,&lt;br /&gt;
         value: &amp;quot;userTag_1&amp;quot;&lt;br /&gt;
       }&lt;br /&gt;
    },&lt;br /&gt;
	requiredDataFields: [ //* linkStepObjects to create main sort result's requiredData and sortFields&lt;br /&gt;
        // not needed at tableConfig level because can be built from table's elements and sortFields before sending to lib that converts to backend structure&lt;br /&gt;
        &amp;quot;userTag_LinkStepObjectA&amp;quot;, // no link, field in main objType (structure same linkPath but only one step)&lt;br /&gt;
        &amp;quot;userTag_LinkStepObjectB&amp;quot;, // has link&lt;br /&gt;
	],&lt;br /&gt;
	complexFilterCombinations:{&lt;br /&gt;
		hash_complexFilterCombinationA: {&lt;br /&gt;
          objType: {&lt;br /&gt;
            serviceTag: &amp;quot;Locations&amp;quot;,&lt;br /&gt;
            objectType: &amp;quot;locationNode&amp;quot;&lt;br /&gt;
          },&lt;br /&gt;
          initialLogicalElementId: &amp;quot;child_complexFilter_localtionNode&amp;quot;,&lt;br /&gt;
          logicalElements: {&lt;br /&gt;
            child_complexFilter_localtionNode: {&lt;br /&gt;
              logicalElementType: &amp;quot;childComplexFilter&amp;quot;,&lt;br /&gt;
              previousLogicalElementId: null,&lt;br /&gt;
              nextLogicalElementId: null,&lt;br /&gt;
&lt;br /&gt;
              childLogicalElementId: &amp;quot;logical_locationNode&amp;quot;,&lt;br /&gt;
              objType: {&lt;br /&gt;
                serviceTag: &amp;quot;Locations&amp;quot;,&lt;br /&gt;
                objectType: &amp;quot;locationNode&amp;quot;&lt;br /&gt;
              },&lt;br /&gt;
              pathLinkType: {&lt;br /&gt;
                objType: {&lt;br /&gt;
                  serviceTag: &amp;quot;Locations&amp;quot;,&lt;br /&gt;
                  objectType: &amp;quot;locationNode&amp;quot;&lt;br /&gt;
                },&lt;br /&gt;
                relType: {&lt;br /&gt;
                  serviceTag: &amp;quot;Locations&amp;quot;,&lt;br /&gt;
                  relationshipTag: &amp;quot;hasParentLocationNode&amp;quot;&lt;br /&gt;
                },&lt;br /&gt;
                direction: &amp;quot;to&amp;quot;&lt;br /&gt;
              },&lt;br /&gt;
            },&lt;br /&gt;
            logical_locationNode: {&lt;br /&gt;
               logicalElementType: &amp;quot;logical&amp;quot;,&lt;br /&gt;
               previousLogicalElementId: &amp;quot;child_complexFilter_localtionNode&amp;quot;,&lt;br /&gt;
               nextLogicalElementId: null,&lt;br /&gt;
&lt;br /&gt;
               objType: {&lt;br /&gt;
                serviceTag: &amp;quot;Locations&amp;quot;,&lt;br /&gt;
                objectType: &amp;quot;locationNode&amp;quot;&lt;br /&gt;
               },&lt;br /&gt;
               fieldName: &amp;quot;locationNodeId&amp;quot;,&lt;br /&gt;
               comparison: &amp;quot;equals&amp;quot;,&lt;br /&gt;
               value: &amp;quot;userTag_7&amp;quot;&lt;br /&gt;
            }&lt;br /&gt;
         }&lt;br /&gt;
       },&lt;br /&gt;
	},&lt;br /&gt;
	perParentCombinations:{&lt;br /&gt;
		hash_perParentCombinationA: {&lt;br /&gt;
          objType: {&lt;br /&gt;
            serviceTag: &amp;quot;SellOfferPlan&amp;quot;,&lt;br /&gt;
            objectType: &amp;quot;sellOfferPlan&amp;quot;&lt;br /&gt;
          },&lt;br /&gt;
          initialLogicalElementId: &amp;quot;child_complexFilter_1&amp;quot;,&lt;br /&gt;
          logicalElements: {&lt;br /&gt;
            child_complexFilter_1: {&lt;br /&gt;
              logicalElementType: &amp;quot;childComplexFilter&amp;quot;,&lt;br /&gt;
              previousLogicalElementId: null,&lt;br /&gt;
              nextLogicalElementId: null,&lt;br /&gt;
&lt;br /&gt;
              childLogicalElementId: &amp;quot;logical_sellOffer&amp;quot;,&lt;br /&gt;
              objType: {&lt;br /&gt;
                serviceTag: &amp;quot;SellOfferPlan&amp;quot;,&lt;br /&gt;
                objectType: &amp;quot;sellOfferPlan&amp;quot;&lt;br /&gt;
              },&lt;br /&gt;
              pathLinkType: {&lt;br /&gt;
                objType: {&lt;br /&gt;
                  serviceTag: &amp;quot;SellOfferManager&amp;quot;,&lt;br /&gt;
                  objectType: &amp;quot;sellOffer&amp;quot;&lt;br /&gt;
                }, &lt;br /&gt;
                relType: {&lt;br /&gt;
                  serviceTag: &amp;quot;SellOfferManager&amp;quot;,&lt;br /&gt;
                  relationshipTag: &amp;quot;usesSellOfferPlan&amp;quot;&lt;br /&gt;
                },&lt;br /&gt;
                direction: &amp;quot;to&amp;quot;&lt;br /&gt;
              },&lt;br /&gt;
              requestProperties: {&lt;br /&gt;
                tag_orderQuantity: &amp;quot;userTag_9&amp;quot;&lt;br /&gt;
              }&lt;br /&gt;
           },&lt;br /&gt;
           logical_sellOffer: {&lt;br /&gt;
              logicalElementType: &amp;quot;logical&amp;quot;,&lt;br /&gt;
              previousLogicalElementId: &amp;quot;child_complexFilter_1&amp;quot;,&lt;br /&gt;
              nextLogicalElementId: null,&lt;br /&gt;
&lt;br /&gt;
              objType: {&lt;br /&gt;
                serviceTag: &amp;quot;SellOfferManager&amp;quot;,&lt;br /&gt;
                objectType: &amp;quot;sellOffer&amp;quot;&lt;br /&gt;
              },&lt;br /&gt;
              fieldName: &amp;quot;sellOfferId&amp;quot;,&lt;br /&gt;
              comparison: &amp;quot;equals&amp;quot;,&lt;br /&gt;
              value: &amp;quot;userTag_8&amp;quot;&lt;br /&gt;
           }&lt;br /&gt;
        }&lt;br /&gt;
      },&lt;br /&gt;
	},&lt;br /&gt;
	requiredDataLinkStepObjects: {&lt;br /&gt;
		userTag_LinkStepObjectA: { //* requiredData no linkPath&lt;br /&gt;
			initialObjType: { //* main objType&lt;br /&gt;
				serviceTag: &amp;quot;ProductManager&amp;quot;,&lt;br /&gt;
				objectType: &amp;quot;Product&amp;quot;&lt;br /&gt;
			},&lt;br /&gt;
			linkSteps: [&amp;quot;hash_linkStepA_1&amp;quot;],&lt;br /&gt;
		},&lt;br /&gt;
        userTag_LinkStepObjectB: { // requiredDataFields for finding max orderTotal&lt;br /&gt;
            initialObjType: { //* main objType&lt;br /&gt;
				serviceTag: &amp;quot;ProductManager&amp;quot;,&lt;br /&gt;
				objectType: &amp;quot;Product&amp;quot;&lt;br /&gt;
			},&lt;br /&gt;
			linkSteps: [&amp;quot;hash_linkStepB_1&amp;quot;, &amp;quot;hash_linkStepB_2&amp;quot;, &amp;quot;hash_linkStepB_3&amp;quot;],&lt;br /&gt;
        }&lt;br /&gt;
        // userTag_LinkStepObjectC&lt;br /&gt;
        // userTag_LinkStepObjectD&lt;br /&gt;
	},&lt;br /&gt;
	requiredDataLinkSteps: {&lt;br /&gt;
		hash_linkStepA_1:{&lt;br /&gt;
          fieldName: &amp;quot;xxx&amp;quot; &lt;br /&gt;
        },&lt;br /&gt;
        hash_linkStepB_1:{&lt;br /&gt;
          pathLinkType: {&lt;br /&gt;
             objType: {&lt;br /&gt;
               serviceTag: &amp;quot;SellOfferManager&amp;quot;,&lt;br /&gt;
               objectType: &amp;quot;SellOffer&amp;quot;&lt;br /&gt;
             },&lt;br /&gt;
             relType: {&lt;br /&gt;
               serviceTag: &amp;quot;ProductManager&amp;quot;,&lt;br /&gt;
               relationshipTag: &amp;quot;hasSellOffer&amp;quot;&lt;br /&gt;
             },&lt;br /&gt;
             direction: &amp;quot;to&amp;quot;,&lt;br /&gt;
          },&lt;br /&gt;
           filterElements: { //* filter in linkPath&lt;br /&gt;
             objType: {&lt;br /&gt;
               serviceTag: &amp;quot;SellOfferManager&amp;quot;,&lt;br /&gt;
               objectType: &amp;quot;SellOffer&amp;quot;&lt;br /&gt;
             },&lt;br /&gt;
             initialLogicalElementId: &amp;quot;logical_sellOffer_in_link&amp;quot;,&lt;br /&gt;
             logicalElements: {&lt;br /&gt;
               logical_sellOffer_in_link: {&lt;br /&gt;
                  logicalElementType: &amp;quot;logical&amp;quot;,&lt;br /&gt;
                  previousLogicalElementId: null,&lt;br /&gt;
                  nextLogicalElementId: null,&lt;br /&gt;
&lt;br /&gt;
                  objType: {&lt;br /&gt;
                    serviceTag: &amp;quot;SellOfferManager&amp;quot;,&lt;br /&gt;
                    objectType: &amp;quot;SellOffer&amp;quot;&lt;br /&gt;
                  },&lt;br /&gt;
                  fieldName: &amp;quot;userId&amp;quot;,&lt;br /&gt;
                  comparison: &amp;quot;equals&amp;quot;,&lt;br /&gt;
                  value: &amp;quot;userTag_2&amp;quot;&lt;br /&gt;
               }&lt;br /&gt;
            }&lt;br /&gt;
          },&lt;br /&gt;
&lt;br /&gt;
        }, &lt;br /&gt;
        hash_linkStepB_2: {&lt;br /&gt;
           pathLinkType: {&lt;br /&gt;
             objType: {&lt;br /&gt;
               serviceTag: &amp;quot;OrderPrice&amp;quot;,&lt;br /&gt;
               objectType: &amp;quot;OrderPrice&amp;quot;&lt;br /&gt;
             },&lt;br /&gt;
             relType: {&lt;br /&gt;
               serviceTag: &amp;quot;sellOfferStandard&amp;quot;,&lt;br /&gt;
               relationshipTag: &amp;quot;hasOrderPrice&amp;quot;&lt;br /&gt;
             },&lt;br /&gt;
             direction: &amp;quot;to&amp;quot;,&lt;br /&gt;
           },&lt;br /&gt;
          requestProperties: {&lt;br /&gt;
            tag_deliverTo: &amp;quot;userTag_3&amp;quot;,&lt;br /&gt;
            tag_sellOfferPlan: &amp;quot;userTag_4&amp;quot;,&lt;br /&gt;
            // tag_sellOfferPlanDeliveryMethodLink: &amp;quot;userTag_5&amp;quot;,&lt;br /&gt;
            // tag_sellOfferPlanUserPaymentMethodLink: &amp;quot;userTag_6&amp;quot;&lt;br /&gt;
          }&lt;br /&gt;
          aggregate: &amp;quot;max&amp;quot;,&lt;br /&gt;
          sortFields: [&lt;br /&gt;
       			{&lt;br /&gt;
            		requiredDataLinkStepObjectId: &amp;quot;userTag_LinkStepObjectC&amp;quot;,&lt;br /&gt;
		            dataType: &amp;quot;number&amp;quot;&lt;br /&gt;
        		},&lt;br /&gt;
				{&lt;br /&gt;
        		     requiredDataLinkStepObjectId: &amp;quot;userTag_LinkStepObjectD&amp;quot;,&lt;br /&gt;
		             dataType: &amp;quot;string&amp;quot;&lt;br /&gt;
		         }&lt;br /&gt;
            ],&lt;br /&gt;
        }, &lt;br /&gt;
        hash_linkStepB_3: {&lt;br /&gt;
           fieldName: &amp;quot;zzz&amp;quot;,&lt;br /&gt;
        }&lt;br /&gt;
	},&lt;br /&gt;
	sortFields: [&lt;br /&gt;
        {&lt;br /&gt;
             requiredDataLinkStepObjectId: &amp;quot;userTag_LinkStepObjectB&amp;quot;,&lt;br /&gt;
             dataType: &amp;quot;number&amp;quot;&lt;br /&gt;
        },&lt;br /&gt;
		{&lt;br /&gt;
             requiredDataLinkStepObjectId: &amp;quot;userTag_LinkStepObjectA&amp;quot;,&lt;br /&gt;
             dataType: &amp;quot;string&amp;quot;&lt;br /&gt;
         }&lt;br /&gt;
    ],&lt;br /&gt;
	values: {&lt;br /&gt;
		userTag_1:{&lt;br /&gt;
			value: &amp;quot;xx&amp;quot;,&lt;br /&gt;
		},&lt;br /&gt;
		userTag_2:{&lt;br /&gt;
			value: &amp;quot;yy&amp;quot;,&lt;br /&gt;
		},&lt;br /&gt;
		userTag_3:{&lt;br /&gt;
			valueSource: &amp;quot;complexFilterCombination&amp;quot;,&lt;br /&gt;
            complexFilterCombinationId: &amp;quot;hash_complexFilterCombinationA&amp;quot;,&lt;br /&gt;
		},&lt;br /&gt;
		userTag_4:{&lt;br /&gt;
			valueSource: &amp;quot;perParentCombination&amp;quot;,&lt;br /&gt;
            perParentCombinationId: &amp;quot;hash_perParentCombinationA&amp;quot;,&lt;br /&gt;
		},&lt;br /&gt;
		userTag_7: {&lt;br /&gt;
          value: &amp;quot;zz&amp;quot;,&lt;br /&gt;
        },&lt;br /&gt;
        userTag_8: {&lt;br /&gt;
          valueSource: 'perParentIdentifier',&lt;br /&gt;
          perParentIdentifierFieldname: 'sellOfferId'&lt;br /&gt;
        },&lt;br /&gt;
        userTag_9: {&lt;br /&gt;
          value: 2,&lt;br /&gt;
        },&lt;br /&gt;
	 }&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[Category:Working documents| 2025-04-14]]&lt;br /&gt;
[[Category:Working documents - Search Results| 2025-04-14]]&lt;/div&gt;</summary>
		<author><name>Rut</name></author>
	</entry>
	<entry>
		<id>https://izara.io/wiki/index.php?title=2025-04-14_-_Frontend_LinkPath_structure_for_tableOutput&amp;diff=3600</id>
		<title>2025-04-14 - Frontend LinkPath structure for tableOutput</title>
		<link rel="alternate" type="text/html" href="https://izara.io/wiki/index.php?title=2025-04-14_-_Frontend_LinkPath_structure_for_tableOutput&amp;diff=3600"/>
		<updated>2025-11-07T07:43:11Z</updated>

		<summary type="html">&lt;p&gt;Rut: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Service - Search Results]]&lt;br /&gt;
&lt;br /&gt;
= Overview =&lt;br /&gt;
&lt;br /&gt;
Structure frontend TableConfig and Output prepare for shared library that creates complexFilter and requestProperties&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Service - Search Results]]&lt;br /&gt;
&lt;br /&gt;
= Overview =&lt;br /&gt;
&lt;br /&gt;
Structure frontend TableConfig and Output prepare for shared library that creates complexFilter and requestProperties&lt;br /&gt;
&lt;br /&gt;
= Example params in tableConfig =&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;JavaScript&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
let paramFromTableOutput = {&lt;br /&gt;
&lt;br /&gt;
	// .. other properties same as sent to backend&lt;br /&gt;
	&lt;br /&gt;
	values: {&lt;br /&gt;
		// values are shared between requestProperties and filter values. This set can be iterated to overwrite values using userTag to identify&lt;br /&gt;
		userTag_1:{&lt;br /&gt;
			defaultValue: &amp;quot;xx&amp;quot;,&lt;br /&gt;
		},&lt;br /&gt;
		userTag_2:{&lt;br /&gt;
			defaultValue: &amp;quot;xx&amp;quot;,&lt;br /&gt;
		},&lt;br /&gt;
		userTag_3:{&lt;br /&gt;
			defaultValue: &amp;quot;xx&amp;quot;,&lt;br /&gt;
		},&lt;br /&gt;
		userTag_4:{&lt;br /&gt;
			defaultValue: &amp;quot;xx&amp;quot;,&lt;br /&gt;
		},&lt;br /&gt;
		userTag_5:{&lt;br /&gt;
			defaultValue: &amp;quot;xx&amp;quot;,&lt;br /&gt;
		},&lt;br /&gt;
		userTag_6:{&lt;br /&gt;
			valueSource: &amp;quot;complexFilterCombination&amp;quot;,&lt;br /&gt;
            complexFilterCombinationId: &amp;quot;hash_complexFilterCombinationA&amp;quot;,&lt;br /&gt;
            identifierFieldName: &amp;quot;xxId&amp;quot;&lt;br /&gt;
		},&lt;br /&gt;
		userTag_7:{&lt;br /&gt;
			valueSource: &amp;quot;perParentCombination&amp;quot;,&lt;br /&gt;
            perParentCombinationId: &amp;quot;hash_perParentCombinationA&amp;quot;,&lt;br /&gt;
            identifierFieldName: &amp;quot;sellOfferPlanDeliveryMethodLinkId&amp;quot;&lt;br /&gt;
		},&lt;br /&gt;
        userTag_8: {&lt;br /&gt;
          valueType: 'perParentIdentifier',&lt;br /&gt;
          perParentIdentifierFieldname: 'sellOfferId'&lt;br /&gt;
        },,&lt;br /&gt;
		userTag_9:{&lt;br /&gt;
			defaultValue: &amp;quot;xx&amp;quot;,&lt;br /&gt;
		},&lt;br /&gt;
		userTag_10:{&lt;br /&gt;
			defaultValue: &amp;quot;xx&amp;quot;,&lt;br /&gt;
		},&lt;br /&gt;
		userTag_11:{&lt;br /&gt;
			defaultValue: &amp;quot;xx&amp;quot;,&lt;br /&gt;
		},&lt;br /&gt;
	}&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= Example params sent to backend =&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;JavaScript&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
let paramFromTableOutput = {&lt;br /&gt;
	objType: { //* main objType&lt;br /&gt;
		serviceTag: &amp;quot;ProductManager&amp;quot;,&lt;br /&gt;
		objectType: &amp;quot;Product&amp;quot;&lt;br /&gt;
	},&lt;br /&gt;
    initialLogicalElementId: &amp;quot;uuid_logical_1&amp;quot;,&lt;br /&gt;
    logicalElements: {&lt;br /&gt;
       uuid_logical_1: {&lt;br /&gt;
         logicalElementType: &amp;quot;logical&amp;quot;,&lt;br /&gt;
         previousLogicalElementId: null,&lt;br /&gt;
         nextLogicalElementId: null,&lt;br /&gt;
&lt;br /&gt;
         objType: {&lt;br /&gt;
           serviceTag: &amp;quot;ProductManager&amp;quot;,&lt;br /&gt;
           objectType: &amp;quot;product&amp;quot;&lt;br /&gt;
         },&lt;br /&gt;
         fieldName: &amp;quot;productId&amp;quot;,&lt;br /&gt;
         comparison: &amp;quot;equals&amp;quot;,&lt;br /&gt;
         value: &amp;quot;userTag_1&amp;quot;&lt;br /&gt;
       }&lt;br /&gt;
    },&lt;br /&gt;
	requiredDataFields: { //* fields to create main sort result's requiredData including linkPaths&lt;br /&gt;
// maybe this is not needed at the tableConfig level because it can be built from table elements and sortFields, but can keep in because is needed when sending to lib because elements are not sent&lt;br /&gt;
// if there are no additional properties (eg complexFilterCombinations removed below) then hash_requiredDataField is probably not needed, can be an array of userTag_LinkStepObject&lt;br /&gt;
		//* no link, field in main objType (structure same linkPath but only one step)&lt;br /&gt;
		hash_requiredDataFieldA: {&lt;br /&gt;
		   linkStepObject: &amp;quot;userTag_LinkStepObjectA&amp;quot;,&lt;br /&gt;
		},&lt;br /&gt;
		&lt;br /&gt;
		//* has link&lt;br /&gt;
		hash_requiredDataFieldB: {&lt;br /&gt;
		   linkStepObject: &amp;quot;userTag_LinkStepObjectB&amp;quot;,&lt;br /&gt;
//			complexFilterCombinations: [&amp;quot;hash_complexFilterCombinationA&amp;quot;], // not needed because can find from values in each case&lt;br /&gt;
		}&lt;br /&gt;
	&lt;br /&gt;
	},&lt;br /&gt;
	complexFilterCombinations:{&lt;br /&gt;
		hash_complexFilterCombinationA: {&lt;br /&gt;
          objType: {&lt;br /&gt;
            serviceTag: &amp;quot;Locations&amp;quot;,&lt;br /&gt;
            objectType: &amp;quot;locationNode&amp;quot;&lt;br /&gt;
          },&lt;br /&gt;
          initialLogicalElementId: &amp;quot;child_complexFilter_localtionNode&amp;quot;,&lt;br /&gt;
          logicalElements: {&lt;br /&gt;
            child_complexFilter_localtionNode: {&lt;br /&gt;
              logicalElementType: &amp;quot;childComplexFilter&amp;quot;,&lt;br /&gt;
              previousLogicalElementId: null,&lt;br /&gt;
              nextLogicalElementId: null,&lt;br /&gt;
&lt;br /&gt;
              childLogicalElementId: &amp;quot;logical_locationNode&amp;quot;,&lt;br /&gt;
              objType: {&lt;br /&gt;
                serviceTag: &amp;quot;Locations&amp;quot;,&lt;br /&gt;
                objectType: &amp;quot;locationNode&amp;quot;&lt;br /&gt;
              },&lt;br /&gt;
              pathLinkType: {&lt;br /&gt;
                objType: {&lt;br /&gt;
                  serviceTag: &amp;quot;Locations&amp;quot;,&lt;br /&gt;
                  objectType: &amp;quot;locationNode&amp;quot;&lt;br /&gt;
                },&lt;br /&gt;
                relType: {&lt;br /&gt;
                  serviceTag: &amp;quot;Locations&amp;quot;,&lt;br /&gt;
                  relationshipTag: &amp;quot;hasParentLocationNode&amp;quot;&lt;br /&gt;
                },&lt;br /&gt;
                direction: &amp;quot;to&amp;quot;&lt;br /&gt;
              },&lt;br /&gt;
            },&lt;br /&gt;
            logical_locationNode: {&lt;br /&gt;
               logicalElementType: &amp;quot;logical&amp;quot;,&lt;br /&gt;
               previousLogicalElementId: &amp;quot;child_complexFilter_localtionNode&amp;quot;,&lt;br /&gt;
               nextLogicalElementId: null,&lt;br /&gt;
&lt;br /&gt;
               objType: {&lt;br /&gt;
                serviceTag: &amp;quot;Locations&amp;quot;,&lt;br /&gt;
                objectType: &amp;quot;locationNode&amp;quot;&lt;br /&gt;
               },&lt;br /&gt;
               fieldName: &amp;quot;locationNodeId&amp;quot;,&lt;br /&gt;
               comparison: &amp;quot;equals&amp;quot;,&lt;br /&gt;
               value: &amp;quot;userTag_7&amp;quot;&lt;br /&gt;
            }&lt;br /&gt;
         }&lt;br /&gt;
       },&lt;br /&gt;
	},&lt;br /&gt;
	perParentCombinations:{&lt;br /&gt;
		hash_perParentCombinationA: {&lt;br /&gt;
          objType: {&lt;br /&gt;
            serviceTag: &amp;quot;SellOfferPlan&amp;quot;,&lt;br /&gt;
            objectType: &amp;quot;sellOfferPlan&amp;quot;&lt;br /&gt;
          },&lt;br /&gt;
          initialLogicalElementId: &amp;quot;child_complexFilter_1&amp;quot;,&lt;br /&gt;
          logicalElements: {&lt;br /&gt;
            child_complexFilter_1: {&lt;br /&gt;
              logicalElementType: &amp;quot;childComplexFilter&amp;quot;,&lt;br /&gt;
              previousLogicalElementId: null,&lt;br /&gt;
              nextLogicalElementId: null,&lt;br /&gt;
&lt;br /&gt;
              childLogicalElementId: &amp;quot;logical_sellOffer&amp;quot;,&lt;br /&gt;
              objType: {&lt;br /&gt;
                serviceTag: &amp;quot;SellOfferPlan&amp;quot;,&lt;br /&gt;
                objectType: &amp;quot;sellOfferPlan&amp;quot;&lt;br /&gt;
              },&lt;br /&gt;
              pathLinkType: {&lt;br /&gt;
                objType: {&lt;br /&gt;
                  serviceTag: &amp;quot;SellOfferManager&amp;quot;,&lt;br /&gt;
                  objectType: &amp;quot;sellOffer&amp;quot;&lt;br /&gt;
                }, &lt;br /&gt;
                relType: {&lt;br /&gt;
                  serviceTag: &amp;quot;SellOfferManager&amp;quot;,&lt;br /&gt;
                  relationshipTag: &amp;quot;usesSellOfferPlan&amp;quot;&lt;br /&gt;
                },&lt;br /&gt;
                direction: &amp;quot;to&amp;quot;&lt;br /&gt;
              },&lt;br /&gt;
              requestProperties: {&lt;br /&gt;
                tag_orderQuantity: &amp;quot;userTag_9&amp;quot;&lt;br /&gt;
              }&lt;br /&gt;
           },&lt;br /&gt;
           logical_sellOffer: {&lt;br /&gt;
              logicalElementType: &amp;quot;logical&amp;quot;,&lt;br /&gt;
              previousLogicalElementId: &amp;quot;child_complexFilter_1&amp;quot;,&lt;br /&gt;
              nextLogicalElementId: null,&lt;br /&gt;
&lt;br /&gt;
              objType: {&lt;br /&gt;
                serviceTag: &amp;quot;SellOfferManager&amp;quot;,&lt;br /&gt;
                objectType: &amp;quot;sellOffer&amp;quot;&lt;br /&gt;
              },&lt;br /&gt;
              fieldName: &amp;quot;sellOfferId&amp;quot;,&lt;br /&gt;
              comparison: &amp;quot;equals&amp;quot;,&lt;br /&gt;
              value: &amp;quot;userTag_8&amp;quot;&lt;br /&gt;
           }&lt;br /&gt;
        }&lt;br /&gt;
      },&lt;br /&gt;
	},&lt;br /&gt;
	requiredDataLinkStepObjects: {&lt;br /&gt;
		userTag_LinkStepObjectA: { //* requiredData no linkPath&lt;br /&gt;
			initialObjType: { //* main objType&lt;br /&gt;
				serviceTag: &amp;quot;ProductManager&amp;quot;,&lt;br /&gt;
				objectType: &amp;quot;Product&amp;quot;&lt;br /&gt;
			},&lt;br /&gt;
			linkSteps: [&amp;quot;hash_linkStepA_1&amp;quot;],&lt;br /&gt;
		},&lt;br /&gt;
        userTag_LinkStepObjectB: { // requiredDataFields for finding max orderTotal&lt;br /&gt;
            initialObjType: { //* main objType&lt;br /&gt;
				serviceTag: &amp;quot;ProductManager&amp;quot;,&lt;br /&gt;
				objectType: &amp;quot;Product&amp;quot;&lt;br /&gt;
			},&lt;br /&gt;
			linkSteps: [&amp;quot;hash_linkStepB_1&amp;quot;, &amp;quot;hash_linkStepB_2&amp;quot;, &amp;quot;hash_linkStepB_3&amp;quot;],&lt;br /&gt;
        }&lt;br /&gt;
	},&lt;br /&gt;
	requiredDataLinkSteps: {&lt;br /&gt;
		hash_linkStepA_1:{&lt;br /&gt;
          fieldName: &amp;quot;xxx&amp;quot; &lt;br /&gt;
        },&lt;br /&gt;
        hash_linkStepB_1:{&lt;br /&gt;
          pathLinkType: {&lt;br /&gt;
             objType: {&lt;br /&gt;
               serviceTag: &amp;quot;SellOfferManager&amp;quot;,&lt;br /&gt;
               objectType: &amp;quot;SellOffer&amp;quot;&lt;br /&gt;
             },&lt;br /&gt;
             relType: {&lt;br /&gt;
               serviceTag: &amp;quot;ProductManager&amp;quot;,&lt;br /&gt;
               relationshipTag: &amp;quot;hasSellOffer&amp;quot;&lt;br /&gt;
             },&lt;br /&gt;
             direction: &amp;quot;to&amp;quot;,&lt;br /&gt;
          },&lt;br /&gt;
        }, &lt;br /&gt;
        hash_linkStepB_2: {&lt;br /&gt;
           pathLinkType: {&lt;br /&gt;
             objType: {&lt;br /&gt;
               serviceTag: &amp;quot;OrderPrice&amp;quot;,&lt;br /&gt;
               objectType: &amp;quot;OrderPrice&amp;quot;&lt;br /&gt;
             },&lt;br /&gt;
             relType: {&lt;br /&gt;
               serviceTag: &amp;quot;sellOfferStandard&amp;quot;,&lt;br /&gt;
               relationshipTag: &amp;quot;hasOrderPrice&amp;quot;&lt;br /&gt;
             },&lt;br /&gt;
             direction: &amp;quot;to&amp;quot;,&lt;br /&gt;
           },&lt;br /&gt;
           filterElements: { //* filter in linkPath&lt;br /&gt;
             objType: {&lt;br /&gt;
               serviceTag: &amp;quot;SellOfferManager&amp;quot;,&lt;br /&gt;
               objectType: &amp;quot;SellOffer&amp;quot;&lt;br /&gt;
             },&lt;br /&gt;
             initialLogicalElementId: &amp;quot;logical_sellOffer_in_link&amp;quot;,&lt;br /&gt;
             logicalElements: {&lt;br /&gt;
               logical_sellOffer_in_link: {&lt;br /&gt;
                  logicalElementType: &amp;quot;logical&amp;quot;,&lt;br /&gt;
                  previousLogicalElementId: null,&lt;br /&gt;
                  nextLogicalElementId: null,&lt;br /&gt;
&lt;br /&gt;
                  objType: {&lt;br /&gt;
                    serviceTag: &amp;quot;SellOfferManager&amp;quot;,&lt;br /&gt;
                    objectType: &amp;quot;SellOffer&amp;quot;&lt;br /&gt;
                  },&lt;br /&gt;
                  fieldName: &amp;quot;userId&amp;quot;,&lt;br /&gt;
                  comparison: &amp;quot;equals&amp;quot;,&lt;br /&gt;
                  value: &amp;quot;userTag_2&amp;quot;&lt;br /&gt;
               }&lt;br /&gt;
            }&lt;br /&gt;
          },&lt;br /&gt;
          requestProperties: {&lt;br /&gt;
            tag_deliverTo: &amp;quot;userTag_3&amp;quot;,&lt;br /&gt;
            tag_sellOfferPlan: &amp;quot;userTag_4&amp;quot;,&lt;br /&gt;
            // tag_sellOfferPlanDeliveryMethodLink: &amp;quot;userTag_5&amp;quot;,&lt;br /&gt;
            // tag_sellOfferPlanUserPaymentMethodLink: &amp;quot;userTag_6&amp;quot;&lt;br /&gt;
          }&lt;br /&gt;
        }, &lt;br /&gt;
        hash_linkStepB_3: {&lt;br /&gt;
           fieldName: &amp;quot;zzz&amp;quot;,&lt;br /&gt;
           aggregate: &amp;quot;max&amp;quot;,&lt;br /&gt;
           sortFields: [ //* not sure&lt;br /&gt;
             &amp;quot;hash_sortFieldC&amp;quot;&lt;br /&gt;
           ],&lt;br /&gt;
        }&lt;br /&gt;
	},&lt;br /&gt;
	sortFields: [ //* sortField main ==&amp;gt; not sure&lt;br /&gt;
       &amp;quot;hash_sortFieldA&amp;quot;,&lt;br /&gt;
    &amp;quot;hash_sortFieldB&amp;quot;&lt;br /&gt;
    ],&lt;br /&gt;
    sortFieldObjects: { //* not sure&lt;br /&gt;
      hash_sortFieldA: {&lt;br /&gt;
        requiredDataField: &amp;quot;xxx&amp;quot;,&lt;br /&gt;
        dataType: &amp;quot;number&amp;quot;&lt;br /&gt;
      },&lt;br /&gt;
      hash_sortFieldB: {&lt;br /&gt;
        requiredDataField: &amp;quot;yyy&amp;quot;,&lt;br /&gt;
        dataType: &amp;quot;number&amp;quot;&lt;br /&gt;
      },&lt;br /&gt;
      hash_sortFieldC: {&lt;br /&gt;
        requiredDataField: &amp;quot;zzz&amp;quot;,&lt;br /&gt;
        dataType: &amp;quot;string&amp;quot;&lt;br /&gt;
      }&lt;br /&gt;
    },&lt;br /&gt;
	values: {&lt;br /&gt;
		userTag_1:{&lt;br /&gt;
			value: &amp;quot;xx&amp;quot;,&lt;br /&gt;
		},&lt;br /&gt;
		userTag_2:{&lt;br /&gt;
			value: &amp;quot;yy&amp;quot;,&lt;br /&gt;
		},&lt;br /&gt;
		userTag_3:{&lt;br /&gt;
			valueSource: &amp;quot;complexFilterCombination&amp;quot;,&lt;br /&gt;
            complexFilterCombinationId: &amp;quot;hash_complexFilterCombinationA&amp;quot;,&lt;br /&gt;
            identifierFieldName: &amp;quot;xxId&amp;quot;&lt;br /&gt;
		},&lt;br /&gt;
		userTag_4:{&lt;br /&gt;
			valueSource: &amp;quot;perParentCombination&amp;quot;,&lt;br /&gt;
            perParentCombinationId: &amp;quot;hash_perParentCombinationA&amp;quot;,&lt;br /&gt;
            identifierFieldName: &amp;quot;sellOfferPlanId&amp;quot;&lt;br /&gt;
		},&lt;br /&gt;
		userTag_7: {&lt;br /&gt;
          value: &amp;quot;zz&amp;quot;,&lt;br /&gt;
        },&lt;br /&gt;
        userTag_8: {&lt;br /&gt;
          valueSource: 'perParentIdentifier',&lt;br /&gt;
          perParentIdentifierFieldname: 'sellOfferId'&lt;br /&gt;
        },&lt;br /&gt;
        userTag_9: {&lt;br /&gt;
          value: 2,&lt;br /&gt;
        },&lt;br /&gt;
	 }&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[Category:Working documents| 2025-04-14]]&lt;br /&gt;
[[Category:Working documents - Search Results| 2025-04-14]]&lt;/div&gt;</summary>
		<author><name>Rut</name></author>
	</entry>
	<entry>
		<id>https://izara.io/wiki/index.php?title=2025-04-14_-_Frontend_LinkPath_structure_for_tableOutput&amp;diff=3599</id>
		<title>2025-04-14 - Frontend LinkPath structure for tableOutput</title>
		<link rel="alternate" type="text/html" href="https://izara.io/wiki/index.php?title=2025-04-14_-_Frontend_LinkPath_structure_for_tableOutput&amp;diff=3599"/>
		<updated>2025-11-07T07:40:27Z</updated>

		<summary type="html">&lt;p&gt;Rut: /* Example params sent to backend */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Service - Search Results]]&lt;br /&gt;
&lt;br /&gt;
= Overview =&lt;br /&gt;
&lt;br /&gt;
Structure frontend TableConfig and Output prepare for shared library that creates complexFilter and requestProperties&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Service - Search Results]]&lt;br /&gt;
&lt;br /&gt;
= Overview =&lt;br /&gt;
&lt;br /&gt;
Structure frontend TableConfig and Output prepare for shared library that creates complexFilter and requestProperties&lt;br /&gt;
&lt;br /&gt;
= Example params in tableConfig =&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;JavaScript&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
let paramFromTableOutput = {&lt;br /&gt;
&lt;br /&gt;
	// .. other properties same as sent to backend&lt;br /&gt;
	&lt;br /&gt;
	values: {&lt;br /&gt;
		// values are shared between requestProperties and filter values. This set can be iterated to overwrite values using userTag to identify&lt;br /&gt;
		userTag_1:{&lt;br /&gt;
			defaultValue: &amp;quot;xx&amp;quot;,&lt;br /&gt;
		},&lt;br /&gt;
		userTag_2:{&lt;br /&gt;
			defaultValue: &amp;quot;xx&amp;quot;,&lt;br /&gt;
		},&lt;br /&gt;
		userTag_3:{&lt;br /&gt;
			defaultValue: &amp;quot;xx&amp;quot;,&lt;br /&gt;
		},&lt;br /&gt;
		userTag_4:{&lt;br /&gt;
			defaultValue: &amp;quot;xx&amp;quot;,&lt;br /&gt;
		},&lt;br /&gt;
		userTag_5:{&lt;br /&gt;
			defaultValue: &amp;quot;xx&amp;quot;,&lt;br /&gt;
		},&lt;br /&gt;
		userTag_6:{&lt;br /&gt;
			valueSource: &amp;quot;complexFilterCombination&amp;quot;,&lt;br /&gt;
            complexFilterCombinationId: &amp;quot;hash_complexFilterCombinationA&amp;quot;,&lt;br /&gt;
            identifierFieldName: &amp;quot;xxId&amp;quot;&lt;br /&gt;
		},&lt;br /&gt;
		userTag_7:{&lt;br /&gt;
			valueSource: &amp;quot;perParentCombination&amp;quot;,&lt;br /&gt;
            perParentCombinationId: &amp;quot;hash_perParentCombinationA&amp;quot;,&lt;br /&gt;
            identifierFieldName: &amp;quot;sellOfferPlanDeliveryMethodLinkId&amp;quot;&lt;br /&gt;
		},&lt;br /&gt;
        userTag_8: {&lt;br /&gt;
          valueType: 'perParentIdentifier',&lt;br /&gt;
          perParentIdentifierFieldname: 'sellOfferId'&lt;br /&gt;
        },,&lt;br /&gt;
		userTag_9:{&lt;br /&gt;
			defaultValue: &amp;quot;xx&amp;quot;,&lt;br /&gt;
		},&lt;br /&gt;
		userTag_10:{&lt;br /&gt;
			defaultValue: &amp;quot;xx&amp;quot;,&lt;br /&gt;
		},&lt;br /&gt;
		userTag_11:{&lt;br /&gt;
			defaultValue: &amp;quot;xx&amp;quot;,&lt;br /&gt;
		},&lt;br /&gt;
	}&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= Example params sent to backend =&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;JavaScript&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
let paramFromTableOutput = {&lt;br /&gt;
	objType: { //* main objType&lt;br /&gt;
		serviceTag: &amp;quot;ProductManager&amp;quot;,&lt;br /&gt;
		objectType: &amp;quot;Product&amp;quot;&lt;br /&gt;
	},&lt;br /&gt;
    initialLogicalElementId: &amp;quot;uuid_logical_1&amp;quot;,&lt;br /&gt;
    logicalElements: {&lt;br /&gt;
       uuid_logical_1: {&lt;br /&gt;
         logicalElementType: &amp;quot;logical&amp;quot;,&lt;br /&gt;
         previousLogicalElementId: null,&lt;br /&gt;
         nextLogicalElementId: null,&lt;br /&gt;
&lt;br /&gt;
         objType: {&lt;br /&gt;
           serviceTag: &amp;quot;ProductManager&amp;quot;,&lt;br /&gt;
           objectType: &amp;quot;product&amp;quot;&lt;br /&gt;
         },&lt;br /&gt;
         fieldName: &amp;quot;productId&amp;quot;,&lt;br /&gt;
         comparison: &amp;quot;equals&amp;quot;,&lt;br /&gt;
         value: &amp;quot;userTag_1&amp;quot;&lt;br /&gt;
       }&lt;br /&gt;
    },&lt;br /&gt;
	requiredDataFields: { //* fields to create main sort result's requiredData including linkPaths&lt;br /&gt;
// maybe this is not needed at the tableConfig level because it can be built from table elements and sortFields, but can keep in because is needed when sending to lib because elements are not sent&lt;br /&gt;
// if there are no additional properties (eg complexFilterCombinations removed below) then hash_requiredDataField is probably not needed, can be an array of userTag_LinkStepObject&lt;br /&gt;
		//* no link, field in main objType (structure same linkPath but only one step)&lt;br /&gt;
		hash_requiredDataFieldA: {&lt;br /&gt;
		   linkStepObject: &amp;quot;userTag_LinkStepObjectA&amp;quot;,&lt;br /&gt;
		},&lt;br /&gt;
		&lt;br /&gt;
		//* has link&lt;br /&gt;
		hash_requiredDataFieldB: {&lt;br /&gt;
		   linkStepObject: &amp;quot;userTag_LinkStepObjectB&amp;quot;,&lt;br /&gt;
//			complexFilterCombinations: [&amp;quot;hash_complexFilterCombinationA&amp;quot;], // not needed because can find from values in each case&lt;br /&gt;
		}&lt;br /&gt;
	&lt;br /&gt;
	},&lt;br /&gt;
	complexFilterCombinations:{&lt;br /&gt;
		hash_complexFilterCombinationA: {&lt;br /&gt;
          objType: {&lt;br /&gt;
            serviceTag: &amp;quot;Locations&amp;quot;,&lt;br /&gt;
            objectType: &amp;quot;locationNode&amp;quot;&lt;br /&gt;
          },&lt;br /&gt;
          initialLogicalElementId: &amp;quot;child_complexFilter_localtionNode&amp;quot;,&lt;br /&gt;
          logicalElements: {&lt;br /&gt;
            child_complexFilter_localtionNode: {&lt;br /&gt;
              logicalElementType: &amp;quot;childComplexFilter&amp;quot;,&lt;br /&gt;
              previousLogicalElementId: null,&lt;br /&gt;
              nextLogicalElementId: null,&lt;br /&gt;
&lt;br /&gt;
              childLogicalElementId: &amp;quot;logical_locationNode&amp;quot;,&lt;br /&gt;
              objType: {&lt;br /&gt;
                serviceTag: &amp;quot;Locations&amp;quot;,&lt;br /&gt;
                objectType: &amp;quot;locationNode&amp;quot;&lt;br /&gt;
              },&lt;br /&gt;
              pathLinkType: {&lt;br /&gt;
                objType: {&lt;br /&gt;
                  serviceTag: &amp;quot;Locations&amp;quot;,&lt;br /&gt;
                  objectType: &amp;quot;locationNode&amp;quot;&lt;br /&gt;
                },&lt;br /&gt;
                relType: {&lt;br /&gt;
                  serviceTag: &amp;quot;Locations&amp;quot;,&lt;br /&gt;
                  relationshipTag: &amp;quot;hasParentLocationNode&amp;quot;&lt;br /&gt;
                },&lt;br /&gt;
                direction: &amp;quot;to&amp;quot;&lt;br /&gt;
              },&lt;br /&gt;
            },&lt;br /&gt;
            logical_locationNode: {&lt;br /&gt;
               logicalElementType: &amp;quot;logical&amp;quot;,&lt;br /&gt;
               previousLogicalElementId: &amp;quot;child_complexFilter_localtionNode&amp;quot;,&lt;br /&gt;
               nextLogicalElementId: null,&lt;br /&gt;
&lt;br /&gt;
               objType: {&lt;br /&gt;
                serviceTag: &amp;quot;Locations&amp;quot;,&lt;br /&gt;
                objectType: &amp;quot;locationNode&amp;quot;&lt;br /&gt;
               },&lt;br /&gt;
               fieldName: &amp;quot;locationNodeId&amp;quot;,&lt;br /&gt;
               comparison: &amp;quot;equals&amp;quot;,&lt;br /&gt;
               value: &amp;quot;userTag_7&amp;quot;&lt;br /&gt;
            }&lt;br /&gt;
         }&lt;br /&gt;
       },&lt;br /&gt;
	},&lt;br /&gt;
	perParentCombinations:{&lt;br /&gt;
		hash_perParentCombinationA: {&lt;br /&gt;
          objType: {&lt;br /&gt;
            serviceTag: &amp;quot;SellOfferPlan&amp;quot;,&lt;br /&gt;
            objectType: &amp;quot;sellOfferPlan&amp;quot;&lt;br /&gt;
          },&lt;br /&gt;
          initialLogicalElementId: &amp;quot;child_complexFilter_1&amp;quot;,&lt;br /&gt;
          logicalElements: {&lt;br /&gt;
            child_complexFilter_1: {&lt;br /&gt;
              logicalElementType: &amp;quot;childComplexFilter&amp;quot;,&lt;br /&gt;
              previousLogicalElementId: null,&lt;br /&gt;
              nextLogicalElementId: null,&lt;br /&gt;
&lt;br /&gt;
              childLogicalElementId: &amp;quot;logical_sellOffer&amp;quot;,&lt;br /&gt;
              objType: {&lt;br /&gt;
                serviceTag: &amp;quot;SellOfferPlan&amp;quot;,&lt;br /&gt;
                objectType: &amp;quot;sellOfferPlan&amp;quot;&lt;br /&gt;
              },&lt;br /&gt;
              pathLinkType: {&lt;br /&gt;
                objType: {&lt;br /&gt;
                  serviceTag: &amp;quot;SellOfferManager&amp;quot;,&lt;br /&gt;
                  objectType: &amp;quot;sellOffer&amp;quot;&lt;br /&gt;
                }, &lt;br /&gt;
                relType: {&lt;br /&gt;
                  serviceTag: &amp;quot;SellOfferManager&amp;quot;,&lt;br /&gt;
                  relationshipTag: &amp;quot;usesSellOfferPlan&amp;quot;&lt;br /&gt;
                },&lt;br /&gt;
                direction: &amp;quot;to&amp;quot;&lt;br /&gt;
              },&lt;br /&gt;
              requestProperties: {&lt;br /&gt;
                tag_orderQuantity: &amp;quot;userTag_9&amp;quot;&lt;br /&gt;
              }&lt;br /&gt;
           },&lt;br /&gt;
           logical_sellOffer: {&lt;br /&gt;
              logicalElementType: &amp;quot;logical&amp;quot;,&lt;br /&gt;
              previousLogicalElementId: &amp;quot;child_complexFilter_1&amp;quot;,&lt;br /&gt;
              nextLogicalElementId: null,&lt;br /&gt;
&lt;br /&gt;
              objType: {&lt;br /&gt;
                serviceTag: &amp;quot;SellOfferManager&amp;quot;,&lt;br /&gt;
                objectType: &amp;quot;sellOffer&amp;quot;&lt;br /&gt;
              },&lt;br /&gt;
              fieldName: &amp;quot;sellOfferId&amp;quot;,&lt;br /&gt;
              comparison: &amp;quot;equals&amp;quot;,&lt;br /&gt;
              value: &amp;quot;userTag_8&amp;quot;&lt;br /&gt;
           }&lt;br /&gt;
        }&lt;br /&gt;
      },&lt;br /&gt;
	},&lt;br /&gt;
	requiredDataLinkStepObjects: {&lt;br /&gt;
		userTag_LinkStepObjectA: { //* requiredData no linkPath&lt;br /&gt;
			initialObjType: { //* main objType&lt;br /&gt;
				serviceTag: &amp;quot;ProductManager&amp;quot;,&lt;br /&gt;
				objectType: &amp;quot;Product&amp;quot;&lt;br /&gt;
			},&lt;br /&gt;
			linkSteps: [&amp;quot;hash_linkStepA_1&amp;quot;],&lt;br /&gt;
		},&lt;br /&gt;
        userTag_LinkStepObjectB: { // requiredDataFields for finding max orderTotal&lt;br /&gt;
            initialObjType: { //* main objType&lt;br /&gt;
				serviceTag: &amp;quot;ProductManager&amp;quot;,&lt;br /&gt;
				objectType: &amp;quot;Product&amp;quot;&lt;br /&gt;
			},&lt;br /&gt;
			linkSteps: [&amp;quot;hash_linkStepB_1&amp;quot;, &amp;quot;hash_linkStepB_2&amp;quot;, &amp;quot;hash_linkStepB_3&amp;quot;],&lt;br /&gt;
        }&lt;br /&gt;
	},&lt;br /&gt;
	requiredDataLinkSteps: {&lt;br /&gt;
		hash_linkStepA_1:{&lt;br /&gt;
          fieldName: &amp;quot;xxx&amp;quot; &lt;br /&gt;
        },&lt;br /&gt;
        hash_linkStepB_1:{&lt;br /&gt;
          pathLinkType: {&lt;br /&gt;
             objType: {&lt;br /&gt;
               serviceTag: &amp;quot;SellOfferManager&amp;quot;,&lt;br /&gt;
               objectType: &amp;quot;SellOffer&amp;quot;&lt;br /&gt;
             },&lt;br /&gt;
             relType: {&lt;br /&gt;
               serviceTag: &amp;quot;ProductManager&amp;quot;,&lt;br /&gt;
               relationshipTag: &amp;quot;hasSellOffer&amp;quot;&lt;br /&gt;
             },&lt;br /&gt;
             direction: &amp;quot;to&amp;quot;,&lt;br /&gt;
          },&lt;br /&gt;
        }, &lt;br /&gt;
        hash_linkStepB_2: {&lt;br /&gt;
           pathLinkType: {&lt;br /&gt;
             objType: {&lt;br /&gt;
               serviceTag: &amp;quot;OrderPrice&amp;quot;,&lt;br /&gt;
               objectType: &amp;quot;OrderPrice&amp;quot;&lt;br /&gt;
             },&lt;br /&gt;
             relType: {&lt;br /&gt;
               serviceTag: &amp;quot;sellOfferStandard&amp;quot;,&lt;br /&gt;
               relationshipTag: &amp;quot;hasOrderPrice&amp;quot;&lt;br /&gt;
             },&lt;br /&gt;
             direction: &amp;quot;to&amp;quot;,&lt;br /&gt;
           },&lt;br /&gt;
           filterElements: { //* filter in linkPath&lt;br /&gt;
             objType: {&lt;br /&gt;
               serviceTag: &amp;quot;SellOfferManager&amp;quot;,&lt;br /&gt;
               objectType: &amp;quot;SellOffer&amp;quot;&lt;br /&gt;
             },&lt;br /&gt;
             initialLogicalElementId: &amp;quot;logical_sellOffer_in_link&amp;quot;,&lt;br /&gt;
             logicalElements: {&lt;br /&gt;
               logical_sellOffer_in_link: {&lt;br /&gt;
                  logicalElementType: &amp;quot;logical&amp;quot;,&lt;br /&gt;
                  previousLogicalElementId: null,&lt;br /&gt;
                  nextLogicalElementId: null,&lt;br /&gt;
&lt;br /&gt;
                  objType: {&lt;br /&gt;
                    serviceTag: &amp;quot;SellOfferManager&amp;quot;,&lt;br /&gt;
                    objectType: &amp;quot;SellOffer&amp;quot;&lt;br /&gt;
                  },&lt;br /&gt;
                  fieldName: &amp;quot;userId&amp;quot;,&lt;br /&gt;
                  comparison: &amp;quot;equals&amp;quot;,&lt;br /&gt;
                  value: &amp;quot;userTag_2&amp;quot;&lt;br /&gt;
               }&lt;br /&gt;
            }&lt;br /&gt;
          },&lt;br /&gt;
          requestProperties: {&lt;br /&gt;
            tag_deliverTo: &amp;quot;userTag_3&amp;quot;,&lt;br /&gt;
            tag_sellOfferPlan: &amp;quot;userTag_4&amp;quot;,&lt;br /&gt;
            // tag_sellOfferPlanDeliveryMethodLink: &amp;quot;userTag_5&amp;quot;,&lt;br /&gt;
            // tag_sellOfferPlanUserPaymentMethodLink: &amp;quot;userTag_6&amp;quot;&lt;br /&gt;
          }&lt;br /&gt;
        }, &lt;br /&gt;
        hash_linkStepB_3: {&lt;br /&gt;
           fieldName: &amp;quot;zzz&amp;quot;,&lt;br /&gt;
           aggregate: &amp;quot;max&amp;quot;,&lt;br /&gt;
           sortFields: [ //* not sure&lt;br /&gt;
             &amp;quot;hash_sortFieldC&amp;quot;&lt;br /&gt;
           ],&lt;br /&gt;
        }&lt;br /&gt;
	},&lt;br /&gt;
	sortFields: [ //* sortField main ==&amp;gt; not sure&lt;br /&gt;
       &amp;quot;hash_sortFieldA&amp;quot;,&lt;br /&gt;
    &amp;quot;hash_sortFieldB&amp;quot;&lt;br /&gt;
    ],&lt;br /&gt;
    sortFieldObjects: { //* not sure&lt;br /&gt;
      hash_sortFieldA: {&lt;br /&gt;
        fieldName: &amp;quot;xxx&amp;quot;,&lt;br /&gt;
        dataType: &amp;quot;number&amp;quot;&lt;br /&gt;
      },&lt;br /&gt;
      hash_sortFieldB: {&lt;br /&gt;
        fieldName: &amp;quot;yyy&amp;quot;,&lt;br /&gt;
        dataType: &amp;quot;number&amp;quot;&lt;br /&gt;
      },&lt;br /&gt;
      hash_sortFieldC: {&lt;br /&gt;
        fieldName: &amp;quot;zzz&amp;quot;,&lt;br /&gt;
        dataType: &amp;quot;string&amp;quot;&lt;br /&gt;
      }&lt;br /&gt;
    },&lt;br /&gt;
	values: {&lt;br /&gt;
		userTag_1:{&lt;br /&gt;
			value: &amp;quot;xx&amp;quot;,&lt;br /&gt;
		},&lt;br /&gt;
		userTag_2:{&lt;br /&gt;
			value: &amp;quot;yy&amp;quot;,&lt;br /&gt;
		},&lt;br /&gt;
		userTag_3:{&lt;br /&gt;
			valueSource: &amp;quot;complexFilterCombination&amp;quot;,&lt;br /&gt;
            complexFilterCombinationId: &amp;quot;hash_complexFilterCombinationA&amp;quot;,&lt;br /&gt;
            identifierFieldName: &amp;quot;xxId&amp;quot;&lt;br /&gt;
		},&lt;br /&gt;
		userTag_4:{&lt;br /&gt;
			valueSource: &amp;quot;perParentCombination&amp;quot;,&lt;br /&gt;
            perParentCombinationId: &amp;quot;hash_perParentCombinationA&amp;quot;,&lt;br /&gt;
            identifierFieldName: &amp;quot;sellOfferPlanId&amp;quot;&lt;br /&gt;
		},&lt;br /&gt;
		userTag_7: {&lt;br /&gt;
          value: &amp;quot;zz&amp;quot;,&lt;br /&gt;
        },&lt;br /&gt;
        userTag_8: {&lt;br /&gt;
          valueSource: 'perParentIdentifier',&lt;br /&gt;
          perParentIdentifierFieldname: 'sellOfferId'&lt;br /&gt;
        },&lt;br /&gt;
        userTag_9: {&lt;br /&gt;
          value: 2,&lt;br /&gt;
        },&lt;br /&gt;
	 }&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[Category:Working documents| 2025-04-14]]&lt;br /&gt;
[[Category:Working documents - Search Results| 2025-04-14]]&lt;/div&gt;</summary>
		<author><name>Rut</name></author>
	</entry>
	<entry>
		<id>https://izara.io/wiki/index.php?title=2025-04-14_-_Frontend_LinkPath_structure_for_tableOutput&amp;diff=3598</id>
		<title>2025-04-14 - Frontend LinkPath structure for tableOutput</title>
		<link rel="alternate" type="text/html" href="https://izara.io/wiki/index.php?title=2025-04-14_-_Frontend_LinkPath_structure_for_tableOutput&amp;diff=3598"/>
		<updated>2025-11-07T07:38:46Z</updated>

		<summary type="html">&lt;p&gt;Rut: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Service - Search Results]]&lt;br /&gt;
&lt;br /&gt;
= Overview =&lt;br /&gt;
&lt;br /&gt;
Structure frontend TableConfig and Output prepare for shared library that creates complexFilter and requestProperties&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Service - Search Results]]&lt;br /&gt;
&lt;br /&gt;
= Overview =&lt;br /&gt;
&lt;br /&gt;
Structure frontend TableConfig and Output prepare for shared library that creates complexFilter and requestProperties&lt;br /&gt;
&lt;br /&gt;
= Example params in tableConfig =&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;JavaScript&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
let paramFromTableOutput = {&lt;br /&gt;
&lt;br /&gt;
	// .. other properties same as sent to backend&lt;br /&gt;
	&lt;br /&gt;
	values: {&lt;br /&gt;
		// values are shared between requestProperties and filter values. This set can be iterated to overwrite values using userTag to identify&lt;br /&gt;
		userTag_1:{&lt;br /&gt;
			defaultValue: &amp;quot;xx&amp;quot;,&lt;br /&gt;
		},&lt;br /&gt;
		userTag_2:{&lt;br /&gt;
			defaultValue: &amp;quot;xx&amp;quot;,&lt;br /&gt;
		},&lt;br /&gt;
		userTag_3:{&lt;br /&gt;
			defaultValue: &amp;quot;xx&amp;quot;,&lt;br /&gt;
		},&lt;br /&gt;
		userTag_4:{&lt;br /&gt;
			defaultValue: &amp;quot;xx&amp;quot;,&lt;br /&gt;
		},&lt;br /&gt;
		userTag_5:{&lt;br /&gt;
			defaultValue: &amp;quot;xx&amp;quot;,&lt;br /&gt;
		},&lt;br /&gt;
		userTag_6:{&lt;br /&gt;
			valueSource: &amp;quot;complexFilterCombination&amp;quot;,&lt;br /&gt;
            complexFilterCombinationId: &amp;quot;hash_complexFilterCombinationA&amp;quot;,&lt;br /&gt;
            identifierFieldName: &amp;quot;xxId&amp;quot;&lt;br /&gt;
		},&lt;br /&gt;
		userTag_7:{&lt;br /&gt;
			valueSource: &amp;quot;perParentCombination&amp;quot;,&lt;br /&gt;
            perParentCombinationId: &amp;quot;hash_perParentCombinationA&amp;quot;,&lt;br /&gt;
            identifierFieldName: &amp;quot;sellOfferPlanDeliveryMethodLinkId&amp;quot;&lt;br /&gt;
		},&lt;br /&gt;
        userTag_8: {&lt;br /&gt;
          valueType: 'perParentIdentifier',&lt;br /&gt;
          perParentIdentifierFieldname: 'sellOfferId'&lt;br /&gt;
        },,&lt;br /&gt;
		userTag_9:{&lt;br /&gt;
			defaultValue: &amp;quot;xx&amp;quot;,&lt;br /&gt;
		},&lt;br /&gt;
		userTag_10:{&lt;br /&gt;
			defaultValue: &amp;quot;xx&amp;quot;,&lt;br /&gt;
		},&lt;br /&gt;
		userTag_11:{&lt;br /&gt;
			defaultValue: &amp;quot;xx&amp;quot;,&lt;br /&gt;
		},&lt;br /&gt;
	}&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= Example params sent to backend =&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;JavaScript&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
let paramFromTableOutput = {&lt;br /&gt;
	objType: { //* main objType&lt;br /&gt;
		serviceTag: &amp;quot;ProductManager&amp;quot;,&lt;br /&gt;
		objectType: &amp;quot;Product&amp;quot;&lt;br /&gt;
	},&lt;br /&gt;
    initialLogicalElementId: &amp;quot;uuid_logical_1&amp;quot;,&lt;br /&gt;
    logicalElements: {&lt;br /&gt;
       uuid_logical_1: {&lt;br /&gt;
         logicalElementType: &amp;quot;logical&amp;quot;,&lt;br /&gt;
         previousLogicalElementId: null,&lt;br /&gt;
         nextLogicalElementId: null,&lt;br /&gt;
&lt;br /&gt;
         objType: {&lt;br /&gt;
           serviceTag: &amp;quot;ProductManager&amp;quot;,&lt;br /&gt;
           objectType: &amp;quot;product&amp;quot;&lt;br /&gt;
         },&lt;br /&gt;
         fieldName: &amp;quot;productId&amp;quot;,&lt;br /&gt;
         comparison: &amp;quot;equals&amp;quot;,&lt;br /&gt;
         value: &amp;quot;userTag_1&amp;quot;&lt;br /&gt;
       }&lt;br /&gt;
    },&lt;br /&gt;
	requiredDataFields: { //* fields to create main sort result's requiredData including linkPaths&lt;br /&gt;
// maybe this is not needed at the tableConfig level because it can be built from table elements, but can keep in because is needed when sending to lib because elements are not sent&lt;br /&gt;
// if there are no additional properties (eg complexFilterCombinations removed below) then hash_requiredDataField is probably not needed, can be an array of userTag_LinkStepObject&lt;br /&gt;
		//* no link, field in main objType (structure same linkPath but only one step)&lt;br /&gt;
		hash_requiredDataFieldA: {&lt;br /&gt;
		   linkStepObject: &amp;quot;userTag_LinkStepObjectA&amp;quot;,&lt;br /&gt;
		},&lt;br /&gt;
		&lt;br /&gt;
		//* has link&lt;br /&gt;
		hash_requiredDataFieldB: {&lt;br /&gt;
		   linkStepObject: &amp;quot;userTag_LinkStepObjectB&amp;quot;,&lt;br /&gt;
//			complexFilterCombinations: [&amp;quot;hash_complexFilterCombinationA&amp;quot;], // not needed because can find from values in each case&lt;br /&gt;
		}&lt;br /&gt;
	&lt;br /&gt;
	},&lt;br /&gt;
	complexFilterCombinations:{&lt;br /&gt;
		hash_complexFilterCombinationA: {&lt;br /&gt;
          objType: {&lt;br /&gt;
            serviceTag: &amp;quot;Locations&amp;quot;,&lt;br /&gt;
            objectType: &amp;quot;locationNode&amp;quot;&lt;br /&gt;
          },&lt;br /&gt;
          initialLogicalElementId: &amp;quot;child_complexFilter_localtionNode&amp;quot;,&lt;br /&gt;
          logicalElements: {&lt;br /&gt;
            child_complexFilter_localtionNode: {&lt;br /&gt;
              logicalElementType: &amp;quot;childComplexFilter&amp;quot;,&lt;br /&gt;
              previousLogicalElementId: null,&lt;br /&gt;
              nextLogicalElementId: null,&lt;br /&gt;
&lt;br /&gt;
              childLogicalElementId: &amp;quot;logical_locationNode&amp;quot;,&lt;br /&gt;
              objType: {&lt;br /&gt;
                serviceTag: &amp;quot;Locations&amp;quot;,&lt;br /&gt;
                objectType: &amp;quot;locationNode&amp;quot;&lt;br /&gt;
              },&lt;br /&gt;
              pathLinkType: {&lt;br /&gt;
                objType: {&lt;br /&gt;
                  serviceTag: &amp;quot;Locations&amp;quot;,&lt;br /&gt;
                  objectType: &amp;quot;locationNode&amp;quot;&lt;br /&gt;
                },&lt;br /&gt;
                relType: {&lt;br /&gt;
                  serviceTag: &amp;quot;Locations&amp;quot;,&lt;br /&gt;
                  relationshipTag: &amp;quot;hasParentLocationNode&amp;quot;&lt;br /&gt;
                },&lt;br /&gt;
                direction: &amp;quot;to&amp;quot;&lt;br /&gt;
              },&lt;br /&gt;
            },&lt;br /&gt;
            logical_locationNode: {&lt;br /&gt;
               logicalElementType: &amp;quot;logical&amp;quot;,&lt;br /&gt;
               previousLogicalElementId: &amp;quot;child_complexFilter_localtionNode&amp;quot;,&lt;br /&gt;
               nextLogicalElementId: null,&lt;br /&gt;
&lt;br /&gt;
               objType: {&lt;br /&gt;
                serviceTag: &amp;quot;Locations&amp;quot;,&lt;br /&gt;
                objectType: &amp;quot;locationNode&amp;quot;&lt;br /&gt;
               },&lt;br /&gt;
               fieldName: &amp;quot;locationNodeId&amp;quot;,&lt;br /&gt;
               comparison: &amp;quot;equals&amp;quot;,&lt;br /&gt;
               value: &amp;quot;userTag_7&amp;quot;&lt;br /&gt;
            }&lt;br /&gt;
         }&lt;br /&gt;
       },&lt;br /&gt;
	},&lt;br /&gt;
	perParentCombinations:{&lt;br /&gt;
		hash_perParentCombinationA: {&lt;br /&gt;
          objType: {&lt;br /&gt;
            serviceTag: &amp;quot;SellOfferPlan&amp;quot;,&lt;br /&gt;
            objectType: &amp;quot;sellOfferPlan&amp;quot;&lt;br /&gt;
          },&lt;br /&gt;
          initialLogicalElementId: &amp;quot;child_complexFilter_1&amp;quot;,&lt;br /&gt;
          logicalElements: {&lt;br /&gt;
            child_complexFilter_1: {&lt;br /&gt;
              logicalElementType: &amp;quot;childComplexFilter&amp;quot;,&lt;br /&gt;
              previousLogicalElementId: null,&lt;br /&gt;
              nextLogicalElementId: null,&lt;br /&gt;
&lt;br /&gt;
              childLogicalElementId: &amp;quot;logical_sellOffer&amp;quot;,&lt;br /&gt;
              objType: {&lt;br /&gt;
                serviceTag: &amp;quot;SellOfferPlan&amp;quot;,&lt;br /&gt;
                objectType: &amp;quot;sellOfferPlan&amp;quot;&lt;br /&gt;
              },&lt;br /&gt;
              pathLinkType: {&lt;br /&gt;
                objType: {&lt;br /&gt;
                  serviceTag: &amp;quot;SellOfferManager&amp;quot;,&lt;br /&gt;
                  objectType: &amp;quot;sellOffer&amp;quot;&lt;br /&gt;
                }, &lt;br /&gt;
                relType: {&lt;br /&gt;
                  serviceTag: &amp;quot;SellOfferManager&amp;quot;,&lt;br /&gt;
                  relationshipTag: &amp;quot;usesSellOfferPlan&amp;quot;&lt;br /&gt;
                },&lt;br /&gt;
                direction: &amp;quot;to&amp;quot;&lt;br /&gt;
              },&lt;br /&gt;
              requestProperties: {&lt;br /&gt;
                tag_orderQuantity: &amp;quot;userTag_9&amp;quot;&lt;br /&gt;
              }&lt;br /&gt;
           },&lt;br /&gt;
           logical_sellOffer: {&lt;br /&gt;
              logicalElementType: &amp;quot;logical&amp;quot;,&lt;br /&gt;
              previousLogicalElementId: &amp;quot;child_complexFilter_1&amp;quot;,&lt;br /&gt;
              nextLogicalElementId: null,&lt;br /&gt;
&lt;br /&gt;
              objType: {&lt;br /&gt;
                serviceTag: &amp;quot;SellOfferManager&amp;quot;,&lt;br /&gt;
                objectType: &amp;quot;sellOffer&amp;quot;&lt;br /&gt;
              },&lt;br /&gt;
              fieldName: &amp;quot;sellOfferId&amp;quot;,&lt;br /&gt;
              comparison: &amp;quot;equals&amp;quot;,&lt;br /&gt;
              value: &amp;quot;userTag_8&amp;quot;&lt;br /&gt;
           }&lt;br /&gt;
        }&lt;br /&gt;
      },&lt;br /&gt;
	},&lt;br /&gt;
	requiredDataLinkStepObjects: {&lt;br /&gt;
		userTag_LinkStepObjectA: { //* requiredData no linkPath&lt;br /&gt;
			initialObjType: { //* main objType&lt;br /&gt;
				serviceTag: &amp;quot;ProductManager&amp;quot;,&lt;br /&gt;
				objectType: &amp;quot;Product&amp;quot;&lt;br /&gt;
			},&lt;br /&gt;
			linkSteps: [&amp;quot;hash_linkStepA_1&amp;quot;],&lt;br /&gt;
		},&lt;br /&gt;
        userTag_LinkStepObjectB: { // requiredDataFields for finding max orderTotal&lt;br /&gt;
            initialObjType: { //* main objType&lt;br /&gt;
				serviceTag: &amp;quot;ProductManager&amp;quot;,&lt;br /&gt;
				objectType: &amp;quot;Product&amp;quot;&lt;br /&gt;
			},&lt;br /&gt;
			linkSteps: [&amp;quot;hash_linkStepB_1&amp;quot;, &amp;quot;hash_linkStepB_2&amp;quot;, &amp;quot;hash_linkStepB_3&amp;quot;],&lt;br /&gt;
        }&lt;br /&gt;
	},&lt;br /&gt;
	requiredDataLinkSteps: {&lt;br /&gt;
		hash_linkStepA_1:{&lt;br /&gt;
          fieldName: &amp;quot;xxx&amp;quot; &lt;br /&gt;
        },&lt;br /&gt;
        hash_linkStepB_1:{&lt;br /&gt;
          pathLinkType: {&lt;br /&gt;
             objType: {&lt;br /&gt;
               serviceTag: &amp;quot;SellOfferManager&amp;quot;,&lt;br /&gt;
               objectType: &amp;quot;SellOffer&amp;quot;&lt;br /&gt;
             },&lt;br /&gt;
             relType: {&lt;br /&gt;
               serviceTag: &amp;quot;ProductManager&amp;quot;,&lt;br /&gt;
               relationshipTag: &amp;quot;hasSellOffer&amp;quot;&lt;br /&gt;
             },&lt;br /&gt;
             direction: &amp;quot;to&amp;quot;,&lt;br /&gt;
          },&lt;br /&gt;
        }, &lt;br /&gt;
        hash_linkStepB_2: {&lt;br /&gt;
           pathLinkType: {&lt;br /&gt;
             objType: {&lt;br /&gt;
               serviceTag: &amp;quot;OrderPrice&amp;quot;,&lt;br /&gt;
               objectType: &amp;quot;OrderPrice&amp;quot;&lt;br /&gt;
             },&lt;br /&gt;
             relType: {&lt;br /&gt;
               serviceTag: &amp;quot;sellOfferStandard&amp;quot;,&lt;br /&gt;
               relationshipTag: &amp;quot;hasOrderPrice&amp;quot;&lt;br /&gt;
             },&lt;br /&gt;
             direction: &amp;quot;to&amp;quot;,&lt;br /&gt;
           },&lt;br /&gt;
           filterElements: { //* filter in linkPath&lt;br /&gt;
             objType: {&lt;br /&gt;
               serviceTag: &amp;quot;SellOfferManager&amp;quot;,&lt;br /&gt;
               objectType: &amp;quot;SellOffer&amp;quot;&lt;br /&gt;
             },&lt;br /&gt;
             initialLogicalElementId: &amp;quot;logical_sellOffer_in_link&amp;quot;,&lt;br /&gt;
             logicalElements: {&lt;br /&gt;
               logical_sellOffer_in_link: {&lt;br /&gt;
                  logicalElementType: &amp;quot;logical&amp;quot;,&lt;br /&gt;
                  previousLogicalElementId: null,&lt;br /&gt;
                  nextLogicalElementId: null,&lt;br /&gt;
&lt;br /&gt;
                  objType: {&lt;br /&gt;
                    serviceTag: &amp;quot;SellOfferManager&amp;quot;,&lt;br /&gt;
                    objectType: &amp;quot;SellOffer&amp;quot;&lt;br /&gt;
                  },&lt;br /&gt;
                  fieldName: &amp;quot;userId&amp;quot;,&lt;br /&gt;
                  comparison: &amp;quot;equals&amp;quot;,&lt;br /&gt;
                  value: &amp;quot;userTag_2&amp;quot;&lt;br /&gt;
               }&lt;br /&gt;
            }&lt;br /&gt;
          },&lt;br /&gt;
          requestProperties: {&lt;br /&gt;
            tag_deliverTo: &amp;quot;userTag_3&amp;quot;,&lt;br /&gt;
            tag_sellOfferPlan: &amp;quot;userTag_4&amp;quot;,&lt;br /&gt;
            // tag_sellOfferPlanDeliveryMethodLink: &amp;quot;userTag_5&amp;quot;,&lt;br /&gt;
            // tag_sellOfferPlanUserPaymentMethodLink: &amp;quot;userTag_6&amp;quot;&lt;br /&gt;
          }&lt;br /&gt;
        }, &lt;br /&gt;
        hash_linkStepB_3: {&lt;br /&gt;
           fieldName: &amp;quot;zzz&amp;quot;,&lt;br /&gt;
           aggregate: &amp;quot;max&amp;quot;,&lt;br /&gt;
           sortFields: [ //* not sure&lt;br /&gt;
             &amp;quot;hash_sortFieldC&amp;quot;&lt;br /&gt;
           ],&lt;br /&gt;
        }&lt;br /&gt;
	},&lt;br /&gt;
	sortFields: [ //* sortField main ==&amp;gt; not sure&lt;br /&gt;
       &amp;quot;hash_sortFieldA&amp;quot;,&lt;br /&gt;
    &amp;quot;hash_sortFieldB&amp;quot;&lt;br /&gt;
    ],&lt;br /&gt;
    sortFieldObjects: { //* not sure&lt;br /&gt;
      hash_sortFieldA: {&lt;br /&gt;
        fieldName: &amp;quot;xxx&amp;quot;,&lt;br /&gt;
        dataType: &amp;quot;number&amp;quot;&lt;br /&gt;
      },&lt;br /&gt;
      hash_sortFieldB: {&lt;br /&gt;
        fieldName: &amp;quot;yyy&amp;quot;,&lt;br /&gt;
        dataType: &amp;quot;number&amp;quot;&lt;br /&gt;
      },&lt;br /&gt;
      hash_sortFieldC: {&lt;br /&gt;
        fieldName: &amp;quot;zzz&amp;quot;,&lt;br /&gt;
        dataType: &amp;quot;string&amp;quot;&lt;br /&gt;
      }&lt;br /&gt;
    },&lt;br /&gt;
	values: {&lt;br /&gt;
		userTag_1:{&lt;br /&gt;
			value: &amp;quot;xx&amp;quot;,&lt;br /&gt;
		},&lt;br /&gt;
		userTag_2:{&lt;br /&gt;
			value: &amp;quot;yy&amp;quot;,&lt;br /&gt;
		},&lt;br /&gt;
		userTag_3:{&lt;br /&gt;
			valueSource: &amp;quot;complexFilterCombination&amp;quot;,&lt;br /&gt;
            complexFilterCombinationId: &amp;quot;hash_complexFilterCombinationA&amp;quot;,&lt;br /&gt;
            identifierFieldName: &amp;quot;xxId&amp;quot;&lt;br /&gt;
		},&lt;br /&gt;
		userTag_4:{&lt;br /&gt;
			valueSource: &amp;quot;perParentCombination&amp;quot;,&lt;br /&gt;
            perParentCombinationId: &amp;quot;hash_perParentCombinationA&amp;quot;,&lt;br /&gt;
            identifierFieldName: &amp;quot;sellOfferPlanId&amp;quot;&lt;br /&gt;
		},&lt;br /&gt;
		userTag_7: {&lt;br /&gt;
          value: &amp;quot;zz&amp;quot;,&lt;br /&gt;
        },&lt;br /&gt;
        userTag_8: {&lt;br /&gt;
          valueSource: 'perParentIdentifier',&lt;br /&gt;
          perParentIdentifierFieldname: 'sellOfferId'&lt;br /&gt;
        },&lt;br /&gt;
        userTag_9: {&lt;br /&gt;
          value: 2,&lt;br /&gt;
        },&lt;br /&gt;
	 }&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[Category:Working documents| 2025-04-14]]&lt;br /&gt;
[[Category:Working documents - Search Results| 2025-04-14]]&lt;/div&gt;</summary>
		<author><name>Rut</name></author>
	</entry>
	<entry>
		<id>https://izara.io/wiki/index.php?title=2025-04-14_-_Frontend_LinkPath_structure_for_tableOutput&amp;diff=3597</id>
		<title>2025-04-14 - Frontend LinkPath structure for tableOutput</title>
		<link rel="alternate" type="text/html" href="https://izara.io/wiki/index.php?title=2025-04-14_-_Frontend_LinkPath_structure_for_tableOutput&amp;diff=3597"/>
		<updated>2025-11-07T07:24:03Z</updated>

		<summary type="html">&lt;p&gt;Rut: /* Example params sent to backend */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Service - Search Results]]&lt;br /&gt;
&lt;br /&gt;
= Overview =&lt;br /&gt;
&lt;br /&gt;
Structure frontend TableConfig and Output prepare for shared library that creates complexFilter and requestProperties&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Service - Search Results]]&lt;br /&gt;
&lt;br /&gt;
= Overview =&lt;br /&gt;
&lt;br /&gt;
Structure frontend TableConfig and Output prepare for shared library that creates complexFilter and requestProperties&lt;br /&gt;
&lt;br /&gt;
= Example params in tableConfig =&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;JavaScript&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
let paramFromTableOutput = {&lt;br /&gt;
&lt;br /&gt;
	// .. other properties same as sent to backend&lt;br /&gt;
	&lt;br /&gt;
	values: {&lt;br /&gt;
		// values are shared between requestProperties and filter values. This set can be iterated to overwrite values using userTag to identify&lt;br /&gt;
		userTag_1:{&lt;br /&gt;
			defaultValue: &amp;quot;xx&amp;quot;,&lt;br /&gt;
		},&lt;br /&gt;
		userTag_2:{&lt;br /&gt;
			defaultValue: &amp;quot;xx&amp;quot;,&lt;br /&gt;
		},&lt;br /&gt;
		userTag_3:{&lt;br /&gt;
			defaultValue: &amp;quot;xx&amp;quot;,&lt;br /&gt;
		},&lt;br /&gt;
		userTag_4:{&lt;br /&gt;
			defaultValue: &amp;quot;xx&amp;quot;,&lt;br /&gt;
		},&lt;br /&gt;
		userTag_5:{&lt;br /&gt;
			defaultValue: &amp;quot;xx&amp;quot;,&lt;br /&gt;
		},&lt;br /&gt;
		userTag_6:{&lt;br /&gt;
			valueSource: &amp;quot;complexFilterCombination&amp;quot;,&lt;br /&gt;
            complexFilterCombinationId: &amp;quot;hash_complexFilterCombinationA&amp;quot;,&lt;br /&gt;
            identifierFieldName: &amp;quot;xxId&amp;quot;&lt;br /&gt;
		},&lt;br /&gt;
		userTag_7:{&lt;br /&gt;
			valueSource: &amp;quot;perParentCombination&amp;quot;,&lt;br /&gt;
            perParentCombinationId: &amp;quot;hash_perParentCombinationA&amp;quot;,&lt;br /&gt;
            identifierFieldName: &amp;quot;sellOfferPlanDeliveryMethodLinkId&amp;quot;&lt;br /&gt;
		},&lt;br /&gt;
        userTag_8: {&lt;br /&gt;
          valueType: 'perParentIdentifier',&lt;br /&gt;
          perParentIdentifierFieldname: 'sellOfferId'&lt;br /&gt;
        },,&lt;br /&gt;
		userTag_9:{&lt;br /&gt;
			defaultValue: &amp;quot;xx&amp;quot;,&lt;br /&gt;
		},&lt;br /&gt;
		userTag_10:{&lt;br /&gt;
			defaultValue: &amp;quot;xx&amp;quot;,&lt;br /&gt;
		},&lt;br /&gt;
		userTag_11:{&lt;br /&gt;
			defaultValue: &amp;quot;xx&amp;quot;,&lt;br /&gt;
		},&lt;br /&gt;
	}&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= Example params sent to backend =&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;JavaScript&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
let paramFromTableOutput = {&lt;br /&gt;
	objType: { //* main objType&lt;br /&gt;
		serviceTag: &amp;quot;ProductManager&amp;quot;,&lt;br /&gt;
		objectType: &amp;quot;Product&amp;quot;&lt;br /&gt;
	},&lt;br /&gt;
    initialLogicalElementId: &amp;quot;uuid_logical_1&amp;quot;,&lt;br /&gt;
    logicalElements: {&lt;br /&gt;
       uuid_logical_1: {&lt;br /&gt;
         logicalElementType: &amp;quot;logical&amp;quot;,&lt;br /&gt;
         previousLogicalElementId: null,&lt;br /&gt;
         nextLogicalElementId: null,&lt;br /&gt;
&lt;br /&gt;
         objType: {&lt;br /&gt;
           serviceTag: &amp;quot;ProductManager&amp;quot;,&lt;br /&gt;
           objectType: &amp;quot;product&amp;quot;&lt;br /&gt;
         },&lt;br /&gt;
         fieldName: &amp;quot;productId&amp;quot;,&lt;br /&gt;
         comparison: &amp;quot;equals&amp;quot;,&lt;br /&gt;
         value: &amp;quot;userTag_1&amp;quot;&lt;br /&gt;
       }&lt;br /&gt;
    },&lt;br /&gt;
	requiredDataFields: { //* fields to create main sort result's requiredData including linkPaths&lt;br /&gt;
// maybe this is not needed at the tableConfig level because it can be built from table elements, but can keep in because is needed when sending to lib because elements are not sent&lt;br /&gt;
// if there are no additional properties (eg complexFilterCombinations removed below) then hash_requiredDataField is probably not needed, can be an array of hash_LinkStepObject&lt;br /&gt;
		//* no link, field in main objType (structure same linkPath but only one step)&lt;br /&gt;
		hash_requiredDataFieldA: {&lt;br /&gt;
		   linkStepObject: &amp;quot;hash_LinkStepObjectA&amp;quot;,&lt;br /&gt;
		},&lt;br /&gt;
		&lt;br /&gt;
		//* has link&lt;br /&gt;
		hash_requiredDataFieldB: {&lt;br /&gt;
		   linkStepObject: &amp;quot;hash_LinkStepObjectB&amp;quot;,&lt;br /&gt;
//			complexFilterCombinations: [&amp;quot;hash_complexFilterCombinationA&amp;quot;], // not needed because can find from values in each case&lt;br /&gt;
		}&lt;br /&gt;
	&lt;br /&gt;
	},&lt;br /&gt;
	complexFilterCombinations:{&lt;br /&gt;
		hash_complexFilterCombinationA: {&lt;br /&gt;
          objType: {&lt;br /&gt;
            serviceTag: &amp;quot;Locations&amp;quot;,&lt;br /&gt;
            objectType: &amp;quot;locationNode&amp;quot;&lt;br /&gt;
          },&lt;br /&gt;
          initialLogicalElementId: &amp;quot;child_complexFilter_localtionNode&amp;quot;,&lt;br /&gt;
          logicalElements: {&lt;br /&gt;
            child_complexFilter_localtionNode: {&lt;br /&gt;
              logicalElementType: &amp;quot;childComplexFilter&amp;quot;,&lt;br /&gt;
              previousLogicalElementId: null,&lt;br /&gt;
              nextLogicalElementId: null,&lt;br /&gt;
&lt;br /&gt;
              childLogicalElementId: &amp;quot;logical_locationNode&amp;quot;,&lt;br /&gt;
              objType: {&lt;br /&gt;
                serviceTag: &amp;quot;Locations&amp;quot;,&lt;br /&gt;
                objectType: &amp;quot;locationNode&amp;quot;&lt;br /&gt;
              },&lt;br /&gt;
              pathLinkType: {&lt;br /&gt;
                objType: {&lt;br /&gt;
                  serviceTag: &amp;quot;Locations&amp;quot;,&lt;br /&gt;
                  objectType: &amp;quot;locationNode&amp;quot;&lt;br /&gt;
                },&lt;br /&gt;
                relType: {&lt;br /&gt;
                  serviceTag: &amp;quot;Locations&amp;quot;,&lt;br /&gt;
                  relationshipTag: &amp;quot;hasParentLocationNode&amp;quot;&lt;br /&gt;
                },&lt;br /&gt;
                direction: &amp;quot;to&amp;quot;&lt;br /&gt;
              },&lt;br /&gt;
            },&lt;br /&gt;
            logical_locationNode: {&lt;br /&gt;
               logicalElementType: &amp;quot;logical&amp;quot;,&lt;br /&gt;
               previousLogicalElementId: &amp;quot;child_complexFilter_localtionNode&amp;quot;,&lt;br /&gt;
               nextLogicalElementId: null,&lt;br /&gt;
&lt;br /&gt;
               objType: {&lt;br /&gt;
                serviceTag: &amp;quot;Locations&amp;quot;,&lt;br /&gt;
                objectType: &amp;quot;locationNode&amp;quot;&lt;br /&gt;
               },&lt;br /&gt;
               fieldName: &amp;quot;locationNodeId&amp;quot;,&lt;br /&gt;
               comparison: &amp;quot;equals&amp;quot;,&lt;br /&gt;
               value: &amp;quot;userTag_7&amp;quot;&lt;br /&gt;
            }&lt;br /&gt;
         }&lt;br /&gt;
       },&lt;br /&gt;
	},&lt;br /&gt;
	perParentCombinations:{&lt;br /&gt;
		hash_perParentCombinationA: {&lt;br /&gt;
          objType: {&lt;br /&gt;
            serviceTag: &amp;quot;SellOfferPlan&amp;quot;,&lt;br /&gt;
            objectType: &amp;quot;sellOfferPlan&amp;quot;&lt;br /&gt;
          },&lt;br /&gt;
          initialLogicalElementId: &amp;quot;child_complexFilter_1&amp;quot;,&lt;br /&gt;
          logicalElements: {&lt;br /&gt;
            child_complexFilter_1: {&lt;br /&gt;
              logicalElementType: &amp;quot;childComplexFilter&amp;quot;,&lt;br /&gt;
              previousLogicalElementId: null,&lt;br /&gt;
              nextLogicalElementId: null,&lt;br /&gt;
&lt;br /&gt;
              childLogicalElementId: &amp;quot;logical_sellOffer&amp;quot;,&lt;br /&gt;
              objType: {&lt;br /&gt;
                serviceTag: &amp;quot;SellOfferPlan&amp;quot;,&lt;br /&gt;
                objectType: &amp;quot;sellOfferPlan&amp;quot;&lt;br /&gt;
              },&lt;br /&gt;
              pathLinkType: {&lt;br /&gt;
                objType: {&lt;br /&gt;
                  serviceTag: &amp;quot;SellOfferManager&amp;quot;,&lt;br /&gt;
                  objectType: &amp;quot;sellOffer&amp;quot;&lt;br /&gt;
                }, &lt;br /&gt;
                relType: {&lt;br /&gt;
                  serviceTag: &amp;quot;SellOfferManager&amp;quot;,&lt;br /&gt;
                  relationshipTag: &amp;quot;usesSellOfferPlan&amp;quot;&lt;br /&gt;
                },&lt;br /&gt;
                direction: &amp;quot;to&amp;quot;&lt;br /&gt;
              },&lt;br /&gt;
              requestProperties: {&lt;br /&gt;
                tag_orderQuantity: &amp;quot;userTag_9&amp;quot;&lt;br /&gt;
              }&lt;br /&gt;
           },&lt;br /&gt;
           logical_sellOffer: {&lt;br /&gt;
              logicalElementType: &amp;quot;logical&amp;quot;,&lt;br /&gt;
              previousLogicalElementId: &amp;quot;child_complexFilter_1&amp;quot;,&lt;br /&gt;
              nextLogicalElementId: null,&lt;br /&gt;
&lt;br /&gt;
              objType: {&lt;br /&gt;
                serviceTag: &amp;quot;SellOfferManager&amp;quot;,&lt;br /&gt;
                objectType: &amp;quot;sellOffer&amp;quot;&lt;br /&gt;
              },&lt;br /&gt;
              fieldName: &amp;quot;sellOfferId&amp;quot;,&lt;br /&gt;
              comparison: &amp;quot;equals&amp;quot;,&lt;br /&gt;
              value: &amp;quot;userTag_8&amp;quot;&lt;br /&gt;
           }&lt;br /&gt;
        }&lt;br /&gt;
      },&lt;br /&gt;
	},&lt;br /&gt;
	requiredDataLinkStepObjects: {&lt;br /&gt;
		hash_LinkStepObjectA: { //* requiredData no linkPath&lt;br /&gt;
			initialObjType: { //* main objType&lt;br /&gt;
				serviceTag: &amp;quot;ProductManager&amp;quot;,&lt;br /&gt;
				objectType: &amp;quot;Product&amp;quot;&lt;br /&gt;
			},&lt;br /&gt;
			linkSteps: [&amp;quot;hash_linkStepA_1&amp;quot;],&lt;br /&gt;
		},&lt;br /&gt;
        hash_LinkStepObjectB: { // requiredDataFields for finding max orderTotal&lt;br /&gt;
            initialObjType: { //* main objType&lt;br /&gt;
				serviceTag: &amp;quot;ProductManager&amp;quot;,&lt;br /&gt;
				objectType: &amp;quot;Product&amp;quot;&lt;br /&gt;
			},&lt;br /&gt;
			linkSteps: [&amp;quot;hash_linkStepB_1&amp;quot;, &amp;quot;hash_linkStepB_2&amp;quot;, &amp;quot;hash_linkStepB_3&amp;quot;],&lt;br /&gt;
        }&lt;br /&gt;
	},&lt;br /&gt;
	requiredDataLinkSteps: {&lt;br /&gt;
		hash_linkStepA_1:{&lt;br /&gt;
          fieldName: &amp;quot;xxx&amp;quot; &lt;br /&gt;
        },&lt;br /&gt;
        hash_linkStepB_1:{&lt;br /&gt;
          pathLinkType: {&lt;br /&gt;
             objType: {&lt;br /&gt;
               serviceTag: &amp;quot;SellOfferManager&amp;quot;,&lt;br /&gt;
               objectType: &amp;quot;SellOffer&amp;quot;&lt;br /&gt;
             },&lt;br /&gt;
             relType: {&lt;br /&gt;
               serviceTag: &amp;quot;ProductManager&amp;quot;,&lt;br /&gt;
               relationshipTag: &amp;quot;hasSellOffer&amp;quot;&lt;br /&gt;
             },&lt;br /&gt;
             direction: &amp;quot;to&amp;quot;,&lt;br /&gt;
          },&lt;br /&gt;
        }, &lt;br /&gt;
        hash_linkStepB_2: {&lt;br /&gt;
           pathLinkType: {&lt;br /&gt;
             objType: {&lt;br /&gt;
               serviceTag: &amp;quot;OrderPrice&amp;quot;,&lt;br /&gt;
               objectType: &amp;quot;OrderPrice&amp;quot;&lt;br /&gt;
             },&lt;br /&gt;
             relType: {&lt;br /&gt;
               serviceTag: &amp;quot;sellOfferStandard&amp;quot;,&lt;br /&gt;
               relationshipTag: &amp;quot;hasOrderPrice&amp;quot;&lt;br /&gt;
             },&lt;br /&gt;
             direction: &amp;quot;to&amp;quot;,&lt;br /&gt;
           },&lt;br /&gt;
           filterElements: { //* filter in linkPath&lt;br /&gt;
             objType: {&lt;br /&gt;
               serviceTag: &amp;quot;SellOfferManager&amp;quot;,&lt;br /&gt;
               objectType: &amp;quot;SellOffer&amp;quot;&lt;br /&gt;
             },&lt;br /&gt;
             initialLogicalElementId: &amp;quot;logical_sellOffer_in_link&amp;quot;,&lt;br /&gt;
             logicalElements: {&lt;br /&gt;
               logical_sellOffer_in_link: {&lt;br /&gt;
                  logicalElementType: &amp;quot;logical&amp;quot;,&lt;br /&gt;
                  previousLogicalElementId: null,&lt;br /&gt;
                  nextLogicalElementId: null,&lt;br /&gt;
&lt;br /&gt;
                  objType: {&lt;br /&gt;
                    serviceTag: &amp;quot;SellOfferManager&amp;quot;,&lt;br /&gt;
                    objectType: &amp;quot;SellOffer&amp;quot;&lt;br /&gt;
                  },&lt;br /&gt;
                  fieldName: &amp;quot;userId&amp;quot;,&lt;br /&gt;
                  comparison: &amp;quot;equals&amp;quot;,&lt;br /&gt;
                  value: &amp;quot;userTag_2&amp;quot;&lt;br /&gt;
               }&lt;br /&gt;
            }&lt;br /&gt;
          },&lt;br /&gt;
          requestProperties: {&lt;br /&gt;
            tag_deliverTo: &amp;quot;userTag_3&amp;quot;,&lt;br /&gt;
            tag_sellOfferPlan: &amp;quot;userTag_4&amp;quot;,&lt;br /&gt;
            // tag_sellOfferPlanDeliveryMethodLink: &amp;quot;userTag_5&amp;quot;,&lt;br /&gt;
            // tag_sellOfferPlanUserPaymentMethodLink: &amp;quot;userTag_6&amp;quot;&lt;br /&gt;
          }&lt;br /&gt;
        }, &lt;br /&gt;
        hash_linkStepB_3: {&lt;br /&gt;
           fieldName: &amp;quot;zzz&amp;quot;,&lt;br /&gt;
           aggregate: &amp;quot;max&amp;quot;,&lt;br /&gt;
           sortFields: [ //* not sure&lt;br /&gt;
             &amp;quot;hash_sortFieldC&amp;quot;&lt;br /&gt;
           ],&lt;br /&gt;
        }&lt;br /&gt;
	},&lt;br /&gt;
	sortFields: [ //* sortField main ==&amp;gt; not sure&lt;br /&gt;
       &amp;quot;hash_sortFieldA&amp;quot;,&lt;br /&gt;
    &amp;quot;hash_sortFieldB&amp;quot;&lt;br /&gt;
    ],&lt;br /&gt;
    sortFieldObjects: { //* not sure&lt;br /&gt;
      hash_sortFieldA: {&lt;br /&gt;
        fieldName: &amp;quot;xxx&amp;quot;,&lt;br /&gt;
        dataType: &amp;quot;number&amp;quot;&lt;br /&gt;
      },&lt;br /&gt;
      hash_sortFieldB: {&lt;br /&gt;
        fieldName: &amp;quot;yyy&amp;quot;,&lt;br /&gt;
        dataType: &amp;quot;number&amp;quot;&lt;br /&gt;
      },&lt;br /&gt;
      hash_sortFieldC: {&lt;br /&gt;
        fieldName: &amp;quot;zzz&amp;quot;,&lt;br /&gt;
        dataType: &amp;quot;string&amp;quot;&lt;br /&gt;
      }&lt;br /&gt;
    },&lt;br /&gt;
	values: {&lt;br /&gt;
		userTag_1:{&lt;br /&gt;
			value: &amp;quot;xx&amp;quot;,&lt;br /&gt;
		},&lt;br /&gt;
		userTag_2:{&lt;br /&gt;
			value: &amp;quot;yy&amp;quot;,&lt;br /&gt;
		},&lt;br /&gt;
		userTag_3:{&lt;br /&gt;
			valueSource: &amp;quot;complexFilterCombination&amp;quot;,&lt;br /&gt;
            complexFilterCombinationId: &amp;quot;hash_complexFilterCombinationA&amp;quot;,&lt;br /&gt;
            identifierFieldName: &amp;quot;xxId&amp;quot;&lt;br /&gt;
		},&lt;br /&gt;
		userTag_4:{&lt;br /&gt;
			valueSource: &amp;quot;perParentCombination&amp;quot;,&lt;br /&gt;
            perParentCombinationId: &amp;quot;hash_perParentCombinationA&amp;quot;,&lt;br /&gt;
            identifierFieldName: &amp;quot;sellOfferPlanId&amp;quot;&lt;br /&gt;
		},&lt;br /&gt;
		userTag_7: {&lt;br /&gt;
          value: &amp;quot;zz&amp;quot;,&lt;br /&gt;
        },&lt;br /&gt;
        userTag_8: {&lt;br /&gt;
          valueSource: 'perParentIdentifier',&lt;br /&gt;
          perParentIdentifierFieldname: 'sellOfferId'&lt;br /&gt;
        },&lt;br /&gt;
        userTag_9: {&lt;br /&gt;
          value: 2,&lt;br /&gt;
        },&lt;br /&gt;
	 }&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[Category:Working documents| 2025-04-14]]&lt;br /&gt;
[[Category:Working documents - Search Results| 2025-04-14]]&lt;/div&gt;</summary>
		<author><name>Rut</name></author>
	</entry>
	<entry>
		<id>https://izara.io/wiki/index.php?title=2025-04-14_-_Frontend_LinkPath_structure_for_tableOutput&amp;diff=3596</id>
		<title>2025-04-14 - Frontend LinkPath structure for tableOutput</title>
		<link rel="alternate" type="text/html" href="https://izara.io/wiki/index.php?title=2025-04-14_-_Frontend_LinkPath_structure_for_tableOutput&amp;diff=3596"/>
		<updated>2025-11-07T07:02:14Z</updated>

		<summary type="html">&lt;p&gt;Rut: /* Example params sent to backend */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Service - Search Results]]&lt;br /&gt;
&lt;br /&gt;
= Overview =&lt;br /&gt;
&lt;br /&gt;
Structure frontend TableConfig and Output prepare for shared library that creates complexFilter and requestProperties&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Service - Search Results]]&lt;br /&gt;
&lt;br /&gt;
= Overview =&lt;br /&gt;
&lt;br /&gt;
Structure frontend TableConfig and Output prepare for shared library that creates complexFilter and requestProperties&lt;br /&gt;
&lt;br /&gt;
= Example params in tableConfig =&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;JavaScript&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
let paramFromTableOutput = {&lt;br /&gt;
&lt;br /&gt;
	// .. other properties same as sent to backend&lt;br /&gt;
	&lt;br /&gt;
	values: {&lt;br /&gt;
		// values are shared between requestProperties and filter values. This set can be iterated to overwrite values using userTag to identify&lt;br /&gt;
		userTag_1:{&lt;br /&gt;
			defaultValue: &amp;quot;xx&amp;quot;,&lt;br /&gt;
		},&lt;br /&gt;
		userTag_2:{&lt;br /&gt;
			defaultValue: &amp;quot;xx&amp;quot;,&lt;br /&gt;
		},&lt;br /&gt;
		userTag_3:{&lt;br /&gt;
			defaultValue: &amp;quot;xx&amp;quot;,&lt;br /&gt;
		},&lt;br /&gt;
		userTag_4:{&lt;br /&gt;
			defaultValue: &amp;quot;xx&amp;quot;,&lt;br /&gt;
		},&lt;br /&gt;
		userTag_5:{&lt;br /&gt;
			defaultValue: &amp;quot;xx&amp;quot;,&lt;br /&gt;
		},&lt;br /&gt;
		userTag_6:{&lt;br /&gt;
			valueSource: &amp;quot;complexFilterCombination&amp;quot;,&lt;br /&gt;
            complexFilterCombinationId: &amp;quot;hash_complexFilterCombinationA&amp;quot;,&lt;br /&gt;
            identifierFieldName: &amp;quot;xxId&amp;quot;&lt;br /&gt;
		},&lt;br /&gt;
		userTag_7:{&lt;br /&gt;
			valueSource: &amp;quot;perParentCombination&amp;quot;,&lt;br /&gt;
            perParentCombinationId: &amp;quot;hash_perParentCombinationA&amp;quot;,&lt;br /&gt;
            identifierFieldName: &amp;quot;sellOfferPlanDeliveryMethodLinkId&amp;quot;&lt;br /&gt;
		},&lt;br /&gt;
        userTag_8: {&lt;br /&gt;
          valueType: 'perParentIdentifier',&lt;br /&gt;
          perParentIdentifierFieldname: 'sellOfferId'&lt;br /&gt;
        },,&lt;br /&gt;
		userTag_9:{&lt;br /&gt;
			defaultValue: &amp;quot;xx&amp;quot;,&lt;br /&gt;
		},&lt;br /&gt;
		userTag_10:{&lt;br /&gt;
			defaultValue: &amp;quot;xx&amp;quot;,&lt;br /&gt;
		},&lt;br /&gt;
		userTag_11:{&lt;br /&gt;
			defaultValue: &amp;quot;xx&amp;quot;,&lt;br /&gt;
		},&lt;br /&gt;
	}&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= Example params sent to backend =&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;JavaScript&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
let paramFromTableOutput = {&lt;br /&gt;
	objType: { //* main objType&lt;br /&gt;
		serviceTag: &amp;quot;ProductManager&amp;quot;,&lt;br /&gt;
		objectType: &amp;quot;Product&amp;quot;&lt;br /&gt;
	},&lt;br /&gt;
    initialLogicalElementId: &amp;quot;uuid_logical_1&amp;quot;,&lt;br /&gt;
    logicalElements: {&lt;br /&gt;
       uuid_logical_1: {&lt;br /&gt;
         logicalElementType: &amp;quot;logical&amp;quot;,&lt;br /&gt;
         previousLogicalElementId: null,&lt;br /&gt;
         nextLogicalElementId: null,&lt;br /&gt;
&lt;br /&gt;
         objType: {&lt;br /&gt;
           serviceTag: &amp;quot;ProductManager&amp;quot;,&lt;br /&gt;
           objectType: &amp;quot;product&amp;quot;&lt;br /&gt;
         },&lt;br /&gt;
         fieldName: &amp;quot;productId&amp;quot;,&lt;br /&gt;
         comparison: &amp;quot;equals&amp;quot;,&lt;br /&gt;
         value: &amp;quot;userTag_1&amp;quot;&lt;br /&gt;
       }&lt;br /&gt;
    },&lt;br /&gt;
	requiredDataFields: { //* fields to create requiredData including linkPaths&lt;br /&gt;
		//* no link, field in main objType&lt;br /&gt;
		hash_requiredDataFieldA: {&lt;br /&gt;
		   linkStepObject: &amp;quot;hash_LinkStepObjectA&amp;quot;,&lt;br /&gt;
		},&lt;br /&gt;
		&lt;br /&gt;
		//* has link&lt;br /&gt;
		hash_requiredDataFieldB: {&lt;br /&gt;
		   linkStepObject: &amp;quot;hash_LinkStepObjectB&amp;quot;,&lt;br /&gt;
//			complexFilterCombinations: [&amp;quot;hash_complexFilterCombinationA&amp;quot;], // not needed because can find from values in each case&lt;br /&gt;
		}&lt;br /&gt;
	&lt;br /&gt;
	},&lt;br /&gt;
	complexFilterCombinations:{&lt;br /&gt;
		hash_complexFilterCombinationA: {&lt;br /&gt;
          objType: {&lt;br /&gt;
            serviceTag: &amp;quot;Locations&amp;quot;,&lt;br /&gt;
            objectType: &amp;quot;locationNode&amp;quot;&lt;br /&gt;
          },&lt;br /&gt;
          initialLogicalElementId: &amp;quot;child_complexFilter_localtionNode&amp;quot;,&lt;br /&gt;
          logicalElements: {&lt;br /&gt;
            child_complexFilter_localtionNode: {&lt;br /&gt;
              logicalElementType: &amp;quot;childComplexFilter&amp;quot;,&lt;br /&gt;
              previousLogicalElementId: null,&lt;br /&gt;
              nextLogicalElementId: null,&lt;br /&gt;
&lt;br /&gt;
              childLogicalElementId: &amp;quot;logical_locationNode&amp;quot;,&lt;br /&gt;
              objType: {&lt;br /&gt;
                serviceTag: &amp;quot;Locations&amp;quot;,&lt;br /&gt;
                objectType: &amp;quot;locationNode&amp;quot;&lt;br /&gt;
              },&lt;br /&gt;
              pathLinkType: {&lt;br /&gt;
                objType: {&lt;br /&gt;
                  serviceTag: &amp;quot;Locations&amp;quot;,&lt;br /&gt;
                  objectType: &amp;quot;locationNode&amp;quot;&lt;br /&gt;
                },&lt;br /&gt;
                relType: {&lt;br /&gt;
                  serviceTag: &amp;quot;Locations&amp;quot;,&lt;br /&gt;
                  relationshipTag: &amp;quot;hasParentLocationNode&amp;quot;&lt;br /&gt;
                },&lt;br /&gt;
                direction: &amp;quot;to&amp;quot;&lt;br /&gt;
              },&lt;br /&gt;
            },&lt;br /&gt;
            logical_locationNode: {&lt;br /&gt;
               logicalElementType: &amp;quot;logical&amp;quot;,&lt;br /&gt;
               previousLogicalElementId: &amp;quot;child_complexFilter_localtionNode&amp;quot;,&lt;br /&gt;
               nextLogicalElementId: null,&lt;br /&gt;
&lt;br /&gt;
               objType: {&lt;br /&gt;
                serviceTag: &amp;quot;Locations&amp;quot;,&lt;br /&gt;
                objectType: &amp;quot;locationNode&amp;quot;&lt;br /&gt;
               },&lt;br /&gt;
               fieldName: &amp;quot;locationNodeId&amp;quot;,&lt;br /&gt;
               comparison: &amp;quot;equals&amp;quot;,&lt;br /&gt;
               value: &amp;quot;userTag_7&amp;quot;&lt;br /&gt;
            }&lt;br /&gt;
         }&lt;br /&gt;
       },&lt;br /&gt;
	},&lt;br /&gt;
	perParentCombinations:{&lt;br /&gt;
		hash_perParentCombinationA: {&lt;br /&gt;
          objType: {&lt;br /&gt;
            serviceTag: &amp;quot;SellOfferPlan&amp;quot;,&lt;br /&gt;
            objectType: &amp;quot;sellOfferPlan&amp;quot;&lt;br /&gt;
          },&lt;br /&gt;
          initialLogicalElementId: &amp;quot;child_complexFilter_1&amp;quot;,&lt;br /&gt;
          logicalElements: {&lt;br /&gt;
            child_complexFilter_1: {&lt;br /&gt;
              logicalElementType: &amp;quot;childComplexFilter&amp;quot;,&lt;br /&gt;
              previousLogicalElementId: null,&lt;br /&gt;
              nextLogicalElementId: null,&lt;br /&gt;
&lt;br /&gt;
              childLogicalElementId: &amp;quot;logical_sellOffer&amp;quot;,&lt;br /&gt;
              objType: {&lt;br /&gt;
                serviceTag: &amp;quot;SellOfferPlan&amp;quot;,&lt;br /&gt;
                objectType: &amp;quot;sellOfferPlan&amp;quot;&lt;br /&gt;
              },&lt;br /&gt;
              pathLinkType: {&lt;br /&gt;
                objType: {&lt;br /&gt;
                  serviceTag: &amp;quot;SellOfferManager&amp;quot;,&lt;br /&gt;
                  objectType: &amp;quot;sellOffer&amp;quot;&lt;br /&gt;
                }, &lt;br /&gt;
                relType: {&lt;br /&gt;
                  serviceTag: &amp;quot;SellOfferManager&amp;quot;,&lt;br /&gt;
                  relationshipTag: &amp;quot;usesSellOfferPlan&amp;quot;&lt;br /&gt;
                },&lt;br /&gt;
                direction: &amp;quot;to&amp;quot;&lt;br /&gt;
              },&lt;br /&gt;
              requestProperties: {&lt;br /&gt;
                tag_orderQuantity: &amp;quot;userTag_9&amp;quot;&lt;br /&gt;
              }&lt;br /&gt;
           },&lt;br /&gt;
           logical_sellOffer: {&lt;br /&gt;
              logicalElementType: &amp;quot;logical&amp;quot;,&lt;br /&gt;
              previousLogicalElementId: &amp;quot;child_complexFilter_1&amp;quot;,&lt;br /&gt;
              nextLogicalElementId: null,&lt;br /&gt;
&lt;br /&gt;
              objType: {&lt;br /&gt;
                serviceTag: &amp;quot;SellOfferManager&amp;quot;,&lt;br /&gt;
                objectType: &amp;quot;sellOffer&amp;quot;&lt;br /&gt;
              },&lt;br /&gt;
              fieldName: &amp;quot;sellOfferId&amp;quot;,&lt;br /&gt;
              comparison: &amp;quot;equals&amp;quot;,&lt;br /&gt;
              value: &amp;quot;userTag_8&amp;quot;&lt;br /&gt;
           }&lt;br /&gt;
        }&lt;br /&gt;
      },&lt;br /&gt;
	},&lt;br /&gt;
	requiredDataLinkStepObjects: {&lt;br /&gt;
		hash_LinkStepObjectA: { //* requiredData no linkPath&lt;br /&gt;
			initialObjType: { //* main objType&lt;br /&gt;
				serviceTag: &amp;quot;ProductManager&amp;quot;,&lt;br /&gt;
				objectType: &amp;quot;Product&amp;quot;&lt;br /&gt;
			},&lt;br /&gt;
			linkSteps: [&amp;quot;hash_linkStepA_1&amp;quot;],&lt;br /&gt;
		},&lt;br /&gt;
        hash_LinkStepObjectB: { // requiredDataFields for finding max orderTotal&lt;br /&gt;
            initialObjType: { //* main objType&lt;br /&gt;
				serviceTag: &amp;quot;ProductManager&amp;quot;,&lt;br /&gt;
				objectType: &amp;quot;Product&amp;quot;&lt;br /&gt;
			},&lt;br /&gt;
			linkSteps: [&amp;quot;hash_linkStepB_1&amp;quot;, &amp;quot;hash_linkStepB_2&amp;quot;, &amp;quot;hash_linkStepB_3&amp;quot;],&lt;br /&gt;
        }&lt;br /&gt;
	},&lt;br /&gt;
	requiredDataLinkSteps: {&lt;br /&gt;
		hash_linkStepA_1:{&lt;br /&gt;
          fieldName: &amp;quot;xxx&amp;quot; &lt;br /&gt;
        },&lt;br /&gt;
        hash_linkStepB_1:{&lt;br /&gt;
          pathLinkType: {&lt;br /&gt;
             objType: {&lt;br /&gt;
               serviceTag: &amp;quot;SellOfferManager&amp;quot;,&lt;br /&gt;
               objectType: &amp;quot;SellOffer&amp;quot;&lt;br /&gt;
             },&lt;br /&gt;
             relType: {&lt;br /&gt;
               serviceTag: &amp;quot;ProductManager&amp;quot;,&lt;br /&gt;
               relationshipTag: &amp;quot;hasSellOffer&amp;quot;&lt;br /&gt;
             },&lt;br /&gt;
             direction: &amp;quot;to&amp;quot;,&lt;br /&gt;
          },&lt;br /&gt;
        }, &lt;br /&gt;
        hash_linkStepB_2: {&lt;br /&gt;
           pathLinkType: {&lt;br /&gt;
             objType: {&lt;br /&gt;
               serviceTag: &amp;quot;OrderPrice&amp;quot;,&lt;br /&gt;
               objectType: &amp;quot;OrderPrice&amp;quot;&lt;br /&gt;
             },&lt;br /&gt;
             relType: {&lt;br /&gt;
               serviceTag: &amp;quot;sellOfferStandard&amp;quot;,&lt;br /&gt;
               relationshipTag: &amp;quot;hasOrderPrice&amp;quot;&lt;br /&gt;
             },&lt;br /&gt;
             direction: &amp;quot;to&amp;quot;,&lt;br /&gt;
           },&lt;br /&gt;
           filterElements: { //* filter in linkPath&lt;br /&gt;
             objType: {&lt;br /&gt;
               serviceTag: &amp;quot;SellOfferManager&amp;quot;,&lt;br /&gt;
               objectType: &amp;quot;SellOffer&amp;quot;&lt;br /&gt;
             },&lt;br /&gt;
             initialLogicalElementId: &amp;quot;logical_sellOffer_in_link&amp;quot;,&lt;br /&gt;
             logicalElements: {&lt;br /&gt;
               logical_sellOffer_in_link: {&lt;br /&gt;
                  logicalElementType: &amp;quot;logical&amp;quot;,&lt;br /&gt;
                  previousLogicalElementId: null,&lt;br /&gt;
                  nextLogicalElementId: null,&lt;br /&gt;
&lt;br /&gt;
                  objType: {&lt;br /&gt;
                    serviceTag: &amp;quot;SellOfferManager&amp;quot;,&lt;br /&gt;
                    objectType: &amp;quot;SellOffer&amp;quot;&lt;br /&gt;
                  },&lt;br /&gt;
                  fieldName: &amp;quot;userId&amp;quot;,&lt;br /&gt;
                  comparison: &amp;quot;equals&amp;quot;,&lt;br /&gt;
                  value: &amp;quot;userTag_2&amp;quot;&lt;br /&gt;
               }&lt;br /&gt;
            }&lt;br /&gt;
          },&lt;br /&gt;
          requestProperties: {&lt;br /&gt;
            tag_deliverTo: &amp;quot;userTag_3&amp;quot;,&lt;br /&gt;
            tag_sellOfferPlan: &amp;quot;userTag_4&amp;quot;,&lt;br /&gt;
            // tag_sellOfferPlanDeliveryMethodLink: &amp;quot;userTag_5&amp;quot;,&lt;br /&gt;
            // tag_sellOfferPlanUserPaymentMethodLink: &amp;quot;userTag_6&amp;quot;&lt;br /&gt;
          }&lt;br /&gt;
        }, &lt;br /&gt;
        hash_linkStepB_3: {&lt;br /&gt;
           fieldName: &amp;quot;zzz&amp;quot;,&lt;br /&gt;
           aggregate: &amp;quot;max&amp;quot;,&lt;br /&gt;
           sortFields: [ //* not sure&lt;br /&gt;
             &amp;quot;hash_sortFieldC&amp;quot;&lt;br /&gt;
           ],&lt;br /&gt;
        }&lt;br /&gt;
	},&lt;br /&gt;
	sortFields: [ //* sortField main ==&amp;gt; not sure&lt;br /&gt;
       &amp;quot;hash_sortFieldA&amp;quot;,&lt;br /&gt;
    &amp;quot;hash_sortFieldB&amp;quot;&lt;br /&gt;
    ],&lt;br /&gt;
    sortFieldObjects: { //* not sure&lt;br /&gt;
      hash_sortFieldA: {&lt;br /&gt;
        fieldName: &amp;quot;xxx&amp;quot;,&lt;br /&gt;
        dataType: &amp;quot;number&amp;quot;&lt;br /&gt;
      },&lt;br /&gt;
      hash_sortFieldB: {&lt;br /&gt;
        fieldName: &amp;quot;yyy&amp;quot;,&lt;br /&gt;
        dataType: &amp;quot;number&amp;quot;&lt;br /&gt;
      },&lt;br /&gt;
      hash_sortFieldC: {&lt;br /&gt;
        fieldName: &amp;quot;zzz&amp;quot;,&lt;br /&gt;
        dataType: &amp;quot;string&amp;quot;&lt;br /&gt;
      }&lt;br /&gt;
    },&lt;br /&gt;
	values: {&lt;br /&gt;
		userTag_1:{&lt;br /&gt;
			value: &amp;quot;xx&amp;quot;,&lt;br /&gt;
		},&lt;br /&gt;
		userTag_2:{&lt;br /&gt;
			value: &amp;quot;yy&amp;quot;,&lt;br /&gt;
		},&lt;br /&gt;
		userTag_3:{&lt;br /&gt;
			valueSource: &amp;quot;complexFilterCombination&amp;quot;,&lt;br /&gt;
            complexFilterCombinationId: &amp;quot;hash_complexFilterCombinationA&amp;quot;,&lt;br /&gt;
            identifierFieldName: &amp;quot;xxId&amp;quot;&lt;br /&gt;
		},&lt;br /&gt;
		userTag_4:{&lt;br /&gt;
			valueSource: &amp;quot;perParentCombination&amp;quot;,&lt;br /&gt;
            perParentCombinationId: &amp;quot;hash_perParentCombinationA&amp;quot;,&lt;br /&gt;
            identifierFieldName: &amp;quot;sellOfferPlanId&amp;quot;&lt;br /&gt;
		},&lt;br /&gt;
		userTag_7: {&lt;br /&gt;
          value: &amp;quot;zz&amp;quot;,&lt;br /&gt;
        },&lt;br /&gt;
        userTag_8: {&lt;br /&gt;
          valueSource: 'perParentIdentifier',&lt;br /&gt;
          perParentIdentifierFieldname: 'sellOfferId'&lt;br /&gt;
        },&lt;br /&gt;
        userTag_9: {&lt;br /&gt;
          value: 2,&lt;br /&gt;
        },&lt;br /&gt;
	 }&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[Category:Working documents| 2025-04-14]]&lt;br /&gt;
[[Category:Working documents - Search Results| 2025-04-14]]&lt;/div&gt;</summary>
		<author><name>Rut</name></author>
	</entry>
	<entry>
		<id>https://izara.io/wiki/index.php?title=2025-04-14_-_Frontend_LinkPath_structure_for_tableOutput&amp;diff=3595</id>
		<title>2025-04-14 - Frontend LinkPath structure for tableOutput</title>
		<link rel="alternate" type="text/html" href="https://izara.io/wiki/index.php?title=2025-04-14_-_Frontend_LinkPath_structure_for_tableOutput&amp;diff=3595"/>
		<updated>2025-11-07T06:32:36Z</updated>

		<summary type="html">&lt;p&gt;Rut: /* Example params sent to backend */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Service - Search Results]]&lt;br /&gt;
&lt;br /&gt;
= Overview =&lt;br /&gt;
&lt;br /&gt;
Structure frontend TableConfig and Output prepare for shared library that creates complexFilter and requestProperties&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Service - Search Results]]&lt;br /&gt;
&lt;br /&gt;
= Overview =&lt;br /&gt;
&lt;br /&gt;
Structure frontend TableConfig and Output prepare for shared library that creates complexFilter and requestProperties&lt;br /&gt;
&lt;br /&gt;
= Example params in tableConfig =&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;JavaScript&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
let paramFromTableOutput = {&lt;br /&gt;
&lt;br /&gt;
	// .. other properties same as sent to backend&lt;br /&gt;
	&lt;br /&gt;
	values: {&lt;br /&gt;
		// values are shared between requestProperties and filter values. This set can be iterated to overwrite values using userTag to identify&lt;br /&gt;
		userTag_1:{&lt;br /&gt;
			defaultValue: &amp;quot;xx&amp;quot;,&lt;br /&gt;
		},&lt;br /&gt;
		userTag_2:{&lt;br /&gt;
			defaultValue: &amp;quot;xx&amp;quot;,&lt;br /&gt;
		},&lt;br /&gt;
		userTag_3:{&lt;br /&gt;
			defaultValue: &amp;quot;xx&amp;quot;,&lt;br /&gt;
		},&lt;br /&gt;
		userTag_4:{&lt;br /&gt;
			defaultValue: &amp;quot;xx&amp;quot;,&lt;br /&gt;
		},&lt;br /&gt;
		userTag_5:{&lt;br /&gt;
			defaultValue: &amp;quot;xx&amp;quot;,&lt;br /&gt;
		},&lt;br /&gt;
		userTag_6:{&lt;br /&gt;
			valueSource: &amp;quot;complexFilterCombination&amp;quot;,&lt;br /&gt;
            complexFilterCombinationId: &amp;quot;hash_complexFilterCombinationA&amp;quot;,&lt;br /&gt;
            identifierFieldName: &amp;quot;xxId&amp;quot;&lt;br /&gt;
		},&lt;br /&gt;
		userTag_7:{&lt;br /&gt;
			valueSource: &amp;quot;perParentCombination&amp;quot;,&lt;br /&gt;
            perParentCombinationId: &amp;quot;hash_perParentCombinationA&amp;quot;,&lt;br /&gt;
            identifierFieldName: &amp;quot;sellOfferPlanDeliveryMethodLinkId&amp;quot;&lt;br /&gt;
		},&lt;br /&gt;
        userTag_8: {&lt;br /&gt;
          valueType: 'perParentIdentifier',&lt;br /&gt;
          perParentIdentifierFieldname: 'sellOfferId'&lt;br /&gt;
        },,&lt;br /&gt;
		userTag_9:{&lt;br /&gt;
			defaultValue: &amp;quot;xx&amp;quot;,&lt;br /&gt;
		},&lt;br /&gt;
		userTag_10:{&lt;br /&gt;
			defaultValue: &amp;quot;xx&amp;quot;,&lt;br /&gt;
		},&lt;br /&gt;
		userTag_11:{&lt;br /&gt;
			defaultValue: &amp;quot;xx&amp;quot;,&lt;br /&gt;
		},&lt;br /&gt;
	}&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= Example params sent to backend =&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;JavaScript&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
let paramFromTableOutput = {&lt;br /&gt;
	objType: { //* main objType&lt;br /&gt;
		serviceTag: &amp;quot;ProductManager&amp;quot;,&lt;br /&gt;
		objectType: &amp;quot;Product&amp;quot;&lt;br /&gt;
	},&lt;br /&gt;
    initialLogicalElementId: &amp;quot;uuid_logical_1&amp;quot;,&lt;br /&gt;
    logicalElements: {&lt;br /&gt;
       uuid_logical_1: {&lt;br /&gt;
         logicalElementType: &amp;quot;logical&amp;quot;,&lt;br /&gt;
         previousLogicalElementId: null,&lt;br /&gt;
         nextLogicalElementId: null,&lt;br /&gt;
&lt;br /&gt;
         objType: {&lt;br /&gt;
           serviceTag: &amp;quot;ProductManager&amp;quot;,&lt;br /&gt;
           objectType: &amp;quot;product&amp;quot;&lt;br /&gt;
         },&lt;br /&gt;
         fieldName: &amp;quot;productId&amp;quot;,&lt;br /&gt;
         comparison: &amp;quot;equals&amp;quot;,&lt;br /&gt;
         value: &amp;quot;userTag_1&amp;quot;&lt;br /&gt;
       }&lt;br /&gt;
    },&lt;br /&gt;
	requiredDataFields: { //* fields to create requiredData including linkPaths&lt;br /&gt;
		//* no link, field in main objType&lt;br /&gt;
		hash_requiredDataFieldA: {&lt;br /&gt;
		   linkStepObject: &amp;quot;hash_LinkStepObjectA&amp;quot;,&lt;br /&gt;
		},&lt;br /&gt;
		&lt;br /&gt;
		//* has link&lt;br /&gt;
		hash_requiredDataFieldB: {&lt;br /&gt;
		   linkStepObject: &amp;quot;hash_LinkStepObjectB&amp;quot;,&lt;br /&gt;
			complexFilterCombinations: [&amp;quot;hash_complexFilterCombinationA&amp;quot;],&lt;br /&gt;
		}&lt;br /&gt;
	&lt;br /&gt;
	},&lt;br /&gt;
	complexFilterCombinations:{&lt;br /&gt;
		hash_complexFilterCombinationA: {&lt;br /&gt;
          objType: {&lt;br /&gt;
            serviceTag: &amp;quot;Locations&amp;quot;,&lt;br /&gt;
            objectType: &amp;quot;locationNode&amp;quot;&lt;br /&gt;
          },&lt;br /&gt;
          initialLogicalElementId: &amp;quot;child_complexFilter_localtionNode&amp;quot;,&lt;br /&gt;
          logicalElements: {&lt;br /&gt;
            child_complexFilter_localtionNode: {&lt;br /&gt;
              logicalElementType: &amp;quot;childComplexFilter&amp;quot;,&lt;br /&gt;
              previousLogicalElementId: null,&lt;br /&gt;
              nextLogicalElementId: null,&lt;br /&gt;
&lt;br /&gt;
              childLogicalElementId: &amp;quot;logical_locationNode&amp;quot;,&lt;br /&gt;
              objType: {&lt;br /&gt;
                serviceTag: &amp;quot;Locations&amp;quot;,&lt;br /&gt;
                objectType: &amp;quot;locationNode&amp;quot;&lt;br /&gt;
              },&lt;br /&gt;
              pathLinkType: {&lt;br /&gt;
                objType: {&lt;br /&gt;
                  serviceTag: &amp;quot;Locations&amp;quot;,&lt;br /&gt;
                  objectType: &amp;quot;locationNode&amp;quot;&lt;br /&gt;
                },&lt;br /&gt;
                relType: {&lt;br /&gt;
                  serviceTag: &amp;quot;Locations&amp;quot;,&lt;br /&gt;
                  relationshipTag: &amp;quot;hasParentLocationNode&amp;quot;&lt;br /&gt;
                },&lt;br /&gt;
                direction: &amp;quot;to&amp;quot;&lt;br /&gt;
              },&lt;br /&gt;
            },&lt;br /&gt;
            logical_locationNode: {&lt;br /&gt;
               logicalElementType: &amp;quot;logical&amp;quot;,&lt;br /&gt;
               previousLogicalElementId: &amp;quot;child_complexFilter_localtionNode&amp;quot;,&lt;br /&gt;
               nextLogicalElementId: null,&lt;br /&gt;
&lt;br /&gt;
               objType: {&lt;br /&gt;
                serviceTag: &amp;quot;Locations&amp;quot;,&lt;br /&gt;
                objectType: &amp;quot;locationNode&amp;quot;&lt;br /&gt;
               },&lt;br /&gt;
               fieldName: &amp;quot;locationNodeId&amp;quot;,&lt;br /&gt;
               comparison: &amp;quot;equals&amp;quot;,&lt;br /&gt;
               value: &amp;quot;userTag_7&amp;quot;&lt;br /&gt;
            }&lt;br /&gt;
         }&lt;br /&gt;
       },&lt;br /&gt;
	},&lt;br /&gt;
	perParentCombinations:{&lt;br /&gt;
		hash_perParentCombinationA: {&lt;br /&gt;
          objType: {&lt;br /&gt;
            serviceTag: &amp;quot;SellOfferPlan&amp;quot;,&lt;br /&gt;
            objectType: &amp;quot;sellOfferPlan&amp;quot;&lt;br /&gt;
          },&lt;br /&gt;
          initialLogicalElementId: &amp;quot;child_complexFilter_1&amp;quot;,&lt;br /&gt;
          logicalElements: {&lt;br /&gt;
            child_complexFilter_1: {&lt;br /&gt;
              logicalElementType: &amp;quot;childComplexFilter&amp;quot;,&lt;br /&gt;
              previousLogicalElementId: null,&lt;br /&gt;
              nextLogicalElementId: null,&lt;br /&gt;
&lt;br /&gt;
              childLogicalElementId: &amp;quot;logical_sellOffer&amp;quot;,&lt;br /&gt;
              objType: {&lt;br /&gt;
                serviceTag: &amp;quot;SellOfferPlan&amp;quot;,&lt;br /&gt;
                objectType: &amp;quot;sellOfferPlan&amp;quot;&lt;br /&gt;
              },&lt;br /&gt;
              pathLinkType: {&lt;br /&gt;
                objType: {&lt;br /&gt;
                  serviceTag: &amp;quot;SellOfferManager&amp;quot;,&lt;br /&gt;
                  objectType: &amp;quot;sellOffer&amp;quot;&lt;br /&gt;
                }, &lt;br /&gt;
                relType: {&lt;br /&gt;
                  serviceTag: &amp;quot;SellOfferManager&amp;quot;,&lt;br /&gt;
                  relationshipTag: &amp;quot;usesSellOfferPlan&amp;quot;&lt;br /&gt;
                },&lt;br /&gt;
                direction: &amp;quot;to&amp;quot;&lt;br /&gt;
              },&lt;br /&gt;
              requestProperties: {&lt;br /&gt;
                tag_orderQuantity: &amp;quot;userTag_9&amp;quot;&lt;br /&gt;
              }&lt;br /&gt;
           },&lt;br /&gt;
           logical_sellOffer: {&lt;br /&gt;
              logicalElementType: &amp;quot;logical&amp;quot;,&lt;br /&gt;
              previousLogicalElementId: &amp;quot;child_complexFilter_1&amp;quot;,&lt;br /&gt;
              nextLogicalElementId: null,&lt;br /&gt;
&lt;br /&gt;
              objType: {&lt;br /&gt;
                serviceTag: &amp;quot;SellOfferManager&amp;quot;,&lt;br /&gt;
                objectType: &amp;quot;sellOffer&amp;quot;&lt;br /&gt;
              },&lt;br /&gt;
              fieldName: &amp;quot;sellOfferId&amp;quot;,&lt;br /&gt;
              comparison: &amp;quot;equals&amp;quot;,&lt;br /&gt;
              value: &amp;quot;userTag_8&amp;quot;&lt;br /&gt;
           }&lt;br /&gt;
        }&lt;br /&gt;
      },&lt;br /&gt;
	},&lt;br /&gt;
	requiredDataLinkStepObjects: {&lt;br /&gt;
		hash_LinkStepObjectA: { //* requiredData no linkPath&lt;br /&gt;
			initialObjType: { //* main objType&lt;br /&gt;
				serviceTag: &amp;quot;ProductManager&amp;quot;,&lt;br /&gt;
				objectType: &amp;quot;Product&amp;quot;&lt;br /&gt;
			},&lt;br /&gt;
			linkSteps: [&amp;quot;hash_linkStepA_1&amp;quot;],&lt;br /&gt;
		},&lt;br /&gt;
        hash_LinkStepObjectB: { // requiredDataFields for finding max orderTotal&lt;br /&gt;
            initialObjType: { //* main objType&lt;br /&gt;
				serviceTag: &amp;quot;ProductManager&amp;quot;,&lt;br /&gt;
				objectType: &amp;quot;Product&amp;quot;&lt;br /&gt;
			},&lt;br /&gt;
			linkSteps: [&amp;quot;hash_linkStepB_1&amp;quot;, &amp;quot;hash_linkStepB_2&amp;quot;, &amp;quot;hash_linkStepB_3&amp;quot;],&lt;br /&gt;
        }&lt;br /&gt;
	},&lt;br /&gt;
	requiredDataLinkSteps: {&lt;br /&gt;
		hash_linkStepA_1:{&lt;br /&gt;
          fieldName: &amp;quot;xxx&amp;quot; &lt;br /&gt;
        },&lt;br /&gt;
        hash_linkStepB_1:{&lt;br /&gt;
          pathLinkType: {&lt;br /&gt;
             objType: {&lt;br /&gt;
               serviceTag: &amp;quot;SellOfferManager&amp;quot;,&lt;br /&gt;
               objectType: &amp;quot;SellOffer&amp;quot;&lt;br /&gt;
             },&lt;br /&gt;
             relType: {&lt;br /&gt;
               serviceTag: &amp;quot;ProductManager&amp;quot;,&lt;br /&gt;
               relationshipTag: &amp;quot;hasSellOffer&amp;quot;&lt;br /&gt;
             },&lt;br /&gt;
             direction: &amp;quot;to&amp;quot;,&lt;br /&gt;
          },&lt;br /&gt;
        }, &lt;br /&gt;
        hash_linkStepB_2: {&lt;br /&gt;
           pathLinkType: {&lt;br /&gt;
             objType: {&lt;br /&gt;
               serviceTag: &amp;quot;OrderPrice&amp;quot;,&lt;br /&gt;
               objectType: &amp;quot;OrderPrice&amp;quot;&lt;br /&gt;
             },&lt;br /&gt;
             relType: {&lt;br /&gt;
               serviceTag: &amp;quot;sellOfferStandard&amp;quot;,&lt;br /&gt;
               relationshipTag: &amp;quot;hasOrderPrice&amp;quot;&lt;br /&gt;
             },&lt;br /&gt;
             direction: &amp;quot;to&amp;quot;,&lt;br /&gt;
           },&lt;br /&gt;
           filterElements: { //* filter in linkPath&lt;br /&gt;
             objType: {&lt;br /&gt;
               serviceTag: &amp;quot;SellOfferManager&amp;quot;,&lt;br /&gt;
               objectType: &amp;quot;SellOffer&amp;quot;&lt;br /&gt;
             },&lt;br /&gt;
             initialLogicalElementId: &amp;quot;logical_sellOffer_in_link&amp;quot;,&lt;br /&gt;
             logicalElements: {&lt;br /&gt;
               logical_sellOffer_in_link: {&lt;br /&gt;
                  logicalElementType: &amp;quot;logical&amp;quot;,&lt;br /&gt;
                  previousLogicalElementId: null,&lt;br /&gt;
                  nextLogicalElementId: null,&lt;br /&gt;
&lt;br /&gt;
                  objType: {&lt;br /&gt;
                    serviceTag: &amp;quot;SellOfferManager&amp;quot;,&lt;br /&gt;
                    objectType: &amp;quot;SellOffer&amp;quot;&lt;br /&gt;
                  },&lt;br /&gt;
                  fieldName: &amp;quot;userId&amp;quot;,&lt;br /&gt;
                  comparison: &amp;quot;equals&amp;quot;,&lt;br /&gt;
                  value: &amp;quot;userTag_2&amp;quot;&lt;br /&gt;
               }&lt;br /&gt;
            }&lt;br /&gt;
          },&lt;br /&gt;
          requestProperties: {&lt;br /&gt;
            tag_deliverTo: &amp;quot;userTag_3&amp;quot;,&lt;br /&gt;
            tag_sellOfferPlan: &amp;quot;userTag_4&amp;quot;,&lt;br /&gt;
            // tag_sellOfferPlanDeliveryMethodLink: &amp;quot;userTag_5&amp;quot;,&lt;br /&gt;
            // tag_sellOfferPlanUserPaymentMethodLink: &amp;quot;userTag_6&amp;quot;&lt;br /&gt;
          }&lt;br /&gt;
        }, &lt;br /&gt;
        hash_linkStepB_3: {&lt;br /&gt;
           fieldName: &amp;quot;zzz&amp;quot;,&lt;br /&gt;
           aggregate: &amp;quot;max&amp;quot;,&lt;br /&gt;
           sortFields: [ //* not sure&lt;br /&gt;
             &amp;quot;hash_sortFieldC&amp;quot;&lt;br /&gt;
           ],&lt;br /&gt;
        }&lt;br /&gt;
	},&lt;br /&gt;
	sortFields: [ //* sortField main ==&amp;gt; not sure&lt;br /&gt;
       &amp;quot;hash_sortFieldA&amp;quot;,&lt;br /&gt;
    &amp;quot;hash_sortFieldB&amp;quot;&lt;br /&gt;
    ],&lt;br /&gt;
    sortFieldObjects: { //* not sure&lt;br /&gt;
      hash_sortFieldA: {&lt;br /&gt;
        fieldName: &amp;quot;xxx&amp;quot;,&lt;br /&gt;
        dataType: &amp;quot;number&amp;quot;&lt;br /&gt;
      },&lt;br /&gt;
      hash_sortFieldB: {&lt;br /&gt;
        fieldName: &amp;quot;yyy&amp;quot;,&lt;br /&gt;
        dataType: &amp;quot;number&amp;quot;&lt;br /&gt;
      },&lt;br /&gt;
      hash_sortFieldC: {&lt;br /&gt;
        fieldName: &amp;quot;zzz&amp;quot;,&lt;br /&gt;
        dataType: &amp;quot;string&amp;quot;&lt;br /&gt;
      }&lt;br /&gt;
    },&lt;br /&gt;
	values: {&lt;br /&gt;
		userTag_1:{&lt;br /&gt;
			value: &amp;quot;xx&amp;quot;,&lt;br /&gt;
		},&lt;br /&gt;
		userTag_2:{&lt;br /&gt;
			value: &amp;quot;yy&amp;quot;,&lt;br /&gt;
		},&lt;br /&gt;
		userTag_3:{&lt;br /&gt;
			valueSource: &amp;quot;complexFilterCombination&amp;quot;,&lt;br /&gt;
            complexFilterCombinationId: &amp;quot;hash_complexFilterCombinationA&amp;quot;,&lt;br /&gt;
            identifierFieldName: &amp;quot;xxId&amp;quot;&lt;br /&gt;
		},&lt;br /&gt;
		userTag_4:{&lt;br /&gt;
			valueSource: &amp;quot;perParentCombination&amp;quot;,&lt;br /&gt;
            perParentCombinationId: &amp;quot;hash_perParentCombinationA&amp;quot;,&lt;br /&gt;
            identifierFieldName: &amp;quot;sellOfferPlanId&amp;quot;&lt;br /&gt;
		},&lt;br /&gt;
		userTag_7: {&lt;br /&gt;
          value: &amp;quot;zz&amp;quot;,&lt;br /&gt;
        },&lt;br /&gt;
        userTag_8: {&lt;br /&gt;
          valueSource: 'perParentIdentifier',&lt;br /&gt;
          perParentIdentifierFieldname: 'sellOfferId'&lt;br /&gt;
        },&lt;br /&gt;
        userTag_9: {&lt;br /&gt;
          value: 2,&lt;br /&gt;
        },&lt;br /&gt;
	 }&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[Category:Working documents| 2025-04-14]]&lt;br /&gt;
[[Category:Working documents - Search Results| 2025-04-14]]&lt;/div&gt;</summary>
		<author><name>Rut</name></author>
	</entry>
	<entry>
		<id>https://izara.io/wiki/index.php?title=2025-08-21_-_ComplexFilter_SearchResult_Frontend_structure&amp;diff=3535</id>
		<title>2025-08-21 - ComplexFilter SearchResult Frontend structure</title>
		<link rel="alternate" type="text/html" href="https://izara.io/wiki/index.php?title=2025-08-21_-_ComplexFilter_SearchResult_Frontend_structure&amp;diff=3535"/>
		<updated>2025-08-28T10:13:12Z</updated>

		<summary type="html">&lt;p&gt;Rut: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Service - Complex Filter]]&lt;br /&gt;
&lt;br /&gt;
[[Service - Search Results]]&lt;br /&gt;
&lt;br /&gt;
[[2024-06-26 - SearchResult linkpath]]&lt;br /&gt;
&lt;br /&gt;
[[2024-11-28 - OrderPrice using linkPath flows]]&lt;br /&gt;
&lt;br /&gt;
= Overview =&lt;br /&gt;
&lt;br /&gt;
Creating visual representation of ComplexFilters for allowing frontend to create and manage.&lt;br /&gt;
&lt;br /&gt;
= Examples =&lt;br /&gt;
&lt;br /&gt;
* Main complex filter used in tableData&lt;br /&gt;
* filters used at each level of LinkSteps in requiredData/Linkpaths&lt;br /&gt;
* perParentComplexFilters and combinationComplexFilters used in LinkPaths&lt;br /&gt;
* complexFilters used in categoryLinks&lt;br /&gt;
&lt;br /&gt;
= Considerations =&lt;br /&gt;
&lt;br /&gt;
* Want to be able to achieve all features of complexFilters including childComplexFilters, grouping and (and/or) operations&lt;br /&gt;
* all elementTypes such as identifier/translateIds/traversals&lt;br /&gt;
* tableOutput currently separates each filterDataField to have it's own filter path&lt;br /&gt;
* operations and grouping or operations can happen at any childComplexFilter level and between filters&lt;br /&gt;
&lt;br /&gt;
= Option 1: OrGroups =&lt;br /&gt;
&lt;br /&gt;
Attempted this approach but became too complex and messy when creating multiple levels of grouped and/or statements.&lt;br /&gt;
&lt;br /&gt;
* have an array of filters, each is a single path with an optional array of filterElements at each step&lt;br /&gt;
* each filter path sets its orGroup&lt;br /&gt;
* orGroups can be child of another orGroup, child orGroups only exist/group underneath their parent hierarchy&lt;br /&gt;
* orGroups group all filter paths using an OR operator&lt;br /&gt;
* however multiple filters at the same level within an orGroup (with a single filter path are considered the same orGroup) use AND operator&lt;br /&gt;
* if same level filters need to be separated by OR need to be separate *****check with Praew*****&lt;br /&gt;
&lt;br /&gt;
== Implementation ==&lt;br /&gt;
&lt;br /&gt;
Every frontend complexFilter case must:&lt;br /&gt;
&lt;br /&gt;
* allow adding multiple filter paths&lt;br /&gt;
* have orGroup hierarchy for filter paths&lt;br /&gt;
&lt;br /&gt;
= Option 2: OperationFilters =&lt;br /&gt;
&lt;br /&gt;
An alternative method of building and editing complexFilters on frontend could be building up a chain of operationFilters, this will closely resembe the request structure of processComplexFilter&lt;br /&gt;
&lt;br /&gt;
* starts with the initial filter, choose type, eg logical or operation&lt;br /&gt;
* operation filter must go into each side and set with filter type and settings to use&lt;br /&gt;
* each side can then be an operation or a childComplexFilter&lt;br /&gt;
* adding operations chain filters at the same level&lt;br /&gt;
* childComplexFilters create a new level with a link&lt;br /&gt;
* Each operation sets it's operator (or/and)&lt;br /&gt;
* can open a new group (opening bracket) and close a group (closing bracket) at any point&lt;br /&gt;
* validate all groups at each level are opened and closed&lt;br /&gt;
* probably validate have at least one filterElement before closing&lt;br /&gt;
&lt;br /&gt;
== tableConfig ==&lt;br /&gt;
&lt;br /&gt;
* Build a single filter structure&lt;br /&gt;
* filterDataFields point to a filterElement, with additional settings if needed (eg identifying a value inside a traversal filterElement)&lt;br /&gt;
* defaultValue is moved from filterDataField to filterElement, if a filterDataField sets the value then the default filterElement value is shown first and the filterDataField can adjust it after loading&lt;br /&gt;
* if adjust the filter structure, need to go through all filterDataFields to see if they need to be updated, eg filterElement they link to is removed, maybe set to null and validate when saving tableConfig&lt;br /&gt;
&lt;br /&gt;
== notes ==&lt;br /&gt;
&lt;br /&gt;
* separate validate uiFilter from saving final filterElement structure, so can validate while building the filter&lt;br /&gt;
* have a breadcrumb or other representation of the childComplexFilter steps that can be navigated through&lt;br /&gt;
* each childComplexFilter step have a list of the added uiFilterElements, each can be clicked on to edit (or list them all)&lt;br /&gt;
* when click on a childComplexFilter move to it's level of uiFilterElements&lt;br /&gt;
* whenever adding a component we input the previous element which allows us to shuffle references&lt;br /&gt;
* cannot add closeBracket when previousLogicalElementId type openBracket, childComplexFilter, or null&lt;br /&gt;
* must choose operator when previousLogicalElementId type not openBracket, childComplexFilter, or null&lt;br /&gt;
&lt;br /&gt;
Validate:&lt;br /&gt;
* all opening brackets at each level have equal number of closing brackets&lt;br /&gt;
* all element types have required data&lt;br /&gt;
* all childComplexFilters have at least 1 uiFilterElement (childLogicalElementId != null)&lt;br /&gt;
&lt;br /&gt;
== Example ==&lt;br /&gt;
&lt;br /&gt;
* Click to buildFilter, no filterElements exists&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;js&amp;quot;&amp;gt;&lt;br /&gt;
let exampleData = {&lt;br /&gt;
	objType {&lt;br /&gt;
		objectType: &amp;quot;product&amp;quot;,&lt;br /&gt;
		serviceTag: &amp;quot;productManager&amp;quot;&lt;br /&gt;
    },&lt;br /&gt;
    &lt;br /&gt;
    initialLogicalElementId: null,&lt;br /&gt;
	logicalElements: {&lt;br /&gt;
	}&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* add uuid_openBracket_1&lt;br /&gt;
* previousLogicalElementId = null&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;js&amp;quot;&amp;gt;&lt;br /&gt;
let exampleData = {&lt;br /&gt;
	objType {&lt;br /&gt;
		objectType: &amp;quot;product&amp;quot;,&lt;br /&gt;
		serviceTag: &amp;quot;productManager&amp;quot;&lt;br /&gt;
    },&lt;br /&gt;
    &lt;br /&gt;
    initialLogicalElementId: uuid_openBracket_1,&lt;br /&gt;
	logicalElements: {&lt;br /&gt;
		uuid_openBracket_1: {&lt;br /&gt;
			logicalElementType: &amp;quot;openBracket&amp;quot;,&lt;br /&gt;
			previousLogicalElementId: null,&lt;br /&gt;
			nextLogicalElementId: null,&lt;br /&gt;
		},&lt;br /&gt;
	}&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* add uuid_childComplex_1&lt;br /&gt;
* previousLogicalElementId = uuid_openBracket_1&lt;br /&gt;
* must choose link detail when adding childComplexFilter (relType/direction)&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;js&amp;quot;&amp;gt;&lt;br /&gt;
let exampleData = {&lt;br /&gt;
	objType {&lt;br /&gt;
		objectType: &amp;quot;product&amp;quot;,&lt;br /&gt;
		serviceTag: &amp;quot;productManager&amp;quot;&lt;br /&gt;
    },&lt;br /&gt;
    &lt;br /&gt;
    initialLogicalElementId: uuid_openBracket_1,&lt;br /&gt;
	logicalElements: {&lt;br /&gt;
		uuid_openBracket_1: {&lt;br /&gt;
			logicalElementType: &amp;quot;openBracket&amp;quot;,&lt;br /&gt;
			previousLogicalElementId: null,&lt;br /&gt;
			nextLogicalElementId: uuid_childComplex_1,&lt;br /&gt;
		},&lt;br /&gt;
		uuid_childComplex_1: {&lt;br /&gt;
			logicalElementType: &amp;quot;childComplexFilter&amp;quot;,&lt;br /&gt;
			previousLogicalElementId: uuid_openBracket_1,&lt;br /&gt;
			nextLogicalElementId: null,&lt;br /&gt;
			childLogicalElementId: null,&lt;br /&gt;
			relType: {&lt;br /&gt;
				relationshipTag: &amp;quot;hasSellOffer&amp;quot;,&lt;br /&gt;
				serviceTag: &amp;quot;SellOfferManager&amp;quot;&lt;br /&gt;
			},&lt;br /&gt;
			direction: &amp;quot;from&amp;quot;&lt;br /&gt;
		},&lt;br /&gt;
	}&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* add uuid_childComplex_2&lt;br /&gt;
* OR operator&lt;br /&gt;
* previousLogicalElementId = uuid_childComplex_1&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;js&amp;quot;&amp;gt;&lt;br /&gt;
let exampleData = {&lt;br /&gt;
	objType {&lt;br /&gt;
		objectType: &amp;quot;product&amp;quot;,&lt;br /&gt;
		serviceTag: &amp;quot;productManager&amp;quot;&lt;br /&gt;
    },&lt;br /&gt;
    &lt;br /&gt;
    initialLogicalElementId: uuid_openBracket_1,&lt;br /&gt;
	logicalElements: {&lt;br /&gt;
		uuid_openBracket_1: { // level: product&lt;br /&gt;
			logicalElementType: &amp;quot;openBracket&amp;quot;,&lt;br /&gt;
			previousLogicalElementId: null,&lt;br /&gt;
			nextLogicalElementId: uuid_childComplex_1,&lt;br /&gt;
		},&lt;br /&gt;
		uuid_childComplex_1: { // level: product&lt;br /&gt;
			logicalElementType: &amp;quot;childComplexFilter&amp;quot;,&lt;br /&gt;
			previousLogicalElementId: uuid_openBracket_1,&lt;br /&gt;
			nextLogicalElementId: uuid_operation_1,&lt;br /&gt;
			childLogicalElementId: null,&lt;br /&gt;
			relType: {&lt;br /&gt;
				relationshipTag: &amp;quot;hasSellOffer&amp;quot;,&lt;br /&gt;
				serviceTag: &amp;quot;SellOfferManager&amp;quot;&lt;br /&gt;
			},&lt;br /&gt;
			direction: &amp;quot;from&amp;quot;&lt;br /&gt;
		},&lt;br /&gt;
		uuid_operation_1: { // level: product&lt;br /&gt;
			logicalElementType: &amp;quot;operation&amp;quot;,&lt;br /&gt;
			previousLogicalElementId: &amp;quot;uuid_childComplex_1&amp;quot;,&lt;br /&gt;
			nextLogicalElementId: &amp;quot;uuid_childComplex_2&amp;quot;,&lt;br /&gt;
			operation: &amp;quot;or&amp;quot;&lt;br /&gt;
		},&lt;br /&gt;
		uuid_childComplex_2: { // level: product&lt;br /&gt;
			logicalElementType: &amp;quot;childComplexFilter&amp;quot;,&lt;br /&gt;
			previousLogicalElementId: uuid_operation_1,&lt;br /&gt;
			nextLogicalElementId: null,&lt;br /&gt;
			childLogicalElementId: null,&lt;br /&gt;
			relType: {&lt;br /&gt;
				relationshipTag: &amp;quot;hasSellOffer&amp;quot;,&lt;br /&gt;
				serviceTag: &amp;quot;SellOfferManager&amp;quot;&lt;br /&gt;
			},&lt;br /&gt;
			direction: &amp;quot;from&amp;quot;&lt;br /&gt;
		},&lt;br /&gt;
	}&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* add uuid_logical_1&lt;br /&gt;
* previousLogicalElementId = uuid_childComplex_1&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;js&amp;quot;&amp;gt;&lt;br /&gt;
let exampleData = {&lt;br /&gt;
	objType {&lt;br /&gt;
		objectType: &amp;quot;product&amp;quot;,&lt;br /&gt;
		serviceTag: &amp;quot;productManager&amp;quot;&lt;br /&gt;
    },&lt;br /&gt;
    &lt;br /&gt;
    initialLogicalElementId: uuid_openBracket_1,&lt;br /&gt;
	logicalElements: {&lt;br /&gt;
		uuid_openBracket_1: { // level: product&lt;br /&gt;
			logicalElementType: &amp;quot;openBracket&amp;quot;,&lt;br /&gt;
			previousLogicalElementId: null,&lt;br /&gt;
			nextLogicalElementId: uuid_childComplex_1,&lt;br /&gt;
		},&lt;br /&gt;
		uuid_childComplex_1: { // level: product&lt;br /&gt;
			logicalElementType: &amp;quot;childComplexFilter&amp;quot;,&lt;br /&gt;
			previousLogicalElementId: uuid_openBracket_1,&lt;br /&gt;
			nextLogicalElementId: uuid_operation_1,&lt;br /&gt;
			childLogicalElementId: uuid_logical_1,&lt;br /&gt;
			relType: {&lt;br /&gt;
				relationshipTag: &amp;quot;hasSellOffer&amp;quot;,&lt;br /&gt;
				serviceTag: &amp;quot;SellOfferManager&amp;quot;&lt;br /&gt;
			},&lt;br /&gt;
			direction: &amp;quot;from&amp;quot;&lt;br /&gt;
		},&lt;br /&gt;
		uuid_operation_1: { // level: product&lt;br /&gt;
    		logicalElementType: &amp;quot;operation&amp;quot;,&lt;br /&gt;
			previousLogicalElementId: &amp;quot;uuid_childComplex_1&amp;quot;,&lt;br /&gt;
			nextLogicalElementId: &amp;quot;uuid_childComplex_2&amp;quot;,&lt;br /&gt;
			operation: &amp;quot;or&amp;quot;&lt;br /&gt;
		},&lt;br /&gt;
		uuid_childComplex_2: { // level: product&lt;br /&gt;
			logicalElementType: &amp;quot;childComplexFilter&amp;quot;,&lt;br /&gt;
			previousLogicalElementId: uuid_operation_1,&lt;br /&gt;
			nextLogicalElementId: null,&lt;br /&gt;
			childLogicalElementId: null,&lt;br /&gt;
			relType: {&lt;br /&gt;
				relationshipTag: &amp;quot;hasSellOffer&amp;quot;,&lt;br /&gt;
				serviceTag: &amp;quot;SellOfferManager&amp;quot;&lt;br /&gt;
			},&lt;br /&gt;
			direction: &amp;quot;from&amp;quot;&lt;br /&gt;
		},&lt;br /&gt;
		uuid_logical_1: { // level: sellOffer&lt;br /&gt;
			logicalElementType: &amp;quot;logical&amp;quot;,&lt;br /&gt;
			previousLogicalElementId: &amp;quot;uuid_childComplex_1&amp;quot;,&lt;br /&gt;
			nextLogicalElementId: &amp;quot;null&amp;quot;,&lt;br /&gt;
            fieldName: &amp;quot;fieldx&amp;quot;,&lt;br /&gt;
            comparison: &amp;quot;greaterThan&amp;quot;,&lt;br /&gt;
            defaultValue: 50&lt;br /&gt;
		},&lt;br /&gt;
	}&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* add uuid_logical_2&lt;br /&gt;
* previousLogicalElementId = uuid_childComplex_1&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;js&amp;quot;&amp;gt;&lt;br /&gt;
let exampleData = {&lt;br /&gt;
	objType {&lt;br /&gt;
		objectType: &amp;quot;product&amp;quot;,&lt;br /&gt;
		serviceTag: &amp;quot;productManager&amp;quot;&lt;br /&gt;
    },&lt;br /&gt;
    &lt;br /&gt;
    initialLogicalElementId: uuid_openBracket_1,&lt;br /&gt;
	logicalElements: {&lt;br /&gt;
		uuid_openBracket_1: { // level: product&lt;br /&gt;
			logicalElementType: &amp;quot;openBracket&amp;quot;,&lt;br /&gt;
			previousLogicalElementId: null,&lt;br /&gt;
			nextLogicalElementId: uuid_childComplex_1,&lt;br /&gt;
		},&lt;br /&gt;
		uuid_childComplex_1: { // level: product&lt;br /&gt;
			logicalElementType: &amp;quot;childComplexFilter&amp;quot;,&lt;br /&gt;
			previousLogicalElementId: uuid_openBracket_1,&lt;br /&gt;
			nextLogicalElementId: uuid_operation_1,&lt;br /&gt;
			childLogicalElementId: uuid_logical_1,&lt;br /&gt;
			relType: {&lt;br /&gt;
				relationshipTag: &amp;quot;hasSellOffer&amp;quot;,&lt;br /&gt;
				serviceTag: &amp;quot;SellOfferManager&amp;quot;&lt;br /&gt;
			},&lt;br /&gt;
			direction: &amp;quot;from&amp;quot;&lt;br /&gt;
		},&lt;br /&gt;
		uuid_operation_1: { // level: product&lt;br /&gt;
    		logicalElementType: &amp;quot;operation&amp;quot;,&lt;br /&gt;
			previousLogicalElementId: &amp;quot;uuid_childComplex_1&amp;quot;,&lt;br /&gt;
			nextLogicalElementId: &amp;quot;uuid_childComplex_2&amp;quot;,&lt;br /&gt;
			operation: &amp;quot;or&amp;quot;&lt;br /&gt;
		},&lt;br /&gt;
		uuid_childComplex_2: { // level: product&lt;br /&gt;
			logicalElementType: &amp;quot;childComplexFilter&amp;quot;,&lt;br /&gt;
			previousLogicalElementId: uuid_operation_1,&lt;br /&gt;
			nextLogicalElementId: null,&lt;br /&gt;
			childLogicalElementId: uuid_logical_2,&lt;br /&gt;
			relType: {&lt;br /&gt;
				relationshipTag: &amp;quot;hasSellOffer&amp;quot;,&lt;br /&gt;
				serviceTag: &amp;quot;SellOfferManager&amp;quot;&lt;br /&gt;
			},&lt;br /&gt;
			direction: &amp;quot;from&amp;quot;&lt;br /&gt;
		},&lt;br /&gt;
		uuid_logical_1: { // level: sellOffer&lt;br /&gt;
			logicalElementType: &amp;quot;logical&amp;quot;,&lt;br /&gt;
			previousLogicalElementId: &amp;quot;uuid_childComplex_1&amp;quot;,&lt;br /&gt;
			nextLogicalElementId: &amp;quot;null&amp;quot;,&lt;br /&gt;
            fieldName: &amp;quot;fieldx&amp;quot;,&lt;br /&gt;
            comparison: &amp;quot;greaterThan&amp;quot;,&lt;br /&gt;
            defaultValue: 50&lt;br /&gt;
		},&lt;br /&gt;
		uuid_logical_2: { // level: sellOffer&lt;br /&gt;
			logicalElementType: &amp;quot;logical&amp;quot;,&lt;br /&gt;
			previousLogicalElementId: &amp;quot;uuid_childComplex_2&amp;quot;,&lt;br /&gt;
			nextLogicalElementId: &amp;quot;null&amp;quot;,&lt;br /&gt;
            fieldName: &amp;quot;fieldx&amp;quot;,&lt;br /&gt;
            comparison: &amp;quot;greaterThan&amp;quot;,&lt;br /&gt;
            defaultValue: 50&lt;br /&gt;
		},&lt;br /&gt;
	}&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* add uuid_childComplex_3&lt;br /&gt;
* previousLogicalElementId = uuid_childComplex_2&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;js&amp;quot;&amp;gt;&lt;br /&gt;
let exampleData = {&lt;br /&gt;
	objType {&lt;br /&gt;
		objectType: &amp;quot;product&amp;quot;,&lt;br /&gt;
		serviceTag: &amp;quot;productManager&amp;quot;&lt;br /&gt;
    },&lt;br /&gt;
    &lt;br /&gt;
    initialLogicalElementId: uuid_openBracket_1,&lt;br /&gt;
	logicalElements: {&lt;br /&gt;
		uuid_openBracket_1: { // level: product&lt;br /&gt;
			logicalElementType: &amp;quot;openBracket&amp;quot;,&lt;br /&gt;
			previousLogicalElementId: null,&lt;br /&gt;
			nextLogicalElementId: uuid_childComplex_1,&lt;br /&gt;
		},&lt;br /&gt;
		uuid_childComplex_1: { // level: product&lt;br /&gt;
			logicalElementType: &amp;quot;childComplexFilter&amp;quot;,&lt;br /&gt;
			previousLogicalElementId: uuid_openBracket_1,&lt;br /&gt;
			nextLogicalElementId: uuid_operation_1,&lt;br /&gt;
			childLogicalElementId: uuid_logical_1,&lt;br /&gt;
			relType: {&lt;br /&gt;
				relationshipTag: &amp;quot;hasSellOffer&amp;quot;,&lt;br /&gt;
				serviceTag: &amp;quot;SellOfferManager&amp;quot;&lt;br /&gt;
			},&lt;br /&gt;
			direction: &amp;quot;from&amp;quot;&lt;br /&gt;
		},&lt;br /&gt;
		uuid_operation_1: { // level: product&lt;br /&gt;
    		logicalElementType: &amp;quot;operation&amp;quot;,&lt;br /&gt;
			previousLogicalElementId: &amp;quot;uuid_childComplex_1&amp;quot;,&lt;br /&gt;
			nextLogicalElementId: &amp;quot;uuid_childComplex_2&amp;quot;,&lt;br /&gt;
			operation: &amp;quot;or&amp;quot;&lt;br /&gt;
		},&lt;br /&gt;
		uuid_childComplex_2: { // level: product&lt;br /&gt;
			logicalElementType: &amp;quot;childComplexFilter&amp;quot;,&lt;br /&gt;
			previousLogicalElementId: uuid_operation_1,&lt;br /&gt;
			nextLogicalElementId: null,&lt;br /&gt;
			childLogicalElementId: uuid_logical_2,&lt;br /&gt;
			relType: {&lt;br /&gt;
				relationshipTag: &amp;quot;hasSellOffer&amp;quot;,&lt;br /&gt;
				serviceTag: &amp;quot;SellOfferManager&amp;quot;&lt;br /&gt;
			},&lt;br /&gt;
			direction: &amp;quot;from&amp;quot;&lt;br /&gt;
		},&lt;br /&gt;
		uuid_logical_1: { // level: sellOffer&lt;br /&gt;
			logicalElementType: &amp;quot;logical&amp;quot;,&lt;br /&gt;
			previousLogicalElementId: &amp;quot;uuid_childComplex_1&amp;quot;,&lt;br /&gt;
			nextLogicalElementId: &amp;quot;null&amp;quot;,&lt;br /&gt;
            fieldName: &amp;quot;fieldx&amp;quot;,&lt;br /&gt;
            comparison: &amp;quot;greaterThan&amp;quot;,&lt;br /&gt;
            defaultValue: 50&lt;br /&gt;
		},&lt;br /&gt;
		uuid_logical_2: { // level: sellOffer&lt;br /&gt;
			logicalElementType: &amp;quot;logical&amp;quot;,&lt;br /&gt;
			previousLogicalElementId: &amp;quot;uuid_childComplex_2&amp;quot;,&lt;br /&gt;
			nextLogicalElementId: &amp;quot;uuid_operation_2&amp;quot;,&lt;br /&gt;
            fieldName: &amp;quot;fieldx&amp;quot;,&lt;br /&gt;
            comparison: &amp;quot;greaterThan&amp;quot;,&lt;br /&gt;
            defaultValue: 50&lt;br /&gt;
		},&lt;br /&gt;
		uuid_operation_2: { // level: sellOffer&lt;br /&gt;
    		logicalElementType: &amp;quot;operation&amp;quot;,&lt;br /&gt;
			previousLogicalElementId: &amp;quot;uuid_logical_2&amp;quot;,&lt;br /&gt;
			nextLogicalElementId: &amp;quot;uuid_childComplex_3&amp;quot;,&lt;br /&gt;
			operation: &amp;quot;or&amp;quot;&lt;br /&gt;
		},&lt;br /&gt;
		uuid_childComplex_3: { // level: sellOffer&lt;br /&gt;
			logicalElementType: &amp;quot;childComplexFilter&amp;quot;,&lt;br /&gt;
			previousLogicalElementId: uuid_operation_2,&lt;br /&gt;
			nextLogicalElementId: null,&lt;br /&gt;
			childLogicalElementId: null,&lt;br /&gt;
			relType: {&lt;br /&gt;
				relationshipTag: &amp;quot;hasSellOfferPlan&amp;quot;,&lt;br /&gt;
				serviceTag: &amp;quot;sellOfferPlan&amp;quot;&lt;br /&gt;
			},&lt;br /&gt;
			direction: &amp;quot;from&amp;quot;&lt;br /&gt;
		},&lt;br /&gt;
	}&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* add uuid_childComplex_4 and add uuid_logical_3&lt;br /&gt;
* previousLogicalElementId = uuid_childComplex_3&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;js&amp;quot;&amp;gt;&lt;br /&gt;
let exampleData = {&lt;br /&gt;
	objType {&lt;br /&gt;
		objectType: &amp;quot;product&amp;quot;,&lt;br /&gt;
		serviceTag: &amp;quot;productManager&amp;quot;&lt;br /&gt;
    },&lt;br /&gt;
    &lt;br /&gt;
    initialLogicalElementId: uuid_openBracket_1,&lt;br /&gt;
	logicalElements: {&lt;br /&gt;
		uuid_openBracket_1: { // level: product&lt;br /&gt;
			logicalElementType: &amp;quot;openBracket&amp;quot;,&lt;br /&gt;
			previousLogicalElementId: null,&lt;br /&gt;
			nextLogicalElementId: uuid_childComplex_1,&lt;br /&gt;
		},&lt;br /&gt;
		uuid_childComplex_1: { // level: product&lt;br /&gt;
			logicalElementType: &amp;quot;childComplexFilter&amp;quot;,&lt;br /&gt;
			previousLogicalElementId: uuid_openBracket_1,&lt;br /&gt;
			nextLogicalElementId: uuid_operation_1,&lt;br /&gt;
			childLogicalElementId: uuid_logical_1,&lt;br /&gt;
			relType: {&lt;br /&gt;
				relationshipTag: &amp;quot;hasSellOffer&amp;quot;,&lt;br /&gt;
				serviceTag: &amp;quot;SellOfferManager&amp;quot;&lt;br /&gt;
			},&lt;br /&gt;
			direction: &amp;quot;from&amp;quot;&lt;br /&gt;
		},&lt;br /&gt;
		uuid_operation_1: { // level: product&lt;br /&gt;
    		logicalElementType: &amp;quot;operation&amp;quot;,&lt;br /&gt;
			previousLogicalElementId: &amp;quot;uuid_childComplex_1&amp;quot;,&lt;br /&gt;
			nextLogicalElementId: &amp;quot;uuid_childComplex_2&amp;quot;,&lt;br /&gt;
			operation: &amp;quot;or&amp;quot;&lt;br /&gt;
		},&lt;br /&gt;
		uuid_childComplex_2: { // level: product&lt;br /&gt;
			logicalElementType: &amp;quot;childComplexFilter&amp;quot;,&lt;br /&gt;
			previousLogicalElementId: uuid_operation_1,&lt;br /&gt;
			nextLogicalElementId: null,&lt;br /&gt;
			childLogicalElementId: uuid_logical_2,&lt;br /&gt;
			relType: {&lt;br /&gt;
				relationshipTag: &amp;quot;hasSellOffer&amp;quot;,&lt;br /&gt;
				serviceTag: &amp;quot;SellOfferManager&amp;quot;&lt;br /&gt;
			},&lt;br /&gt;
			direction: &amp;quot;from&amp;quot;&lt;br /&gt;
		},&lt;br /&gt;
		uuid_logical_1: { // level: sellOffer&lt;br /&gt;
			logicalElementType: &amp;quot;logical&amp;quot;,&lt;br /&gt;
			previousLogicalElementId: &amp;quot;uuid_childComplex_1&amp;quot;,&lt;br /&gt;
			nextLogicalElementId: &amp;quot;null&amp;quot;,&lt;br /&gt;
            fieldName: &amp;quot;fieldx&amp;quot;,&lt;br /&gt;
            comparison: &amp;quot;greaterThan&amp;quot;,&lt;br /&gt;
            defaultValue: 50&lt;br /&gt;
		},&lt;br /&gt;
		uuid_logical_2: { // level: sellOffer&lt;br /&gt;
			logicalElementType: &amp;quot;logical&amp;quot;,&lt;br /&gt;
			previousLogicalElementId: &amp;quot;uuid_childComplex_2&amp;quot;,&lt;br /&gt;
			nextLogicalElementId: &amp;quot;uuid_operation_2&amp;quot;,&lt;br /&gt;
            fieldName: &amp;quot;fieldx&amp;quot;,&lt;br /&gt;
            comparison: &amp;quot;greaterThan&amp;quot;,&lt;br /&gt;
            defaultValue: 50&lt;br /&gt;
		},&lt;br /&gt;
		uuid_operation_2: { // level: sellOffer&lt;br /&gt;
    		logicalElementType: &amp;quot;operation&amp;quot;,&lt;br /&gt;
			previousLogicalElementId: &amp;quot;uuid_logical_2&amp;quot;,&lt;br /&gt;
			nextLogicalElementId: &amp;quot;uuid_childComplex_3&amp;quot;,&lt;br /&gt;
			operation: &amp;quot;or&amp;quot;&lt;br /&gt;
		},&lt;br /&gt;
		uuid_childComplex_3: { // level: sellOffer&lt;br /&gt;
			logicalElementType: &amp;quot;childComplexFilter&amp;quot;,&lt;br /&gt;
			previousLogicalElementId: uuid_operation_2,&lt;br /&gt;
			nextLogicalElementId: null,&lt;br /&gt;
			childLogicalElementId: uuid_childComplex_4,&lt;br /&gt;
			relType: {&lt;br /&gt;
				relationshipTag: &amp;quot;hasSellOfferPlan&amp;quot;,&lt;br /&gt;
				serviceTag: &amp;quot;sellOfferPlan&amp;quot;&lt;br /&gt;
			},&lt;br /&gt;
			direction: &amp;quot;from&amp;quot;&lt;br /&gt;
		},&lt;br /&gt;
		uuid_childComplex_4: { // level: sellOfferPlan&lt;br /&gt;
			logicalElementType: &amp;quot;childComplexFilter&amp;quot;,&lt;br /&gt;
			previousLogicalElementId: uuid_childComplex_3,&lt;br /&gt;
			nextLogicalElementId: null,&lt;br /&gt;
			childLogicalElementId: uuid_logical_3,&lt;br /&gt;
			relType: {&lt;br /&gt;
				relationshipTag: &amp;quot;hasDeliveryMethodLink&amp;quot;,&lt;br /&gt;
				serviceTag: &amp;quot;sellOfferPlan&amp;quot;&lt;br /&gt;
			},&lt;br /&gt;
			direction: &amp;quot;from&amp;quot;&lt;br /&gt;
		},&lt;br /&gt;
		uuid_logical_3: { // level: deliveryMethodLink&lt;br /&gt;
			logicalElementType: &amp;quot;logical&amp;quot;,&lt;br /&gt;
			previousLogicalElementId: &amp;quot;uuid_childComplex_4&amp;quot;,&lt;br /&gt;
			nextLogicalElementId: &amp;quot;null&amp;quot;,&lt;br /&gt;
            fieldName: &amp;quot;fieldx&amp;quot;,&lt;br /&gt;
            comparison: &amp;quot;greaterThan&amp;quot;,&lt;br /&gt;
            defaultValue: 50&lt;br /&gt;
		},&lt;br /&gt;
	}&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* add uuid_logical_4&lt;br /&gt;
* OR operator&lt;br /&gt;
* previousLogicalElementId = uuid_logical_3&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;js&amp;quot;&amp;gt;&lt;br /&gt;
let exampleData = {&lt;br /&gt;
	objType {&lt;br /&gt;
		objectType: &amp;quot;product&amp;quot;,&lt;br /&gt;
		serviceTag: &amp;quot;productManager&amp;quot;&lt;br /&gt;
    },&lt;br /&gt;
    &lt;br /&gt;
    initialLogicalElementId: uuid_openBracket_1,&lt;br /&gt;
	logicalElements: {&lt;br /&gt;
		uuid_openBracket_1: { // level: product&lt;br /&gt;
			logicalElementType: &amp;quot;openBracket&amp;quot;,&lt;br /&gt;
			previousLogicalElementId: null,&lt;br /&gt;
			nextLogicalElementId: uuid_childComplex_1,&lt;br /&gt;
		},&lt;br /&gt;
		uuid_childComplex_1: { // level: product&lt;br /&gt;
			logicalElementType: &amp;quot;childComplexFilter&amp;quot;,&lt;br /&gt;
			previousLogicalElementId: uuid_openBracket_1,&lt;br /&gt;
			nextLogicalElementId: uuid_operation_1,&lt;br /&gt;
			childLogicalElementId: uuid_logical_1,&lt;br /&gt;
			relType: {&lt;br /&gt;
				relationshipTag: &amp;quot;hasSellOffer&amp;quot;,&lt;br /&gt;
				serviceTag: &amp;quot;SellOfferManager&amp;quot;&lt;br /&gt;
			},&lt;br /&gt;
			direction: &amp;quot;from&amp;quot;&lt;br /&gt;
		},&lt;br /&gt;
		uuid_operation_1: { // level: product&lt;br /&gt;
    		logicalElementType: &amp;quot;operation&amp;quot;,&lt;br /&gt;
			previousLogicalElementId: &amp;quot;uuid_childComplex_1&amp;quot;,&lt;br /&gt;
			nextLogicalElementId: &amp;quot;uuid_childComplex_2&amp;quot;,&lt;br /&gt;
			operation: &amp;quot;or&amp;quot;&lt;br /&gt;
		},&lt;br /&gt;
		uuid_childComplex_2: { // level: product&lt;br /&gt;
			logicalElementType: &amp;quot;childComplexFilter&amp;quot;,&lt;br /&gt;
			previousLogicalElementId: uuid_operation_1,&lt;br /&gt;
			nextLogicalElementId: null,&lt;br /&gt;
			childLogicalElementId: uuid_logical_2,&lt;br /&gt;
			relType: {&lt;br /&gt;
				relationshipTag: &amp;quot;hasSellOffer&amp;quot;,&lt;br /&gt;
				serviceTag: &amp;quot;SellOfferManager&amp;quot;&lt;br /&gt;
			},&lt;br /&gt;
			direction: &amp;quot;from&amp;quot;&lt;br /&gt;
		},&lt;br /&gt;
		uuid_logical_1: { // level: sellOffer&lt;br /&gt;
			logicalElementType: &amp;quot;logical&amp;quot;,&lt;br /&gt;
			previousLogicalElementId: &amp;quot;uuid_childComplex_1&amp;quot;,&lt;br /&gt;
			nextLogicalElementId: &amp;quot;null&amp;quot;,&lt;br /&gt;
            fieldName: &amp;quot;fieldx&amp;quot;,&lt;br /&gt;
            comparison: &amp;quot;greaterThan&amp;quot;,&lt;br /&gt;
            defaultValue: 50&lt;br /&gt;
		},&lt;br /&gt;
		uuid_logical_2: { // level: sellOffer&lt;br /&gt;
			logicalElementType: &amp;quot;logical&amp;quot;,&lt;br /&gt;
			previousLogicalElementId: &amp;quot;uuid_childComplex_2&amp;quot;,&lt;br /&gt;
			nextLogicalElementId: &amp;quot;uuid_operation_2&amp;quot;,&lt;br /&gt;
            fieldName: &amp;quot;fieldx&amp;quot;,&lt;br /&gt;
            comparison: &amp;quot;greaterThan&amp;quot;,&lt;br /&gt;
            defaultValue: 50&lt;br /&gt;
		},&lt;br /&gt;
		uuid_operation_2: { // level: sellOffer&lt;br /&gt;
    		logicalElementType: &amp;quot;operation&amp;quot;,&lt;br /&gt;
			previousLogicalElementId: &amp;quot;uuid_logical_2&amp;quot;,&lt;br /&gt;
			nextLogicalElementId: &amp;quot;uuid_childComplex_3&amp;quot;,&lt;br /&gt;
			operation: &amp;quot;or&amp;quot;&lt;br /&gt;
		},&lt;br /&gt;
		uuid_childComplex_3: { // level: sellOffer&lt;br /&gt;
			logicalElementType: &amp;quot;childComplexFilter&amp;quot;,&lt;br /&gt;
			previousLogicalElementId: uuid_operation_2,&lt;br /&gt;
			nextLogicalElementId: null,&lt;br /&gt;
			childLogicalElementId: uuid_childComplex_4,&lt;br /&gt;
			relType: {&lt;br /&gt;
				relationshipTag: &amp;quot;hasSellOfferPlan&amp;quot;,&lt;br /&gt;
				serviceTag: &amp;quot;sellOfferPlan&amp;quot;&lt;br /&gt;
			},&lt;br /&gt;
			direction: &amp;quot;from&amp;quot;&lt;br /&gt;
		},&lt;br /&gt;
		uuid_childComplex_4: { // level: sellOfferPlan&lt;br /&gt;
			logicalElementType: &amp;quot;childComplexFilter&amp;quot;,&lt;br /&gt;
			previousLogicalElementId: uuid_childComplex_3,&lt;br /&gt;
			nextLogicalElementId: null,&lt;br /&gt;
			childLogicalElementId: uuid_logical_3,&lt;br /&gt;
			relType: {&lt;br /&gt;
				relationshipTag: &amp;quot;hasDeliveryMethodLink&amp;quot;,&lt;br /&gt;
				serviceTag: &amp;quot;deliveryMethodLink&amp;quot;&lt;br /&gt;
			},&lt;br /&gt;
			direction: &amp;quot;from&amp;quot;&lt;br /&gt;
		},&lt;br /&gt;
		uuid_logical_3: { // level: deliveryMethodLink&lt;br /&gt;
			logicalElementType: &amp;quot;logical&amp;quot;,&lt;br /&gt;
			previousLogicalElementId: &amp;quot;uuid_childComplex_4&amp;quot;,&lt;br /&gt;
			nextLogicalElementId: &amp;quot;uuid_operation_2&amp;quot;,&lt;br /&gt;
            fieldName: &amp;quot;fieldx&amp;quot;,&lt;br /&gt;
            comparison: &amp;quot;greaterThan&amp;quot;,&lt;br /&gt;
            defaultValue: 50&lt;br /&gt;
		},&lt;br /&gt;
		uuid_operation_3: { // level: deliveryMethodLink&lt;br /&gt;
    		logicalElementType: &amp;quot;operation&amp;quot;,&lt;br /&gt;
			previousLogicalElementId: &amp;quot;uuid_logical_3&amp;quot;,&lt;br /&gt;
			nextLogicalElementId: &amp;quot;uuid_logical_4&amp;quot;,&lt;br /&gt;
			operation: &amp;quot;or&amp;quot;&lt;br /&gt;
		},&lt;br /&gt;
		uuid_logical_4: { // level: deliveryMethodLink&lt;br /&gt;
			logicalElementType: &amp;quot;logical&amp;quot;,&lt;br /&gt;
			previousLogicalElementId: &amp;quot;uuid_operation_2&amp;quot;,&lt;br /&gt;
			nextLogicalElementId: &amp;quot;null&amp;quot;,&lt;br /&gt;
            fieldName: &amp;quot;fieldx&amp;quot;,&lt;br /&gt;
            comparison: &amp;quot;greaterThan&amp;quot;,&lt;br /&gt;
            defaultValue: 50&lt;br /&gt;
		},&lt;br /&gt;
	}&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* add uuid_childComplex_5 and uuid_childComplex_6 and uuid_logical_5&lt;br /&gt;
* AND operator&lt;br /&gt;
* previousLogicalElementId = uuid_childComplex_3&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;js&amp;quot;&amp;gt;&lt;br /&gt;
let exampleData = {&lt;br /&gt;
	objType {&lt;br /&gt;
		objectType: &amp;quot;product&amp;quot;,&lt;br /&gt;
		serviceTag: &amp;quot;productManager&amp;quot;&lt;br /&gt;
    },&lt;br /&gt;
    &lt;br /&gt;
    initialLogicalElementId: uuid_openBracket_1,&lt;br /&gt;
	logicalElements: {&lt;br /&gt;
		uuid_openBracket_1: { // level: product&lt;br /&gt;
			logicalElementType: &amp;quot;openBracket&amp;quot;,&lt;br /&gt;
			previousLogicalElementId: null,&lt;br /&gt;
			nextLogicalElementId: uuid_childComplex_1,&lt;br /&gt;
		},&lt;br /&gt;
		uuid_childComplex_1: { // level: product&lt;br /&gt;
			logicalElementType: &amp;quot;childComplexFilter&amp;quot;,&lt;br /&gt;
			previousLogicalElementId: uuid_openBracket_1,&lt;br /&gt;
			nextLogicalElementId: uuid_operation_1,&lt;br /&gt;
			childLogicalElementId: uuid_logical_1,&lt;br /&gt;
			relType: {&lt;br /&gt;
				relationshipTag: &amp;quot;hasSellOffer&amp;quot;,&lt;br /&gt;
				serviceTag: &amp;quot;SellOfferManager&amp;quot;&lt;br /&gt;
			},&lt;br /&gt;
			direction: &amp;quot;from&amp;quot;&lt;br /&gt;
		},&lt;br /&gt;
		uuid_operation_1: { // level: product&lt;br /&gt;
    		logicalElementType: &amp;quot;operation&amp;quot;,&lt;br /&gt;
			previousLogicalElementId: &amp;quot;uuid_childComplex_1&amp;quot;,&lt;br /&gt;
			nextLogicalElementId: &amp;quot;uuid_childComplex_2&amp;quot;,&lt;br /&gt;
			operation: &amp;quot;or&amp;quot;&lt;br /&gt;
		},&lt;br /&gt;
		uuid_childComplex_2: { // level: product&lt;br /&gt;
			logicalElementType: &amp;quot;childComplexFilter&amp;quot;,&lt;br /&gt;
			previousLogicalElementId: uuid_operation_1,&lt;br /&gt;
			nextLogicalElementId: null,&lt;br /&gt;
			childLogicalElementId: uuid_logical_2,&lt;br /&gt;
			relType: {&lt;br /&gt;
				relationshipTag: &amp;quot;hasSellOffer&amp;quot;,&lt;br /&gt;
				serviceTag: &amp;quot;SellOfferManager&amp;quot;&lt;br /&gt;
			},&lt;br /&gt;
			direction: &amp;quot;from&amp;quot;&lt;br /&gt;
		},&lt;br /&gt;
		uuid_logical_1: { // level: sellOffer&lt;br /&gt;
			logicalElementType: &amp;quot;logical&amp;quot;,&lt;br /&gt;
			previousLogicalElementId: &amp;quot;uuid_childComplex_1&amp;quot;,&lt;br /&gt;
			nextLogicalElementId: &amp;quot;null&amp;quot;,&lt;br /&gt;
            fieldName: &amp;quot;fieldx&amp;quot;,&lt;br /&gt;
            comparison: &amp;quot;greaterThan&amp;quot;,&lt;br /&gt;
            defaultValue: 50&lt;br /&gt;
		},&lt;br /&gt;
		uuid_logical_2: { // level: sellOffer&lt;br /&gt;
			logicalElementType: &amp;quot;logical&amp;quot;,&lt;br /&gt;
			previousLogicalElementId: &amp;quot;uuid_childComplex_2&amp;quot;,&lt;br /&gt;
			nextLogicalElementId: &amp;quot;uuid_operation_2&amp;quot;,&lt;br /&gt;
            fieldName: &amp;quot;fieldx&amp;quot;,&lt;br /&gt;
            comparison: &amp;quot;greaterThan&amp;quot;,&lt;br /&gt;
            defaultValue: 50&lt;br /&gt;
		},&lt;br /&gt;
		uuid_operation_2: { // level: sellOffer&lt;br /&gt;
    		logicalElementType: &amp;quot;operation&amp;quot;,&lt;br /&gt;
			previousLogicalElementId: &amp;quot;uuid_logical_2&amp;quot;,&lt;br /&gt;
			nextLogicalElementId: &amp;quot;uuid_childComplex_3&amp;quot;,&lt;br /&gt;
			operation: &amp;quot;or&amp;quot;&lt;br /&gt;
		},&lt;br /&gt;
		uuid_childComplex_3: { // level: sellOffer&lt;br /&gt;
			logicalElementType: &amp;quot;childComplexFilter&amp;quot;,&lt;br /&gt;
			previousLogicalElementId: uuid_operation_2,&lt;br /&gt;
			nextLogicalElementId: uuid_operation_4,&lt;br /&gt;
			childLogicalElementId: uuid_childComplex_4,&lt;br /&gt;
			relType: {&lt;br /&gt;
				relationshipTag: &amp;quot;hasSellOfferPlan&amp;quot;,&lt;br /&gt;
				serviceTag: &amp;quot;sellOfferPlan&amp;quot;&lt;br /&gt;
			},&lt;br /&gt;
			direction: &amp;quot;from&amp;quot;&lt;br /&gt;
		},&lt;br /&gt;
		uuid_childComplex_4: { // level: sellOfferPlan&lt;br /&gt;
			logicalElementType: &amp;quot;childComplexFilter&amp;quot;,&lt;br /&gt;
			previousLogicalElementId: uuid_childComplex_3,&lt;br /&gt;
			nextLogicalElementId: null,&lt;br /&gt;
			childLogicalElementId: uuid_logical_3,&lt;br /&gt;
			relType: {&lt;br /&gt;
				relationshipTag: &amp;quot;hasDeliveryMethodLink&amp;quot;,&lt;br /&gt;
				serviceTag: &amp;quot;deliveryMethodLink&amp;quot;&lt;br /&gt;
			},&lt;br /&gt;
			direction: &amp;quot;from&amp;quot;&lt;br /&gt;
		},&lt;br /&gt;
		uuid_logical_3: { // level: deliveryMethodLink&lt;br /&gt;
			logicalElementType: &amp;quot;logical&amp;quot;,&lt;br /&gt;
			previousLogicalElementId: &amp;quot;uuid_childComplex_4&amp;quot;,&lt;br /&gt;
			nextLogicalElementId: &amp;quot;uuid_operation_2&amp;quot;,&lt;br /&gt;
            fieldName: &amp;quot;fieldx&amp;quot;,&lt;br /&gt;
            comparison: &amp;quot;greaterThan&amp;quot;,&lt;br /&gt;
            defaultValue: 50&lt;br /&gt;
		},&lt;br /&gt;
		uuid_operation_3: { // level: deliveryMethodLink&lt;br /&gt;
    		logicalElementType: &amp;quot;operation&amp;quot;,&lt;br /&gt;
			previousLogicalElementId: &amp;quot;uuid_logical_3&amp;quot;,&lt;br /&gt;
			nextLogicalElementId: &amp;quot;uuid_logical_4&amp;quot;,&lt;br /&gt;
			operation: &amp;quot;or&amp;quot;&lt;br /&gt;
		},&lt;br /&gt;
		uuid_logical_4: { // level: deliveryMethodLink&lt;br /&gt;
			logicalElementType: &amp;quot;logical&amp;quot;,&lt;br /&gt;
			previousLogicalElementId: &amp;quot;uuid_operation_2&amp;quot;,&lt;br /&gt;
			nextLogicalElementId: &amp;quot;null&amp;quot;,&lt;br /&gt;
            fieldName: &amp;quot;fieldx&amp;quot;,&lt;br /&gt;
            comparison: &amp;quot;greaterThan&amp;quot;,&lt;br /&gt;
            defaultValue: 50&lt;br /&gt;
		},&lt;br /&gt;
		&lt;br /&gt;
 		uuid_operation_4: { // level: sellOffer&lt;br /&gt;
    		logicalElementType: &amp;quot;operation&amp;quot;,&lt;br /&gt;
			previousLogicalElementId: &amp;quot;uuid_childComplex_3&amp;quot;,&lt;br /&gt;
			nextLogicalElementId: &amp;quot;uuid_childComplex_5&amp;quot;,&lt;br /&gt;
			operation: &amp;quot;or&amp;quot;&lt;br /&gt;
		},&lt;br /&gt;
		uuid_childComplex_5: { // level: sellOffer&lt;br /&gt;
			logicalElementType: &amp;quot;childComplexFilter&amp;quot;,&lt;br /&gt;
			previousLogicalElementId: uuid_operation_4,&lt;br /&gt;
			nextLogicalElementId: null,&lt;br /&gt;
			childLogicalElementId: uuid_childComplex_6,&lt;br /&gt;
			relType: {&lt;br /&gt;
				relationshipTag: &amp;quot;hasSellOfferPlan&amp;quot;,&lt;br /&gt;
				serviceTag: &amp;quot;sellOfferPlan&amp;quot;&lt;br /&gt;
			},&lt;br /&gt;
			direction: &amp;quot;from&amp;quot;&lt;br /&gt;
		},&lt;br /&gt;
		uuid_childComplex_6: { // level: sellOfferPlan&lt;br /&gt;
			logicalElementType: &amp;quot;childComplexFilter&amp;quot;,&lt;br /&gt;
			previousLogicalElementId: uuid_childComplex_5,&lt;br /&gt;
			nextLogicalElementId: null,&lt;br /&gt;
			childLogicalElementId: uuid_logical_5,&lt;br /&gt;
			relType: {&lt;br /&gt;
				relationshipTag: &amp;quot;hasDeliveryMethodLink&amp;quot;,&lt;br /&gt;
				serviceTag: &amp;quot;deliveryMethodLink&amp;quot;&lt;br /&gt;
			},&lt;br /&gt;
			direction: &amp;quot;from&amp;quot;&lt;br /&gt;
		},&lt;br /&gt;
		uuid_logical_5: { // level: deliveryMethodLink&lt;br /&gt;
			logicalElementType: &amp;quot;logical&amp;quot;,&lt;br /&gt;
			previousLogicalElementId: &amp;quot;uuid_childComplex_6&amp;quot;,&lt;br /&gt;
			nextLogicalElementId: null,&lt;br /&gt;
            fieldName: &amp;quot;fieldx&amp;quot;,&lt;br /&gt;
            comparison: &amp;quot;greaterThan&amp;quot;,&lt;br /&gt;
            defaultValue: 50&lt;br /&gt;
		},&lt;br /&gt;
		&lt;br /&gt;
	}&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* add closeBracket&lt;br /&gt;
* previousLogicalElementId = uuid_childComplex_2&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;js&amp;quot;&amp;gt;&lt;br /&gt;
let exampleData = {&lt;br /&gt;
	objType {&lt;br /&gt;
		objectType: &amp;quot;product&amp;quot;,&lt;br /&gt;
		serviceTag: &amp;quot;productManager&amp;quot;&lt;br /&gt;
    },&lt;br /&gt;
    &lt;br /&gt;
    initialLogicalElementId: uuid_openBracket_1,&lt;br /&gt;
	logicalElements: {&lt;br /&gt;
		uuid_openBracket_1: { // level: product&lt;br /&gt;
			logicalElementType: &amp;quot;openBracket&amp;quot;,&lt;br /&gt;
			previousLogicalElementId: null,&lt;br /&gt;
			nextLogicalElementId: uuid_childComplex_1,&lt;br /&gt;
		},&lt;br /&gt;
		uuid_childComplex_1: { // level: product&lt;br /&gt;
			logicalElementType: &amp;quot;childComplexFilter&amp;quot;,&lt;br /&gt;
			previousLogicalElementId: uuid_openBracket_1,&lt;br /&gt;
			nextLogicalElementId: uuid_operation_1,&lt;br /&gt;
			childLogicalElementId: uuid_logical_1,&lt;br /&gt;
			relType: {&lt;br /&gt;
				relationshipTag: &amp;quot;hasSellOffer&amp;quot;,&lt;br /&gt;
				serviceTag: &amp;quot;SellOfferManager&amp;quot;&lt;br /&gt;
			},&lt;br /&gt;
			direction: &amp;quot;from&amp;quot;&lt;br /&gt;
		},&lt;br /&gt;
		uuid_operation_1: { // level: product&lt;br /&gt;
    		logicalElementType: &amp;quot;operation&amp;quot;,&lt;br /&gt;
			previousLogicalElementId: &amp;quot;uuid_childComplex_1&amp;quot;,&lt;br /&gt;
			nextLogicalElementId: &amp;quot;uuid_childComplex_2&amp;quot;,&lt;br /&gt;
			operation: &amp;quot;or&amp;quot;&lt;br /&gt;
		},&lt;br /&gt;
		uuid_childComplex_2: { // level: product&lt;br /&gt;
			logicalElementType: &amp;quot;childComplexFilter&amp;quot;,&lt;br /&gt;
			previousLogicalElementId: uuid_operation_1,&lt;br /&gt;
			nextLogicalElementId: uuid_closeBracket_1,&lt;br /&gt;
			childLogicalElementId: uuid_logical_2,&lt;br /&gt;
			relType: {&lt;br /&gt;
				relationshipTag: &amp;quot;hasSellOffer&amp;quot;,&lt;br /&gt;
				serviceTag: &amp;quot;SellOfferManager&amp;quot;&lt;br /&gt;
			},&lt;br /&gt;
			direction: &amp;quot;from&amp;quot;&lt;br /&gt;
		},&lt;br /&gt;
		uuid_logical_1: { // level: sellOffer&lt;br /&gt;
			logicalElementType: &amp;quot;logical&amp;quot;,&lt;br /&gt;
			previousLogicalElementId: &amp;quot;uuid_childComplex_1&amp;quot;,&lt;br /&gt;
			nextLogicalElementId: &amp;quot;null&amp;quot;,&lt;br /&gt;
            fieldName: &amp;quot;fieldx&amp;quot;,&lt;br /&gt;
            comparison: &amp;quot;greaterThan&amp;quot;,&lt;br /&gt;
            defaultValue: 50&lt;br /&gt;
		},&lt;br /&gt;
		uuid_logical_2: { // level: sellOffer&lt;br /&gt;
			logicalElementType: &amp;quot;logical&amp;quot;,&lt;br /&gt;
			previousLogicalElementId: &amp;quot;uuid_childComplex_2&amp;quot;,&lt;br /&gt;
			nextLogicalElementId: &amp;quot;uuid_operation_2&amp;quot;,&lt;br /&gt;
            fieldName: &amp;quot;fieldx&amp;quot;,&lt;br /&gt;
            comparison: &amp;quot;greaterThan&amp;quot;,&lt;br /&gt;
            defaultValue: 50&lt;br /&gt;
		},&lt;br /&gt;
		uuid_operation_2: { // level: sellOffer&lt;br /&gt;
    		logicalElementType: &amp;quot;operation&amp;quot;,&lt;br /&gt;
			previousLogicalElementId: &amp;quot;uuid_logical_2&amp;quot;,&lt;br /&gt;
			nextLogicalElementId: &amp;quot;uuid_childComplex_3&amp;quot;,&lt;br /&gt;
			operation: &amp;quot;or&amp;quot;&lt;br /&gt;
		},&lt;br /&gt;
		uuid_childComplex_3: { // level: sellOffer&lt;br /&gt;
			logicalElementType: &amp;quot;childComplexFilter&amp;quot;,&lt;br /&gt;
			previousLogicalElementId: uuid_operation_2,&lt;br /&gt;
			nextLogicalElementId: uuid_operation_4,&lt;br /&gt;
			childLogicalElementId: uuid_childComplex_4,&lt;br /&gt;
			relType: {&lt;br /&gt;
				relationshipTag: &amp;quot;hasSellOfferPlan&amp;quot;,&lt;br /&gt;
				serviceTag: &amp;quot;sellOfferPlan&amp;quot;&lt;br /&gt;
			},&lt;br /&gt;
			direction: &amp;quot;from&amp;quot;&lt;br /&gt;
		},&lt;br /&gt;
		uuid_childComplex_4: { // level: sellOfferPlan&lt;br /&gt;
			logicalElementType: &amp;quot;childComplexFilter&amp;quot;,&lt;br /&gt;
			previousLogicalElementId: uuid_childComplex_3,&lt;br /&gt;
			nextLogicalElementId: null,&lt;br /&gt;
			childLogicalElementId: uuid_logical_3,&lt;br /&gt;
			relType: {&lt;br /&gt;
				relationshipTag: &amp;quot;hasDeliveryMethodLink&amp;quot;,&lt;br /&gt;
				serviceTag: &amp;quot;deliveryMethodLink&amp;quot;&lt;br /&gt;
			},&lt;br /&gt;
			direction: &amp;quot;from&amp;quot;&lt;br /&gt;
		},&lt;br /&gt;
		uuid_logical_3: { // level: deliveryMethodLink&lt;br /&gt;
			logicalElementType: &amp;quot;logical&amp;quot;,&lt;br /&gt;
			previousLogicalElementId: &amp;quot;uuid_childComplex_4&amp;quot;,&lt;br /&gt;
			nextLogicalElementId: &amp;quot;uuid_operation_2&amp;quot;,&lt;br /&gt;
            fieldName: &amp;quot;fieldx&amp;quot;,&lt;br /&gt;
            comparison: &amp;quot;greaterThan&amp;quot;,&lt;br /&gt;
            defaultValue: 50&lt;br /&gt;
		},&lt;br /&gt;
		uuid_operation_3: { // level: deliveryMethodLink&lt;br /&gt;
    		logicalElementType: &amp;quot;operation&amp;quot;,&lt;br /&gt;
			previousLogicalElementId: &amp;quot;uuid_logical_3&amp;quot;,&lt;br /&gt;
			nextLogicalElementId: &amp;quot;uuid_logical_4&amp;quot;,&lt;br /&gt;
			operation: &amp;quot;or&amp;quot;&lt;br /&gt;
		},&lt;br /&gt;
		uuid_logical_4: { // level: deliveryMethodLink&lt;br /&gt;
			logicalElementType: &amp;quot;logical&amp;quot;,&lt;br /&gt;
			previousLogicalElementId: &amp;quot;uuid_operation_2&amp;quot;,&lt;br /&gt;
			nextLogicalElementId: &amp;quot;null&amp;quot;,&lt;br /&gt;
            fieldName: &amp;quot;fieldx&amp;quot;,&lt;br /&gt;
            comparison: &amp;quot;greaterThan&amp;quot;,&lt;br /&gt;
            defaultValue: 50&lt;br /&gt;
		},&lt;br /&gt;
		&lt;br /&gt;
 		uuid_operation_4: { // level: sellOffer&lt;br /&gt;
    		logicalElementType: &amp;quot;operation&amp;quot;,&lt;br /&gt;
			previousLogicalElementId: &amp;quot;uuid_childComplex_3&amp;quot;,&lt;br /&gt;
			nextLogicalElementId: &amp;quot;uuid_childComplex_5&amp;quot;,&lt;br /&gt;
			operation: &amp;quot;or&amp;quot;&lt;br /&gt;
		},&lt;br /&gt;
		uuid_childComplex_5: { // level: sellOffer&lt;br /&gt;
			logicalElementType: &amp;quot;childComplexFilter&amp;quot;,&lt;br /&gt;
			previousLogicalElementId: uuid_operation_4,&lt;br /&gt;
			nextLogicalElementId: null,&lt;br /&gt;
			childLogicalElementId: uuid_childComplex_6,&lt;br /&gt;
			relType: {&lt;br /&gt;
				relationshipTag: &amp;quot;hasSellOfferPlan&amp;quot;,&lt;br /&gt;
				serviceTag: &amp;quot;sellOfferPlan&amp;quot;&lt;br /&gt;
			},&lt;br /&gt;
			direction: &amp;quot;from&amp;quot;&lt;br /&gt;
		},&lt;br /&gt;
		uuid_childComplex_6: { // level: sellOfferPlan&lt;br /&gt;
			logicalElementType: &amp;quot;childComplexFilter&amp;quot;,&lt;br /&gt;
			previousLogicalElementId: uuid_childComplex_5,&lt;br /&gt;
			nextLogicalElementId: null,&lt;br /&gt;
			childLogicalElementId: uuid_logical_5,&lt;br /&gt;
			relType: {&lt;br /&gt;
				relationshipTag: &amp;quot;hasDeliveryMethodLink&amp;quot;,&lt;br /&gt;
				serviceTag: &amp;quot;deliveryMethodLink&amp;quot;&lt;br /&gt;
			},&lt;br /&gt;
			direction: &amp;quot;from&amp;quot;&lt;br /&gt;
		},&lt;br /&gt;
		uuid_logical_5: { // level: deliveryMethodLink&lt;br /&gt;
			logicalElementType: &amp;quot;logical&amp;quot;,&lt;br /&gt;
			previousLogicalElementId: &amp;quot;uuid_childComplex_6&amp;quot;,&lt;br /&gt;
			nextLogicalElementId: null,&lt;br /&gt;
            fieldName: &amp;quot;fieldx&amp;quot;,&lt;br /&gt;
            comparison: &amp;quot;greaterThan&amp;quot;,&lt;br /&gt;
            defaultValue: 50&lt;br /&gt;
		},&lt;br /&gt;
		uuid_closeBracket_1: { // level: product&lt;br /&gt;
			logicalElementType: &amp;quot;closeBracket&amp;quot;,&lt;br /&gt;
			previousLogicalElementId: uuid_childComplex_2,&lt;br /&gt;
			nextLogicalElementId: null,&lt;br /&gt;
		},&lt;br /&gt;
		&lt;br /&gt;
	}&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* add uuid_childComplex_7 and uuid_logical_6&lt;br /&gt;
* AND operator&lt;br /&gt;
* previousLogicalElementId = uuid_closeBracket_1&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;js&amp;quot;&amp;gt;&lt;br /&gt;
let exampleData = {&lt;br /&gt;
	objType {&lt;br /&gt;
		objectType: &amp;quot;product&amp;quot;,&lt;br /&gt;
		serviceTag: &amp;quot;productManager&amp;quot;&lt;br /&gt;
    },&lt;br /&gt;
    &lt;br /&gt;
    initialLogicalElementId: uuid_openBracket_1,&lt;br /&gt;
	logicalElements: {&lt;br /&gt;
		uuid_openBracket_1: { // level: product&lt;br /&gt;
			logicalElementType: &amp;quot;openBracket&amp;quot;,&lt;br /&gt;
			previousLogicalElementId: null,&lt;br /&gt;
			nextLogicalElementId: uuid_childComplex_1,&lt;br /&gt;
		},&lt;br /&gt;
		uuid_childComplex_1: { // level: product&lt;br /&gt;
			logicalElementType: &amp;quot;childComplexFilter&amp;quot;,&lt;br /&gt;
			previousLogicalElementId: uuid_openBracket_1,&lt;br /&gt;
			nextLogicalElementId: uuid_operation_1,&lt;br /&gt;
			childLogicalElementId: uuid_logical_1,&lt;br /&gt;
			relType: {&lt;br /&gt;
				relationshipTag: &amp;quot;hasSellOffer&amp;quot;,&lt;br /&gt;
				serviceTag: &amp;quot;SellOfferManager&amp;quot;&lt;br /&gt;
			},&lt;br /&gt;
			direction: &amp;quot;from&amp;quot;&lt;br /&gt;
		},&lt;br /&gt;
		uuid_operation_1: { // level: product&lt;br /&gt;
    		logicalElementType: &amp;quot;operation&amp;quot;,&lt;br /&gt;
			previousLogicalElementId: &amp;quot;uuid_childComplex_1&amp;quot;,&lt;br /&gt;
			nextLogicalElementId: &amp;quot;uuid_childComplex_2&amp;quot;,&lt;br /&gt;
			operation: &amp;quot;or&amp;quot;&lt;br /&gt;
		},&lt;br /&gt;
		uuid_childComplex_2: { // level: product&lt;br /&gt;
			logicalElementType: &amp;quot;childComplexFilter&amp;quot;,&lt;br /&gt;
			previousLogicalElementId: uuid_operation_1,&lt;br /&gt;
			nextLogicalElementId: uuid_closeBracket_1,&lt;br /&gt;
			childLogicalElementId: uuid_logical_2,&lt;br /&gt;
			relType: {&lt;br /&gt;
				relationshipTag: &amp;quot;hasSellOffer&amp;quot;,&lt;br /&gt;
				serviceTag: &amp;quot;SellOfferManager&amp;quot;&lt;br /&gt;
			},&lt;br /&gt;
			direction: &amp;quot;from&amp;quot;&lt;br /&gt;
		},&lt;br /&gt;
		uuid_logical_1: { // level: sellOffer&lt;br /&gt;
			logicalElementType: &amp;quot;logical&amp;quot;,&lt;br /&gt;
			previousLogicalElementId: &amp;quot;uuid_childComplex_1&amp;quot;,&lt;br /&gt;
			nextLogicalElementId: &amp;quot;null&amp;quot;,&lt;br /&gt;
            fieldName: &amp;quot;fieldx&amp;quot;,&lt;br /&gt;
            comparison: &amp;quot;greaterThan&amp;quot;,&lt;br /&gt;
            defaultValue: 50&lt;br /&gt;
		},&lt;br /&gt;
		uuid_logical_2: { // level: sellOffer&lt;br /&gt;
			logicalElementType: &amp;quot;logical&amp;quot;,&lt;br /&gt;
			previousLogicalElementId: &amp;quot;uuid_childComplex_2&amp;quot;,&lt;br /&gt;
			nextLogicalElementId: &amp;quot;uuid_operation_2&amp;quot;,&lt;br /&gt;
            fieldName: &amp;quot;fieldx&amp;quot;,&lt;br /&gt;
            comparison: &amp;quot;greaterThan&amp;quot;,&lt;br /&gt;
            defaultValue: 50&lt;br /&gt;
		},&lt;br /&gt;
		uuid_operation_2: { // level: sellOffer&lt;br /&gt;
    		logicalElementType: &amp;quot;operation&amp;quot;,&lt;br /&gt;
			previousLogicalElementId: &amp;quot;uuid_logical_2&amp;quot;,&lt;br /&gt;
			nextLogicalElementId: &amp;quot;uuid_childComplex_3&amp;quot;,&lt;br /&gt;
			operation: &amp;quot;or&amp;quot;&lt;br /&gt;
		},&lt;br /&gt;
		uuid_childComplex_3: { // level: sellOffer&lt;br /&gt;
			logicalElementType: &amp;quot;childComplexFilter&amp;quot;,&lt;br /&gt;
			previousLogicalElementId: uuid_operation_2,&lt;br /&gt;
			nextLogicalElementId: uuid_operation_4,&lt;br /&gt;
			childLogicalElementId: uuid_childComplex_4,&lt;br /&gt;
			relType: {&lt;br /&gt;
				relationshipTag: &amp;quot;hasSellOfferPlan&amp;quot;,&lt;br /&gt;
				serviceTag: &amp;quot;sellOfferPlan&amp;quot;&lt;br /&gt;
			},&lt;br /&gt;
			direction: &amp;quot;from&amp;quot;&lt;br /&gt;
		},&lt;br /&gt;
		uuid_childComplex_4: { // level: sellOfferPlan&lt;br /&gt;
			logicalElementType: &amp;quot;childComplexFilter&amp;quot;,&lt;br /&gt;
			previousLogicalElementId: uuid_childComplex_3,&lt;br /&gt;
			nextLogicalElementId: null,&lt;br /&gt;
			childLogicalElementId: uuid_logical_3,&lt;br /&gt;
			relType: {&lt;br /&gt;
				relationshipTag: &amp;quot;hasDeliveryMethodLink&amp;quot;,&lt;br /&gt;
				serviceTag: &amp;quot;deliveryMethodLink&amp;quot;&lt;br /&gt;
			},&lt;br /&gt;
			direction: &amp;quot;from&amp;quot;&lt;br /&gt;
		},&lt;br /&gt;
		uuid_logical_3: { // level: deliveryMethodLink&lt;br /&gt;
			logicalElementType: &amp;quot;logical&amp;quot;,&lt;br /&gt;
			previousLogicalElementId: &amp;quot;uuid_childComplex_4&amp;quot;,&lt;br /&gt;
			nextLogicalElementId: &amp;quot;uuid_operation_2&amp;quot;,&lt;br /&gt;
            fieldName: &amp;quot;fieldx&amp;quot;,&lt;br /&gt;
            comparison: &amp;quot;greaterThan&amp;quot;,&lt;br /&gt;
            defaultValue: 50&lt;br /&gt;
		},&lt;br /&gt;
		uuid_operation_3: { // level: deliveryMethodLink&lt;br /&gt;
    		logicalElementType: &amp;quot;operation&amp;quot;,&lt;br /&gt;
			previousLogicalElementId: &amp;quot;uuid_logical_3&amp;quot;,&lt;br /&gt;
			nextLogicalElementId: &amp;quot;uuid_logical_4&amp;quot;,&lt;br /&gt;
			operation: &amp;quot;or&amp;quot;&lt;br /&gt;
		},&lt;br /&gt;
		uuid_logical_4: { // level: deliveryMethodLink&lt;br /&gt;
			logicalElementType: &amp;quot;logical&amp;quot;,&lt;br /&gt;
			previousLogicalElementId: &amp;quot;uuid_operation_2&amp;quot;,&lt;br /&gt;
			nextLogicalElementId: &amp;quot;null&amp;quot;,&lt;br /&gt;
            fieldName: &amp;quot;fieldx&amp;quot;,&lt;br /&gt;
            comparison: &amp;quot;greaterThan&amp;quot;,&lt;br /&gt;
            defaultValue: 50&lt;br /&gt;
		},&lt;br /&gt;
		&lt;br /&gt;
 		uuid_operation_4: { // level: sellOffer&lt;br /&gt;
    		logicalElementType: &amp;quot;operation&amp;quot;,&lt;br /&gt;
			previousLogicalElementId: &amp;quot;uuid_childComplex_3&amp;quot;,&lt;br /&gt;
			nextLogicalElementId: &amp;quot;uuid_childComplex_5&amp;quot;,&lt;br /&gt;
			operation: &amp;quot;or&amp;quot;&lt;br /&gt;
		},&lt;br /&gt;
		uuid_childComplex_5: { // level: sellOffer&lt;br /&gt;
			logicalElementType: &amp;quot;childComplexFilter&amp;quot;,&lt;br /&gt;
			previousLogicalElementId: uuid_operation_4,&lt;br /&gt;
			nextLogicalElementId: null,&lt;br /&gt;
			childLogicalElementId: uuid_childComplex_6,&lt;br /&gt;
			relType: {&lt;br /&gt;
				relationshipTag: &amp;quot;hasSellOfferPlan&amp;quot;,&lt;br /&gt;
				serviceTag: &amp;quot;sellOfferPlan&amp;quot;&lt;br /&gt;
			},&lt;br /&gt;
			direction: &amp;quot;from&amp;quot;&lt;br /&gt;
		},&lt;br /&gt;
		uuid_childComplex_6: { // level: sellOfferPlan&lt;br /&gt;
			logicalElementType: &amp;quot;childComplexFilter&amp;quot;,&lt;br /&gt;
			previousLogicalElementId: uuid_childComplex_5,&lt;br /&gt;
			nextLogicalElementId: null,&lt;br /&gt;
			childLogicalElementId: uuid_logical_5,&lt;br /&gt;
			relType: {&lt;br /&gt;
				relationshipTag: &amp;quot;hasDeliveryMethodLink&amp;quot;,&lt;br /&gt;
				serviceTag: &amp;quot;deliveryMethodLink&amp;quot;&lt;br /&gt;
			},&lt;br /&gt;
			direction: &amp;quot;from&amp;quot;&lt;br /&gt;
		},&lt;br /&gt;
		uuid_logical_5: { // level: deliveryMethodLink&lt;br /&gt;
			logicalElementType: &amp;quot;logical&amp;quot;,&lt;br /&gt;
			previousLogicalElementId: &amp;quot;uuid_childComplex_6&amp;quot;,&lt;br /&gt;
			nextLogicalElementId: null,&lt;br /&gt;
            fieldName: &amp;quot;fieldx&amp;quot;,&lt;br /&gt;
            comparison: &amp;quot;greaterThan&amp;quot;,&lt;br /&gt;
            defaultValue: 50&lt;br /&gt;
		},&lt;br /&gt;
		uuid_closeBracket_1: { // level: product&lt;br /&gt;
			logicalElementType: &amp;quot;closeBracket&amp;quot;,&lt;br /&gt;
			previousLogicalElementId: uuid_childComplex_2,&lt;br /&gt;
			nextLogicalElementId: null,&lt;br /&gt;
		},&lt;br /&gt;
&lt;br /&gt;
		uuid_operation_5: { // level: product&lt;br /&gt;
    		logicalElementType: &amp;quot;operation&amp;quot;,&lt;br /&gt;
			previousLogicalElementId: &amp;quot;uuid_closeBracket_1&amp;quot;,&lt;br /&gt;
			nextLogicalElementId: &amp;quot;uuid_childComplex_7&amp;quot;,&lt;br /&gt;
			operation: &amp;quot;or&amp;quot;&lt;br /&gt;
		},&lt;br /&gt;
		uuid_childComplex_7: { // level: product&lt;br /&gt;
			logicalElementType: &amp;quot;childComplexFilter&amp;quot;,&lt;br /&gt;
			previousLogicalElementId: uuid_operation_5,&lt;br /&gt;
			nextLogicalElementId: null,&lt;br /&gt;
			childLogicalElementId: uuid_logical_6,&lt;br /&gt;
			relType: {&lt;br /&gt;
				relationshipTag: &amp;quot;hasSellOffer&amp;quot;,&lt;br /&gt;
				serviceTag: &amp;quot;SellOfferManager&amp;quot;&lt;br /&gt;
			},&lt;br /&gt;
			direction: &amp;quot;from&amp;quot;&lt;br /&gt;
		},&lt;br /&gt;
		uuid_logical_6: { // level: sellOffer&lt;br /&gt;
			logicalElementType: &amp;quot;logical&amp;quot;,&lt;br /&gt;
			previousLogicalElementId: &amp;quot;uuid_childComplex_7&amp;quot;,&lt;br /&gt;
			nextLogicalElementId: &amp;quot;null&amp;quot;,&lt;br /&gt;
            fieldName: &amp;quot;fieldx&amp;quot;,&lt;br /&gt;
            comparison: &amp;quot;greaterThan&amp;quot;,&lt;br /&gt;
            defaultValue: 50&lt;br /&gt;
		},&lt;br /&gt;
&lt;br /&gt;
	}&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[Category:Working documents| 2025-08-21]]&lt;br /&gt;
[[Category:Working_documents - Complex Filter| 2025-08-21]]&lt;br /&gt;
[[Category:Working_documents - Search Reasults| 2025-08-21]]&lt;/div&gt;</summary>
		<author><name>Rut</name></author>
	</entry>
	<entry>
		<id>https://izara.io/wiki/index.php?title=2025-08-21_-_ComplexFilter_SearchResult_Frontend_structure&amp;diff=3533</id>
		<title>2025-08-21 - ComplexFilter SearchResult Frontend structure</title>
		<link rel="alternate" type="text/html" href="https://izara.io/wiki/index.php?title=2025-08-21_-_ComplexFilter_SearchResult_Frontend_structure&amp;diff=3533"/>
		<updated>2025-08-26T08:25:01Z</updated>

		<summary type="html">&lt;p&gt;Rut: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Service - Complex Filter]]&lt;br /&gt;
&lt;br /&gt;
[[Service - Search Results]]&lt;br /&gt;
&lt;br /&gt;
[[2024-06-26 - SearchResult linkpath]]&lt;br /&gt;
&lt;br /&gt;
[[2024-11-28 - OrderPrice using linkPath flows]]&lt;br /&gt;
&lt;br /&gt;
= Overview =&lt;br /&gt;
&lt;br /&gt;
Creating visual representation of ComplexFilters for allowing frontend to create and manage.&lt;br /&gt;
&lt;br /&gt;
= Examples =&lt;br /&gt;
&lt;br /&gt;
* Main complex filter used in tableData&lt;br /&gt;
* filters used at each level of LinkSteps in requiredData/Linkpaths&lt;br /&gt;
* perParentComplexFilters and combinationComplexFilters used in LinkPaths&lt;br /&gt;
* complexFilters used in categoryLinks&lt;br /&gt;
&lt;br /&gt;
= Considerations =&lt;br /&gt;
&lt;br /&gt;
* Want to be able to achieve all features of complexFilters including childComplexFilters, grouping and (and/or) operations&lt;br /&gt;
* all elementTypes such as identifier/translateIds/traversals&lt;br /&gt;
* tableOutput currently separates each filterDataField to have it's own filter path&lt;br /&gt;
* operations and grouping or operations can happen at any childComplexFilter level and between filters&lt;br /&gt;
&lt;br /&gt;
= Option 1: OrGroups =&lt;br /&gt;
&lt;br /&gt;
Attempted this approach but became too complex and messy when creating multiple levels of grouped and/or statements.&lt;br /&gt;
&lt;br /&gt;
* have an array of filters, each is a single path with an optional array of filterElements at each step&lt;br /&gt;
* each filter path sets its orGroup&lt;br /&gt;
* orGroups can be child of another orGroup, child orGroups only exist/group underneath their parent hierarchy&lt;br /&gt;
* orGroups group all filter paths using an OR operator&lt;br /&gt;
* however multiple filters at the same level within an orGroup (with a single filter path are considered the same orGroup) use AND operator&lt;br /&gt;
* if same level filters need to be separated by OR need to be separate *****check with Praew*****&lt;br /&gt;
&lt;br /&gt;
== Implementation ==&lt;br /&gt;
&lt;br /&gt;
Every frontend complexFilter case must:&lt;br /&gt;
&lt;br /&gt;
* allow adding multiple filter paths&lt;br /&gt;
* have orGroup hierarchy for filter paths&lt;br /&gt;
&lt;br /&gt;
= Option 2: OperationFilters =&lt;br /&gt;
&lt;br /&gt;
An alternative method of building and editing complexFilters on frontend could be building up a chain of operationFilters, this will closely resembe the request structure of processComplexFilter&lt;br /&gt;
&lt;br /&gt;
* starts with the initial filter, choose type, eg logical or operation&lt;br /&gt;
* operation filter must go into each side and set with filter type and settings to use&lt;br /&gt;
* each side can then be an operation or a childComplexFilter&lt;br /&gt;
* adding operations chain filters at the same level&lt;br /&gt;
* childComplexFilters create a new level with a link&lt;br /&gt;
* Each operation sets it's operator (or/and)&lt;br /&gt;
* can open a new group (opening bracket) and close a group (closing bracket) at any point&lt;br /&gt;
* validate all groups at each level are opened and closed&lt;br /&gt;
* probably validate have at least one filterElement before closing&lt;br /&gt;
&lt;br /&gt;
== tableConfig ==&lt;br /&gt;
&lt;br /&gt;
* Build a single filter structure&lt;br /&gt;
* filterDataFields point to a filterElement, with additional settings if needed (eg identifying a value inside a traversal filterElement)&lt;br /&gt;
* defaultValue is moved from filterDataField to filterElement, if a filterDataField sets the value then the default filterElement value is shown first and the filterDataField can adjust it after loading&lt;br /&gt;
* if adjust the filter structure, need to go through all filterDataFields to see if they need to be updated, eg filterElement they link to is removed, maybe set to null and validate when saving tableConfig&lt;br /&gt;
&lt;br /&gt;
== notes ==&lt;br /&gt;
&lt;br /&gt;
* separate validate uiFilter from saving final filterElement structure, so can validate while building the filter&lt;br /&gt;
* have a breadcrumb or other representation of the childComplexFilter steps that can be navigated through&lt;br /&gt;
* each childComplexFilter step have a list of the added uiFilterElements, each can be clicked on to edit (or list them all)&lt;br /&gt;
* when click on a childComplexFilter move to it's level of uiFilterElements&lt;br /&gt;
* whenever adding a component we input the previous element which allows us to shuffle references&lt;br /&gt;
* cannot add closeBracket when previousLogicalElementId type openBracket, childComplexFilter, or null&lt;br /&gt;
* must choose operator when previousLogicalElementId type not openBracket, childComplexFilter, or null&lt;br /&gt;
&lt;br /&gt;
Validate:&lt;br /&gt;
* all opening brackets at each level have equal number of closing brackets&lt;br /&gt;
* all element types have required data&lt;br /&gt;
* all childComplexFilters have at least 1 uiFilterElement (childLogicalElementId != null)&lt;br /&gt;
&lt;br /&gt;
== Example ==&lt;br /&gt;
&lt;br /&gt;
* Click to buildFilter, no filterElements exists&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;js&amp;quot;&amp;gt;&lt;br /&gt;
let exampleData = {&lt;br /&gt;
	objType {&lt;br /&gt;
		objectType: &amp;quot;product&amp;quot;,&lt;br /&gt;
		serviceTag: &amp;quot;productManager&amp;quot;&lt;br /&gt;
    },&lt;br /&gt;
    &lt;br /&gt;
    initialLogicalElementId: null,&lt;br /&gt;
	logicalElements: {&lt;br /&gt;
	}&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* add uuid_openBracket_1&lt;br /&gt;
* previousLogicalElementId = null&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;js&amp;quot;&amp;gt;&lt;br /&gt;
let exampleData = {&lt;br /&gt;
	objType {&lt;br /&gt;
		objectType: &amp;quot;product&amp;quot;,&lt;br /&gt;
		serviceTag: &amp;quot;productManager&amp;quot;&lt;br /&gt;
    },&lt;br /&gt;
    &lt;br /&gt;
    initialLogicalElementId: uuid_openBracket_1,&lt;br /&gt;
	logicalElements: {&lt;br /&gt;
		uuid_openBracket_1: {&lt;br /&gt;
			logicalElementId: &amp;quot;openBracket&amp;quot;,&lt;br /&gt;
			previousLogicalElementId: null,&lt;br /&gt;
			nextLogicalElementId: null,&lt;br /&gt;
		},&lt;br /&gt;
	}&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* add uuid_childComplex_1&lt;br /&gt;
* previousLogicalElementId = uuid_openBracket_1&lt;br /&gt;
* must choose link detail when adding childComplexFilter (relType/direction)&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;js&amp;quot;&amp;gt;&lt;br /&gt;
let exampleData = {&lt;br /&gt;
	objType {&lt;br /&gt;
		objectType: &amp;quot;product&amp;quot;,&lt;br /&gt;
		serviceTag: &amp;quot;productManager&amp;quot;&lt;br /&gt;
    },&lt;br /&gt;
    &lt;br /&gt;
    initialLogicalElementId: uuid_openBracket_1,&lt;br /&gt;
	logicalElements: {&lt;br /&gt;
		uuid_openBracket_1: {&lt;br /&gt;
			logicalElementId: &amp;quot;openBracket&amp;quot;,&lt;br /&gt;
			previousLogicalElementId: null,&lt;br /&gt;
			nextLogicalElementId: uuid_childComplex_1,&lt;br /&gt;
		},&lt;br /&gt;
		uuid_childComplex_1: {&lt;br /&gt;
			logicalElementId: &amp;quot;childComplexFilter&amp;quot;,&lt;br /&gt;
			previousLogicalElementId: uuid_openBracket_1,&lt;br /&gt;
			nextLogicalElementId: null,&lt;br /&gt;
			childLogicalElementId: null,&lt;br /&gt;
			relType: {&lt;br /&gt;
				relationshipTag: &amp;quot;hasSellOffer&amp;quot;,&lt;br /&gt;
				serviceTag: &amp;quot;SellOfferManager&amp;quot;&lt;br /&gt;
			},&lt;br /&gt;
			direction: &amp;quot;from&amp;quot;&lt;br /&gt;
		},&lt;br /&gt;
	}&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* add uuid_childComplex_2&lt;br /&gt;
* OR operator&lt;br /&gt;
* previousLogicalElementId = uuid_childComplex_1&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;js&amp;quot;&amp;gt;&lt;br /&gt;
let exampleData = {&lt;br /&gt;
	objType {&lt;br /&gt;
		objectType: &amp;quot;product&amp;quot;,&lt;br /&gt;
		serviceTag: &amp;quot;productManager&amp;quot;&lt;br /&gt;
    },&lt;br /&gt;
    &lt;br /&gt;
    initialLogicalElementId: uuid_openBracket_1,&lt;br /&gt;
	logicalElements: {&lt;br /&gt;
		uuid_openBracket_1: { // level: product&lt;br /&gt;
			logicalElementId: &amp;quot;openBracket&amp;quot;,&lt;br /&gt;
			previousLogicalElementId: null,&lt;br /&gt;
			nextLogicalElementId: uuid_childComplex_1,&lt;br /&gt;
		},&lt;br /&gt;
		uuid_childComplex_1: { // level: product&lt;br /&gt;
			logicalElementId: &amp;quot;childComplexFilter&amp;quot;,&lt;br /&gt;
			previousLogicalElementId: uuid_openBracket_1,&lt;br /&gt;
			nextLogicalElementId: uuid_operation_1,&lt;br /&gt;
			childLogicalElementId: null,&lt;br /&gt;
			relType: {&lt;br /&gt;
				relationshipTag: &amp;quot;hasSellOffer&amp;quot;,&lt;br /&gt;
				serviceTag: &amp;quot;SellOfferManager&amp;quot;&lt;br /&gt;
			},&lt;br /&gt;
			direction: &amp;quot;from&amp;quot;&lt;br /&gt;
		},&lt;br /&gt;
		uuid_operation_1: { // level: product&lt;br /&gt;
			logicalElementId: &amp;quot;operation&amp;quot;,&lt;br /&gt;
			previousLogicalElementId: &amp;quot;uuid_childComplex_1&amp;quot;,&lt;br /&gt;
			nextLogicalElementId: &amp;quot;uuid_childComplex_2&amp;quot;,&lt;br /&gt;
			operation: &amp;quot;or&amp;quot;&lt;br /&gt;
		},&lt;br /&gt;
		uuid_childComplex_2: { // level: product&lt;br /&gt;
			logicalElementId: &amp;quot;childComplexFilter&amp;quot;,&lt;br /&gt;
			previousLogicalElementId: uuid_operation_1,&lt;br /&gt;
			nextLogicalElementId: null,&lt;br /&gt;
			childLogicalElementId: null,&lt;br /&gt;
			relType: {&lt;br /&gt;
				relationshipTag: &amp;quot;hasSellOffer&amp;quot;,&lt;br /&gt;
				serviceTag: &amp;quot;SellOfferManager&amp;quot;&lt;br /&gt;
			},&lt;br /&gt;
			direction: &amp;quot;from&amp;quot;&lt;br /&gt;
		},&lt;br /&gt;
	}&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* add uuid_logical_1&lt;br /&gt;
* previousLogicalElementId = uuid_childComplex_1&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;js&amp;quot;&amp;gt;&lt;br /&gt;
let exampleData = {&lt;br /&gt;
	objType {&lt;br /&gt;
		objectType: &amp;quot;product&amp;quot;,&lt;br /&gt;
		serviceTag: &amp;quot;productManager&amp;quot;&lt;br /&gt;
    },&lt;br /&gt;
    &lt;br /&gt;
    initialLogicalElementId: uuid_openBracket_1,&lt;br /&gt;
	logicalElements: {&lt;br /&gt;
		uuid_openBracket_1: { // level: product&lt;br /&gt;
			logicalElementId: &amp;quot;openBracket&amp;quot;,&lt;br /&gt;
			previousLogicalElementId: null,&lt;br /&gt;
			nextLogicalElementId: uuid_childComplex_1,&lt;br /&gt;
		},&lt;br /&gt;
		uuid_childComplex_1: { // level: product&lt;br /&gt;
			logicalElementId: &amp;quot;childComplexFilter&amp;quot;,&lt;br /&gt;
			previousLogicalElementId: uuid_openBracket_1,&lt;br /&gt;
			nextLogicalElementId: uuid_operation_1,&lt;br /&gt;
			childLogicalElementId: uuid_logical_1,&lt;br /&gt;
			relType: {&lt;br /&gt;
				relationshipTag: &amp;quot;hasSellOffer&amp;quot;,&lt;br /&gt;
				serviceTag: &amp;quot;SellOfferManager&amp;quot;&lt;br /&gt;
			},&lt;br /&gt;
			direction: &amp;quot;from&amp;quot;&lt;br /&gt;
		},&lt;br /&gt;
		uuid_operation_1: { // level: product&lt;br /&gt;
    		logicalElementId: &amp;quot;operation&amp;quot;,&lt;br /&gt;
			previousLogicalElementId: &amp;quot;uuid_childComplex_1&amp;quot;,&lt;br /&gt;
			nextLogicalElementId: &amp;quot;uuid_childComplex_2&amp;quot;,&lt;br /&gt;
			operation: &amp;quot;or&amp;quot;&lt;br /&gt;
		},&lt;br /&gt;
		uuid_childComplex_2: { // level: product&lt;br /&gt;
			logicalElementId: &amp;quot;childComplexFilter&amp;quot;,&lt;br /&gt;
			previousLogicalElementId: uuid_operation_1,&lt;br /&gt;
			nextLogicalElementId: null,&lt;br /&gt;
			childLogicalElementId: null,&lt;br /&gt;
			relType: {&lt;br /&gt;
				relationshipTag: &amp;quot;hasSellOffer&amp;quot;,&lt;br /&gt;
				serviceTag: &amp;quot;SellOfferManager&amp;quot;&lt;br /&gt;
			},&lt;br /&gt;
			direction: &amp;quot;from&amp;quot;&lt;br /&gt;
		},&lt;br /&gt;
		uuid_logical_1: { // level: sellOffer&lt;br /&gt;
			logicalElementId: &amp;quot;logical&amp;quot;,&lt;br /&gt;
			previousLogicalElementId: &amp;quot;uuid_childComplex_1&amp;quot;,&lt;br /&gt;
			nextLogicalElementId: &amp;quot;null&amp;quot;,&lt;br /&gt;
            fieldName: &amp;quot;fieldx&amp;quot;,&lt;br /&gt;
            comparison: &amp;quot;greaterThan&amp;quot;,&lt;br /&gt;
            defaultValue: 50&lt;br /&gt;
		},&lt;br /&gt;
	}&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* add uuid_logical_2&lt;br /&gt;
* previousLogicalElementId = uuid_childComplex_1&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;js&amp;quot;&amp;gt;&lt;br /&gt;
let exampleData = {&lt;br /&gt;
	objType {&lt;br /&gt;
		objectType: &amp;quot;product&amp;quot;,&lt;br /&gt;
		serviceTag: &amp;quot;productManager&amp;quot;&lt;br /&gt;
    },&lt;br /&gt;
    &lt;br /&gt;
    initialLogicalElementId: uuid_openBracket_1,&lt;br /&gt;
	logicalElements: {&lt;br /&gt;
		uuid_openBracket_1: { // level: product&lt;br /&gt;
			logicalElementId: &amp;quot;openBracket&amp;quot;,&lt;br /&gt;
			previousLogicalElementId: null,&lt;br /&gt;
			nextLogicalElementId: uuid_childComplex_1,&lt;br /&gt;
		},&lt;br /&gt;
		uuid_childComplex_1: { // level: product&lt;br /&gt;
			logicalElementId: &amp;quot;childComplexFilter&amp;quot;,&lt;br /&gt;
			previousLogicalElementId: uuid_openBracket_1,&lt;br /&gt;
			nextLogicalElementId: uuid_operation_1,&lt;br /&gt;
			childLogicalElementId: uuid_logical_1,&lt;br /&gt;
			relType: {&lt;br /&gt;
				relationshipTag: &amp;quot;hasSellOffer&amp;quot;,&lt;br /&gt;
				serviceTag: &amp;quot;SellOfferManager&amp;quot;&lt;br /&gt;
			},&lt;br /&gt;
			direction: &amp;quot;from&amp;quot;&lt;br /&gt;
		},&lt;br /&gt;
		uuid_operation_1: { // level: product&lt;br /&gt;
    		logicalElementId: &amp;quot;operation&amp;quot;,&lt;br /&gt;
			previousLogicalElementId: &amp;quot;uuid_childComplex_1&amp;quot;,&lt;br /&gt;
			nextLogicalElementId: &amp;quot;uuid_childComplex_2&amp;quot;,&lt;br /&gt;
			operation: &amp;quot;or&amp;quot;&lt;br /&gt;
		},&lt;br /&gt;
		uuid_childComplex_2: { // level: product&lt;br /&gt;
			logicalElementId: &amp;quot;childComplexFilter&amp;quot;,&lt;br /&gt;
			previousLogicalElementId: uuid_operation_1,&lt;br /&gt;
			nextLogicalElementId: null,&lt;br /&gt;
			childLogicalElementId: uuid_logical_2,&lt;br /&gt;
			relType: {&lt;br /&gt;
				relationshipTag: &amp;quot;hasSellOffer&amp;quot;,&lt;br /&gt;
				serviceTag: &amp;quot;SellOfferManager&amp;quot;&lt;br /&gt;
			},&lt;br /&gt;
			direction: &amp;quot;from&amp;quot;&lt;br /&gt;
		},&lt;br /&gt;
		uuid_logical_1: { // level: sellOffer&lt;br /&gt;
			logicalElementId: &amp;quot;logical&amp;quot;,&lt;br /&gt;
			previousLogicalElementId: &amp;quot;uuid_childComplex_1&amp;quot;,&lt;br /&gt;
			nextLogicalElementId: &amp;quot;null&amp;quot;,&lt;br /&gt;
            fieldName: &amp;quot;fieldx&amp;quot;,&lt;br /&gt;
            comparison: &amp;quot;greaterThan&amp;quot;,&lt;br /&gt;
            defaultValue: 50&lt;br /&gt;
		},&lt;br /&gt;
		uuid_logical_2: { // level: sellOffer&lt;br /&gt;
			logicalElementId: &amp;quot;logical&amp;quot;,&lt;br /&gt;
			previousLogicalElementId: &amp;quot;uuid_childComplex_2&amp;quot;,&lt;br /&gt;
			nextLogicalElementId: &amp;quot;null&amp;quot;,&lt;br /&gt;
            fieldName: &amp;quot;fieldx&amp;quot;,&lt;br /&gt;
            comparison: &amp;quot;greaterThan&amp;quot;,&lt;br /&gt;
            defaultValue: 50&lt;br /&gt;
		},&lt;br /&gt;
	}&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* add uuid_childComplex_3&lt;br /&gt;
* previousLogicalElementId = uuid_childComplex_2&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;js&amp;quot;&amp;gt;&lt;br /&gt;
let exampleData = {&lt;br /&gt;
	objType {&lt;br /&gt;
		objectType: &amp;quot;product&amp;quot;,&lt;br /&gt;
		serviceTag: &amp;quot;productManager&amp;quot;&lt;br /&gt;
    },&lt;br /&gt;
    &lt;br /&gt;
    initialLogicalElementId: uuid_openBracket_1,&lt;br /&gt;
	logicalElements: {&lt;br /&gt;
		uuid_openBracket_1: { // level: product&lt;br /&gt;
			logicalElementId: &amp;quot;openBracket&amp;quot;,&lt;br /&gt;
			previousLogicalElementId: null,&lt;br /&gt;
			nextLogicalElementId: uuid_childComplex_1,&lt;br /&gt;
		},&lt;br /&gt;
		uuid_childComplex_1: { // level: product&lt;br /&gt;
			logicalElementId: &amp;quot;childComplexFilter&amp;quot;,&lt;br /&gt;
			previousLogicalElementId: uuid_openBracket_1,&lt;br /&gt;
			nextLogicalElementId: uuid_operation_1,&lt;br /&gt;
			childLogicalElementId: uuid_logical_1,&lt;br /&gt;
			relType: {&lt;br /&gt;
				relationshipTag: &amp;quot;hasSellOffer&amp;quot;,&lt;br /&gt;
				serviceTag: &amp;quot;SellOfferManager&amp;quot;&lt;br /&gt;
			},&lt;br /&gt;
			direction: &amp;quot;from&amp;quot;&lt;br /&gt;
		},&lt;br /&gt;
		uuid_operation_1: { // level: product&lt;br /&gt;
    		logicalElementId: &amp;quot;operation&amp;quot;,&lt;br /&gt;
			previousLogicalElementId: &amp;quot;uuid_childComplex_1&amp;quot;,&lt;br /&gt;
			nextLogicalElementId: &amp;quot;uuid_childComplex_2&amp;quot;,&lt;br /&gt;
			operation: &amp;quot;or&amp;quot;&lt;br /&gt;
		},&lt;br /&gt;
		uuid_childComplex_2: { // level: product&lt;br /&gt;
			logicalElementId: &amp;quot;childComplexFilter&amp;quot;,&lt;br /&gt;
			previousLogicalElementId: uuid_operation_1,&lt;br /&gt;
			nextLogicalElementId: null,&lt;br /&gt;
			childLogicalElementId: uuid_logical_2,&lt;br /&gt;
			relType: {&lt;br /&gt;
				relationshipTag: &amp;quot;hasSellOffer&amp;quot;,&lt;br /&gt;
				serviceTag: &amp;quot;SellOfferManager&amp;quot;&lt;br /&gt;
			},&lt;br /&gt;
			direction: &amp;quot;from&amp;quot;&lt;br /&gt;
		},&lt;br /&gt;
		uuid_logical_1: { // level: sellOffer&lt;br /&gt;
			logicalElementId: &amp;quot;logical&amp;quot;,&lt;br /&gt;
			previousLogicalElementId: &amp;quot;uuid_childComplex_1&amp;quot;,&lt;br /&gt;
			nextLogicalElementId: &amp;quot;null&amp;quot;,&lt;br /&gt;
            fieldName: &amp;quot;fieldx&amp;quot;,&lt;br /&gt;
            comparison: &amp;quot;greaterThan&amp;quot;,&lt;br /&gt;
            defaultValue: 50&lt;br /&gt;
		},&lt;br /&gt;
		uuid_logical_2: { // level: sellOffer&lt;br /&gt;
			logicalElementId: &amp;quot;logical&amp;quot;,&lt;br /&gt;
			previousLogicalElementId: &amp;quot;uuid_childComplex_2&amp;quot;,&lt;br /&gt;
			nextLogicalElementId: &amp;quot;uuid_operation_2&amp;quot;,&lt;br /&gt;
            fieldName: &amp;quot;fieldx&amp;quot;,&lt;br /&gt;
            comparison: &amp;quot;greaterThan&amp;quot;,&lt;br /&gt;
            defaultValue: 50&lt;br /&gt;
		},&lt;br /&gt;
		uuid_operation_2: { // level: sellOffer&lt;br /&gt;
    		logicalElementId: &amp;quot;operation&amp;quot;,&lt;br /&gt;
			previousLogicalElementId: &amp;quot;uuid_logical_2&amp;quot;,&lt;br /&gt;
			nextLogicalElementId: &amp;quot;uuid_childComplex_3&amp;quot;,&lt;br /&gt;
			operation: &amp;quot;or&amp;quot;&lt;br /&gt;
		},&lt;br /&gt;
		uuid_childComplex_3: { // level: sellOffer&lt;br /&gt;
			logicalElementId: &amp;quot;childComplexFilter&amp;quot;,&lt;br /&gt;
			previousLogicalElementId: uuid_operation_2,&lt;br /&gt;
			nextLogicalElementId: null,&lt;br /&gt;
			childLogicalElementId: null,&lt;br /&gt;
			relType: {&lt;br /&gt;
				relationshipTag: &amp;quot;hasSellOfferPlan&amp;quot;,&lt;br /&gt;
				serviceTag: &amp;quot;sellOfferPlan&amp;quot;&lt;br /&gt;
			},&lt;br /&gt;
			direction: &amp;quot;from&amp;quot;&lt;br /&gt;
		},&lt;br /&gt;
	}&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* add uuid_childComplex_4 and add uuid_logical_3&lt;br /&gt;
* previousLogicalElementId = uuid_childComplex_3&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;js&amp;quot;&amp;gt;&lt;br /&gt;
let exampleData = {&lt;br /&gt;
	objType {&lt;br /&gt;
		objectType: &amp;quot;product&amp;quot;,&lt;br /&gt;
		serviceTag: &amp;quot;productManager&amp;quot;&lt;br /&gt;
    },&lt;br /&gt;
    &lt;br /&gt;
    initialLogicalElementId: uuid_openBracket_1,&lt;br /&gt;
	logicalElements: {&lt;br /&gt;
		uuid_openBracket_1: { // level: product&lt;br /&gt;
			logicalElementId: &amp;quot;openBracket&amp;quot;,&lt;br /&gt;
			previousLogicalElementId: null,&lt;br /&gt;
			nextLogicalElementId: uuid_childComplex_1,&lt;br /&gt;
		},&lt;br /&gt;
		uuid_childComplex_1: { // level: product&lt;br /&gt;
			logicalElementId: &amp;quot;childComplexFilter&amp;quot;,&lt;br /&gt;
			previousLogicalElementId: uuid_openBracket_1,&lt;br /&gt;
			nextLogicalElementId: uuid_operation_1,&lt;br /&gt;
			childLogicalElementId: uuid_logical_1,&lt;br /&gt;
			relType: {&lt;br /&gt;
				relationshipTag: &amp;quot;hasSellOffer&amp;quot;,&lt;br /&gt;
				serviceTag: &amp;quot;SellOfferManager&amp;quot;&lt;br /&gt;
			},&lt;br /&gt;
			direction: &amp;quot;from&amp;quot;&lt;br /&gt;
		},&lt;br /&gt;
		uuid_operation_1: { // level: product&lt;br /&gt;
    		logicalElementId: &amp;quot;operation&amp;quot;,&lt;br /&gt;
			previousLogicalElementId: &amp;quot;uuid_childComplex_1&amp;quot;,&lt;br /&gt;
			nextLogicalElementId: &amp;quot;uuid_childComplex_2&amp;quot;,&lt;br /&gt;
			operation: &amp;quot;or&amp;quot;&lt;br /&gt;
		},&lt;br /&gt;
		uuid_childComplex_2: { // level: product&lt;br /&gt;
			logicalElementId: &amp;quot;childComplexFilter&amp;quot;,&lt;br /&gt;
			previousLogicalElementId: uuid_operation_1,&lt;br /&gt;
			nextLogicalElementId: null,&lt;br /&gt;
			childLogicalElementId: uuid_logical_2,&lt;br /&gt;
			relType: {&lt;br /&gt;
				relationshipTag: &amp;quot;hasSellOffer&amp;quot;,&lt;br /&gt;
				serviceTag: &amp;quot;SellOfferManager&amp;quot;&lt;br /&gt;
			},&lt;br /&gt;
			direction: &amp;quot;from&amp;quot;&lt;br /&gt;
		},&lt;br /&gt;
		uuid_logical_1: { // level: sellOffer&lt;br /&gt;
			logicalElementId: &amp;quot;logical&amp;quot;,&lt;br /&gt;
			previousLogicalElementId: &amp;quot;uuid_childComplex_1&amp;quot;,&lt;br /&gt;
			nextLogicalElementId: &amp;quot;null&amp;quot;,&lt;br /&gt;
            fieldName: &amp;quot;fieldx&amp;quot;,&lt;br /&gt;
            comparison: &amp;quot;greaterThan&amp;quot;,&lt;br /&gt;
            defaultValue: 50&lt;br /&gt;
		},&lt;br /&gt;
		uuid_logical_2: { // level: sellOffer&lt;br /&gt;
			logicalElementId: &amp;quot;logical&amp;quot;,&lt;br /&gt;
			previousLogicalElementId: &amp;quot;uuid_childComplex_2&amp;quot;,&lt;br /&gt;
			nextLogicalElementId: &amp;quot;uuid_operation_2&amp;quot;,&lt;br /&gt;
            fieldName: &amp;quot;fieldx&amp;quot;,&lt;br /&gt;
            comparison: &amp;quot;greaterThan&amp;quot;,&lt;br /&gt;
            defaultValue: 50&lt;br /&gt;
		},&lt;br /&gt;
		uuid_operation_2: { // level: sellOffer&lt;br /&gt;
    		logicalElementId: &amp;quot;operation&amp;quot;,&lt;br /&gt;
			previousLogicalElementId: &amp;quot;uuid_logical_2&amp;quot;,&lt;br /&gt;
			nextLogicalElementId: &amp;quot;uuid_childComplex_3&amp;quot;,&lt;br /&gt;
			operation: &amp;quot;or&amp;quot;&lt;br /&gt;
		},&lt;br /&gt;
		uuid_childComplex_3: { // level: sellOffer&lt;br /&gt;
			logicalElementId: &amp;quot;childComplexFilter&amp;quot;,&lt;br /&gt;
			previousLogicalElementId: uuid_operation_2,&lt;br /&gt;
			nextLogicalElementId: null,&lt;br /&gt;
			childLogicalElementId: uuid_childComplex_4,&lt;br /&gt;
			relType: {&lt;br /&gt;
				relationshipTag: &amp;quot;hasSellOfferPlan&amp;quot;,&lt;br /&gt;
				serviceTag: &amp;quot;sellOfferPlan&amp;quot;&lt;br /&gt;
			},&lt;br /&gt;
			direction: &amp;quot;from&amp;quot;&lt;br /&gt;
		},&lt;br /&gt;
		uuid_childComplex_4: { // level: sellOfferPlan&lt;br /&gt;
			logicalElementId: &amp;quot;childComplexFilter&amp;quot;,&lt;br /&gt;
			previousLogicalElementId: uuid_childComplex_3,&lt;br /&gt;
			nextLogicalElementId: null,&lt;br /&gt;
			childLogicalElementId: uuid_logical_3,&lt;br /&gt;
			relType: {&lt;br /&gt;
				relationshipTag: &amp;quot;hasDeliveryMethodLink&amp;quot;,&lt;br /&gt;
				serviceTag: &amp;quot;sellOfferPlan&amp;quot;&lt;br /&gt;
			},&lt;br /&gt;
			direction: &amp;quot;from&amp;quot;&lt;br /&gt;
		},&lt;br /&gt;
		uuid_logical_3: { // level: deliveryMethodLink&lt;br /&gt;
			logicalElementId: &amp;quot;logical&amp;quot;,&lt;br /&gt;
			previousLogicalElementId: &amp;quot;uuid_childComplex_4&amp;quot;,&lt;br /&gt;
			nextLogicalElementId: &amp;quot;null&amp;quot;,&lt;br /&gt;
            fieldName: &amp;quot;fieldx&amp;quot;,&lt;br /&gt;
            comparison: &amp;quot;greaterThan&amp;quot;,&lt;br /&gt;
            defaultValue: 50&lt;br /&gt;
		},&lt;br /&gt;
	}&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* add uuid_logical_4&lt;br /&gt;
* OR operator&lt;br /&gt;
* previousLogicalElementId = uuid_logical_3&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;js&amp;quot;&amp;gt;&lt;br /&gt;
let exampleData = {&lt;br /&gt;
	objType {&lt;br /&gt;
		objectType: &amp;quot;product&amp;quot;,&lt;br /&gt;
		serviceTag: &amp;quot;productManager&amp;quot;&lt;br /&gt;
    },&lt;br /&gt;
    &lt;br /&gt;
    initialLogicalElementId: uuid_openBracket_1,&lt;br /&gt;
	logicalElements: {&lt;br /&gt;
		uuid_openBracket_1: { // level: product&lt;br /&gt;
			logicalElementId: &amp;quot;openBracket&amp;quot;,&lt;br /&gt;
			previousLogicalElementId: null,&lt;br /&gt;
			nextLogicalElementId: uuid_childComplex_1,&lt;br /&gt;
		},&lt;br /&gt;
		uuid_childComplex_1: { // level: product&lt;br /&gt;
			logicalElementId: &amp;quot;childComplexFilter&amp;quot;,&lt;br /&gt;
			previousLogicalElementId: uuid_openBracket_1,&lt;br /&gt;
			nextLogicalElementId: uuid_operation_1,&lt;br /&gt;
			childLogicalElementId: uuid_logical_1,&lt;br /&gt;
			relType: {&lt;br /&gt;
				relationshipTag: &amp;quot;hasSellOffer&amp;quot;,&lt;br /&gt;
				serviceTag: &amp;quot;SellOfferManager&amp;quot;&lt;br /&gt;
			},&lt;br /&gt;
			direction: &amp;quot;from&amp;quot;&lt;br /&gt;
		},&lt;br /&gt;
		uuid_operation_1: { // level: product&lt;br /&gt;
    		logicalElementId: &amp;quot;operation&amp;quot;,&lt;br /&gt;
			previousLogicalElementId: &amp;quot;uuid_childComplex_1&amp;quot;,&lt;br /&gt;
			nextLogicalElementId: &amp;quot;uuid_childComplex_2&amp;quot;,&lt;br /&gt;
			operation: &amp;quot;or&amp;quot;&lt;br /&gt;
		},&lt;br /&gt;
		uuid_childComplex_2: { // level: product&lt;br /&gt;
			logicalElementId: &amp;quot;childComplexFilter&amp;quot;,&lt;br /&gt;
			previousLogicalElementId: uuid_operation_1,&lt;br /&gt;
			nextLogicalElementId: null,&lt;br /&gt;
			childLogicalElementId: uuid_logical_2,&lt;br /&gt;
			relType: {&lt;br /&gt;
				relationshipTag: &amp;quot;hasSellOffer&amp;quot;,&lt;br /&gt;
				serviceTag: &amp;quot;SellOfferManager&amp;quot;&lt;br /&gt;
			},&lt;br /&gt;
			direction: &amp;quot;from&amp;quot;&lt;br /&gt;
		},&lt;br /&gt;
		uuid_logical_1: { // level: sellOffer&lt;br /&gt;
			logicalElementId: &amp;quot;logical&amp;quot;,&lt;br /&gt;
			previousLogicalElementId: &amp;quot;uuid_childComplex_1&amp;quot;,&lt;br /&gt;
			nextLogicalElementId: &amp;quot;null&amp;quot;,&lt;br /&gt;
            fieldName: &amp;quot;fieldx&amp;quot;,&lt;br /&gt;
            comparison: &amp;quot;greaterThan&amp;quot;,&lt;br /&gt;
            defaultValue: 50&lt;br /&gt;
		},&lt;br /&gt;
		uuid_logical_2: { // level: sellOffer&lt;br /&gt;
			logicalElementId: &amp;quot;logical&amp;quot;,&lt;br /&gt;
			previousLogicalElementId: &amp;quot;uuid_childComplex_2&amp;quot;,&lt;br /&gt;
			nextLogicalElementId: &amp;quot;uuid_operation_2&amp;quot;,&lt;br /&gt;
            fieldName: &amp;quot;fieldx&amp;quot;,&lt;br /&gt;
            comparison: &amp;quot;greaterThan&amp;quot;,&lt;br /&gt;
            defaultValue: 50&lt;br /&gt;
		},&lt;br /&gt;
		uuid_operation_2: { // level: sellOffer&lt;br /&gt;
    		logicalElementId: &amp;quot;operation&amp;quot;,&lt;br /&gt;
			previousLogicalElementId: &amp;quot;uuid_logical_2&amp;quot;,&lt;br /&gt;
			nextLogicalElementId: &amp;quot;uuid_childComplex_3&amp;quot;,&lt;br /&gt;
			operation: &amp;quot;or&amp;quot;&lt;br /&gt;
		},&lt;br /&gt;
		uuid_childComplex_3: { // level: sellOffer&lt;br /&gt;
			logicalElementId: &amp;quot;childComplexFilter&amp;quot;,&lt;br /&gt;
			previousLogicalElementId: uuid_operation_2,&lt;br /&gt;
			nextLogicalElementId: null,&lt;br /&gt;
			childLogicalElementId: uuid_childComplex_4,&lt;br /&gt;
			relType: {&lt;br /&gt;
				relationshipTag: &amp;quot;hasSellOfferPlan&amp;quot;,&lt;br /&gt;
				serviceTag: &amp;quot;sellOfferPlan&amp;quot;&lt;br /&gt;
			},&lt;br /&gt;
			direction: &amp;quot;from&amp;quot;&lt;br /&gt;
		},&lt;br /&gt;
		uuid_childComplex_4: { // level: sellOfferPlan&lt;br /&gt;
			logicalElementId: &amp;quot;childComplexFilter&amp;quot;,&lt;br /&gt;
			previousLogicalElementId: uuid_childComplex_3,&lt;br /&gt;
			nextLogicalElementId: null,&lt;br /&gt;
			childLogicalElementId: uuid_logical_3,&lt;br /&gt;
			relType: {&lt;br /&gt;
				relationshipTag: &amp;quot;hasDeliveryMethodLink&amp;quot;,&lt;br /&gt;
				serviceTag: &amp;quot;deliveryMethodLink&amp;quot;&lt;br /&gt;
			},&lt;br /&gt;
			direction: &amp;quot;from&amp;quot;&lt;br /&gt;
		},&lt;br /&gt;
		uuid_logical_3: { // level: deliveryMethodLink&lt;br /&gt;
			logicalElementId: &amp;quot;logical&amp;quot;,&lt;br /&gt;
			previousLogicalElementId: &amp;quot;uuid_childComplex_4&amp;quot;,&lt;br /&gt;
			nextLogicalElementId: &amp;quot;uuid_operation_2&amp;quot;,&lt;br /&gt;
            fieldName: &amp;quot;fieldx&amp;quot;,&lt;br /&gt;
            comparison: &amp;quot;greaterThan&amp;quot;,&lt;br /&gt;
            defaultValue: 50&lt;br /&gt;
		},&lt;br /&gt;
		uuid_operation_3: { // level: deliveryMethodLink&lt;br /&gt;
    		logicalElementId: &amp;quot;operation&amp;quot;,&lt;br /&gt;
			previousLogicalElementId: &amp;quot;uuid_logical_3&amp;quot;,&lt;br /&gt;
			nextLogicalElementId: &amp;quot;uuid_logical_4&amp;quot;,&lt;br /&gt;
			operation: &amp;quot;or&amp;quot;&lt;br /&gt;
		},&lt;br /&gt;
		uuid_logical_4: { // level: deliveryMethodLink&lt;br /&gt;
			logicalElementId: &amp;quot;logical&amp;quot;,&lt;br /&gt;
			previousLogicalElementId: &amp;quot;uuid_operation_2&amp;quot;,&lt;br /&gt;
			nextLogicalElementId: &amp;quot;null&amp;quot;,&lt;br /&gt;
            fieldName: &amp;quot;fieldx&amp;quot;,&lt;br /&gt;
            comparison: &amp;quot;greaterThan&amp;quot;,&lt;br /&gt;
            defaultValue: 50&lt;br /&gt;
		},&lt;br /&gt;
	}&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* add uuid_childComplex_5 and uuid_childComplex_6 and uuid_logical_5&lt;br /&gt;
* AND operator&lt;br /&gt;
* previousLogicalElementId = uuid_childComplex_3&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;js&amp;quot;&amp;gt;&lt;br /&gt;
let exampleData = {&lt;br /&gt;
	objType {&lt;br /&gt;
		objectType: &amp;quot;product&amp;quot;,&lt;br /&gt;
		serviceTag: &amp;quot;productManager&amp;quot;&lt;br /&gt;
    },&lt;br /&gt;
    &lt;br /&gt;
    initialLogicalElementId: uuid_openBracket_1,&lt;br /&gt;
	logicalElements: {&lt;br /&gt;
		uuid_openBracket_1: { // level: product&lt;br /&gt;
			logicalElementId: &amp;quot;openBracket&amp;quot;,&lt;br /&gt;
			previousLogicalElementId: null,&lt;br /&gt;
			nextLogicalElementId: uuid_childComplex_1,&lt;br /&gt;
		},&lt;br /&gt;
		uuid_childComplex_1: { // level: product&lt;br /&gt;
			logicalElementId: &amp;quot;childComplexFilter&amp;quot;,&lt;br /&gt;
			previousLogicalElementId: uuid_openBracket_1,&lt;br /&gt;
			nextLogicalElementId: uuid_operation_1,&lt;br /&gt;
			childLogicalElementId: uuid_logical_1,&lt;br /&gt;
			relType: {&lt;br /&gt;
				relationshipTag: &amp;quot;hasSellOffer&amp;quot;,&lt;br /&gt;
				serviceTag: &amp;quot;SellOfferManager&amp;quot;&lt;br /&gt;
			},&lt;br /&gt;
			direction: &amp;quot;from&amp;quot;&lt;br /&gt;
		},&lt;br /&gt;
		uuid_operation_1: { // level: product&lt;br /&gt;
    		logicalElementId: &amp;quot;operation&amp;quot;,&lt;br /&gt;
			previousLogicalElementId: &amp;quot;uuid_childComplex_1&amp;quot;,&lt;br /&gt;
			nextLogicalElementId: &amp;quot;uuid_childComplex_2&amp;quot;,&lt;br /&gt;
			operation: &amp;quot;or&amp;quot;&lt;br /&gt;
		},&lt;br /&gt;
		uuid_childComplex_2: { // level: product&lt;br /&gt;
			logicalElementId: &amp;quot;childComplexFilter&amp;quot;,&lt;br /&gt;
			previousLogicalElementId: uuid_operation_1,&lt;br /&gt;
			nextLogicalElementId: null,&lt;br /&gt;
			childLogicalElementId: uuid_logical_2,&lt;br /&gt;
			relType: {&lt;br /&gt;
				relationshipTag: &amp;quot;hasSellOffer&amp;quot;,&lt;br /&gt;
				serviceTag: &amp;quot;SellOfferManager&amp;quot;&lt;br /&gt;
			},&lt;br /&gt;
			direction: &amp;quot;from&amp;quot;&lt;br /&gt;
		},&lt;br /&gt;
		uuid_logical_1: { // level: sellOffer&lt;br /&gt;
			logicalElementId: &amp;quot;logical&amp;quot;,&lt;br /&gt;
			previousLogicalElementId: &amp;quot;uuid_childComplex_1&amp;quot;,&lt;br /&gt;
			nextLogicalElementId: &amp;quot;null&amp;quot;,&lt;br /&gt;
            fieldName: &amp;quot;fieldx&amp;quot;,&lt;br /&gt;
            comparison: &amp;quot;greaterThan&amp;quot;,&lt;br /&gt;
            defaultValue: 50&lt;br /&gt;
		},&lt;br /&gt;
		uuid_logical_2: { // level: sellOffer&lt;br /&gt;
			logicalElementId: &amp;quot;logical&amp;quot;,&lt;br /&gt;
			previousLogicalElementId: &amp;quot;uuid_childComplex_2&amp;quot;,&lt;br /&gt;
			nextLogicalElementId: &amp;quot;uuid_operation_2&amp;quot;,&lt;br /&gt;
            fieldName: &amp;quot;fieldx&amp;quot;,&lt;br /&gt;
            comparison: &amp;quot;greaterThan&amp;quot;,&lt;br /&gt;
            defaultValue: 50&lt;br /&gt;
		},&lt;br /&gt;
		uuid_operation_2: { // level: sellOffer&lt;br /&gt;
    		logicalElementId: &amp;quot;operation&amp;quot;,&lt;br /&gt;
			previousLogicalElementId: &amp;quot;uuid_logical_2&amp;quot;,&lt;br /&gt;
			nextLogicalElementId: &amp;quot;uuid_childComplex_3&amp;quot;,&lt;br /&gt;
			operation: &amp;quot;or&amp;quot;&lt;br /&gt;
		},&lt;br /&gt;
		uuid_childComplex_3: { // level: sellOffer&lt;br /&gt;
			logicalElementId: &amp;quot;childComplexFilter&amp;quot;,&lt;br /&gt;
			previousLogicalElementId: uuid_operation_2,&lt;br /&gt;
			nextLogicalElementId: uuid_operation_4,&lt;br /&gt;
			childLogicalElementId: uuid_childComplex_4,&lt;br /&gt;
			relType: {&lt;br /&gt;
				relationshipTag: &amp;quot;hasSellOfferPlan&amp;quot;,&lt;br /&gt;
				serviceTag: &amp;quot;sellOfferPlan&amp;quot;&lt;br /&gt;
			},&lt;br /&gt;
			direction: &amp;quot;from&amp;quot;&lt;br /&gt;
		},&lt;br /&gt;
		uuid_childComplex_4: { // level: sellOfferPlan&lt;br /&gt;
			logicalElementId: &amp;quot;childComplexFilter&amp;quot;,&lt;br /&gt;
			previousLogicalElementId: uuid_childComplex_3,&lt;br /&gt;
			nextLogicalElementId: null,&lt;br /&gt;
			childLogicalElementId: uuid_logical_3,&lt;br /&gt;
			relType: {&lt;br /&gt;
				relationshipTag: &amp;quot;hasDeliveryMethodLink&amp;quot;,&lt;br /&gt;
				serviceTag: &amp;quot;deliveryMethodLink&amp;quot;&lt;br /&gt;
			},&lt;br /&gt;
			direction: &amp;quot;from&amp;quot;&lt;br /&gt;
		},&lt;br /&gt;
		uuid_logical_3: { // level: deliveryMethodLink&lt;br /&gt;
			logicalElementId: &amp;quot;logical&amp;quot;,&lt;br /&gt;
			previousLogicalElementId: &amp;quot;uuid_childComplex_4&amp;quot;,&lt;br /&gt;
			nextLogicalElementId: &amp;quot;uuid_operation_2&amp;quot;,&lt;br /&gt;
            fieldName: &amp;quot;fieldx&amp;quot;,&lt;br /&gt;
            comparison: &amp;quot;greaterThan&amp;quot;,&lt;br /&gt;
            defaultValue: 50&lt;br /&gt;
		},&lt;br /&gt;
		uuid_operation_3: { // level: deliveryMethodLink&lt;br /&gt;
    		logicalElementId: &amp;quot;operation&amp;quot;,&lt;br /&gt;
			previousLogicalElementId: &amp;quot;uuid_logical_3&amp;quot;,&lt;br /&gt;
			nextLogicalElementId: &amp;quot;uuid_logical_4&amp;quot;,&lt;br /&gt;
			operation: &amp;quot;or&amp;quot;&lt;br /&gt;
		},&lt;br /&gt;
		uuid_logical_4: { // level: deliveryMethodLink&lt;br /&gt;
			logicalElementId: &amp;quot;logical&amp;quot;,&lt;br /&gt;
			previousLogicalElementId: &amp;quot;uuid_operation_2&amp;quot;,&lt;br /&gt;
			nextLogicalElementId: &amp;quot;null&amp;quot;,&lt;br /&gt;
            fieldName: &amp;quot;fieldx&amp;quot;,&lt;br /&gt;
            comparison: &amp;quot;greaterThan&amp;quot;,&lt;br /&gt;
            defaultValue: 50&lt;br /&gt;
		},&lt;br /&gt;
		&lt;br /&gt;
 		uuid_operation_4: { // level: sellOffer&lt;br /&gt;
    		logicalElementId: &amp;quot;operation&amp;quot;,&lt;br /&gt;
			previousLogicalElementId: &amp;quot;uuid_childComplex_3&amp;quot;,&lt;br /&gt;
			nextLogicalElementId: &amp;quot;uuid_childComplex_5&amp;quot;,&lt;br /&gt;
			operation: &amp;quot;or&amp;quot;&lt;br /&gt;
		},&lt;br /&gt;
		uuid_childComplex_5: { // level: sellOffer&lt;br /&gt;
			logicalElementId: &amp;quot;childComplexFilter&amp;quot;,&lt;br /&gt;
			previousLogicalElementId: uuid_operation_4,&lt;br /&gt;
			nextLogicalElementId: null,&lt;br /&gt;
			childLogicalElementId: uuid_childComplex_6,&lt;br /&gt;
			relType: {&lt;br /&gt;
				relationshipTag: &amp;quot;hasSellOfferPlan&amp;quot;,&lt;br /&gt;
				serviceTag: &amp;quot;sellOfferPlan&amp;quot;&lt;br /&gt;
			},&lt;br /&gt;
			direction: &amp;quot;from&amp;quot;&lt;br /&gt;
		},&lt;br /&gt;
		uuid_childComplex_6: { // level: sellOfferPlan&lt;br /&gt;
			logicalElementId: &amp;quot;childComplexFilter&amp;quot;,&lt;br /&gt;
			previousLogicalElementId: uuid_childComplex_5,&lt;br /&gt;
			nextLogicalElementId: null,&lt;br /&gt;
			childLogicalElementId: uuid_logical_5,&lt;br /&gt;
			relType: {&lt;br /&gt;
				relationshipTag: &amp;quot;hasDeliveryMethodLink&amp;quot;,&lt;br /&gt;
				serviceTag: &amp;quot;deliveryMethodLink&amp;quot;&lt;br /&gt;
			},&lt;br /&gt;
			direction: &amp;quot;from&amp;quot;&lt;br /&gt;
		},&lt;br /&gt;
		uuid_logical_5: { // level: deliveryMethodLink&lt;br /&gt;
			logicalElementId: &amp;quot;logical&amp;quot;,&lt;br /&gt;
			previousLogicalElementId: &amp;quot;uuid_childComplex_6&amp;quot;,&lt;br /&gt;
			nextLogicalElementId: null,&lt;br /&gt;
            fieldName: &amp;quot;fieldx&amp;quot;,&lt;br /&gt;
            comparison: &amp;quot;greaterThan&amp;quot;,&lt;br /&gt;
            defaultValue: 50&lt;br /&gt;
		},&lt;br /&gt;
		&lt;br /&gt;
	}&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* add closeBracket&lt;br /&gt;
* previousLogicalElementId = uuid_childComplex_2&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;js&amp;quot;&amp;gt;&lt;br /&gt;
let exampleData = {&lt;br /&gt;
	objType {&lt;br /&gt;
		objectType: &amp;quot;product&amp;quot;,&lt;br /&gt;
		serviceTag: &amp;quot;productManager&amp;quot;&lt;br /&gt;
    },&lt;br /&gt;
    &lt;br /&gt;
    initialLogicalElementId: uuid_openBracket_1,&lt;br /&gt;
	logicalElements: {&lt;br /&gt;
		uuid_openBracket_1: { // level: product&lt;br /&gt;
			logicalElementId: &amp;quot;openBracket&amp;quot;,&lt;br /&gt;
			previousLogicalElementId: null,&lt;br /&gt;
			nextLogicalElementId: uuid_childComplex_1,&lt;br /&gt;
		},&lt;br /&gt;
		uuid_childComplex_1: { // level: product&lt;br /&gt;
			logicalElementId: &amp;quot;childComplexFilter&amp;quot;,&lt;br /&gt;
			previousLogicalElementId: uuid_openBracket_1,&lt;br /&gt;
			nextLogicalElementId: uuid_operation_1,&lt;br /&gt;
			childLogicalElementId: uuid_logical_1,&lt;br /&gt;
			relType: {&lt;br /&gt;
				relationshipTag: &amp;quot;hasSellOffer&amp;quot;,&lt;br /&gt;
				serviceTag: &amp;quot;SellOfferManager&amp;quot;&lt;br /&gt;
			},&lt;br /&gt;
			direction: &amp;quot;from&amp;quot;&lt;br /&gt;
		},&lt;br /&gt;
		uuid_operation_1: { // level: product&lt;br /&gt;
    		logicalElementId: &amp;quot;operation&amp;quot;,&lt;br /&gt;
			previousLogicalElementId: &amp;quot;uuid_childComplex_1&amp;quot;,&lt;br /&gt;
			nextLogicalElementId: &amp;quot;uuid_childComplex_2&amp;quot;,&lt;br /&gt;
			operation: &amp;quot;or&amp;quot;&lt;br /&gt;
		},&lt;br /&gt;
		uuid_childComplex_2: { // level: product&lt;br /&gt;
			logicalElementId: &amp;quot;childComplexFilter&amp;quot;,&lt;br /&gt;
			previousLogicalElementId: uuid_operation_1,&lt;br /&gt;
			nextLogicalElementId: uuid_closeBracket_1,&lt;br /&gt;
			childLogicalElementId: uuid_logical_2,&lt;br /&gt;
			relType: {&lt;br /&gt;
				relationshipTag: &amp;quot;hasSellOffer&amp;quot;,&lt;br /&gt;
				serviceTag: &amp;quot;SellOfferManager&amp;quot;&lt;br /&gt;
			},&lt;br /&gt;
			direction: &amp;quot;from&amp;quot;&lt;br /&gt;
		},&lt;br /&gt;
		uuid_logical_1: { // level: sellOffer&lt;br /&gt;
			logicalElementId: &amp;quot;logical&amp;quot;,&lt;br /&gt;
			previousLogicalElementId: &amp;quot;uuid_childComplex_1&amp;quot;,&lt;br /&gt;
			nextLogicalElementId: &amp;quot;null&amp;quot;,&lt;br /&gt;
            fieldName: &amp;quot;fieldx&amp;quot;,&lt;br /&gt;
            comparison: &amp;quot;greaterThan&amp;quot;,&lt;br /&gt;
            defaultValue: 50&lt;br /&gt;
		},&lt;br /&gt;
		uuid_logical_2: { // level: sellOffer&lt;br /&gt;
			logicalElementId: &amp;quot;logical&amp;quot;,&lt;br /&gt;
			previousLogicalElementId: &amp;quot;uuid_childComplex_2&amp;quot;,&lt;br /&gt;
			nextLogicalElementId: &amp;quot;uuid_operation_2&amp;quot;,&lt;br /&gt;
            fieldName: &amp;quot;fieldx&amp;quot;,&lt;br /&gt;
            comparison: &amp;quot;greaterThan&amp;quot;,&lt;br /&gt;
            defaultValue: 50&lt;br /&gt;
		},&lt;br /&gt;
		uuid_operation_2: { // level: sellOffer&lt;br /&gt;
    		logicalElementId: &amp;quot;operation&amp;quot;,&lt;br /&gt;
			previousLogicalElementId: &amp;quot;uuid_logical_2&amp;quot;,&lt;br /&gt;
			nextLogicalElementId: &amp;quot;uuid_childComplex_3&amp;quot;,&lt;br /&gt;
			operation: &amp;quot;or&amp;quot;&lt;br /&gt;
		},&lt;br /&gt;
		uuid_childComplex_3: { // level: sellOffer&lt;br /&gt;
			logicalElementId: &amp;quot;childComplexFilter&amp;quot;,&lt;br /&gt;
			previousLogicalElementId: uuid_operation_2,&lt;br /&gt;
			nextLogicalElementId: uuid_operation_4,&lt;br /&gt;
			childLogicalElementId: uuid_childComplex_4,&lt;br /&gt;
			relType: {&lt;br /&gt;
				relationshipTag: &amp;quot;hasSellOfferPlan&amp;quot;,&lt;br /&gt;
				serviceTag: &amp;quot;sellOfferPlan&amp;quot;&lt;br /&gt;
			},&lt;br /&gt;
			direction: &amp;quot;from&amp;quot;&lt;br /&gt;
		},&lt;br /&gt;
		uuid_childComplex_4: { // level: sellOfferPlan&lt;br /&gt;
			logicalElementId: &amp;quot;childComplexFilter&amp;quot;,&lt;br /&gt;
			previousLogicalElementId: uuid_childComplex_3,&lt;br /&gt;
			nextLogicalElementId: null,&lt;br /&gt;
			childLogicalElementId: uuid_logical_3,&lt;br /&gt;
			relType: {&lt;br /&gt;
				relationshipTag: &amp;quot;hasDeliveryMethodLink&amp;quot;,&lt;br /&gt;
				serviceTag: &amp;quot;deliveryMethodLink&amp;quot;&lt;br /&gt;
			},&lt;br /&gt;
			direction: &amp;quot;from&amp;quot;&lt;br /&gt;
		},&lt;br /&gt;
		uuid_logical_3: { // level: deliveryMethodLink&lt;br /&gt;
			logicalElementId: &amp;quot;logical&amp;quot;,&lt;br /&gt;
			previousLogicalElementId: &amp;quot;uuid_childComplex_4&amp;quot;,&lt;br /&gt;
			nextLogicalElementId: &amp;quot;uuid_operation_2&amp;quot;,&lt;br /&gt;
            fieldName: &amp;quot;fieldx&amp;quot;,&lt;br /&gt;
            comparison: &amp;quot;greaterThan&amp;quot;,&lt;br /&gt;
            defaultValue: 50&lt;br /&gt;
		},&lt;br /&gt;
		uuid_operation_3: { // level: deliveryMethodLink&lt;br /&gt;
    		logicalElementId: &amp;quot;operation&amp;quot;,&lt;br /&gt;
			previousLogicalElementId: &amp;quot;uuid_logical_3&amp;quot;,&lt;br /&gt;
			nextLogicalElementId: &amp;quot;uuid_logical_4&amp;quot;,&lt;br /&gt;
			operation: &amp;quot;or&amp;quot;&lt;br /&gt;
		},&lt;br /&gt;
		uuid_logical_4: { // level: deliveryMethodLink&lt;br /&gt;
			logicalElementId: &amp;quot;logical&amp;quot;,&lt;br /&gt;
			previousLogicalElementId: &amp;quot;uuid_operation_2&amp;quot;,&lt;br /&gt;
			nextLogicalElementId: &amp;quot;null&amp;quot;,&lt;br /&gt;
            fieldName: &amp;quot;fieldx&amp;quot;,&lt;br /&gt;
            comparison: &amp;quot;greaterThan&amp;quot;,&lt;br /&gt;
            defaultValue: 50&lt;br /&gt;
		},&lt;br /&gt;
		&lt;br /&gt;
 		uuid_operation_4: { // level: sellOffer&lt;br /&gt;
    		logicalElementId: &amp;quot;operation&amp;quot;,&lt;br /&gt;
			previousLogicalElementId: &amp;quot;uuid_childComplex_3&amp;quot;,&lt;br /&gt;
			nextLogicalElementId: &amp;quot;uuid_childComplex_5&amp;quot;,&lt;br /&gt;
			operation: &amp;quot;or&amp;quot;&lt;br /&gt;
		},&lt;br /&gt;
		uuid_childComplex_5: { // level: sellOffer&lt;br /&gt;
			logicalElementId: &amp;quot;childComplexFilter&amp;quot;,&lt;br /&gt;
			previousLogicalElementId: uuid_operation_4,&lt;br /&gt;
			nextLogicalElementId: null,&lt;br /&gt;
			childLogicalElementId: uuid_childComplex_6,&lt;br /&gt;
			relType: {&lt;br /&gt;
				relationshipTag: &amp;quot;hasSellOfferPlan&amp;quot;,&lt;br /&gt;
				serviceTag: &amp;quot;sellOfferPlan&amp;quot;&lt;br /&gt;
			},&lt;br /&gt;
			direction: &amp;quot;from&amp;quot;&lt;br /&gt;
		},&lt;br /&gt;
		uuid_childComplex_6: { // level: sellOfferPlan&lt;br /&gt;
			logicalElementId: &amp;quot;childComplexFilter&amp;quot;,&lt;br /&gt;
			previousLogicalElementId: uuid_childComplex_5,&lt;br /&gt;
			nextLogicalElementId: null,&lt;br /&gt;
			childLogicalElementId: uuid_logical_5,&lt;br /&gt;
			relType: {&lt;br /&gt;
				relationshipTag: &amp;quot;hasDeliveryMethodLink&amp;quot;,&lt;br /&gt;
				serviceTag: &amp;quot;deliveryMethodLink&amp;quot;&lt;br /&gt;
			},&lt;br /&gt;
			direction: &amp;quot;from&amp;quot;&lt;br /&gt;
		},&lt;br /&gt;
		uuid_logical_5: { // level: deliveryMethodLink&lt;br /&gt;
			logicalElementId: &amp;quot;logical&amp;quot;,&lt;br /&gt;
			previousLogicalElementId: &amp;quot;uuid_childComplex_6&amp;quot;,&lt;br /&gt;
			nextLogicalElementId: null,&lt;br /&gt;
            fieldName: &amp;quot;fieldx&amp;quot;,&lt;br /&gt;
            comparison: &amp;quot;greaterThan&amp;quot;,&lt;br /&gt;
            defaultValue: 50&lt;br /&gt;
		},&lt;br /&gt;
		uuid_closeBracket_1: { // level: product&lt;br /&gt;
			logicalElementId: &amp;quot;openBracket&amp;quot;,&lt;br /&gt;
			previousLogicalElementId: uuid_childComplex_2,&lt;br /&gt;
			nextLogicalElementId: null,&lt;br /&gt;
		},&lt;br /&gt;
		&lt;br /&gt;
	}&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* add uuid_childComplex_7 and uuid_logical_6&lt;br /&gt;
* AND operator&lt;br /&gt;
* previousLogicalElementId = uuid_closeBracket_1&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;js&amp;quot;&amp;gt;&lt;br /&gt;
let exampleData = {&lt;br /&gt;
	objType {&lt;br /&gt;
		objectType: &amp;quot;product&amp;quot;,&lt;br /&gt;
		serviceTag: &amp;quot;productManager&amp;quot;&lt;br /&gt;
    },&lt;br /&gt;
    &lt;br /&gt;
    initialLogicalElementId: uuid_openBracket_1,&lt;br /&gt;
	logicalElements: {&lt;br /&gt;
		uuid_openBracket_1: { // level: product&lt;br /&gt;
			logicalElementId: &amp;quot;openBracket&amp;quot;,&lt;br /&gt;
			previousLogicalElementId: null,&lt;br /&gt;
			nextLogicalElementId: uuid_childComplex_1,&lt;br /&gt;
		},&lt;br /&gt;
		uuid_childComplex_1: { // level: product&lt;br /&gt;
			logicalElementId: &amp;quot;childComplexFilter&amp;quot;,&lt;br /&gt;
			previousLogicalElementId: uuid_openBracket_1,&lt;br /&gt;
			nextLogicalElementId: uuid_operation_1,&lt;br /&gt;
			childLogicalElementId: uuid_logical_1,&lt;br /&gt;
			relType: {&lt;br /&gt;
				relationshipTag: &amp;quot;hasSellOffer&amp;quot;,&lt;br /&gt;
				serviceTag: &amp;quot;SellOfferManager&amp;quot;&lt;br /&gt;
			},&lt;br /&gt;
			direction: &amp;quot;from&amp;quot;&lt;br /&gt;
		},&lt;br /&gt;
		uuid_operation_1: { // level: product&lt;br /&gt;
    		logicalElementId: &amp;quot;operation&amp;quot;,&lt;br /&gt;
			previousLogicalElementId: &amp;quot;uuid_childComplex_1&amp;quot;,&lt;br /&gt;
			nextLogicalElementId: &amp;quot;uuid_childComplex_2&amp;quot;,&lt;br /&gt;
			operation: &amp;quot;or&amp;quot;&lt;br /&gt;
		},&lt;br /&gt;
		uuid_childComplex_2: { // level: product&lt;br /&gt;
			logicalElementId: &amp;quot;childComplexFilter&amp;quot;,&lt;br /&gt;
			previousLogicalElementId: uuid_operation_1,&lt;br /&gt;
			nextLogicalElementId: uuid_closeBracket_1,&lt;br /&gt;
			childLogicalElementId: uuid_logical_2,&lt;br /&gt;
			relType: {&lt;br /&gt;
				relationshipTag: &amp;quot;hasSellOffer&amp;quot;,&lt;br /&gt;
				serviceTag: &amp;quot;SellOfferManager&amp;quot;&lt;br /&gt;
			},&lt;br /&gt;
			direction: &amp;quot;from&amp;quot;&lt;br /&gt;
		},&lt;br /&gt;
		uuid_logical_1: { // level: sellOffer&lt;br /&gt;
			logicalElementId: &amp;quot;logical&amp;quot;,&lt;br /&gt;
			previousLogicalElementId: &amp;quot;uuid_childComplex_1&amp;quot;,&lt;br /&gt;
			nextLogicalElementId: &amp;quot;null&amp;quot;,&lt;br /&gt;
            fieldName: &amp;quot;fieldx&amp;quot;,&lt;br /&gt;
            comparison: &amp;quot;greaterThan&amp;quot;,&lt;br /&gt;
            defaultValue: 50&lt;br /&gt;
		},&lt;br /&gt;
		uuid_logical_2: { // level: sellOffer&lt;br /&gt;
			logicalElementId: &amp;quot;logical&amp;quot;,&lt;br /&gt;
			previousLogicalElementId: &amp;quot;uuid_childComplex_2&amp;quot;,&lt;br /&gt;
			nextLogicalElementId: &amp;quot;uuid_operation_2&amp;quot;,&lt;br /&gt;
            fieldName: &amp;quot;fieldx&amp;quot;,&lt;br /&gt;
            comparison: &amp;quot;greaterThan&amp;quot;,&lt;br /&gt;
            defaultValue: 50&lt;br /&gt;
		},&lt;br /&gt;
		uuid_operation_2: { // level: sellOffer&lt;br /&gt;
    		logicalElementId: &amp;quot;operation&amp;quot;,&lt;br /&gt;
			previousLogicalElementId: &amp;quot;uuid_logical_2&amp;quot;,&lt;br /&gt;
			nextLogicalElementId: &amp;quot;uuid_childComplex_3&amp;quot;,&lt;br /&gt;
			operation: &amp;quot;or&amp;quot;&lt;br /&gt;
		},&lt;br /&gt;
		uuid_childComplex_3: { // level: sellOffer&lt;br /&gt;
			logicalElementId: &amp;quot;childComplexFilter&amp;quot;,&lt;br /&gt;
			previousLogicalElementId: uuid_operation_2,&lt;br /&gt;
			nextLogicalElementId: uuid_operation_4,&lt;br /&gt;
			childLogicalElementId: uuid_childComplex_4,&lt;br /&gt;
			relType: {&lt;br /&gt;
				relationshipTag: &amp;quot;hasSellOfferPlan&amp;quot;,&lt;br /&gt;
				serviceTag: &amp;quot;sellOfferPlan&amp;quot;&lt;br /&gt;
			},&lt;br /&gt;
			direction: &amp;quot;from&amp;quot;&lt;br /&gt;
		},&lt;br /&gt;
		uuid_childComplex_4: { // level: sellOfferPlan&lt;br /&gt;
			logicalElementId: &amp;quot;childComplexFilter&amp;quot;,&lt;br /&gt;
			previousLogicalElementId: uuid_childComplex_3,&lt;br /&gt;
			nextLogicalElementId: null,&lt;br /&gt;
			childLogicalElementId: uuid_logical_3,&lt;br /&gt;
			relType: {&lt;br /&gt;
				relationshipTag: &amp;quot;hasDeliveryMethodLink&amp;quot;,&lt;br /&gt;
				serviceTag: &amp;quot;deliveryMethodLink&amp;quot;&lt;br /&gt;
			},&lt;br /&gt;
			direction: &amp;quot;from&amp;quot;&lt;br /&gt;
		},&lt;br /&gt;
		uuid_logical_3: { // level: deliveryMethodLink&lt;br /&gt;
			logicalElementId: &amp;quot;logical&amp;quot;,&lt;br /&gt;
			previousLogicalElementId: &amp;quot;uuid_childComplex_4&amp;quot;,&lt;br /&gt;
			nextLogicalElementId: &amp;quot;uuid_operation_2&amp;quot;,&lt;br /&gt;
            fieldName: &amp;quot;fieldx&amp;quot;,&lt;br /&gt;
            comparison: &amp;quot;greaterThan&amp;quot;,&lt;br /&gt;
            defaultValue: 50&lt;br /&gt;
		},&lt;br /&gt;
		uuid_operation_3: { // level: deliveryMethodLink&lt;br /&gt;
    		logicalElementId: &amp;quot;operation&amp;quot;,&lt;br /&gt;
			previousLogicalElementId: &amp;quot;uuid_logical_3&amp;quot;,&lt;br /&gt;
			nextLogicalElementId: &amp;quot;uuid_logical_4&amp;quot;,&lt;br /&gt;
			operation: &amp;quot;or&amp;quot;&lt;br /&gt;
		},&lt;br /&gt;
		uuid_logical_4: { // level: deliveryMethodLink&lt;br /&gt;
			logicalElementId: &amp;quot;logical&amp;quot;,&lt;br /&gt;
			previousLogicalElementId: &amp;quot;uuid_operation_2&amp;quot;,&lt;br /&gt;
			nextLogicalElementId: &amp;quot;null&amp;quot;,&lt;br /&gt;
            fieldName: &amp;quot;fieldx&amp;quot;,&lt;br /&gt;
            comparison: &amp;quot;greaterThan&amp;quot;,&lt;br /&gt;
            defaultValue: 50&lt;br /&gt;
		},&lt;br /&gt;
		&lt;br /&gt;
 		uuid_operation_4: { // level: sellOffer&lt;br /&gt;
    		logicalElementId: &amp;quot;operation&amp;quot;,&lt;br /&gt;
			previousLogicalElementId: &amp;quot;uuid_childComplex_3&amp;quot;,&lt;br /&gt;
			nextLogicalElementId: &amp;quot;uuid_childComplex_5&amp;quot;,&lt;br /&gt;
			operation: &amp;quot;or&amp;quot;&lt;br /&gt;
		},&lt;br /&gt;
		uuid_childComplex_5: { // level: sellOffer&lt;br /&gt;
			logicalElementId: &amp;quot;childComplexFilter&amp;quot;,&lt;br /&gt;
			previousLogicalElementId: uuid_operation_4,&lt;br /&gt;
			nextLogicalElementId: null,&lt;br /&gt;
			childLogicalElementId: uuid_childComplex_6,&lt;br /&gt;
			relType: {&lt;br /&gt;
				relationshipTag: &amp;quot;hasSellOfferPlan&amp;quot;,&lt;br /&gt;
				serviceTag: &amp;quot;sellOfferPlan&amp;quot;&lt;br /&gt;
			},&lt;br /&gt;
			direction: &amp;quot;from&amp;quot;&lt;br /&gt;
		},&lt;br /&gt;
		uuid_childComplex_6: { // level: sellOfferPlan&lt;br /&gt;
			logicalElementId: &amp;quot;childComplexFilter&amp;quot;,&lt;br /&gt;
			previousLogicalElementId: uuid_childComplex_5,&lt;br /&gt;
			nextLogicalElementId: null,&lt;br /&gt;
			childLogicalElementId: uuid_logical_5,&lt;br /&gt;
			relType: {&lt;br /&gt;
				relationshipTag: &amp;quot;hasDeliveryMethodLink&amp;quot;,&lt;br /&gt;
				serviceTag: &amp;quot;deliveryMethodLink&amp;quot;&lt;br /&gt;
			},&lt;br /&gt;
			direction: &amp;quot;from&amp;quot;&lt;br /&gt;
		},&lt;br /&gt;
		uuid_logical_5: { // level: deliveryMethodLink&lt;br /&gt;
			logicalElementId: &amp;quot;logical&amp;quot;,&lt;br /&gt;
			previousLogicalElementId: &amp;quot;uuid_childComplex_6&amp;quot;,&lt;br /&gt;
			nextLogicalElementId: null,&lt;br /&gt;
            fieldName: &amp;quot;fieldx&amp;quot;,&lt;br /&gt;
            comparison: &amp;quot;greaterThan&amp;quot;,&lt;br /&gt;
            defaultValue: 50&lt;br /&gt;
		},&lt;br /&gt;
		uuid_closeBracket_1: { // level: product&lt;br /&gt;
			logicalElementId: &amp;quot;openBracket&amp;quot;,&lt;br /&gt;
			previousLogicalElementId: uuid_childComplex_2,&lt;br /&gt;
			nextLogicalElementId: null,&lt;br /&gt;
		},&lt;br /&gt;
&lt;br /&gt;
		uuid_operation_5: { // level: product&lt;br /&gt;
    		logicalElementId: &amp;quot;operation&amp;quot;,&lt;br /&gt;
			previousLogicalElementId: &amp;quot;uuid_closeBracket_1&amp;quot;,&lt;br /&gt;
			nextLogicalElementId: &amp;quot;uuid_childComplex_7&amp;quot;,&lt;br /&gt;
			operation: &amp;quot;or&amp;quot;&lt;br /&gt;
		},&lt;br /&gt;
		uuid_childComplex_7: { // level: product&lt;br /&gt;
			logicalElementId: &amp;quot;childComplexFilter&amp;quot;,&lt;br /&gt;
			previousLogicalElementId: uuid_operation_5,&lt;br /&gt;
			nextLogicalElementId: null,&lt;br /&gt;
			childLogicalElementId: uuid_logical_6,&lt;br /&gt;
			relType: {&lt;br /&gt;
				relationshipTag: &amp;quot;hasSellOffer&amp;quot;,&lt;br /&gt;
				serviceTag: &amp;quot;SellOfferManager&amp;quot;&lt;br /&gt;
			},&lt;br /&gt;
			direction: &amp;quot;from&amp;quot;&lt;br /&gt;
		},&lt;br /&gt;
		uuid_logical_6: { // level: sellOffer&lt;br /&gt;
			logicalElementId: &amp;quot;logical&amp;quot;,&lt;br /&gt;
			previousLogicalElementId: &amp;quot;uuid_childComplex_7&amp;quot;,&lt;br /&gt;
			nextLogicalElementId: &amp;quot;null&amp;quot;,&lt;br /&gt;
            fieldName: &amp;quot;fieldx&amp;quot;,&lt;br /&gt;
            comparison: &amp;quot;greaterThan&amp;quot;,&lt;br /&gt;
            defaultValue: 50&lt;br /&gt;
		},&lt;br /&gt;
&lt;br /&gt;
	}&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[Category:Working documents| 2025-08-21]]&lt;br /&gt;
[[Category:Working_documents - Complex Filter| 2025-08-21]]&lt;br /&gt;
[[Category:Working_documents - Search Reasults| 2025-08-21]]&lt;/div&gt;</summary>
		<author><name>Rut</name></author>
	</entry>
	<entry>
		<id>https://izara.io/wiki/index.php?title=2025-04-14_-_Frontend_LinkPath_structure_for_tableOutput&amp;diff=3531</id>
		<title>2025-04-14 - Frontend LinkPath structure for tableOutput</title>
		<link rel="alternate" type="text/html" href="https://izara.io/wiki/index.php?title=2025-04-14_-_Frontend_LinkPath_structure_for_tableOutput&amp;diff=3531"/>
		<updated>2025-08-19T07:33:41Z</updated>

		<summary type="html">&lt;p&gt;Rut: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Service - Search Results]]&lt;br /&gt;
&lt;br /&gt;
= Overview =&lt;br /&gt;
&lt;br /&gt;
Structure frontend TableConfig and Output prepare for shared library that creates complexFilter and requestProperties&lt;br /&gt;
&lt;br /&gt;
= Example params =&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;JavaScript&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
let paramFromTableOutput = {&lt;br /&gt;
	objType: { //* main objType&lt;br /&gt;
		serviceTag: &amp;quot;ProductManager&amp;quot;,&lt;br /&gt;
		objectType: &amp;quot;Product&amp;quot;&lt;br /&gt;
	},&lt;br /&gt;
&lt;br /&gt;
	mainComplexFilterUnits: { // used to create main complexFilter&lt;br /&gt;
		uuid_FilterUnitA: { // select link step from main objType&lt;br /&gt;
			linkStepObject: &amp;quot;hash_LinkStepObjectA&amp;quot;,&lt;br /&gt;
             parentOrGroup: &amp;quot;uuid_OrGroupA&amp;quot;&lt;br /&gt;
		},&lt;br /&gt;
        uuid_FilterUnitB: { // select own fieldname of main objType&lt;br /&gt;
          linkStepObject: &amp;quot;hash_LinkStepObjectD&amp;quot;,&lt;br /&gt;
          parentOrGtoup: &amp;quot;uuid_orGroupA&amp;quot;&lt;br /&gt;
        }&lt;br /&gt;
&lt;br /&gt;
	},&lt;br /&gt;
	mainComplexFilterOrGroups: { //* group and operation filters for each mainComplexFilterUnits&lt;br /&gt;
		uuid_OrGroupA: {&lt;br /&gt;
			filterUnitIds: [&amp;quot;uuid_FilterUnitA&amp;quot;, &amp;quot;uuid_FilterUnitB&amp;quot;],&lt;br /&gt;
			parentOrGroup: &amp;quot;&amp;quot;,&lt;br /&gt;
			childOrGroups: []&lt;br /&gt;
		}&lt;br /&gt;
	},&lt;br /&gt;
	filterLinkStepObjects: {&lt;br /&gt;
		hash_LinkStepObjectA: { // main complexFilter find orderPrice&lt;br /&gt;
			initialObjType: { //* main objType&lt;br /&gt;
				serviceTag: &amp;quot;ProductManager&amp;quot;,&lt;br /&gt;
				objectType: &amp;quot;Product&amp;quot;&lt;br /&gt;
			},&lt;br /&gt;
			linkSteps: [&lt;br /&gt;
				[&amp;quot;hash_linkStepA_A&amp;quot;, &amp;quot;hash_linkStepA_B&amp;quot;, &amp;quot;hash_linkStepA_C&amp;quot;],&lt;br /&gt;
			],&lt;br /&gt;
		},&lt;br /&gt;
		hash_LinkStepObjectB: { // complexFilterCombinations for parentLocationNodes&lt;br /&gt;
			initialObjType: { //* main objType&lt;br /&gt;
				serviceTag: &amp;quot;locatons&amp;quot;,&lt;br /&gt;
				objectType: &amp;quot;LocationNode&amp;quot;&lt;br /&gt;
			},&lt;br /&gt;
			linkSteps: [&lt;br /&gt;
				[&amp;quot;hash_linkStepB_A&amp;quot;,&amp;quot;hash_linkStepB_B&amp;quot;],&lt;br /&gt;
			]&lt;br /&gt;
		},&lt;br /&gt;
		hash_LinkStepObjectC: { // perParentCombinations&lt;br /&gt;
			initialObjType: { //* main objType&lt;br /&gt;
				serviceTag: &amp;quot;SellOffer&amp;quot;,&lt;br /&gt;
				objectType: &amp;quot;SellOffer&amp;quot;&lt;br /&gt;
			},&lt;br /&gt;
			linkSteps: [&lt;br /&gt;
				[&amp;quot;hash_linkStepC_A&amp;quot;, &amp;quot;hash_linkStepC_B&amp;quot;, &amp;quot;hash_linkStepC_C&amp;quot;],&lt;br /&gt;
			],&lt;br /&gt;
		},&lt;br /&gt;
        hash_LinkStepObjectD:{&lt;br /&gt;
            initialObjType: { //* main objType&lt;br /&gt;
				serviceTag: &amp;quot;ProductManager&amp;quot;,&lt;br /&gt;
				objectType: &amp;quot;Product&amp;quot;&lt;br /&gt;
			},&lt;br /&gt;
			linkSteps: [&lt;br /&gt;
				[&amp;quot;hash_linkStepD_A&amp;quot;],&lt;br /&gt;
			]&lt;br /&gt;
        }&lt;br /&gt;
	},&lt;br /&gt;
	filterLinkSteps: {&lt;br /&gt;
		hash_linkStepA_A: { //one step: Product &amp;gt; SellOffer&lt;br /&gt;
		  link: {&lt;br /&gt;
			objType: {&lt;br /&gt;
			  serviceTag: &amp;quot;SellOfferManager&amp;quot;,&lt;br /&gt;
			  objectType: &amp;quot;SellOffer&amp;quot;&lt;br /&gt;
			},&lt;br /&gt;
			relType: {&lt;br /&gt;
			  serviceTag: &amp;quot;ProductManager&amp;quot;,&lt;br /&gt;
			  relationshipTag: &amp;quot;hasSellOffer&amp;quot;&lt;br /&gt;
			},&lt;br /&gt;
			relationshipDirection: &amp;quot;to&amp;quot;,&lt;br /&gt;
		  },&lt;br /&gt;
		},&lt;br /&gt;
		hash_linkStepA_B: { //one step: SellOffer &amp;gt; OrderPrice&lt;br /&gt;
			link: {&lt;br /&gt;
				objType: {&lt;br /&gt;
				  serviceTag: &amp;quot;OrderPrice&amp;quot;,&lt;br /&gt;
				  objectType: &amp;quot;OrderPrice&amp;quot;&lt;br /&gt;
				},&lt;br /&gt;
				relType: {&lt;br /&gt;
				  serviceTag: &amp;quot;sellOfferStandard&amp;quot;,&lt;br /&gt;
				  relationshipTag: &amp;quot;hasOrderPrice&amp;quot;&lt;br /&gt;
				},&lt;br /&gt;
				relationshipDirection: &amp;quot;to&amp;quot;,&lt;br /&gt;
			},&lt;br /&gt;
			// tableConfig sets &amp;quot;defaultRequestPropertyValues&amp;quot; for each, tableOutput finds from 1. filter objects set to overwrite it, 2. prop sent (eg from sitePage), 3. defaultRequestPropertyValues&lt;br /&gt;
			requestProperties:{&lt;br /&gt;
				tag_deliverTo: hash_requestPropertyA,&lt;br /&gt;
				tag_sellOfferPlan: hash_requestPropertyB,&lt;br /&gt;
				tag_sellOfferPlanDeliveryMethodLink: hash_requestPropertyC,&lt;br /&gt;
				tag_sellOfferPlanUserPaymentMethodLink: hash_requestPropertyD,&lt;br /&gt;
			},&lt;br /&gt;
            filterElementUnitIds: [&amp;quot;hash_filterElementUnitF&amp;quot;]&lt;br /&gt;
		},&lt;br /&gt;
		hash_linkStepA_C: { //final OrderPrice step&lt;br /&gt;
			filterElementUnitIds: [&amp;quot;hash_filterElementUnitA&amp;quot;]&lt;br /&gt;
		},&lt;br /&gt;
		hash_linkStepB_A: { //one step: LocationNode &amp;gt; LocationNode&lt;br /&gt;
		  link: {&lt;br /&gt;
			objType: {&lt;br /&gt;
			  serviceTag: &amp;quot;Locations&amp;quot;,&lt;br /&gt;
			  objectType: &amp;quot;LocationNode&amp;quot;&lt;br /&gt;
			},&lt;br /&gt;
			relType: {&lt;br /&gt;
			  serviceTag: &amp;quot;Locations&amp;quot;,&lt;br /&gt;
			  relationshipTag: &amp;quot;isParentLocationNode&amp;quot;&lt;br /&gt;
			},&lt;br /&gt;
			relationshipDirection: &amp;quot;to&amp;quot;,&lt;br /&gt;
		  },&lt;br /&gt;
		  // tableConfig sets &amp;quot;defaultRequestPropertyValues&amp;quot; for each, tableOutput finds from 1. filter objects set to overwrite it, 2. prop sent (eg from sitePage), 3. defaultRequestPropertyValues&lt;br /&gt;
		  requestProperties:{&lt;br /&gt;
				tag_traversalType: hash_requestPropertyE,&lt;br /&gt;
		  }&lt;br /&gt;
		},&lt;br /&gt;
		hash_linkStepB_B: { //final parent LocationNodes step&lt;br /&gt;
		},&lt;br /&gt;
		hash_linkStepC_A: { //one step: SellOffer &amp;gt; SellOfferPlan&lt;br /&gt;
		  link: {&lt;br /&gt;
			objType: {&lt;br /&gt;
			  serviceTag: &amp;quot;SellOfferPlan&amp;quot;,&lt;br /&gt;
			  objectType: &amp;quot;SellOfferPlan&amp;quot;&lt;br /&gt;
			},&lt;br /&gt;
			relType: {&lt;br /&gt;
			  serviceTag: &amp;quot;SellOfferManager&amp;quot;,&lt;br /&gt;
			  relationshipTag: &amp;quot;usesSellOfferPlan&amp;quot;&lt;br /&gt;
			},&lt;br /&gt;
			relationshipDirection: &amp;quot;to&amp;quot;,&lt;br /&gt;
		  },&lt;br /&gt;
		},&lt;br /&gt;
		hash_linkStepC_B: { //one step: SellOfferPlan &amp;gt; DeliveryMethodLink&lt;br /&gt;
		  link: {&lt;br /&gt;
			objType: {&lt;br /&gt;
			  serviceTag: &amp;quot;SellOfferPlan&amp;quot;,&lt;br /&gt;
			  objectType: &amp;quot;DeliveryMethodLink&amp;quot;&lt;br /&gt;
			},&lt;br /&gt;
			relType: {&lt;br /&gt;
			  serviceTag: &amp;quot;SellOfferPlan&amp;quot;,&lt;br /&gt;
			  relationshipTag: &amp;quot;hasDeliveryMethodLink&amp;quot;&lt;br /&gt;
			},&lt;br /&gt;
			relationshipDirection: &amp;quot;to&amp;quot;,&lt;br /&gt;
		  },&lt;br /&gt;
		},&lt;br /&gt;
		hash_linkStepC_C: { //one step: DeliveryMethodLink &amp;gt; DeliveryMethod&lt;br /&gt;
		  link: {&lt;br /&gt;
			objType: {&lt;br /&gt;
			  serviceTag: &amp;quot;DeliveryMethodManager&amp;quot;,&lt;br /&gt;
			  objectType: &amp;quot;DeliveryMethod&amp;quot;&lt;br /&gt;
			},&lt;br /&gt;
			relType: {&lt;br /&gt;
			  serviceTag: &amp;quot;SellOfferPlan&amp;quot;,&lt;br /&gt;
			  relationshipTag: &amp;quot;isDeliveryMethod&amp;quot;&lt;br /&gt;
			},&lt;br /&gt;
			relationshipDirection: &amp;quot;to&amp;quot;,&lt;br /&gt;
		  },&lt;br /&gt;
		  filterElementUnitIds: [&amp;quot;hash_filterElementUnitB&amp;quot;]&lt;br /&gt;
		},&lt;br /&gt;
        hash_linkStepD_A:{&lt;br /&gt;
           filterElementUnitIds: [&amp;quot;hash_filterElementUnitE&amp;quot;]&lt;br /&gt;
        }&lt;br /&gt;
	},&lt;br /&gt;
	&lt;br /&gt;
	requiredDataFields: { //* fields to create requiredData including linkPaths&lt;br /&gt;
		//* no link, field in main objType&lt;br /&gt;
		hash_requiredDataFieldA: {&lt;br /&gt;
			fieldname: &amp;quot;&amp;quot;&lt;br /&gt;
		},&lt;br /&gt;
		&lt;br /&gt;
		//* has link&lt;br /&gt;
		hash_requiredDataFieldB: {&lt;br /&gt;
			linkStepObject: &amp;quot;hash_LinkStepObjectD&amp;quot;,&lt;br /&gt;
            fieldname: &amp;quot; &amp;quot;,&lt;br /&gt;
			complexFilterCombinations: [&amp;quot;hash_complexFilterCombinationA&amp;quot;],&lt;br /&gt;
		}&lt;br /&gt;
	&lt;br /&gt;
	},&lt;br /&gt;
	complexFilterCombinations:{&lt;br /&gt;
		hash_complexFilterCombinationA: {&lt;br /&gt;
			linkStepObjectA: &amp;quot;hash_LinkStepObjectB&amp;quot;,&lt;br /&gt;
			initialIdentifiers: { // tableConfig sets &amp;quot;defaultInitialIdentifiers, tableOutput finds from 1. filter objects set to overwrite it, 2. prop sent (eg from sitePage), 3. defaultInitialIdentifiers&lt;br /&gt;
				&amp;quot;locationNodeId&amp;quot;: &amp;quot;xxxx&amp;quot;&lt;br /&gt;
			},&lt;br /&gt;
		},&lt;br /&gt;
	},&lt;br /&gt;
	perParentCombinations:{&lt;br /&gt;
		hash_perParentCombinationA: {&lt;br /&gt;
			linkStepObjectA: &amp;quot;hash_LinkStepObjectC&amp;quot;,&lt;br /&gt;
		},&lt;br /&gt;
	},&lt;br /&gt;
	requiredDataLinkStepObjects: {&lt;br /&gt;
		hash_LinkStepObjectD: { // requiredDataFields for finding max orderTotal&lt;br /&gt;
			initialObjType: { //* main objType&lt;br /&gt;
				serviceTag: &amp;quot;ProductManager&amp;quot;,&lt;br /&gt;
				objectType: &amp;quot;Product&amp;quot;&lt;br /&gt;
			},&lt;br /&gt;
			linkSteps: [&amp;quot;hash_linkStepD_A&amp;quot;, &amp;quot;hash_linkStepD_B&amp;quot;, &amp;quot;hash_linkStepA_C&amp;quot;],&lt;br /&gt;
		}&lt;br /&gt;
	},&lt;br /&gt;
	requiredDataLinkSteps: {&lt;br /&gt;
		hash_linkStepD_A: { //one step: Product &amp;gt; SellOffer&lt;br /&gt;
		  link: {&lt;br /&gt;
			objType: {&lt;br /&gt;
			  serviceTag: &amp;quot;SellOfferManager&amp;quot;,&lt;br /&gt;
			  objectType: &amp;quot;SellOffer&amp;quot;&lt;br /&gt;
			},&lt;br /&gt;
			relType: {&lt;br /&gt;
			  serviceTag: &amp;quot;ProductManager&amp;quot;,&lt;br /&gt;
			  relationshipTag: &amp;quot;hasSellOffer&amp;quot;&lt;br /&gt;
			},&lt;br /&gt;
			relationshipDirection: &amp;quot;to&amp;quot;,&lt;br /&gt;
		  },&lt;br /&gt;
		},&lt;br /&gt;
		hash_linkStepD_B: { //one step: SellOffer &amp;gt; OrderPrice&lt;br /&gt;
			link: {&lt;br /&gt;
				objType: {&lt;br /&gt;
				  serviceTag: &amp;quot;OrderPrice&amp;quot;,&lt;br /&gt;
				  objectType: &amp;quot;OrderPrice&amp;quot;&lt;br /&gt;
				},&lt;br /&gt;
				relType: {&lt;br /&gt;
				  serviceTag: &amp;quot;sellOfferStandard&amp;quot;,&lt;br /&gt;
				  relationshipTag: &amp;quot;hasOrderPrice&amp;quot;&lt;br /&gt;
				},&lt;br /&gt;
				relationshipDirection: &amp;quot;to&amp;quot;,&lt;br /&gt;
			},&lt;br /&gt;
			// tableConfig sets &amp;quot;defaultRequestPropertyValues&amp;quot; for each, tableOutput finds from 1. filter objects set to overwrite it, 2. prop sent (eg from sitePage), 3. defaultRequestPropertyValues&lt;br /&gt;
			requestProperties:{&lt;br /&gt;
				tag_deliverTo: hash_requestPropertyF,&lt;br /&gt;
				tag_sellOfferPlanDeliveryMethodLink: hash_requestPropertyG,&lt;br /&gt;
			}&lt;br /&gt;
		},&lt;br /&gt;
		hash_linkStepA_C: { //final OrderPrice step&lt;br /&gt;
			filterElementUnitIds: [&amp;quot;hash_filterElementUnitA&amp;quot;]&lt;br /&gt;
			aggregate: &amp;quot;max&amp;quot;,&lt;br /&gt;
			sortFields: &amp;quot;hash_sortFieldA&amp;quot;,&lt;br /&gt;
			// ... other linkPath.linkStep settings here&lt;br /&gt;
		}&lt;br /&gt;
	},&lt;br /&gt;
	sortFields:{&lt;br /&gt;
		hash_sortFieldA: {&lt;br /&gt;
			// ..&lt;br /&gt;
		}&lt;br /&gt;
	}&lt;br /&gt;
&lt;br /&gt;
	filterElementUnits: {&lt;br /&gt;
		hash_filterElementUnitA:{&lt;br /&gt;
			objType: { &lt;br /&gt;
				serviceTag: &amp;quot;OrderPrice&amp;quot;,&lt;br /&gt;
				objectType: &amp;quot;OrderPrice&amp;quot;&lt;br /&gt;
			},		&lt;br /&gt;
			fieldname: &amp;quot;orderTotal&amp;quot;,&lt;br /&gt;
			comparison: &amp;quot;greaterThan&amp;quot;,&lt;br /&gt;
			value: &amp;quot;xxx&amp;quot;, // tableConfig sets &amp;quot;defaultFilterElementUnitValue&amp;quot;, tableOutput finds from 1. filter objects set to overwrite it, 2. prop sent (eg from sitePage), 3. defaultFilterElementUnitValue&lt;br /&gt;
		},&lt;br /&gt;
		hash_filterElementUnitB:{&lt;br /&gt;
			objType: { &lt;br /&gt;
				serviceTag: &amp;quot;DeliveryMethodManager&amp;quot;,&lt;br /&gt;
				objectType: &amp;quot;deliveryMethod&amp;quot;&lt;br /&gt;
			},		&lt;br /&gt;
			fieldname: &amp;quot;deliveryMethodId&amp;quot;,&lt;br /&gt;
			comparison: &amp;quot;equals&amp;quot;,&lt;br /&gt;
			value: &amp;quot;xxx&amp;quot;,&lt;br /&gt;
		},&lt;br /&gt;
        hash_filterElementUnitD: {&lt;br /&gt;
			objType: { &lt;br /&gt;
				serviceTag: &amp;quot;ProductManager&amp;quot;,&lt;br /&gt;
				objectType: &amp;quot;Product&amp;quot;&lt;br /&gt;
			},		&lt;br /&gt;
         	fieldname: &amp;quot;productId&amp;quot;,&lt;br /&gt;
			comparison: &amp;quot;equals&amp;quot;,&lt;br /&gt;
			value: &amp;quot;xxx&amp;quot;,&lt;br /&gt;
       },&lt;br /&gt;
        hash_filterElementUnitE: {&lt;br /&gt;
			objType: { &lt;br /&gt;
				serviceTag: &amp;quot;ProductManager&amp;quot;,&lt;br /&gt;
				objectType: &amp;quot;Product&amp;quot;&lt;br /&gt;
			},		&lt;br /&gt;
         	fieldname: &amp;quot;productId&amp;quot;,&lt;br /&gt;
			comparison: &amp;quot;equals&amp;quot;,&lt;br /&gt;
			value: &amp;quot;xxx&amp;quot;,&lt;br /&gt;
       }&lt;br /&gt;
	},&lt;br /&gt;
&lt;br /&gt;
	requestProperties: {&lt;br /&gt;
		hash_requestPropertyA:{&lt;br /&gt;
			value: &amp;quot;xx&amp;quot;,&lt;br /&gt;
		},&lt;br /&gt;
		hash_requestPropertyB:{&lt;br /&gt;
			value: &amp;quot;xx&amp;quot;,&lt;br /&gt;
		},&lt;br /&gt;
		hash_requestPropertyC:{&lt;br /&gt;
			value: &amp;quot;xx&amp;quot;,&lt;br /&gt;
		},&lt;br /&gt;
		hash_requestPropertyD:{&lt;br /&gt;
			value: &amp;quot;xx&amp;quot;,&lt;br /&gt;
		},&lt;br /&gt;
		hash_requestPropertyE:{&lt;br /&gt;
			value: &amp;quot;xx&amp;quot;,&lt;br /&gt;
		},&lt;br /&gt;
		hash_requestPropertyF:{&lt;br /&gt;
			valueSource: &amp;quot;complexFilterCombination&amp;quot;,&lt;br /&gt;
            complexFilterCombinationId: &amp;quot;hash_complexFilterCombinationA&amp;quot;,&lt;br /&gt;
		},&lt;br /&gt;
		hash_requestPropertyG:{&lt;br /&gt;
			valueSource: &amp;quot;perParentCombination&amp;quot;,&lt;br /&gt;
            perParentCombinationId: &amp;quot;hash_perParentCombinationA&amp;quot;,&lt;br /&gt;
            identifierFieldName: &amp;quot;sellOfferPlanDeliveryMethodLinkId&amp;quot;&lt;br /&gt;
		},&lt;br /&gt;
	}&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[Category:Working documents| 2025-04-14]]&lt;br /&gt;
[[Category:Working documents - Search Results| 2025-04-14]]&lt;/div&gt;</summary>
		<author><name>Rut</name></author>
	</entry>
	<entry>
		<id>https://izara.io/wiki/index.php?title=2025-04-14_-_Frontend_LinkPath_structure_for_tableOutput&amp;diff=3530</id>
		<title>2025-04-14 - Frontend LinkPath structure for tableOutput</title>
		<link rel="alternate" type="text/html" href="https://izara.io/wiki/index.php?title=2025-04-14_-_Frontend_LinkPath_structure_for_tableOutput&amp;diff=3530"/>
		<updated>2025-08-19T06:47:01Z</updated>

		<summary type="html">&lt;p&gt;Rut: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Service - Search Results]]&lt;br /&gt;
&lt;br /&gt;
= Overview =&lt;br /&gt;
&lt;br /&gt;
Structure frontend TableConfig and Output prepare for shared library that creates complexFilter and requestProperties&lt;br /&gt;
&lt;br /&gt;
= Example params =&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;JavaScript&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
let paramFromTableOutput = {&lt;br /&gt;
	objType: { //* main objType&lt;br /&gt;
		serviceTag: &amp;quot;ProductManager&amp;quot;,&lt;br /&gt;
		objectType: &amp;quot;Product&amp;quot;&lt;br /&gt;
	},&lt;br /&gt;
&lt;br /&gt;
	mainComplexFilterUnits: { // used to create main complexFilter&lt;br /&gt;
		uuid_FilterUnitA: { // select link step from main objType&lt;br /&gt;
			linkStepObject: &amp;quot;hash_LinkStepObjectA&amp;quot;,&lt;br /&gt;
             parentOrGroup: &amp;quot;uuid_OrGroupA&amp;quot;&lt;br /&gt;
		},&lt;br /&gt;
        uuid_FilterUnitB: { // select own fieldname of main objType&lt;br /&gt;
          linkStepObject: &amp;quot;hash_LinkStepObjectD&amp;quot;,&lt;br /&gt;
          parentOrGtoup: &amp;quot;uuid_orGroupA&amp;quot;&lt;br /&gt;
        }&lt;br /&gt;
&lt;br /&gt;
	},&lt;br /&gt;
	mainComplexFilterOrGroups: { //* group and operation filters for each mainComplexFilterUnits&lt;br /&gt;
		uuid_OrGroupA: {&lt;br /&gt;
			filterUnitIds: [&amp;quot;uuid_FilterUnitA&amp;quot;, &amp;quot;uuid_FilterUnitB&amp;quot;],&lt;br /&gt;
			parentOrGroup: &amp;quot;&amp;quot;,&lt;br /&gt;
			childOrGroups: []&lt;br /&gt;
		}&lt;br /&gt;
	},&lt;br /&gt;
	filterLinkStepObjects: {&lt;br /&gt;
		hash_LinkStepObjectA: { // main complexFilter find orderPrice&lt;br /&gt;
			initialObjType: { //* main objType&lt;br /&gt;
				serviceTag: &amp;quot;ProductManager&amp;quot;,&lt;br /&gt;
				objectType: &amp;quot;Product&amp;quot;&lt;br /&gt;
			},&lt;br /&gt;
			linkSteps: [&amp;quot;hash_linkStepA_A&amp;quot;, &amp;quot;hash_linkStepA_B&amp;quot;, &amp;quot;hash_linkStepA_C&amp;quot;],&lt;br /&gt;
		},&lt;br /&gt;
		hash_LinkStepObjectB: { // complexFilterCombinations for parentLocationNodes&lt;br /&gt;
			initialObjType: { //* main objType&lt;br /&gt;
				serviceTag: &amp;quot;locatons&amp;quot;,&lt;br /&gt;
				objectType: &amp;quot;LocationNode&amp;quot;&lt;br /&gt;
			},&lt;br /&gt;
			linkSteps: [&amp;quot;hash_linkStepB_A&amp;quot;,&amp;quot;hash_linkStepB_B&amp;quot;],&lt;br /&gt;
		},&lt;br /&gt;
		hash_LinkStepObjectC: { // perParentCombinations&lt;br /&gt;
			initialObjType: { //* main objType&lt;br /&gt;
				serviceTag: &amp;quot;SellOffer&amp;quot;,&lt;br /&gt;
				objectType: &amp;quot;SellOffer&amp;quot;&lt;br /&gt;
			},&lt;br /&gt;
			linkSteps: [&amp;quot;hash_linkStepC_A&amp;quot;, &amp;quot;hash_linkStepC_B&amp;quot;, &amp;quot;hash_linkStepC_C&amp;quot;],&lt;br /&gt;
		},&lt;br /&gt;
        hash_LinkStepObjectD:{&lt;br /&gt;
            initialObjType: { //* main objType&lt;br /&gt;
				serviceTag: &amp;quot;ProductManager&amp;quot;,&lt;br /&gt;
				objectType: &amp;quot;Product&amp;quot;&lt;br /&gt;
			},&lt;br /&gt;
			linkSteps: [&amp;quot;hash_linkStepD_A&amp;quot;],&lt;br /&gt;
        }&lt;br /&gt;
	},&lt;br /&gt;
	filterLinkSteps: {&lt;br /&gt;
		hash_linkStepA_A: { //one step: Product &amp;gt; SellOffer&lt;br /&gt;
		  link: {&lt;br /&gt;
			objType: {&lt;br /&gt;
			  serviceTag: &amp;quot;SellOfferManager&amp;quot;,&lt;br /&gt;
			  objectType: &amp;quot;SellOffer&amp;quot;&lt;br /&gt;
			},&lt;br /&gt;
			relType: {&lt;br /&gt;
			  serviceTag: &amp;quot;ProductManager&amp;quot;,&lt;br /&gt;
			  relationshipTag: &amp;quot;hasSellOffer&amp;quot;&lt;br /&gt;
			},&lt;br /&gt;
			relationshipDirection: &amp;quot;to&amp;quot;,&lt;br /&gt;
		  },&lt;br /&gt;
		},&lt;br /&gt;
		hash_linkStepA_B: { //one step: SellOffer &amp;gt; OrderPrice&lt;br /&gt;
			link: {&lt;br /&gt;
				objType: {&lt;br /&gt;
				  serviceTag: &amp;quot;OrderPrice&amp;quot;,&lt;br /&gt;
				  objectType: &amp;quot;OrderPrice&amp;quot;&lt;br /&gt;
				},&lt;br /&gt;
				relType: {&lt;br /&gt;
				  serviceTag: &amp;quot;sellOfferStandard&amp;quot;,&lt;br /&gt;
				  relationshipTag: &amp;quot;hasOrderPrice&amp;quot;&lt;br /&gt;
				},&lt;br /&gt;
				relationshipDirection: &amp;quot;to&amp;quot;,&lt;br /&gt;
			},&lt;br /&gt;
			// tableConfig sets &amp;quot;defaultRequestPropertyValues&amp;quot; for each, tableOutput finds from 1. filter objects set to overwrite it, 2. prop sent (eg from sitePage), 3. defaultRequestPropertyValues&lt;br /&gt;
			requestProperties:{&lt;br /&gt;
				tag_deliverTo: hash_requestPropertyA,&lt;br /&gt;
				tag_sellOfferPlan: hash_requestPropertyB,&lt;br /&gt;
				tag_sellOfferPlanDeliveryMethodLink: hash_requestPropertyC,&lt;br /&gt;
				tag_sellOfferPlanUserPaymentMethodLink: hash_requestPropertyD,&lt;br /&gt;
			},&lt;br /&gt;
            filterElementUnitIds: [&amp;quot;hash_filterElementUnitF&amp;quot;]&lt;br /&gt;
		},&lt;br /&gt;
		hash_linkStepA_C: { //final OrderPrice step&lt;br /&gt;
			filterElementUnitIds: [&amp;quot;hash_filterElementUnitA&amp;quot;]&lt;br /&gt;
		},&lt;br /&gt;
		hash_linkStepB_A: { //one step: LocationNode &amp;gt; LocationNode&lt;br /&gt;
		  link: {&lt;br /&gt;
			objType: {&lt;br /&gt;
			  serviceTag: &amp;quot;Locations&amp;quot;,&lt;br /&gt;
			  objectType: &amp;quot;LocationNode&amp;quot;&lt;br /&gt;
			},&lt;br /&gt;
			relType: {&lt;br /&gt;
			  serviceTag: &amp;quot;Locations&amp;quot;,&lt;br /&gt;
			  relationshipTag: &amp;quot;isParentLocationNode&amp;quot;&lt;br /&gt;
			},&lt;br /&gt;
			relationshipDirection: &amp;quot;to&amp;quot;,&lt;br /&gt;
		  },&lt;br /&gt;
		  // tableConfig sets &amp;quot;defaultRequestPropertyValues&amp;quot; for each, tableOutput finds from 1. filter objects set to overwrite it, 2. prop sent (eg from sitePage), 3. defaultRequestPropertyValues&lt;br /&gt;
		  requestProperties:{&lt;br /&gt;
				tag_traversalType: hash_requestPropertyE,&lt;br /&gt;
		  }&lt;br /&gt;
		},&lt;br /&gt;
		hash_linkStepB_B: { //final parent LocationNodes step&lt;br /&gt;
		},&lt;br /&gt;
		hash_linkStepC_A: { //one step: SellOffer &amp;gt; SellOfferPlan&lt;br /&gt;
		  link: {&lt;br /&gt;
			objType: {&lt;br /&gt;
			  serviceTag: &amp;quot;SellOfferPlan&amp;quot;,&lt;br /&gt;
			  objectType: &amp;quot;SellOfferPlan&amp;quot;&lt;br /&gt;
			},&lt;br /&gt;
			relType: {&lt;br /&gt;
			  serviceTag: &amp;quot;SellOfferManager&amp;quot;,&lt;br /&gt;
			  relationshipTag: &amp;quot;usesSellOfferPlan&amp;quot;&lt;br /&gt;
			},&lt;br /&gt;
			relationshipDirection: &amp;quot;to&amp;quot;,&lt;br /&gt;
		  },&lt;br /&gt;
		},&lt;br /&gt;
		hash_linkStepC_B: { //one step: SellOfferPlan &amp;gt; DeliveryMethodLink&lt;br /&gt;
		  link: {&lt;br /&gt;
			objType: {&lt;br /&gt;
			  serviceTag: &amp;quot;SellOfferPlan&amp;quot;,&lt;br /&gt;
			  objectType: &amp;quot;DeliveryMethodLink&amp;quot;&lt;br /&gt;
			},&lt;br /&gt;
			relType: {&lt;br /&gt;
			  serviceTag: &amp;quot;SellOfferPlan&amp;quot;,&lt;br /&gt;
			  relationshipTag: &amp;quot;hasDeliveryMethodLink&amp;quot;&lt;br /&gt;
			},&lt;br /&gt;
			relationshipDirection: &amp;quot;to&amp;quot;,&lt;br /&gt;
		  },&lt;br /&gt;
		},&lt;br /&gt;
		hash_linkStepC_C: { //one step: DeliveryMethodLink &amp;gt; DeliveryMethod&lt;br /&gt;
		  link: {&lt;br /&gt;
			objType: {&lt;br /&gt;
			  serviceTag: &amp;quot;DeliveryMethodManager&amp;quot;,&lt;br /&gt;
			  objectType: &amp;quot;DeliveryMethod&amp;quot;&lt;br /&gt;
			},&lt;br /&gt;
			relType: {&lt;br /&gt;
			  serviceTag: &amp;quot;SellOfferPlan&amp;quot;,&lt;br /&gt;
			  relationshipTag: &amp;quot;isDeliveryMethod&amp;quot;&lt;br /&gt;
			},&lt;br /&gt;
			relationshipDirection: &amp;quot;to&amp;quot;,&lt;br /&gt;
		  },&lt;br /&gt;
		  filterElementUnitIds: [&amp;quot;hash_filterElementUnitB&amp;quot;]&lt;br /&gt;
		},&lt;br /&gt;
        hash_linkStepD_A:{&lt;br /&gt;
           filterElementUnitIds: [&amp;quot;hash_filterElementUnitE&amp;quot;]&lt;br /&gt;
        }&lt;br /&gt;
	},&lt;br /&gt;
	&lt;br /&gt;
	requiredDataFields: { //* fields to create requiredData including linkPaths&lt;br /&gt;
		//* no link, field in main objType&lt;br /&gt;
		hash_requiredDataFieldA: {&lt;br /&gt;
			fieldname: &amp;quot;&amp;quot;&lt;br /&gt;
		},&lt;br /&gt;
		&lt;br /&gt;
		//* has link&lt;br /&gt;
		hash_requiredDataFieldB: {&lt;br /&gt;
			linkStepObject: &amp;quot;hash_LinkStepObjectD&amp;quot;,&lt;br /&gt;
            fieldname: &amp;quot; &amp;quot;,&lt;br /&gt;
			complexFilterCombinations: [&amp;quot;hash_complexFilterCombinationA&amp;quot;],&lt;br /&gt;
		}&lt;br /&gt;
	&lt;br /&gt;
	},&lt;br /&gt;
	complexFilterCombinations:{&lt;br /&gt;
		hash_complexFilterCombinationA: {&lt;br /&gt;
			linkStepObjectA: &amp;quot;hash_LinkStepObjectB&amp;quot;,&lt;br /&gt;
			initialIdentifiers: { // tableConfig sets &amp;quot;defaultInitialIdentifiers, tableOutput finds from 1. filter objects set to overwrite it, 2. prop sent (eg from sitePage), 3. defaultInitialIdentifiers&lt;br /&gt;
				&amp;quot;locationNodeId&amp;quot;: &amp;quot;xxxx&amp;quot;&lt;br /&gt;
			},&lt;br /&gt;
		},&lt;br /&gt;
	},&lt;br /&gt;
	perParentCombinations:{&lt;br /&gt;
		hash_perParentCombinationA: {&lt;br /&gt;
			linkStepObjectA: &amp;quot;hash_LinkStepObjectC&amp;quot;,&lt;br /&gt;
		},&lt;br /&gt;
	},&lt;br /&gt;
	requiredDataLinkStepObjects: {&lt;br /&gt;
		hash_LinkStepObjectD: { // requiredDataFields for finding max orderTotal&lt;br /&gt;
			initialObjType: { //* main objType&lt;br /&gt;
				serviceTag: &amp;quot;ProductManager&amp;quot;,&lt;br /&gt;
				objectType: &amp;quot;Product&amp;quot;&lt;br /&gt;
			},&lt;br /&gt;
			linkSteps: [&amp;quot;hash_linkStepD_A&amp;quot;, &amp;quot;hash_linkStepD_B&amp;quot;, &amp;quot;hash_linkStepA_C&amp;quot;],&lt;br /&gt;
		}&lt;br /&gt;
	},&lt;br /&gt;
	requiredDataLinkSteps: {&lt;br /&gt;
		hash_linkStepD_A: { //one step: Product &amp;gt; SellOffer&lt;br /&gt;
		  link: {&lt;br /&gt;
			objType: {&lt;br /&gt;
			  serviceTag: &amp;quot;SellOfferManager&amp;quot;,&lt;br /&gt;
			  objectType: &amp;quot;SellOffer&amp;quot;&lt;br /&gt;
			},&lt;br /&gt;
			relType: {&lt;br /&gt;
			  serviceTag: &amp;quot;ProductManager&amp;quot;,&lt;br /&gt;
			  relationshipTag: &amp;quot;hasSellOffer&amp;quot;&lt;br /&gt;
			},&lt;br /&gt;
			relationshipDirection: &amp;quot;to&amp;quot;,&lt;br /&gt;
		  },&lt;br /&gt;
		},&lt;br /&gt;
		hash_linkStepD_B: { //one step: SellOffer &amp;gt; OrderPrice&lt;br /&gt;
			link: {&lt;br /&gt;
				objType: {&lt;br /&gt;
				  serviceTag: &amp;quot;OrderPrice&amp;quot;,&lt;br /&gt;
				  objectType: &amp;quot;OrderPrice&amp;quot;&lt;br /&gt;
				},&lt;br /&gt;
				relType: {&lt;br /&gt;
				  serviceTag: &amp;quot;sellOfferStandard&amp;quot;,&lt;br /&gt;
				  relationshipTag: &amp;quot;hasOrderPrice&amp;quot;&lt;br /&gt;
				},&lt;br /&gt;
				relationshipDirection: &amp;quot;to&amp;quot;,&lt;br /&gt;
			},&lt;br /&gt;
			// tableConfig sets &amp;quot;defaultRequestPropertyValues&amp;quot; for each, tableOutput finds from 1. filter objects set to overwrite it, 2. prop sent (eg from sitePage), 3. defaultRequestPropertyValues&lt;br /&gt;
			requestProperties:{&lt;br /&gt;
				tag_deliverTo: hash_requestPropertyF,&lt;br /&gt;
				tag_sellOfferPlanDeliveryMethodLink: hash_requestPropertyG,&lt;br /&gt;
			}&lt;br /&gt;
		},&lt;br /&gt;
		hash_linkStepA_C: { //final OrderPrice step&lt;br /&gt;
			filterElementUnitIds: [&amp;quot;hash_filterElementUnitA&amp;quot;]&lt;br /&gt;
			aggregate: &amp;quot;max&amp;quot;,&lt;br /&gt;
			sortFields: &amp;quot;hash_sortFieldA&amp;quot;,&lt;br /&gt;
			// ... other linkPath.linkStep settings here&lt;br /&gt;
		}&lt;br /&gt;
	},&lt;br /&gt;
	sortFields:{&lt;br /&gt;
		hash_sortFieldA: {&lt;br /&gt;
			// ..&lt;br /&gt;
		}&lt;br /&gt;
	}&lt;br /&gt;
&lt;br /&gt;
	filterElementUnits: {&lt;br /&gt;
		hash_filterElementUnitA:{&lt;br /&gt;
			objType: { &lt;br /&gt;
				serviceTag: &amp;quot;OrderPrice&amp;quot;,&lt;br /&gt;
				objectType: &amp;quot;OrderPrice&amp;quot;&lt;br /&gt;
			},		&lt;br /&gt;
			fieldname: &amp;quot;orderTotal&amp;quot;,&lt;br /&gt;
			comparison: &amp;quot;greaterThan&amp;quot;,&lt;br /&gt;
			value: &amp;quot;xxx&amp;quot;, // tableConfig sets &amp;quot;defaultFilterElementUnitValue&amp;quot;, tableOutput finds from 1. filter objects set to overwrite it, 2. prop sent (eg from sitePage), 3. defaultFilterElementUnitValue&lt;br /&gt;
		},&lt;br /&gt;
		hash_filterElementUnitB:{&lt;br /&gt;
			objType: { &lt;br /&gt;
				serviceTag: &amp;quot;DeliveryMethodManager&amp;quot;,&lt;br /&gt;
				objectType: &amp;quot;deliveryMethod&amp;quot;&lt;br /&gt;
			},		&lt;br /&gt;
			fieldname: &amp;quot;deliveryMethodId&amp;quot;,&lt;br /&gt;
			comparison: &amp;quot;equals&amp;quot;,&lt;br /&gt;
			value: &amp;quot;xxx&amp;quot;,&lt;br /&gt;
		},&lt;br /&gt;
        hash_filterElementUnitD: {&lt;br /&gt;
			objType: { &lt;br /&gt;
				serviceTag: &amp;quot;ProductManager&amp;quot;,&lt;br /&gt;
				objectType: &amp;quot;Product&amp;quot;&lt;br /&gt;
			},		&lt;br /&gt;
         	fieldname: &amp;quot;productId&amp;quot;,&lt;br /&gt;
			comparison: &amp;quot;equals&amp;quot;,&lt;br /&gt;
			value: &amp;quot;xxx&amp;quot;,&lt;br /&gt;
       },&lt;br /&gt;
        hash_filterElementUnitE: {&lt;br /&gt;
			objType: { &lt;br /&gt;
				serviceTag: &amp;quot;ProductManager&amp;quot;,&lt;br /&gt;
				objectType: &amp;quot;Product&amp;quot;&lt;br /&gt;
			},		&lt;br /&gt;
         	fieldname: &amp;quot;productId&amp;quot;,&lt;br /&gt;
			comparison: &amp;quot;equals&amp;quot;,&lt;br /&gt;
			value: &amp;quot;xxx&amp;quot;,&lt;br /&gt;
       }&lt;br /&gt;
	},&lt;br /&gt;
&lt;br /&gt;
	requestProperties: {&lt;br /&gt;
		hash_requestPropertyA:{&lt;br /&gt;
			value: &amp;quot;xx&amp;quot;,&lt;br /&gt;
		},&lt;br /&gt;
		hash_requestPropertyB:{&lt;br /&gt;
			value: &amp;quot;xx&amp;quot;,&lt;br /&gt;
		},&lt;br /&gt;
		hash_requestPropertyC:{&lt;br /&gt;
			value: &amp;quot;xx&amp;quot;,&lt;br /&gt;
		},&lt;br /&gt;
		hash_requestPropertyD:{&lt;br /&gt;
			value: &amp;quot;xx&amp;quot;,&lt;br /&gt;
		},&lt;br /&gt;
		hash_requestPropertyE:{&lt;br /&gt;
			value: &amp;quot;xx&amp;quot;,&lt;br /&gt;
		},&lt;br /&gt;
		hash_requestPropertyF:{&lt;br /&gt;
			valueSource: &amp;quot;complexFilterCombination&amp;quot;,&lt;br /&gt;
            complexFilterCombinationId: &amp;quot;hash_complexFilterCombinationA&amp;quot;,&lt;br /&gt;
		},&lt;br /&gt;
		hash_requestPropertyG:{&lt;br /&gt;
			valueSource: &amp;quot;perParentCombination&amp;quot;,&lt;br /&gt;
            perParentCombinationId: &amp;quot;hash_perParentCombinationA&amp;quot;,&lt;br /&gt;
            identifierFieldName: &amp;quot;sellOfferPlanDeliveryMethodLinkId&amp;quot;&lt;br /&gt;
		},&lt;br /&gt;
	}&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[Category:Working documents| 2025-04-14]]&lt;br /&gt;
[[Category:Working documents - Search Results| 2025-04-14]]&lt;/div&gt;</summary>
		<author><name>Rut</name></author>
	</entry>
	<entry>
		<id>https://izara.io/wiki/index.php?title=2025-04-14_-_Frontend_LinkPath_structure_for_tableOutput&amp;diff=3529</id>
		<title>2025-04-14 - Frontend LinkPath structure for tableOutput</title>
		<link rel="alternate" type="text/html" href="https://izara.io/wiki/index.php?title=2025-04-14_-_Frontend_LinkPath_structure_for_tableOutput&amp;diff=3529"/>
		<updated>2025-08-19T06:45:11Z</updated>

		<summary type="html">&lt;p&gt;Rut: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Service - Search Results]]&lt;br /&gt;
&lt;br /&gt;
= Overview =&lt;br /&gt;
&lt;br /&gt;
Structure frontend TableConfig and Output prepare for shared library that creates complexFilter and requestProperties&lt;br /&gt;
&lt;br /&gt;
= Example params =&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;JavaScript&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
let paramFromTableOutput = {&lt;br /&gt;
	objType: { //* main objType&lt;br /&gt;
		serviceTag: &amp;quot;ProductManager&amp;quot;,&lt;br /&gt;
		objectType: &amp;quot;Product&amp;quot;&lt;br /&gt;
	},&lt;br /&gt;
&lt;br /&gt;
	mainComplexFilterUnits: { // used to create main complexFilter&lt;br /&gt;
		uuid_FilterUnitA: { // select link step from main objType&lt;br /&gt;
			linkStepObject: &amp;quot;hash_LinkStepObjectA&amp;quot;,&lt;br /&gt;
             parentOrGroup: &amp;quot;uuid_OrGroupA&amp;quot;&lt;br /&gt;
		},&lt;br /&gt;
        uuid_FilterUnitB: { // select own fieldname of main objType&lt;br /&gt;
          linkStepObject: &amp;quot;hash_LinkStepObjectD&amp;quot;,&lt;br /&gt;
          parentOrGtoup: &amp;quot;uuid_orGroupA&amp;quot;&lt;br /&gt;
        }&lt;br /&gt;
&lt;br /&gt;
	},&lt;br /&gt;
	mainComplexFilterOrGroups: { //* group and operation filters for each mainComplexFilterUnits&lt;br /&gt;
		uuid_OrGroupA: {&lt;br /&gt;
			filterUnitIds: [&amp;quot;uuid_FilterUnitA&amp;quot;, &amp;quot;uuid_FilterUnitB&amp;quot;],&lt;br /&gt;
			parentOrGroup: &amp;quot;&amp;quot;,&lt;br /&gt;
			childOrGroups: []&lt;br /&gt;
		}&lt;br /&gt;
	},&lt;br /&gt;
	filterLinkStepObjects: {&lt;br /&gt;
		hash_LinkStepObjectA: { // main complexFilter find orderPrice&lt;br /&gt;
			initialObjType: { //* main objType&lt;br /&gt;
				serviceTag: &amp;quot;ProductManager&amp;quot;,&lt;br /&gt;
				objectType: &amp;quot;Product&amp;quot;&lt;br /&gt;
			},&lt;br /&gt;
			linkSteps: [&amp;quot;hash_linkStepA_A&amp;quot;, &amp;quot;hash_linkStepA_B&amp;quot;, &amp;quot;hash_linkStepA_C&amp;quot;],&lt;br /&gt;
		},&lt;br /&gt;
		hash_LinkStepObjectB: { // complexFilterCombinations for parentLocationNodes&lt;br /&gt;
			initialObjType: { //* main objType&lt;br /&gt;
				serviceTag: &amp;quot;locatons&amp;quot;,&lt;br /&gt;
				objectType: &amp;quot;LocationNode&amp;quot;&lt;br /&gt;
			},&lt;br /&gt;
			linkSteps: [&amp;quot;hash_linkStepB_A&amp;quot;,&amp;quot;hash_linkStepB_B&amp;quot;],&lt;br /&gt;
		},&lt;br /&gt;
		hash_LinkStepObjectC: { // perParentCombinations&lt;br /&gt;
			initialObjType: { //* main objType&lt;br /&gt;
				serviceTag: &amp;quot;SellOffer&amp;quot;,&lt;br /&gt;
				objectType: &amp;quot;SellOffer&amp;quot;&lt;br /&gt;
			},&lt;br /&gt;
			linkSteps: [&amp;quot;hash_linkStepC_A&amp;quot;, &amp;quot;hash_linkStepC_B&amp;quot;, &amp;quot;hash_linkStepC_C&amp;quot;, &amp;quot;hash_linkStepC_D&amp;quot;],&lt;br /&gt;
		},&lt;br /&gt;
        hash_LinkStepObjectD:{&lt;br /&gt;
            initialObjType: { //* main objType&lt;br /&gt;
				serviceTag: &amp;quot;ProductManager&amp;quot;,&lt;br /&gt;
				objectType: &amp;quot;Product&amp;quot;&lt;br /&gt;
			},&lt;br /&gt;
			linkSteps: [&amp;quot;hash_linkStepD_A&amp;quot;],&lt;br /&gt;
        }&lt;br /&gt;
	},&lt;br /&gt;
	filterLinkSteps: {&lt;br /&gt;
		hash_linkStepA_A: { //one step: Product &amp;gt; SellOffer&lt;br /&gt;
		  link: {&lt;br /&gt;
			objType: {&lt;br /&gt;
			  serviceTag: &amp;quot;SellOfferManager&amp;quot;,&lt;br /&gt;
			  objectType: &amp;quot;SellOffer&amp;quot;&lt;br /&gt;
			},&lt;br /&gt;
			relType: {&lt;br /&gt;
			  serviceTag: &amp;quot;ProductManager&amp;quot;,&lt;br /&gt;
			  relationshipTag: &amp;quot;hasSellOffer&amp;quot;&lt;br /&gt;
			},&lt;br /&gt;
			relationshipDirection: &amp;quot;to&amp;quot;,&lt;br /&gt;
		  },&lt;br /&gt;
		},&lt;br /&gt;
		hash_linkStepA_B: { //one step: SellOffer &amp;gt; OrderPrice&lt;br /&gt;
			link: {&lt;br /&gt;
				objType: {&lt;br /&gt;
				  serviceTag: &amp;quot;OrderPrice&amp;quot;,&lt;br /&gt;
				  objectType: &amp;quot;OrderPrice&amp;quot;&lt;br /&gt;
				},&lt;br /&gt;
				relType: {&lt;br /&gt;
				  serviceTag: &amp;quot;sellOfferStandard&amp;quot;,&lt;br /&gt;
				  relationshipTag: &amp;quot;hasOrderPrice&amp;quot;&lt;br /&gt;
				},&lt;br /&gt;
				relationshipDirection: &amp;quot;to&amp;quot;,&lt;br /&gt;
			},&lt;br /&gt;
			// tableConfig sets &amp;quot;defaultRequestPropertyValues&amp;quot; for each, tableOutput finds from 1. filter objects set to overwrite it, 2. prop sent (eg from sitePage), 3. defaultRequestPropertyValues&lt;br /&gt;
			requestProperties:{&lt;br /&gt;
				tag_deliverTo: hash_requestPropertyA,&lt;br /&gt;
				tag_sellOfferPlan: hash_requestPropertyB,&lt;br /&gt;
				tag_sellOfferPlanDeliveryMethodLink: hash_requestPropertyC,&lt;br /&gt;
				tag_sellOfferPlanUserPaymentMethodLink: hash_requestPropertyD,&lt;br /&gt;
			},&lt;br /&gt;
            filterElementUnitIds: [&amp;quot;hash_filterElementUnitF&amp;quot;]&lt;br /&gt;
		},&lt;br /&gt;
		hash_linkStepA_C: { //final OrderPrice step&lt;br /&gt;
			filterElementUnitIds: [&amp;quot;hash_filterElementUnitA&amp;quot;]&lt;br /&gt;
		},&lt;br /&gt;
		hash_linkStepB_A: { //one step: LocationNode &amp;gt; LocationNode&lt;br /&gt;
		  link: {&lt;br /&gt;
			objType: {&lt;br /&gt;
			  serviceTag: &amp;quot;Locations&amp;quot;,&lt;br /&gt;
			  objectType: &amp;quot;LocationNode&amp;quot;&lt;br /&gt;
			},&lt;br /&gt;
			relType: {&lt;br /&gt;
			  serviceTag: &amp;quot;Locations&amp;quot;,&lt;br /&gt;
			  relationshipTag: &amp;quot;isParentLocationNode&amp;quot;&lt;br /&gt;
			},&lt;br /&gt;
			relationshipDirection: &amp;quot;to&amp;quot;,&lt;br /&gt;
		  },&lt;br /&gt;
		  // tableConfig sets &amp;quot;defaultRequestPropertyValues&amp;quot; for each, tableOutput finds from 1. filter objects set to overwrite it, 2. prop sent (eg from sitePage), 3. defaultRequestPropertyValues&lt;br /&gt;
		  requestProperties:{&lt;br /&gt;
				tag_traversalType: hash_requestPropertyE,&lt;br /&gt;
		  }&lt;br /&gt;
		},&lt;br /&gt;
		hash_linkStepB_B: { //final parent LocationNodes step&lt;br /&gt;
		},&lt;br /&gt;
		hash_linkStepC_A: { //one step: SellOffer &amp;gt; SellOfferPlan&lt;br /&gt;
		  link: {&lt;br /&gt;
			objType: {&lt;br /&gt;
			  serviceTag: &amp;quot;SellOfferPlan&amp;quot;,&lt;br /&gt;
			  objectType: &amp;quot;SellOfferPlan&amp;quot;&lt;br /&gt;
			},&lt;br /&gt;
			relType: {&lt;br /&gt;
			  serviceTag: &amp;quot;SellOfferManager&amp;quot;,&lt;br /&gt;
			  relationshipTag: &amp;quot;usesSellOfferPlan&amp;quot;&lt;br /&gt;
			},&lt;br /&gt;
			relationshipDirection: &amp;quot;to&amp;quot;,&lt;br /&gt;
		  },&lt;br /&gt;
		},&lt;br /&gt;
		hash_linkStepC_B: { //one step: SellOfferPlan &amp;gt; DeliveryMethodLink&lt;br /&gt;
		  link: {&lt;br /&gt;
			objType: {&lt;br /&gt;
			  serviceTag: &amp;quot;SellOfferPlan&amp;quot;,&lt;br /&gt;
			  objectType: &amp;quot;DeliveryMethodLink&amp;quot;&lt;br /&gt;
			},&lt;br /&gt;
			relType: {&lt;br /&gt;
			  serviceTag: &amp;quot;SellOfferPlan&amp;quot;,&lt;br /&gt;
			  relationshipTag: &amp;quot;hasDeliveryMethodLink&amp;quot;&lt;br /&gt;
			},&lt;br /&gt;
			relationshipDirection: &amp;quot;to&amp;quot;,&lt;br /&gt;
		  },&lt;br /&gt;
		},&lt;br /&gt;
		hash_linkStepC_C: { //one step: SellOfferPlan &amp;gt; DeliveryMethodLink&lt;br /&gt;
		  link: {&lt;br /&gt;
			objType: {&lt;br /&gt;
			  serviceTag: &amp;quot;SellOfferPlan&amp;quot;,&lt;br /&gt;
			  objectType: &amp;quot;DeliveryMethodLink&amp;quot;&lt;br /&gt;
			},&lt;br /&gt;
			relType: {&lt;br /&gt;
			  serviceTag: &amp;quot;SellOfferPlan&amp;quot;,&lt;br /&gt;
			  relationshipTag: &amp;quot;hasDeliveryMethodLink&amp;quot;&lt;br /&gt;
			},&lt;br /&gt;
			relationshipDirection: &amp;quot;to&amp;quot;,&lt;br /&gt;
		  },&lt;br /&gt;
		},&lt;br /&gt;
		hash_linkStepC_D: { //one step: DeliveryMethodLink &amp;gt; DeliveryMethod&lt;br /&gt;
		  link: {&lt;br /&gt;
			objType: {&lt;br /&gt;
			  serviceTag: &amp;quot;DeliveryMethodManager&amp;quot;,&lt;br /&gt;
			  objectType: &amp;quot;DeliveryMethod&amp;quot;&lt;br /&gt;
			},&lt;br /&gt;
			relType: {&lt;br /&gt;
			  serviceTag: &amp;quot;SellOfferPlan&amp;quot;,&lt;br /&gt;
			  relationshipTag: &amp;quot;isDeliveryMethod&amp;quot;&lt;br /&gt;
			},&lt;br /&gt;
			relationshipDirection: &amp;quot;to&amp;quot;,&lt;br /&gt;
		  },&lt;br /&gt;
		  filterElementUnitIds: [&amp;quot;hash_filterElementUnitB&amp;quot;]&lt;br /&gt;
		},&lt;br /&gt;
        hash_linkStepD_A:{&lt;br /&gt;
           filterElementUnitIds: [&amp;quot;hash_filterElementUnitE&amp;quot;]&lt;br /&gt;
        }&lt;br /&gt;
	},&lt;br /&gt;
	&lt;br /&gt;
	requiredDataFields: { //* fields to create requiredData including linkPaths&lt;br /&gt;
		//* no link, field in main objType&lt;br /&gt;
		hash_requiredDataFieldA: {&lt;br /&gt;
			fieldname: &amp;quot;&amp;quot;&lt;br /&gt;
		},&lt;br /&gt;
		&lt;br /&gt;
		//* has link&lt;br /&gt;
		hash_requiredDataFieldB: {&lt;br /&gt;
			linkStepObject: &amp;quot;hash_LinkStepObjectD&amp;quot;,&lt;br /&gt;
            fieldname: &amp;quot; &amp;quot;,&lt;br /&gt;
			complexFilterCombinations: [&amp;quot;hash_complexFilterCombinationA&amp;quot;],&lt;br /&gt;
		}&lt;br /&gt;
	&lt;br /&gt;
	},&lt;br /&gt;
	complexFilterCombinations:{&lt;br /&gt;
		hash_complexFilterCombinationA: {&lt;br /&gt;
			linkStepObjectA: &amp;quot;hash_LinkStepObjectB&amp;quot;,&lt;br /&gt;
			initialIdentifiers: { // tableConfig sets &amp;quot;defaultInitialIdentifiers, tableOutput finds from 1. filter objects set to overwrite it, 2. prop sent (eg from sitePage), 3. defaultInitialIdentifiers&lt;br /&gt;
				&amp;quot;locationNodeId&amp;quot;: &amp;quot;xxxx&amp;quot;&lt;br /&gt;
			},&lt;br /&gt;
		},&lt;br /&gt;
	},&lt;br /&gt;
	perParentCombinations:{&lt;br /&gt;
		hash_perParentCombinationA: {&lt;br /&gt;
			linkStepObjectA: &amp;quot;hash_LinkStepObjectC&amp;quot;,&lt;br /&gt;
		},&lt;br /&gt;
	},&lt;br /&gt;
	requiredDataLinkStepObjects: {&lt;br /&gt;
		hash_LinkStepObjectD: { // requiredDataFields for finding max orderTotal&lt;br /&gt;
			initialObjType: { //* main objType&lt;br /&gt;
				serviceTag: &amp;quot;ProductManager&amp;quot;,&lt;br /&gt;
				objectType: &amp;quot;Product&amp;quot;&lt;br /&gt;
			},&lt;br /&gt;
			linkSteps: [&amp;quot;hash_linkStepD_A&amp;quot;, &amp;quot;hash_linkStepD_B&amp;quot;, &amp;quot;hash_linkStepA_C&amp;quot;],&lt;br /&gt;
		}&lt;br /&gt;
	},&lt;br /&gt;
	requiredDataLinkSteps: {&lt;br /&gt;
		hash_linkStepD_A: { //one step: Product &amp;gt; SellOffer&lt;br /&gt;
		  link: {&lt;br /&gt;
			objType: {&lt;br /&gt;
			  serviceTag: &amp;quot;SellOfferManager&amp;quot;,&lt;br /&gt;
			  objectType: &amp;quot;SellOffer&amp;quot;&lt;br /&gt;
			},&lt;br /&gt;
			relType: {&lt;br /&gt;
			  serviceTag: &amp;quot;ProductManager&amp;quot;,&lt;br /&gt;
			  relationshipTag: &amp;quot;hasSellOffer&amp;quot;&lt;br /&gt;
			},&lt;br /&gt;
			relationshipDirection: &amp;quot;to&amp;quot;,&lt;br /&gt;
		  },&lt;br /&gt;
		},&lt;br /&gt;
		hash_linkStepD_B: { //one step: SellOffer &amp;gt; OrderPrice&lt;br /&gt;
			link: {&lt;br /&gt;
				objType: {&lt;br /&gt;
				  serviceTag: &amp;quot;OrderPrice&amp;quot;,&lt;br /&gt;
				  objectType: &amp;quot;OrderPrice&amp;quot;&lt;br /&gt;
				},&lt;br /&gt;
				relType: {&lt;br /&gt;
				  serviceTag: &amp;quot;sellOfferStandard&amp;quot;,&lt;br /&gt;
				  relationshipTag: &amp;quot;hasOrderPrice&amp;quot;&lt;br /&gt;
				},&lt;br /&gt;
				relationshipDirection: &amp;quot;to&amp;quot;,&lt;br /&gt;
			},&lt;br /&gt;
			// tableConfig sets &amp;quot;defaultRequestPropertyValues&amp;quot; for each, tableOutput finds from 1. filter objects set to overwrite it, 2. prop sent (eg from sitePage), 3. defaultRequestPropertyValues&lt;br /&gt;
			requestProperties:{&lt;br /&gt;
				tag_deliverTo: hash_requestPropertyF,&lt;br /&gt;
				tag_sellOfferPlanDeliveryMethodLink: hash_requestPropertyG,&lt;br /&gt;
			}&lt;br /&gt;
		},&lt;br /&gt;
		hash_linkStepA_C: { //final OrderPrice step&lt;br /&gt;
			filterElementUnitIds: [&amp;quot;hash_filterElementUnitA&amp;quot;]&lt;br /&gt;
			aggregate: &amp;quot;max&amp;quot;,&lt;br /&gt;
			sortFields: &amp;quot;hash_sortFieldA&amp;quot;,&lt;br /&gt;
			// ... other linkPath.linkStep settings here&lt;br /&gt;
		}&lt;br /&gt;
	},&lt;br /&gt;
	sortFields:{&lt;br /&gt;
		hash_sortFieldA: {&lt;br /&gt;
			// ..&lt;br /&gt;
		}&lt;br /&gt;
	}&lt;br /&gt;
&lt;br /&gt;
	filterElementUnits: {&lt;br /&gt;
		hash_filterElementUnitA:{&lt;br /&gt;
			objType: { &lt;br /&gt;
				serviceTag: &amp;quot;OrderPrice&amp;quot;,&lt;br /&gt;
				objectType: &amp;quot;OrderPrice&amp;quot;&lt;br /&gt;
			},		&lt;br /&gt;
			fieldname: &amp;quot;orderTotal&amp;quot;,&lt;br /&gt;
			comparison: &amp;quot;greaterThan&amp;quot;,&lt;br /&gt;
			value: &amp;quot;xxx&amp;quot;, // tableConfig sets &amp;quot;defaultFilterElementUnitValue&amp;quot;, tableOutput finds from 1. filter objects set to overwrite it, 2. prop sent (eg from sitePage), 3. defaultFilterElementUnitValue&lt;br /&gt;
		},&lt;br /&gt;
		hash_filterElementUnitB:{&lt;br /&gt;
			objType: { &lt;br /&gt;
				serviceTag: &amp;quot;DeliveryMethodManager&amp;quot;,&lt;br /&gt;
				objectType: &amp;quot;deliveryMethod&amp;quot;&lt;br /&gt;
			},		&lt;br /&gt;
			fieldname: &amp;quot;deliveryMethodId&amp;quot;,&lt;br /&gt;
			comparison: &amp;quot;equals&amp;quot;,&lt;br /&gt;
			value: &amp;quot;xxx&amp;quot;,&lt;br /&gt;
		},&lt;br /&gt;
        hash_filterElementUnitD: {&lt;br /&gt;
			objType: { &lt;br /&gt;
				serviceTag: &amp;quot;ProductManager&amp;quot;,&lt;br /&gt;
				objectType: &amp;quot;Product&amp;quot;&lt;br /&gt;
			},		&lt;br /&gt;
         	fieldname: &amp;quot;productId&amp;quot;,&lt;br /&gt;
			comparison: &amp;quot;equals&amp;quot;,&lt;br /&gt;
			value: &amp;quot;xxx&amp;quot;,&lt;br /&gt;
       },&lt;br /&gt;
        hash_filterElementUnitE: {&lt;br /&gt;
			objType: { &lt;br /&gt;
				serviceTag: &amp;quot;ProductManager&amp;quot;,&lt;br /&gt;
				objectType: &amp;quot;Product&amp;quot;&lt;br /&gt;
			},		&lt;br /&gt;
         	fieldname: &amp;quot;productId&amp;quot;,&lt;br /&gt;
			comparison: &amp;quot;equals&amp;quot;,&lt;br /&gt;
			value: &amp;quot;xxx&amp;quot;,&lt;br /&gt;
       }&lt;br /&gt;
	},&lt;br /&gt;
&lt;br /&gt;
	requestProperties: {&lt;br /&gt;
		hash_requestPropertyA:{&lt;br /&gt;
			value: &amp;quot;xx&amp;quot;,&lt;br /&gt;
		},&lt;br /&gt;
		hash_requestPropertyB:{&lt;br /&gt;
			value: &amp;quot;xx&amp;quot;,&lt;br /&gt;
		},&lt;br /&gt;
		hash_requestPropertyC:{&lt;br /&gt;
			value: &amp;quot;xx&amp;quot;,&lt;br /&gt;
		},&lt;br /&gt;
		hash_requestPropertyD:{&lt;br /&gt;
			value: &amp;quot;xx&amp;quot;,&lt;br /&gt;
		},&lt;br /&gt;
		hash_requestPropertyE:{&lt;br /&gt;
			value: &amp;quot;xx&amp;quot;,&lt;br /&gt;
		},&lt;br /&gt;
		hash_requestPropertyF:{&lt;br /&gt;
			valueSource: &amp;quot;complexFilterCombination&amp;quot;,&lt;br /&gt;
            complexFilterCombinationId: &amp;quot;hash_complexFilterCombinationA&amp;quot;,&lt;br /&gt;
		},&lt;br /&gt;
		hash_requestPropertyG:{&lt;br /&gt;
			valueSource: &amp;quot;perParentCombination&amp;quot;,&lt;br /&gt;
            perParentCombinationId: &amp;quot;hash_perParentCombinationA&amp;quot;,&lt;br /&gt;
            identifierFieldName: &amp;quot;sellOfferPlanDeliveryMethodLinkId&amp;quot;&lt;br /&gt;
		},&lt;br /&gt;
	}&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[Category:Working documents| 2025-04-14]]&lt;br /&gt;
[[Category:Working documents - Search Results| 2025-04-14]]&lt;/div&gt;</summary>
		<author><name>Rut</name></author>
	</entry>
	<entry>
		<id>https://izara.io/wiki/index.php?title=2025-04-14_-_Frontend_LinkPath_structure_for_tableOutput&amp;diff=3311</id>
		<title>2025-04-14 - Frontend LinkPath structure for tableOutput</title>
		<link rel="alternate" type="text/html" href="https://izara.io/wiki/index.php?title=2025-04-14_-_Frontend_LinkPath_structure_for_tableOutput&amp;diff=3311"/>
		<updated>2025-07-03T07:55:15Z</updated>

		<summary type="html">&lt;p&gt;Rut: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Service - Search Results]]&lt;br /&gt;
&lt;br /&gt;
= Overview =&lt;br /&gt;
&lt;br /&gt;
Structure frontend TableConfig and Output prepare for shared library that creates complexFilter and requestProperties&lt;br /&gt;
&lt;br /&gt;
= Example params =&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;JavaScript&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
let paramFromTableOutput = {&lt;br /&gt;
	objType: { //* main objType&lt;br /&gt;
		serviceTag: &amp;quot;ProductManager&amp;quot;,&lt;br /&gt;
		objectType: &amp;quot;Product&amp;quot;&lt;br /&gt;
	},&lt;br /&gt;
&lt;br /&gt;
	mainComplexFilterUnits: { // used to create main complexFilter&lt;br /&gt;
		uuid_FilterUnitA: { // select link step from main objType&lt;br /&gt;
			linkStepObject: &amp;quot;uuid_LinkStepObjectA&amp;quot;,&lt;br /&gt;
             parentOrGroup: &amp;quot;uuid_OrGroupA&amp;quot;&lt;br /&gt;
		},&lt;br /&gt;
        uuid_FilterUnitB: { // select own fieldname of main objType&lt;br /&gt;
          filterElementUnitIds: [ &amp;quot;uuid_filterElementUnitD&amp;quot; ],&lt;br /&gt;
          parentOrGtoup: &amp;quot;uuid_orGroupA&amp;quot;&lt;br /&gt;
        }&lt;br /&gt;
&lt;br /&gt;
	},&lt;br /&gt;
	mainComplexFilterOrGroups: { //* group and operation filters for each mainComplexFilterUnits&lt;br /&gt;
		uuid_OrGroupA: {&lt;br /&gt;
			filterElementUnitIds: [&amp;quot;uuid_FilterA&amp;quot;],&lt;br /&gt;
			parentOrGroup: &amp;quot;&amp;quot;,&lt;br /&gt;
			childOrGroup: []&lt;br /&gt;
		}&lt;br /&gt;
	},&lt;br /&gt;
	filterLinkStepObjects: {&lt;br /&gt;
		uuid_LinkStepObjectA: { // main complexFilter find orderPrice&lt;br /&gt;
			initialObjType: { //* main objType&lt;br /&gt;
				serviceTag: &amp;quot;ProductManager&amp;quot;,&lt;br /&gt;
				objectType: &amp;quot;Product&amp;quot;&lt;br /&gt;
			},&lt;br /&gt;
			initialLinkStep: &amp;quot;uuid_linkStepA_A&amp;quot;,&lt;br /&gt;
			linkSteps: {&lt;br /&gt;
				uuid_linkStepA_A: { //one step: Product &amp;gt; SellOffer&lt;br /&gt;
				  link: {&lt;br /&gt;
					objType: {&lt;br /&gt;
					  serviceTag: &amp;quot;SellOfferManager&amp;quot;,&lt;br /&gt;
					  objectType: &amp;quot;SellOffer&amp;quot;&lt;br /&gt;
					},&lt;br /&gt;
					relType: {&lt;br /&gt;
					  serviceTag: &amp;quot;ProductManager&amp;quot;,&lt;br /&gt;
					  relationshipTag: &amp;quot;hasSellOffer&amp;quot;&lt;br /&gt;
					},&lt;br /&gt;
					relationshipDirection: &amp;quot;to&amp;quot;,&lt;br /&gt;
				  },&lt;br /&gt;
				  childLinkStep: &amp;quot;uuid_linkStepA_B&amp;quot;,&lt;br /&gt;
				},&lt;br /&gt;
				uuid_linkStepA_B: { //one step: SellOffer &amp;gt; OrderPrice&lt;br /&gt;
					link: {&lt;br /&gt;
						objType: {&lt;br /&gt;
						  serviceTag: &amp;quot;OrderPrice&amp;quot;,&lt;br /&gt;
						  objectType: &amp;quot;OrderPrice&amp;quot;&lt;br /&gt;
						},&lt;br /&gt;
						relType: {&lt;br /&gt;
						  serviceTag: &amp;quot;sellOfferStandard&amp;quot;,&lt;br /&gt;
						  relationshipTag: &amp;quot;hasOrderPrice&amp;quot;&lt;br /&gt;
						},&lt;br /&gt;
						relationshipDirection: &amp;quot;to&amp;quot;,&lt;br /&gt;
					},&lt;br /&gt;
					parentLinkStep: &amp;quot;uuid_linkStepA_A&amp;quot;,&lt;br /&gt;
					childLinkStep: &amp;quot;uuid_linkStepA_C&amp;quot;,&lt;br /&gt;
					// tableConfig sets &amp;quot;defaultRequestPropertyValues&amp;quot; for each, tableOutput finds from 1. filter objects set to overwrite it, 2. prop sent (eg from sitePage), 3. defaultRequestPropertyValues&lt;br /&gt;
					requestProperties:{&lt;br /&gt;
						tag_deliverTo: {// tag_deliverTo comes from linkConfig&lt;br /&gt;
							valueSource: &amp;quot;value&amp;quot;,&lt;br /&gt;
							value: &amp;quot;xx&amp;quot;,&lt;br /&gt;
						},&lt;br /&gt;
						tag_sellOfferPlan: {&lt;br /&gt;
							valueSource: &amp;quot;value&amp;quot;,&lt;br /&gt;
							value: &amp;quot;xx&amp;quot;,&lt;br /&gt;
						},&lt;br /&gt;
						tag_sellOfferPlanDeliveryMethodLink: {&lt;br /&gt;
							valueSource: &amp;quot;value&amp;quot;,&lt;br /&gt;
							value: &amp;quot;xx&amp;quot;,&lt;br /&gt;
						},&lt;br /&gt;
						tag_sellOfferPlanUserPaymentMethodLink: {&lt;br /&gt;
							valueSource: &amp;quot;value&amp;quot;,&lt;br /&gt;
							value: &amp;quot;xx&amp;quot;,&lt;br /&gt;
						},&lt;br /&gt;
					}&lt;br /&gt;
				},&lt;br /&gt;
				uuid_linkStepA_C: { //final OrderPrice step&lt;br /&gt;
					parentLinkStep: &amp;quot;uuid_linkStepA_B&amp;quot;,&lt;br /&gt;
					filterElementUnitIds: [&amp;quot;uuid_filterElementUnitA&amp;quot;]&lt;br /&gt;
				}&lt;br /&gt;
			}&lt;br /&gt;
		},&lt;br /&gt;
		uuid_LinkStepObjectB: { // complexFilterCombinations for parentLocationNodes&lt;br /&gt;
			initialObjType: { //* main objType&lt;br /&gt;
				serviceTag: &amp;quot;locatons&amp;quot;,&lt;br /&gt;
				objectType: &amp;quot;LocationNode&amp;quot;&lt;br /&gt;
			},&lt;br /&gt;
			initialLinkStep: &amp;quot;uuid_linkStepB_A&amp;quot;,&lt;br /&gt;
			linkSteps: {&lt;br /&gt;
				uuid_linkStepB_A: { //one step: LocationNode &amp;gt; LocationNode&lt;br /&gt;
				  link: {&lt;br /&gt;
					objType: {&lt;br /&gt;
					  serviceTag: &amp;quot;Locations&amp;quot;,&lt;br /&gt;
					  objectType: &amp;quot;LocationNode&amp;quot;&lt;br /&gt;
					},&lt;br /&gt;
					relType: {&lt;br /&gt;
					  serviceTag: &amp;quot;Locations&amp;quot;,&lt;br /&gt;
					  relationshipTag: &amp;quot;isParentLocationNode&amp;quot;&lt;br /&gt;
					},&lt;br /&gt;
					relationshipDirection: &amp;quot;to&amp;quot;,&lt;br /&gt;
				  },&lt;br /&gt;
				  childLinkStep: &amp;quot;uuid_linkStepB_B&amp;quot;,&lt;br /&gt;
				  // tableConfig sets &amp;quot;defaultRequestPropertyValues&amp;quot; for each, tableOutput finds from 1. filter objects set to overwrite it, 2. prop sent (eg from sitePage), 3. defaultRequestPropertyValues&lt;br /&gt;
				  requestProperties:{&lt;br /&gt;
						tag_traversalType: {&lt;br /&gt;
							valueSource: &amp;quot;value&amp;quot;,&lt;br /&gt;
							value: &amp;quot;parentNodes&amp;quot;,&lt;br /&gt;
						},&lt;br /&gt;
					}&lt;br /&gt;
				},&lt;br /&gt;
				uuid_linkStepB_B: { //final parent LocationNodes step&lt;br /&gt;
				  parentLinkStep: &amp;quot;uuid_linkStepB_A&amp;quot;&lt;br /&gt;
				}&lt;br /&gt;
			}&lt;br /&gt;
		},&lt;br /&gt;
		uuid_LinkStepObjectC: { // perParentCombinations&lt;br /&gt;
			initialObjType: { //* main objType&lt;br /&gt;
				serviceTag: &amp;quot;SellOffer&amp;quot;,&lt;br /&gt;
				objectType: &amp;quot;SellOffer&amp;quot;&lt;br /&gt;
			},&lt;br /&gt;
			initialLinkStep: &amp;quot;uuid_linkStepC_A&amp;quot;,&lt;br /&gt;
			linkSteps: {&lt;br /&gt;
				uuid_linkStepC_A: { //one step: SellOffer &amp;gt; SellOfferPlan&lt;br /&gt;
				  link: {&lt;br /&gt;
					objType: {&lt;br /&gt;
					  serviceTag: &amp;quot;SellOfferPlan&amp;quot;,&lt;br /&gt;
					  objectType: &amp;quot;SellOfferPlan&amp;quot;&lt;br /&gt;
					},&lt;br /&gt;
					relType: {&lt;br /&gt;
					  serviceTag: &amp;quot;SellOfferManager&amp;quot;,&lt;br /&gt;
					  relationshipTag: &amp;quot;usesSellOfferPlan&amp;quot;&lt;br /&gt;
					},&lt;br /&gt;
					relationshipDirection: &amp;quot;to&amp;quot;,&lt;br /&gt;
				  },&lt;br /&gt;
				  childLinkStep: &amp;quot;uuid_linkStepC_B&amp;quot;,&lt;br /&gt;
				},&lt;br /&gt;
				uuid_linkStepC_B: { //one step: SellOfferPlan &amp;gt; DeliveryMethodLink&lt;br /&gt;
				  link: {&lt;br /&gt;
					objType: {&lt;br /&gt;
					  serviceTag: &amp;quot;SellOfferPlan&amp;quot;,&lt;br /&gt;
					  objectType: &amp;quot;DeliveryMethodLink&amp;quot;&lt;br /&gt;
					},&lt;br /&gt;
					relType: {&lt;br /&gt;
					  serviceTag: &amp;quot;SellOfferPlan&amp;quot;,&lt;br /&gt;
					  relationshipTag: &amp;quot;hasDeliveryMethodLink&amp;quot;&lt;br /&gt;
					},&lt;br /&gt;
					relationshipDirection: &amp;quot;to&amp;quot;,&lt;br /&gt;
				  },&lt;br /&gt;
				  parentLinkStep: &amp;quot;uuid_linkStepC_A&amp;quot;,&lt;br /&gt;
				  childLinkStep: &amp;quot;uuid_linkStepC_C&amp;quot;,&lt;br /&gt;
				},&lt;br /&gt;
				uuid_linkStepC_C: { //one step: SellOfferPlan &amp;gt; DeliveryMethodLink&lt;br /&gt;
				  link: {&lt;br /&gt;
					objType: {&lt;br /&gt;
					  serviceTag: &amp;quot;SellOfferPlan&amp;quot;,&lt;br /&gt;
					  objectType: &amp;quot;DeliveryMethodLink&amp;quot;&lt;br /&gt;
					},&lt;br /&gt;
					relType: {&lt;br /&gt;
					  serviceTag: &amp;quot;SellOfferPlan&amp;quot;,&lt;br /&gt;
					  relationshipTag: &amp;quot;hasDeliveryMethodLink&amp;quot;&lt;br /&gt;
					},&lt;br /&gt;
					relationshipDirection: &amp;quot;to&amp;quot;,&lt;br /&gt;
				  },&lt;br /&gt;
				  parentLinkStep: &amp;quot;uuid_linkStepC_B&amp;quot;,&lt;br /&gt;
				  childLinkStep: &amp;quot;uuid_linkStepC_E&amp;quot;,&lt;br /&gt;
				},&lt;br /&gt;
				uuid_linkStepC_D: { //one step: DeliveryMethodLink &amp;gt; DeliveryMethod&lt;br /&gt;
				  link: {&lt;br /&gt;
					objType: {&lt;br /&gt;
					  serviceTag: &amp;quot;DeliveryMethodManager&amp;quot;,&lt;br /&gt;
					  objectType: &amp;quot;DeliveryMethod&amp;quot;&lt;br /&gt;
					},&lt;br /&gt;
					relType: {&lt;br /&gt;
					  serviceTag: &amp;quot;SellOfferPlan&amp;quot;,&lt;br /&gt;
					  relationshipTag: &amp;quot;isDeliveryMethod&amp;quot;&lt;br /&gt;
					},&lt;br /&gt;
					relationshipDirection: &amp;quot;to&amp;quot;,&lt;br /&gt;
				  },&lt;br /&gt;
				  parentLinkStep: &amp;quot;uuid_linkStepC_C&amp;quot;,&lt;br /&gt;
				  childLinkStep: &amp;quot;uuid_linkStepC_E&amp;quot;,&lt;br /&gt;
				  filterElementUnitIds: [&amp;quot;uuid_filterElementUnitB&amp;quot;]&lt;br /&gt;
				},&lt;br /&gt;
			}&lt;br /&gt;
		},&lt;br /&gt;
	},&lt;br /&gt;
	&lt;br /&gt;
	requiredDataFields: { //* fields to create requiredData including linkPaths&lt;br /&gt;
		//* no link, field in main objType&lt;br /&gt;
		uuid_requiredDataFieldA: {&lt;br /&gt;
			fieldname: &amp;quot;&amp;quot;&lt;br /&gt;
		},&lt;br /&gt;
		&lt;br /&gt;
		//* has link&lt;br /&gt;
		uuid_requiredDataFieldB: {&lt;br /&gt;
			linkStepObject: &amp;quot;uuid_LinkStepObjectD&amp;quot;,&lt;br /&gt;
			complexFilterCombinations: [&amp;quot;uuid_complexFilterCombinationA&amp;quot;],&lt;br /&gt;
		}&lt;br /&gt;
	&lt;br /&gt;
	},&lt;br /&gt;
	complexFilterCombinations:{&lt;br /&gt;
		uuid_complexFilterCombinationA: {&lt;br /&gt;
			linkStepObjectA: &amp;quot;uuid_LinkStepObjectB&amp;quot;,&lt;br /&gt;
			initialIdentifiers: { // tableConfig sets &amp;quot;defaultInitialIdentifiers, tableOutput finds from 1. filter objects set to overwrite it, 2. prop sent (eg from sitePage), 3. defaultInitialIdentifiers&lt;br /&gt;
				&amp;quot;locationNodeId&amp;quot;: &amp;quot;xxxx&amp;quot;&lt;br /&gt;
			},&lt;br /&gt;
		},&lt;br /&gt;
	},&lt;br /&gt;
	perParentCombinations:{&lt;br /&gt;
		uuid_perParentCombinationA: {&lt;br /&gt;
			linkStepObjectA: &amp;quot;uuid_LinkStepObjectC&amp;quot;,&lt;br /&gt;
		},&lt;br /&gt;
	},&lt;br /&gt;
	requiredDataLinkStepObjects: {&lt;br /&gt;
		uuid_LinkStepObjectD: { // requiredDataFields for finding max orderTotal&lt;br /&gt;
			initialObjType: { //* main objType&lt;br /&gt;
				serviceTag: &amp;quot;ProductManager&amp;quot;,&lt;br /&gt;
				objectType: &amp;quot;Product&amp;quot;&lt;br /&gt;
			},&lt;br /&gt;
			initialLinkStep: &amp;quot;uuid_linkStepD_A&amp;quot;,&lt;br /&gt;
			linkSteps: {&lt;br /&gt;
				uuid_linkStepD_A: { //one step: Product &amp;gt; SellOffer&lt;br /&gt;
				  link: {&lt;br /&gt;
					objType: {&lt;br /&gt;
					  serviceTag: &amp;quot;SellOfferManager&amp;quot;,&lt;br /&gt;
					  objectType: &amp;quot;SellOffer&amp;quot;&lt;br /&gt;
					},&lt;br /&gt;
					relType: {&lt;br /&gt;
					  serviceTag: &amp;quot;ProductManager&amp;quot;,&lt;br /&gt;
					  relationshipTag: &amp;quot;hasSellOffer&amp;quot;&lt;br /&gt;
					},&lt;br /&gt;
					relationshipDirection: &amp;quot;to&amp;quot;,&lt;br /&gt;
				  },&lt;br /&gt;
				  childLinkStep: &amp;quot;uuid_linkStepD_B&amp;quot;,&lt;br /&gt;
				},&lt;br /&gt;
				uuid_linkStepD_B: { //one step: SellOffer &amp;gt; OrderPrice&lt;br /&gt;
					link: {&lt;br /&gt;
						objType: {&lt;br /&gt;
						  serviceTag: &amp;quot;OrderPrice&amp;quot;,&lt;br /&gt;
						  objectType: &amp;quot;OrderPrice&amp;quot;&lt;br /&gt;
						},&lt;br /&gt;
						relType: {&lt;br /&gt;
						  serviceTag: &amp;quot;sellOfferStandard&amp;quot;,&lt;br /&gt;
						  relationshipTag: &amp;quot;hasOrderPrice&amp;quot;&lt;br /&gt;
						},&lt;br /&gt;
						relationshipDirection: &amp;quot;to&amp;quot;,&lt;br /&gt;
					},&lt;br /&gt;
					parentLinkStep: &amp;quot;uuid_linkStepD_A&amp;quot;,&lt;br /&gt;
					childLinkStep: &amp;quot;uuid_linkStepD_C&amp;quot;,&lt;br /&gt;
					// tableConfig sets &amp;quot;defaultRequestPropertyValues&amp;quot; for each, tableOutput finds from 1. filter objects set to overwrite it, 2. prop sent (eg from sitePage), 3. defaultRequestPropertyValues&lt;br /&gt;
					requestProperties:{&lt;br /&gt;
						tag_deliverTo: {&lt;br /&gt;
							valueSource: &amp;quot;complexFilterCombination&amp;quot;,&lt;br /&gt;
							complexFilterCombinationId: &amp;quot;uuid_complexFilterCombinationA&amp;quot;,&lt;br /&gt;
							identifierFieldName: &amp;quot;locationNodeId&amp;quot;&lt;br /&gt;
						},&lt;br /&gt;
						tag_sellOfferPlanDeliveryMethodLink: {&lt;br /&gt;
							valueSource: &amp;quot;perParentCombination&amp;quot;,&lt;br /&gt;
							perParentCombinationId: &amp;quot;uuid_perParentCombinationA&amp;quot;,&lt;br /&gt;
							identifierFieldName: &amp;quot;sellOfferPlanDeliveryMethodLinkId&amp;quot;&lt;br /&gt;
						},&lt;br /&gt;
					}&lt;br /&gt;
				},&lt;br /&gt;
				uuid_linkStepA_C: { //final OrderPrice step&lt;br /&gt;
					parentLinkStep: &amp;quot;uuid_linkStepD_B&amp;quot;,&lt;br /&gt;
					filterElementUnitIds: [&amp;quot;uuid_filterElementUnitA&amp;quot;]&lt;br /&gt;
					aggregate: &amp;quot;max&amp;quot;,&lt;br /&gt;
					sortFields: &amp;quot;uuid_sortFieldA&amp;quot;,&lt;br /&gt;
					// ... other linkPath.linkStep settings here&lt;br /&gt;
				}&lt;br /&gt;
			}&lt;br /&gt;
		}	&lt;br /&gt;
	},&lt;br /&gt;
	sortFields:{&lt;br /&gt;
		uuid_sortFieldA: {&lt;br /&gt;
			// ..&lt;br /&gt;
		}&lt;br /&gt;
	}&lt;br /&gt;
&lt;br /&gt;
	filterElementUnits: {&lt;br /&gt;
		uuid_filterElementUnitA:{&lt;br /&gt;
			fieldname: &amp;quot;orderTotal&amp;quot;,&lt;br /&gt;
			comparison: &amp;quot;greaterThan&amp;quot;,&lt;br /&gt;
			value: &amp;quot;xxx&amp;quot;, // tableConfig sets &amp;quot;defaultFilterElementUnitValue&amp;quot;, tableOutput finds from 1. filter objects set to overwrite it, 2. prop sent (eg from sitePage), 3. defaultFilterElementUnitValue&lt;br /&gt;
		},&lt;br /&gt;
		uuid_filterElementUnitB:{&lt;br /&gt;
			fieldname: &amp;quot;deliveryMethodId&amp;quot;,&lt;br /&gt;
			comparison: &amp;quot;equals&amp;quot;,&lt;br /&gt;
			value: &amp;quot;xxx&amp;quot;,&lt;br /&gt;
		},&lt;br /&gt;
        uuid_filterElementUnitD: {&lt;br /&gt;
         	fieldname: &amp;quot;productId&amp;quot;,&lt;br /&gt;
			comparison: &amp;quot;equals&amp;quot;,&lt;br /&gt;
			value: &amp;quot;xxx&amp;quot;,&lt;br /&gt;
       }&lt;br /&gt;
	}&lt;br /&gt;
&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[Category:Working documents| 2025-07-01]]&lt;br /&gt;
[[Category:Working documents - Search Results| 2025-07-01]]&lt;/div&gt;</summary>
		<author><name>Rut</name></author>
	</entry>
	<entry>
		<id>https://izara.io/wiki/index.php?title=2025-06-12_-_frontend_page_template_error&amp;diff=3286</id>
		<title>2025-06-12 - frontend page template error</title>
		<link rel="alternate" type="text/html" href="https://izara.io/wiki/index.php?title=2025-06-12_-_frontend_page_template_error&amp;diff=3286"/>
		<updated>2025-06-12T10:55:13Z</updated>

		<summary type="html">&lt;p&gt;Rut: Created page with &amp;quot;==Error== &amp;lt;syntaxhighlight&amp;gt; Cannot use import statement outside a module SyntaxError: Cannot use import statement outside a module  application '@izaraFrontends/payment' died in status LOADING_SOURCE_CODE: Cannot use import statement outside a module SyntaxError: Cannot use import statement outside a module &amp;lt;/syntaxhighlight&amp;gt;  ==fix==  &amp;lt;syntaxhighlight lang=&amp;quot;JavaScript&amp;quot;&amp;gt; const { merge } = require(&amp;quot;webpack-merge&amp;quot;); const singleSpaDefaults = require(&amp;quot;webpack-config-single-...&amp;quot;&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;==Error==&lt;br /&gt;
&amp;lt;syntaxhighlight&amp;gt;&lt;br /&gt;
Cannot use import statement outside a module&lt;br /&gt;
SyntaxError: Cannot use import statement outside a module&lt;br /&gt;
&lt;br /&gt;
application '@izaraFrontends/payment' died in status LOADING_SOURCE_CODE: Cannot use import statement outside a module&lt;br /&gt;
SyntaxError: Cannot use import statement outside a module&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==fix==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;JavaScript&amp;quot;&amp;gt;&lt;br /&gt;
const { merge } = require(&amp;quot;webpack-merge&amp;quot;);&lt;br /&gt;
const singleSpaDefaults = require(&amp;quot;webpack-config-single-spa-react&amp;quot;);&lt;br /&gt;
&lt;br /&gt;
module.exports = (webpackConfigEnv, argv) =&amp;gt; {&lt;br /&gt;
  const defaultConfig = singleSpaDefaults({&lt;br /&gt;
    orgName: &amp;quot;izaraFrontends&amp;quot;,// need change to your project organization name&lt;br /&gt;
    projectName: &amp;quot;payment&amp;quot;, // need change to your project name&lt;br /&gt;
    webpackConfigEnv,&lt;br /&gt;
    argv,&lt;br /&gt;
    outputSystemJS: true, // add code edit error&lt;br /&gt;
  });&lt;br /&gt;
&lt;br /&gt;
  return merge(defaultConfig, {&lt;br /&gt;
    // modify the webpack config however you'd like to by adding to this object&lt;br /&gt;
  });&lt;br /&gt;
};&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
[[Category:Working documents| 2025-06-12]]&lt;/div&gt;</summary>
		<author><name>Rut</name></author>
	</entry>
	<entry>
		<id>https://izara.io/wiki/index.php?title=2025-04-18_-_single_spa&amp;diff=3285</id>
		<title>2025-04-18 - single spa</title>
		<link rel="alternate" type="text/html" href="https://izara.io/wiki/index.php?title=2025-04-18_-_single_spa&amp;diff=3285"/>
		<updated>2025-06-12T10:48:41Z</updated>

		<summary type="html">&lt;p&gt;Rut: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;=Install=&lt;br /&gt;
&lt;br /&gt;
==Global Install==&lt;br /&gt;
*install in shell only one time when never install single-spa in Local computer before. &lt;br /&gt;
&lt;br /&gt;
   npm install -g create-single-spa &lt;br /&gt;
&lt;br /&gt;
==Install single-spa project==&lt;br /&gt;
   npx create-single-spa &lt;br /&gt;
&lt;br /&gt;
*npx create-single-spa@latest //use when install old version when don't update version  &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Update Install==&lt;br /&gt;
test choose &lt;br /&gt;
*npm update -g create-single-spa&lt;br /&gt;
*sudo npm install -g create-single-spa@latest&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===Organization name=== &lt;br /&gt;
*izaraFrontends &lt;br /&gt;
&lt;br /&gt;
===Project name=== &lt;br /&gt;
*&amp;lt;your repository name&amp;gt; eg. table-config &lt;br /&gt;
&lt;br /&gt;
=Open port &amp;amp; Run script =&lt;br /&gt;
*start root-config&lt;br /&gt;
   npm start &lt;br /&gt;
*start other micro-frontend&lt;br /&gt;
   npm start -- --port 9001(set port) &lt;br /&gt;
&lt;br /&gt;
=Root-config=&lt;br /&gt;
==import explain==&lt;br /&gt;
===key===&lt;br /&gt;
* Application name &lt;br /&gt;
* format Organization_name/Project_name eg. @izaraFrontends/root-config&lt;br /&gt;
===value===&lt;br /&gt;
* sorce of microfrontend file&lt;br /&gt;
* example path of sorce izara-frontend-core-user-details_pack/src/izaraFrontends-user-detail.js&lt;br /&gt;
*example imports&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;JavaScript&amp;quot;&amp;gt;&lt;br /&gt;
 &amp;quot;imports&amp;quot;: {&lt;br /&gt;
        &amp;quot;@izaraFrontends/root-config&amp;quot;: &amp;quot;//localhost:9000/izaraFrontends-root-config.js&amp;quot;,&lt;br /&gt;
        &amp;quot;@izaraFrontends/user-detail&amp;quot;: &amp;quot;//localhost:9002/izaraFrontends-user-detail.js&amp;quot;,&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
==registerApplication==&lt;br /&gt;
===izaraFrontends-root-config.js===&lt;br /&gt;
*all aplication register here don't need to change anything&lt;br /&gt;
===index.ejs===&lt;br /&gt;
*create route of aplication here&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;html&amp;quot;&amp;gt;&lt;br /&gt;
     &amp;lt;route path=&amp;quot;login&amp;quot;&amp;gt;&lt;br /&gt;
        &amp;lt;application name=&amp;quot;@izaraFrontends/authentication&amp;quot;&amp;gt;&amp;lt;/application&amp;gt;&lt;br /&gt;
      &amp;lt;/route&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Category:Working documents| 2025-04-18]]&lt;br /&gt;
[[Category:Working documents - Creating 2025-04-18 - single spa| 2025-04-18]]&lt;/div&gt;</summary>
		<author><name>Rut</name></author>
	</entry>
	<entry>
		<id>https://izara.io/wiki/index.php?title=2025-06-10_-_Frontend_Variable_Object_Standard&amp;diff=3284</id>
		<title>2025-06-10 - Frontend Variable Object Standard</title>
		<link rel="alternate" type="text/html" href="https://izara.io/wiki/index.php?title=2025-06-10_-_Frontend_Variable_Object_Standard&amp;diff=3284"/>
		<updated>2025-06-10T10:34:04Z</updated>

		<summary type="html">&lt;p&gt;Rut: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;==initTableConfig==&lt;br /&gt;
&lt;br /&gt;
export const NAME = {&lt;br /&gt;
  USER_NAME: &amp;quot;tableIdB&amp;quot;,&lt;br /&gt;
  SLICE_NAME: &amp;quot;configReducer&amp;quot;,&lt;br /&gt;
};&lt;br /&gt;
&lt;br /&gt;
==tableConfig==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;JavaScript&amp;quot;&amp;gt;&lt;br /&gt;
 let objConfig = useSelector((state) =&amp;gt; state[NAME.SLICE_NAME][USER_NAME]); //config edit&lt;br /&gt;
&lt;br /&gt;
 let objOutputTableConfig = useSelector((state) =&amp;gt; state[NAME.SLICE_NAME][USER_NAME]); //output action ui visible edit&lt;br /&gt;
&lt;br /&gt;
 let keySection&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
if position in Element = objConfigElement&lt;br /&gt;
&lt;br /&gt;
==ElementComponent==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;JavaScript&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
const getObjectSchema = sharedSchema.getObjectSchema;&lt;br /&gt;
&lt;br /&gt;
    const elementTypeHeaderFooter = [&lt;br /&gt;
      &amp;quot;sort&amp;quot;,&lt;br /&gt;
      &amp;quot;freetext&amp;quot;,&lt;br /&gt;
      &amp;quot;numberOfRows&amp;quot;,&lt;br /&gt;
      &amp;quot;filterDatafield&amp;quot;,&lt;br /&gt;
      &amp;quot;select&amp;quot;,&lt;br /&gt;
      &amp;quot;redio&amp;quot;,&lt;br /&gt;
      &amp;quot;checkbox&amp;quot;,&lt;br /&gt;
      &amp;quot;datafield&amp;quot;,&lt;br /&gt;
      &amp;quot;totalDatafield&amp;quot;,&lt;br /&gt;
      &amp;quot;pageNumbers&amp;quot;,&lt;br /&gt;
      &amp;quot;submit&amp;quot;,&lt;br /&gt;
      &amp;quot;reset&amp;quot;,&lt;br /&gt;
      &amp;quot;bulkaction&amp;quot;,&lt;br /&gt;
    ];&lt;br /&gt;
    const elementTypeRecords = [&amp;quot;datafield&amp;quot;, &amp;quot;freetext&amp;quot;, &amp;quot;bulkaction&amp;quot;];&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[Category:Working documents| 2025-06-10]]&lt;/div&gt;</summary>
		<author><name>Rut</name></author>
	</entry>
	<entry>
		<id>https://izara.io/wiki/index.php?title=2025-06-10_-_Frontend_Variable_Object_Standard&amp;diff=3283</id>
		<title>2025-06-10 - Frontend Variable Object Standard</title>
		<link rel="alternate" type="text/html" href="https://izara.io/wiki/index.php?title=2025-06-10_-_Frontend_Variable_Object_Standard&amp;diff=3283"/>
		<updated>2025-06-10T10:33:29Z</updated>

		<summary type="html">&lt;p&gt;Rut: Created page with &amp;quot;==initTableConfig==  export const NAME = {   USER_NAME: &amp;quot;tableIdB&amp;quot;,   SLICE_NAME: &amp;quot;configReducer&amp;quot;, };  ==tableConfig==  &amp;lt;syntaxhighlight lang=&amp;quot;JavaScript&amp;quot;&amp;gt;  let objConfig = useSelector((state) =&amp;gt; state[NAME.SLICE_NAME][USER_NAME]); //config edit   let objOutputTableConfig = useSelector((state) =&amp;gt; state[NAME.SLICE_NAME][USER_NAME]); //output action ui visible edit   let keySection   &amp;lt;/syntaxhighlight&amp;gt;  if position in Element = objConfigElement  ==ElementComponent==  &amp;lt;synt...&amp;quot;&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;==initTableConfig==&lt;br /&gt;
&lt;br /&gt;
export const NAME = {&lt;br /&gt;
  USER_NAME: &amp;quot;tableIdB&amp;quot;,&lt;br /&gt;
  SLICE_NAME: &amp;quot;configReducer&amp;quot;,&lt;br /&gt;
};&lt;br /&gt;
&lt;br /&gt;
==tableConfig==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;JavaScript&amp;quot;&amp;gt;&lt;br /&gt;
 let objConfig = useSelector((state) =&amp;gt; state[NAME.SLICE_NAME][USER_NAME]); //config edit&lt;br /&gt;
&lt;br /&gt;
 let objOutputTableConfig = useSelector((state) =&amp;gt; state[NAME.SLICE_NAME][USER_NAME]); //output action ui visible edit&lt;br /&gt;
&lt;br /&gt;
 let keySection&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
if position in Element = objConfigElement&lt;br /&gt;
&lt;br /&gt;
==ElementComponent==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;JavaScript&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
const getObjectSchema = sharedSchema.getObjectSchema;&lt;br /&gt;
&lt;br /&gt;
    const elementTypeHeaderFooter = [&lt;br /&gt;
      &amp;quot;sort&amp;quot;,&lt;br /&gt;
      &amp;quot;freetext&amp;quot;,&lt;br /&gt;
      &amp;quot;numberOfRows&amp;quot;,&lt;br /&gt;
      &amp;quot;filterDatafield&amp;quot;,&lt;br /&gt;
      &amp;quot;select&amp;quot;,&lt;br /&gt;
      &amp;quot;redio&amp;quot;,&lt;br /&gt;
      &amp;quot;checkbox&amp;quot;,&lt;br /&gt;
      &amp;quot;datafield&amp;quot;,&lt;br /&gt;
      &amp;quot;totalDatafield&amp;quot;,&lt;br /&gt;
      &amp;quot;pageNumbers&amp;quot;,&lt;br /&gt;
      &amp;quot;submit&amp;quot;,&lt;br /&gt;
      &amp;quot;reset&amp;quot;,&lt;br /&gt;
      &amp;quot;bulkaction&amp;quot;,&lt;br /&gt;
    ];&lt;br /&gt;
    const elementTypeRecords = [&amp;quot;datafield&amp;quot;, &amp;quot;freetext&amp;quot;, &amp;quot;bulkaction&amp;quot;];&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;/syntaxhighlight&amp;gt;&lt;/div&gt;</summary>
		<author><name>Rut</name></author>
	</entry>
</feed>