Skip to main content
Nintex Community Menu Bar
Question

ComboBox Custom Field Renderer Not Accepting Typed in Values


Forum|alt.badge.img+4

Hi,

I have a ComboBox custom field renderer for a time field. I have it set where the ComboBox has picklist values like “11:30:00.000Z” with a label of"11:30 AM". The user can select a value from the picklist options and it will be saved to Salesforce correctly.

However, right now if a user types in a value themselves like 11:30 AM it does not get saved to Salesforce and instead produces an error (“VFRemote.js:117 Visualforce Remoting Exception: List index out of bounds: 2”).

I’m trying to come up with a validation function that will validate the user-submitted value and will convert it to the value Salesforce is expecting, but I can’t figure out how to get this to work with the ComboBox. Is there a way that when a user types in a value for a ComboBox I can validate it and then add it to the picklist options as the selected option? Or is there a simpler way to handle these user submitted values?

I’ve recorded a short 2-minute video to show you the issue I am experiencing - https://screencast-o-matic.com/watch/cFih2NFUMr.

Custom Renderer Code:

var field = arguments[0],
    value = skuid.utils.decodeHTML(arguments[1]),
    $ = skuid.$;
field.element[0].className += ' TimeComboBox';
if (field.mode == 'edit') {
    var picklistEntries = picklistValues();
    field.metadata.picklistEntries = picklistEntries;
    var valueArray = searchPicklist(value, picklistEntries);
    // render the field as a picklist
    //skuid.ui.fieldRenderers.PICKLIST[field.mode](field,valueArray.value);
    
    // render the field as a combobox
    $.when(skuid.ui.fieldRenderers.COMBOBOX[field.mode](field, valueArray.value)).then(function() {
        var options = {
            translation: {
                'X': {
                    pattern: /[0-9]/,
                    optional: true
                },
                '6': {
                    pattern: /[0-6]/
                },
                'A': {
                    pattern: /A|P/i
                },
                'M': {
                    pattern: /M/i
                }
            },
            placeholder: "HH:MM AM/PM"
        };
        $('.TimeComboBox input').mask('0X:60 AM', options);
        $('.TimeComboBox input').off('blur.validation').on('blur.validation',inputValidation);
    });
} else {
    //use the default renderer
    skuid.ui.fieldRenderers[field.metadata.displaytype][field.mode](field, value);
}
function picklistValues() {
    var quarterHours = ["00", "15", "30", "45"];
    var times = [];
    for (var i = 0; i < 24; i++) {
        for (var j = 0; j < 4; j++) {
            var hour = i < 10 ? "0" + i : i,
                twelveHour = i >= 13 ? i - 12 : i === 0 ? 12 : i,
                minute = quarterHours[j],
                AMPM = i <= 11 ? "AM" : "PM";
            var time = {
                value: hour + ':' + minute + ':00.000Z',
                label: twelveHour + ':' + minute + ' ' + AMPM,
                defaultValue: false,
                active: true
            };
            times.push(time);
        }
    }
    return times;
}
function searchPicklist(nameKey, myArray) {
    for (var i = 0; i < myArray.length; i++) {
        if (myArray[i].value === nameKey) {
            return myArray[i];
        }
    }
}
function inputValidation(){
    console.log('Validating', $(this).text(), $(this).val(), this);
}


Translate

Forum|alt.badge.img+4

I was able to figure it out. I didn’t realize that the value typed in manually had to match a value in the picklist entries of the ComboBox. I am going to build a validation function that once the value is validated it will add the picklist entry if it doesn’t automatically exist and then populate the field with the value. 

Translate

Forum|alt.badge.img

Hi Tim,

Would you be able to share the final version of the custom renderer?

Our client has the same requirement. I tried the one posted.

But I cannot see the time picklist for some reason.

Do I need to override the metadata for the Time field?

Thanks in advance.

Emily Jiang

Translate

Reply


Cookie policy

We use cookies to enhance and personalize your experience. If you accept you agree to our full cookie policy. Learn more about our cookies.

 
Cookie Settings