Hello everyone, I have received a requirement to add a multi-select control at the form level. However, after adding it, the Modified method is not triggering.
I have added the control to the dialog form.
As per user selection I need to showcase those fields.
To display specific fields based on user selection, I plan to write the code in the control's Modified event. However, the system is not triggering that method. To achieve this, I have followed the process below:
Lookup method in the form control.
public void lookup()
{
MultiSelect multiSelectGrid = MultiSelect ::construct(Temp_Genders, Temp_Genders);
Query query = new Query();
QueryBuildDataSource queryBuildDataSource;
queryBuildDataSource = query.addDataSource(tableNum(Temp));// My Table
queryBuildDataSource.addSelectionField(fieldNum(Temp, Genders));
multiSelectGrid.parmQuery(query);
multiSelectGrid.parmCallingControl(this);
multiSelectGrid.run();
}- For a multi-select lookup, the 'SysLookupMultiSelectGrid' class needs to be used.
- When the user selects values in the lookup, the 'SetSelected' method is triggered.
- To achieve this, I have created a new class, extending from 'SysLookupMultiSelectGrid,' and overridden the necessary methods.
class MultiSelect extends SysLookupMultiSelectGrid
{
#Characters
public void setSelected()
{
dictfield dictField;
Common currentDSRecord;
FormDataSource formdatasource;
container con = this.selectedStr;
callingControlId.text(SysOperationHelper::convertMultiSelectedValueString(selectedId));
formdatasource = callingControlId.dataSourceObject();
FormRun FormRunLoc= formdatasource.formRun();
// My custom code
if (formHasMethod(FormRunLoc, identifierStr(visibilityValidation)))
{
FormRunLoc.visibilityValidation(con);
}
if(formdatasource && callingControlStr.dataField())
{
dictfield = new dictfield(formdatasource.table(),callingControlStr.dataField());
currentDSRecord = formdatasource.cursor();
currentDSRecord.(dictfield.id()) = currentDSRecord.(dictfield.id())
+ SysOperationHelper::convertMultiSelectedValueString(selectedStr);
callingControlStr.update();
}
else
{
callingControlStr.text(SysOperationHelper::convertMultiSelectedValueString(selectedStr));
}
}
public static MultiSelect construct(FormControl ctrlId, FormControl ctrlStr)
{
MultiSelect lookupMS = new MultiSelect ();
lookupMS.parmCallingControlId(_ctrlId);
lookupMS.parmCallingControlStr(_ctrlStr);
return lookupMS;
}
}From the above code, I am triggering the form method. That code you can find below.
Public TestForm extend FormRun
{
public void visibilityValidation()
{
boolean isMale, isFemale, isOthers;
isMale = conFind(_con, 'Male');
isFemale = conFind(_con, 'Female');
isOthers = conFind(_con, 'Others');
if (conFind(_con, 'Both'))
{
isMale = true;
isFemale = true;
}
Temp_Male.visible(isMale);
Temp_Female.visible(isFemale);
Temp_Others.visible(isOthers);
}
}If you have used "SysLookupMultiSelectCtrl" class. You can follow the above process.
Thank you, Yasin, For your support.
Keep Daxing!!


No comments:
Post a Comment