Hello Community,

I am currently facing an issue with a model page that contains two lookup fields: one for contact and the other for email. My goal is to allow the user to select an email address associated with the selected contact, not just the primary email, but any email linked to that contact. To achieve this, I am using dynamic filtering for ContactCommunication to filter by the current contact and email communication type.

I’ve implemented this logic within the crt.LoadDataRequest handler because the email field is a simple dropdown and does not open a separate selection page.

The problem: 
When a contact is selected, I refresh the email list data source as expected. However, the email list is not properly reloading after a contact is deselected and reselected. In this case, the email filters do not update correctly. The issue is that the email list only reloads and applies the correct filters when I manually reselect the email field.

This behavior is causing a problem where the email dropdown is not correctly filtered based on the newly selected contact. Below is the code I am using for the handler:
 

handlers: /**SCHEMA_HANDLERS*/[
 {
   request: "crt.LoadDataRequest",
   handler: async (request, next) => {
     const emailDataSource = "UsrEntity_004572bDS_UsrEmailAddre_gzbqqxc_List_DS";
     const contactDataSource = "UsrEntity_004572bDS_UsrContact_7esmp6a_List_DS";

     if (request.dataSourceName === emailDataSource) {
       const lookupValue = await request.$context.UsrEntity_004572bDS_UsrContact_7esmp6a;
       console.log("Lookup Value:", lookupValue);

       if (lookupValue) {
         console.log("Filter Hit");
         const filter = new sdk.FilterGroup();
         filter.addSchemaColumnFilterWithParameter(sdk.ComparisonType.Equal, "Contact", lookupValue.value);
         filter.addSchemaColumnFilterWithParameter(sdk.ComparisonType.Equal, "CommunicationType", "EE1C85C3-CFCB-DF11-9B2A-001D60E938C6");

         const newFilter = Object.assign({}, filter);
         newFilter.items = filter.items;
         console.log("Filter created");
         request.parameters.push({
           type: "filter",
           value: newFilter
         });
         console.log("Filter added to request");
       } else {
         console.log("Empty Lookup");
         // request.$context.UsrEntity_004572bDS_UsrEmailAddre_gzbqqxc = null;
         // request.$context.UsrEntity_004572bDS_UsrEmailAddre_gzbqqxc_List_DS = null;
       }
     }

     if (request.dataSourceName === contactDataSource) {
       console.log("Contact Selected, reloading email address list");
       // request.$context.UsrEntity_004572bDS_UsrEmailAddre_gzbqqxc = null;

       await request.$context.executeRequest({
         type: "crt.LoadDataRequest",
         $context: request.$context,
         config: { loadType: "reload", useLastLoadParameters: true },
         dataSourceName: emailDataSource
       });

       console.log("Email list reloaded successfully!");
     }

     return await next?.handle(request);
   }
 }
]/**SCHEMA_HANDLERS*/;
 

I would greatly appreciate it if you could look into this issue and suggest a solution.

Thank you!

Like 1

Like

1 comments

It is hard to tell what the issue is based on the code alone, in this situation, it would be better to run a proper debug to see what exactly went wrong. But, based on your description I can assume that there is something wrong with a refresh. Not with its code but rather with a place it is called. Try to use different approaches to it.

Show all comments

Hello,

 

I have a custom button on Contact Section. This button allows the user to set up the Owner to multiple Contacts when selected.

 

The problem appears when I "Select all" the button turns gray and cannot be pressed. If I choose "Select multiple" and check the same records (contacts) then the button works.

 

 

In this example there are a lot of records, but I've tried the same thing with only 20 contacts that are all loaded in the page (scrolled until the last one) and it does the same. 

Like 0

Like

2 comments

We would need to see the details for the custom button to know why this behavior happens. What is the enabled property of the button bound to?

Hello Diana,

I've found an informative article according to your request for a comfortable understanding of the needed steps:
1) Please, find the added function with the same functionality as "getSectionActions"  from the article (paragraph 4).
2) Add new property to the object:
    "IsEnabledForSelectedAll": true

As a result, the code will look like:

getSectionActions: function() {
                    var actionMenuItems = this.callParent(arguments);
                    actionMenuItems.addItem(this.getButtonMenuItem({
                        "Caption": {bindTo: "Resources.Strings.MultiplyChangeAction"},
                        "Click": {bindTo: "showLoanInfo"},
                        "Enabled": {bindTo: "isCustomActionEnabled"},
                        "IsEnabledForSelectedAll": true
                    }));
                    return actionMenuItems;
                }                  
