• Home
  • About
    • Leadership
    • Partners
    • Blogroll
  • Force-Squared Blog
    • Tips and Tricks
    • Configuration
    • Development
  • Support
    • Knowledge Base
    • Submit a Case
  • Is It Dreamforce Yet?

X-Squared On Demand

Salesforce solutions delivered

  • Home
  • About
    • Leadership
    • Partners
    • Blogroll
  • Force-Squared Blog
    • Tips and Tricks
    • Configuration
    • Development
  • Support
    • Knowledge Base
    • Submit a Case
  • Is It Dreamforce Yet?
  • Tips and Tricks
  • Configuration
  • Development
You are here: Home / Salesforce CRM / Development / Apex / Email Inbox Version 2

Email Inbox Version 2

July 15, 2009 by David Schach 1 Comment

Well, it took about ten minutes from the release of Email Inbox Version 1 for people to request additional features, screenshots, etc. Version 2 includes some neat icons, and this post has the multiple-times-requested screenshots we promised.

First, a teaser screenshot. (There's a better one below the code.)

Here's the updated Visualforce code:

<apex:page controller="EmailMessageController" action="{!ViewData}">
    <apex:sectionHeader title="Email Messages" subtitle=""></apex:sectionHeader>
    <apex:pageblock id="emailblock">
        <apex:facet name="header">
            <apex:form >
                <apex:panelGrid styleClass="list"
                    columnClasses="pbTitle,pbButton,pbHelp" columns="3" border="0"
                    cellpadding="0" cellspacing="0">
                    <apex:outputLabel ><h3>Messages</h3></apex:outputLabel>
                    <apex:commandButton value=" Refresh " styleClass="btn"
                        action="{!ViewData}" rerender="emailblock"></apex:commandButton>
                    <apex:SelectList value="{!wheretext}" size="1"  id="controllerselectlist">
                        <apex:actionSupport event="onchange" action="{!ViewData}"
                            reRender="emailblock"></apex:actionSupport>
                        <apex:selectOptions value="{!views}" />
                    </apex:SelectList>
                </apex:panelGrid>
            </apex:form>
        </apex:facet>
        <apex:form >
            <apex:pageblocktable value="{!Messages}" var="e" id="emailtable"
                bgcolor="#F3F3EC" styleClass="list" rowClasses="dataRow"
                onRowMouseOver="hiOn(this);" onRowMouseOut="hiOff(this);">
                <apex:column >
                    <apex:facet name="header">
                        <apex:commandLink action="{!ViewData}"
                            value="{!$ObjectType.EmailMessage.fields.Subject.label}{!IF(sortExpression=='Subject', 
                            IF(sortDirection='ASC','▼','▲'),'')}">
                            <apex:param value="Subject" name="column"
                                assignTo="{!sortExpression}"></apex:param>
                        </apex:commandLink>
                    </apex:facet>
                    <apex:outputLink value="/{!e.Id}" target="_blank">{!e.Subject}</apex:outputLink>
                </apex:column>
                <apex:column >
                    <apex:facet name="header">
                    {!$ObjectType.Contact.fields.Name.label}
                    </apex:facet>
                    <apex:outputLink value="/{!e.Parent.ContactId}" target="_blank"
                        rendered="{!IF(e.Parent.ContactId != '',true,false)}">{!e.FromName}</apex:outputLink>
                    <apex:outputtext value="{!e.FromName}"
                        rendered="{!IF(e.Parent.ContactId != '',false,true)}" />
                </apex:column>
                <apex:column >
                    <apex:facet name="header">
                    {!$ObjectType.Account.fields.Name.label}
                    </apex:facet>
                    <apex:outputLink value="/{!e.Parent.AccountId}" target="_blank">{!e.Parent.Account.Name}</apex:outputLink>
                </apex:column>
                <apex:column value="{!e.FromAddress}">
                    <apex:facet name="header">
                        <apex:commandLink action="{!ViewData}"
                            value="{!$ObjectType.EmailMessage.fields.FromAddress.label}{!IF(sortExpression=='FromAddress', 
                            IF(sortDirection='ASC','▼','▲'),'')}">
                            <apex:param value="FromAddress" name="column"
                                assignTo="{!sortExpression}"></apex:param>
                        </apex:commandLink>
                    </apex:facet>
                </apex:column>
                <apex:column value="{!e.Status}">
                    <apex:facet name="header">
                        <apex:commandLink action="{!ViewData}"
                            value="{!$ObjectType.EmailMessage.fields.Status.label}{!IF(sortExpression=='Status', 
                            IF(sortDirection='ASC','▼','▲'),'')}">
                            <apex:param value="Status" name="column"
                                assignTo="{!sortExpression}"></apex:param>
                        </apex:commandLink>
                    </apex:facet>
                </apex:column>
                <apex:column value="{!e.MessageDate}">
                    <apex:facet name="header">
                        <apex:commandLink action="{!ViewData}"
                            value="{!$ObjectType.EmailMessage.fields.MessageDate.label}{!IF(sortExpression=='MessageDate', 
                            IF(sortDirection='ASC','▼','▲'),'')}">
                            <apex:param value="MessageDate" name="column"
                                assignTo="{!sortExpression}"></apex:param>
                        </apex:commandLink>
                    </apex:facet>
                </apex:column>
                <apex:column >
                    <apex:facet name="header">
                        <apex:commandLink action="{!ViewData}"
                            value="Inbound/Outbound{!IF(sortExpression=='Incoming', 
                            IF(sortDirection='ASC','▼','▲'),'')}">
                            <apex:param value="Incoming" name="column"
                                assignTo="{!sortExpression}"></apex:param>
                        </apex:commandLink>
                    </apex:facet>
                    <apex:image url="/img/emailInbound.gif" rendered="{!e.Incoming}" />
                    <apex:image url="/img/emailOutbound.gif" rendered="{!NOT(e.Incoming)}" />
                    <!--<apex:outputfield value="{!e.Incoming}" rendered="{!NOT(e.Incoming)}" />-->
                </apex:column>
                <apex:column >
                    <apex:facet name="header">
                        <apex:commandLink action="{!ViewData}"
                            value="Attachment{!IF(sortExpression=='HasAttachment', 
                            IF(sortDirection='ASC','▼','▲'),'')}">
                            <apex:param value="HasAttachment" name="column"
                                assignTo="{!sortExpression}"></apex:param>
                        </apex:commandLink>
                    </apex:facet>
                    <apex:image url="/img/emailHasAttach.gif" rendered="{!e.HasAttachment}"/>
                    <apex:outputfield value="{!e.HasAttachment}" rendered="{!NOT(e.HasAttachment)}" />
                </apex:column>
                <apex:column >
                    <apex:facet name="header">
                        <apex:commandLink action="{!ViewData}"
                            value="{!$ObjectType.Case.fields.CaseNumber.label}{!IF(sortExpression=='ParentId', 
                            IF(sortDirection='ASC','▼','▲'),'')}">
                            <apex:param value="ParentId" name="column"
                                assignTo="{!sortExpression}"></apex:param>
                        </apex:commandLink>
                    </apex:facet>
                    <apex:outputLink value="/{!e.ParentId}">{!e.Parent.CaseNumber}</apex:outputLink>

                </apex:column>
                <apex:column value="{!e.ToAddress}">
                    <apex:facet name="header">
                        <apex:commandLink action="{!ViewData}"
                            value="{!$ObjectType.EmailMessage.fields.ToAddress.label}{!IF(sortExpression=='ToAddress', 
                            IF(sortDirection='ASC','▼','▲'),'')}">
                            <apex:param value="ToAddress" name="column"
                                assignTo="{!sortExpression}"></apex:param>
                        </apex:commandLink>
                    </apex:facet>
                </apex:column>
            </apex:pageblocktable>
        </apex:form>
    </apex:pageblock>
