Monday 21 October 2013

Adding Header Check Box in Pageblock Table

I have faced some requirement in my development work . User must be able to select all the record in the page block table in one click . So I added header check-box  in page block table . 
Here is the code how I achieved this. Only Java Script code I have used .

This is the my page


<apex:page controller="ControllerforheaderCheckboxinPBT">
    <script type="text/javascript">
        
        function checkAll(cb){
            var inputElem = document.getElementsByTagName("input");
            for(var i=0; i<inputElem.length; i++){
                if(inputElem[i].id.indexOf("checkedone")!=-1)
                    inputElem[i].checked = cb.checked;
            }

        } 
     </script>
    
    <apex:pageMessages />
    <apex:form >
       <apex:pageBlock Title="ALL CONTACTS" >
            <apex:commandButton value="mass delete" action="{!massdelete}"  id="massdelete" onclick="return confirmDelete()"/>
            <apex:pageBlockTable value="{!Contacts}" width="100%" var="c" cellpadding="2" border="1"  rowClasses="odd,even" styleClass="tableClass" id="opp_table">
                <apex:column >
                    <apex:facet name="header"> 
                        <apex:inputCheckbox >
                            <apex:actionSupport event="onclick" action="{!GetSelected}" onsubmit="checkAll(this)" rerender="opp_table" status="newStatus"/>
                         </apex:inputCheckbox>
                     </apex:facet>
                    <apex:inputCheckbox value="{!c.selected}" id="checkedone">
                        <apex:actionSupport event="onclick" action="{!GetSelected}" rerender="opp_table"/>
                    </apex:inputCheckbox>
                </apex:column>
                <apex:column headervalue="AccountName" styleClass="showline">
                    <apex:outputField value="{!c.con.AccountId}" />
                </apex:column> 
            </apex:pageBlockTable>
        </apex:pageBlock>
    </apex:form>
</apex:page>

My Controller..


public with sharing class ControllerforheaderCheckboxinPBT {
     public Contact contact{get;set;}
     public Id contactId{get;set;}
     List<ContactWrapper> contactList = new List<ContactWrapper>();
     List<Contact> selectedContacts = new List<Contact>();
     public ControllerforheaderCheckboxinPBT() {
        Contact contact = new Contact();
     }    
    public  List<ContactWrapper> getContacts() {
       for(Contact c: [SELECT Id,Name,Accountid,loginURL__c,Account.Name,MobilePhone,Email FROM Contact ORDER BY createdDate DESC]){
           contactList.add(new ContactWrapper(c));
        }   
       return contactList;
    }
     public PageReference getSelected() {
         System.debug('======Inside the Get Function======');
         selectedContacts.clear();
      
         //adding contacts in list 
         for(ContactWrapper conWrapper: contactList) {
            if(conWrapper.selected == true) {
                conWrapper.isChanged = true;
                selectedContacts.add(conWrapper.con);  
            }                    
          }      
          return null;
      }
      
      public PageReference massDelete() {
          //deleting that list 
 if(selectedContacts.size()>0){
 delete selectedContacts;
 }
              
 //showing an message to select one contact
 else{
 ApexPages.addMessage(new ApexPages.message(ApexPages.severity.ERROR,'Please select at least one Contact.'));
 return null;
 }
 PageReference headerCheckboxPage = new PageReference('/apex/headerCheckboxinPBT');
 headerCheckboxPage .setRedirect(true);
 return headerCheckboxPage ;
 }
     public class ContactWrapper {
         public Contact con{get; set;}
         public Boolean selected{get; set;}
          
         public ContactWrapper(Contact c) {
            con = c;
            selected = false;
              
         }
      }
    
}

Saturday 19 October 2013

Adding Custom Button Clone In Account

This is a very simple post. We all have seen clone button is present in Standard and Custom Object record except Account. User may expect clone button in Account object also. For them I have done little work around.
When we will create custom button we will find three content source.

  • URL
  • OnCick JavaScript
  • Visulforce page
By using all there we can do clone functionality. But the best choice will be my favorite URL.

Process

  • Go to Customize,  Account ,Buttons, Links, and Actions 
  • Click on New Button or Link
  • Enter Label as Clone
  • Choose Display Type as Detail Page Button
  • Choose Behavior as Display in existing window without header and side bar.
  • Content Source as URL
  • Enter this URL--https://ap1.salesforce.com/{!Account.id}/e?clone=1&retURL=%2F{!Account.Id}
  • Click on Save
  • Now add Clone button in layout.
Let's disccuss something about this URL 
https://ap1.salesforce.com/{!Account.id}/e?clone=1&retURL=%2F{!Account.Id}

Red color text represent your instance name-
e- Edit mode-Record will open in edit mode

Wednesday 16 October 2013

Displaying Image in Pdf

I have come across a scenario image is not appearing in pdf  sometimes.For this I have shared some tricks.
It is very easy to display an image in Visulaforce page.
Process
  • Crate a static resource and store that image
  • Click in View file link 
  • Copy the url
  • Add apex:image tag in vf page.
 <apex:image url = "https://ap1.salesforce.com/resource/logo"  width="180" height="60" />
Image will be displayed. When you render that page as pdf then sometimes image will not be appear.
To appear image every time, I have done some work around and I would love to share it. 

Lets talk about the image url --- "https://ap1.salesforce.com/resource/1380178695000/logo".
All must be familiar with each term except this 1380178695000. What is that value?
This is nothing but the lastmodifiedtime of static resource.1380178695000 must be dynamic. To get dynamic value I have used some function SystemModStamp.

Here is my page and Controller.
<apex:page controller="ImageController" renderAs="pdf" >
  <table>
        <tr>
            <td>
              <div>
                 <apex:image value="{!sLogo}"  width="180" height="60" />
                 <!--<apex:image url="https://ap1.salesforce.com/resource/logo" width="180" height="60" />-->
              </div>
            </td>
        </tr>
    </table>

</apex:page>

Controller is 
public with sharing class ImageController {
    public String sLogo {get;set;}
    public ImageController(){
        list<StaticResource> listOfStaticResources = [SELECT Id,SystemModStamp
                                                      FROM StaticResource
                                                      WHERE Name = 'logo'];
                             
        if(!listOfStaticResources.isEmpty()) {
          sLogo = '/resource/'+listOfStaticResources[0].SystemModStamp.getTime()+'/logo';
       
           System.debug('Printing after slogo'+sLogo );
        } else {
            //sLogo = (invoiceit_s__Configuration__c.getValues('COMPANY_LOGO').invoiceit_s__String_Value__c);
        }
    }
}
Now image will appear in pdf all time.