Show all comments

Hi Team,
I have implemented a multi-select lookup field using the guidelines from this article:
https://customerfx.com/article/invoking-a-multi-select-lookup-dialog-on-a-creatio-freedom-ui-page/
Now, I have a requirement to filter the multi-select lookup based on another lookup field. I tried adding a filter for the entity schema name, but it is not being reflected. Is there a way to filter the multi-select lookup?



Like 1

Like

1 comments
Best reply

You can add the filterConfig to the request. Something like this, first create the filter(s): 

const filter = new sdk.FilterGroup();
await filter.addSchemaColumnFilterWithParameter(sdk.ComparisonType.Equal, "UsrColumn", "Value");
 
// workaround for filters required in Creatio 8.1.0 and older
const newFilter = Object.assign({}, filter);
newFilter.items = filter.items;

Then add them in the request, something like this: 

entitySchemaType: "UsrMyLookupObject",
filtersConfig: {
	filterAttributes: [{
		name: "MyFilter",
		loadOnChange: false
	}],
	attributesConfig: {
		MyFilter: {
			value: newFilter
		}
	}
},

See additional examples here: https://community.creatio.com/questions/filter-crtopenlookuppagerequest

Ryan

You can add the filterConfig to the request. Something like this, first create the filter(s): 

const filter = new sdk.FilterGroup();
await filter.addSchemaColumnFilterWithParameter(sdk.ComparisonType.Equal, "UsrColumn", "Value");
 
// workaround for filters required in Creatio 8.1.0 and older
const newFilter = Object.assign({}, filter);
newFilter.items = filter.items;

Then add them in the request, something like this: 

entitySchemaType: "UsrMyLookupObject",
filtersConfig: {
	filterAttributes: [{
		name: "MyFilter",
		loadOnChange: false
	}],
	attributesConfig: {
		MyFilter: {
			value: newFilter
		}
	}
},

See additional examples here: https://community.creatio.com/questions/filter-crtopenlookuppagerequest

Ryan

Show all comments

Hi team,



I created a multi select lookup page for a detail in freedomUI using "crt.OpenLookupPageRequest" functionality. I wanted to either remove already selected records in the popup window or show them as checked if they are added into the detail. 

Source for multiselect page : https://customerfx.com/article/invoking-a-multi-select-lookup-dialog-on-a-creatio-freedom-ui-page/

Can anyone help me with this issue?



Expected functionality:





Thanks in advance

Goparna Nasina

Like 1

Like

1 comments

Hello!

You can use the filtersConfig parameter to filter records, as mentioned in the article.

Or you can use the option selectionState to predefine selected rows, which will be pre-selected when the lookup page is opened.

 

Example of selected records:

{
	type: "crt.OpenLookupPageRequest",
	...
	selectionState: {
		type: 'specific',
		selected: [
			'00000000-0000-0000-0000-000000000000',
			'11111111-1111-1111-1111-111111111111',
		]
	}
}

 

An example of pre-filtering records:

{
	type: "crt.OpenLookupPageRequest",
	...
	filtersConfig: {
		filterAttributes: [
			{
				name: 'MyFilter',
				loadOnChange: false
			}
		],
		attributesConfig: {
			MyFilter: {
				value: {
					"items": {
						"29e16d42-36f1-4e04-9029-4321cbb2494d": {
							"filterType": 1,
							"comparisonType": 11,
							"isEnabled": true,
							"trimDateTimeParameterToDate": false,
							"leftExpression": {
								"expressionType": 0,
								"columnPath": "Name"
							},
							"isAggregative": false,
							"dataValueType": 1,
							"rightExpression": {
								"expressionType": 2,
								"parameter": {
									"dataValueType": 1,
									"value": "Super"
								}
							}
						}
					},
					"logicalOperation": 0,
					"isEnabled": true,
					"filterType": 6,
					"rootSchemaName": "Contact"
				}
			}
		}
	}
}

 

Show all comments

Question on OpenLookupPageRequest. In an edit scenario, could you pass the already selected options so that they appear already selected in the lookup list?

 

Thanks in advance,

Ignacio.

Like 1

Like

