You need to sign in to do that
Don't have an account?
matthew.field
Saving a record and adding attachments
I am working on a project to create a VF page where the user can add multiple attachments when creating a record. Someone suggested the controller listed below, and while it will save the attachments, it isn't saving any of the information entered in the VF page for the Incident Report. If anyone can take a look at this and tell me why the Incident Report isn't being saved, I would truly appreciate it.
APEX CLASS
Here is the Visualforce page:
Visualforce Page
Again, any help is greatly appreciated.
Thanks,
Matt
APEX CLASS
public class AddMultipleAttachments { public Incident_Reports__c objIncidentReport { get; set; } public Attachment attachment1 { get; set; } public Attachment attachment2 { get; set; } public Attachment attachment3 { get; set; } public AddMultipleAttachments (ApexPages.StandardController stdController) { // Record and Attachments to be inserted objIncidentReport = new Incident_Reports__c(); attachment1 = new Attachment(); attachment2 = new Attachment(); attachment3 = new Attachment(); } public PageReference createRecordAndAttachments() { Savepoint sp = Database.setSavepoint(); try { // Insert the record insert objIncidentReport; // Insert Attachments; List<Attachment> toInsert = new List<Attachment>(); if(attachment1.Name != null) { attachment1.ParentId = objIncidentReport.Id; toInsert.add(attachment1); } if(attachment2.Name != null) { attachment2.ParentId = objIncidentReport.Id; toInsert.add(attachment2); } if(attachment3.Name != null) { attachment3.ParentId = objIncidentReport.Id; toInsert.add(attachment3); } if(toInsert.size() > 0) insert toInsert; } catch(Exception ex) { Database.rollback(sp); ApexPages.Message msg = new ApexPages.Message(ApexPages.Severity.ERROR, ex.getMessage()); ApexPages.addMessage(msg); } // View the record PageReference page = ApexPages.currentPage(); page.setRedirect(true); return page; } }
Here is the Visualforce page:
Visualforce Page
<apex:page standardController="Incident_Reports__c" extensions="AddMultipleAttachments"> <apex:sectionHeader title="Property Incident Reports Edit" subtitle="{!Incident_Reports__c.Name}"/> <apex:form > <apex:commandButton value="Save" action="{!save}"/> <apex:commandButton value="Save with Attachments" action="{!createRecordAndAttachments}"/> <apex:commandButton value="Cancel" action="{!cancel}"/> <apex:pageBlock title="Property Incident Reports Edit" mode="edit" id="thePageBlock"> <apex:pagemessages /> <apex:pageBlockSection columns="1"> <apex:outputText value="ATTENTION: Attorney work product/privileged document (for internal use only). NOT for Associate Injuries, use Worker's Comp Incident Report." style="font-weight:800"/> <apex:outputText value="RED LINES REPRESENT REQUIRED FIELDS" style="color:red" /> </apex:pageBlockSection> <apex:pageBlockSection title="Property Information" columns="2"> <apex:inputField value="{!Incident_Reports__c.Property__c}" required="true"/> </apex:pageBlockSection> <apex:pageBlockSection title="Claimant Information" columns="2"> <apex:inputField value="{!Incident_Reports__c.Claimant_s_Name__c}" required="false"/> <apex:inputField value="{!Incident_Reports__c.Claimant_s_Gender__c}" required="false"/> <apex:inputField value="{!Incident_Reports__c.Claimant_s_Address__c}" required="false"/> <apex:inputField value="{!Incident_Reports__c.Claimant_s_Age__c}" required="false"/> <apex:inputField value="{!Incident_Reports__c.Claimant_s_Date_of_Birth__c}" required="false"/> <apex:inputField value="{!Incident_Reports__c.Claimant_s_Phone_Number__c}" required="false"/> <apex:inputField value="{!Incident_Reports__c.Claimant_s_Phone_Number_Other__c}" required="false"/> <apex:inputField value="{!Incident_Reports__c.Claimant_s_Occupation__c}" required="false"/> <apex:inputField value="{!Incident_Reports__c.Alliance_Associate__c}" required="false"/> </apex:pageBlockSection> </apex:pageBlock> <apex:pageBlock title="Incident Information" mode="edit" id="Incident"> <apex:actionRegion > <apex:pageBlockSection title="Incident Type" columns="1"> <apex:pageBlockSectionItem > <apex:outputLabel value="Type of Incident"/> <apex:outputPanel > <apex:inputField value="{!Incident_Reports__c.Type_of_Incident__c}" required="TRUE"> <apex:actionSupport event="onchange" rerender="Incident" status="IncidentType"/> </apex:inputField> <apex:actionStatus startText="applying value..." id="IncidentType"/> </apex:outputPanel> </apex:pageBlockSectionItem> </apex:pageBlockSection> </apex:actionRegion> <apex:actionRegion > <apex:pageBlockSection title="Incident Information" columns="2"> <apex:inputField value="{!Incident_Reports__c.Date_Time_of_Incident__c}" required="false"/> <apex:inputField value="{!Incident_Reports__c.Date_Time_Incident_Reported__c}" required="false"/> <apex:inputField value="{!Incident_Reports__c.Pictures_Attached__c}" required="false"/> <apex:inputField value="{!Incident_Reports__c.Property_Owner_Notified__c}" required="false"/> <apex:pageBlockSectionItem helpText="Check this box if Police, Fire or Ambulance were dispatched to the property."> <apex:outputLabel value="Emergency Services Called"/> <apex:outputPanel > <apex:inputField value="{!Incident_Reports__c.Emergency_Services_Required__c}" label="Check if Police, Fire or Ambulance were dispatched to the property."> <apex:actionSupport event="onclick" rerender="Incident" status="status"/> </apex:inputField> <apex:actionStatus startText="applying value..." id="status"/> </apex:outputPanel> </apex:pageBlockSectionItem> </apex:pageBlockSection> </apex:actionRegion> <apex:actionRegion > <apex:pageBlockSection title="Responding Agencies" id="agencies" columns="2" rendered="{!Incident_Reports__c.Emergency_Services_Required__c == TRUE}"> <apex:pageBlockSectionItem > <apex:outputLabel value="Police Department"/> <apex:outputPanel > <apex:inputField value="{!Incident_Reports__c.Police_Responded__c}"> <apex:actionSupport event="onclick" rerender="Incident" status="status1"/> </apex:inputField> <apex:actionStatus startText="adding Police Department block..." id="status1"/> </apex:outputPanel> </apex:pageBlockSectionItem> <apex:pageBlockSectionItem > <apex:outputLabel value="Fire Department"/> <apex:outputPanel > <apex:inputField value="{!Incident_Reports__c.Fire_Department_Responded__c}"> <apex:actionSupport event="onclick" rerender="Incident" status="status2"/> </apex:inputField> <apex:actionStatus startText="adding Fire Department block..." id="status2"/> </apex:outputPanel> </apex:pageBlockSectionItem> <apex:pageBlockSectionItem > <apex:outputLabel value="Ambulance Service"/> <apex:outputPanel > <apex:inputField value="{!Incident_Reports__c.Ambulance_Company_Responded__c}"> <apex:actionSupport event="onclick" rerender="Incident" status="status3"/> </apex:inputField> <apex:actionStatus startText="adding Ambulance Service block..." id="status3"/> </apex:outputPanel> </apex:pageBlockSectionItem> <apex:pageBlockSectionItem > <apex:outputLabel value="Other Emergency Service"/> <apex:outputPanel > <apex:inputField value="{!Incident_Reports__c.Other_Department_Responded__c}"> <apex:actionSupport event="onclick" rerender="Incident" status="status4"/> </apex:inputField> <apex:actionStatus startText="adding Other Emergency Service block..." id="status4"/> </apex:outputPanel> </apex:pageBlockSectionItem> </apex:pageBlockSection> </apex:actionRegion> <apex:pageBlockSection title="Police Department Information" id="police" columns="2" rendered="{!Incident_Reports__c.Police_Responded__c == TRUE}"> <apex:inputField value="{!Incident_Reports__c.Police_Department_Name__c}" label="Police Department Name"/> <apex:inputField value="{!Incident_Reports__c.Police_Report_Number__c}" label="Police Report Number"/> </apex:pageBlockSection> <apex:pageBlockSection title="Fire Department Information" columns="2" rendered="{!Incident_Reports__c.Fire_Department_Responded__c == TRUE}"> <apex:inputField value="{!Incident_Reports__c.Fire_Department_Name__c}" label="Fire Department Name"/> <apex:inputField value="{!Incident_Reports__c.Fire_Dept_Report_Number__c}" label="Fire Dept. Report Number"/> </apex:pageBlockSection> <apex:pageBlockSection title="Ambulance Information" columns="2" rendered="{!Incident_Reports__c.Ambulance_Company_Responded__c == TRUE}"> <apex:inputField value="{!Incident_Reports__c.Ambulance_Company_Name__c}" label="Ambulance Company Name"/> <apex:inputField value="{!Incident_Reports__c.Ambulance_Company_Report_Number__c}" label="Ambulance Co. Report Number"/> <apex:inputField value="{!Incident_Reports__c.Hospital_Name__c}" label="Hospital Taken To (if applicable)"/> </apex:pageBlockSection> <apex:pageBlockSection title="Other Emergency Services" columns="2" rendered="{!Incident_Reports__c.Other_Department_Responded__c == TRUE}"> <apex:inputField value="{!Incident_Reports__c.Other_Respondant__c}" label="Other Department Name"/> <apex:inputField value="{!Incident_Reports__c.Other_Report_Number__c}" label="Other Department Report Number"/> </apex:pageBlockSection> <apex:pageBlockSection title="Moisture / Flooding" columns="3" rendered="{!Incident_Reports__c.Type_of_Incident__c == 'Flood/Moisture'}" id="FloodingSection"> <apex:inputTextarea value="{!Incident_Reports__c.Affected_Area__c}" label="Describe Affected Area" cols="40" rows="8"/> <apex:inputTextarea value="{!Incident_Reports__c.Source_Cause_of_Moisture__c}" label="Describe Cause of Moisture" cols="40" rows="8"/> <apex:inputTextarea value="{!Incident_Reports__c.Personal_Property_Damage__c}" label="Detail Damage to Personal Property" cols="40" rows="8"/> <apex:inputField value="{!Incident_Reports__c.Date_Notification_Letter_Sent__c}" label="Date Notification Letter Sent"/> <apex:inputField value="{!Incident_Reports__c.Date_Option_Letter_Given__c}" label="Date Option Letter Given"/> <apex:inputField value="{!Incident_Reports__c.Date_Option_Letter_Received__c}" label="Date Option Letter Received"/> <apex:inputField value="{!Incident_Reports__c.Follow_Up_Call_Completed__c}" label="Date Follow-up Call Completed"/> <apex:inputField value="{!Incident_Reports__c.Follow_Up_Call_Associate__c}" label="Name of Associate Conducting Call"/> <apex:inputTextarea value="{!Incident_Reports__c.Result_of_Conversation__c}" label="Result of Conversation" cols="40" rows="8"/> </apex:pageBlockSection> </apex:pageBlock> <apex:pageBlock title="Add Attachments"> <apex:pageBlockSection title="Attachment 1" > <apex:inputFile value="{!attachment1.body}" fileName="{!attachment1.name}"/> </apex:pageBlockSection> <apex:pageBlockSection title="Attachment 2" > <apex:inputFile value="{!attachment2.body}" fileName="{!attachment2.name}"/> </apex:pageBlockSection> <apex:pageBlockSection title="Attachment 3" > <apex:inputFile value="{!attachment3.body}" fileName="{!attachment3.name}"/> </apex:pageBlockSection> </apex:pageBlock> </apex:form> </apex:page>
Again, any help is greatly appreciated.
Thanks,
Matt
NOTE: This code has not been tested and may contain typographical or logical errors.
All Answers
NOTE: This code has not been tested and may contain typographical or logical errors.
I'm strugling with test class for the multiple attachment upload. I face an issue against this "this" part, not sure how I can add that into my test class correctly. Had many attemps, but don't get coverage for the "if" syntax.
Can you help out here with a simple example related to your controller class?
I know this may seem like an unrelated thought, but do you suppose this has anything to do with Salesforce doing away with Attachments in Lightning?
Otherwise, do you have any suggestions for troubleshooting?
Thanks,
Thomas