Showing posts from 2018

Working with Conditional Attribute Defaults in Lightning

Setting defaults on attributes in lightning can be a useful tool when setting the initial state of components. There is an 'undocumented feature' that allows us to set attribute defaults conditionally, but you may find that this does not work exactly as you would expect. It turns out that setting a conditional default will 'lock' any changes to that attribute, as demonstrated below. In this example we create two attributes 'myString' and 'mySimpleString'. Both attributes have default values but the default on 'myString' is wrapped in a condition. We then trigger an init handler to update the value of both strings to be 'Set Directly' when the component is initialised. The example shows that 'mySimpleString' will update to the new value, but 'myString' does not. For additional complexity, setting a conditional default with an object reference will 'lock' any changes to that attribute, except from th

Detect URL Format (Lightning Experience)

Following the announcement that the URL format in lightning experience will change from /one/ we are looking for a way of detecting which format is being used so that we can generate URLs in Apex. For example, if we were to generate a PDF in Visualforce containing a URL to a lightning page we would like to correct the URL to use the correct format depending on whether the org is using `/one/` or `/lightning` What does it do? From the announcement: It changes the URL format used by Lightning Experience standard apps and the Salesforce mobile app. For example: Current format: https://<>/one/ New format: https://<>/lightning/o/Account/home In Summer '18 the new URL format will be enforced, but in Spring '18 it can be enabled for testing via a critical update. Why do we care? If the user enabled the critical update themselves we need to be able to make sure that our featu

London's Calling 2018: Getting Started with Salesforce Lightning Components & Lightning Data Service

Many thanks to London's Calling for recording my session on Lightning Components and Lightning Data Service. The full video is now available on YouTube.

Using targetRecord on Lightning Data Service

The force:recordData attribute targetRecord promises to be a useful addition to Lightning Data Service in future versions. We had hoped that the schema information would be included in the object so that client side validation and conditional field display would be possible, but that doesn't seem to be the case. Available attributes fields: The fields that have been made accessible from force:recordData. e.g. v.record.fields.Name.value childRelationships: The child relationships defined on the record apiName: The full API Name of the record. e.g. Account id: The ID of the record recordTypeInfo: Any record type information relating to the record Convert the proxy to a readable object Sometimes being able to view the data in the record proxy object is useful for debugging. I have created a helpful method for this: In your component helper, insert the following code: Then, from anywhere in that component you can call helper.ouputProxy(record) where the reco

Handy Scripts for Salesforce Lightning Development

Lightning FLS. Throw exception if any field is not accessible. SLDS Wizard Progress Bar - Bar will not display without z-index on containing div Binding lightning:input checkbox value. Must bind to 'checked' not 'value' Control visibility of lightning component using slds-hide Lightning Select component markup with select inside iteration.