</apex:page>

The Apex controller code has not changed from Version 1.

Here's the screenshot, which includes some emails from around the Salesforce ecosystem:

Incoming (and auto-response) Emails

Things to notice and things we've learned:
  1. Salesforce will search ANY Email field to match an incoming email to a Contact. (nice job, Salesforce!) - We know because Simon Fell's Contact.Email is sfell at salesforce.com, and his Contact.Secondary_Email__c is simon at fell.com in the sandbox. Ditto (with her own email addresses) for Irene Brodt.
  2. Auto-response emails will be included. We turned off auto-response after a few emails came in.
  3. Though the Email Address field is coded just to show the field value, Salesforce includes the Gmail link. (We assume that's because we activated the integration, but we may be wrong. Has anyone not activated that?)
  4. We did not (yet) implement the super Email/Web2Case trigger code that Marco Casalaina posted in the Salesforce Support Blog, but if we had, then every email in the list would be associated with a Contact. (Example: Michael Smith of Force2b.net, who will be a Contact from now on!)
Enjoy!

Share this:

  • Click to share on X (Opens in new window) X
  • Click to share on LinkedIn (Opens in new window) LinkedIn
  • Click to share on Facebook (Opens in new window) Facebook
  • Click to share on Pocket (Opens in new window) Pocket
  • Click to email a link to a friend (Opens in new window) Email

Related

Filed Under: Apex, Development, Salesforce, Visualforce Tagged With: Apex, Projects, Visualforce, X-Squared On Demand

← Visualforce Email Inbox Overload Apex Class to be Controller AND Extension →

Comments

  1. Jeff Douglas says

    July 16, 2009 at 04:19

    Oh Snap!!! Excellent work!! Very impressive.

    Reply

Share Your ThoughtsCancel reply

This site uses Akismet to reduce spam. Learn how your comment data is processed.

Is it Dreamforce Yet?

Find out!

Find us on the AppExchange

Mass Update Contacts 2.0

Get It Now

Recent Posts

  • Prevent Duplicate Emails on Leads
  • Duplicate Record Item Enrichment and Auto-Deletion Code
  • Lightning Component With Running User Information
  • ChatterBINGO is Now Open-Source
  • Display Only My Role’s Records on a Report

Post Categories

Popular Tags

#df09 #df10 Akismet Apex AppBuilder AppExchange Appirio Astadia Blogs Chatter Configuration Content DreamFactory Dreamforce Eclipse IDE Enterprise Force.com Builder Force.com Platform Google Infowelders Integration Just for fun Lightning New Developments New Features Partner Program PersonAccount Projects Publisher Salesforce Salesforce1 Salesforce for Google Apps sfdcverse Sites Visualforce Web-to X-Squared On Demand

Find Us Online

  • Twitter
  • Facebook
  • LinkedIn
  • RSS

Subscribe

RSS Feed Comments

Subscribe via Email

Enter your email address to subscribe to this blog and receive notifications of new posts by email.

Join 164 other subscribers

Copyright © 2008–2025 X-Squared On Demand · Genesis Framework by StudioPress · WordPress · Log in

 

Loading Comments...