0 comments
Show all comments

Hi Community,

 

I want to create a Multiple Selection

How could I do that?

 

Thank you!

Like 0

Like

6 comments

Hello,

 

The possibility to use multi-select lookups in Freedom UI is registered as a feedback and will be available in future releases of Creatio’s platform.



At this moment, you can check the materials for Classic UI:

Marketplace solution:

https://marketplace.creatio.com/app/multi-select-text-field-setup-creatio

And a link to the community post where this issue has already been discussed, perhaps it will be helpful to you:

https://community.creatio.com/questions/multiselect-lookup

 

Best regards,

Anastasiia

Hello,

I've written up some steps to do this, however, it is only possible in version 8.1.

https://customerfx.com/article/invoking-a-multi-select-lookup-dialog-on…

In the near future I will be releasing a Freedom UI replacement for my marketplace addon linked previously by Anastasiia (Multi-select text field setup for Creatio)

Ryan

Ryan Farley,

 

Thank you for this! Could you also please confirm if adding detail records through multiselect is possible in 8.1? 

Ref: 

https://academy.creatio.com/documents/technic-sdk/7-11/adding-multiple-…

Shivani Lakshman,

Yes, however, for now you have to handle the adding of the records in code. The article I shared shows how to invoke the lookup in multi-select mode. It uses the results to flatten out to text, however, you could just use the results and do an insert for each into the list/detail. See here for how to do the insert: 

https://customerfx.com/article/inserting-a-record-from-client-side-code…

Ryan

Shivani Lakshman,

I wrote up the details for adding to a list from a multi-select lookup as a new article here: https://customerfx.com/article/adding-to-a-list-from-a-lookup-on-a-free…

Ryan

Ryan Farley,

Thank you! This will really help!

Show all comments

Hello. I'm working with the Multiple choice field setup for Creatio (https://marketplace.creatio.com/app/multiple-choice-field-setup-creatio) add-on but I'm not getting it to save the selected values.

I've followed the guide here: https://marketplace.creatio.com/sites/marketplace/files/app-guide/Multi…

I get the values correctly on the page, and they are selectable. But nothing is saved to the database when i Save the record

Object: UsrContactLabels

Lookup: UsrLabels

Link-object: UsrContact

 

 

Like 0

Like

10 comments

Hi Vasili,

Could you please give us more details about your issue?



Specifically, please describe your object model based on the following template:

The example implies the following conditions:

1. Multiple choice field was added to the Activity page.

2. The method uses the ActivityParticipant object linked to the Activity object.

3. The Contact object is a source object for the Multiple choice field.

 

As such, the structure comprises three main objects:

• Activity: main object

• ActivityParticipant: decoupling object

• Contact: source object for the Multiple choice field

 

Also, please send us the list of columns in the decoupling object, your Creatio version, product, and DBMS

Yevhen Vorobiov,



Thank you for your response,

DBMS is a MSSQL Server 19 ,

Creatio Version is 8.0.1,

Product is bpmonline bank customer journey on-site,

 

This is a  Piot Table, connecting contact and labels objects.

We are expecting that, all label information for all contacts will be saved in this Object "UsrContactLabels", after adding labels and saving the contact page, when we refresh the page it does not save it in object and after refreshing this field is empty.

 

 

We added multiselect element on Contact Page:

 

 

MultiSelect values are Labels from Lookup (sceen below):

• Activity: main object - For us is "UsrContact" (all our contacts)

• ActivityParticipant: decoupling object - For us is "UsrContactLabels" (Piot Table joining Contacts and Labels"Lookup")

• Contact: source object for the Multiple choice field - For us is "UsrLabels" (Labels Lookup)

Hi Vasili,

 

Thank you for the detailed description.

I tested your case on the same Creatio version, product, and DBMS. I created the same object model and was unable to reproduce the issue on my end.

Could you please send us the full JavaScript page code?

Also, please reproduce the issue with the browser console open. Do you get any errors in the console?

Hi Yevhen Vorobiov,

Thank you for your response.

I did not get any errors in console after selecting MultiSelect value and saving Contact Page.

Here we choose your Labels in MultiSelect without saving Contact Page.

Here we Saved Contact Page and There are no Errors in Console.

    attributes: {

            "UsrAutomaticLabel": {

                "dataValueType": Terrasoft.DataValueType.LOOKUP

                },

   },

        mixins: {

        MultiChoiceMixin: "Terrasoft.MultiChoiceMixin"

        },

