Douglas C. Ayers

My journey with Salesforce and Technology

Adopting Files and Enhanced Notes in Lightning Experience

Hello! On this page you’ll learn the benefits of adopting Files and Enhanced Notes, how to enable these features for your users, and understand migration options for Classic Notes & Attachments.

Why make the switch?
The ship is sailing…

In Winter ’16 the new Enhanced Notes tool became generally available, and with it introduced a new “Notes” related list separate from the classic “Notes & Attachments” related list.

In Spring ’17 Salesforce announced that after Winter ’18 the “Notes & Attachments” related list will no longer have an upload or attach button and recommends customers to adopt the separate “Files” related list.


Lightning Files and Enhanced Notes include these awesome features:

  • ​Larger File Sizes 25MB vs. 2GB (80x larger!)
  • Previews View most files without downloading
  • Versioning Track one file, multiple revisions
  • Rich-Text Use styles, bullets, and inline images
  • Sharing Share to users, groups, and records
  • Public Links Share to anyone, no password required
  • Customize Page Layouts Detail page for Files
  • Custom Fields Add custom fields to ContentVersion object
  • Reportable Run File and Content reports to analyze usage

Dreamforce Sessions

I’m presenting about this topic twice this year at Dreamforce 2017!
Make sure to bookmark the below sessions:

Ideas Addressed by Lightning Files & Enhanced Notes


  1. Sorting the Notes and Attachments Related List – and create custom fields
  2. Ability to Add Custom Fields to the Attachments Object
  3. Custom Pick-list field to determine the type of the attachment.
  4. Customized Security Settings for Notes/Attachments
  5. Add custom fields to notes object
  6. Allow attachments to be public/private like case comments
  7. Increase the Characters allowed in the Notes & Attachments – Notes Body
  8. Drag and Drop into Notes and Attachments
  9. Transfer Notes & Attachments to another object
  10. Attach notes and attachments to multiple records

Converting Your Data

Unless you are a brand new Salesforce customer then you likely have lots of existing Notes & Attachments in your org. If you are adopting Files and Enhanced Notes then your users will appreciate you bringing that data along so they can take advantage of all these great new features.

I’ve developed two free apps listed below to help you automate the conversions. But as Levar Burton always said, you don’t have to take my word for it =)

This slideshow requires JavaScript.

Convert Attachments to Files


Resources to help you convert your attachments to files:

Convert Notes to Enhanced Notes


Resources to help you convert your notes to enhanced notes:

Preserve Files After Merging Records

When two Accounts, Contacts, or Leads are merged together then the related records of the merged (deleted) record get re-parented to the surviving (master) record. This is great as we don’t lose sight of the related records and all the data carries over to the master record.

However, Salesforce Files behave differently and are not automatically shared from the merged (deleted) record to the surviving (master) record — the files become orphaned!

But don’t be dismayed, I’ve developed a free app you can install in your org that solves this problem!

Preserve Files After Lead Conversion

For those of you who have tried Files prior the Summer ’17 release may have noticed that converting a lead would cause the Files shared to the lead to become orphaned — they were not automatically shared to the converted Account, Contact, or Opportunity!

Although I had developed a free app to solve this problem, please be comforted that Salesforce finally fixed this issue in Summer ’17 release. No extra magic needed =)


Fun Things to do with Files

Check out these fun, free apps to get more productivity out of Salesforce Files!

Notify Followers of Updates

Chatter is Salesforce’s Enterprise Social and Collaboration tool. You can share knowledge, files, and data across your organization. You can follow users or records and see updates about them in your Chatter Feed or Email Digests, and you can follow files. Nifty!

But what if your team needs more frequent notifications that a file has been updated than a Daily Email Digest? Or what if as an #AwesomeAdmin you wanted to launch Process Builder or Flow whenever a file was created or updated?

Out of the box you can’t do it easily without writing Apex code so that’s why Zach Boyd and I developed the free app Chatter Bot for Files: How to Notify Followers When File Updated so you can do just that! Install the app then use Process Builder to take action when Files are created or updated.

Share Files to Multiple Records via List View Action

