<?xml version="1.0" encoding="UTF-8"?>
<?xml-stylesheet type="text/xsl" media="screen" href="/~d/styles/rss2full.xsl"?><?xml-stylesheet type="text/css" media="screen" href="http://feeds.feedburner.com/~d/styles/itemcontent.css"?><rss xmlns:content="http://purl.org/rss/1.0/modules/content/" xmlns:wfw="http://wellformedweb.org/CommentAPI/" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:sy="http://purl.org/rss/1.0/modules/syndication/" xmlns:slash="http://purl.org/rss/1.0/modules/slash/" xmlns:creativeCommons="http://backend.userland.com/creativeCommonsRssModule" xmlns:feedburner="http://rssnamespace.org/feedburner/ext/1.0" version="2.0">

<channel>
	<title>X-Squared On Demand LLC Blog</title>
	
	<link>http://www.x2od.com</link>
	<description>Salesforce Configuration, Administration, and Development</description>
	<lastBuildDate>Thu, 18 Feb 2010 17:30:42 +0000</lastBuildDate>
	<generator>http://wordpress.org/?v=2.9.2</generator>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
			<atom10:link xmlns:atom10="http://www.w3.org/2005/Atom" rel="self" type="application/rss+xml" href="http://feeds.feedburner.com/x2od_wp" /><feedburner:info uri="x2od_wp" /><atom10:link xmlns:atom10="http://www.w3.org/2005/Atom" rel="hub" href="http://pubsubhubbub.appspot.com/" /><creativeCommons:license>http://creativecommons.org/licenses/by-nc-sa/3.0/</creativeCommons:license><image><link>http://www.x2od.com</link><url>http://www.x2od.com/favicon.ico</url></image><feedburner:emailServiceId>x2od_wp</feedburner:emailServiceId><feedburner:feedburnerHostname>http://feedburner.google.com</feedburner:feedburnerHostname><item>
		<title>New Opportunity Page Layout – With Highlights Panel!</title>
		<link>http://feedproxy.google.com/~r/x2od_wp/~3/qKvLxLThh4E/new-opportunity-page-layout-with-highlights-panel.html</link>
		<comments>http://www.x2od.com/2010/02/18/new-opportunity-page-layout-with-highlights-panel.html#comments</comments>
		<pubDate>Thu, 18 Feb 2010 17:30:42 +0000</pubDate>
		<dc:creator>David Schach</dc:creator>
				<category><![CDATA[Configuration]]></category>
		<category><![CDATA[New Features]]></category>
		<category><![CDATA[Spring 10]]></category>
		<category><![CDATA[salesforce.com]]></category>
		<category><![CDATA[Force.com Builder]]></category>

		<guid isPermaLink="false">http://www.x2od.com/?p=963</guid>
		<description><![CDATA[      Yesterday, I enabled the new Opportunity page layout in my Developer Spring &#8216;10 Preview org, and it took a few steps, so I thought I&#8217;d share them with you.

      Firstly, you&#8217;ll need to contact salesforce.com to get this feature enabled.
    

 [...]]]></description>
			<content:encoded><![CDATA[<p>
      Yesterday, I enabled the new Opportunity page layout in my Developer Spring &#8216;10 Preview org, and it took a few steps, so I thought I&#8217;d share them with you.</p>
<p>
      Firstly, you&#8217;ll need to contact salesforce.com to get this feature enabled.
    </p>
<p>
      Then be patient. It takes a minute or two for the update to propagate. Clearly, something was churning in the Force.com platform background!
    </p>
<p>
      Now we&#8217;ll navigate NOT to the <a href="https://prerelna1.pre.salesforce.com/ui/setup/org/UserInterfaceUI?setupid=UserInterface&#038;retURL=%2Fui%2Fsetup%2FSetup%3Fsetupid%3DCustomize">Setup | Customize | User Interface</a> screen (where this should be enabled). Instead, we&#8217;ll go to the <a href="https://prerelna1.pre.salesforce.com/ui/setup/layout/PageLayouts?type=Opportunity&#038;setupid=OpportunityLayouts&#038;retURL=%2Fui%2Fsetup%2FSetup%3Fsetupid%3DOpportunity">Opportunity Page Layout</a> screen.</p>
<p>
      Follow the cool prompts. They make it so easy, a &#8230; well, you know what I mean. </p>
<div id="attachment_975" class="wp-caption aligncenter" style="width: 310px"><a href="http://www.x2od.com/wp/uploads/Highlights-Panel-0.png"><img src="http://www.x2od.com/wp/uploads/Highlights-Panel-0-300x214.png" alt="Step 1: Enable the Highlights Panel" title="Highlights Panel 0" width="300" height="214" class="size-medium wp-image-975"></a><p class="wp-caption-text">Step 1: Enable the Highlights Panel</p></div> <div id="attachment_970" class="wp-caption aligncenter" style="width: 310px"><a href="http://www.x2od.com/wp/uploads/Highlights-Panel-1.png"><img src="http://www.x2od.com/wp/uploads/Highlights-Panel-1-300x194.png" alt="Opportunity Layout Setup page" title="Highlights Panel 1" width="300" height="194" class="size-medium wp-image-970"></a><p class="wp-caption-text">Opportunity Layout Setup</p></div> <div id="attachment_976" class="wp-caption aligncenter" style="width: 310px"><a href="http://www.x2od.com/wp/uploads/Highlights-Panel-1.5.png"><img src="http://www.x2od.com/wp/uploads/Highlights-Panel-1.5-300x100.png" alt="Step 2: Edit the Page Layout" title="Highlights Panel 1-5" width="300" height="100" class="size-medium wp-image-976"></a><p class="wp-caption-text">Step 2: Edit the Page Layout</p></div> <div id="attachment_965" class="wp-caption aligncenter" style="width: 310px"><a href="http://www.x2od.com/wp/uploads/Highlights-Panel-2.png"><img src="http://www.x2od.com/wp/uploads/Highlights-Panel-2-300x172.png" alt="Choose Fields to Display" title="Highlights Panel 2" width="300" height="172" class="size-medium wp-image-965"></a><p class="wp-caption-text">Choose Fields to Display</p></div>
<p>Note: You can only show fields in the Highlights Panel if they are in the page layout. (I have a feeling this has to do with Professional Edition or printable layouts, but I&#8217;m just guessing.)</p>
<p>Once you&#8217;ve done this for each page layout, click on the big button. </p>
<div id="attachment_966" class="wp-caption aligncenter" style="width: 310px"><a href="http://www.x2od.com/wp/uploads/Highlights-Panel-3.png"><img src="http://www.x2od.com/wp/uploads/Highlights-Panel-3-300x196.png" alt="Confirmation" title="Highlights Panel 3" width="300" height="196" class="size-medium wp-image-966"></a><p class="wp-caption-text">Confirmation - You are (mostly) done!</p></div>
<p>At this point, each user can enable the bar. I have no idea why the admin can&#8217;t just force this on all users &#8211; or maybe I missed something &#8211; but it seems to be an opt-in feature.</p>
<div id="attachment_993" class="wp-caption aligncenter" style="width: 310px"><a href="http://www.x2od.com/wp/uploads/Highlights-Panel-8.png"><img src="http://www.x2od.com/wp/uploads/Highlights-Panel-8-300x232.png" alt="Enable User Opt-In" title="Highlights Panel 8" width="300" height="232" class="size-medium wp-image-993" /></a><p class="wp-caption-text">Step 3: Enable User Opt-In</p></div>
<p>Here&#8217;s the link to enable the feature.  Of course, you may wish to watch a video as well!</p>
<div id="attachment_967" class="wp-caption aligncenter" style="width: 310px"><a href="http://www.x2od.com/wp/uploads/Highlights-Panel-4.png"><img src="http://www.x2od.com/wp/uploads/Highlights-Panel-4-300x111.png" alt="The link to enable this setting" title="Highlights Panel 4" width="300" height="111" class="size-medium wp-image-967"></a><p class="wp-caption-text">The link to enable this setting</p></div>
<p>And here it is!</p>
<div id="attachment_968" class="wp-caption aligncenter" style="width: 310px"><a href="http://www.x2od.com/wp/uploads/Highlights-Panel-5.png"><img src="http://www.x2od.com/wp/uploads/Highlights-Panel-5-300x126.png" alt="The new layout!" title="Highlights Panel 5" width="300" height="126" class="size-medium wp-image-968"></a><p class="wp-caption-text">The new layout!</p></div><br />
<div id="attachment_969" class="wp-caption aligncenter" style="width: 310px"><a href="http://www.x2od.com/wp/uploads/Highlights-Panel-6.png"><img src="http://www.x2od.com/wp/uploads/Highlights-Panel-6-300x185.png" alt="View from the bottom of the page" title="Highlights Panel 6" width="300" height="185" class="size-medium wp-image-969"></a><p class="wp-caption-text">Return to top from the bottom of the page</p></div>
<p>It&#8217;s interesting that if you have this enabled, certain user interface settings (yes, at Setup | Customize | User Interface) cannot be changed:  </p>
<div id="attachment_971" class="wp-caption aligncenter" style="width: 310px"><a href="http://www.x2od.com/wp/uploads/Highlights-Panel-7.png"><img src="http://www.x2od.com/wp/uploads/Highlights-Panel-7-300x299.png" alt="When this is enabled, you cannot turn off two settings" title="Highlights Panel 7" width="300" height="299" class="size-medium wp-image-971"></a><p class="wp-caption-text">When this is enabled, you cannot turn off two settings</p></div>
<p>Here&#8217;s my prediction: We will start to see two major mistakes during Salesforce demos: </p>
<ol>
<li>We will continue to see the link asking if we want more information on inline editing (after more than a year, it&#8217;s time to turn that off, people).</li>
<li>At the top of the Opportunity detail page, we will see this link.</li>
</ol>
<p>And I will continue to think less of all demonstrators who make these mistakes.</p>
<p><strong>Happy Spring 2010!</strong></p>

<p><a href="http://feedads.g.doubleclick.net/~a/T4N5cMMY2F-alb7zkfjVJvu9C2w/0/da"><img src="http://feedads.g.doubleclick.net/~a/T4N5cMMY2F-alb7zkfjVJvu9C2w/0/di" border="0" ismap="true"></img></a><br/>
<a href="http://feedads.g.doubleclick.net/~a/T4N5cMMY2F-alb7zkfjVJvu9C2w/1/da"><img src="http://feedads.g.doubleclick.net/~a/T4N5cMMY2F-alb7zkfjVJvu9C2w/1/di" border="0" ismap="true"></img></a></p><div class="feedflare">
<a href="http://feeds.feedburner.com/~ff/x2od_wp?a=qKvLxLThh4E:FsCSOAZTpPM:D7DqB2pKExk"><img src="http://feeds.feedburner.com/~ff/x2od_wp?i=qKvLxLThh4E:FsCSOAZTpPM:D7DqB2pKExk" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/x2od_wp?a=qKvLxLThh4E:FsCSOAZTpPM:dnMXMwOfBR0"><img src="http://feeds.feedburner.com/~ff/x2od_wp?d=dnMXMwOfBR0" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/x2od_wp?a=qKvLxLThh4E:FsCSOAZTpPM:qj6IDK7rITs"><img src="http://feeds.feedburner.com/~ff/x2od_wp?d=qj6IDK7rITs" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/x2od_wp?a=qKvLxLThh4E:FsCSOAZTpPM:yIl2AUoC8zA"><img src="http://feeds.feedburner.com/~ff/x2od_wp?d=yIl2AUoC8zA" border="0"></img></a>
</div><img src="http://feeds.feedburner.com/~r/x2od_wp/~4/qKvLxLThh4E" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://www.x2od.com/2010/02/18/new-opportunity-page-layout-with-highlights-panel.html/feed</wfw:commentRss>
		<slash:comments>5</slash:comments>
		<feedburner:origLink>http://www.x2od.com/2010/02/18/new-opportunity-page-layout-with-highlights-panel.html</feedburner:origLink></item>
		<item>
		<title>Get Documents and Attachments out of Salesforce</title>
		<link>http://feedproxy.google.com/~r/x2od_wp/~3/HUBO9W3hJZs/docs-and-attachs-out-of-salesforce.html</link>
		<comments>http://www.x2od.com/2010/02/08/docs-and-attachs-out-of-salesforce.html#comments</comments>
		<pubDate>Mon, 08 Feb 2010 19:16:03 +0000</pubDate>
		<dc:creator>David Schach</dc:creator>
				<category><![CDATA[Configuration]]></category>
		<category><![CDATA[Spring 10]]></category>
		<category><![CDATA[Tips and Tricks]]></category>
		<category><![CDATA[salesforce.com]]></category>
		<category><![CDATA[DreamFactory]]></category>
		<category><![CDATA[Force.com Builder]]></category>
		<category><![CDATA[New Features]]></category>
		<category><![CDATA[Salesforce.com]]></category>

		<guid isPermaLink="false">http://www.x2od.com/?p=905</guid>
		<description><![CDATA[As Content will be included in all Salesforce licenses (for completeness, I'll add 'to some degree') with the Spring '10 release, orgs will be faced with the daunting prospect of getting their documents and attachments out of Salesforce and into Content.
I had this problem when Content was first released and I was asked to be [...]]]></description>
			<content:encoded><![CDATA[<p>As Content will be included in all Salesforce licenses (for completeness, I'll add 'to some degree') with the Spring '10 release, orgs will be faced with the daunting prospect of getting their documents and attachments out of Salesforce and into Content.</p>
<p>I had this problem when Content was first released and I was asked to be one of the first SysAds to use it.  At the time, we used Solution 1 (below), but since then, other products have been released to help with this.</p>
<p>Why is it even an issue? </p>
<ul>
<li><em>Surely we can download each file?</em>  Yes, but who wants to?</li>
<li><em>Can't we do a Data Export and then upload those to Content?</em>  Yes, but all the files are renamed with their 15-character Ids, making renaming them all-but-impossible.</li>
</ul>
<br>
<strong>salesforce.com and DreamFactory to the rescue!</strong>
<h3>Solution 1</h3>
Summary: Use a script to rename all exported files.
A (wonderful!) salesforce.com employee, Nick Marcantonio, wrote a Perl script to perform the transformation.  Here it is, in all its glory:
<pre class="brush: perl;">
# Nick Marcantonio
# nmarcantonio at salesforce.com
# 08/07

$file = 'Attachment.csv';

open (F, $file) || die (&quot;Could not open $file!&quot;);

$line = &lt;F&gt;; #read first line which is nothing but column headers
while ($line = &lt;F&gt;)
{
  ($id,$name) = split ',', $line;
  chomp($id);
  $id =~ s/\&quot;//g;
  chomp($name);
  $name =~ s/\&quot;//g;
  
  #print &quot;$id : $name\n&quot;;
  
  $result = rename($id, $name);
  #print &quot;$result\n&quot;;
}

close (F);
</pre>
The instructions: 
<pre class="brush: plain;">
If you've done a data export you've noticed that all attachments are placed in the Attachments subfolder and named with their salesforce ID, not the actual file name or extension. One must then consult the Attachment.csv file included in the data export to find the name associated with the ID and rename the file. Attached to this solution is a Perl script that will rename all of the exported attachments to their proper names. Please follow these steps to run this:

1. Perform a data export and unzip the resulting zip file
2. Launch the data loader and export from the Attachments table ONLY the Id and Name column. This file must be named Attachment.csv.
3. Install ActivePerl. This will allow perl scripts to be run on a Windows machine. ActivePerl is available here (http://www.activestate.com/activeperl).
4. Copy the Attachment.csv file and the attached AttachmentParser.pl file to the Attachments subdirectory of the data export.
5. Double-click on AttachmentParser.pl.

All of the files named with their salesforce IDs will be renamed with their proper names and file extensions.

(This solution will work for documents as well. Follow the same procedure and be sure to name the extract from the Documents table Attachment.csv) 
</pre>
<p>Note: This will not preserve folders, as far as I know.  You may be able to recreate this by exporting the Folder table and doing some work on that, as the Document table does include a FolderId column.</p>
<p>A heartfelt thank-you to Nick Marcantonio for his help!</p>
<h3>Solution 2</h3>
<p>Install DreamFactory's FREE <a href="http://sites.force.com/appexchange/listingDetail?listingId=a0N30000001e1GkEAI">DreamTeam Document Management</a> application from the AppExchange to drag-and-drop your Documents to your desktop.  <br>
This doesn't work with Attachments, though, so you may need to use another method for them.</p>
<p>Please let us know how it goes - good luck and enjoy Content!</p>
<p><a href="http://feedads.g.doubleclick.net/~a/20gohXeDPFJf_1KZ2KShFJfDGyU/0/da"><img src="http://feedads.g.doubleclick.net/~a/20gohXeDPFJf_1KZ2KShFJfDGyU/0/di" border="0" ismap="true"></img></a><br/>
<a href="http://feedads.g.doubleclick.net/~a/20gohXeDPFJf_1KZ2KShFJfDGyU/1/da"><img src="http://feedads.g.doubleclick.net/~a/20gohXeDPFJf_1KZ2KShFJfDGyU/1/di" border="0" ismap="true"></img></a></p><div class="feedflare">
<a href="http://feeds.feedburner.com/~ff/x2od_wp?a=HUBO9W3hJZs:uGgzIFcIraQ:D7DqB2pKExk"><img src="http://feeds.feedburner.com/~ff/x2od_wp?i=HUBO9W3hJZs:uGgzIFcIraQ:D7DqB2pKExk" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/x2od_wp?a=HUBO9W3hJZs:uGgzIFcIraQ:dnMXMwOfBR0"><img src="http://feeds.feedburner.com/~ff/x2od_wp?d=dnMXMwOfBR0" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/x2od_wp?a=HUBO9W3hJZs:uGgzIFcIraQ:qj6IDK7rITs"><img src="http://feeds.feedburner.com/~ff/x2od_wp?d=qj6IDK7rITs" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/x2od_wp?a=HUBO9W3hJZs:uGgzIFcIraQ:yIl2AUoC8zA"><img src="http://feeds.feedburner.com/~ff/x2od_wp?d=yIl2AUoC8zA" border="0"></img></a>
</div><img src="http://feeds.feedburner.com/~r/x2od_wp/~4/HUBO9W3hJZs" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://www.x2od.com/2010/02/08/docs-and-attachs-out-of-salesforce.html/feed</wfw:commentRss>
		<slash:comments>3</slash:comments>
		<feedburner:origLink>http://www.x2od.com/2010/02/08/docs-and-attachs-out-of-salesforce.html</feedburner:origLink></item>
		<item>
		<title>Computer Associates Plans To Release Agile Development Tool On Force.com Platform</title>
		<link>http://feedproxy.google.com/~r/x2od_wp/~3/BVM8iL6eTkE/computer-associates-planned-dev-tool.html</link>
		<comments>http://www.x2od.com/2009/11/19/computer-associates-planned-dev-tool.html#comments</comments>
		<pubDate>Thu, 19 Nov 2009 18:48:25 +0000</pubDate>
		<dc:creator>David Schach</dc:creator>
				<category><![CDATA[Development]]></category>
		<category><![CDATA[Partners]]></category>
		<category><![CDATA[Force.com Platform]]></category>
		<category><![CDATA[New Features]]></category>

		<guid isPermaLink="false">http://www.x2od.com/?p=859</guid>
		<description><![CDATA[Today, at Dreamforce 2009, Computer Associates plans to release CA Agile Planner (http://www.ca.com/agile), a tool to manage agile development teams. ]]></description>
			<content:encoded><![CDATA[<p>Today, at Dreamforce 2009, Computer Associates plans to release CA Agile Planner(<a href="http://www.ca.com/agile">http://www.ca.com/agile</a>), a tool to manage agile development teams.<br />
CA Agile Planner will be integrated with CA Clarity PPM (<a href="http://www.ca.com/ppm">http://www.ca.com/ppm</a>).</p>
<p>Although it was not clear how much of the demonstrated app will run on Force.com and how much will run on the CA servers (though it appeared to be 100% on Force.com), it was clear that the application was accessed via a force.com URL.</p>
<p>For more information, see <a href="http://www.ca.com/agile">http://www.ca.com/agile</a>.</p>
<p>A release date for the product was not mentioned, but the earliest planned release of any newly-announced feature thus far is Spring 2010, so one might assume that this will not be available until then.</p>

<p><a href="http://feedads.g.doubleclick.net/~a/VooHBu-TXyxhyilRGUFJZ0Y1k1o/0/da"><img src="http://feedads.g.doubleclick.net/~a/VooHBu-TXyxhyilRGUFJZ0Y1k1o/0/di" border="0" ismap="true"></img></a><br/>
<a href="http://feedads.g.doubleclick.net/~a/VooHBu-TXyxhyilRGUFJZ0Y1k1o/1/da"><img src="http://feedads.g.doubleclick.net/~a/VooHBu-TXyxhyilRGUFJZ0Y1k1o/1/di" border="0" ismap="true"></img></a></p><div class="feedflare">
<a href="http://feeds.feedburner.com/~ff/x2od_wp?a=BVM8iL6eTkE:L_FY4rCyYLE:D7DqB2pKExk"><img src="http://feeds.feedburner.com/~ff/x2od_wp?i=BVM8iL6eTkE:L_FY4rCyYLE:D7DqB2pKExk" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/x2od_wp?a=BVM8iL6eTkE:L_FY4rCyYLE:dnMXMwOfBR0"><img src="http://feeds.feedburner.com/~ff/x2od_wp?d=dnMXMwOfBR0" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/x2od_wp?a=BVM8iL6eTkE:L_FY4rCyYLE:qj6IDK7rITs"><img src="http://feeds.feedburner.com/~ff/x2od_wp?d=qj6IDK7rITs" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/x2od_wp?a=BVM8iL6eTkE:L_FY4rCyYLE:yIl2AUoC8zA"><img src="http://feeds.feedburner.com/~ff/x2od_wp?d=yIl2AUoC8zA" border="0"></img></a>
</div><img src="http://feeds.feedburner.com/~r/x2od_wp/~4/BVM8iL6eTkE" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://www.x2od.com/2009/11/19/computer-associates-planned-dev-tool.html/feed</wfw:commentRss>
		<slash:comments>1</slash:comments>
		<feedburner:origLink>http://www.x2od.com/2009/11/19/computer-associates-planned-dev-tool.html</feedburner:origLink></item>
		<item>
		<title>New Developer Library Released</title>
		<link>http://feedproxy.google.com/~r/x2od_wp/~3/vVxupa22a_4/new-developer-library-released.html</link>
		<comments>http://www.x2od.com/2009/11/19/new-developer-library-released.html#comments</comments>
		<pubDate>Thu, 19 Nov 2009 17:43:29 +0000</pubDate>
		<dc:creator>David Schach</dc:creator>
				<category><![CDATA[Apex]]></category>
		<category><![CDATA[Development]]></category>
		<category><![CDATA[Force.com Platform]]></category>
		<category><![CDATA[New Features]]></category>
		<category><![CDATA[Visualforce]]></category>
		<category><![CDATA[Winter 10]]></category>
		<category><![CDATA[salesforce.com]]></category>
		<category><![CDATA[Dreamforce 2009]]></category>
		<category><![CDATA[Salesforce.com]]></category>

		<guid isPermaLink="false">http://www.x2od.com/?p=853</guid>
		<description><![CDATA[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!
]]></description>
			<content:encoded><![CDATA[<p>Today, Developer Force (<a href="http://developer.force.com">http://developer.force.com</a>) released its new library.  Here are a few of them.  All can be found at <a href="http://wiki.developerforce.com/index.php/Documentation">http://wiki.developerforce.com/index.php/Documentation</a>.</p>
<p>Workbook<br />
<a href="http://www.salesforce.com/us/developer/docs/workbook/index.htm">http://www.salesforce.com/us/developer/docs/workbook/index.htm</a></p>
<p>Fundamentals<br />
<a href="http://www.salesforce.com/us/developer/docs/fundamentals/index.htm">http://www.salesforce.com/us/developer/docs/fundamentals/index.htm</a></p>
<p>Cookbook<br />
<a href="http://www.salesforce.com/us/developer/docs/cookbook/index.htm">http://www.salesforce.com/us/developer/docs/cookbook/index.htm</a></p>
<p>Apex Advanced Code Example<br />
<a href="http://www.salesforce.com/us/developer/docs/apexcode/Content/apex_shopping_cart_example.htm">http://www.salesforce.com/us/developer/docs/apexcode/Content/apex_shopping_cart_example.htm</a><br />
<a href="https://sites.secure.force.com/appexchange/listingDetail?listingId=a0N30000001saDCEAY">https://sites.secure.force.com/appexchange/listingDetail?listingId=a0N30000001saDCEAY</a></p>
<p>And many more to come!</p>

<p><a href="http://feedads.g.doubleclick.net/~a/2GoFFVyOJes9XpD6qMv4LMYXKBQ/0/da"><img src="http://feedads.g.doubleclick.net/~a/2GoFFVyOJes9XpD6qMv4LMYXKBQ/0/di" border="0" ismap="true"></img></a><br/>
<a href="http://feedads.g.doubleclick.net/~a/2GoFFVyOJes9XpD6qMv4LMYXKBQ/1/da"><img src="http://feedads.g.doubleclick.net/~a/2GoFFVyOJes9XpD6qMv4LMYXKBQ/1/di" border="0" ismap="true"></img></a></p><div class="feedflare">
<a href="http://feeds.feedburner.com/~ff/x2od_wp?a=vVxupa22a_4:rScOPJSURtk:D7DqB2pKExk"><img src="http://feeds.feedburner.com/~ff/x2od_wp?i=vVxupa22a_4:rScOPJSURtk:D7DqB2pKExk" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/x2od_wp?a=vVxupa22a_4:rScOPJSURtk:dnMXMwOfBR0"><img src="http://feeds.feedburner.com/~ff/x2od_wp?d=dnMXMwOfBR0" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/x2od_wp?a=vVxupa22a_4:rScOPJSURtk:qj6IDK7rITs"><img src="http://feeds.feedburner.com/~ff/x2od_wp?d=qj6IDK7rITs" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/x2od_wp?a=vVxupa22a_4:rScOPJSURtk:yIl2AUoC8zA"><img src="http://feeds.feedburner.com/~ff/x2od_wp?d=yIl2AUoC8zA" border="0"></img></a>
</div><img src="http://feeds.feedburner.com/~r/x2od_wp/~4/vVxupa22a_4" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://www.x2od.com/2009/11/19/new-developer-library-released.html/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		<feedburner:origLink>http://www.x2od.com/2009/11/19/new-developer-library-released.html</feedburner:origLink></item>
		<item>
		<title>Dreamforce Keynote – Chatter and the Platform</title>
		<link>http://feedproxy.google.com/~r/x2od_wp/~3/Ivv4Kwj_k68/dreamforce-keynote-chatter-platform.html</link>
		<comments>http://www.x2od.com/2009/11/18/dreamforce-keynote-chatter-platform.html#comments</comments>
		<pubDate>Wed, 18 Nov 2009 21:30:48 +0000</pubDate>
		<dc:creator>David Schach</dc:creator>
				<category><![CDATA[salesforce.com]]></category>
		<category><![CDATA[Dreamforce 2009]]></category>

		<guid isPermaLink="false">http://www.x2od.com/?p=830</guid>
		<description><![CDATA[There is no way to write one post to cover everything, so I want to address one thing that some people may not have noticed:
Salesforce Chatter is being pushed as a platform layer.
Looking at the “chiclet” slide that Marc Benioff unveiled, let’s start with the “old” slide:

Yes, this is not the exact slide, but getting [...]]]></description>
			<content:encoded><![CDATA[<p>There is no way to write one post to cover everything, so I want to address one thing that some people may not have noticed:</p>
<p><a href=” http://www.salesforce.com/company/news-press/press-releases/2009/11/091118.jsp” target=”_parent” >Salesforce Chatter</a> is being pushed as a platform layer.</p>
<p>Looking at the “chiclet” slide that Marc Benioff unveiled, let’s start with the “old” slide:</p>
<p><center><a href="http://www.x2od.com/wp/uploads/OldPlatformChiclet.png" border="0" ><img src="http://www.x2od.com/wp/uploads/OldPlatformChiclet.png" width="500px"/></a></center></p>
<p>Yes, this is not the exact slide, but getting a copy of the initial slide is proving difficult. We'll have to use this one from Dreamforce 2008 as a reference, and will need to imagine the rest.</p>
<ul>
<li>Notice that the bottom level is Infrastructure.  This is the hardware that salesforce.com provides along with the promise that it will work properly.  It is called Infrastructure as a Service, and there’s nothing new about that.</li>
<li>On top of that is what we call the Force.com Platform.  This includes Apex code, workflow, analytics, and Visualforce. </li>
<li>And on top of that are the clouds: Service Cloud 2, Sales Cloud 2, and Custom Cloud.</li>
</ul>
<p>However, the first new chiclet slide that Marc showed was misleading.  The item with the big question mark was a cloud.  And Chatter is not only a cloud.</p>
<p>Once Chatter was shown and demonstrated, the new chiclet slide did not just show it as a cloud.  It was also shown as another platform layer.  This is huge.</p>
<p><center><a href="http://www.x2od.com/wp/uploads/Chatter-chiclet.png" border="0" ><img src="http://www.x2od.com/wp/uploads/Chatter-chiclet.png" width="500px"/></a></center></p>
<p><br/></p>
<p>Chatter, clearly, is not just an application that sits on top of Salesforce CRM and the Force.com platform.  (Examples of these are AppExchange apps like FinancialForce and even integration features like Google Docs for Salesforce.)  Chatter is an integral part of the platform and will be a part of every customization.  What does this mean?  Just as with every custom object comes the ability to make Workflow and Validation Rules, with every custom object will come the ability to include Chatter features.</p>
<p><em>So let’s talk about the new slide.  First, something negative:</em></p>
<p>From an IT perspective, we know that there are three levels to Software as a Service: Infrastructure as a Service, Platform as a Service, and Application as a Service.  Where does Chatter fit in?  I have no idea.  In the Platform?  No.  Platform features are data-driven and can exist without a user-interface.  In Infrastructure?  Obviously not.  So Chatter must be an Application.  Obviously, salesforce.com is including Chatter as features in every application.  But just because it is ubiquitous does not mean that it is a platform layer. </p>
<p><em>Now, something positive:</em></p>
<p>From a marketing perspective, nobody cares about the Service layers.  Infrastructure?  Platform?  Application?  All the people with money (CXOs) care about is what they’re going to get and what the product can do.  If we look at the slide as a selling-tool, it’s perfect.  It shows us features that are available across the board, in every object.  </p>
<p><strong>So my conclusion:</strong> </p>
<p>If I take off my developer hat, Chatter is a great feature that will help businesses run better.  Sure, the slide is funny-looking, but it works.</p>

<p><a href="http://feedads.g.doubleclick.net/~a/IzJQThXq2VjIF_Bdkp9qfY00jFw/0/da"><img src="http://feedads.g.doubleclick.net/~a/IzJQThXq2VjIF_Bdkp9qfY00jFw/0/di" border="0" ismap="true"></img></a><br/>
<a href="http://feedads.g.doubleclick.net/~a/IzJQThXq2VjIF_Bdkp9qfY00jFw/1/da"><img src="http://feedads.g.doubleclick.net/~a/IzJQThXq2VjIF_Bdkp9qfY00jFw/1/di" border="0" ismap="true"></img></a></p><div class="feedflare">
<a href="http://feeds.feedburner.com/~ff/x2od_wp?a=Ivv4Kwj_k68:Ul5Pe4JVnEE:D7DqB2pKExk"><img src="http://feeds.feedburner.com/~ff/x2od_wp?i=Ivv4Kwj_k68:Ul5Pe4JVnEE:D7DqB2pKExk" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/x2od_wp?a=Ivv4Kwj_k68:Ul5Pe4JVnEE:dnMXMwOfBR0"><img src="http://feeds.feedburner.com/~ff/x2od_wp?d=dnMXMwOfBR0" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/x2od_wp?a=Ivv4Kwj_k68:Ul5Pe4JVnEE:qj6IDK7rITs"><img src="http://feeds.feedburner.com/~ff/x2od_wp?d=qj6IDK7rITs" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/x2od_wp?a=Ivv4Kwj_k68:Ul5Pe4JVnEE:yIl2AUoC8zA"><img src="http://feeds.feedburner.com/~ff/x2od_wp?d=yIl2AUoC8zA" border="0"></img></a>
</div><img src="http://feeds.feedburner.com/~r/x2od_wp/~4/Ivv4Kwj_k68" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://www.x2od.com/2009/11/18/dreamforce-keynote-chatter-platform.html/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		<feedburner:origLink>http://www.x2od.com/2009/11/18/dreamforce-keynote-chatter-platform.html</feedburner:origLink></item>
		<item>
		<title>Salesforce.com Releases “Chatter” – a first look</title>
		<link>http://feedproxy.google.com/~r/x2od_wp/~3/ShtcKZpZwR0/salesforce-com-releases-chatter-a-first-look.html</link>
		<comments>http://www.x2od.com/2009/11/18/salesforce-com-releases-chatter-a-first-look.html#comments</comments>
		<pubDate>Wed, 18 Nov 2009 17:28:08 +0000</pubDate>
		<dc:creator>David Schach</dc:creator>
				<category><![CDATA[salesforce.com]]></category>
		<category><![CDATA[Dreamforce 2009]]></category>

		<guid isPermaLink="false">http://www.x2od.com/?p=823</guid>
		<description><![CDATA[The keynote hasn’t even started and already there is a lot of chatter on twitter and the web about salesforce.com’s new offering: Salesforce Chatter.
In the Blog Pound, we were given books of Service Cloud success stories and chattering-teeth.  The press packets were handed out, full of descriptions of Salesforce CRM’s new releases, all focused [...]]]></description>
			<content:encoded><![CDATA[<p>The keynote hasn’t even started and already there is a lot of chatter on twitter and the web about salesforce.com’s new offering: Salesforce Chatter.<br />
In the Blog Pound, we were given books of Service Cloud success stories and chattering-teeth.  The press packets were handed out, full of descriptions of Salesforce CRM’s new releases, all focused on the Service Cloud.<br />
The biggest release is Salesforce Chatter, an enterprise collaboration – social computing mashup (http://www.salesforce.com/chatter &#8211; link inactive at posting time).  It combines Content, Apps, and People in a secure environment within each company.<br />
The features will include <strong>Profiles </strong>(user profiles like Facebook pages), <strong>Status Updates</strong>, <strong>Feeds </strong>(such as announcements when Salesforce Content files are updated or triggered announcements analogous to workflow emails/tasks), <strong>Groups </strong>(like CRM groups or Content workspaces), <strong>Social Apps</strong> (really just an RSS-type feature), <strong>Social Content</strong> (file sharing), <strong>Social Sharing</strong> (a euphemism for security model), and <strong>Twitter </strong>(referring more to the already-released Twitter integration features), <strong>Facebook </strong>(with auto-population from Facebook profiles), <strong>AppExchange </strong>(ISV partners can integrate App updates to a Chatter feed), and <strong>Mobile </strong>(allowing the Chatter features to travel).</p>

<p><a href="http://feedads.g.doubleclick.net/~a/y8Ddn3JFHEZUUxcgUmO75yJfX10/0/da"><img src="http://feedads.g.doubleclick.net/~a/y8Ddn3JFHEZUUxcgUmO75yJfX10/0/di" border="0" ismap="true"></img></a><br/>
<a href="http://feedads.g.doubleclick.net/~a/y8Ddn3JFHEZUUxcgUmO75yJfX10/1/da"><img src="http://feedads.g.doubleclick.net/~a/y8Ddn3JFHEZUUxcgUmO75yJfX10/1/di" border="0" ismap="true"></img></a></p><div class="feedflare">
<a href="http://feeds.feedburner.com/~ff/x2od_wp?a=ShtcKZpZwR0:CrvNvF90m78:D7DqB2pKExk"><img src="http://feeds.feedburner.com/~ff/x2od_wp?i=ShtcKZpZwR0:CrvNvF90m78:D7DqB2pKExk" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/x2od_wp?a=ShtcKZpZwR0:CrvNvF90m78:dnMXMwOfBR0"><img src="http://feeds.feedburner.com/~ff/x2od_wp?d=dnMXMwOfBR0" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/x2od_wp?a=ShtcKZpZwR0:CrvNvF90m78:qj6IDK7rITs"><img src="http://feeds.feedburner.com/~ff/x2od_wp?d=qj6IDK7rITs" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/x2od_wp?a=ShtcKZpZwR0:CrvNvF90m78:yIl2AUoC8zA"><img src="http://feeds.feedburner.com/~ff/x2od_wp?d=yIl2AUoC8zA" border="0"></img></a>
</div><img src="http://feeds.feedburner.com/~r/x2od_wp/~4/ShtcKZpZwR0" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://www.x2od.com/2009/11/18/salesforce-com-releases-chatter-a-first-look.html/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		<feedburner:origLink>http://www.x2od.com/2009/11/18/salesforce-com-releases-chatter-a-first-look.html</feedburner:origLink></item>
		<item>
		<title>Dreamforce 2009 Day 1: Prep</title>
		<link>http://feedproxy.google.com/~r/x2od_wp/~3/XoBnTBa9Zi4/dreamforce-2009-day-1-prep.html</link>
		<comments>http://www.x2od.com/2009/11/18/dreamforce-2009-day-1-prep.html#comments</comments>
		<pubDate>Wed, 18 Nov 2009 16:23:20 +0000</pubDate>
		<dc:creator>David Schach</dc:creator>
				<category><![CDATA[salesforce.com]]></category>
		<category><![CDATA[Dreamforce 2009]]></category>

		<guid isPermaLink="false">http://www.x2od.com/?p=817</guid>
		<description><![CDATA[Good morning, all!  As Dreamforce is this week, I&#8217;ll be sharing more frequently, updating after every major session and sharing code and config tips picked up during the conference.  Salesforce.com was kind enough to give me a Blogger pass, so I may have access to some interesting news; I&#8217;ll be sure to share [...]]]></description>
			<content:encoded><![CDATA[<p>Good morning, all!  As Dreamforce is this week, I&#8217;ll be sharing more frequently, updating after every major session and sharing code and config tips picked up during the conference.  Salesforce.com was kind enough to give me a Blogger pass, so I may have access to some interesting news; I&#8217;ll be sure to share it here.<br />
Last night was the Dreamforce 2009 Tweetup, organized by yours-truly and sponsored by Jon Mountjoy, Community Manager at Force.com and by Appirio, who has a booth in the Expo.  A good time was had by all, as people who have only known each other via 140-character text snippets and cartoon-character avatars were able finally to meet.<br />
The Salesforce Twitter community has evolved organically, coming into being without any intervention from salesforce.com, but the company has been quick to react, bringing many of its people into the Twittersphere under official Salesforce Twitter accounts such as @asksalesforce, @forcedotcom, and the like.  This coincides with some super new offerings in the Service cloud over the past year (and to be announced at Dreamforce), and salesforce.com has said that one has fed into the other.<br />
On a side note, kudos to salesforce.com for its responsiveness to its partner and customer communities, both via official (http://ideas.salesforce.com and http://www.salesforce.com/community) and unofficial (responding to blog posts and emails) channels.<br />
Joining me in the press room are Jeff Grosse of www.crmfyi.com and www.salesforcechannel.com and John Rotenstein of www.theenforcer.net.  We’re prepping for the press briefing, which starts shortly.  We’ll all be sure to share what we learn as we learn it.</p>
<p>And to all the tweeters out there, don&#8217;t forget to use #df09 and #forcedotcom!</p>

<p><a href="http://feedads.g.doubleclick.net/~a/MGcW45svoL3_EuDntDXT5noEN8s/0/da"><img src="http://feedads.g.doubleclick.net/~a/MGcW45svoL3_EuDntDXT5noEN8s/0/di" border="0" ismap="true"></img></a><br/>
<a href="http://feedads.g.doubleclick.net/~a/MGcW45svoL3_EuDntDXT5noEN8s/1/da"><img src="http://feedads.g.doubleclick.net/~a/MGcW45svoL3_EuDntDXT5noEN8s/1/di" border="0" ismap="true"></img></a></p><div class="feedflare">
<a href="http://feeds.feedburner.com/~ff/x2od_wp?a=XoBnTBa9Zi4:2mdXwGgRj8E:D7DqB2pKExk"><img src="http://feeds.feedburner.com/~ff/x2od_wp?i=XoBnTBa9Zi4:2mdXwGgRj8E:D7DqB2pKExk" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/x2od_wp?a=XoBnTBa9Zi4:2mdXwGgRj8E:dnMXMwOfBR0"><img src="http://feeds.feedburner.com/~ff/x2od_wp?d=dnMXMwOfBR0" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/x2od_wp?a=XoBnTBa9Zi4:2mdXwGgRj8E:qj6IDK7rITs"><img src="http://feeds.feedburner.com/~ff/x2od_wp?d=qj6IDK7rITs" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/x2od_wp?a=XoBnTBa9Zi4:2mdXwGgRj8E:yIl2AUoC8zA"><img src="http://feeds.feedburner.com/~ff/x2od_wp?d=yIl2AUoC8zA" border="0"></img></a>
</div><img src="http://feeds.feedburner.com/~r/x2od_wp/~4/XoBnTBa9Zi4" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://www.x2od.com/2009/11/18/dreamforce-2009-day-1-prep.html/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		<feedburner:origLink>http://www.x2od.com/2009/11/18/dreamforce-2009-day-1-prep.html</feedburner:origLink></item>
		<item>
		<title>SugarCRM: Shenanigans!</title>
		<link>http://feedproxy.google.com/~r/x2od_wp/~3/liMkn6hglH4/sugarcrm-shenanigans.html</link>
		<comments>http://www.x2od.com/2009/11/18/sugarcrm-shenanigans.html#comments</comments>
		<pubDate>Wed, 18 Nov 2009 16:13:06 +0000</pubDate>
		<dc:creator>David Schach</dc:creator>
				<category><![CDATA[salesforce.com]]></category>
		<category><![CDATA[#df09]]></category>
		<category><![CDATA[Dreamforce 2009]]></category>

		<guid isPermaLink="false">http://www.x2od.com/?p=809</guid>
		<description><![CDATA[This morning I was greeted by this email from SugarCRM (actually two emails):

Dear David
Marc Benioff has a few zingers for SugarCRM in his new book Behind the Cloud:
“We knew that we had truly emerged as the market leader in the eyes of the industry when we arrived at Dreamforce 2006 to find that a handful [...]]]></description>
			<content:encoded><![CDATA[<p>This morning I was greeted by this email from SugarCRM (actually two emails):<br />
<code><br />
Dear David<br />
Marc Benioff has a few zingers for SugarCRM in his new book Behind the Cloud:<br />
“We knew that we had truly emerged as the market leader in the eyes of the industry when we arrived at Dreamforce 2006 to find that a handful of employees from a small CRM company had set up a mock protest outside the convention center. I’m not really sure what they were protesting, and it was a small, low-budget, and poorly executed rip-off of the types of tactics we had invented, but that wasn’t the point. The point was that we knew not to get ruffled.”  - Page 65 of Behind the Cloud by Marc Benioff, Chairman and CEO of Salesforce.com.<br />
SugarCRM is sorry they disappointed Marc during their first visit to Dreamforce in 2006. Marc even challenged them to “step up the innovation”:<br />
“We did not want this company to get free PR on our coattails! Ignoring this escapade worked well. A blogger asked a Dreamforce attendee if she had seen what was going on outside when she arrived, and she replied that it must have been some kind of Salesforce.com stunt. (Note: if you are going to compete with someone at his or her own game, always remember to step up the innovation.)” - Page 65 of “Behind the Cloud” by Marc Benioff, Chairman and CEO of Salesforce.com<br />
Marc was right. Game on.<br />
In continuing its long love affair with the industry’s most down-to-earth CEO and its commitment to staging “small, low-budget, and poorly executed rip-off [tactics]”, SugarCRM is currently distributing 1,000 copies of “Behind the Smokescreen: The Untold Story of How Salesforce.com Still Manages to Sell 1999 technology 10 years later” at Dreamforce today.<br />
With an endorsement from North Korean leader Kim Jong II (“A great guide for any entrepreneur, CEO, or Head of State looking to promote openness and freedom”), Behind the Smokescreen is a response to the magical Salesforce.com marketing that has transformed the company’s service from .com ASP to On-Demand SaaS to Cloud Computing without changing its architecture </code><br />
<em>[note: the version of this email from Chris Harrick of "The Sugar Team" says, "to Cloud Computing without being apple to run its service on Amazon EC2, Microsoft Azure or other cloud services." - Hey Chris, those are other platforms.  Salesforce is NOT SUPPOSED TO RUN on those.  But it could integrate quite well!]</em><br />
<code>You can read the full book here: www.sugarcrm.com/smokescreen.<br />
To celebrate the release of the book, SugarCRM is offering a free data migration for Salesforce.com users through the end of the year. Registrants will have a chance to win a free Motorola Droid.<br />
SugarCRM hopes that the publication of this book “step[s] up the innovation” in Marc’s eyes. Please let us know if you’d like to speak with someone from SugarCRM about this campaign.<br />
Regards,<br />
Lisa Holden on behalf of The SugarCRM Team<br />
(415) 817-2509<br />
lholden@schwartz-pr.com<br />
</code></p>
<p>I&#8217;m not sure what they&#8217;re trying to do, but they&#8217;re certainly not making it look like they&#8217;re worth my time.  The Kim Jong Il joke is pathetic (though a deeper look at the text shows that it&#8217;s actually &#8220;Kim Jong II&#8221; &#8211; as in Kim Jong the Second) and there is at least one blatantly inflammatory remark:<br />
Here&#8217;s a tip for SugarCRM: Salesforce CRM and the Force.com Platform are NOT SUPPOSED to run on Amazon SC2 nor Microsoft Azure!<br />
To be fair, since Benioff is well-known for his demonstrations outside Oracle OpenWorld a few years ago (his own demonstration to which he alludes in his page 65 quote), SugarCRM&#8217;s tactic is understandable &#8211; but hopefully our Fearless Forceful Leader takes this more as a compliment (imitation and flattery and what-not) than an attack.<br />
That&#8217;s all.  No need to pick up a physical copy of the book &#8211; it&#8217;s available for download.  In fact, I propose that someone host a copy on another site for download so that SugarCRM believes that far fewer people have downloaded the file.<br />
Back to your regularly-scheduled Dreamforce programming.</p>

<p><a href="http://feedads.g.doubleclick.net/~a/j9YJSJn6q7NZ8q4yHjpLA7tH_cA/0/da"><img src="http://feedads.g.doubleclick.net/~a/j9YJSJn6q7NZ8q4yHjpLA7tH_cA/0/di" border="0" ismap="true"></img></a><br/>
<a href="http://feedads.g.doubleclick.net/~a/j9YJSJn6q7NZ8q4yHjpLA7tH_cA/1/da"><img src="http://feedads.g.doubleclick.net/~a/j9YJSJn6q7NZ8q4yHjpLA7tH_cA/1/di" border="0" ismap="true"></img></a></p><div class="feedflare">
<a href="http://feeds.feedburner.com/~ff/x2od_wp?a=liMkn6hglH4:IgyaSZAf4fw:D7DqB2pKExk"><img src="http://feeds.feedburner.com/~ff/x2od_wp?i=liMkn6hglH4:IgyaSZAf4fw:D7DqB2pKExk" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/x2od_wp?a=liMkn6hglH4:IgyaSZAf4fw:dnMXMwOfBR0"><img src="http://feeds.feedburner.com/~ff/x2od_wp?d=dnMXMwOfBR0" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/x2od_wp?a=liMkn6hglH4:IgyaSZAf4fw:qj6IDK7rITs"><img src="http://feeds.feedburner.com/~ff/x2od_wp?d=qj6IDK7rITs" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/x2od_wp?a=liMkn6hglH4:IgyaSZAf4fw:yIl2AUoC8zA"><img src="http://feeds.feedburner.com/~ff/x2od_wp?d=yIl2AUoC8zA" border="0"></img></a>
</div><img src="http://feeds.feedburner.com/~r/x2od_wp/~4/liMkn6hglH4" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://www.x2od.com/2009/11/18/sugarcrm-shenanigans.html/feed</wfw:commentRss>
		<slash:comments>1</slash:comments>
		<feedburner:origLink>http://www.x2od.com/2009/11/18/sugarcrm-shenanigans.html</feedburner:origLink></item>
		<item>
		<title>Dreamforce Starting Today</title>
		<link>http://feedproxy.google.com/~r/x2od_wp/~3/6AIBL1nBTOk/dreamforce-starting-today.html</link>
		<comments>http://www.x2od.com/2009/11/17/dreamforce-starting-today.html#comments</comments>
		<pubDate>Wed, 18 Nov 2009 00:22:18 +0000</pubDate>
		<dc:creator>David Schach</dc:creator>
				<category><![CDATA[salesforce.com]]></category>
		<category><![CDATA[Dreamforce 2009]]></category>

		<guid isPermaLink="false">http://www.x2od.com/2009/11/17/dreamforce-starting-today.html</guid>
		<description><![CDATA[This year, I&#8217;ve been given a Blogger pass to Dreamforce, so I&#8217;ll be reporting on happenings fairly regularly.  Stay tuned for news, stories, and tips.  I&#8217;m also planning to post any interesting code from the various developer sessions, so stay tuned!
And for my fellow tweeters and bloggers, come to the Dreamforce 2009 Tweetup [...]]]></description>
			<content:encoded><![CDATA[<p>This year, I&#8217;ve been given a Blogger pass to Dreamforce, so I&#8217;ll be reporting on happenings fairly regularly.  Stay tuned for news, stories, and tips.  I&#8217;m also planning to post any interesting code from the various developer sessions, so stay tuned!<br />
And for my fellow tweeters and bloggers, come to the Dreamforce 2009 Tweetup at 6pm in the Dev Zone Force.com Theater.</p>

<p><a href="http://feedads.g.doubleclick.net/~a/KOl6W8wek9zpnXXvKOCkPdEVB8c/0/da"><img src="http://feedads.g.doubleclick.net/~a/KOl6W8wek9zpnXXvKOCkPdEVB8c/0/di" border="0" ismap="true"></img></a><br/>
<a href="http://feedads.g.doubleclick.net/~a/KOl6W8wek9zpnXXvKOCkPdEVB8c/1/da"><img src="http://feedads.g.doubleclick.net/~a/KOl6W8wek9zpnXXvKOCkPdEVB8c/1/di" border="0" ismap="true"></img></a></p><div class="feedflare">
<a href="http://feeds.feedburner.com/~ff/x2od_wp?a=6AIBL1nBTOk:Wy-uN84V9F8:D7DqB2pKExk"><img src="http://feeds.feedburner.com/~ff/x2od_wp?i=6AIBL1nBTOk:Wy-uN84V9F8:D7DqB2pKExk" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/x2od_wp?a=6AIBL1nBTOk:Wy-uN84V9F8:dnMXMwOfBR0"><img src="http://feeds.feedburner.com/~ff/x2od_wp?d=dnMXMwOfBR0" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/x2od_wp?a=6AIBL1nBTOk:Wy-uN84V9F8:qj6IDK7rITs"><img src="http://feeds.feedburner.com/~ff/x2od_wp?d=qj6IDK7rITs" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/x2od_wp?a=6AIBL1nBTOk:Wy-uN84V9F8:yIl2AUoC8zA"><img src="http://feeds.feedburner.com/~ff/x2od_wp?d=yIl2AUoC8zA" border="0"></img></a>
</div><img src="http://feeds.feedburner.com/~r/x2od_wp/~4/6AIBL1nBTOk" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://www.x2od.com/2009/11/17/dreamforce-starting-today.html/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		<feedburner:origLink>http://www.x2od.com/2009/11/17/dreamforce-starting-today.html</feedburner:origLink></item>
		<item>
		<title>Trigger to help Salesforce for Twitter</title>
		<link>http://feedproxy.google.com/~r/x2od_wp/~3/kkHZnnlpGgw/trigger-to-help-salesforce-for-twitter.html</link>
		<comments>http://www.x2od.com/2009/10/06/trigger-to-help-salesforce-for-twitter.html#comments</comments>
		<pubDate>Tue, 06 Oct 2009 19:20:39 +0000</pubDate>
		<dc:creator>David Schach</dc:creator>
				<category><![CDATA[salesforce.com]]></category>
		<category><![CDATA[Apex]]></category>
		<category><![CDATA[Force.com Platform]]></category>
		<category><![CDATA[New Features]]></category>

		<guid isPermaLink="false">http://www.x2od.com/?p=767</guid>
		<description><![CDATA[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:]]></description>
			<content:encoded><![CDATA[<p><a href="http://sites.force.com/appexchange/listingDetail?listingId=a0N30000001gpWNEAY">Salesforce for Twitter</a> 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.</p>
<p>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:</p>
<p>Firstly, thank you to Scott Hemmeter at <a href="http://www.arrowpointe.com">Arrowpointe</a>, who wrote the <a href="http://sfdc.arrowpointe.com/2008/09/13/bulkifying-a-trigger-an-example/">original code</a> that I customized.</p>
<p>Secondly, you could easily duplicate this trigger and set it to run on the Contact object as well.  </p>
<p><b>Please don't set the trigger to "after update," as in testing, it ran into problems when converting a Lead and merging with a Contact already on the "Twitter" campaign.</b></p>

<pre class="brush: java;">
trigger AddToTwitterCampaign on Lead (after insert) {

    // List containing each Lead being processed
    list&lt;Lead&gt; theLeads = new list&lt;Lead&gt;(); 
      
    //We only execute if we have a campaign named &quot;Twitter&quot;

    if([SELECT Count() FROM Campaign WHERE name = 'Twitter'] == 1){
        Campaign TC = [SELECT id, name FROM Campaign WHERE name = 'Twitter' LIMIT 1];
        
        for(Lead l:trigger.new) { 
            if (l.leadsource.indexOf('Twitter',0 ) &gt;= 0 ||  l.leadsource.indexOf('Tweet',0 ) &gt;= 0 ){  
                theLeads.add(l); // add lead to the main lead list
                }
            }
      
      // List containing Campaign Member records to be inserted
      list &lt;CampaignMember&gt; theCampaignMembers = new list&lt;CampaignMember&gt;(); 
    
      for (Lead ld:theLeads) {
          CampaignMember cml = new CampaignMember();
          cml.leadid = ld.id;
          cml.campaignid = TC.id;
          theCampaignMembers.add(cml);
        }

     //Insert the list of Campaign Members
      if(!theCampaignMembers.isEmpty()){
        insert theCampaignMembers;
        }
    }
}
</pre>
<p>The trigger requires that you have a Campaign called "Twitter," but feel free to change that to anything else you'd like.</p>
<p>Don't worry if you have other triggers that add Leads to Campaigns - this can work alongside them, so you can add Leads to as many Campaigns as you'd like.</p>
<p><a href="http://feedads.g.doubleclick.net/~a/U3nKhiOlCwC-ErC5Rl2K68bAFGU/0/da"><img src="http://feedads.g.doubleclick.net/~a/U3nKhiOlCwC-ErC5Rl2K68bAFGU/0/di" border="0" ismap="true"></img></a><br/>
<a href="http://feedads.g.doubleclick.net/~a/U3nKhiOlCwC-ErC5Rl2K68bAFGU/1/da"><img src="http://feedads.g.doubleclick.net/~a/U3nKhiOlCwC-ErC5Rl2K68bAFGU/1/di" border="0" ismap="true"></img></a></p><div class="feedflare">
<a href="http://feeds.feedburner.com/~ff/x2od_wp?a=kkHZnnlpGgw:Nj4IDMPxEMY:D7DqB2pKExk"><img src="http://feeds.feedburner.com/~ff/x2od_wp?i=kkHZnnlpGgw:Nj4IDMPxEMY:D7DqB2pKExk" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/x2od_wp?a=kkHZnnlpGgw:Nj4IDMPxEMY:dnMXMwOfBR0"><img src="http://feeds.feedburner.com/~ff/x2od_wp?d=dnMXMwOfBR0" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/x2od_wp?a=kkHZnnlpGgw:Nj4IDMPxEMY:qj6IDK7rITs"><img src="http://feeds.feedburner.com/~ff/x2od_wp?d=qj6IDK7rITs" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/x2od_wp?a=kkHZnnlpGgw:Nj4IDMPxEMY:yIl2AUoC8zA"><img src="http://feeds.feedburner.com/~ff/x2od_wp?d=yIl2AUoC8zA" border="0"></img></a>
</div><img src="http://feeds.feedburner.com/~r/x2od_wp/~4/kkHZnnlpGgw" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://www.x2od.com/2009/10/06/trigger-to-help-salesforce-for-twitter.html/feed</wfw:commentRss>
		<slash:comments>1</slash:comments>
		<feedburner:origLink>http://www.x2od.com/2009/10/06/trigger-to-help-salesforce-for-twitter.html</feedburner:origLink></item>
		<item>
		<title>Filtered Lookups, Validation Rules, and Order of Execution</title>
		<link>http://feedproxy.google.com/~r/x2od_wp/~3/baWz31dikOY/filtered-lookups-validation-rules-and-order-of-execution.html</link>
		<comments>http://www.x2od.com/2009/10/06/filtered-lookups-validation-rules-and-order-of-execution.html#comments</comments>
		<pubDate>Tue, 06 Oct 2009 15:47:34 +0000</pubDate>
		<dc:creator>David Schach</dc:creator>
				<category><![CDATA[Configuration]]></category>
		<category><![CDATA[Native Application]]></category>
		<category><![CDATA[New Features]]></category>
		<category><![CDATA[Tips and Tricks]]></category>
		<category><![CDATA[Winter 10]]></category>
		<category><![CDATA[salesforce.com]]></category>
		<category><![CDATA[Force.com Builder]]></category>
		<category><![CDATA[Force.com Platform]]></category>

		<guid isPermaLink="false">http://www.x2od.com/?p=771</guid>
		<description><![CDATA[Reading the cheatsheet for Filtered Lookup (beta), I noticed an interesting line:
Lookup filters function similarly to validation rules when you save a record. That is, actions that cause related records to save, such as changes to a roll-up summary fields, also trigger the lookup filters on the related record and block the save.
The implications for [...]]]></description>
			<content:encoded><![CDATA[<p>Reading the <a href="http://drop.io/ds/asset/filtered-lookup-cheatsheet-beta">cheatsheet for Filtered Lookup (beta)</a>, I noticed an interesting line:</p>
<p><code>Lookup filters function similarly to validation rules when you save a record. That is, actions that cause related records to save, such as changes to a roll-up summary fields, also trigger the lookup filters on the related record and block the save.</code></p>
<p>The implications for this are massive.  Let's explore two examples:</p>
<p><strong>Example 1: Filter as Validation Rule from Parent Record</strong></p>
<ul>
	<li>We create a lookup on a Child object to Parent.</li>
	<li>We filter the lookup to EXCLUDE Parent.Status = 'Closed' (Parent.Status is only Open or Closed.)</li>
	<li>We can edit the Child records as long as the Parent Status is not Closed.</li>
	<li>When Parent.Status is changed to Closed, existing related Child records are not affected...</li>
	<li><strong>BUT</strong> if we attempt to edit a Child when the Parent is Closed, Force.com will throw an error (which we can customize) beause that the Lookup is invalid.</li>
	<li>(and clearly we cannot add new Child records either)</li>
</ul>
<p><strong>Conclusion:</strong> Thus, Filtered Lookups act much like Validation Rules.  A quick experiment shows that Filtered Lookup errors actually fire <u>before</u> Validation Rules.</p>
<p><strong>Example 2: Filter as Validation Rule on Roll-Up Summary (from Child Record)</strong> - what the line above was referencing</p>
<ul>
	<li>Use the above example, but change the lookup to a master-detail relationship</li>
	<li>Create a Roll-Up Summary field to count all child records</li>
	<li>Prevent saving more than 10 child records for one parent record</li>
</ul>
<p>Here, we have triggered a filter error without touching a parent record, yet we throw an error based on a value on the parent record.</p>
<p>This second example is significant because we could already prevent more than 10 child records from saving, 
but doing so required a Roll-Up Summary field on the parent object AND a Validation Rule on the child object.  
Now we can replace the Validation Rule with the Lookup Filter, though we still need the Roll-Up Summary field.
Whether or not this simplifies things is definitely up for debate...</p>

<h4>Conclusion</h4>
<p>This is a very powerful feature!  Thanks to salesforce.com for rolling it out, even in beta form.</p>
<p><strong>Real world example:</strong> The above example would be great for Time Sheet Entry and Time Sheet Header objects, as they would create, in effect, a validation rule on the Header record preventing editing of any child records.  Awesome!</p>
<P><em>For further reading, check <a href="https://na1.salesforce.com/help/doc/user_ed.jsp?loc=help&target=fields_lookup_filters_examples.htm">Salesforce Help's Lookup Filters examples</a>.</em></p>
<p><a href="http://feedads.g.doubleclick.net/~a/qWo2HthUx5jiCBV-upXwyUP1ark/0/da"><img src="http://feedads.g.doubleclick.net/~a/qWo2HthUx5jiCBV-upXwyUP1ark/0/di" border="0" ismap="true"></img></a><br/>
<a href="http://feedads.g.doubleclick.net/~a/qWo2HthUx5jiCBV-upXwyUP1ark/1/da"><img src="http://feedads.g.doubleclick.net/~a/qWo2HthUx5jiCBV-upXwyUP1ark/1/di" border="0" ismap="true"></img></a></p><div class="feedflare">
<a href="http://feeds.feedburner.com/~ff/x2od_wp?a=baWz31dikOY:G_UaRQRZj-I:D7DqB2pKExk"><img src="http://feeds.feedburner.com/~ff/x2od_wp?i=baWz31dikOY:G_UaRQRZj-I:D7DqB2pKExk" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/x2od_wp?a=baWz31dikOY:G_UaRQRZj-I:dnMXMwOfBR0"><img src="http://feeds.feedburner.com/~ff/x2od_wp?d=dnMXMwOfBR0" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/x2od_wp?a=baWz31dikOY:G_UaRQRZj-I:qj6IDK7rITs"><img src="http://feeds.feedburner.com/~ff/x2od_wp?d=qj6IDK7rITs" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/x2od_wp?a=baWz31dikOY:G_UaRQRZj-I:yIl2AUoC8zA"><img src="http://feeds.feedburner.com/~ff/x2od_wp?d=yIl2AUoC8zA" border="0"></img></a>
</div><img src="http://feeds.feedburner.com/~r/x2od_wp/~4/baWz31dikOY" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://www.x2od.com/2009/10/06/filtered-lookups-validation-rules-and-order-of-execution.html/feed</wfw:commentRss>
		<slash:comments>3</slash:comments>
		<feedburner:origLink>http://www.x2od.com/2009/10/06/filtered-lookups-validation-rules-and-order-of-execution.html</feedburner:origLink></item>
		<item>
		<title>A Mention in the Developers Challenge</title>
		<link>http://feedproxy.google.com/~r/x2od_wp/~3/8YLtEClYOYM/a-mention-in-the-developers-challenge.html</link>
		<comments>http://www.x2od.com/2009/10/02/a-mention-in-the-developers-challenge.html#comments</comments>
		<pubDate>Fri, 02 Oct 2009 19:56:51 +0000</pubDate>
		<dc:creator>David Schach</dc:creator>
				<category><![CDATA[Development]]></category>
		<category><![CDATA[X-Squared On Demand]]></category>
		<category><![CDATA[salesforce.com]]></category>
		<category><![CDATA[Apex]]></category>
		<category><![CDATA[Force.com Platform]]></category>
		<category><![CDATA[Sites]]></category>
		<category><![CDATA[Visualforce]]></category>

		<guid isPermaLink="false">http://www.x2od.com/?p=754</guid>
		<description><![CDATA[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 &#8220;for sheer exuberance!&#8221;  
I&#8217;m really proud of the site, though the lion&#8217;s share of the kudos go to John for the concept and site design.  I just coded whatever [...]]]></description>
			<content:encoded><![CDATA[<p>The salesforce.com <a href="http://blog.sforce.com/sforce/2009/09/developer-force-challenge-results.html">Developer Force Challenge has concluded</a>, and the team of Force Squared and The Enforcer won a mention!</p>
<p>Our <a href="http://www.dailyshinro.com">Daily Shinro</a> site was listed &#8220;for sheer exuberance!&#8221;  </p>
<p>I&#8217;m really proud of the site, though the lion&#8217;s share of the kudos go to John for the concept and site design.  I just coded whatever he told me to code; he&#8217;s the creative one!</p>
<p>So if anyone is looking for a custom Force.com Site or website integration to Salesforce, <a href="/contact">contact us</a> and let&#8217;s discuss your needs!</p>

<p><a href="http://feedads.g.doubleclick.net/~a/c44lpjElL73ltXTRyBImQsSPQrU/0/da"><img src="http://feedads.g.doubleclick.net/~a/c44lpjElL73ltXTRyBImQsSPQrU/0/di" border="0" ismap="true"></img></a><br/>
<a href="http://feedads.g.doubleclick.net/~a/c44lpjElL73ltXTRyBImQsSPQrU/1/da"><img src="http://feedads.g.doubleclick.net/~a/c44lpjElL73ltXTRyBImQsSPQrU/1/di" border="0" ismap="true"></img></a></p><div class="feedflare">
<a href="http://feeds.feedburner.com/~ff/x2od_wp?a=8YLtEClYOYM:Mcs-eWscqbs:D7DqB2pKExk"><img src="http://feeds.feedburner.com/~ff/x2od_wp?i=8YLtEClYOYM:Mcs-eWscqbs:D7DqB2pKExk" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/x2od_wp?a=8YLtEClYOYM:Mcs-eWscqbs:dnMXMwOfBR0"><img src="http://feeds.feedburner.com/~ff/x2od_wp?d=dnMXMwOfBR0" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/x2od_wp?a=8YLtEClYOYM:Mcs-eWscqbs:qj6IDK7rITs"><img src="http://feeds.feedburner.com/~ff/x2od_wp?d=qj6IDK7rITs" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/x2od_wp?a=8YLtEClYOYM:Mcs-eWscqbs:yIl2AUoC8zA"><img src="http://feeds.feedburner.com/~ff/x2od_wp?d=yIl2AUoC8zA" border="0"></img></a>
</div><img src="http://feeds.feedburner.com/~r/x2od_wp/~4/8YLtEClYOYM" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://www.x2od.com/2009/10/02/a-mention-in-the-developers-challenge.html/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		<feedburner:origLink>http://www.x2od.com/2009/10/02/a-mention-in-the-developers-challenge.html</feedburner:origLink></item>
		<item>
		<title>Proof that salesforce.com listens – and comprehends</title>
		<link>http://feedproxy.google.com/~r/x2od_wp/~3/qvga5u9u7Ng/proof-that-salesforce-com-listens-and-comprehends.html</link>
		<comments>http://www.x2od.com/2009/09/29/proof-that-salesforce-com-listens-and-comprehends.html#comments</comments>
		<pubDate>Tue, 29 Sep 2009 18:00:19 +0000</pubDate>
		<dc:creator>David Schach</dc:creator>
				<category><![CDATA[salesforce.com]]></category>
		<category><![CDATA[Configuration]]></category>
		<category><![CDATA[Salesforce.com]]></category>

		<guid isPermaLink="false">http://www.x2od.com/?p=738</guid>
		<description><![CDATA[About two weeks ago, I posted a list of the many setup steps I took to make my Winter ‘10 prerelease org useable. Those are the same steps I have to take whenever setting up any Developer Edition org for the first time as well.
An insider at salesforce.com forwarded me this email that a senior person sent to quite a few also-senior people on various product teams:

Subject:
    Preparing a New Org. Each Pre-Release. In 27 steps.
Body:
    Yikes. http://www.x2od.com/2009/09/16/preparing-a-new-org.html

This is not the most widely-read blog about Salesforce, but it feels good to know that salesforce.com does have its ear to the ground and is taking seriously even the indirect feedback that we bloggers provide.

Kudos, salesforce.com.]]></description>
			<content:encoded><![CDATA[<p>About two weeks ago, I posted a list of the many setup steps I took to make my Winter &#8216;10 prerelease org useable.  Those are the same steps I have to take whenever setting up any Developer Edition org for the first time as well.<br />
An insider at salesforce.com forwarded me this email that a senior person sent to quite a few also-senior people on various product teams:</p>
<pre>
<dl>
<dt><strong>Subject:</strong></dt>
<dd> Preparing a New Org. Each Pre-Release. In 27 steps.</dd>
<dt><strong>Body:</strong></dt>
<dd>Yikes.
<a href="http://www.x2od.com/2009/09/16/preparing-a-new-org.html">http://www.x2od.com/2009/09/16/preparing-a-new-org.html</a></pre>
</dd>
</dl>
<p>This is not the most widely-read blog about Salesforce, but it feels good to know that salesforce.com does have its ear to the ground and is taking seriously even the indirect feedback that we bloggers provide.</p>
<p>Kudos, salesforce.com.</p>
<p>PS. While I&#8217;m at it, I may as well also mention that too many fields are invisible to every profile. Example on Account: Site, Ownership, SIC Code, and more.  And Annual Revenue is invisible to Customer Portal users.  It would be great to have a guide or documentation.<br />
PPS. Turns out that there&#8217;s no rhyme nor reason why some orgs have various fields invisible.  Between demo, developer, trial, prerelease, and more, some fields are available and some are not.  It is a huge waste of time to find all the fields and enable them.</p>

<p><a href="http://feedads.g.doubleclick.net/~a/v72zaEtmjX0YcVHIBkCs1k7KpGU/0/da"><img src="http://feedads.g.doubleclick.net/~a/v72zaEtmjX0YcVHIBkCs1k7KpGU/0/di" border="0" ismap="true"></img></a><br/>
<a href="http://feedads.g.doubleclick.net/~a/v72zaEtmjX0YcVHIBkCs1k7KpGU/1/da"><img src="http://feedads.g.doubleclick.net/~a/v72zaEtmjX0YcVHIBkCs1k7KpGU/1/di" border="0" ismap="true"></img></a></p><div class="feedflare">
<a href="http://feeds.feedburner.com/~ff/x2od_wp?a=qvga5u9u7Ng:OUfh6dlHN28:D7DqB2pKExk"><img src="http://feeds.feedburner.com/~ff/x2od_wp?i=qvga5u9u7Ng:OUfh6dlHN28:D7DqB2pKExk" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/x2od_wp?a=qvga5u9u7Ng:OUfh6dlHN28:dnMXMwOfBR0"><img src="http://feeds.feedburner.com/~ff/x2od_wp?d=dnMXMwOfBR0" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/x2od_wp?a=qvga5u9u7Ng:OUfh6dlHN28:qj6IDK7rITs"><img src="http://feeds.feedburner.com/~ff/x2od_wp?d=qj6IDK7rITs" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/x2od_wp?a=qvga5u9u7Ng:OUfh6dlHN28:yIl2AUoC8zA"><img src="http://feeds.feedburner.com/~ff/x2od_wp?d=yIl2AUoC8zA" border="0"></img></a>
</div><img src="http://feeds.feedburner.com/~r/x2od_wp/~4/qvga5u9u7Ng" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://www.x2od.com/2009/09/29/proof-that-salesforce-com-listens-and-comprehends.html/feed</wfw:commentRss>
		<slash:comments>4</slash:comments>
		<feedburner:origLink>http://www.x2od.com/2009/09/29/proof-that-salesforce-com-listens-and-comprehends.html</feedburner:origLink></item>
		<item>
		<title>Preparing a New Org</title>
		<link>http://feedproxy.google.com/~r/x2od_wp/~3/YCRN0YNXQI8/preparing-a-new-org.html</link>
		<comments>http://www.x2od.com/2009/09/16/preparing-a-new-org.html#comments</comments>
		<pubDate>Wed, 16 Sep 2009 18:44:59 +0000</pubDate>
		<dc:creator>David Schach</dc:creator>
				<category><![CDATA[Configuration]]></category>
		<category><![CDATA[Native Application]]></category>
		<category><![CDATA[Tips and Tricks]]></category>
		<category><![CDATA[salesforce.com]]></category>
		<category><![CDATA[New Features]]></category>

		<guid isPermaLink="false">http://www.x2od.com/?p=717</guid>
		<description><![CDATA[Every time one encounters a fresh org, there are maintenance tasks to perform. I usually go through an org (whether a Developer Edition org or a Prerelease version) and do the same tasks, generally in no particular order. This time, however, I wrote down what I did as I did it. Looking at the list, it's hardly in any "best practices" order at all - it's just how I did it.

There's no need to follow every step, and it is not a complete list of all possibilities, but this should give you some idea of the possibilities and available tweaks: (*** indicates some of the new features in WInter '10)]]></description>
			<content:encoded><![CDATA[<p>With the impending arrival of the Winter 2010 (aka 162 or Winter'10) edition of Salesforce CRM, 
as with every other release, comes a prerelease org.  (You can get one at 
<a href="https://www.salesforce.com/form/trial/prerelease_winter10.jsp">https://www.salesforce.com/form/trial/prerelease_winter10.jsp</a>.)</p>
<p>Every time one encounters a fresh org, there are maintenance tasks to perform.  I usually go through an org (whether a Developer Edition 
org or a Prerelease version) and do the same tasks, generally in no particular order.  This time, however, I wrote down what I did as I did it.  Looking at the list, it's hardly in any
"best practices" order at all - it's just how I did it.</p>
<p>There's no need to follow every step, and it is not a complete list of all possibilities, but this should give you some idea of the possibilities and available tweaks: (*** indicates some of the new features in WInter '10)</p>
<ol>
	<li>Save login with 1Password/Roboform</li>
	<li>Reset (Set) Security Token</li>
	<li>Administration Setup | Security Controls</li>
<ul>
	<li>Session time 8 hrs
	<li>Passwords never expire</li>
</ul>
	<li>Create Record Types (and Business Processes) for Lead, Opportunity, Case</li>
	<li>(Campaigns were not enabled in this prerelease org) - would have configured them here, similarly</li>
	<li>Activities section: Calendar link on sidebar</li>
	<li>Download latest versions of Connect for Outlook, Office Edition</li>
	<li>Opportunities:</li>
<ul>
	<li>Enable Similar Opportunities</li>
	<li>Enable Opportunity Teams</li>
</ul>

	<li>Create Account Master Record Type</li>
	
	<li>Enable Account Teams</li>
<li>Create Contact Master Record Type</li>
<ul><li><i>Note: Asked to add to page layout.  Not asked for Opportunities.</i></li></ul>
	<li>Enable Case Teams</li>
	<li>Enable Public Solutions</li>
	<li>Solutions:</li>
<ul>
	<li>Enable Solution Browsing</li>
	<li>Enable Solution HTML</li>
<li>Could have created a Solution Process & Record Type</li>
	<li>Did not enable multilingual solutions</li>
</ul>
	<li>Enable Self-Service</li>
	<li>Enable Web-to-Case</li>
	<li>Create default Owner, etc (auto prompted)</li>
	<li>Enable PRM and Partner Portal (though have no licenses)</li>
	<li>Salesforce to Salesforce</li>
<ul>
<li>Enabled S2S</li>

	<li>Set up S2S Connection Finder ***</li>
	<li>Added fields to page layout - Kept read-only for all profiles except System Administrator</li>
	<li>Enable Public & Private Tags</li>
</ul>
	<li>Enable Console for all Profiles</li>
	<li>Search Settings - Enable Enhanced Lookup & Auto-Complete</li>
	<li>User Interface</li>
	<ul>
	<li>Separate loading of related lists</li>
	<li>Spell Checker on Tasks & Events</li>
	<li>Collapsible Sidebar</li>
	<li>Custom Sidebar on all Pages</li>
	<li>Enhanced Profile Management ***</li>
	</ul>
	<li>Set myself as default Workflow User</li>
	<li>Looked at Develop | Custom Settings ***</li>
	<li>Created a Default Queue and added myself</li>
	<li>Set all Sharing Rules to Private</li>
	<li>Update Home Page to the way I like it</li>
<ul>
<li>Order of wide section (top down): Calendar, Tasks, Items to Approve, Dashboard</li>
<li>No changes to narrow section</li>
</ul>
</ol>
<p> Other things that may be possible in other orgs:</p>
<ul>
	<li>Enable Customer Portal</li>
	<li>Customize Campaigns</li>
	<li>Set up Sites</li>

</ul>
<p>Again, this is not meant to be a complete list.  Also, it is not intended to be a how-to; for more information you may search the Help link
at the top of every org page, check <a href="http://www.salesforce.com/community">Salesforce Community</a>, or <a href="http://developer.force.com">Developer Force</a>.</p>
<p>Happy configuring!</p?



<p><a href="http://feedads.g.doubleclick.net/~a/OG-0blF4pt1sp9zQY7VlGX6TmRI/0/da"><img src="http://feedads.g.doubleclick.net/~a/OG-0blF4pt1sp9zQY7VlGX6TmRI/0/di" border="0" ismap="true"></img></a><br/>
<a href="http://feedads.g.doubleclick.net/~a/OG-0blF4pt1sp9zQY7VlGX6TmRI/1/da"><img src="http://feedads.g.doubleclick.net/~a/OG-0blF4pt1sp9zQY7VlGX6TmRI/1/di" border="0" ismap="true"></img></a></p><div class="feedflare">
<a href="http://feeds.feedburner.com/~ff/x2od_wp?a=YCRN0YNXQI8:08cEl7swehA:D7DqB2pKExk"><img src="http://feeds.feedburner.com/~ff/x2od_wp?i=YCRN0YNXQI8:08cEl7swehA:D7DqB2pKExk" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/x2od_wp?a=YCRN0YNXQI8:08cEl7swehA:dnMXMwOfBR0"><img src="http://feeds.feedburner.com/~ff/x2od_wp?d=dnMXMwOfBR0" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/x2od_wp?a=YCRN0YNXQI8:08cEl7swehA:qj6IDK7rITs"><img src="http://feeds.feedburner.com/~ff/x2od_wp?d=qj6IDK7rITs" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/x2od_wp?a=YCRN0YNXQI8:08cEl7swehA:yIl2AUoC8zA"><img src="http://feeds.feedburner.com/~ff/x2od_wp?d=yIl2AUoC8zA" border="0"></img></a>
</div><img src="http://feeds.feedburner.com/~r/x2od_wp/~4/YCRN0YNXQI8" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://www.x2od.com/2009/09/16/preparing-a-new-org.html/feed</wfw:commentRss>
		<slash:comments>7</slash:comments>
		<feedburner:origLink>http://www.x2od.com/2009/09/16/preparing-a-new-org.html</feedburner:origLink></item>
		<item>
		<title>Show Current Year Using Only Visualforce</title>
		<link>http://feedproxy.google.com/~r/x2od_wp/~3/U9-_Sry1-yw/show-current-year-using-only-visualforce.html</link>
		<comments>http://www.x2od.com/2009/08/17/show-current-year-using-only-visualforce.html#comments</comments>
		<pubDate>Mon, 17 Aug 2009 17:08:34 +0000</pubDate>
		<dc:creator>David Schach</dc:creator>
				<category><![CDATA[Tips and Tricks]]></category>
		<category><![CDATA[salesforce.com]]></category>
		<category><![CDATA[Visualforce]]></category>

		<guid isPermaLink="false">http://www.x2od.com/?p=698</guid>
		<description><![CDATA[While perusing some websites, looking at html code, I saw something interesting:
A company had used Javascript to update the copyright date of its website using Javascript.  This is the code.

Copyright &#38;copy; 2005-&#60;script type=&#34;text/javascript&#34;&#62;document.write(new Date().getFullYear());&#60;/script&#62; This Company. All rights reserved.

Of course, as a Force.com developer, I prefer to use Visualforce and Apex over Javascript (as [...]]]></description>
			<content:encoded><![CDATA[<p>While perusing some websites, looking at html code, I saw something interesting:
<p>A company had used Javascript to update the copyright date of its website using Javascript.  This is the code.
<pre class="brush: xml;">
Copyright &amp;copy; 2005-&lt;script type=&quot;text/javascript&quot;&gt;document.write(new Date().getFullYear());&lt;/script&gt; This Company. All rights reserved.
</pre>
<p>Of course, as a Force.com developer, I prefer to use Visualforce and Apex over Javascript (as it makes the client thinner - 
thick clients are not my preferred <em>modus operandi</em>).</p>
<p>This is the Visualforce version of the above code; it requires no Apex controller nor extension, and will always display the current year.</p>
<pre class="brush: xml;">
Copyright &amp;copy; 2005-{!year(today())} This Company. All rights reserved.
</pre>
<p>Feel free to use this snippet in your Visualforce pages (including Sites) to ensure that on January 1, you won't look foolish for failing to (shudder) manually
update the footer in your site template.</p>
Happy coding!
<p><a href="http://feedads.g.doubleclick.net/~a/muwmxsq44Bi8eZdacaRc5n2Tdxo/0/da"><img src="http://feedads.g.doubleclick.net/~a/muwmxsq44Bi8eZdacaRc5n2Tdxo/0/di" border="0" ismap="true"></img></a><br/>
<a href="http://feedads.g.doubleclick.net/~a/muwmxsq44Bi8eZdacaRc5n2Tdxo/1/da"><img src="http://feedads.g.doubleclick.net/~a/muwmxsq44Bi8eZdacaRc5n2Tdxo/1/di" border="0" ismap="true"></img></a></p><div class="feedflare">
<a href="http://feeds.feedburner.com/~ff/x2od_wp?a=U9-_Sry1-yw:kT52n7TDqH0:D7DqB2pKExk"><img src="http://feeds.feedburner.com/~ff/x2od_wp?i=U9-_Sry1-yw:kT52n7TDqH0:D7DqB2pKExk" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/x2od_wp?a=U9-_Sry1-yw:kT52n7TDqH0:dnMXMwOfBR0"><img src="http://feeds.feedburner.com/~ff/x2od_wp?d=dnMXMwOfBR0" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/x2od_wp?a=U9-_Sry1-yw:kT52n7TDqH0:qj6IDK7rITs"><img src="http://feeds.feedburner.com/~ff/x2od_wp?d=qj6IDK7rITs" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/x2od_wp?a=U9-_Sry1-yw:kT52n7TDqH0:yIl2AUoC8zA"><img src="http://feeds.feedburner.com/~ff/x2od_wp?d=yIl2AUoC8zA" border="0"></img></a>
</div><img src="http://feeds.feedburner.com/~r/x2od_wp/~4/U9-_Sry1-yw" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://www.x2od.com/2009/08/17/show-current-year-using-only-visualforce.html/feed</wfw:commentRss>
		<slash:comments>1</slash:comments>
		<feedburner:origLink>http://www.x2od.com/2009/08/17/show-current-year-using-only-visualforce.html</feedburner:origLink></item>
		<item>
		<title>Overload Apex Class to be Controller AND Extension</title>
		<link>http://feedproxy.google.com/~r/x2od_wp/~3/Hg-1VyK67fc/overload-apex-class-to-be-controller-and-extension.html</link>
		<comments>http://www.x2od.com/2009/07/24/overload-apex-class-to-be-controller-and-extension.html#comments</comments>
		<pubDate>Fri, 24 Jul 2009 20:01:00 +0000</pubDate>
		<dc:creator>David Schach</dc:creator>
				<category><![CDATA[Apex]]></category>
		<category><![CDATA[Development]]></category>
		<category><![CDATA[Visualforce]]></category>
		<category><![CDATA[X-Squared On Demand]]></category>
		<category><![CDATA[Eclipse IDE]]></category>
		<category><![CDATA[Force.com Platform]]></category>
		<category><![CDATA[New Features]]></category>
		<category><![CDATA[Projects]]></category>

		<guid isPermaLink="false">http://www.x2od.com/?p=682</guid>
		<description><![CDATA[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:]]></description>
			<content:encoded><![CDATA[<p>Wow - today brought an interesting discovery.  Here's the situation:</p>
<p>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.</p>
<p>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:</p>

<pre class="brush: java;">
public with sharing class VersatileClass {

private Account account;

public VersatileClass(){
	system.debug('OPERATING AS CONTROLLER');
		if(System.currentPageReference().getParameters().get('id')==null){
			//Include error checking here
		} else{
			string AId = System.currentPageReference().getParameters().get('id');
			account = [select id, name from Account where id = :AId];
			//And whatever else you want to do
		}
}

public VersatileClass(ApexPages.StandardController controller) {
	system.debug('OPERATING AS EXTENSION');
		if(System.currentPageReference().getParameters().get('id')==null){
			//Include error checking here
		} else{
			this.account = (Account)controller.getRecord();
			//And whatever else you want to do
		}
	}
}
</pre>
<p>Enjoy!  This should save people a lot of time.</p>
<p><a href="http://feedads.g.doubleclick.net/~a/Uzy5z6DQIx8jCsxpqyg7jO2wpiE/0/da"><img src="http://feedads.g.doubleclick.net/~a/Uzy5z6DQIx8jCsxpqyg7jO2wpiE/0/di" border="0" ismap="true"></img></a><br/>
<a href="http://feedads.g.doubleclick.net/~a/Uzy5z6DQIx8jCsxpqyg7jO2wpiE/1/da"><img src="http://feedads.g.doubleclick.net/~a/Uzy5z6DQIx8jCsxpqyg7jO2wpiE/1/di" border="0" ismap="true"></img></a></p><div class="feedflare">
<a href="http://feeds.feedburner.com/~ff/x2od_wp?a=Hg-1VyK67fc:8J-23jk1zHk:D7DqB2pKExk"><img src="http://feeds.feedburner.com/~ff/x2od_wp?i=Hg-1VyK67fc:8J-23jk1zHk:D7DqB2pKExk" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/x2od_wp?a=Hg-1VyK67fc:8J-23jk1zHk:dnMXMwOfBR0"><img src="http://feeds.feedburner.com/~ff/x2od_wp?d=dnMXMwOfBR0" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/x2od_wp?a=Hg-1VyK67fc:8J-23jk1zHk:qj6IDK7rITs"><img src="http://feeds.feedburner.com/~ff/x2od_wp?d=qj6IDK7rITs" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/x2od_wp?a=Hg-1VyK67fc:8J-23jk1zHk:yIl2AUoC8zA"><img src="http://feeds.feedburner.com/~ff/x2od_wp?d=yIl2AUoC8zA" border="0"></img></a>
</div><img src="http://feeds.feedburner.com/~r/x2od_wp/~4/Hg-1VyK67fc" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://www.x2od.com/2009/07/24/overload-apex-class-to-be-controller-and-extension.html/feed</wfw:commentRss>
		<slash:comments>5</slash:comments>
		<feedburner:origLink>http://www.x2od.com/2009/07/24/overload-apex-class-to-be-controller-and-extension.html</feedburner:origLink></item>
		<item>
		<title>Email Inbox Version 2</title>
		<link>http://feedproxy.google.com/~r/x2od_wp/~3/FyrWcNMxFjI/email-inbox-version-2.html</link>
		<comments>http://www.x2od.com/2009/07/15/email-inbox-version-2.html#comments</comments>
		<pubDate>Thu, 16 Jul 2009 01:39:41 +0000</pubDate>
		<dc:creator>David Schach</dc:creator>
				<category><![CDATA[Apex]]></category>
		<category><![CDATA[Development]]></category>
		<category><![CDATA[Visualforce]]></category>
		<category><![CDATA[salesforce.com]]></category>
		<category><![CDATA[Projects]]></category>
		<category><![CDATA[X-Squared On Demand]]></category>

		<guid isPermaLink="false">http://www.x2od.com/?p=664</guid>
		<description><![CDATA[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:

&#60;apex:page controller=&#34;EmailMessageController&#34; action=&#34;{!ViewData}&#34;&#62;
 [...]]]></description>
			<content:encoded><![CDATA[<p>Well, it took about ten minutes from the release of <a href="http://www.x2od.com/2009/07/14/visualforce-email-inbox.html">Email Inbox Version 1</a> 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.</p>
<p>First, a teaser screenshot.  (There's a better one below the code.)</p>
<center><a href="http://www.x2od.com/wp/uploads/EmailInbox-screenshot.JPG"><img src="http://www.x2od.com/wp/uploads/EmailInbox-screenshot-300x50.jpg" alt="EmailInbox screenshot" title="EmailInbox screenshot" width="300" height="50" class="aligncenter size-medium wp-image-672" /></a></center>
<p>Here's the updated Visualforce code:</p>
<pre class="brush: xml;">
&lt;apex:page controller=&quot;EmailMessageController&quot; action=&quot;{!ViewData}&quot;&gt;
    &lt;apex:sectionHeader title=&quot;Email Messages&quot; subtitle=&quot;&quot;&gt;&lt;/apex:sectionHeader&gt;
    &lt;apex:pageblock id=&quot;emailblock&quot;&gt;
        &lt;apex:facet name=&quot;header&quot;&gt;
            &lt;apex:form &gt;
                &lt;apex:panelGrid styleClass=&quot;list&quot;
                    columnClasses=&quot;pbTitle,pbButton,pbHelp&quot; columns=&quot;3&quot; border=&quot;0&quot;
                    cellpadding=&quot;0&quot; cellspacing=&quot;0&quot;&gt;
                    &lt;apex:outputLabel &gt;&lt;h3&gt;Messages&lt;/h3&gt;&lt;/apex:outputLabel&gt;
                    &lt;apex:commandButton value=&quot; Refresh &quot; styleClass=&quot;btn&quot;
                        action=&quot;{!ViewData}&quot; rerender=&quot;emailblock&quot;&gt;&lt;/apex:commandButton&gt;
                    &lt;apex:SelectList value=&quot;{!wheretext}&quot; size=&quot;1&quot;  id=&quot;controllerselectlist&quot;&gt;
                        &lt;apex:actionSupport event=&quot;onchange&quot; action=&quot;{!ViewData}&quot;
                            reRender=&quot;emailblock&quot;&gt;&lt;/apex:actionSupport&gt;
                        &lt;apex:selectOptions value=&quot;{!views}&quot; /&gt;
                    &lt;/apex:SelectList&gt;
                &lt;/apex:panelGrid&gt;
            &lt;/apex:form&gt;
        &lt;/apex:facet&gt;
        &lt;apex:form &gt;
            &lt;apex:pageblocktable value=&quot;{!Messages}&quot; var=&quot;e&quot; id=&quot;emailtable&quot;
                bgcolor=&quot;#F3F3EC&quot; styleClass=&quot;list&quot; rowClasses=&quot;dataRow&quot;
                onRowMouseOver=&quot;hiOn(this);&quot; onRowMouseOut=&quot;hiOff(this);&quot;&gt;
                &lt;apex:column &gt;
                    &lt;apex:facet name=&quot;header&quot;&gt;
                        &lt;apex:commandLink action=&quot;{!ViewData}&quot;
                            value=&quot;{!$ObjectType.EmailMessage.fields.Subject.label}{!IF(sortExpression=='Subject', 
                            IF(sortDirection='ASC','▼','▲'),'')}&quot;&gt;
                            &lt;apex:param value=&quot;Subject&quot; name=&quot;column&quot;
                                assignTo=&quot;{!sortExpression}&quot;&gt;&lt;/apex:param&gt;
                        &lt;/apex:commandLink&gt;
                    &lt;/apex:facet&gt;
                    &lt;apex:outputLink value=&quot;/{!e.Id}&quot; target=&quot;_blank&quot;&gt;{!e.Subject}&lt;/apex:outputLink&gt;
                &lt;/apex:column&gt;
                &lt;apex:column &gt;
                    &lt;apex:facet name=&quot;header&quot;&gt;
                    {!$ObjectType.Contact.fields.Name.label}
                    &lt;/apex:facet&gt;
                    &lt;apex:outputLink value=&quot;/{!e.Parent.ContactId}&quot; target=&quot;_blank&quot;
                        rendered=&quot;{!IF(e.Parent.ContactId != '',true,false)}&quot;&gt;{!e.FromName}&lt;/apex:outputLink&gt;
                    &lt;apex:outputtext value=&quot;{!e.FromName}&quot;
                        rendered=&quot;{!IF(e.Parent.ContactId != '',false,true)}&quot; /&gt;
                &lt;/apex:column&gt;
                &lt;apex:column &gt;
                    &lt;apex:facet name=&quot;header&quot;&gt;
                    {!$ObjectType.Account.fields.Name.label}
                    &lt;/apex:facet&gt;
                    &lt;apex:outputLink value=&quot;/{!e.Parent.AccountId}&quot; target=&quot;_blank&quot;&gt;{!e.Parent.Account.Name}&lt;/apex:outputLink&gt;
                &lt;/apex:column&gt;
                &lt;apex:column value=&quot;{!e.FromAddress}&quot;&gt;
                    &lt;apex:facet name=&quot;header&quot;&gt;
                        &lt;apex:commandLink action=&quot;{!ViewData}&quot;
                            value=&quot;{!$ObjectType.EmailMessage.fields.FromAddress.label}{!IF(sortExpression=='FromAddress', 
                            IF(sortDirection='ASC','▼','▲'),'')}&quot;&gt;
                            &lt;apex:param value=&quot;FromAddress&quot; name=&quot;column&quot;
                                assignTo=&quot;{!sortExpression}&quot;&gt;&lt;/apex:param&gt;
                        &lt;/apex:commandLink&gt;
                    &lt;/apex:facet&gt;
                &lt;/apex:column&gt;
                &lt;apex:column value=&quot;{!e.Status}&quot;&gt;
                    &lt;apex:facet name=&quot;header&quot;&gt;
                        &lt;apex:commandLink action=&quot;{!ViewData}&quot;
                            value=&quot;{!$ObjectType.EmailMessage.fields.Status.label}{!IF(sortExpression=='Status', 
                            IF(sortDirection='ASC','▼','▲'),'')}&quot;&gt;
                            &lt;apex:param value=&quot;Status&quot; name=&quot;column&quot;
                                assignTo=&quot;{!sortExpression}&quot;&gt;&lt;/apex:param&gt;
                        &lt;/apex:commandLink&gt;
                    &lt;/apex:facet&gt;
                &lt;/apex:column&gt;
                &lt;apex:column value=&quot;{!e.MessageDate}&quot;&gt;
                    &lt;apex:facet name=&quot;header&quot;&gt;
                        &lt;apex:commandLink action=&quot;{!ViewData}&quot;
                            value=&quot;{!$ObjectType.EmailMessage.fields.MessageDate.label}{!IF(sortExpression=='MessageDate', 
                            IF(sortDirection='ASC','▼','▲'),'')}&quot;&gt;
                            &lt;apex:param value=&quot;MessageDate&quot; name=&quot;column&quot;
                                assignTo=&quot;{!sortExpression}&quot;&gt;&lt;/apex:param&gt;
                        &lt;/apex:commandLink&gt;
                    &lt;/apex:facet&gt;
                &lt;/apex:column&gt;
                &lt;apex:column &gt;
                    &lt;apex:facet name=&quot;header&quot;&gt;
                        &lt;apex:commandLink action=&quot;{!ViewData}&quot;
                            value=&quot;Inbound/Outbound{!IF(sortExpression=='Incoming', 
                            IF(sortDirection='ASC','▼','▲'),'')}&quot;&gt;
                            &lt;apex:param value=&quot;Incoming&quot; name=&quot;column&quot;
                                assignTo=&quot;{!sortExpression}&quot;&gt;&lt;/apex:param&gt;
                        &lt;/apex:commandLink&gt;
                    &lt;/apex:facet&gt;
                    &lt;apex:image url=&quot;/img/emailInbound.gif&quot; rendered=&quot;{!e.Incoming}&quot; /&gt;
                    &lt;apex:image url=&quot;/img/emailOutbound.gif&quot; rendered=&quot;{!NOT(e.Incoming)}&quot; /&gt;
                    &lt;!--&lt;apex:outputfield value=&quot;{!e.Incoming}&quot; rendered=&quot;{!NOT(e.Incoming)}&quot; /&gt;--&gt;
                &lt;/apex:column&gt;
                &lt;apex:column &gt;
                    &lt;apex:facet name=&quot;header&quot;&gt;
                        &lt;apex:commandLink action=&quot;{!ViewData}&quot;
                            value=&quot;Attachment{!IF(sortExpression=='HasAttachment', 
                            IF(sortDirection='ASC','▼','▲'),'')}&quot;&gt;
                            &lt;apex:param value=&quot;HasAttachment&quot; name=&quot;column&quot;
                                assignTo=&quot;{!sortExpression}&quot;&gt;&lt;/apex:param&gt;
                        &lt;/apex:commandLink&gt;
                    &lt;/apex:facet&gt;
                    &lt;apex:image url=&quot;/img/emailHasAttach.gif&quot; rendered=&quot;{!e.HasAttachment}&quot;/&gt;
                    &lt;apex:outputfield value=&quot;{!e.HasAttachment}&quot; rendered=&quot;{!NOT(e.HasAttachment)}&quot; /&gt;
                &lt;/apex:column&gt;
                &lt;apex:column &gt;
                    &lt;apex:facet name=&quot;header&quot;&gt;
                        &lt;apex:commandLink action=&quot;{!ViewData}&quot;
                            value=&quot;{!$ObjectType.Case.fields.CaseNumber.label}{!IF(sortExpression=='ParentId', 
                            IF(sortDirection='ASC','▼','▲'),'')}&quot;&gt;
                            &lt;apex:param value=&quot;ParentId&quot; name=&quot;column&quot;
                                assignTo=&quot;{!sortExpression}&quot;&gt;&lt;/apex:param&gt;
                        &lt;/apex:commandLink&gt;
                    &lt;/apex:facet&gt;
                    &lt;apex:outputLink value=&quot;/{!e.ParentId}&quot;&gt;{!e.Parent.CaseNumber}&lt;/apex:outputLink&gt;

                &lt;/apex:column&gt;
                &lt;apex:column value=&quot;{!e.ToAddress}&quot;&gt;
                    &lt;apex:facet name=&quot;header&quot;&gt;
                        &lt;apex:commandLink action=&quot;{!ViewData}&quot;
                            value=&quot;{!$ObjectType.EmailMessage.fields.ToAddress.label}{!IF(sortExpression=='ToAddress', 
                            IF(sortDirection='ASC','▼','▲'),'')}&quot;&gt;
                            &lt;apex:param value=&quot;ToAddress&quot; name=&quot;column&quot;
                                assignTo=&quot;{!sortExpression}&quot;&gt;&lt;/apex:param&gt;
                        &lt;/apex:commandLink&gt;
                    &lt;/apex:facet&gt;
                &lt;/apex:column&gt;
            &lt;/apex:pageblocktable&gt;
        &lt;/apex:form&gt;
    &lt;/apex:pageblock&gt;
&lt;/apex:page&gt;
</pre>
<p>The Apex controller code has not changed from <a href="http://www.x2od.com/2009/07/14/visualforce-email-inbox.html">Version 1</a>.  </p>
<p>Here's the screenshot, which includes some emails from around the Salesforce ecosystem:</p>
<center>
<div id="attachment_666" class="wp-caption aligncenter" style="width: 310px"><a href="http://www.x2od.com/wp/uploads/EmailInbox-screenshot-2.JPG"><img src="http://www.x2od.com/wp/uploads/EmailInbox-screenshot-2-300x110.jpg" alt="Incoming (and auto-response) Emails" title="EmailInbox screenshot" width="300" height="110" class="size-medium wp-image-666" /></a><p class="wp-caption-text">Incoming (and auto-response) Emails</p></div></center>

Things to notice and things we've learned:
<ol>
	<li>Salesforce will search ANY Email field to match an incoming email to a Contact. (nice job, Salesforce!) - We know because <a href="http://www.pocketsoap.com">Simon Fell</a>'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 <a href="http://www.xlerate.ca/">Irene Brodt</a>.</li>
	<li>Auto-response emails will be included.  We turned off auto-response after a few emails came in.</li>
	<li>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?)</li>
	<li>We did not (yet) implement the <a href="http://blogs.salesforce.com/support/2009/03/autocreating-a.html">super Email/Web2Case trigger code</a> 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!)</li>
</ol>
Enjoy!  
<p><a href="http://feedads.g.doubleclick.net/~a/wLTHe5c25B31YdhYeES529jNdeM/0/da"><img src="http://feedads.g.doubleclick.net/~a/wLTHe5c25B31YdhYeES529jNdeM/0/di" border="0" ismap="true"></img></a><br/>
<a href="http://feedads.g.doubleclick.net/~a/wLTHe5c25B31YdhYeES529jNdeM/1/da"><img src="http://feedads.g.doubleclick.net/~a/wLTHe5c25B31YdhYeES529jNdeM/1/di" border="0" ismap="true"></img></a></p><div class="feedflare">
<a href="http://feeds.feedburner.com/~ff/x2od_wp?a=FyrWcNMxFjI:Sngub02Ut6s:D7DqB2pKExk"><img src="http://feeds.feedburner.com/~ff/x2od_wp?i=FyrWcNMxFjI:Sngub02Ut6s:D7DqB2pKExk" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/x2od_wp?a=FyrWcNMxFjI:Sngub02Ut6s:dnMXMwOfBR0"><img src="http://feeds.feedburner.com/~ff/x2od_wp?d=dnMXMwOfBR0" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/x2od_wp?a=FyrWcNMxFjI:Sngub02Ut6s:qj6IDK7rITs"><img src="http://feeds.feedburner.com/~ff/x2od_wp?d=qj6IDK7rITs" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/x2od_wp?a=FyrWcNMxFjI:Sngub02Ut6s:yIl2AUoC8zA"><img src="http://feeds.feedburner.com/~ff/x2od_wp?d=yIl2AUoC8zA" border="0"></img></a>
</div><img src="http://feeds.feedburner.com/~r/x2od_wp/~4/FyrWcNMxFjI" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://www.x2od.com/2009/07/15/email-inbox-version-2.html/feed</wfw:commentRss>
		<slash:comments>4</slash:comments>
		<feedburner:origLink>http://www.x2od.com/2009/07/15/email-inbox-version-2.html</feedburner:origLink></item>
		<item>
		<title>Visualforce Email Inbox</title>
		<link>http://feedproxy.google.com/~r/x2od_wp/~3/wcYETXiOtxU/visualforce-email-inbox.html</link>
		<comments>http://www.x2od.com/2009/07/14/visualforce-email-inbox.html#comments</comments>
		<pubDate>Tue, 14 Jul 2009 18:00:26 +0000</pubDate>
		<dc:creator>David Schach</dc:creator>
				<category><![CDATA[Apex]]></category>
		<category><![CDATA[Development]]></category>
		<category><![CDATA[Visualforce]]></category>
		<category><![CDATA[X-Squared On Demand]]></category>
		<category><![CDATA[salesforce.com]]></category>
		<category><![CDATA[Configuration]]></category>
		<category><![CDATA[Projects]]></category>

		<guid isPermaLink="false">http://www.x2od.com/?p=642</guid>
		<description><![CDATA[Sonny Cloward, SysAd at Rainforest Alliance, approached us about writing a Visualforce page to display all incoming emails for a given Case Queue. This led to quite a few interesting discoveries. Here's how we handled the project:]]></description>
			<content:encoded><![CDATA[<p>Sonny Cloward, SysAd at <a href="http://rainforestalliance.org/">Rainforest Alliance</a>, approached us about writing a Visualforce page to display all incoming emails for a given Case Queue.  This led a few interesting discoveries.  Here's how we handled the (donated time) project:</p>
<p>First, the page was built upon the <a href="http://salesforcesource.blogspot.com/2008/11/adding-sorting-capability-to.html">template Sam Arjimandi built</a> at <a href="http://salesforcesource.blogspot.com">Salesforce<Source></a>.  Instead of the Account object, we substituted the <a href="http://www.salesforce.com/us/developer/docs/api/Content/sforce_api_objects_emailmessage.htm">EmailMessage object</a>.  But something didn't work.  </p>
Fields have certain <a href="http://www.salesforce.com/us/developer/docs/api/Content/access_for_fields.htm">attributes</a>:<br />
            <table cellpadding="4" cellspacing="0" summary="" class="featureTable">
                <thead align="left">
                    <tr>
                        <th class="featureTableHeader" width="25%" id="d9607e40" colspan="1" rowspan="1">Property</th>
                        <th class="featureTableHeader" width="75%" id="d9607e43" colspan="1" rowspan="1">Description</th>
                    </tr>
                </thead>
                <tbody>

                    <tr>
                        <td width="25%" headers="d9607e40" colspan="1" rowspan="1"><span id="i1435186"><a name="i1435186" shape="rect"><!-- --></a>Autonumber</span>
                        </td>
                        <td width="75%" headers="d9607e43" colspan="1" rowspan="1">The <span>API</span> creates an autonumber.</td>
                    </tr>
                    <tr>

                        <td width="25%" headers="d9607e40" colspan="1" rowspan="1"><span id="i1435191"><a name="i1435191" shape="rect"><!-- --></a>Create</span>
                        </td>
                        <td width="75%" headers="d9607e43" colspan="1" rowspan="1">Value for the field can be specified during create using the <span>API</span>.</td>
                    </tr>
                    <tr>
                        <td width="25%" headers="d9607e40" colspan="1" rowspan="1"><span id="i1435199"><a name="i1435199" shape="rect"><!-- --></a>Defaulted on create</span>

                        </td>
                        <td width="75%" headers="d9607e43" colspan="1" rowspan="1">When created, a default value is supplied if no other value
is specified.</td>
                    </tr>
                    <tr>
                        <td width="25%" headers="d9607e40" colspan="1" rowspan="1"><span id="i1435204"><a name="i1435204" shape="rect"><!-- --></a>Delete</span>
                        </td>
                        <td width="75%" headers="d9607e43" colspan="1" rowspan="1">Value for the field can be deleted using the <span>API</span>.</td>

                    </tr>
                    <tr>
                        <td width="25%" headers="d9607e40" colspan="1" rowspan="1"><span id="i1435212"><a name="i1435212" shape="rect"><!-- --></a>Filter</span>
                        </td>
                        <td width="75%" headers="d9607e43" colspan="1" rowspan="1">Can be used as filter criteria in a SOQL query FROM or WHERE
clause.</td>
                    </tr>
                    <tr>
                        <td width="25%" headers="d9607e40" colspan="1" rowspan="1"><span id="access_lookup"><a name="access_lookup" shape="rect"><!-- --></a>idLookup</span>

                        </td>
                        <td width="75%" headers="d9607e43" colspan="1" rowspan="1">Can be used to specify a record in an <span><a href="sforce_api_calls_upsert.htm" shape="rect"><span><samp class="codeph">upsert()</samp></span></a></span> call. The <span class="fieldName">Id</span> field of each
object has this property and some <span class="fieldName">Name</span> fields. <span>There are exceptions, so check for the property in
any object you wish to <a href="sforce_api_calls_upsert.htm" shape="rect"><span><samp class="codeph">upsert()</samp></span>.</a></span></td>

                    </tr>
                    <tr>
                        <td width="25%" headers="d9607e40" colspan="1" rowspan="1"><span id="i1435217"><a name="i1435217" shape="rect"><!-- --></a>Nillable</span>
                        </td>
                        <td width="75%" headers="d9607e43" colspan="1" rowspan="1">The field can contain a null value.</td>
                    </tr>
                    <tr>
                        <td width="25%" headers="d9607e40" colspan="1" rowspan="1"><span id="i1435222"><a name="i1435222" shape="rect"><!-- --></a>Query</span>

                        </td>
                        <td width="75%" headers="d9607e43" colspan="1" rowspan="1">The field can be queried with SOQL using the <span>API</span>.</td>
                    </tr>
                    <tr>
                        <td width="25%" headers="d9607e40" colspan="1" rowspan="1"><span id="i1435230"><a name="i1435230" shape="rect"><!-- --></a>Replicate</span>
                        </td>
                        <td width="75%" headers="d9607e43" colspan="1" rowspan="1">The value of the field can be replicated using the <span>API</span>.</td>

                    </tr>
                    <tr>
                        <td width="25%" headers="d9607e40" colspan="1" rowspan="1"><span id="i1435238"><a name="i1435238" shape="rect"><!-- --></a>Restricted picklist</span>
                        </td>
                        <td width="75%" headers="d9607e43" colspan="1" rowspan="1">  A picklist that depends on the value of another picklist
for the values it displays.</td>
                    </tr>
                    <tr>

                        <td width="25%" headers="d9607e40" colspan="1" rowspan="1"><span id="i1435244"><a name="i1435244" shape="rect"><!-- --></a>Retrieve</span>
                        </td>
                        <td width="75%" headers="d9607e43" colspan="1" rowspan="1">Value of the field can be retrieved using the <span>API</span>.</td>
                    </tr>
                    <tr>
                        <td width="25%" headers="d9607e40" colspan="1" rowspan="1"><span id="field_access_search"><a name="field_access_search" shape="rect"><!-- --></a>Search</span>

                        </td>
                        <td width="75%" headers="d9607e43" colspan="1" rowspan="1">Can be searched with SOSL using the <span>API</span>.</td>
                    </tr>
                    <tr>
                        <td width="25%" headers="d9607e40" colspan="1" rowspan="1"><span id="i1435259"><a name="i1435259" shape="rect"><!-- --></a>Update</span>
                        </td>
                        <td width="75%" headers="d9607e43" colspan="1" rowspan="1">Can be updated using the <span>API</span>.</td>

                    </tr>
                </tbody>
            </table>
<p>The important one here is "Filter" because (as the documentation states) this allows the field to be used in a WHERE clause.  Also, however, (as the documentation does not state) it allows the field to be used in an ORDER BY clause.  So all fields on the EmailMessage object that do not allow filtering/ordering had to be presented plainly, without Sam's cool PageBlockTable sorting features.
Once this was done, Sonny had some great ideas:</p>
<ol>
	<li>Show the email subject, but make that a hyperlink to the email message itself</li>
	<li>Link the Case Number (EmailMessage.ParentId) to the Case (EmailMessage.Parent)</li>
	<li>Show the Case Contact (EmailMessage.Parent.Contact.Name), linking to the Contact (EmailMessage.Parent.ContactId)</li>
	<li>Show the Case Account (EmailMessage.Parent.Account.Name), linking to the Account (EmailMessage.Parent.AccountId)</li>
	<li>Provide filters - Incoming only, Unread only, etc.</li>
</ol>
You'll see in the Apex Code where we added parent object fields to the SOQL query, and where we used a List<SelectOption> to populate the query's filter.  
<pre class="brush: java;">
public with sharing class EmailMessageController {
   public String EmailMessage { get; set; }
   private List&lt;EmailMessage&gt; messages;
   private String sortDirection = 'ASC';
   private String sortExp = 'MessageDate';
   public String wheretext;

   public EmailMessageController(){
   	wheretext = '';
   }

   public String sortExpression { get {
        return sortExp;
     }
     set {
       //if the column is clicked on then switch between Ascending and Descending modes
       if (value == sortExp)
         sortDirection = (sortDirection == 'ASC')? 'DESC' : 'ASC';
       else
         sortDirection = 'ASC';
       sortExp = value;
     }
   }
   
public void setWhereText(String value) {  
   whereText = value;
 }
public string getWhereText(){
	return wheretext;
}
   
public List&lt;SelectOption&gt; getViews(){
	List&lt;SelectOption&gt; options = new List&lt;SelectOption&gt;();
	options.add(new SelectOption('WHERE e.id != null','All'));
	options.add(new SelectOption('WHERE e.Incoming = true AND e.Status = \'0\' ','Incoming Unread'));
	options.add(new SelectOption('WHERE e.Incoming = true AND e.Status = \'1\' ','Incoming Read'));
        options.add(new SelectOption('WHERE e.Incoming = true','All Incoming'));
        options.add(new SelectOption('WHERE e.Incoming = false','All Outgoing'));
        options.add(new SelectOption('WHERE e.ToAddress = \'support@x2od.com\'','Support Queue'));
        options.add(new SelectOption('WHERE e.ToAddress = \'support2@x2od.com\'','Support Queue2')); //etc.
        return options;
}

 public String getSortDirection() {
    //if not column is selected 
    if (sortExpression == null || sortExpression == '')
      return 'ASC';
    else
     return sortDirection;
 }

 public void setSortDirection(String value) {  
   sortDirection = value;
 }
  
   public List&lt;EmailMessage&gt; getMessages() {
       return messages;
   }
   
   public PageReference ViewData() {
       //build the full sort expression
       string sortFullExp = sortExpression  + ' ' + sortDirection;
      
       //query the database based on the sort expression
       messages = Database.query('Select e.FromAddress, e.Parent.ContactId, e.Parent.Contact.Name, e.Parent.Account.Name, e.ToAddress, e.Parent.CaseNumber, e.Parent.AccountId, e.TextBody, e.SystemModstamp, e.Subject, e.Status, e.ParentId, e.MessageDate, e.LastModifiedDate, e.LastModifiedById, e.IsDeleted, e.Incoming, e.Id, e.HtmlBody, e.Headers, e.HasAttachment, e.FromName, e.CreatedDate, e.CreatedById, e.CcAddress, e.BccAddress, e.ActivityId From EmailMessage e ' + wheretext + ' order by ' + sortFullExp + ' limit 1000');
       return null;
   }
}
</pre>
<p>And here's the Visualforce Page:</p>
<pre class="brush: xml;">
&lt;apex:page controller=&quot;EmailMessageController&quot; action=&quot;{!ViewData}&quot;&gt;
	&lt;apex:sectionHeader title=&quot;Email Messages&quot; subtitle=&quot;&quot;&gt;&lt;/apex:sectionHeader&gt;
	&lt;apex:pageblock id=&quot;emailblock&quot;&gt;
		&lt;apex:facet name=&quot;header&quot;&gt;
			&lt;apex:form&gt;
				&lt;apex:panelGrid styleClass=&quot;list&quot;
					columnClasses=&quot;pbTitle,pbButton,pbHelp&quot; columns=&quot;3&quot; border=&quot;0&quot;
					cellpadding=&quot;0&quot; cellspacing=&quot;0&quot;&gt;
					&lt;apex:outputLabel&gt;&lt;h3&gt;Messages&lt;/h3&gt;&lt;/apex:outputLabel&gt;
					&lt;apex:commandButton value=&quot; Refresh &quot; styleClass=&quot;btn&quot;
						action=&quot;{!ViewData}&quot; rerender=&quot;emailblock&quot;&gt;&lt;/apex:commandButton&gt;
					&lt;apex:SelectList value=&quot;{!wheretext}&quot; size=&quot;1&quot;	id=&quot;controllerselectlist&quot;&gt;
						&lt;apex:actionSupport event=&quot;onchange&quot; action=&quot;{!ViewData}&quot;
							reRender=&quot;emailblock&quot;&gt;&lt;/apex:actionSupport&gt;
						&lt;apex:selectOptions value=&quot;{!views}&quot; /&gt;
					&lt;/apex:SelectList&gt;
				&lt;/apex:panelGrid&gt;
			&lt;/apex:form&gt;
		&lt;/apex:facet&gt;
		&lt;apex:form&gt;
			&lt;apex:pageblocktable value=&quot;{!Messages}&quot; var=&quot;e&quot; id=&quot;emailtable&quot;
				bgcolor=&quot;#F3F3EC&quot; styleClass=&quot;list&quot; rowClasses=&quot;dataRow&quot;
				onRowMouseOver=&quot;hiOn(this);&quot; onRowMouseOut=&quot;hiOff(this);&quot;&gt;
				&lt;apex:column&gt;
					&lt;apex:facet name=&quot;header&quot;&gt;
						&lt;apex:commandLink action=&quot;{!ViewData}&quot;
							value=&quot;{!$ObjectType.EmailMessage.fields.Subject.label}{!IF(sortExpression=='Subject', 
							IF(sortDirection='ASC','▼','▲'),'')}&quot;&gt;
							&lt;apex:param value=&quot;Subject&quot; name=&quot;column&quot;
								assignTo=&quot;{!sortExpression}&quot;&gt;&lt;/apex:param&gt;
						&lt;/apex:commandLink&gt;
					&lt;/apex:facet&gt;
					&lt;apex:outputLink value=&quot;/{!e.Id}&quot; target=&quot;_blank&quot;&gt;{!e.Subject}&lt;/apex:outputLink&gt;
				&lt;/apex:column&gt;
				&lt;apex:column&gt;
					&lt;apex:facet name=&quot;header&quot;&gt;
					{!$ObjectType.Contact.fields.Name.label}
					&lt;/apex:facet&gt;
					&lt;apex:outputLink value=&quot;/{!e.Parent.ContactId}&quot; target=&quot;_blank&quot;
						rendered=&quot;{!IF(e.Parent.ContactId != '',true,false)}&quot;&gt;{!e.FromName}&lt;/apex:outputLink&gt;
					&lt;apex:outputtext value=&quot;{!e.FromName}&quot;
						rendered=&quot;{!IF(e.Parent.ContactId != '',false,true)}&quot; /&gt;
				&lt;/apex:column&gt;
				&lt;apex:column&gt;
					&lt;apex:facet name=&quot;header&quot;&gt;
					{!$ObjectType.Account.fields.Name.label}
					&lt;/apex:facet&gt;
					&lt;apex:outputLink value=&quot;/{!e.Parent.AccountId}&quot; target=&quot;_blank&quot;&gt;{!e.Parent.Account.Name}&lt;/apex:outputLink&gt;
				&lt;/apex:column&gt;
				&lt;apex:column value=&quot;{!e.FromAddress}&quot;&gt;
					&lt;apex:facet name=&quot;header&quot;&gt;
						&lt;apex:commandLink action=&quot;{!ViewData}&quot;
							value=&quot;{!$ObjectType.EmailMessage.fields.FromAddress.label}{!IF(sortExpression=='FromAddress', 
							IF(sortDirection='ASC','▼','▲'),'')}&quot;&gt;
							&lt;apex:param value=&quot;FromAddress&quot; name=&quot;column&quot;
								assignTo=&quot;{!sortExpression}&quot;&gt;&lt;/apex:param&gt;
						&lt;/apex:commandLink&gt;
					&lt;/apex:facet&gt;
				&lt;/apex:column&gt;
				&lt;apex:column value=&quot;{!e.Status}&quot;&gt;
					&lt;apex:facet name=&quot;header&quot;&gt;
						&lt;apex:commandLink action=&quot;{!ViewData}&quot;
							value=&quot;{!$ObjectType.EmailMessage.fields.Status.label}{!IF(sortExpression=='Status', 
							IF(sortDirection='ASC','▼','▲'),'')}&quot;&gt;
							&lt;apex:param value=&quot;Status&quot; name=&quot;column&quot;
								assignTo=&quot;{!sortExpression}&quot;&gt;&lt;/apex:param&gt;
						&lt;/apex:commandLink&gt;
					&lt;/apex:facet&gt;
				&lt;/apex:column&gt;
				&lt;apex:column value=&quot;{!e.MessageDate}&quot;&gt;
					&lt;apex:facet name=&quot;header&quot;&gt;
						&lt;apex:commandLink action=&quot;{!ViewData}&quot;
							value=&quot;{!$ObjectType.EmailMessage.fields.MessageDate.label}{!IF(sortExpression=='MessageDate', 
							IF(sortDirection='ASC','▼','▲'),'')}&quot;&gt;
							&lt;apex:param value=&quot;MessageDate&quot; name=&quot;column&quot;
								assignTo=&quot;{!sortExpression}&quot;&gt;&lt;/apex:param&gt;
						&lt;/apex:commandLink&gt;
					&lt;/apex:facet&gt;
				&lt;/apex:column&gt;
				&lt;apex:column value=&quot;{!e.Incoming}&quot;&gt;
					&lt;apex:facet name=&quot;header&quot;&gt;
						&lt;apex:commandLink action=&quot;{!ViewData}&quot;
							value=&quot;{!$ObjectType.EmailMessage.fields.Incoming.label}{!IF(sortExpression=='Incoming', 
							IF(sortDirection='ASC','▼','▲'),'')}&quot;&gt;
							&lt;apex:param value=&quot;Incoming&quot; name=&quot;column&quot;
								assignTo=&quot;{!sortExpression}&quot;&gt;&lt;/apex:param&gt;
						&lt;/apex:commandLink&gt;
					&lt;/apex:facet&gt;
				&lt;/apex:column&gt;
				&lt;apex:column value=&quot;{!e.HasAttachment}&quot;&gt;
					&lt;apex:facet name=&quot;header&quot;&gt;
						&lt;apex:commandLink action=&quot;{!ViewData}&quot;
							value=&quot;{!$ObjectType.EmailMessage.fields.HasAttachment.label}{!IF(sortExpression=='HasAttachment', 
							IF(sortDirection='ASC','▼','▲'),'')}&quot;&gt;
							&lt;apex:param value=&quot;HasAttachment&quot; name=&quot;column&quot;
								assignTo=&quot;{!sortExpression}&quot;&gt;&lt;/apex:param&gt;
						&lt;/apex:commandLink&gt;
					&lt;/apex:facet&gt;
				&lt;/apex:column&gt;
				&lt;apex:column&gt;
					&lt;apex:facet name=&quot;header&quot;&gt;
						&lt;apex:commandLink action=&quot;{!ViewData}&quot;
							value=&quot;{!$ObjectType.Case.fields.CaseNumber.label}{!IF(sortExpression=='ParentId', 
							IF(sortDirection='ASC','▼','▲'),'')}&quot;&gt;
							&lt;apex:param value=&quot;ParentId&quot; name=&quot;column&quot;
								assignTo=&quot;{!sortExpression}&quot;&gt;&lt;/apex:param&gt;
						&lt;/apex:commandLink&gt;
					&lt;/apex:facet&gt;
					&lt;apex:outputLink value=&quot;/{!e.ParentId}&quot;&gt;{!e.Parent.CaseNumber}&lt;/apex:outputLink&gt;

				&lt;/apex:column&gt;
				&lt;apex:column value=&quot;{!e.ToAddress}&quot;&gt;
					&lt;apex:facet name=&quot;header&quot;&gt;
						&lt;apex:commandLink action=&quot;{!ViewData}&quot;
							value=&quot;{!$ObjectType.EmailMessage.fields.ToAddress.label}{!IF(sortExpression=='ToAddress', 
							IF(sortDirection='ASC','▼','▲'),'')}&quot;&gt;
							&lt;apex:param value=&quot;ToAddress&quot; name=&quot;column&quot;
								assignTo=&quot;{!sortExpression}&quot;&gt;&lt;/apex:param&gt;
						&lt;/apex:commandLink&gt;
					&lt;/apex:facet&gt;
				&lt;/apex:column&gt;
			&lt;/apex:pageblocktable&gt;
		&lt;/apex:form&gt;
	&lt;/apex:pageblock&gt;
&lt;/apex:page&gt;
</pre>
<p>There are some other cool bits: </p>
<p>If there is no Case.Contact, the table will display the FromName, pulled from the email message.</p>
<p>An interesting point: You may notice that EmailStatus is presented in numerical form.  For instance, Incoming Unread is 0, Incoming Read is 1, etc.  The documentation, however, says, "Read only. The status of the email. For example, “New,” “Unread,” “Replied,” “Sent.”"  So we're not sure of the exact mapping.  3 seems to be Sent, so 2 is probably Replied... but we're not sure.</p>
<p>Don't forget: EmailMessage has two lookups (foreign key): Case, and Activity.  This Activity is the task created when Salesforce receives the email, and is - according to the documentation - assigned to the Case Owner.  We're not sure what happens when the Case is owned by a Queue.  Feel free to comment and share your experiences.</p>
<p>
That's it!  Enjoy.</p>
<p><a href="http://feedads.g.doubleclick.net/~a/veJSPMyY91jsj4I-TU_f9dmfriY/0/da"><img src="http://feedads.g.doubleclick.net/~a/veJSPMyY91jsj4I-TU_f9dmfriY/0/di" border="0" ismap="true"></img></a><br/>
<a href="http://feedads.g.doubleclick.net/~a/veJSPMyY91jsj4I-TU_f9dmfriY/1/da"><img src="http://feedads.g.doubleclick.net/~a/veJSPMyY91jsj4I-TU_f9dmfriY/1/di" border="0" ismap="true"></img></a></p><div class="feedflare">
<a href="http://feeds.feedburner.com/~ff/x2od_wp?a=wcYETXiOtxU:KD54SzauxRI:D7DqB2pKExk"><img src="http://feeds.feedburner.com/~ff/x2od_wp?i=wcYETXiOtxU:KD54SzauxRI:D7DqB2pKExk" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/x2od_wp?a=wcYETXiOtxU:KD54SzauxRI:dnMXMwOfBR0"><img src="http://feeds.feedburner.com/~ff/x2od_wp?d=dnMXMwOfBR0" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/x2od_wp?a=wcYETXiOtxU:KD54SzauxRI:qj6IDK7rITs"><img src="http://feeds.feedburner.com/~ff/x2od_wp?d=qj6IDK7rITs" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/x2od_wp?a=wcYETXiOtxU:KD54SzauxRI:yIl2AUoC8zA"><img src="http://feeds.feedburner.com/~ff/x2od_wp?d=yIl2AUoC8zA" border="0"></img></a>
</div><img src="http://feeds.feedburner.com/~r/x2od_wp/~4/wcYETXiOtxU" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://www.x2od.com/2009/07/14/visualforce-email-inbox.html/feed</wfw:commentRss>
		<slash:comments>8</slash:comments>
		<feedburner:origLink>http://www.x2od.com/2009/07/14/visualforce-email-inbox.html</feedburner:origLink></item>
		<item>
		<title>Eclipse as a Password Manager</title>
		<link>http://feedproxy.google.com/~r/x2od_wp/~3/6nVJQe7_8Bc/eclipse-as-a-password-manager.html</link>
		<comments>http://www.x2od.com/2009/07/10/eclipse-as-a-password-manager.html#comments</comments>
		<pubDate>Fri, 10 Jul 2009 19:33:11 +0000</pubDate>
		<dc:creator>David Schach</dc:creator>
				<category><![CDATA[Development]]></category>
		<category><![CDATA[salesforce.com]]></category>
		<category><![CDATA[Eclipse IDE]]></category>

		<guid isPermaLink="false">http://www.x2od.com/?p=625</guid>
		<description><![CDATA[Recently, Judi Sohn wrote about a URL hack to save your Salesforce username and password (in an exposed, plaintext manner). This is a great way to save a lot of time logging into Salesforce.

There is another way to save un/pw combinations: Use Eclipse to store the un/pw/securitytoken.

Read more: http://www.x2od.com/?p=625&#038;preview=true#ixzz0Kt2X1lQD&#038;C]]></description>
			<content:encoded><![CDATA[<p>Caution: Only use this tip if your computer is SECURE.  </p>

<p>Recently, Judi Sohn <a href="http://www.judisohn.com/2009/06/tip_easy_salesforce_logins/">wrote about a URL hack</a> to save your Salesforce username and password (in an exposed, plaintext manner).  This is a great way to save a lot of time logging into Salesforce. </p>

<p>There is another way to save un/pw combinations: Use Eclipse to store the un/pw/securitytoken.  There's a catch (there always is): Once they're entered, you can't see them in plaintext for, say, doing a copy/paste of your token into <a href="https://na1.salesforce.com/setup/outlook/outlooksetup2.jsp?retURL=%2Fui%2Fsetup%2FSetup%3Fsetupid%3DDesktopIntegration&setupid=OutlookEdition">Connect for Outlook</a>, <a href="http://wiki.developerforce.com/index.php/Force.com_Excel_Connector">Excel Connector</a>, etc.</p>

<p>For each client, I create a project in the <a href="http://wiki.developerforce.com/index.php/Force.com_IDE">Eclipse Force.com IDE</a>, entering the username, password, and security token into the appropriate form.  (This does require me to have a System Administrator, or at least "View All Data" and possibly "Edit All Data" profile permissions.)  Then, instead of getting into Salesforce through the browser, I open a file in the project, such as an Apex Class, right-click, and select "Show in Salesforce Web."  The browser does the rest, opening the org, and taking me to that Apex Class.  It does not take me to the Home screen, but I'm willing to use that one extra click.  Plus, it's nice to get directly into the Setup area sometimes.</p>

<p><a href="http://www.x2od.com/wp/uploads/ShowInSalesforceWeb.jpg"><img src="http://www.x2od.com/wp/uploads/ShowInSalesforceWeb.jpg" alt="ShowInSalesforceWeb" title="ShowInSalesforceWeb" width="224" height="238" class="aligncenter size-full wp-image-630" /></a></p>

<p>That's it!  Keep all your projects in Eclipse, and (as long as you're a developer and work in Eclipse a lot) it will save time.</p>

<p>To reiterate the above caution: Anyone who can open Eclipse can get into any of those orgs, so be careful with this!  Always secure your computer.  On Vista, require a password when waking from the screen saver, and use other security features whenever possible.  <br clear="both" />
<p><a href="http://feedads.g.doubleclick.net/~a/ITLGnZdhAIA1aB2DLjkxSVJaUIY/0/da"><img src="http://feedads.g.doubleclick.net/~a/ITLGnZdhAIA1aB2DLjkxSVJaUIY/0/di" border="0" ismap="true"></img></a><br/>
<a href="http://feedads.g.doubleclick.net/~a/ITLGnZdhAIA1aB2DLjkxSVJaUIY/1/da"><img src="http://feedads.g.doubleclick.net/~a/ITLGnZdhAIA1aB2DLjkxSVJaUIY/1/di" border="0" ismap="true"></img></a></p><div class="feedflare">
<a href="http://feeds.feedburner.com/~ff/x2od_wp?a=6nVJQe7_8Bc:C6Po4iqp28c:D7DqB2pKExk"><img src="http://feeds.feedburner.com/~ff/x2od_wp?i=6nVJQe7_8Bc:C6Po4iqp28c:D7DqB2pKExk" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/x2od_wp?a=6nVJQe7_8Bc:C6Po4iqp28c:dnMXMwOfBR0"><img src="http://feeds.feedburner.com/~ff/x2od_wp?d=dnMXMwOfBR0" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/x2od_wp?a=6nVJQe7_8Bc:C6Po4iqp28c:qj6IDK7rITs"><img src="http://feeds.feedburner.com/~ff/x2od_wp?d=qj6IDK7rITs" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/x2od_wp?a=6nVJQe7_8Bc:C6Po4iqp28c:yIl2AUoC8zA"><img src="http://feeds.feedburner.com/~ff/x2od_wp?d=yIl2AUoC8zA" border="0"></img></a>
</div><img src="http://feeds.feedburner.com/~r/x2od_wp/~4/6nVJQe7_8Bc" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://www.x2od.com/2009/07/10/eclipse-as-a-password-manager.html/feed</wfw:commentRss>
		<slash:comments>1</slash:comments>
		<feedburner:origLink>http://www.x2od.com/2009/07/10/eclipse-as-a-password-manager.html</feedburner:origLink></item>
		<item>
		<title>Checkbox Formula Field in Visualforce</title>
		<link>http://feedproxy.google.com/~r/x2od_wp/~3/3GNueDttwqA/checkbox-formula-field-in-visualforce.html</link>
		<comments>http://www.x2od.com/2009/05/21/checkbox-formula-field-in-visualforce.html#comments</comments>
		<pubDate>Thu, 21 May 2009 17:00:52 +0000</pubDate>
		<dc:creator>David Schach</dc:creator>
				<category><![CDATA[Apex]]></category>
		<category><![CDATA[Development]]></category>
		<category><![CDATA[Visualforce]]></category>
		<category><![CDATA[salesforce.com]]></category>

		<guid isPermaLink="false">http://www.x2od.com/?p=609</guid>
		<description><![CDATA[In keeping with the theme of checkboxes and formulas, we provide an easy way to create a checkbox formula field using Visualforce: the checkbox tag with the disabled attribute:]]></description>
			<content:encoded><![CDATA[<p>In keeping with the theme of <a href="http://www.x2od.com/2009/05/11/standard-checkbox-images.html">checkboxes</a> and formulas, we provide an easy way to create a checkbox formula field using Visualforce: the checkbox tag with the disabled attribute:</p>
<p>First, the Apex controller method:</p>
<pre class="brush: java;">
public boolean checkformula(){
boolean b = [insert formula here];
return b;
}
</pre>
<p>And the visualforce code:</p>
<pre class="brush: xml;">
&lt;apex:inputCheckbox disabled=&quot;true&quot; value=&quot;{!checkformula}&quot;/&gt;
</pre>
<p>That's it!  Of course, there are many ways to set up the Apex method, but the important piece is the Visualforce markup.  By using a tag usually associated with an edit page but making it disabled, the checkbox becomes an output field.</p>
<p><a href="http://feedads.g.doubleclick.net/~a/pcCSUgRKAb-ceSXED7Li2Ibu8Ww/0/da"><img src="http://feedads.g.doubleclick.net/~a/pcCSUgRKAb-ceSXED7Li2Ibu8Ww/0/di" border="0" ismap="true"></img></a><br/>
<a href="http://feedads.g.doubleclick.net/~a/pcCSUgRKAb-ceSXED7Li2Ibu8Ww/1/da"><img src="http://feedads.g.doubleclick.net/~a/pcCSUgRKAb-ceSXED7Li2Ibu8Ww/1/di" border="0" ismap="true"></img></a></p><div class="feedflare">
<a href="http://feeds.feedburner.com/~ff/x2od_wp?a=3GNueDttwqA:ErfYHTM2nUE:D7DqB2pKExk"><img src="http://feeds.feedburner.com/~ff/x2od_wp?i=3GNueDttwqA:ErfYHTM2nUE:D7DqB2pKExk" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/x2od_wp?a=3GNueDttwqA:ErfYHTM2nUE:dnMXMwOfBR0"><img src="http://feeds.feedburner.com/~ff/x2od_wp?d=dnMXMwOfBR0" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/x2od_wp?a=3GNueDttwqA:ErfYHTM2nUE:qj6IDK7rITs"><img src="http://feeds.feedburner.com/~ff/x2od_wp?d=qj6IDK7rITs" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/x2od_wp?a=3GNueDttwqA:ErfYHTM2nUE:yIl2AUoC8zA"><img src="http://feeds.feedburner.com/~ff/x2od_wp?d=yIl2AUoC8zA" border="0"></img></a>
</div><img src="http://feeds.feedburner.com/~r/x2od_wp/~4/3GNueDttwqA" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://www.x2od.com/2009/05/21/checkbox-formula-field-in-visualforce.html/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		<feedburner:origLink>http://www.x2od.com/2009/05/21/checkbox-formula-field-in-visualforce.html</feedburner:origLink></item>
	</channel>
</rss><!-- Dynamic page generated in 3.328 seconds. --><!-- Cached page generated by WP-Super-Cache on 2010-03-12 19:14:21 -->
