August 13, 2019

How to fetch and show all the Notes for a record using Lightning Web Component in Salesforce?

Apex Class:

  1. public with sharing class PrintNotesController {  
  2.   
  3.     @AuraEnabled( cacheable=true )    
  4.     public static List < NoteWrapper > fetchNotes( String strRecordId )  {  
  5.           
  6.         List < NoteWrapper > listNoteWrappers = new List < NoteWrapper >();  
  7.         Set < Id > setDocIds = new Set < Id >();  
  8.         for ( ContentDocumentLink objCDL : [ SELECT ContentDocumentId FROM ContentDocumentLink  WHERE LinkedEntityId =: strRecordId ] )  
  9.             setDocIds.add( objCDL.ContentDocumentId );  
  10.         for( ContentNote objNote : [ SELECT Title, Content, CreatedDate FROM ContentNote WHERE Id IN: setDocIds ORDER BY CreatedDate ] ) {  
  11.   
  12.             NoteWrapper objWrapper = new NoteWrapper();  
  13.             objWrapper.strTitle = objNote.Title;  
  14.             //Below replaceAll removes all the HTML tags from the Content  
  15.             objWrapper.strNotes = objNote.Content.toString().replaceAll( '<[^>]+>',' ' );  
  16.             objWrapper.strCreatedDate = String.valueOf( objNote.CreatedDate.date() );  
  17.             listNoteWrappers.add( objWrapper );  
  18.   
  19.         }  
  20.         return listNoteWrappers;  
  21.   
  22.     }  
  23.   
  24.     public class NoteWrapper {  
  25.   
  26.         @AuraEnabled  
  27.         public String strTitle;  
  28.         @AuraEnabled  
  29.         public String strNotes;  
  30.         @AuraEnabled  
  31.         public String strCreatedDate;  
  32.   
  33.     }  
  34.   
  35. }  

Lighting Web Component HTML:

  1. <template>  
  2.       
  3.     <div class="slds-m-around_medium">    
  4.   
  5.         <div if:true={records.data}>    
  6.   
  7.             <template for:each={records.data} for:item="rec">   
  8.                 <b key={rec.Id}>{rec.strCreatedDate} - {rec.strTitle}</b><br key={rec.Id}/>  
  9.                 {rec.strNotes}<br key={rec.Id}/><br key={rec.Id}/>  
  10.             </template>  
  11.   
  12.         </div>  
  13.   
  14.     </div>  
  15.   
  16. </template>  

Lighting Web Component JavaScript:

  1. import { LightningElement,api,wire } from 'lwc';  
  2. import fetchNotes from '@salesforce/apex/PrintNotesController.fetchNotes';  
  3.   
  4. export default class PrintNotesLWC extends LightningElement {  
  5.   
  6.     @api recId;      
  7.     @wire(fetchNotes, { strRecordId: '$recId' })    
  8.     records;   
  9.   
  10. }  

Lightning Web Component JavaScript meta.xml:

  1. <?xml version="1.0" encoding="UTF-8"?>  
  2. <LightningComponentBundle xmlns="http://soap.sforce.com/2006/04/metadata" fqn="PrintNotesLWC">  
  3.     <apiVersion>46.0</apiVersion>  
  4.     <isExposed>false</isExposed>      
  5.     <targets>    
  6.         <target>lightning__RecordPage</target>    
  7.     </targets>    
  8.     <targetConfigs>    
  9.         <targetConfig targets="lightning__RecordPage">    
  10.             <property name="recId" type="String" label="Record Id" description="Record Id"/>    
  11.         </targetConfig>  
  12.     </targetConfigs>      
  13. </LightningComponentBundle>  

Lightning Component:

  1. <aura:component implements = "force:lightningQuickActionWithoutHeader,force:hasRecordId">  
  2.     <c:printNotesLWC recId="{!v.recordId}"/>  
  3. </aura:component>   

Quick Action:

Output:


No comments:

Post a Comment