Today, Developer Force (http://developer.force.com) released its new library. Here are a few of them. All can be found at http://wiki.developerforce.com/index.php/Documentation. Workbook http://www.salesforce.com/us/developer/docs/workbook/index.htm Fundamentals http://www.salesforce.com/us/developer/docs/fundamentals/index.htm Cookbook http://www.salesforce.com/us/developer/docs/cookbook/index.htm Apex Advanced Code Example http://www.salesforce.com/us/developer/docs/apexcode/Content/apex_shopping_cart_example.htm https://sites.secure.force.com/appexchange/listingDetail?listingId=a0N30000001saDCEAY And many more to come!
Trigger to help Salesforce for Twitter
Salesforce for Twitter is one of the best AppExchange packages I've seen. It fulfills the promise salesforce.com made to bring the Service Cloud to all orgs of all sizes. And it works well.
Though a supplemental/unofficial guide to customizing SFDC for Twitter will be released soon on this site, I wanted to share a trigger I just wrote to add new Leads to a campaign:
A Mention in the Developers Challenge
The salesforce.com Developer Force Challenge has concluded, and the team of Force Squared and The Enforcer won a mention! Our Daily Shinro site was listed “for sheer exuberance!” I’m really proud of the site, though the lion’s share of the kudos go to John for the concept and site design. I just coded whatever he […]
Overload Apex Class to be Controller AND Extension
Coding the new premium version of Mass Update Contacts (details to come), I replaced the two parts of the page with Apex Components. This will allow the app to support custom address fields and international address formats.
I didn't want to write one ControllerExtension for the main page, a CustomController for the view section component, and another CustomController for the pageblocktable component. So here is the overloaded class constructor. Note that this works because an extension passes the StandardController to the constructor, and a CustomController passes nothing:
Email Inbox Version 2
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 |
<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> |