Drag & Drop File Upload (part 1)

October 27, 2016


I have been planning to do this for over a year now, finally found the time. Started learning HTML5 (I recommend Pluralsight courses), and this is my first project.

In version 2016, Microsoft finally introduced some drag & drop file upload for the Word/Excel template feature, but that’s it. I would like to have similar UX in entity forms and Dashboards.

In this two-parts post, I’ll describe a working solution that allows users to upload a file by dragging it to a specific area in any business entity form or Dashboard.
The solution version available in this post adds an uploaded file as an attachment to a new Note record related to the context business entity. The next post version will use a more modular approach that can be used if you manage files outside of Microsoft Dynamics CRM database.


An unmanaged solution can be downloaded here. Feel free to change the code to better suit you needs.

As this solution relies on HTML5 features, it will probably not work with early browsers versions. I tested it successfully with IE 11, Edge and Google Chrome v54.0.2840.71.
The solution uses the Web API service and therefore suitable for Microsoft Dynamics CRM 2016 Online and on-premise. For earlier MSCRM versions, some changes are required (read the Bits & Bytes section below)

Drag and Drop demo

Using the Solution

  1. Download, import and publish the Drag & Drop File Upload solution
  2. Add a Web Resource control to any business entity form
  3. In the Web Resource form, make sure the “Pass record object-type code…” option is checked
  4. Set the Web Resource format to span over 13 rows at least
  5. Map the Web Resource control to the dyn_DnDFileUploadArea.htm Web Resource
  6. Save & publish
  7. Drag n Drop like crazy


Bits & Bytes

  • The solution code portion is contained in the dyn_DnDServices.js Web Resource
  • As the code uses Web API to create a Note record, it will not work with versions earlier than 2016. You can adapt the solution to earlier MSCRM versions by changing the createRecord function in the dyn_DnDServices.js Web Resource to use the OrgannizationData Service (REST) or the Organization Service (SOAP) to create a Note (Annotation) record
  • The code prevents uploading some file types (exe, js, etc.) according to the default blocked file extensions defined in the System Settings area. Maximum uploaded file size is also limited. Both settings are managed as constants and can be easily changed

    Managing blocked files extentions and file size settings   

  • I considered retrieving the blocked file extensions from the server instead of managing as constant. I opted for constants as I rather have better performance all year round over minor maintenance effort required once a year or maybe never 
  • You can can position the dyn_DnDFileUploadArea.htm Web Resource in a Dashboard. It will create Note record along with file attachment but will not relate it to any business record
  • Unfortunately, there is no supported manner to refresh the native Notes control. It would have been useful to automatically display the latest note after uploading a file
Add comment
facebook linkedin twitter email

Leave a Reply to rdt Cancel Reply

Your email address will not be published.

You may use these HTML tags and attributes: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <s> <strike> <strong>



  1. RaztyDecember 14, 2016 ב 9:20 PM

    Get Feature!!!

    After importing the solution and following your steps I have implemented but am getting the Something went wrong “General” error message when I test. What else do I need to do to make this work? I am ruining CRM 2016 version.

    1. rdtJuly 4, 2017 ב 5:22 PM

      Are you using Is it version 8.0, 8.1 or 8.2?

  2. Jon RJanuary 4, 2017 ב 7:14 PM

    Imported the unmanaged soliton successfully and completed steps you provided but get the “Something went wrong” message when I attach a file and click on the Done button. I get no other error messages.

  3. HarshaMarch 15, 2017 ב 4:52 AM

    Nice Post..!! But when I try this on my Dynamics CRM 2016 instance, I am getting “Something went wrong” as a message. I did check in the JS, it shows, 500 error sometimes and 400 error sometimes. I appreciate if you could help me on this.

  4. Lukas PuplauskasJune 22, 2017 ב 10:24 AM

    First wanted to thank you for great post.

    At first, I also received 500 and 400 error. However, found a cause of them. In my case, it was due to “OData_endpoint_Suffix” (mine was 8.2 not 8.0) and the main problem was with “annotioData.contextRecordId”, it had flower brackets ({}). So “annotioData.contextRecordId” was passed with them to JSON and that was causing error. To remove flower brackets “annotioData.contextRecordId.slice(1,-1)”

    1. rdtJuly 4, 2017 ב 5:15 PM

      Thanks you Lukas for specifying the problem and the solution. Will publish a fixed version soon