Created
May 30, 2014 18:08
-
-
Save jeffdonthemic/3f00e51b372a4fa6f855 to your computer and use it in GitHub Desktop.
Visualforce Page for customizing Attachments. See UploadAttachmentController.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
<apex:page standardController="Contact" tabStyle="Contact" extensions="UploadAttachmentController"> | |
<apex:sectionHeader title="{!Contact.Name}" subtitle="Attach File"/> | |
<apex:form id="form_Upload"> | |
<apex:pageBlock > | |
<apex:pageBlockButtons > | |
<apex:commandButton action="{!back}" value="Back to {!Contact.Name}"/> | |
<apex:commandButton action="{!back}" value="Cancel"/> | |
</apex:pageBlockButtons> | |
<apex:pageMessages /> | |
<apex:pageBlockSection columns="1"> | |
<apex:pageBlockSectionItem > | |
<apex:outputLabel value="File" for="file_File"/> | |
<apex:inputFile id="file_File" value="{!fileBody}" filename="{!fileName}"/> | |
</apex:pageBlockSectionItem> | |
<apex:pageBlockSectionItem > | |
<apex:outputLabel value="Type" for="type"/> | |
<apex:selectList value="{!selectedType}" size="1" id="type"> | |
<apex:selectOption itemValue="Plain ole awesome" itemLabel="Plain ole awesome"/> | |
<apex:selectOption itemValue="Super awesome" itemLabel="Super awesome"/> | |
<apex:selectOption itemValue="Most awesomest" itemLabel="Most awesomest"/> | |
</apex:selectList> | |
</apex:pageBlockSectionItem> | |
<apex:pageBlockSectionItem > | |
<apex:outputLabel value="Is the file awesome?" for="visible"/> | |
<apex:selectList value="{!selectedAwesomeness}" size="1" id="visible"> | |
<apex:selectOption itemValue="false" itemLabel="No"/> | |
<apex:selectOption itemValue="true" itemLabel="Yes"/> | |
</apex:selectList> | |
</apex:pageBlockSectionItem> | |
<apex:pageBlockSectionItem > | |
<apex:outputLabel value="Description" for="description"/> | |
<apex:inputTextarea id="description" value="{!description}" rows="4" cols="50"/> | |
</apex:pageBlockSectionItem> | |
<apex:pageBlockSectionItem > | |
<apex:outputLabel value="" for="uploadBtn"/> | |
<apex:commandButton id="uploadBtn" value="Attach File" action="{!processUpload}" /> | |
</apex:pageBlockSectionItem> | |
</apex:pageBlockSection> | |
</apex:pageBlock> | |
</apex:form> | |
</apex:page> |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
public class UploadAttachmentController { | |
public String selectedType {get;set;} | |
public Boolean selectedAwesomeness {get;set;} | |
public String description {get;set;} | |
private Contact contact {get;set;} | |
public String fileName {get;set;} | |
public Blob fileBody {get;set;} | |
public UploadAttachmentController(ApexPages.StandardController controller) { | |
this.contact = (Contact)controller.getRecord(); | |
} | |
// creates a new Contact_Attachment__c record | |
private Database.SaveResult saveCustomAttachment() { | |
Contact_Attachment__c obj = new Contact_Attachment__c(); | |
obj.contact__c = contact.Id; | |
obj.description__c = description; | |
obj.type__c = selectedType; | |
obj.awesome__c = selectedAwesomeness; | |
// fill out cust obj fields | |
return Database.insert(obj); | |
} | |
// create an actual Attachment record with the Contact_Attachment__c as parent | |
private Database.SaveResult saveStandardAttachment(Id parentId) { | |
Database.SaveResult result; | |
Attachment attachment = new Attachment(); | |
attachment.body = this.fileBody; | |
attachment.name = this.fileName; | |
attachment.parentId = parentId; | |
// inser the attahcment | |
result = Database.insert(attachment); | |
// reset the file for the view state | |
fileBody = Blob.valueOf(' '); | |
return result; | |
} | |
/** | |
* Upload process is: | |
* 1. Insert new Contact_Attachment__c record | |
* 2. Insert new Attachment with the new Contact_Attachment__c record as parent | |
* 3. Update the Contact_Attachment__c record with the ID of the new Attachment | |
**/ | |
public PageReference processUpload() { | |
try { | |
Database.SaveResult customAttachmentResult = saveCustomAttachment(); | |
if (customAttachmentResult == null || !customAttachmentResult.isSuccess()) { | |
ApexPages.AddMessage(new ApexPages.Message(ApexPages.Severity.ERROR, | |
'Could not save attachment.')); | |
return null; | |
} | |
Database.SaveResult attachmentResult = saveStandardAttachment(customAttachmentResult.getId()); | |
if (attachmentResult == null || !attachmentResult.isSuccess()) { | |
ApexPages.AddMessage(new ApexPages.Message(ApexPages.Severity.ERROR, | |
'Could not save attachment.')); | |
return null; | |
} else { | |
// update the custom attachment record with some attachment info | |
Contact_Attachment__c customAttachment = [select id from Contact_Attachment__c where id = :customAttachmentResult.getId()]; | |
customAttachment.name = this.fileName; | |
customAttachment.Attachment__c = attachmentResult.getId(); | |
update customAttachment; | |
} | |
} catch (Exception e) { | |
ApexPages.AddMessages(e); | |
return null; | |
} | |
return new PageReference('/'+contact.Id); | |
} | |
public PageReference back() { | |
return new PageReference('/'+contact.Id); | |
} | |
} |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Hi Jeff,
I would also like to know if you have test cases for this so I can deploy into production.
Thanks