Inspired by Christine Miller I developed this free app to allow you to select one or more records on a list view then share to those selected records one or more Files that you either upload or that already exist in Salesforce.


View Salesforce Files of Related Records

As you may have noticed, there are many differences between the Notes & Attachments related list, Notes related list, and Files related list.

When viewing the Classic Notes & Attachments related list on an account, for example, attachments belonging to the account and its related contacts, cases, opportunities, tasks, etc. are displayed in one combined list.

When viewing the Lightning Files related list on the same account, for example, only the files explicitly shared to the account are displayed. The files shared to its related contacts, cases, opportunities, tasks, etc. are not displayed in the same combined list.

Inspired by Keri-An Richards I developed this free Lightning Component you can add to your Lightning Record Pages that brings this “rollup” behavior to Files and Notes related lists.


64 thoughts on “Adopting Files and Enhanced Notes in Lightning Experience

  1. This question is about using and sharing Files in/to a Partner Community. We’d like for Partner Users to be able to view all Files that are related to records that they have access to. What I’m finding is that Partner Users can not see Files that have been uploaded by Internal Users or even Internal Users logged into the External Community. Partner Users can see Files related to records they have access to uploaded by themselves or other Partner Users. Also, is there a way to put Files in the Navigation Menu in a Community using Napili?

    Liked by 1 person

    1. Hi Jeff,

      When your internal users upload or share files to a record the only way via the UI to make the file available to Community users is share the file via a Chatter post, add file to the post, and ensure the Chatter post is set to audience “All with Access”.

      Doing that ensures the ContentDocumentLink.Visibility field is set to “AllUsers” and not “InternalUsers”.

      When community users upload files via the related list or Chatter then the Visibility field value is always “AllUsers”.

      I’m not aware of any way in UI to change that field value aside from making Chatter post. Note, the Chatter post trick only can widen access to the file, it will never change Visibility from “AllUsers” to “InternalUsers”.

      You can use Apex or Data Loader to modify the field value of existing records if necessary, or introduce a trigger on ContentDocumentLink to set Visibility field to desired value.


      1. Hi Doug,
        Thanks for your replies. I’m not sure how to “ensure the Chatter post is set to audience “All with Access”.” Is there a setting that allows users to have that option with Chatter Posts? Does this have something to do with the To field or the @Mention on a post? Thanks!

        Liked by 1 person

    2. Hi Jeff,

      To your other question, “Is there a way to put Files in the Navigation Menu in a Community using Napili?”, I did not see a menu item to achieve this.

      You can customize the Search page in the community such that community users can search by file name and find it that way if the file is accessible to them.



  2. Hi Doug, the progress you’ve made here since you first helped me is incredible! I, for one, have tried to ignore the fact that this is ‘the way of the future’ since learning about it!!!
    Can I ask about how Sharing Settings affect what you’re talking about here above – visibility to Community Users? We wouldn’t want the files they upload to be visible to all other Community Users. We let them see Contracts created against Accounts by internal Users using Sharing Settings. Could this help them see Files shared with these same Accounts?

    Liked by 1 person

    1. Hi Libby,

      Thank you so much for the kind feedback!

      Regarding file sharing, Community Users will only have access to files that are shared to them — either explicitly shared to their user, shared to a Chatter group they belong to, or shared to a record they have access to.

      But even though a file has been shared to a record the community user has access to or Chatter Group the community user belongs to, they only see the file if at the record level in the database the ContentDocumentLink.Visibility field equals “AllUsers”. The visibility of the shared file allows internal users to add files to records without necessarily exposing them to external users.

      But even if an internal user shares a file to a record (e.g. account or contact), to expose it to community users they need to share the file via Chatter post and select audience to be “All with access”. This doesn’t expose the file to ALL community users, it just exposes it to the community users who have access to that record that the file was shared to. In that respect, the notion of “AllUsers” is a bit of a misnomer.

      In my dev org, when I had account external sharing settings set to Public Read/Write then all community users could search in the community to find the files shared via “all with access”. Once I changed the external account sharing settings to Private then only community users who had access to the records the file had been shared to could find it — this mirrors the behavior you’d expect even within your internal community.

      Hope that helps clarify things!



  3. Hi Doug –

    Great write-up! Best I’ve seen and hugely helpful.

    Curious if in Classic you’ve seen an app that allows users to upload a file and populate the custom fields on a Lightning File. Specifically Lightning Files related to another object (i.e. Opportunity).

    Feels like many of the building blocks are here and I have a suspicion it would be doable in LEX, but Classic is still stumping me due to the Apex heap limits I would encounter if I built a VF page.

    Figured if anyone would know the answer, you might based on all your other work.

    Thanks for any tips!

    Liked by 1 person

    1. Thanks, Andrew, really appreciate the kind feedback!

      I think this would need to be custom code and my idea to make it work would need Visualforce but could be exposed in Classic or Lightning.

      In similar fashion to how I wrote JavaScript to let users upload and share files to records per Add Files to Records List View Button project, we would need the form to collect your input fields and then when the user clicked “upload” button the JavaScript code would upload the file to Salesforce via REST API passing the file data plus the form fields.

      That’s probably a pretty geeky answer but I don’t see any reason why it wouldn’t work. That would make for a fun weekend project after Dreamforce =)


      1. It would be a great app. Good to know. I hadn’t seen your other project.

        Does the JS approach scale well for larger files or have you found any issues with it? Needing support for larger files has led me to a few dead ends.

        Enjoy Dreamforce!

        Liked by 1 person

        1. Yes it should scale to up to (or nearly) 2GB in size. You use the REST API to post the ContentVersion record and bypass Apex Heap Limits altogether.

          I’ve got examples using forcetk library and jsforce library, just gotta hunt them down.


  4. Hi Doug, thanks so much for posting this! I am a relatively new admin and my org is new to Salesforce (in fact we are still in the roll-out process). My question is, do you have any tips on the best way to have email attachments automatically show in the Files related list
    on the case detail page when using email-to-case?

    For example, if we have someone attach a word doc via email-to-case, how can we get that attachment to show in Files instead of attachments? I hope this makes sense and I look forward to hearing your ideas. Enjoy Dreamforce!

    Liked by 1 person

    1. Hi Tate,

      You’re very welcome! And welcome to the Salesforce ohana!

      Salesforce supports viewing the attachments of emails received by email-to-case at the Case level in Lightning Experience only. When using Classic then you must navigate down to the email record itself to view its attachments.

      This feature was introduced in the Summer ’17 release.

      Good luck with your rollout,



  5. I found a issue while converting notes to enhanced notes. This is the text am converting notes to enhanced notes – EDC1. The text preview is showing up correctly but when we click on the note in the body we see chinese characters – 0倀 . This is very confusing to the user.

    Do you know why this would be happening ? Any suggestions on directly editing the body of the converted enhanced note via dataloader or through code ?

    Liked by 1 person

    1. Hi Pravien,

      If the issue occurs when you click to edit an Enhanced Note in Salesforce then the problem is likely to due with their rich-text editor. Especially if as you say the text looks fine in the preview. This may be something you will need to contact Salesforce Support about.


  6. Hi Doug, thanks for all the great articles. Even in Classic, when an Enhanced note from a lead is converted it automatically gets associated to the Account, Contact, AND Opportunity. So you would think there is a way to take an Enhanced Note created at a Opp, Contact, or maybe even a Case and share it to the Account so there is that “rollup” and people don’t have to go find notes that are related to children of the account. Any thoughts on that (I see you offer an app for rolling up notes and Files in Lightning, but we are using Classic and will be for a while.)

    Liked by 1 person

    1. Hi Kathy,

      Are there any other apex triggers in your org on Attachment, Note, ContentDocument, ContentVersion, ContentNote, or ContentDocumentLink records?

      I know occasionally people run into these heap limits but I’ve never been able to reproduce it myself. My initial guess is that other code beyond my app might be doing something and consuming too much memory maybe?

      Have you identified the specific Note that is failing to convert, since you’re using batch size of 1?

      According to documentation, the largest Note should not exceed 32KB. The value you reported 18361823 is 18MB (over 500 times larger).


      1. I’m not sure, but can you verify that I’m using the tool correctly. Do I need to enter the parent attachment IDs or can I do the whole org at once? How would I find the specific attachment? I have been working on this for days. Also, how do I know which attachments have been converted and which ones still need to be converted?

        Liked by 1 person

        1. Now I’m getting this error when i try to convert all 35,000 attachments that we have in our org. Can you not do them all at once? Regex too complicated
          Error is in expression ‘{!submitJob}’ in page dca_cnvrt_file:convertattachmentsrunoncepage: (dca_cnvrt_file)

          Liked by 1 person

          1. Hi Kathy,

            Sorry you’re having difficulties with the app. By chance are you pasting several parent record IDs in the “Attachment Parent Record IDs (comma-separated)” field of the “Convert Attachments to Files” page? That can lead to the “Regex too complicated” error when the code tries to split the comma-delimited string into individual IDs.

            By leaving the “Attachment Parent Record IDs (comma-separated)” field blank/empty then the app will attempt to convert all attachments in your org.

            If you continue to have issues, it may be easier for us to troubleshoot and share screen shots by opening a new issue on the project website here:




            1. I tried to do the whole org at once and that’s when I get the erros. I then, tried adding parent attachment ID’s 1,000 at a time, but get errors on certain ID’s, so the process is taking a really long time to figure out which attachment IDs are erroring out.


        2. You do not have to enter the parent attachment IDs, that is just a convenient way to test small batches. For example, if you wanted to test converting attachments that belong to a single account.

          By leaving the “Attachment Parent Record IDs (comma-separated)” field blank/empty then the app will attempt to convert all attachments in your org.

          To monitor which attachments have been converted/skipped/errored the app comes with a “Convert Attachments to Files Logs” tab. That object has fields for the original attachment id and the new file id. With Data Loader, you can export a .csv list of all attachments in your org then compare that list of IDs to the list of dca_cnvrt_file__Convert_Attachments_to_Files_Log__c records whose dca_cnvrt_file__Old_Attachment_ID__c field equals the ID column in the attachments file. Excel’s vlookup function can assist in cross-referencing.


  7. Hi, it seems like sending emails from salesforce and including related files is very tedious. The ‘attach’ functionality in the email quick action doesn’t seem smart enough to allow you to filter unrelated files out of the view. Also, you have to select and insert each file you want to attach one at a time.

    Can you think of any workarounds to make this user experience a little better? The only thing I thought of that might be nice would be to automatically generate public links and insert them into the email, but unless you could achieve something like that with visual workflow I’m afraid it would be a little beyond my current skillset to implement in apex.

    Any thoughts on this would be appreciated, hopefully I’m just missing something simple about how this was meant to work.

    Thanks in advance!

    Liked by 1 person

  8. Hello Doug, Need some help with Files & Notes migration . While converting all the Notes are not converting to the new Notes , also is there any special permission required to delete it why i’m asking because some of the users earlier have the options to delete that but after that delete option is not coming. Please help me.

    Liked by 1 person

    1. Hi Abhishek,

      Would you mind opening a GitHub issue on the convert notes project with details about original notes not being deleted during the conversion. Did you have the setting enabled to delete data post-conversion? Were there any errors, that would prevent the original notes from being deleted if the conversion was not successful.



    1. Hi Kathy,

      Sorry to hear that, I can imagine that is very frustrating.

      Does your org have any other apex triggers on Attachment, ContentVersion, ContentDocument, ContentDocumentLink, or ContentNote objects?

      I’ve not had the issue personally so my guess is always that there might be other code in the org that is trying to use the files/attachments and is causing the heap error (which means the code ran out of memory).



  9. Hi Doug,

    the new version of “View Salesforce Files of Related Records” with the classic-functionalities will be published soon?

    This would be highly appeciated as i’am having big challenges with files uploaded via salesforce for outlook and your tool might cure that partly.

    Thanks in advance

    Liked by 1 person

  10. Doug, does the View Salesforce Files of Related Records tool (allowing rollups to account page) also work with Enhanced Notes? we would like to have all notes created on Contact and Opportunity Roll up to Account. Is this possible?

    Liked by 1 person

    1. Hi Stuart,

      Actually, the current version of the app queries and displays both Files and Notes together. So yes, it works with Enhanced Notes too 🙂

      In the next version I’m adding filter option so you can specify if you want the component to be files only, notes only, or both (current behavior).

      Liked by 1 person

  11. Hi Doug,

    I posted an issue in GitHub a few days ago, but not sure you saw it. I ran a full test of all attachments in my sandbox, and am getting this error in the Apex Jobs log: “ContentPublication Limit exceeded.” It shows 1524 batches processed, but 1455 failures. Any idea what would be causing this error? I have 152,000 attachments.


    Liked by 1 person

  12. Hi Doug,
    The Files Related List for related files is awesome! I’m running into an issue though in that the “Email Messages” object is not displaying in the list for the Contact or Lead objects. It displays for other standard and custom objects though. I haven’t customized your component to limit any objects is displays Files for. Have you seen this behavior before?

    Liked by 1 person

    1. Hi Ryan,

      Thanks for the kind feedback! I’m not sure why it’s not showing up…. is Enhanced Email enabled in the org? That might be related to whether the EmailMessage object appears for those objects perhaps. Just guessing though.


  13. Hi Doug,
    I remember doing a POC back in Nov 2018 where I was able to Upload a file from Content Library from the Files related list of a record. Now it’s giving me only option is to select a file from PC. Has anything changed in the Winter 19 release or that was never an option ?

    Liked by 1 person

      1. Doug, As an admin I have the permission granted. I do see the option to Add files in lightning but in classic only Upload file button is available on the related list. Perhaps it’s only possible in Lightning Experience.
        Thanks for your response !!!!

        Liked by 1 person

  14. Hi Doug!

    I have been playing around with sharing files to community users for days now. If a community user uploads a file to an account, that file is accessible via internal and external users. We have some files that are currently set to InternalUsers, that we want to change to ‘AllUsers’, making them visible to the community users . I have tried changing the owner of these files to a community user, which DOES change the visibility, however, that files does not end up actually being visible to that community user, even if they are now the owner. Is there something else I need to do? Or, is the only way to share files with community users via Chatter? If so, is there a way to mass upload files to chatter?

    Liked by 1 person

    1. Hi Kris,

      Re-sharing the file via Chatter and choosing the visibility of the post is one way to change a file from “internal users” to “all users”.

      To do this in bulk, note that the visibility of files is driven by the ContentDocumentLink object that shares a file to a record. You could try bulk updating ContentDocumentLink records of the files and change the Visibility field value to “AllUsers”.



  15. Hi, is there an easy was in Lightning to upload a google doc as a file, just using a URL reference (like it used to work with documents in Classic) instead of going thru the whole process of connecting the whole Google drive thru FileConnect? Thx!

    Liked by 1 person

    1. Hi Daniel, no, not that I’m aware of. To share files via Google Drive, SharePoint, Quip, etc. you need to set up Files Connect which understands how to use those APIs to expose files in Salesforce.


    1. Hi yehuda, thanks for the kind feedback about the app! At this time the Related Files Lightning app only shows files of child related records from the record you’re viewing — it does not show files of parent or sibling records.


  16. Hi Doug! We have 6MM attachments in Classic (crazy, I know). About 3.4MM attachments are old and we plan to store locally and write a URL back to a custom field in a new ContentDocument record. The remaining 2.7MM attachments need to be converted to files.
    1. Will your conversion tool have any issues with these volumes?
    2. Apart from the actual database blobs that hold the binary files, will creating 6MM+ new ContentDocument records count against Data Storage limits?

    Liked by 1 person

    1. Hi Steve,

      Thanks for considering my attachment-to-file converter. That’s a lot of attachments!

      My conversion tool uses a batch apex class. Batch apex supports querying up to 50MM records, so it would be able to handle 6MM attachments.

      However, at your scale, there are other governor limits in the org that you’re likely to hit and will require the conversion to occur over multiple days.

      Files are represented as ContentVersion and ContentDocument objects, and each org has a limit to how many of them can be published per day. The default in production orgs is 200,000 per day and per this article can be increased up to 500,000 per day. You’ll need to log a ticket with Support and explain your use case to see if you’re able to get a limit even higher. If not, you need to split your conversion job of X number of attachments by Y conversion per day + what allowable conversions you want your users to be able to do themselves (e.g. any time a user uploads a file to the org or shares a file via Files related list or via Chatter, that too counts against the limit).

      My app in its current form has a blunt tool for limiting the amount of attachments that should be converted at a time by offering a textarea box where you can specify a comma-delimited list of record ids whose attachments to convert. The other option is to let the job run until it exhausts your daily publish limit, wait until the limits reset, then run again. Rinse and repeat. I know customers that have done this approach and eventually you get through it.

      Another limit example, the maximum number of asynchronous Apex method executions (batch Apex, future methods, Queueable Apex, and scheduled Apex) per a 24-hour period is 250,000 or the number of user licenses in your org multiplied by 200, whichever is greater. Depending on the batch size you use for the conversion (a value between 1 and 200), the batch job would consume at least 30,000 of those executions (6MM divided by batch size of 200 = 30,000). Other async code in the org may be consuming executions, too. 30K doesn’t seem much against 250K+, but it something to be aware of since you’re exploring.

      To crunch through that many records with a single batch job, there’s also the possibility that the batch job gets hung due to infrastructure reasons out of our control. If that happens (meaning, in Setup menu on the Apex Jobs page you stop seeing the Items Processed count increasing), you may need to abort that job and restart it. The app keeps track of which attachments it has converted to avoid creating duplicates.

      Hope that helps!

      Reference: Apex Governor Limits

      Reference: Increase the Maximum number of ‘Content Versions’ published per day


  17. Any considerations for using Enhanced notes in conjunction w/ Partner Communities? We’ve been using Notes & Attachments for a long time in a Visualforce + Tabs partner community and need to get over to Lightning but if we convert to a lightning community notes are no longer available. Trying to think of an alternative and coming up empty. Not sure if you’ve come across anything


  18. Hi Doug
    Thanks for this amazing tool !
    When we are roll out the project of convert all note & attachment to note and file using this tool, there’s a question we have : we want to know how many objects and their page layout are without note&attachment related list which we want to mass update their page layouts to add “note”, “file” related list ( since we have around 190 page layouts need to do this, we are searching any efficient way ) but as we know, the “page layout” tab in this tool right now only can show all objects that HAVE “note&attachment” related list and mass update page layout while we want a way to show all objects that WITHOUT “note&attachment” related list and mass update page layout . Thanks!


  19. Hi Doug,
    Thank you for such an informative post. I’ve been trying to make Notes & Attachments/files private by default. we are looking to add quite a lot of attachments to custom object records but we only want certain people to view those files and not everyone who has got access to those records in question. I know you can do it by editing it after it’s been uploaded (
    I think there is a possibility by creating a Trigger on ‘content version’ but unfortunately I’m not a developer so I would prefer to stick with declarative tools if possible.
    Any help would be really appreciated.


  20. Hi Doug,

    This is brilliant, exactly what we were looking to implement and certainly saved on lot of development. Though I wanted to check if it’s possible to implement Salesforce File Related Records on Many to Many relationship. For Example, I have the following use case
    Client(Person Account) (Master) -> Household Member (Detail)
    Household (Master) -> Household Member (Detail)
    I would like to see files from “Client” to be visible under “Household” and vice versa
    This would really help us.


  21. Hello Doug. Your work has been very helpful. I have a business requirement that at first look, does not look possible, at least OOTB. I can add Enhanced Notes to a record. Sharing rules on the community allow my partner user to see that record and the notes attached.

    Opening the note, they see the contents and that it is READ ONLY. The partner can also add their own note (in the new note box, upper right, states Visibility Set By Record). Opening this note, they can modify it as expected.

    The business need is for internal employees to be able to create notes and decide to make them visible to the portal user that can also see the record or make visible ONLY to internal audiences.

    Is this possible?

    Many thanks, Gerald Demers


Leave a Reply

Fill in your details below or click an icon to log in: Logo

You are commenting using your account. Log Out /  Change )

Twitter picture

You are commenting using your Twitter account. Log Out /  Change )

Facebook photo

You are commenting using your Facebook account. Log Out /  Change )

Connecting to %s

%d bloggers like this: