Saturday, October 6, 2012

Web Forms:

Web Forms:
This example shows how to create a job application form for your sites that search dynamically from your salesforce and apply for specific position.

global class jobApplicationExCtrl {
 
 private final Candidate__c cand;
 public string resumeText {Get; Set;}
 public String myPosition_Id {Get; Set;}
 
 public jobApplicationExCtrl(ApexPages.StandardController stdController) {
        this.cand = (Candidate__c)stdController.getRecord();
    }
 
 public PageReference Save() 
 {
  System.debug('--------------------- jobApplicationExCtrl Save BEGIN');
  PageReference ret;
  
  try{
         insert cand;
         System.debug('--------------------- jobApplicationExCtrl cand Id = ' + cand.Id);
     } catch (System.DmlException e) {
         System.debug('--------------------- jobApplicationExCtrl save Dml Exception = ' + e.getMessage());
     }
    if (resumeText != null && resumeText != '')
    {
   System.debug('--------------------- jobApplicationExCtrl resumeText = ' + resumeText);
   Blob resumeBlob = Blob.valueOf(resumeText);
   Attachment att = new Attachment(parentId = cand.Id, name='Resume.txt', body = resumeBlob);
   try{
    insert att;
    System.debug('--------------------- jobApplicationExCtrl att Id = ' + att.Id);
   } catch (System.DmlException e) {
    System.debug('--------------------- jobApplicationExCtrl save Dml Exception = ' + e.getMessage());
   }
    }
     PageReference candPage = new ApexPages.StandardController(cand).view();
  candPage.setRedirect(true);
  ret = candPage;
  
  System.debug('--------------------- jobApplicationExCtrl Save END');
  return ret;
 }
 
 public PageReference Apply() 
 {
  System.debug('--------------------- jobApplicationExCtrl Apply BEGIN');
  PageReference ret;
  if (myPosition_Id != null && myPosition_Id != '')
  {
   System.debug('--------------------- jobApplicationExCtrl myPosition_Id = ' + myPosition_Id);
   try{
          insert cand;
          System.debug('--------------------- jobApplicationExCtrl cand Id = ' + cand.Id);
      } catch (System.DmlException e) {
          System.debug('--------------------- jobApplicationExCtrl Apply Dml Exception = ' + e.getMessage());
      }
     if (resumeText != null && resumeText != '')
     {
    System.debug('--------------------- jobApplicationExCtrl resumeText = ' + resumeText);
    Blob resumeBlob = Blob.valueOf(resumeText);
    Attachment att = new Attachment(parentId = cand.Id, name='Resume.txt', body = resumeBlob);
    try{
     insert att;
     System.debug('--------------------- jobApplicationExCtrl att Id = ' + att.Id);
    } catch (System.DmlException e) {
     System.debug('--------------------- jobApplicationExCtrl Apply Dml Exception = ' + e.getMessage());
    }
     }

     Job_Application__c app = new Job_Application__c();
     app.Position__c = myPosition_Id;
     app.Candidate__c = cand.Id;
     try{
       insert app;
   } catch (System.DmlException e) {
      System.debug('--------------------- jobApplicationExCtrl Apply Dml Exception = ' + e.getMessage());
   }
   System.debug('--------------------- jobApplicationExCtrl Apply app.Id = ' + app.Id);
   
      PageReference candPage = new ApexPages.StandardController(cand).view();
   candPage.setRedirect(true);
   ret = candPage;
  }
  else
  {
   System.debug('--------------------- jobApplicationExCtrl No Position Selected');
   ApexPages.Message myMsg = new ApexPages.Message(ApexPages.Severity.FATAL,'Please search for a position.');
   ApexPages.addMessage(myMsg);
   ret = null;
  }
  System.debug('--------------------- jobApplicationExCtrl Apply END');
  return ret;
 }
 
 @RemoteAction global static Position__c[] findPositions(String Name) 
    {
        System.debug('--------------------- jobApplicationExCtrl findPositions BEGIN');
        String queryName = '%'+ String.escapeSingleQuotes(Name)+'%';
        Position__c[] p = [Select p.Type__c, p.Name, p.Id, p.Department__c From Position__c p where p.Name LIKE :queryName Limit 10];
        System.debug('--------------------- jobApplicationExCtrl findPositions END'); 
        return p;
    }
}
and the page looks like this 
<apex:page standardController="Candidate__c" extensions="jobApplicationExCtrl" sidebar="false" showHeader="false" standardStylesheets="false">

<apex:stylesheet value="{!URLFOR($Resource.UC_SiteBranding, 'style.css')}"/>