methods: {

    getMultiChoiceEntitiesConfig: function () {

                const items = {

                        UsrAutomaticLabel: {

                            mainEntitySchemaName: "UsrContactLabels",

                            mainColumnName: "UsrContact",

                            relatedEntitySchemaName: "UsrAutomaticLabels",

                            relatedColumnName: "UsrLabels"

                            }

                        };

                        return items;

                        

                },

},

diff:[

        {

                "operation": "insert",

                "name": "UsrAutomaticLabel67a256f2-7c41-4c17-b736-ad94b31105ec",

                "values": {

                    "layout": {

                        "colSpan": 12,

                        "rowSpan": 1,

                        "column": 0,

                        "row": 0,

                        "layoutName": "GeneralInfoTabGridLayout9426c6e2"

                    },

                    "className": "Terrasoft.MultiChoiceCombobox",

                    "dataValueType": 11,

                    "bindTo": "UsrAutomaticLabel",

                    "enabled": true,

                    "contentType": 5

                },

                "parentName": "GeneralInfoTabGridLayout9426c6e2",

                "propertyName": "items",

                "index": 0

            },

 

 

]

Vasili Piruzashvili,

Hi Vasili,

 

Your source code has to include the following method:

init: function() {

                this.callParent(arguments);

                this.mixins.MultiChoiceMixin.init.call(this, arguments);

 

In other words, the source code should look as follows: 

methods: {
 
			init: function() {
				this.callParent(arguments);
				this.mixins.MultiChoiceMixin.init.call(this, arguments);
		},
 
    getMultiChoiceEntitiesConfig: function () {
                const items = {
                        UsrAutomaticLabel: {
                            mainEntitySchemaName: "UsrContactLabels",
                            mainColumnName: "UsrContact",
                            relatedEntitySchemaName: "UsrAutomaticLabels",
                            relatedColumnName: "UsrLabels"
                            }
                        };
                        return items;
 
                },
 
},



If the issue persists, please send me the complete source code of this page as text.

Hi Yevhen,

 

Sending source code:

define("ContactPageV2", ["MultiChoiceMixin"], function(MultiChoiceMixin) {
	return {
		entitySchemaName: "Contact",
		attributes: {
			"UsrAutomaticLabel": {
				"dataValueType": Terrasoft.DataValueType.LOOKUP
				},
		},
		mixins: {
		MultiChoiceMixin: "Terrasoft.MultiChoiceMixin"
		},
		modules: /**SCHEMA_MODULES*/{}/**SCHEMA_MODULES*/,
		details: /**SCHEMA_DETAILS*/{}/**SCHEMA_DETAILS*/,
		businessRules: /**SCHEMA_BUSINESS_RULES*/{}/**SCHEMA_BUSINESS_RULES*/,
		methods: {
			onEntityInitialized: function() {
				window._contactObject = this;				
				this.callParent(arguments);
				this.mixins.MultiChoiceMixin.init.call(this, arguments);
 
			},
			getMultiChoiceEntitiesConfig: function () {
				const items = {
						UsrAutomaticLabel: {
							mainEntitySchemaName: "UsrContactLabels",
							mainColumnName: "UsrContact",
							relatedEntitySchemaName: "UsrAutomaticLabels",
							relatedColumnName: "UsrLabels"
							}
						};
						return items;
 
			},
		},
		dataModels: /**SCHEMA_DATA_MODELS*/{}/**SCHEMA_DATA_MODELS*/,
		diff: /**SCHEMA_DIFF*/[
			{
				"operation": "insert",
				"name": "STRING0d5c646a-a2a5-4b05-bdd5-91eda99aa462",
				"values": {
					"layout": {
						"colSpan": 24,
						"rowSpan": 1,
						"column": 0,
						"row": 6,
						"layoutName": "ProfileContainer"
					},
					"bindTo": "UsrExternalId",
					"enabled": true
				},
				"parentName": "ProfileContainer",
				"propertyName": "items",
				"index": 6
			},
			{
				"operation": "merge",
				"name": "ContactClientProfileIcon",
				"values": {
					"layout": {
						"colSpan": 4,
						"rowSpan": 1,
						"column": 0,
						"row": 0
					}
				}
			},
			{
				"operation": "merge",
				"name": "Type",
				"values": {
					"layout": {
						"colSpan": 20,
						"rowSpan": 1,
						"column": 4,
						"row": 0
					}
				}
			},
			{
				"operation": "move",
				"name": "Type",
				"parentName": "AdditionalContactProfileContainer",
				"propertyName": "items",
				"index": 1
			},
			{
				"operation": "merge",
				"name": "AccountServiceLevel",
				"values": {
					"layout": {
						"colSpan": 20,
						"rowSpan": 1,
						"column": 4,
						"row": 1
					}
				}
			},
			{
				"operation": "merge",
				"name": "AccountBranch",
				"values": {
					"layout": {
						"colSpan": 20,
						"rowSpan": 1,
						"column": 4,
						"row": 2
					}
				}
			},
			{
				"operation": "merge",
				"name": "Owner",
				"values": {
					"layout": {
						"colSpan": 20,
						"rowSpan": 1,
						"column": 4,
						"row": 3
					}
				}
			},
			{
				"operation": "merge",
				"name": "BirthDate",
				"values": {
					"layout": {
						"colSpan": 12,
						"rowSpan": 1,
						"column": 0,
						"row": 1
					}
				}
			},
			{
				"operation": "merge",
				"name": "Citizenship",
				"values": {
					"layout": {
						"colSpan": 12,
						"rowSpan": 1,
						"column": 0,
						"row": 2
					}
				}
			},
			{
				"operation": "merge",
				"name": "ClientType",
				"values": {
					"layout": {
						"colSpan": 12,
						"rowSpan": 1,
						"column": 0,
						"row": 3
					}
				}
			},
			{
				"operation": "merge",
				"name": "SalutationType",
				"values": {
					"layout": {
						"colSpan": 12,
						"rowSpan": 1,
						"column": 0,
						"row": 4
					}
				}
			},
			{
				"operation": "merge",
				"name": "Language",
				"values": {
					"layout": {
						"colSpan": 12,
						"rowSpan": 1,
						"column": 12,
						"row": 3
					}
				}
			},
			{
				"operation": "move",
				"name": "Language",
				"parentName": "ContactGeneralInfoBlock",
				"propertyName": "items",
				"index": 7
			},
			{
				"operation": "merge",
				"name": "Age",
				"values": {
					"layout": {
						"colSpan": 12,
						"rowSpan": 1,
						"column": 0,
						"row": 5
					}
				}
			},
			{
				"operation": "move",
				"name": "Age",
				"parentName": "ContactGeneralInfoBlock",
				"propertyName": "items",
				"index": 8
			},
			{
				"operation": "insert",
				"name": "LOOKUP5f31e5a7-d07e-4752-925a-df3453f2a040",
				"values": {
					"dataValueType": Terrasoft.DataValueType.ENUM,
					"layout": {
						"colSpan": 12,
						"rowSpan": 1,
						"column": 0,
						"row": 0,
						"layoutName": "ContactGeneralInfoBlock"
					},
					"className": "Terrasoft.MultiChoiceCombobox",
					"bindTo": "UsrAutomaticLabel",
					"enabled": true,
					"contentType": 3
				},
				"parentName": "ContactGeneralInfoBlock",
				"propertyName": "items",
				"index": 9
			},
			{
				"operation": "merge",
				"name": "ContactPageV26Tab",
				"values": {
					"order": 2
				}
			},
			{
				"operation": "merge",
				"name": "JobTabContainer",
				"values": {
					"order": 5
				}
			},
			{
				"operation": "merge",
				"name": "HistoryTab",
				"values": {
					"order": 6
				}
			},
			{
				"operation": "merge",
				"name": "NotesAndFilesTab",
				"values": {
					"order": 7
				}
			},
			{
				"operation": "merge",
				"name": "ESNTab",
				"values": {
					"order": 8
				}
			},
			{
				"operation": "move",
				"name": "Gender",
				"parentName": "ContactGeneralInfoBlock",
				"propertyName": "items",
				"index": 5
			},
			{
				"operation": "move",
				"name": "INN",
				"parentName": "ContactGeneralInfoBlock",
				"propertyName": "items",
				"index": 1
			},
			{
				"operation": "move",
				"name": "SocialStatus",
				"parentName": "group51e8654c265f_gridLayout",
				"propertyName": "items",
				"index": 0
			},
			{
				"operation": "move",
				"name": "DecisionRole",
				"parentName": "JobInformationBlock",
				"propertyName": "items",
				"index": 5
			},
			{
				"operation": "move",
				"name": "Job",
				"parentName": "JobInformationBlock",
				"propertyName": "items",
				"index": 1
			},
			{
				"operation": "move",
				"name": "EmploymentType",
				"parentName": "JobInformationBlock",
				"propertyName": "items",
				"index": 0
			},
			{
				"operation": "move",
				"name": "Account2",
				"parentName": "JobInformationBlock",
				"propertyName": "items",
				"index": 2
			}
		]/**SCHEMA_DIFF*/
	};
});

 

Yevhen Vorobiov,

Hi Yevhen, I made new Server and added Multiple Choice as it was in documentation. I have same problem with saving data. There are not any error in console ,  after chosing multiple Choiche values "Labels"  and saving Contact page, but after reloading the page the data is not saved and Labels are deleted so its empty .

Hi Vasili,

I can see that your code uses this method:

methods: {
onEntityInitialized: function() {
window._contactObject = this;
this.callParent(arguments);
this.mixins.MultiChoiceMixin.init.call(this, arguments);
},

However, the instruction uses the following method instead:

methods: {
init: function() {
this.callParent(arguments);
this.mixins.MultiChoiceMixin.init.call(this, arguments);
},

When I use the former method, I get the same issue. I can select data in the field, but Creatio will not save it. When I use the method from the instruction, everything works as expected.
Could you please test the method from the instruction? Is using a different method required in your case?

It worked! Thanks a lot

Show all comments

Hello team,

 

I have a multiselect lookup and a requirement where already selected records must be checked. I have used config.selectedValues to mark already selected records. 

 

Unfortunately, the application takes a lot of time (from 6 to 15 seconds) before the already selected records are marked on the UI. Hence the users are selecting records again and creating duplicates. There are other validation issues around this as well.

 

Is there a way to stop user from selecting further records till all existing records are marked checked? Please have a look at the video.

 

The use case in short, is to ensure that the checked records are marked and only then the user is allowed to choose further records.

Like 1

Like

1 comments

Hello,

Unfortunately, I didn't know a way to disable the checkbox on the lookup window and don't even know if that option is possible, however, in your case you can try a different approach. 

You can add a filter to an openLookup config that won't shop any records and disable it when you are using your config.selectedValues option.

Show all comments

Hi All,

 

Can we implement a multiselect lookup with a DB view object?

If yes, how?

 

Any info on this will be much helpful.

 

Thank you.

 

Regards,

Anitha Premkumar

Like 0

Like

1 comments

Hello,

 

To implement this logic, please check out these articles on Community:

https://community.creatio.com/questions/implementing-multi-select-lookup

https://community.creatio.com/questions/multiselect-lookup

 

They should help you out in your business task. If it is not quite what was needed, kindly specify with more detail what exactly you are trying to implement.

Show all comments

Hello team,

 

I have a multiselect detail and I have added code to mark already selected records when the lookup window is opened again. For example if A, B are already added to the multiselect, when user wants to add C,D, E, the records A & B will already be checked.

 

There are multiple validations done before we add a record. Unchecking of already added records will cause complication. 

 

We see preventing uncheck of values as a solution. Is there a way to prevent uncheck of records? 

Like 0

Like

4 comments

Hello Shivani, 

 

Can you please provide the code you are referring to? 

 

Best Regards, 

Igor

 

Ihor Skohariev,

Following is the code I have used, to mark the records already selected as marked. I need to prevent these marked records as unmarked. Basically, we cannot uncheck an already checked record

esq.getEntityCollection(function(result) {
                 	var existsDocumentsCollection = [];
                 	if (result.success) {
                         		result.collection.each(function(item) {
                         		existsDocumentsCollection.push(item.get(”AccountId”));
                          });
                        }
		config.selectedValues = existsDocumentsCollection;

 

Hello, is it correct that currently every time you open and close a lookup window there are no selected records and your code doesn't work? Or it's working but only after validation and you need to make it that the needed values are already selected before that moment?

Dmytro Vovchenko,

 

We have managed to figure this out using custom logic. The rows already selected are marked when we add more records. 

Show all comments