Friday, 13 June 2014

View PDF Files in salesforce.com


Controller:

public without sharing class InlinePdfController {
    public Boolean attachmentExists {
        get;
        set;
    }
    public Boolean contentPdf {
        get;
        set;
    }
    public Id attachmentId {
        get;
        set;
    }

    public InlinePDFController(ApexPages.StandardController standardController) {
        Id accountId = '0019000000YSebM';
        List < Attachment > attachments = [SELECT Id, Name, ContentType, ParentId
            FROM Attachment
            WHERE ParentId = : accountId
            AND Name like '%report_a0W3000000lMuNgEAK.pdf%'
            ORDER BY LastModifiedDate DESC
        ];
        attachmentExists = false;
        contentPdf = false;
        if (attachments.size() > 0) {
            attachmentExists = true;
            Attachment a = attachments[0];
            if (a.ContentType != null && ((a.ContentType.toLowerCase().indexOf('pdf') > -1) || (a.Name.toLowerCase().endsWith('.pdf')))) {
                contentPdf = true;
            }
            attachmentId = a.Id;
        }
    }
}

visual force Page:

<apex:page standardController="Account" extensions="InlinePdfController" showHeader="false" sidebar="false">
    <apex:outputPanel layout="none" rendered="{!AND(attachmentExists,contentPdf)}">
        <script type="text/javascript">
            document.location.href = '/servlet/servlet.FileDownload?file={!attachmentId}';
        </script>
    </apex:outputPanel>
    <apex:outputPanel layout="block" rendered="{!AND(attachmentExists,NOT(contentPdf))}">
        Attachment is not in PDF format. 
    </apex:outputPanel>
    <apex:outputPanel rendered="{!NOT(attachmentExists)}">
        No attachment found.
    </apex:outputPanel>
</apex:page>


Thursday, 12 June 2014

Page Visit Count in Salesforce


Controller:

public class CookieController {

    public CookieController() {
        Cookie counter = ApexPages.currentPage().getCookies().get('counter');
    
        // If this is the first time the user is accessing the page, 
        // create a new cookie with name 'counter', an initial value of '1', 
        // path 'null', maxAge '-1', and isSecure 'false'. 
        if (counter == null) {
            counter = new Cookie('counter','1',null,-1,false);
        } else {
        // If this isn't the first time the user is accessing the page
        // create a new cookie, incrementing the value of the original count by 1
            Integer count = Integer.valueOf(counter.getValue());
            counter = new Cookie('counter', String.valueOf(count+1),null,-1,false);
        }
    
        // Set the new cookie for the page
        ApexPages.currentPage().setCookies(new Cookie[]{counter});
    }

    // This method is used by the Visualforce action {!count} to display the current 
    // value of the number of times a user had displayed a page. 
    // This value is stored in the cookie.
    public String getCount() {
        Cookie counter = ApexPages.currentPage().getCookies().get('counter');
        if(counter == null) {
            return '0';
        }
        return counter.getValue();
    }
}


Visualforce Page:


<apex:page controller="CookieController">
    You have seen this page {!count} times
</apex:page>

See More Records on click of button Salesforce.com

 

Controller:


public with sharing class SeeMoreValues {    
    @RemoteAction
    public static List<Contact> diplayData(){
        List<Contact> newContact = [select name,id from contact limit 15];
        return newContact;
        
    }
}

Visualforce Page:


