Skip to content

Instantly share code, notes, and snippets.

@lewdlime
Created October 13, 2015 18:29
Show Gist options
  • Select an option

  • Save lewdlime/d0471a94cc7729b9dc9b to your computer and use it in GitHub Desktop.

Select an option

Save lewdlime/d0471a94cc7729b9dc9b to your computer and use it in GitHub Desktop.
ContentVersion Pagination Code for Salesforce

ContentVersion Controller with Pagination

This is a helpful set of files for making a custom controller in Salesforce that will list files uploaded through Salesforce Files Sync. The purpose for this is SO YOU DON'T HAVE TO DO IT. I've had to deal with a lot of stress trying to figure out how Salesforce works, how to write code for it, how to test what I made, and so forth, and I don't want anyone else to have to waste time on writing code for this sort of functionality to be available.

Details

  • ContentVersionController is the custom Apex controller, and provides the methods to bind queryied ContentVersion objects. It has 2 lists for the ContentVersion objects:
    • pageContent is the list of ContentVersion objects contained in the current page, and is limited by the pageSize variable.
    • content is the list of ALL ContentVersion objects you are looking for. This is the list that will be iterated over for pagination.
  • ContentVersionFiles is the VisualForce page to display the ContentVersion objects. You can tweak it to your liking, but for this implementation, it displays the ContentVersion object natively as an image file.
public with sharing class ContentVersionController {
public List<ContentVersion> pageContent { get; set; }
public List<ContentVersion> content { get; set; }
private ApexPages.StandardSetController controller;
private Integer pageNumber;
private Integer pageSize;
private Integer totalPageNumber;
public ContentVersionController() {
//controller = new ApexPages.StandardSetController();
pageNumber = 0;
totalPageNumber = 0;
pageSize = 20;
ViewData();
}
public ContentVersionController(ApexPages.StandardSetController con) {
controller = con;
pageNumber = 0;
totalPageNumber = 0;
pageSize = 20;
ViewData();
}
public List<ContentVersion> getContentVersions() {
return [SELECT Id, Title, ContentDocumentId FROM ContentVersion
WHERE IsLatest = true AND OwnerId = '005A0000003mkyk'];
}
public Integer getPageNumber() {
return pageNumber;
}
public List<ContentVersion> getContent() {
//return pageContent;
return [SELECT Id, Title, ContentDocumentId FROM ContentVersion
WHERE IsLatest = true AND OwnerId = '005A0000003mkyk'];
}
public Integer getPageSize() {
return pageSize;
}
public Boolean getPreviousButtonEnabled() {
return !(pageNumber > 1);
}
public Boolean getNextButtonDisabled() {
if (content == null) {
return true;
} else {
return ((pageNumber * pageSize) >= content.size());
}
}
public Integer getTotalPageNumber() {
if(totalPageNumber == 0 && content !=null) {
totalPageNumber = content.size() / pageSize;
Integer mod = content.size() - (totalPageNumber * pageSize);
if(mod > 0) {
totalPageNumber++;
}
}
return totalPageNumber;
}
public PageReference ViewData() {
content = null;
totalPageNumber = 0;
BindData(1);
return null;
}
public void BindData(Integer newPageIndex) {
try {
if(content == null){
content = [SELECT Id, Title, ContentDocumentId FROM ContentVersion
WHERE IsLatest = true AND OwnerId = '005A0000003mkyk'];
}
pageContent = new List<ContentVersion>();
transient Integer counter = 0;
transient Integer min = 0;
transient Integer max = 0;
if (newPageIndex > pageNumber) {
min = pageNumber * pageSize;
max = newPageIndex * pageSize;
} else {
max = newPageIndex * pageSize;
min = max - pageSize;
//min = min <>
}
for(ContentVersion c : content) {
counter++;
if (counter > min && counter <= max){
pageContent.add(c);
}
}
pageNumber = newPageIndex;
if (pageContent == null || pageContent.size() <= 0) {
ApexPages.addmessage(new ApexPages.message(ApexPages.severity.INFO, 'Data not available for this view.'));
}
} catch(Exception ex) {
ApexPages.addmessage(new ApexPages.message(ApexPages.severity.FATAL, ex.getMessage()));
}
}
public PageReference nextBtnClick() {
BindData(pageNumber + 1);
return null;
}
public PageReference previousBtnClick() {
BindData(pageNumber - 1);
return null;
}
}
<apex:page docType="html-5.0" readOnly="true" recordSetVar="{!content}" controller="ContentVersionController" showChat="false" showHeader="false" showQuickActionVfHeader="false" sidebar="false">
<apex:includeScript id="console-js" value="/support/console/35.0/integration.js" />
<apex:variable var="count" value="{!0}" />
<apex:pageBlock title="Registration Scans" id="pageBlock">
<apex:form id="topForm">
<div align="center" style="display:{!IF(NOT(ISNULL(content)), 'block', 'none')}">
<div id="pgNum1"><font size="1pt">Page #:&nbsp;<apex:outputLabel value="{!PageNumber}"/>&nbsp;out of&nbsp;<apex:outputLabel value="{!totalPageNumber}"/>&nbsp;&nbsp;&nbsp;&nbsp;</font></div>
<apex:commandButton value="Previous" action="{!previousBtnClick}" reRender="pageBlock" disabled="{!previousButtonEnabled}" />
<apex:commandButton value="Next" action="{!nextBtnClick}" reRender="pageBlock" disabled="{!nextButtonDisabled}" />
</div>
</apex:form>
<apex:panelBar id="scans">
<apex:repeat var="cv" value="{!pageContent}">
<apex:variable var="count" value="{!count+1}" />
<apex:panelBarItem id="barItem" label="{!cv.Title} - #{!count} of {!content.size}" onenter="autoResize(this.id)"><a href="/{!cv.Id}"><img id="image" src="/sfc/servlet.shepherd/version/download/{!cv.Id}" title="{!cv.Title}" /></a></apex:panelBarItem>
</apex:repeat>
</apex:panelBar>
<apex:form id="bottomForm">
<div align="center" style="display:{!IF(NOT(ISNULL(content)), 'block', 'none')}">
<div id="pgNum2"><font size="1pt">Page #:&nbsp;<apex:outputLabel value="{!PageNumber}"/>&nbsp;out of&nbsp;<apex:outputLabel value="{!totalPageNumber}"/>&nbsp;&nbsp;&nbsp;&nbsp;</font></div>
<apex:commandButton value="Previous" action="{!previousBtnClick}" reRender="pageBlock" disabled="{!previousButtonEnabled}" />
<apex:commandButton value="Next" action="{!nextBtnClick}" reRender="pageBlock" disabled="{!nextButtonDisabled}" />
</div>
</apex:form>
</apex:pageBlock>
</apex:page>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment