I have a visualforce page having a Case detail view from which there is a link which opens a new visualforce Page for attachment for that particular case. I am opening that attachment visualforce page by passing the values through Query string.
<apex:outputLink styleClass="btn btn-link" target="_top"
value="/WSC_NewAttachment_Case?varCaseId={!Case.Id}&varUpload=1">
New Attachment
</apex:outputLink>
Then there is a the visualforce Page and controller.
The problem is that even through the attachment is working fine, I am not able to redirect the user back to the Case Detail page from which the user clicked the New Attachment link (button). After attachment the user stays on the same attachment visualforce page. User should be redirected back to Case Detail on Finish Uploading & Submit with No attachment (or Cancel) button. Please tell me the best way to redirect user back to their selected CaseDetail page preferablly using visualforce or Apex as well (if Needed).
// The visualforce Page:
<apex:page controller="WSC_NewAttachment_Case" docType="html-5.0" showHeader="false" sidebar="false" cache="false" standardStylesheets="true">
<head>
<!-- Insert global site header css and meta tags-->
<c:AWSHeader />
<style type="text/css">
#main-content{
margin-left: 0px;
}
</style>
</head>
<body>
<!-- container section start -->
<section id="container" class="">
<!-- Header Bar -->
<c:AWSHeaderBar />
<!--header end-->
<!--main content start-->
<section id="main-content" style="width:100%;">
<section class="wrapper">
<!--
<flow:interview id="flowId" name="Drinking_Water_Enquiry_or_concern" finishLocation="{!URLFOR('/AWSHome')}" interview="{!myflow}" rendered="{! NOT(upload)}">
<apex:param name="varRetailerContactEmail" value="{!$User.Email}"/>
</flow:interview>
-->
<apex:form enctype="multipart/form-data">
<apex:outputPanel id="theAttachmentPanel" >
<apex:sectionHeader title="Attachment Upload (Upto 10 MB)"/>
<apex:pageMessages />
<apex:pageBlock title="Upload an Attachment">
<apex:pageBlockButtons >
<apex:commandButton action="{!SaveMore}" value="Upload More"/>
<apex:commandButton action="{!Save}" value="Finish Uploading" />
<apex:commandButton action="{!Cancel}" value="Submit with no Attachment" />
</apex:pageBlockButtons>
<apex:pageBlockSection showHeader="false" columns="2" id="block1">
<apex:pageBlockSectionItem >
<apex:outputLabel value="File Name" for=" filesName "/>
<!-- <apex:inputText value="{!attachment.name}" id="filesName"/> -->
<apex:inputText value="{!displayName}" id="filesName"/>
</apex:pageBlockSectionItem>
<apex:pageBlockSectionItem >
<apex:outputLabel value="File" for="file"/>
<apex:inputFile value="{!attachment.body}" filename="{!fName}" id="file"/>
</apex:pageBlockSectionItem>
<apex:pageBlockSectionItem >
<apex:outputLabel value="Description" for="description"/>
<apex:inputTextarea value="{!attachment.description}" id="description"/>
</apex:pageBlockSectionItem>
</apex:pageBlockSection>
</apex:pageBlock>
</apex:outputPanel>
</apex:form>
</section>
</section>
</section>
</body>
`
// And the relating Apex Class (Controller):
public with sharing class WSC_NewAttachment_Case {
// The attachment object
public Attachment attachment {
get {
if (attachment == null)
attachment = new Attachment();
return attachment;
}
set;
}
// Specific flow name for flow type
public String varCaseId = ApexPages.currentPage().getParameters().get( 'varCaseId' );
public String varUpload = ApexPages.currentPage().getParameters().get( 'varUpload' );
public Boolean upload;
public Boolean uploaded = false;
public String fName{ get; set;}
public String displayName{get; set;}
// The Case Id value from the flow
public String getvarCaseId()
{
return varCaseId;
}
// The varUpload variable value from the flow
//public String getvarUpload()
// {
// If(myFlow == null)
// Return String.valueOf('0');
// Else
// Return myflow.varUpload;
//}
Public Boolean getupload()
{
If(varUpload == '1' && uploaded!= null && uploaded == false)
Return true;
else
Return false;
}
// Save method, leading to next step
public PageReference Save()
{
return upload(System.Boolean.valueOf(true));
}
// Save More method, leading to the attachment upload functionality again
public PageReference SaveMore()
{
return upload(System.Boolean.valueOf(false));
}
// Cancel method, leading to next step in flow
public PageReference Cancel()
{
This.uploaded = true;
attachment = null;
return null;
}
// Upload method for actual attachment upload, setting the upload variable appropriately to allow/ not allow another attachment upload
public PageReference upload(Boolean varUploaded)
{
attachment.OwnerId = UserInfo.getUserId();
attachment.ParentId = varCaseId; // 'a0C61000004sw8h'; // the record the file is attached to
attachment.IsPrivate = true;
if( (!(attachment.name != null && attachment.name != '')) && (fName != null && fName != ''))
{
String afterExt = fName.substringAfter('.');
System.debug('afterExt :: ' + afterExt );
if(displayName != null && displayName != '')
{
attachment.name = displayName + '.' + afterExt;
}
else
attachment.name = fName;
}
try
{
if(!(attachment.body != null))
{
ApexPages.addMessage(new ApexPages.message(ApexPages.severity.ERROR, 'Please specify a file to be uploaded'));
}
else if (!(attachment.name != null && attachment.name != ''))
{
ApexPages.addMessage(new ApexPages.message(ApexPages.severity.INFO, 'Please specify a file name'));
}
insert attachment;
displayName = '';
fName = '';
}
catch (DMLException e)
{
ApexPages.addMessage(new ApexPages.message(ApexPages.severity.ERROR,'Error uploading attachment'));
return null;
}
finally
{
attachment = new Attachment();
}
//ApexPages.addMessage(new ApexPages.message(ApexPages.severity.INFO,'Attachment uploaded successfully'));
This.uploaded = varUploaded;
// true for save and false for Save more
return null;
// End of upload
}
}