<script type="text/javascript">
    var positions;   
    
    function positionsSearch(name) {
        jobApplicationExCtrl.findPositions(name,handlePositions);
        return false;
    }
     
    function handlePositions(result, event) {
        if(event.type == 'exception') {
            alert(event.message);
        } else {
            positions = result;
            showPositions();
        }
    }
     
    function showPositions() {
        var newList = "";
        for(var i = 0; i < positions.length; i++) {
            newList += "<input type=\"radio\" onclick=\"javascript: setPositionId('" +positions[i].Id+"');\" id=\"position\" name=\"position\" value=\"" +positions[i].Id+"\" /> "+positions[i].Name+ " <br />"
        }
        document.getElementById('positionsList').innerHTML = newList;
    }
    
    function setPositionId (posStr)
    {
     var posText = getApexElementByID("input","hiddenPositionId");
     posText.value = posStr;
    }
    
  function getApexElementByID(tagname, eid) {
     var tags = document.getElementsByTagName(tagname);
     var regex = new RegExp(":" + eid + "$");
     for (var i=0; i < tags.length; i++) {
   if (tags[i].getAttribute("id") != null) {
    var pos = tags[i].getAttribute("id").search(regex);
    if (pos != -1) return tags[i];
   }
  }
  return null;
    }  
</script>

<apex:outputPanel id="header" layout="block">
    <apex:outputPanel id="logo" layout="block">
        <h1><apex:outputLink value="#">Universal Containers</apex:outputLink></h1>
        <h2><apex:outputLink value="http://www.salesforce.com/">A Great Place to work</apex:outputLink></h2>
    </apex:outputPanel>
    <apex:outputPanel id="menu" layout="block">
        <ul>
            <li><apex:outputLink value="#">Home</apex:outputLink></li>
            <li><apex:outputLink value="#">About Us</apex:outputLink></li>
            <li><apex:outputLink value="#">Benefits</apex:outputLink></li>
            <li><apex:outputLink value="#">Positions</apex:outputLink></li>
            <li><apex:outputLink value="#">Apply</apex:outputLink></li>
        </ul>
    </apex:outputPanel>
</apex:outputPanel>
<apex:outputPanel id="splash" layout="block"></apex:outputPanel>
<apex:form id="jobapp">
<apex:outputPanel id="page" layout="block">
    <apex:outputPanel id="content">
        <h2>Apply</h2>
        <apex:pageMessages />
        <fieldset>
            <legend>1) Search for a Position</legend>
            <apex:outputPanel >
                <!-- TODO (EXERCISE 3-1) Add Text and Button input HTML tags. -->
  <!-- The Text input should have an id of searchTerm -->
  <!-- The Button input should have a value of search  -->
  <!-- onclick call the positionsSearch javaScript function with the value of searchTerm -->
  <input type="text" id="searchTerm" />
                <input type="button" onclick="return positionsSearch(document.getElementById('searchTerm').value);" value="Search" />
                <div id="positionsList"></div>
                <div style="float: right;">
                </div>
            </apex:outputPanel>
            <apex:inputHidden value="{!myPosition_Id}" id="hiddenPositionId"/>
        </fieldset>
        <fieldset>
            <legend>Contact Information</legend>
            <apex:outputPanel layout="block">
                <apex:outputLabel value="First Name:" for="fName"/>
                <apex:inputText id="fName" value="{!Candidate__c.First_Name__c}" />                 
            </apex:outputPanel>
            <apex:outputPanel layout="block">
                <apex:outputLabel value="Last Name:" for="lName"/> 
                <apex:inputText id="lName" value="{!Candidate__c.Last_Name__c}" />
            </apex:outputPanel>
            <apex:outputPanel layout="block">
                <apex:outputLabel value="Email:" for="email"/> 
                <apex:inputText id="email" value="{!Candidate__c.Email__c}" /> 
            </apex:outputPanel>
            <apex:outputPanel layout="block">
                <apex:outputLabel value="Phone:" for="phone"/> 
                <apex:inputText id="phone" value="{!Candidate__c.Phone__c}" /> 
            </apex:outputPanel>
        </fieldset>
        <fieldset> 
            <legend>3) Cut &amp; Paste Resume</legend>
            <!-- TODO (EXERCISE 3-1) add an Apex Input Text Area tag that is tied to the action method-->
            <!-- Override the style to set the width to 473px and height to 250px-->
   <apex:inputTextarea id="resume" value="{!resumeText}" style="width: 473px; height: 250px;"/>
        </fieldset>
        <!-- TODO (EXERCISE 3-1) change the commandButton to call the Apply method in the extension controller-->
        <apex:commandButton value="Apply" action="{!Apply}"/>
    </apex:outputPanel>
    <apex:outputPanel id="sidebar">
        <h2>Universal Containers is Hiring!</h2>
        <p>Universal Containers (UC) is is a global company with more than 4,750 employees in offices around the world.</p>
        <p>We are an Equal Employment Opportunity and Affirmative Action Employer.</p>
        <p><strong>Accessibility</strong> – If you require accessibility assistance applying for open positions please contact the <a href="mailto:applications@universalcontainers.com">Recruiting Department</a>.</p>
    </apex:outputPanel>
</apex:outputPanel>
<apex:outputPanel id="footer" layout="block">
    <p id="legal">Copyright &copy; 2007 BreakFast. All Rights Reserved. Designed by <apex:outputLink value="http://www.freecsstemplates.org/">Free CSS Templates</apex:outputLink>.</p>
    <p id="links"><apex:outputLink value="#">Privacy Policy</apex:outputLink> | <apex:outputLink value="#">Terms of Use</apex:outputLink></p>
</apex:outputPanel>
</apex:form>
</apex:page> 
           

No comments:

Post a Comment