Problem with making fields conditionally required on rows in a table based on the value of another f

edited June 25, 2020 in Questions
I am trying to make fields conditionally required on rows in a table based on the value of another field on that specific row using a custom renderer snippet and addRequiredField/removeRequiredField.

It actually works for rows that are consistent with the last row put into edit mode.  However, the condition is not enforced for rows that don't share the condition of that last row.

If I look at the snippet, I guess the results kind of make sense but I thought it would work differently based on the documentation for skuid.ui.

I'm guess this is an easy one and likely discussed a number of times.  If you have any recommendations, please share.

Here's a little more detail before I share the code.  I have a table that contains Opportunity data.  It  has sale rows and churn rows.  If the row is a sale, I want 2 fields required.  If it is churn, I don't want them required.  When I put a sale row in edit mode, the fields become required.  If I then open a churn row, the fields are no longer required (not even on the sale row).  Here's the snippet:

var $ = skuid.$;
var field = arguments[0],
    value = arguments[1],
    list = field.item.list,
    row = field.row;

// Run the default renderer    
skuid.ui.fieldRenderers[field.metadata.displaytype][field.mode](field,value);

switch( field.mode )
{
    case 'edit':
        if (row.OpptyType === 'Wireless Sale' || row.OpptType === 'Wireline Sale') {
            list.addRequiredField({ id: 'Third_Party_Consultant__c' });
            list.addRequiredField({ id: 'Incumbent_Provider__c' });
        } else {
            list.removeRequiredField({ id: 'Third_Party_Consultant__c' });
            list.removeRequiredField({ id: 'Incumbent_Provider__c' });
        }
        break;
    case 'read':
        break;
    case 'readonly':
        break;
}

Comments

  • Bill McCulloughBill McCullough 💎💎
    edited April 23, 2018
    Troy,

    It looks like you are using this script to render the Opportunity Type field.  You should run this script to render the Third Party Consultant and Incumbent Provider fields.  This should get you what you are after.

    Thanks,

    Bill
  • edited April 23, 2018
    Hi, Bill - this snippet is the renderer on both Third Party Consultant and Incumbent Provider fields, not on Oppty Type.
  • edited April 23, 2018
    I'm guessing it's related to my issue, but I get this "Undefined" required field message instead of showing the names of the fields.image
  • Pat VachonPat Vachon 💎💎💎
    edited June 25, 2020
    Hmmm ... not sure you can make a field on a row required or not based on other values on the row.

    The list.addRequiredField function applies to the entire list. Basically rows are affected as all rows are items in the list.

    You'll have to use another method to conditionally make something required. Have you considered a popup to field editor. Here you can make this work as a field editor is using one list.
  • edited April 23, 2018
    I think I agree with what you're saying.  When I actually looked closer, I saw that it was being applied to the list.  The example in the Skuid.ui.list documentation made me think that I could do it, but I guess I was just hoping.  Here's the example:
    // If DoNotCall is true, then Email should be required,  // otherwise, Phone should be required  if (row.DoNotCall===true) {     list.removeRequiredField({ id: 'Phone' });     list.addRequiredField({ id: 'Email' });  } else {    list.removeRequiredField({ id: 'Email' });     list.addRequiredField({ id: 'Phone' }); 
    }

    This is comparing the row level DoNotCall value, but applying at the list level . . . just like mine.  I think this is likely a bad example for a list level example.

    I'm not excited about the popup to field editor, because my page is supposed to provide quick edit functionality.  Necessitating the use of a popup slows things down and it doesn't allow for inline editing of the list.

    Any other recommendations?


  • Pat VachonPat Vachon 💎💎💎
    edited June 25, 2020
    If you're set on making this work for you, you'll have to make a custom development in that required set of fields. A snippet to include/exclude the needed classes to depict to the user that the field is required. Then some sort of way of messaging to inform the user that the value is required. I'd likely use a Salesforce validation rule for this.
  • edited April 23, 2018
    Thanks, Pat.  I figured it would come back to a validation rule, but until very recently, I was still holding out hope :D.
Sign In or Register to comment.

Howdy, Stranger!

It looks like you're new here. If you want to get involved, click one of these buttons!