<apex:page controller="SeeMoreValues">
    <link rel="stylesheet" href="//netdna.bootstrapcdn.com/bootstrap/3.0.3/css/bootstrap.min.css"/>  
    <script type='text/javascript' src="//ajax.googleapis.com/ajax/libs/jquery/1.9.1/jquery.min.js"></script>
    <script src="//netdna.bootstrapcdn.com/bootstrap/3.0.3/js/bootstrap.min.js"></script>
    <script type="text/javascript" src="//cdnjs.cloudflare.com/ajax/libs/jquery/1.7.1/jquery.min.js"></script>   
    <style>       
        #more1{
            cursor: pointer;
            background: #eee;
        }        
    </style>                                              
    <script>
    var numShown = 5; 
    var numMore = 5;
    var numRows; 
    var $table;             
    var dataStorage = new Array();                   
        var mytable = $('<table class="table table-striped table-bordered tablesorter" border="2" cellspacing="0" cellpadding="0" width="100%" id="example"></table>').attr({ id: "basicTable" });         
        $(document).ready(function(){
            $("#submitButton").hide();
            Visualforce.remoting.Manager.invokeAction('{!$RemoteAction.SeeMoreValues.diplayData}',function(result,event){                                               
                 dataStorage = result;                                  
                 for(var i=0;i<result.length;i++){                                        
                     var row = $('<tr></tr>').appendTo(mytable);                                                          
                     $('<td class="dfc">'+result[i].Name+'</td>').appendTo(row); 
                     $('<td class="dfc">'+result[i].Id+'</td>').appendTo(row);                                                                                                                               
                 }                               
                 mytable.appendTo("#box");
                 $table = $('#box').find('tbody');  // tbody containing all the rows
                 numRows = $table.find('tr').length; // Total # rows 
                 $table.find('tr:gt(' + (numShown-1) + ')').hide().end().after('<tbody onclick="more();" id="more1"><tr><td colspan="'+$table.find('tr:first td').length +'"><div>Show <span>' +
                 numMore + '</span> More</div></tbody></td></tr>');                                                                                                                 
            },{escape:true});                          
        });
        
        function more(){
            numShown = numShown + numMore;
            console.log('numShown----------'+numShown);
            if (numShown >= numRows) {
                $('#more1').remove();
            }
            if (numRows - numShown < numMore) {
                $('#more1 span').html(numRows - numShown);
            }
            $table.find('tr:lt(' + numShown + ')').show();
            $('#submitButton').show();
        }
        function less(){
            for(i=0 ; i < 3 ; i++ ){
                $('#box tr:last').remove();
            }                                                            
        }                       
    </script> 
     <div id='box'>       
    </div> 
    <button type="button" id="submitButton" onclick="less();">SeeLess</button>             
</apex:page>

Limit Exceeded(1000) Overcome for collection in salesforce



Controller:


public class thousandLimit
{
    private limitWrapper[] thousandBlocks = new limitWrapper[]{};
 
    private final integer listLimit;
 
    public thousandLimit()
    {
        listLimit = 999;
    }
 
    public limitWrapper[] getthousandBlocks()
    {
        thousandBlocks = new limitWrapper[]{};
     
        integer counter = 0;
        integer loopCount = 0;
        contact[] tmpcon = new contact[]{};            
        for(contact con :[select name,id from contact]){          
            for(integer i=0;i<40;i++){
                if(counter < listLimit){
                    tmpcon.add(con);
                    counter++;
                }
                else{
                    loopCount++;
                    thousandBlocks.add(new limitWrapper(tmpcon,loopCount));
                    tmpcon = new contact[]{};
                    tmpcon.add(con);
                    counter = 0;
                }
            }
        }          
        system.debug('counter--------'+counter);
        system.debug('loopCount--------'+loopCount);                  
        if(thousandBlocks.size() == 0)
        {
            loopCount++;
            thousandBlocks.add(new limitWrapper(tmpcon,loopCount));
        }
        system.debug('thousandBlocks----------'+thousandBlocks.size());
        return thousandBlocks;
    }
 
    public class limitWrapper
    {
        public contact [] contacts {get;set;}
        public integer blockNumber {get;set;}
        public limitWrapper(contact[] cons, integer i)
        {
            contacts = cons;
            blockNumber = i;
        }
     
    }
}


Visualforce Page:


<apex:page controller="thousandLimit">    
   <apex:pageBlock >
      <apex:repeat value="{!thousandBlocks}" var="block">
            <apex:pageBlockTable value="{!block.contacts}" var="c">
            <apex:column value="{!c.Name}"/>
            <apex:column value="{!c.id}"/>                                
            </apex:pageBlockTable>
        </apex:repeat>
     </apex:pageBlock>  
</apex:page>