function readOnly(count){ }
Starting November 20, the site will be set to read-only. On December 4, 2023,
forum discussions will move to the Trailblazer Community.
+ Start a Discussion
Renato MoranRenato Moran 

Problem returning record id. It comes as null.

In the code below a Visualforce was created to attach documents and photos in Salesforce in a customized way. However, when making the attachment, it is not returning the record id. Does anyone know why?

Visualforce Page in Case Object
<apex:page standardController="Case" tabStyle="Case" extensions="UploadAttachmentController">

 <apex:sectionHeader title="{!Case.CaseNumber}" subtitle="Attach File"/>
 
 <apex:form id="form_Upload">
 <apex:pageBlock >

 <apex:pageBlockButtons >
   <apex:commandButton action="{!back}" value="Back to {!Case.CaseNumber}"/>
   <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="Normal" itemLabel="Normal"/>
        <apex:selectOption itemValue="Jurídico" itemLabel="Jurídico"/>
      </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>

Controller in Case Object
 
public class UploadAttachmentController {
    
    public String selectedType {get;set;}
    public Boolean selectedAwesomeness {get;set;}
    public String description {get;set;}
    public Case caso{get;set;} 
    public String fileName {get;set;}
    public Blob fileBody {get;set;}
    
    public UploadAttachmentController(ApexPages.StandardController controller) { 
        this.caso = (Case)controller.getRecord();
        System.debug(this.caso);
    }   
    
    // creates a new Custom_Attachments__c record
    private Database.SaveResult saveCustomAttachment() {
        Custom_Attachments__c obj = new Custom_Attachments__c();
        obj.Case__c = caso.Id; 
        obj.description__c = description;
        obj.type__c = selectedType;
        // 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 Custom_Attachments__c record
    *  2. Insert new Attachment with the new Contact_Attachment__c record as parent
    *  3. Update the Custom_Attachments__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
                Custom_Attachments__c customAttachment = [select id from Custom_Attachments__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('/'+caso.id);
    }
    
    public PageReference back() {
        return new PageReference('/'+caso.id);
    }     

}

Does anyone know how to solve the problem?
Dhanik L SahniDhanik L Sahni
Hello Renoto, I don't see any issue in code. While testing are you passing case id on url like /apex/FileUploadTest?id=5002v00002qbQxWAAU