For learning purposes, I created a Lightning Field Set Form component that renders a one column form of inputs for a set of fields for a given SObject where the field inputs are driven by a specified field set on that object. This code was influenced by the How to use Field Sets with Lightning Stackoverflow post.
This component can be used to either update a record or create a new record.
Updating a Record
To update a record on a standard record page,
- Create a field set on the object that specifies the fields to edit.
- Place the FieldSetForm component on a record page and specify its Field Set Name on the designer tab.
To update a record from a custom component,
- Embed the <c:FieldSetForm /> in the custom component.
- Set the recordId and fieldSetName attributes with the record id and field set name to use.
Creating a Record
- Add the component to the desired location.
- In the designer, specify the object name and field set name.
- Needs to be enhanced to have better support for Relationship fields (Lookups & Master-Details), picklists, and multi-picklists, and probably other data types too.
- Needs apex test code written for it.
- Needs better error handling. It currently only shows the first error returned on save.
Notable Differences From StackOverFlow Post
- The handleValueChange method isn’t needed to bind the input values back to the record because the cmp.getReference(‘v.record’ + field.APIName) takes care of that automatically.
- There was a bug with the config where the same config was being used for the same type so if you had multiple fields with the same type, you’d see the same field multiple times. This was fixed by cloning the config for each field using the JSON.parse workaround.
- Added the ability to save the record back automatically with new and update support.
- Was able to eliminate the form attribute because all components inherit the body attribute.
This was created for learning purposes. Whenever possible, use other standard components that provide similar functionality like the force:recordEdit component that does similar functionality.
Apex Field Class
Salesforce has a feature known as field sets. A field set is a group of fields on an object that is declaratively defined by a user. The field set’s common purpose is to decide which fields to display on a web page for editing on a form or for read only.
Salesforce documentation covers getting started with field sets. We’ll cover the good, the bad, and the ugly of field sets here.
- Ease-of-Use. Salesforce makes it easy to use within VisualForce.
- An object can have multiple field sets that can be used for various purposes.
- Objects can have as many field sets as needed.
- Adding or removing a field to be edited or displayed is as easy as adding or removing it from the field set. This allows easier maintenance of the application as requirements change over time.
- Parent Fields Supported. One can include fields from parent objects. For example, a Contact field set may include fields from the Account.
- Required Fields. Fields can be marked as required so one must fill them out on a form.
- Only One Level of Parent Fields Supported. In SOQL, up to 5 parent levels are supported. It would be nice to have that level of flexibility with field sets. One workaround is to create one or more formula fields on the given object or parent object to grab the additional information and then use the formula field in the field set.
- Easy To Break. Its flexibility is also a weakness. It allows one to remove fields that may be always needed in order for functionality to work. One workaround for this is to have a separate list of always required fields that are merged with the field set’s fields to ensure they aren’t removed.
As an architect, I have to know the capabilities as well as the limitations of the technologies available. Here are the limitations as I see them:
- Read-Only Fields. It’s nice to mark fields as Required. Having the ability to mark a field as read-only would be great so that one can more easily have a mixture of editable and read-only fields on a section of a page. Upvote the Specify a field as readonly in a fieldset idea and hopefully, Salesforce will implement this much needed feature.
- Can’t Add Attributes. One can’t add additional data attributes to the field sets. For example, I may want to add layout information or custom labels that may differ for the same field across field sets. One way to workaround this is to create your own metadata, associate it to a given field in a field set, and have the application combine the metadata at runtime to do the desired behavior.
What’s the good, the bad, and the ugly of field sets for you?