Filter values in inline editing mode according to the another field

Hello,

we have simple form with two fields and the list. We are trying to filter values in the list. First one - Project, working properly and is filtered according value in Employee field. The second - ContractualBasis - doesn't work. It should be filtered according to the value in a project field, so It has to be changed each time when project changed. Is it possible to filter values in change event?

fd.spRendered(function() {
    fd.control('Timesheet').$on('edit', function(editData) {
        //filter Project field by Employee
        var employee = fd.field("Employee").value.DisplayText;
        editData.field("Employee").value = employee;
        editData.field('Project').filter = "Employee eq '" + employee + "'";
        editData.field('Project').useCustomFilterOnly = true;
        editData.field('Project').$on('change', function(changeData) {
            var project = changeData.LookupValue;
            editData.field('ContractualBasis').filter = "Employee eq '" + employee + "' and Project eq '" + project + "'";
            editData.field('ContractualBasis').useCustomFilterOnly = true;
        });
    });
});

Thanks in advice.

Hello @corstro,

What is the type of Project field in the source list? Is it a lookup field?

If so, please try to filter by its ID, not value:

var project = changeData.LookupId;

Hi @mnikitina ,
Yes it is lookup field, but I have to filter it by name (LookupValue). I tried following scenario - I assigned fixed value to the project variable.

If I move filter definition outside change event, filter works:

fd.spRendered(function() {
    fd.control('Timesheet').$on('edit', function(editData) {
        //filter Project field by Employee
        var employee = fd.field("Employee").value.DisplayText;
        editData.field("Employee").value = employee;
        editData.field('Project').filter = "Employee eq '" + employee + "'";
        editData.field('Project').useCustomFilterOnly = true;
		var project = "Overhead";
        editData.field('ContractualBasis').filter = "Employee eq '" + employee + "' and Project eq '" + project + "'";
        editData.field('ContractualBasis').useCustomFilterOnly = true;
        editData.field('Project').$on('change', function(changeData) {
            fd.field("Title").value = project + ' ' + employee;
        });
    });
});

If it is inside change event it doesn't work:

fd.spRendered(function() {
    fd.control('Timesheet').$on('edit', function(editData) {
        //filter Project field by Employee
        var employee = fd.field("Employee").value.DisplayText;
        editData.field("Employee").value = employee;
        editData.field('Project').filter = "Employee eq '" + employee + "'";
        editData.field('Project').useCustomFilterOnly = true;
        editData.field('Project').$on('change', function(changeData) {
            fd.field("Title").value = project + ' ' + employee;
			var project = "Overhead";
			editData.field('ContractualBasis').filter = "Employee eq '" + employee + "' and Project eq '" + project + "'";
			editData.field('ContractualBasis').useCustomFilterOnly = true;
        });
    });
});

Hello @corstro,

Try adding the refresh function to the code:

fd.spRendered(function() {
    fd.control('Timesheet').$on('edit', function(editData) {
        //filter Project field by Employee
        var employee = fd.field("Employee").value.DisplayText;
        editData.field("Employee").value = employee;
        editData.field('Project').filter = "Employee eq '" + employee + "'";
        editData.field('Project').useCustomFilterOnly = true;
        editData.field('Project').$on('change', function(changeData) {
            fd.field("Title").value = project + ' ' + employee;
			var project = "Overhead";
			editData.field('ContractualBasis').filter = "Employee eq '" + employee + "' and Project eq '" + project + "'";
			editData.field('ContractualBasis').useCustomFilterOnly = true;
            editData.field('ContractualBasis').refresh();
        });
    });
});

:smiley: Thank you. It works like a charm.

1 Like