<?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 Partner Consultants</description>
	<lastBuildDate>Thu, 02 Feb 2012 18:35:57 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.3.1</generator>
		<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>Workflow ISCHANGED() translated to Apex trigger</title>
		<link>http://feedproxy.google.com/~r/x2od_wp/~3/RlGytf4fd5I/workflow-ischanged-translated-to-apex-trigger</link>
		<comments>http://www.x2od.com/2012/02/02/workflow-ischanged-translated-to-apex-trigger#comments</comments>
		<pubDate>Thu, 02 Feb 2012 16:02:29 +0000</pubDate>
		<dc:creator>David Schach</dc:creator>
				<category><![CDATA[Apex]]></category>
		<category><![CDATA[Configuration]]></category>
		<category><![CDATA[Tips and Tricks]]></category>

		<guid isPermaLink="false">http://www.x2od.com/?p=1487</guid>
		<description><![CDATA[Workflow is great. I can simply and declaratively make changes, and can easily update things like email templates, criteria, tasks, etc. without using Eclipse and writing/running unit tests. Sometimes, however, workflow isn&#8217;t enough; we need to use a trigger. Today, I had a use-case that when a DateTime field is filled, a contact (identified via [...]]]></description>
			<content:encoded><![CDATA[<p>Workflow is great. I can simply and declaratively make changes, and can easily update things like email templates, criteria, tasks, etc. without using Eclipse and writing/running unit tests.<br />
Sometimes, however, workflow isn&#8217;t enough; we need to use a trigger.</p>
<p>Today, I had a use-case that when a DateTime field is filled, a contact (identified via a lookup on a parent object &#8211; so a grandparent record) should receive a notification. That&#8217;s easy enough to do with a ISCHANGED(DateTimeField__c) workflow criteron, but the Email Alert can&#8217;t &#8220;find&#8221; the contact. A trigger is necessary.</p>
<p>Here&#8217;s how I coded the trigger:</p>
<pre class="brush: java; title: ; notranslate">
trigger InterviewUpdates on Interview__c (after update, before update) {
	if(Trigger.IsBefore){
		for(Interview__c i : Trigger.New){
			DateTime dt = i.Date_and_Time__c;
			if(Trigger.oldMap.get(i.id).Date_and_Time__c != dt){
				// Send email to applicant, passing Interview, DateTime, and Contact
				// (which we found via a query coded outside the loop to avoid governor limits)
			}
		}
	}
}
</pre>
<p>I&#8217;ve left out a lot of parts here, but I hope that the main bit of using Trigger.oldMap to find the old value and compare it to the new one comes through.</p>
<p>Happy coding!</p>
<div class="evernoteSiteMemory"><a href="javascript:" onclick="Evernote.doClip({title: 'Workflow ISCHANGED() translated to Apex trigger on X-Squared On Demand',url: 'http://www.x2od.com/2012/02/02/workflow-ischanged-translated-to-apex-trigger',contentID: 'contentleft',suggestNotebook: 'Salesforce',suggestTags: 'Apex',providerName: 'X-Squared On Demand',styling: 'full' });return false" class="evernoteSiteMemoryLink"><img src="http://static.evernote.com/article-clipper.png" class="evernoteSiteMemoryButton" />
				</a>				<div class="evernoteSiteMemoryClear">&nbsp;</div>
</div>
<p><a href="http://feedads.g.doubleclick.net/~a/wgj1yVnBlUvsV2FM5ZdRuokxMjc/0/da"><img src="http://feedads.g.doubleclick.net/~a/wgj1yVnBlUvsV2FM5ZdRuokxMjc/0/di" border="0" ismap="true"></img></a><br/>
<a href="http://feedads.g.doubleclick.net/~a/wgj1yVnBlUvsV2FM5ZdRuokxMjc/1/da"><img src="http://feedads.g.doubleclick.net/~a/wgj1yVnBlUvsV2FM5ZdRuokxMjc/1/di" border="0" ismap="true"></img></a></p><div class="feedflare">
<a href="http://feeds.feedburner.com/~ff/x2od_wp?a=RlGytf4fd5I:uJKN0vg20tM:D7DqB2pKExk"><img src="http://feeds.feedburner.com/~ff/x2od_wp?i=RlGytf4fd5I:uJKN0vg20tM:D7DqB2pKExk" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/x2od_wp?a=RlGytf4fd5I:uJKN0vg20tM: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=RlGytf4fd5I:uJKN0vg20tM: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=RlGytf4fd5I:uJKN0vg20tM: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/RlGytf4fd5I" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://www.x2od.com/2012/02/02/workflow-ischanged-translated-to-apex-trigger/feed</wfw:commentRss>
		<slash:comments>2</slash:comments>
		<feedburner:origLink>http://www.x2od.com/2012/02/02/workflow-ischanged-translated-to-apex-trigger</feedburner:origLink></item>
		<item>
		<title>Best Practice: Multiple Chatter Posts of the Same File</title>
		<link>http://feedproxy.google.com/~r/x2od_wp/~3/_HsdbD0DQXY/multiple-chatter-posts-file</link>
		<comments>http://www.x2od.com/2011/08/11/multiple-chatter-posts-file#comments</comments>
		<pubDate>Thu, 11 Aug 2011 16:27:10 +0000</pubDate>
		<dc:creator>David Schach</dc:creator>
				<category><![CDATA[Configuration]]></category>
		<category><![CDATA[Native Application]]></category>
		<category><![CDATA[Salesforce CRM]]></category>
		<category><![CDATA[Tips and Tricks]]></category>
		<category><![CDATA[Chatter]]></category>
		<category><![CDATA[Content]]></category>
		<category><![CDATA[Dreamforce]]></category>

		<guid isPermaLink="false">http://www.x2od.com/?p=1435</guid>
		<description><![CDATA[Salesforce Administrators learn to remind users: &#8220;Search before you create a new lead.&#8221; Pretty simple, right? Duplicated records are a pain. Then why do I see some very accomplished Salesforce users in the Dreamforce app posting duplicate Content/Files in Chatter? Here are some examples from the Files tab: The better thing to do &#8211; assuming [...]]]></description>
			<content:encoded><![CDATA[<p>Salesforce Administrators learn to remind users: &#8220;Search before you create a new lead.&#8221;  Pretty simple, right?  Duplicated records are a pain.<br />
Then why do I see some very accomplished Salesforce users in the Dreamforce app posting duplicate Content/Files in Chatter?<br />
Here are some examples from the Files tab:<br />
<div id="attachment_1436" class="wp-caption aligncenter" style="width: 560px"><a href="http://www.x2od.com/2011/08/11/multiple-chatter-posts-file/codeofconduct"><img src="http://www.x2od.com/wp/wp-content/uploads/2011/08/CodeOfConduct-550x137.png" alt="I did it too - uploaded the same file three times instead of linking." title="CodeOfConduct" width="550" height="137" class="size-large wp-image-1436" /></a><p class="wp-caption-text">I&#039;ve learned my lesson in the past 8 months... I promise!</p></div></p>
<p><a href="http://www.x2od.com/2011/08/11/multiple-chatter-posts-file/dreamforce-guide"><img src="http://www.x2od.com/wp/wp-content/uploads/2011/08/Dreamforce-Guide-550x133.png" alt="Seven users uploaded the same file to Content" title="Dreamforce Guide" width="550" height="133" class="size-large wp-image-1437" /></a></p>
<p>The better thing to do &#8211; assuming that you need to post the same file multiple times (this should be rare, as it might be considered Chatter Spamming, but when referring multiple users or groups to a document, it can come in handy) is to upload the file ONCE and use references to it in subsequent feed posts.<br />
This has a bonus: Better maintenance!  Instead of other users not knowing which file to follow if they want to be notified anytime that file is updated, just ensure that there is only ONE copy in the org, and everyone can follow that.  This is especially useful for legal documents, employee handbooks, FAQs, Dreamforce App Codes of Conduct&#8230; you get the idea.  </p>
<p>Not sure how it&#8217;s done?  Here are a few screenshots:</p>
<p><div id="attachment_1438" class="wp-caption aligncenter" style="width: 560px"><a href="http://www.x2od.com/wp/wp-content/uploads/2011/08/FileAttachWindow.png"><img src="http://www.x2od.com/wp/wp-content/uploads/2011/08/FileAttachWindow-550x174.png" alt="Chatter File attachment screen with choice to link to existing content or to upload new content" title="FileAttachWindow" width="550" height="174" class="size-large wp-image-1438" /></a><p class="wp-caption-text">Note the selected choice!</p></div><br />
<div id="attachment_1440" class="wp-caption aligncenter" style="width: 560px"><a href="http://www.x2od.com/wp/wp-content/uploads/2011/08/File-Attach-Selection.png"><img src="http://www.x2od.com/wp/wp-content/uploads/2011/08/File-Attach-Selection-550x360.png" alt="List of files I can attach.  Leftmost column is word &quot;attach&quot; to choose the file." title="File Attach Selection" width="550" height="360" class="size-large wp-image-1440" /></a><p class="wp-caption-text">Clicking on &quot;attach&quot; closes the window</p></div><br />
<div id="attachment_1441" class="wp-caption aligncenter" style="width: 558px"><a href="http://www.x2od.com/wp/wp-content/uploads/2011/08/ChangeFile.png"><img src="http://www.x2od.com/wp/wp-content/uploads/2011/08/ChangeFile.png" alt="The file is selected, and there is a link to change to a different file if I choose." title="ChangeFile" width="548" height="260" class="size-full wp-image-1441" /></a><p class="wp-caption-text">Only one file can be attached</p></div><br />
And there you have it!  Go forth and attach!  &#8230; and after that, just link.</p>
<div class="evernoteSiteMemory"><a href="javascript:" onclick="Evernote.doClip({title: 'Best Practice: Multiple Chatter Posts of the Same File on X-Squared On Demand',url: 'http://www.x2od.com/2011/08/11/multiple-chatter-posts-file',contentID: 'contentleft',suggestNotebook: 'Salesforce',suggestTags: 'Chatter,Configuration,Content,Dreamforce',providerName: 'X-Squared On Demand',styling: 'full' });return false" class="evernoteSiteMemoryLink"><img src="http://static.evernote.com/article-clipper.png" class="evernoteSiteMemoryButton" />
				</a>				<div class="evernoteSiteMemoryClear">&nbsp;</div>
</div>
<p><a href="http://feedads.g.doubleclick.net/~a/8ZKRV-3bkGsOQL2zyGY2ADIrxz8/0/da"><img src="http://feedads.g.doubleclick.net/~a/8ZKRV-3bkGsOQL2zyGY2ADIrxz8/0/di" border="0" ismap="true"></img></a><br/>
<a href="http://feedads.g.doubleclick.net/~a/8ZKRV-3bkGsOQL2zyGY2ADIrxz8/1/da"><img src="http://feedads.g.doubleclick.net/~a/8ZKRV-3bkGsOQL2zyGY2ADIrxz8/1/di" border="0" ismap="true"></img></a></p><div class="feedflare">
<a href="http://feeds.feedburner.com/~ff/x2od_wp?a=_HsdbD0DQXY:Xp4HIfAPYDI:D7DqB2pKExk"><img src="http://feeds.feedburner.com/~ff/x2od_wp?i=_HsdbD0DQXY:Xp4HIfAPYDI:D7DqB2pKExk" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/x2od_wp?a=_HsdbD0DQXY:Xp4HIfAPYDI: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=_HsdbD0DQXY:Xp4HIfAPYDI: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=_HsdbD0DQXY:Xp4HIfAPYDI: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/_HsdbD0DQXY" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://www.x2od.com/2011/08/11/multiple-chatter-posts-file/feed</wfw:commentRss>
		<slash:comments>1</slash:comments>
		<feedburner:origLink>http://www.x2od.com/2011/08/11/multiple-chatter-posts-file</feedburner:origLink></item>
		<item>
		<title>Next Birthday Formula</title>
		<link>http://feedproxy.google.com/~r/x2od_wp/~3/NUEgKp5k28s/next-birthday-formula</link>
		<comments>http://www.x2od.com/2011/07/06/next-birthday-formula#comments</comments>
		<pubDate>Wed, 06 Jul 2011 16:45:32 +0000</pubDate>
		<dc:creator>David Schach</dc:creator>
				<category><![CDATA[Configuration]]></category>
		<category><![CDATA[salesforce.com]]></category>
		<category><![CDATA[Apex]]></category>
		<category><![CDATA[Force.com Builder]]></category>
		<category><![CDATA[Force.com Platform]]></category>

		<guid isPermaLink="false">http://www.x2od.com/?p=1429</guid>
		<description><![CDATA[How would you display your Contacts with upcoming birthdays? I&#8217;ve seen people use &#8220;Birthdays This Week,&#8221; &#8220;Birthdays This and Next Week,&#8221; and other reports to display the list. I&#8217;ve also seen requirements for showing a person&#8217;s next birthday, to trigger an automatic email to each Contact on his/her birthday. Let&#8217;s see how it&#8217;s done: Next, [...]]]></description>
			<content:encoded><![CDATA[<p>How would you display your Contacts with upcoming birthdays?  I&#8217;ve seen people use &#8220;Birthdays This Week,&#8221; &#8220;Birthdays This and Next Week,&#8221; and other reports to display the list.
</p><p>
I&#8217;ve also seen requirements for showing a person&#8217;s next birthday, to trigger an automatic email to each Contact on his/her birthday.  Let&#8217;s see how it&#8217;s done:</p>
<pre class="brush: plain; title: Formula: Next Birthday; notranslate">if(
Month (Birthdate) &lt; = Month(Datevalue( NOW() ) ),
   if ( Month (Birthdate) &lt; Month(Datevalue( NOW() ) ),
      DATE( YEAR( DATEVALUE( NOW() ) ) + 1 , MONTH( Birthdate ) , DAY( Birthdate ) ),
      if ( Day (Birthdate) &lt; Day ( Datevalue ( NOW() ) ),
          DATE( YEAR( DATEVALUE( NOW() ) ) + 1 , MONTH( Birthdate ) , DAY( Birthdate ) ),
          DATE( YEAR( DATEVALUE( NOW() ) )  , MONTH( Birthdate ) , DAY( Birthdate ) )
      )
   ),
DATE( YEAR( DATEVALUE( NOW() ) ) , MONTH( Birthdate ) , DAY( Birthdate ) )
)
</pre>
<p>Next, use Batch Apex to send an email daily to all people where <code>Next_Birthday__c == date.today()</code>.  Easy!</p>
<p>Now we can put this into a report and a dashboard showing the next &#8220;n&#8221; birthdays.  Sure, it&#8217;s possible that more than n people will have a birthday on a given day, but at least you know that the emails will go out to each of them!  If you want to see everyone with birthdays in a certain range, make a custom report and click through from a dashboard or a custom link.</p>
<p>Enjoy!</p><div class="evernoteSiteMemory"><a href="javascript:" onclick="Evernote.doClip({title: 'Next Birthday Formula on X-Squared On Demand',url: 'http://www.x2od.com/2011/07/06/next-birthday-formula',contentID: 'contentleft',suggestNotebook: 'Salesforce',suggestTags: 'Apex,Force.com Builder,Force.com Platform',providerName: 'X-Squared On Demand',styling: 'full' });return false" class="evernoteSiteMemoryLink"><img src="http://static.evernote.com/article-clipper.png" class="evernoteSiteMemoryButton" />
				</a>				<div class="evernoteSiteMemoryClear">&nbsp;</div>
</div>
<p><a href="http://feedads.g.doubleclick.net/~a/hgN6FNXz9k4CfYQ5uvS27Hanv4E/0/da"><img src="http://feedads.g.doubleclick.net/~a/hgN6FNXz9k4CfYQ5uvS27Hanv4E/0/di" border="0" ismap="true"></img></a><br/>
<a href="http://feedads.g.doubleclick.net/~a/hgN6FNXz9k4CfYQ5uvS27Hanv4E/1/da"><img src="http://feedads.g.doubleclick.net/~a/hgN6FNXz9k4CfYQ5uvS27Hanv4E/1/di" border="0" ismap="true"></img></a></p><div class="feedflare">
<a href="http://feeds.feedburner.com/~ff/x2od_wp?a=NUEgKp5k28s:uYfPThTpm9U:D7DqB2pKExk"><img src="http://feeds.feedburner.com/~ff/x2od_wp?i=NUEgKp5k28s:uYfPThTpm9U:D7DqB2pKExk" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/x2od_wp?a=NUEgKp5k28s:uYfPThTpm9U: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=NUEgKp5k28s:uYfPThTpm9U: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=NUEgKp5k28s:uYfPThTpm9U: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/NUEgKp5k28s" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://www.x2od.com/2011/07/06/next-birthday-formula/feed</wfw:commentRss>
		<slash:comments>3</slash:comments>
		<feedburner:origLink>http://www.x2od.com/2011/07/06/next-birthday-formula</feedburner:origLink></item>
		<item>
		<title>PageReference Best Practice</title>
		<link>http://feedproxy.google.com/~r/x2od_wp/~3/Hv0HAHX_B1w/pagereference-best-practice</link>
		<comments>http://www.x2od.com/2011/05/05/pagereference-best-practice#comments</comments>
		<pubDate>Thu, 05 May 2011 16:30:23 +0000</pubDate>
		<dc:creator>David Schach</dc:creator>
				<category><![CDATA[Apex]]></category>
		<category><![CDATA[Development]]></category>
		<category><![CDATA[salesforce.com]]></category>
		<category><![CDATA[Visualforce]]></category>

		<guid isPermaLink="false">http://www.x2od.com/?p=1282</guid>
		<description><![CDATA[I've seen a lot of coders put the following into their custom Visualforce controllers: I've decided that I don't like this approach. It feels too much like a URL hack, and though I'm sure that it will always work (meaning that salesforce.com will never change its way of referring to a record by /&#60;recordID&#62;), I'd [...]]]></description>
			<content:encoded><![CDATA[<p>I've seen a lot of coders put the following into their custom Visualforce controllers:</p>

<pre class="brush: java; title: ; notranslate">
public PageReference customsave() {
    try{ 
        insert acct; 
    } catch (DMLException e) { 
        /*do stuff here*/ 
    }
    PageReference acctPage = new PageReference ('/' + acct.id};
    acctPage.setRedirect(true);
    return acctPage;
}
</pre>
<p>
I've decided that I don't like this approach.  It feels too much like a URL hack, and though I'm sure that it will always work (meaning that salesforce.com will never change its way of referring to a record by <code>/&lt;recordID&gt;</code>), I'd like to suggest a different method that may use more resources, but will leverage standard controllers, possibly future-proofing the application:
</p>
<pre class="brush: java; title: ; notranslate">
public PageReference customsave() {
    insert acct; //Error handling removed for brevity. ALWAYS try/catch!
    ApexPages.StandardController sc = new ApexPages.StandardController(acct);
    PageReference acctPage = sc.view();
    acctPage.setRedirect(true);
    return acctPage;
}
</pre>

<p>What do you think?  Does anyone have coding-style tips to share?</p><div class="evernoteSiteMemory"><a href="javascript:" onclick="Evernote.doClip({title: 'PageReference Best Practice on X-Squared On Demand',url: 'http://www.x2od.com/2011/05/05/pagereference-best-practice',contentID: 'contentleft',suggestNotebook: 'Salesforce',suggestTags: 'Apex',providerName: 'X-Squared On Demand',styling: 'full' });return false" class="evernoteSiteMemoryLink"><img src="http://static.evernote.com/article-clipper.png" class="evernoteSiteMemoryButton" />
				</a>				<div class="evernoteSiteMemoryClear">&nbsp;</div>
</div>
<p><a href="http://feedads.g.doubleclick.net/~a/DXRVhFLQOq88vDpYrj8olC4PbZc/0/da"><img src="http://feedads.g.doubleclick.net/~a/DXRVhFLQOq88vDpYrj8olC4PbZc/0/di" border="0" ismap="true"></img></a><br/>
<a href="http://feedads.g.doubleclick.net/~a/DXRVhFLQOq88vDpYrj8olC4PbZc/1/da"><img src="http://feedads.g.doubleclick.net/~a/DXRVhFLQOq88vDpYrj8olC4PbZc/1/di" border="0" ismap="true"></img></a></p><div class="feedflare">
<a href="http://feeds.feedburner.com/~ff/x2od_wp?a=Hv0HAHX_B1w:oN4pt24f0DY:D7DqB2pKExk"><img src="http://feeds.feedburner.com/~ff/x2od_wp?i=Hv0HAHX_B1w:oN4pt24f0DY:D7DqB2pKExk" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/x2od_wp?a=Hv0HAHX_B1w:oN4pt24f0DY: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=Hv0HAHX_B1w:oN4pt24f0DY: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=Hv0HAHX_B1w:oN4pt24f0DY: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/Hv0HAHX_B1w" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://www.x2od.com/2011/05/05/pagereference-best-practice/feed</wfw:commentRss>
		<slash:comments>2</slash:comments>
		<feedburner:origLink>http://www.x2od.com/2011/05/05/pagereference-best-practice</feedburner:origLink></item>
		<item>
		<title>Content Latest Version Flag</title>
		<link>http://feedproxy.google.com/~r/x2od_wp/~3/vEOslgNbt50/content-latest-version-flag</link>
		<comments>http://www.x2od.com/2011/05/04/content-latest-version-flag#comments</comments>
		<pubDate>Wed, 04 May 2011 20:29:11 +0000</pubDate>
		<dc:creator>David Schach</dc:creator>
				<category><![CDATA[Configuration]]></category>
		<category><![CDATA[Native Application]]></category>
		<category><![CDATA[Salesforce CRM]]></category>
		<category><![CDATA[salesforce.com]]></category>
		<category><![CDATA[Tips and Tricks]]></category>
		<category><![CDATA[Force.com Builder]]></category>

		<guid isPermaLink="false">http://www.x2od.com/?p=1359</guid>
		<description><![CDATA[Yesterday, I used Content Delivery to send a pdf to a client. Simple, right? Upload the Word document to Content, associate it with a record, and deliver the content. Surely if I upload a new version, the delivery will refer to the latest version, right? There&#8217;s no place to select that option, so I can [...]]]></description>
			<content:encoded><![CDATA[<p>Yesterday, I used Content Delivery to send a pdf to a client.  Simple, right?  Upload the Word document to Content, associate it with a record, and deliver the content.  Surely if I upload a new version, the delivery will refer to the latest version, right?  There&#8217;s no place to select that option, so I can assume, right?

</p><p>Wrong.

</p><p>This is the screen I see when I choose to deliver a given file.  Note that I can choose whether to allow access to the original file or only to a pdf&#8230; but nothing about which version to deliver.  (There are 4 versions right now.)

</p><div id="attachment_1403" class="wp-caption aligncenter" style="width: 560px"><a href="http://www.x2od.com/2011/05/04/content-latest-version-flag.html/content-delivery-options" rel="attachment wp-att-1403"><img src="http://www.x2od.com/wp/wp-content/uploads/2011/05/Content-Delivery-Options-550x313.png" alt="Options available when configuring a Content Delivery" title="Content-Delivery-Options" width="550" height="313" class="size-large wp-image-1403" /></a><p class="wp-caption-text">Content Delivery Options</p></div><p>The document in question needed some changes, so I uploaded a new version and told the client that the old link would still work.  Oops.

</p><p>By default, Content Deliveries are set to refer to one specific version of a Content file.  I can understand this, but surely I should be given the opportunity to change that?  

</p><p>To do this, view the Delivery record and see the following:

</p><div id="attachment_1404" class="wp-caption aligncenter" style="width: 560px"><a href="http://www.x2od.com/2011/05/04/content-latest-version-flag.html/content-delivery-record" rel="attachment wp-att-1404"><img src="http://www.x2od.com/wp/wp-content/uploads/2011/05/Content-Delivery-Record-550x215.png" alt="Content Delivery Record Detail View" title="Content-Delivery-Record" width="550" height="215" class="size-large wp-image-1404" /></a><p class="wp-caption-text">Content Delivery Record Detail View</p></div><p>Click <code>Edit</code> and check the appropriate checkbox.  

</p><p>There you have it!  A few extra clicks, but a Content Delivery can point to the latest version.</p>

<p>Do you use Content Deliveries?  How do you like it?</p><div class="evernoteSiteMemory"><a href="javascript:" onclick="Evernote.doClip({title: 'Content Latest Version Flag on X-Squared On Demand',url: 'http://www.x2od.com/2011/05/04/content-latest-version-flag',contentID: 'contentleft',suggestNotebook: 'Salesforce',suggestTags: 'Configuration,Force.com Builder',providerName: 'X-Squared On Demand',styling: 'full' });return false" class="evernoteSiteMemoryLink"><img src="http://static.evernote.com/article-clipper.png" class="evernoteSiteMemoryButton" />
				</a>				<div class="evernoteSiteMemoryClear">&nbsp;</div>
</div>
<p><a href="http://feedads.g.doubleclick.net/~a/aTrVScr0Z3CD9cL9XuutlLXxsKc/0/da"><img src="http://feedads.g.doubleclick.net/~a/aTrVScr0Z3CD9cL9XuutlLXxsKc/0/di" border="0" ismap="true"></img></a><br/>
<a href="http://feedads.g.doubleclick.net/~a/aTrVScr0Z3CD9cL9XuutlLXxsKc/1/da"><img src="http://feedads.g.doubleclick.net/~a/aTrVScr0Z3CD9cL9XuutlLXxsKc/1/di" border="0" ismap="true"></img></a></p><div class="feedflare">
<a href="http://feeds.feedburner.com/~ff/x2od_wp?a=vEOslgNbt50:7sBnSmruA7Q:D7DqB2pKExk"><img src="http://feeds.feedburner.com/~ff/x2od_wp?i=vEOslgNbt50:7sBnSmruA7Q:D7DqB2pKExk" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/x2od_wp?a=vEOslgNbt50:7sBnSmruA7Q: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=vEOslgNbt50:7sBnSmruA7Q: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=vEOslgNbt50:7sBnSmruA7Q: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/vEOslgNbt50" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://www.x2od.com/2011/05/04/content-latest-version-flag/feed</wfw:commentRss>
		<slash:comments>2</slash:comments>
		<feedburner:origLink>http://www.x2od.com/2011/05/04/content-latest-version-flag</feedburner:origLink></item>
		<item>
		<title>PersonAccount Stay-In-Touch Gotcha</title>
		<link>http://feedproxy.google.com/~r/x2od_wp/~3/kzNWe52GvAs/perso-stay-in-touch-gotcha</link>
		<comments>http://www.x2od.com/2011/03/28/perso-stay-in-touch-gotcha#comments</comments>
		<pubDate>Mon, 28 Mar 2011 17:00:53 +0000</pubDate>
		<dc:creator>David Schach</dc:creator>
				<category><![CDATA[Configuration]]></category>
		<category><![CDATA[Native Application]]></category>
		<category><![CDATA[salesforce.com]]></category>
		<category><![CDATA[Tips and Tricks]]></category>
		<category><![CDATA[Force.com Builder]]></category>
		<category><![CDATA[PersonAccount]]></category>

		<guid isPermaLink="false">http://www.x2od.com/?p=1331</guid>
		<description><![CDATA[I make no secret that I&#8217;m a fan of PersonAccounts.  I think they&#8217;re  very handy when working with individuals instead of companies, and I  really like pairing them with the Relationship Groups app to make  households. I&#8217;ve always considered them as mostly-contacts.  I put all Person  fields on the Contact object, reserving very few for [...]]]></description>
			<content:encoded><![CDATA[<p>I make no secret that I&#8217;m a fan of PersonAccounts.  I think they&#8217;re  very handy when working with individuals instead of companies, and I  really like pairing them with the Relationship Groups app to make  households.</p>
<p>I&#8217;ve always considered them as mostly-contacts.  I put all Person  fields on the Contact object, reserving very few for the Account  object.  But for some reason, I&#8217;ve usually used Billing Address as the  primary address and Mailing as the secondary.  No reason &#8211; that&#8217;s just  how I&#8217;ve done it.</p>
<p>That all changed yesterday.  I was prepping to demo a system to a  company and decided to click the &#8220;Request Update&#8221; button to send a  Stay-In-Touch email.  This is not a customizable email (well, not much)  in terms of the fields from the Contact that it displays, so it used the  Mailing Address.  Oops!</p>
<p>From now on, I am using Mailing and Other addresses for PersonAccounts.  Billing, you&#8217;re reserved for BusinessAccounts.</p>
<p>Feel free to debate the merits and drawbacks of PersonAccounts below &#8211; I&#8217;ll respond to them in a future post.</p>
<p>﻿</p>
<div class="evernoteSiteMemory"><a href="javascript:" onclick="Evernote.doClip({title: 'PersonAccount Stay-In-Touch Gotcha on X-Squared On Demand',url: 'http://www.x2od.com/2011/03/28/perso-stay-in-touch-gotcha',contentID: 'contentleft',suggestNotebook: 'Salesforce',suggestTags: 'Configuration,Force.com Builder,PersonAccount',providerName: 'X-Squared On Demand',styling: 'full' });return false" class="evernoteSiteMemoryLink"><img src="http://static.evernote.com/article-clipper.png" class="evernoteSiteMemoryButton" />
				</a>				<div class="evernoteSiteMemoryClear">&nbsp;</div>
</div>
<p><a href="http://feedads.g.doubleclick.net/~a/wFCpvf2CtdqQLYOjgr9-KLGOhO0/0/da"><img src="http://feedads.g.doubleclick.net/~a/wFCpvf2CtdqQLYOjgr9-KLGOhO0/0/di" border="0" ismap="true"></img></a><br/>
<a href="http://feedads.g.doubleclick.net/~a/wFCpvf2CtdqQLYOjgr9-KLGOhO0/1/da"><img src="http://feedads.g.doubleclick.net/~a/wFCpvf2CtdqQLYOjgr9-KLGOhO0/1/di" border="0" ismap="true"></img></a></p><div class="feedflare">
<a href="http://feeds.feedburner.com/~ff/x2od_wp?a=kzNWe52GvAs:dJ4ROtEIjDo:D7DqB2pKExk"><img src="http://feeds.feedburner.com/~ff/x2od_wp?i=kzNWe52GvAs:dJ4ROtEIjDo:D7DqB2pKExk" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/x2od_wp?a=kzNWe52GvAs:dJ4ROtEIjDo: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=kzNWe52GvAs:dJ4ROtEIjDo: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=kzNWe52GvAs:dJ4ROtEIjDo: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/kzNWe52GvAs" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://www.x2od.com/2011/03/28/perso-stay-in-touch-gotcha/feed</wfw:commentRss>
		<slash:comments>2</slash:comments>
		<feedburner:origLink>http://www.x2od.com/2011/03/28/perso-stay-in-touch-gotcha</feedburner:origLink></item>
		<item>
		<title>Chatter BINGO Released Into The Wild</title>
		<link>http://feedproxy.google.com/~r/x2od_wp/~3/m5pnjl6PNxc/chatter-bingo-released</link>
		<comments>http://www.x2od.com/2011/03/25/chatter-bingo-released#comments</comments>
		<pubDate>Fri, 25 Mar 2011 18:02:25 +0000</pubDate>
		<dc:creator>David Schach</dc:creator>
				<category><![CDATA[Apex]]></category>
		<category><![CDATA[salesforce.com]]></category>
		<category><![CDATA[Visualforce]]></category>
		<category><![CDATA[X-Squared On Demand]]></category>
		<category><![CDATA[#df10]]></category>
		<category><![CDATA[AppExchange]]></category>
		<category><![CDATA[Just for fun]]></category>

		<guid isPermaLink="false">http://www.x2od.com/?p=1322</guid>
		<description><![CDATA[With Dreamforce 2010 behind us and Dreamforce 2011 fast approaching, the first ever crowdsourced conference application is publicly available! Chatter BINGO has been released as an unmanaged package, meaning that all the source code is open and ready for customizing to your hearts&#8217; content. Chatter BINGO was conceived by Chris Shackelford and Brad Gross (@imperialstout) [...]]]></description>
			<content:encoded><![CDATA[<p>With Dreamforce 2010 behind us and Dreamforce 2011 fast approaching, the first ever crowdsourced conference application is publicly available!</p>
<p>Chatter BINGO has been released as an unmanaged package, meaning that all the source code is open and ready for customizing to your hearts&#8217; content.</p>
<p>Chatter BINGO was conceived by Chris Shackelford and Brad Gross (@imperialstout) while chattering in the Dreamforce org, and they asked me to build it.  Within two weeks, it had passed QA and was deployed to the org.</p>
<p>One of my favorite moments from Dreamforce was at the Tweetup (#df10tu &#8211; see you at <a href="http://twitter.com/search?q=%23df11tu">#df11tu</a>) when someone walked up to me with a printout of the PDF BINGO card she had generated, asking me to mark myself on the page.  It always feels good to see people enjoying one&#8217;s work!</p>
<p>The listing is at <a href="http://www.x2od.com/getchatterbingo">http://www.x2od.com/getchatterbingo</a>.</p>
<p>Enjoy!</p>
<div class="evernoteSiteMemory"><a href="javascript:" onclick="Evernote.doClip({title: 'Chatter BINGO Released Into The Wild on X-Squared On Demand',url: 'http://www.x2od.com/2011/03/25/chatter-bingo-released',contentID: 'contentleft',suggestNotebook: 'Salesforce',suggestTags: '#df10,Apex,AppExchange,Just for fun,Visualforce,X-Squared On Demand',providerName: 'X-Squared On Demand',styling: 'full' });return false" class="evernoteSiteMemoryLink"><img src="http://static.evernote.com/article-clipper.png" class="evernoteSiteMemoryButton" />
				</a>				<div class="evernoteSiteMemoryClear">&nbsp;</div>
</div>
<p><a href="http://feedads.g.doubleclick.net/~a/3pZAATxUmfi5FKwnoBxjnS3jld4/0/da"><img src="http://feedads.g.doubleclick.net/~a/3pZAATxUmfi5FKwnoBxjnS3jld4/0/di" border="0" ismap="true"></img></a><br/>
<a href="http://feedads.g.doubleclick.net/~a/3pZAATxUmfi5FKwnoBxjnS3jld4/1/da"><img src="http://feedads.g.doubleclick.net/~a/3pZAATxUmfi5FKwnoBxjnS3jld4/1/di" border="0" ismap="true"></img></a></p><div class="feedflare">
<a href="http://feeds.feedburner.com/~ff/x2od_wp?a=m5pnjl6PNxc:mVoM6s0KtyU:D7DqB2pKExk"><img src="http://feeds.feedburner.com/~ff/x2od_wp?i=m5pnjl6PNxc:mVoM6s0KtyU:D7DqB2pKExk" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/x2od_wp?a=m5pnjl6PNxc:mVoM6s0KtyU: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=m5pnjl6PNxc:mVoM6s0KtyU: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=m5pnjl6PNxc:mVoM6s0KtyU: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/m5pnjl6PNxc" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://www.x2od.com/2011/03/25/chatter-bingo-released/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		<feedburner:origLink>http://www.x2od.com/2011/03/25/chatter-bingo-released</feedburner:origLink></item>
		<item>
		<title>Activity Type Field – Do Not Use</title>
		<link>http://feedproxy.google.com/~r/x2od_wp/~3/0CZv3Y9Sudk/activity-type-field-do-not-use</link>
		<comments>http://www.x2od.com/2011/03/21/activity-type-field-do-not-use#comments</comments>
		<pubDate>Mon, 21 Mar 2011 17:00:25 +0000</pubDate>
		<dc:creator>David Schach</dc:creator>
				<category><![CDATA[Apex]]></category>
		<category><![CDATA[salesforce.com]]></category>
		<category><![CDATA[Tips and Tricks]]></category>

		<guid isPermaLink="false">http://www.x2od.com/?p=1292</guid>
		<description><![CDATA[The field Event.Type (which is sort of the same as Task.Type) is a difficult field to use.  Here are a few reasons: Type cannot be the controlling field for a dependent picklist. On an Event list view (/007), even when specifying record type, the Type field cannot be edited. Salesforce requires you to select a [...]]]></description>
			<content:encoded><![CDATA[The field Event.Type (which is sort of the same as Task.Type) is a difficult field to use.  Here are a few reasons:
<ul>
	<li>Type cannot be the controlling field for a dependent picklist.</li>
	<li>On an Event list view (/007), even when specifying record type, the Type field cannot be edited.</li>
	<li>Salesforce requires you to select a default value for this picklist, as well as a default value for inbound emails... yet when I bcc my Email-To-Salesforce address, the resulting tasks have no Type value.</li>
</ul>
A tweet by Andy Ognenoff of Manpower (<a href="http://twitter.com/aognenoff">@aognenoff</a>) <a href="https://twitter.com/#!/aognenoff/status/48789550641856512">revealed</a> another limitation: Type is not available in Custom Report Types.

That does it!  I'm done with this field.  Here's my solution.
<ol>
	<li>Work in a sandbox (duh)</li>
	<li>Create a picklist field on Activity (ActivityType__c).</li>
	<li>Disable all Activity workflow rules, Chatter feeds, triggers, etc.</li>
	<li>Using DataLoader, copy values from Type to ActivityType__c.</li>
	<li>Using Field Level Security, hide Type from all profiles.  It's just not necessary.</li>
	<li>Edit/reactivate all your workflow, feeds, triggers, etc.</li>
	<li>Use/adapt the code below.</li>
	<li>Test thoroughly and deploy to production.</li>
</ol>
The Salesforce Mobile application (at least for Blackberry) defaults to a Subject "Call: (212) 555-1212" style.  This will account for that.  It also handles emails sent with Email-To-Salesforce, which starts the subject with "Email:"

<span style="font-family: Consolas, Monaco, 'Courier New', Courier, monospace; font-size: 12px; line-height: 18px; white-space: pre;"> </span>

<pre class="brush: java; title: ; notranslate">
trigger TaskTrigger on Task (before insert, before update) {
     ActivityHelper.UpdateTaskType(Trigger.new);
}
</pre>

<pre class="brush: java; title: ; notranslate">
trigger EventTrigger on Event (before insert, before update) {
     ActivityHelper.UpdateEventType(Trigger.new);
}
</pre>

This class isn't perfect, but it gets the job done.  I should add try/catch statements in my test code (though I have heard recently that it's not a good idea to do so, as one may WANT the code to fail with an error if something doesn't go as expected).

<pre class="brush: java; title: ; notranslate">
// Written by David Schach, X-Squared On Demand
public with sharing class ActivityHelper {

    public static void UpdateEventType(Event[] events){
        for (Event e : events){
            if(e.ActivityType__c == '' || e.ActivityType__c == null){
                if(e.Subject.contains('Email'))
                    e.ActivityType__c = 'Email';
                else if(e.Subject.contains('Call'))
                    e.ActivityType__c = 'Call';
                else if (e.Subject.contains('Meet') || e.Subject.contains('Webinar'))
                    e.ActivityType__c = 'Meeting';
            }
        }
    }
    
    public static void UpdateTaskType(Task[] tasks){
        for (Task t : tasks){
            if(t.ActivityType__c == '' || t.ActivityType__c == null){
                if(t.Subject.contains('Email ') || t.Subject.contains('Email:'))
                    t.ActivityType__c = 'Email';
                else if(t.Subject.contains('Call'))
                    t.ActivityType__c = 'Call';
                else if (t.Subject.contains('Meet') || t.Subject.contains('Webinar'))
                    t.ActivityType__c = 'Meeting';
            }
        }
    }
    
    private static Event newTestEvent(string subject){
        Event e = new Event();
        e.Subject = subject;
        e.startdatetime = datetime.now();
        e.DurationInMinutes = 60;
        e.ActivityType__c = ''; // To account for default value.
        return e;
    }

    private static Task newTestTask(string subject){
        Task t = new Task();
        t.Subject = subject;
        t.Priority = 'Medium';
        t.Status = 'New';
        t.ActivityType__c = ''; // To account for default value.
        return t;
    }   

    static TestMethod void TestEvents(){
        test.starttest();
        List&lt;Event&gt; ourevents = new List&lt;Event&gt;();
        ourevents.add(newTestEvent('e1'));
        ourevents.add(newTestEvent('Email: Thank you'));
        ourevents.add(newTestEvent('Call: (212) 555-1212'));
        ourevents.add(newTestEvent('Webinar tomorrow'));
        ourevents.add(newTestEvent('Meet Jack'));
        ourevents.add(newTestEvent('Sales time'));
        insert ourevents;
        update ourevents;
        for (Event e : [SELECT id, Type from Event WHERE id in :ourEvents]){
            system.debug('EVENT TYPE: ' + e.ActivityType__c);
        }
        test.stoptest();
    }
    
    static TestMethod void TestTasks(){
        test.starttest();
        List&lt;Task&gt; ourTasks = new List&lt;Task&gt;();
        ourTasks.add(newTestTask('e1'));
        ourTasks.add(newTestTask('Email: Thank you'));
        ourTasks.add(newTestTask('Call: (212) 555-1212'));
        ourTasks.add(newTestTask('Webinar tomorrow'));
        ourTasks.add(newTestTask('Meet Jack'));
        ourTasks.add(newTestTask('Sales time'));
        insert ourTasks;
        update ourTasks;
        for (Task t : [SELECT id, Type from Task WHERE id in :ourTasks]){
            system.debug('TASK TYPE: ' + t.ActivityType__c);
        }
        test.stoptest();
    }
    
    static testMethod void IndividualActivityTest() {
      Event e = newTestEvent('e1');
      Task t = newTestTask('t1');
      test.starttest();
      insert e;
      insert t;
      e.subject = 'Meeting';
      update e;
      e.subject = 'Call: Geoff Peterson';
      update e;
      e.subject = 'Email: Here we go';
      update e;
      e.subject = 'Webinar';
      update e;
      t.subject = 'Meeting';
      update t;
      t.subject = 'Call';
      update t;
      t.subject = 'Email';
      update t;
      t.subject = 'Webinar';
      update t;
      test.stoptest();
    }
}
</pre> <div class="evernoteSiteMemory"><a href="javascript:" onclick="Evernote.doClip({title: 'Activity Type Field &amp;#8211; Do Not Use on X-Squared On Demand',url: 'http://www.x2od.com/2011/03/21/activity-type-field-do-not-use',contentID: 'contentleft',suggestNotebook: 'Salesforce',suggestTags: 'Apex',providerName: 'X-Squared On Demand',styling: 'full' });return false" class="evernoteSiteMemoryLink"><img src="http://static.evernote.com/article-clipper.png" class="evernoteSiteMemoryButton" />
				</a>				<div class="evernoteSiteMemoryClear">&nbsp;</div>
</div>
<p><a href="http://feedads.g.doubleclick.net/~a/1K2B1RCMkBB1RncBlpcopsqXnrs/0/da"><img src="http://feedads.g.doubleclick.net/~a/1K2B1RCMkBB1RncBlpcopsqXnrs/0/di" border="0" ismap="true"></img></a><br/>
<a href="http://feedads.g.doubleclick.net/~a/1K2B1RCMkBB1RncBlpcopsqXnrs/1/da"><img src="http://feedads.g.doubleclick.net/~a/1K2B1RCMkBB1RncBlpcopsqXnrs/1/di" border="0" ismap="true"></img></a></p><div class="feedflare">
<a href="http://feeds.feedburner.com/~ff/x2od_wp?a=0CZv3Y9Sudk:7TkbDMsNzKE:D7DqB2pKExk"><img src="http://feeds.feedburner.com/~ff/x2od_wp?i=0CZv3Y9Sudk:7TkbDMsNzKE:D7DqB2pKExk" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/x2od_wp?a=0CZv3Y9Sudk:7TkbDMsNzKE: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=0CZv3Y9Sudk:7TkbDMsNzKE: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=0CZv3Y9Sudk:7TkbDMsNzKE: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/0CZv3Y9Sudk" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://www.x2od.com/2011/03/21/activity-type-field-do-not-use/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		<feedburner:origLink>http://www.x2od.com/2011/03/21/activity-type-field-do-not-use</feedburner:origLink></item>
		<item>
		<title>Which has the most potential for enterprise-wide adoption: iPad or Cr-48?</title>
		<link>http://feedproxy.google.com/~r/x2od_wp/~3/KHtDPiaiwsU/ipad-or-cr48</link>
		<comments>http://www.x2od.com/2011/03/04/ipad-or-cr48#comments</comments>
		<pubDate>Fri, 04 Mar 2011 18:00:02 +0000</pubDate>
		<dc:creator>David Schach</dc:creator>
				<category><![CDATA[Partners]]></category>
		<category><![CDATA[X-Squared On Demand]]></category>
		<category><![CDATA[Infowelders]]></category>
		<category><![CDATA[sfdcverse]]></category>

		<guid isPermaLink="false">http://www.x2od.com/?p=1286</guid>
		<description><![CDATA[This is a collaborative post with Nick Hamm (@hammnick), Director of Technology at Infowelders and David Schach (@dschach) from X-Squared On Demand.  After a conversation via twitter, we decided to collaborate on a blog post (via Google Docs, of course) and are publishing it in our own blogs simultaneously. With all of the hype around [...]]]></description>
			<content:encoded><![CDATA[<p>This is a collaborative post with Nick Hamm (<a title="@hammnick" href="http://twitter.com/hammnick" target="_blank">@hammnick</a>), Director of Technology at Infowelders and David Schach (<a title="@dschach" href="http://twitter.com/dschach" target="_blank">@dschach</a>) from X-Squared On Demand.  After a conversation via twitter, we decided to collaborate on a blog post (via Google Docs, of course) and are publishing it in our own blogs simultaneously.</p>
<p>With all of the hype around the pending release of iPad2 and how it has <a href="http://www.google.com/url?q=http%3A%2F%2Fpaidcontent.org%2Farticle%2F419-apples-jobs-says-ipad-2-makes-it-official-pc-era-is-done%2F&amp;sa=D&amp;sntz=1&amp;usg=AFQjCNGJ9RNCmtXjFT8fBB-VbcWHVowNlA" target="_blank">firmly moved us into the &#8220;post-PC era&#8221;</a>, we had to take a step back and evaluate for ourselves whether all of the hype is justified, or if Steve Jobs&#8217; mastery of the emotional sell has hypnotized Apple fan-boys and non-fan-boys alike into believing that we are in a reality that isn&#8217;t quite real, or even realistic.</p>
<p><strong>The Case for iPad</strong></p>
<p>The iPad is a game-changing device in many ways, but it&#8217;s main impact is as a consumer/personal technology.  Apps are the primary driver that sell the hardware (or at least allows Apple to charge a premium for the hardware), and Apple&#8217;s AppStore is mostly consumer-focused.  I&#8217;m sure Jobs had the vision that these devices could be used by business, but that was not their primary target with iPad Gen 1, and is still not their primary market with iPad Gen 2.  However, Apple has quickly started to build a story around business adoption, and has started to gain adoption in businesses from startups to Fortune 500 companies.  More on that later.</p>
<p>We have to remember that it didn&#8217;t start with the iPad &#8211; it started with the Palm.  Stylus-input devices were the first widely-used mobile hardware, and one of the Palm Tungsten models had a phone built-in.  Then Blackberry entered the marketplace and dominated the business mobile device market.  The Blackberry could be standardized and controlled by IT.  But with iPhones being purchased in the homes of business people, and those folks taking their newly found iPhone addiction back to their IT department, Apple has definitely made up for lost time.  In fact, even though IT has lost most of its control over the company&#8217;s devices, the iPhone has gained grassroots traction to become the new standard-issue phone for many organizations.  Why is this important?  For two reasons: 1) The iPad is a giant iPhone, and 2) The same consumer-to-business adoption path is happening for the iPad.</p>
<p>Our companies consult businesses that have 20 employees and &gt; 2000 employees.  So we see a pretty wide array of IT cultures and standards.  We also get to see how some of the decisions to use device X over device Y are made by the business.  Very few of our clients are &#8220;.com tech companies&#8221; &#8211; most are traditional businesses that do anything from conduit manufacturing to healthcare facility management to spirits distillation and distribution.  One would think that the larger companies would be slower moving and less likely to adopt new technologies, and in some cases that is true, but overall we are seeing a higher adoption rate of iDevices at the larger companies.  This is somewhat counter-intuitive until you learn the reasons why.  We have seen more than one instance where an executive either bought an iPad for personal use or received one as a gift, and within weeks (or days) mandated to IT that his/her field reps also use the device.  This is a powerful demonstration that Apple has not had to focus marketing toward businesses in order to gain adoption within the enterprise.</p>
<p>Based on these comments so far, you may be asking why we even asked the question of enterprise-wide adoption in the first place.  Well, there is an important caveat in these examples.  The largest job role for business iPad adopters are mobile users.  For most businesses this translates to sales and biz dev reps, who do a lot of presenting (slideshows) or data consumption (charts and graphs) and not as much data entry.  The iPad&#8217;s focused functionality makes it ideal for less-technical users, and it&#8217;s stylish caché make it ideal to put in the hands of the guy or gal representing your company because it is a recognizable device that those who don&#8217;t yet have one are intrigued by and envious of.  But those are not the benefits that are going to drive the business to collect the desktops and laptops from the rest of the employees and replace them all with iPads tomorrow.  In fact, Apple has seen spikes in sales of their other more traditional hardware offerings to businesses since the iPad has been released, and in a lot of cases the iPad is only acting as a complementary device to the desktop/laptop for these users.</p>
<p>The majority of in-office workers at our clients interact with their computers in two ways: data entry (including, using Salesforce CRM as an example, writing notes from sales phone calls) and wizard-driven tasks (such as a call-center service representative).  Both of these roles require efficient information-entry (using a keyboard or a mouse) and a powerful browser.  The iPad has neither; yes Safari is good, but it cannot display Salesforce perfectly or deliver Flash, and that&#8217;s a deal-breaker.</p>
<p>iPad doesn&#8217;t have what it takes to root out the traditional PC/laptop from most business users and become their primary work device.  At least not yet.</p>
<p><strong>The Case for the Google Cr-48</strong></p>
<p>We&#8217;ll start by saying that Cr-48 hardware is not game-changing &#8211; it&#8217;s little more than a netbook with a bigger screen. It&#8217;s the OS and concept of a cloud-only device in a familiar form factor that give us a glimpse into what the business devices of the near future could look like.  Google knows as well as anyone that cloud adoption is happening at an exponential pace right now, both by consumers and by businesses.  As more and more business applications are being moved to the cloud, including email, document creation, CRM, and other core biz apps, the need for a thick-client PC or laptop is quickly going the way of the Palm Pilot.</p>
<p>The main difference behind a cloud-based OS device like the Cr-48 and the iPad is that it comes in the same form that we are all used to &#8211; a laptop with a tactile keyboard (data entry), VGA (display) and USB (mouse/thumb drive) ports, and a browser that performs all of the full feature functions that we are used to performing.  Users don&#8217;t drastically have to change the way they are used to interacting with this device.  For anyone who has to do a lot of data entry, graphic design, document editing, or even just general typing, the choice between using the Cr-48 and an iPad as a primary input device is very simple &#8211; type on your Cr-48 while you&#8217;re watching The Hangover on Netflix with the iPad.</p>
<p>But for what the cloud OS brings to table as far as utility, it falls behind in the areas of flashiness and ultra-portability.  It&#8217;s primary purpose is to do more with less hardware and IT infrastructure, not knock the socks off of the executives to which you are trying to sell to your widgets.  The entry point to businesses for the cloud OS will be through the IT department, not through the executive team, which means that adoption could happen at a slower rate.  You also need to have most or all of your business applications available in the cloud to replace your PC/laptop with a Cr-48, a scenario which is not yet reality for most companies today.  We should also point out that the Cr-48 is just in the beginning stages of pilot, and probably won&#8217;t see the light of day in a production-ready device until late 2011 at the earliest.  So it&#8217;s a little bit of an apples and oranges argument to compare the two devices.  Which leads to our conclusion&#8230;</p>
<p><strong>The Net-Net: Can&#8217;t we all just get along?</strong></p>
<p>If there are two things that are clear from this debate they are: 1) The iPad is not ready to become the primary computing device for most business users, and 2) The cloud OS is still an emerging technology that will most definitely have an impact on the business computers of the near future.  In our view, it&#8217;s not an all or nothing proposition.  The iPad is the perfect device for certain types of business users that are mobile, have customer-facing responsibilities, or consume data/metrics (salespeople and executives), but even those two groups of users are unlikely to give up their desktops/laptops/netbooks.  The cloud OS is the perfect solution for business users who require computing utility and still need a mouse and keyboard to effectively perform their tasks.  This would seem to point to the conclusion that neither device has the potential to become an enterprise-wide standard.  The advantage we can see with the cloud OS scenario is that one gets more utility for approximately the same price point.  To IT, the iPad will be accepted because the mandate has been handed up-then-down; however, to that IT department itself, one that has spent blood, sweat, and tears moving the business to the cloud, the cloud OS will be a very logical choice.  The war for standardization one way or the other (or a compromise to adopt both) will be decided in the board rooms between CITOs, CFOs, and CEOs over the coming months. And while Apple&#8217;s iPad has all of the unchallenged hype today, Google is quietly waging a campaign to take over the market share that Microsoft is losing due to Apple&#8217;s &#8220;post-PC&#8221; marketing pitch.</p>
<p>What are your thoughts on enterprise adoption of iDevices, cloud computing, and cloud OS?  What are your thoughts on enterprise maintenance of traditional computing (OSX/PC/Linux) devices?</p>
<div class="evernoteSiteMemory"><a href="javascript:" onclick="Evernote.doClip({title: 'Which has the most potential for enterprise-wide adoption: iPad or Cr-48? on X-Squared On Demand',url: 'http://www.x2od.com/2011/03/04/ipad-or-cr48',contentID: 'contentleft',suggestNotebook: 'Salesforce',suggestTags: 'Infowelders,sfdcverse,X-Squared On Demand',providerName: 'X-Squared On Demand',styling: 'full' });return false" class="evernoteSiteMemoryLink"><img src="http://static.evernote.com/article-clipper.png" class="evernoteSiteMemoryButton" />
				</a>				<div class="evernoteSiteMemoryClear">&nbsp;</div>
</div>
<p><a href="http://feedads.g.doubleclick.net/~a/qEnLl4FQ48lgOqqWlN-NVqOUBxc/0/da"><img src="http://feedads.g.doubleclick.net/~a/qEnLl4FQ48lgOqqWlN-NVqOUBxc/0/di" border="0" ismap="true"></img></a><br/>
<a href="http://feedads.g.doubleclick.net/~a/qEnLl4FQ48lgOqqWlN-NVqOUBxc/1/da"><img src="http://feedads.g.doubleclick.net/~a/qEnLl4FQ48lgOqqWlN-NVqOUBxc/1/di" border="0" ismap="true"></img></a></p><div class="feedflare">
<a href="http://feeds.feedburner.com/~ff/x2od_wp?a=KHtDPiaiwsU:KcKmHOy57Oo:D7DqB2pKExk"><img src="http://feeds.feedburner.com/~ff/x2od_wp?i=KHtDPiaiwsU:KcKmHOy57Oo:D7DqB2pKExk" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/x2od_wp?a=KHtDPiaiwsU:KcKmHOy57Oo: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=KHtDPiaiwsU:KcKmHOy57Oo: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=KHtDPiaiwsU:KcKmHOy57Oo: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/KHtDPiaiwsU" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://www.x2od.com/2011/03/04/ipad-or-cr48/feed</wfw:commentRss>
		<slash:comments>1</slash:comments>
		<feedburner:origLink>http://www.x2od.com/2011/03/04/ipad-or-cr48</feedburner:origLink></item>
		<item>
		<title>Visualforce Inline Editing – I’m In Love</title>
		<link>http://feedproxy.google.com/~r/x2od_wp/~3/0Wcs0TrJNKA/vf-inlineediting-love</link>
		<comments>http://www.x2od.com/2011/02/28/vf-inlineediting-love#comments</comments>
		<pubDate>Mon, 28 Feb 2011 18:00:00 +0000</pubDate>
		<dc:creator>David Schach</dc:creator>
				<category><![CDATA[Development]]></category>
		<category><![CDATA[Force.com Platform]]></category>
		<category><![CDATA[New Features]]></category>
		<category><![CDATA[salesforce.com]]></category>
		<category><![CDATA[Tips and Tricks]]></category>
		<category><![CDATA[Visualforce]]></category>
		<category><![CDATA[Apex]]></category>

		<guid isPermaLink="false">http://www.x2od.com/?p=1240</guid>
		<description><![CDATA[I&#8217;m totally addicted to the new Visualforce inline editing feature. It all started with this post by Josh Birk at Developerforce. I liked it, but as a &#8220;standardstylesheets&#8221; specialist, I wanted a bit more. Then I looked at the Visualforce apex:inlineEditSupport documentation, and I was hooked. Okay, so you&#8217;re probably wondering why this is so [...]]]></description>
			<content:encoded><![CDATA[<p>I&#8217;m totally addicted to the new Visualforce inline editing feature.  It all started with this <a href="http://blog.sforce.com/sforce/2011/02/spring-11-the-visualforce-inline-editing-component.html">post</a> by Josh Birk at Developerforce.  I liked it, but as a &#8220;standardstylesheets&#8221; specialist, I wanted a bit more.</p><p>
Then I looked at the Visualforce <a href="http://www.salesforce.com/us/developer/docs/pages/Content/pages_compref_inlineEditSupport.htm">apex:inlineEditSupport</a> documentation, and I was hooked.</p><p>
Okay, so you&#8217;re probably wondering why this is so neat.  I&#8217;ll show you how to enable fields for inline editing, and then I&#8217;ll show you why the apex:inlineEditSupport tag is completely unnecessary!</p><p>
Here&#8217;s a simple example.  You&#8217;ll notice that inline edit support has only been given to the contact.phone field.</p>
<pre class="brush: xml; title: ; notranslate">
&lt;apex:page standardController=&quot;Contact&quot; standardstylesheets=&quot;true&quot;
	showheader=&quot;true&quot;&gt;
	&lt;apex:form &gt;
		&lt;apex:pageBlock mode=&quot;maindetail&quot;&gt;
			&lt;apex:pageBlockButtons &gt;
				&lt;apex:commandButton action=&quot;{!edit}&quot; id=&quot;editButton&quot; value=&quot;Edit&quot; /&gt;
				&lt;apex:commandButton action=&quot;{!save}&quot; id=&quot;saveButton&quot; value=&quot;Save&quot; /&gt;
				&lt;apex:commandButton onclick=&quot;resetInlineEdit()&quot; id=&quot;cancelButton&quot;
					value=&quot;Cancel&quot; /&gt;
			&lt;/apex:pageBlockButtons&gt;
			&lt;apex:pageBlockSection &gt;
				&lt;apex:outputField value=&quot;{!contact.lastname}&quot;/&gt;
				&lt;apex:outputField value=&quot;{!contact.accountId}&quot; /&gt;
				&lt;apex:outputField value=&quot;{!contact.phone}&quot;&gt;
					&lt;apex:inlineEditSupport showOnEdit=&quot;saveButton, cancelButton&quot;
						hideOnEdit=&quot;editButton&quot; event=&quot;ondblclick&quot;
						resetFunction=&quot;resetInlineEdit&quot; /&gt;
					&lt;/apex:outputfield&gt;
			&lt;/apex:pageBlockSection&gt;
		&lt;/apex:pageBlock&gt;
	&lt;/apex:form&gt;
&lt;/apex:page&gt;
</pre>
<ol>
	<li>resetInlineEdit() is referenced in the code, but the actual Javascript isn&#8217;t shown anywhere. PLEASE don&#8217;t be fooled by the bad code in the documentation: It works perfectly for that &#8220;undo&#8221; arrow by the inline edit field, but it doesn&#8217;t work on the cancel button.</li>
	<li>changedStyleClass is optional. Omitting it uses the standard style we&#8217;re all used to.  And referring to a style that isn&#8217;t included anywhere just defaults to the system default.</li>
	<li>PageBlock here has no &#8220;mode&#8221; attribute.  This means that we can specify only the fields we want for inline editing.  However, if we place the inlineEditSupport tag as an immediate child of the PageBlock, it will apply to every field in that PageBlock (or dataList, dataTable, form, outputField, pageBlockSection, pageBlockTable, repeat).</li>
	
</ol>
<p>Here&#8217;s my next step: Find a way to hide the Cancel button on pageload, but show it when any field is inlineEdited.  Javascript gurus have a solution?</p>

<p>(An aside: In Josh&#8217;s code sample, he uses a standard method called &#8220;quicksave.&#8221;  It&#8217;s not in the Apex or Visualforce documentation, but we find <a href="http://wiki.developerforce.com/index.php/An_Introduction_to_Visualforce">here</a> that &#8220;The quickSave() method on the standard controller performs the same database operation as the save() method but returns the user to the same page rather than navigating away.&#8221;)</p>
<p><b>Want to know why this is unnecessary?</b></p>
It is undocumented, but is shown in the code sample in the Visualforce guide: use
<pre class="brush: xml; title: ; notranslate">
&lt;apex:PageBlock mode=&quot;inlineEdit&quot; &gt;
</pre>
<p>to set every field to inlineEdit and use default styles, etc.  I don&#8217;t know how it will affect buttons shown/hidden, but give it a shot.</p>

<p>
The attributes for inlineEditSupport are pretty simple:</p>
<table style="border-collapse: collapse;" border="1">
<tbody>
<tr>
<th>Attribute Name</th>
<th>My Description</th>
</tr>
<tr>
<td>changedStyleClass</td>
<td>can refer to a style class included in the page or in a referenced CSS sheet in Static Resources</td>
</tr>
<tr>
<td>disabled</td>
<td>disables inline editing.  This is really cool because you can put any logic in here.  (On a separate note, inline editing respects field-level security, so if the user can&#8217;t edit a field, this attribute is basically set to TRUE.
<br />
This is also a good tag because it lets you avoid using the rendered attribute with a plain outputtext/outputfield component to do your &#8220;can the user edit this&#8221; logic.</td>
</tr>
<tr>
<td>event</td>
<td>What makes the field switch from output to input. This is the usual list of Javascript events. (ondblclick, onmouseover, onmousedown, etc)</td>
</tr>
<tr>
<td>hideOnEdit</td>
<td>This one is cool.  Give every commandButton on the page an id (because you do that anyway, right?) and then list the ones that should only be shown when this field is in input mode.</td>
</tr>
<tr>
<td>id</td>
<td>Seriously, folks, always give your elements ids.  Not only is it good practice for adding Javascript to your page, but it avoids that silly &#8220;j_40&#8243; style id automatically generated&#8230; which shows when I view the source of your page, making you look bad.</td>
</tr>
<tr>
<td>rendered</td>
<td>We all know how to use this.  I admit: I can&#8217;t think of a reason to use this as a child of outputfield, but I can certainly think of reasons to use it when it&#8217;s a child of apex:repeat, as those don&#8217;t necessarily respect field-level security when used with custom controllers.</td>
</tr>
<tr>
<td>resetFunction</td>
<td>This one is addressed below. It&#8217;s the Javascript function that resets the field, undoing all non-committed inline edits.</td>
</tr>
<tr>
<td>showOnEdit</td>
<td>Buttons to show when the field is edited. See hideOnEdit.</td>
</tr>
</tbody>
</table>
<p>What are your next steps?  Planning to add this to your page layouts?  Looks like anyone with cool tools to convert regular page layouts to Visualforce layouts is going to have a lot of work to do!</p><div class="evernoteSiteMemory"><a href="javascript:" onclick="Evernote.doClip({title: 'Visualforce Inline Editing &amp;#8211; I\&#039;m In Love on X-Squared On Demand',url: 'http://www.x2od.com/2011/02/28/vf-inlineediting-love',contentID: 'contentleft',suggestNotebook: 'Salesforce',suggestTags: 'Apex,New Features,Visualforce',providerName: 'X-Squared On Demand',styling: 'full' });return false" class="evernoteSiteMemoryLink"><img src="http://static.evernote.com/article-clipper.png" class="evernoteSiteMemoryButton" />
				</a>				<div class="evernoteSiteMemoryClear">&nbsp;</div>
</div>
<p><a href="http://feedads.g.doubleclick.net/~a/gukEjAed91PLcORxxRTxPkTkLyU/0/da"><img src="http://feedads.g.doubleclick.net/~a/gukEjAed91PLcORxxRTxPkTkLyU/0/di" border="0" ismap="true"></img></a><br/>
<a href="http://feedads.g.doubleclick.net/~a/gukEjAed91PLcORxxRTxPkTkLyU/1/da"><img src="http://feedads.g.doubleclick.net/~a/gukEjAed91PLcORxxRTxPkTkLyU/1/di" border="0" ismap="true"></img></a></p><div class="feedflare">
<a href="http://feeds.feedburner.com/~ff/x2od_wp?a=0Wcs0TrJNKA:l54R62VUo-I:D7DqB2pKExk"><img src="http://feeds.feedburner.com/~ff/x2od_wp?i=0Wcs0TrJNKA:l54R62VUo-I:D7DqB2pKExk" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/x2od_wp?a=0Wcs0TrJNKA:l54R62VUo-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=0Wcs0TrJNKA:l54R62VUo-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=0Wcs0TrJNKA:l54R62VUo-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/0Wcs0TrJNKA" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://www.x2od.com/2011/02/28/vf-inlineediting-love/feed</wfw:commentRss>
		<slash:comments>4</slash:comments>
		<feedburner:origLink>http://www.x2od.com/2011/02/28/vf-inlineediting-love</feedburner:origLink></item>
		<item>
		<title>System Replacement For isTest Apex Method</title>
		<link>http://feedproxy.google.com/~r/x2od_wp/~3/dYHbDWyapDU/system-replacement-for-istest-apex-method</link>
		<comments>http://www.x2od.com/2011/02/23/system-replacement-for-istest-apex-method#comments</comments>
		<pubDate>Wed, 23 Feb 2011 21:31:19 +0000</pubDate>
		<dc:creator>David Schach</dc:creator>
				<category><![CDATA[Apex]]></category>
		<category><![CDATA[Development]]></category>
		<category><![CDATA[salesforce.com]]></category>
		<category><![CDATA[Winter 11]]></category>
		<category><![CDATA[New Features]]></category>

		<guid isPermaLink="false">http://www.x2od.com/?p=1202</guid>
		<description><![CDATA[Sometimes we have to write code that executes differently if the Apex is being tested. For a great example, check out Scott Hemmeter's blog post on testing webservice callouts at http://sfdc.arrowpointe.com/2009/05/01/testing-http-callouts/. Scott's example works well, and he uses a Boolean isApexTest, running certain code if this is true or false. I used to do something [...]]]></description>
			<content:encoded><![CDATA[<p>Sometimes we have to write code that executes differently if the Apex is being tested.  For a great example, check out Scott Hemmeter's
blog post on testing webservice callouts at <a href="http://sfdc.arrowpointe.com/2009/05/01/testing-http-callouts/">http://sfdc.arrowpointe.com/2009/05/01/testing-http-callouts/</a>. </p>
<p>Scott's example works well, and he uses a Boolean <code>isApexTest</code>, running certain code if this is true or false.  I used to do something similar.  </p>
<p>The disadvantage is that one has to declare one more variable, assign a new value to it from the test code (or call a special method from the test code which, in my opinion, negatively impacts code readability), and (if you put your test code in a separate class) declare it as public.  My Java professor would not like this, as he preferred to declare all variables private unless absolutely necessary.  Sure, I could make a private Boolean and a getter, but now we're splitting hairs.</p>
<p>Salesforce has come to the rescue, though, with a <code>test.isRunningTest()</code> method.  Basically, you can use this interchangeably with your <code>isApexTest</code> variable.  </p>
<p>Here's a snippet of code (from Scott's blog post) with the old and new methods:</p>
<pre class="brush: java; title: ; notranslate">
public static boolean isApexTest = false;
public String main(){
    // Build the http request
    // Invoke web service call
    String result = '';
    if (!isApexTest){
        // Make a real callout since we are not running a test
    } else {
        // A test is running
        result = FakeXMLReturnToSimulateResponse;
    }
    return result;
}
</pre>
And now with the new method:
<pre class="brush: java; title: ; notranslate">
public String main(){
    // Build the http request
    // Invoke web service call
    String result = '';
    if (!Test.isRunningTest()){
        // Make a real callout since we are not running a test
    } else {
        // A test is running
        result = FakeXMLReturnToSimulateResponse;
    }
    return result;
}
</pre>
Some among you may want to switch the two so that we don't put a negative method response in the if evaluator, and that's okay too.  <div class="evernoteSiteMemory"><a href="javascript:" onclick="Evernote.doClip({title: 'System Replacement For isTest Apex Method on X-Squared On Demand',url: 'http://www.x2od.com/2011/02/23/system-replacement-for-istest-apex-method',contentID: 'contentleft',suggestNotebook: 'Salesforce',suggestTags: 'Apex,New Features',providerName: 'X-Squared On Demand',styling: 'full' });return false" class="evernoteSiteMemoryLink"><img src="http://static.evernote.com/article-clipper.png" class="evernoteSiteMemoryButton" />
				</a>				<div class="evernoteSiteMemoryClear">&nbsp;</div>
</div>
<p><a href="http://feedads.g.doubleclick.net/~a/B2vLR0zxm6h_RagtK9RlE6r4mD4/0/da"><img src="http://feedads.g.doubleclick.net/~a/B2vLR0zxm6h_RagtK9RlE6r4mD4/0/di" border="0" ismap="true"></img></a><br/>
<a href="http://feedads.g.doubleclick.net/~a/B2vLR0zxm6h_RagtK9RlE6r4mD4/1/da"><img src="http://feedads.g.doubleclick.net/~a/B2vLR0zxm6h_RagtK9RlE6r4mD4/1/di" border="0" ismap="true"></img></a></p><div class="feedflare">
<a href="http://feeds.feedburner.com/~ff/x2od_wp?a=dYHbDWyapDU:i4NiQOcj1Uc:D7DqB2pKExk"><img src="http://feeds.feedburner.com/~ff/x2od_wp?i=dYHbDWyapDU:i4NiQOcj1Uc:D7DqB2pKExk" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/x2od_wp?a=dYHbDWyapDU:i4NiQOcj1Uc: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=dYHbDWyapDU:i4NiQOcj1Uc: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=dYHbDWyapDU:i4NiQOcj1Uc: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/dYHbDWyapDU" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://www.x2od.com/2011/02/23/system-replacement-for-istest-apex-method/feed</wfw:commentRss>
		<slash:comments>1</slash:comments>
		<feedburner:origLink>http://www.x2od.com/2011/02/23/system-replacement-for-istest-apex-method</feedburner:origLink></item>
		<item>
		<title>Salesforce Wallpaper for iPad (by request)</title>
		<link>http://feedproxy.google.com/~r/x2od_wp/~3/GNjc5YwQZZM/salesforce-ipad-wallpaper</link>
		<comments>http://www.x2od.com/2010/08/13/salesforce-ipad-wallpaper#comments</comments>
		<pubDate>Fri, 13 Aug 2010 16:38:12 +0000</pubDate>
		<dc:creator>David Schach</dc:creator>
				<category><![CDATA[Companies]]></category>
		<category><![CDATA[salesforce.com]]></category>
		<category><![CDATA[Salesforce.com]]></category>

		<guid isPermaLink="false">http://www.x2od.com/?p=1140</guid>
		<description><![CDATA[Because he asked so nicely, here's a cloudy iPad wallpaper just for JP Seabury (and anyone else who wants it). Enjoy! (Click on the image to download the full-sized version.) &#160;]]></description>
			<content:encoded><![CDATA[<p>Because he <a href="http://www.x2od.com/2010/08/01/new-blackberry-wallpaper.html">asked so nicely</a>, here's a cloudy iPad wallpaper just for <a href="http://forcemonkey.blogspot.com/">JP Seabury</a> (and anyone else who wants it).  Enjoy!</p>
<center>


<div id="attachment_1141" class="wp-caption aligncenter" style="width: 235px"><a href="http://www.x2od.com/wp/wp-content/uploads/2010/08/sfdc_cloud_iPad_1024x768.jpg"><img src="http://www.x2od.com/wp/wp-content/uploads/2010/08/sfdc_cloud_iPad_1024x768-225x300.jpg" alt="iPad Salesforce Wallpaper" title="iPad Salesforce Wallpaper" width="225" height="300" class="size-medium wp-image-1141" /></a><p class="wp-caption-text">iPad Salesforce Wallpaper (1024x768 at 132dpi)</p></div></center>
<p>(Click on the image to download the full-sized version.)</p>

<div class="evernoteSiteMemory"><a href="javascript:" onclick="Evernote.doClip({title: 'Salesforce Wallpaper for iPad (by request) on X-Squared On Demand',url: 'http://www.x2od.com/2010/08/13/salesforce-ipad-wallpaper',contentID: 'contentleft',suggestNotebook: 'Salesforce',suggestTags: 'Salesforce.com',providerName: 'X-Squared On Demand',styling: 'full' });return false" class="evernoteSiteMemoryLink"><img src="http://static.evernote.com/article-clipper.png" class="evernoteSiteMemoryButton" />
				</a>				<div class="evernoteSiteMemoryClear">&nbsp;</div>
</div>
<p><a href="http://feedads.g.doubleclick.net/~a/aGIWI6OJ9s2N7MBjJY3J16SPkhI/0/da"><img src="http://feedads.g.doubleclick.net/~a/aGIWI6OJ9s2N7MBjJY3J16SPkhI/0/di" border="0" ismap="true"></img></a><br/>
<a href="http://feedads.g.doubleclick.net/~a/aGIWI6OJ9s2N7MBjJY3J16SPkhI/1/da"><img src="http://feedads.g.doubleclick.net/~a/aGIWI6OJ9s2N7MBjJY3J16SPkhI/1/di" border="0" ismap="true"></img></a></p><div class="feedflare">
<a href="http://feeds.feedburner.com/~ff/x2od_wp?a=GNjc5YwQZZM:Nk40mpJ2l2w:D7DqB2pKExk"><img src="http://feeds.feedburner.com/~ff/x2od_wp?i=GNjc5YwQZZM:Nk40mpJ2l2w:D7DqB2pKExk" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/x2od_wp?a=GNjc5YwQZZM:Nk40mpJ2l2w: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=GNjc5YwQZZM:Nk40mpJ2l2w: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=GNjc5YwQZZM:Nk40mpJ2l2w: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/GNjc5YwQZZM" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://www.x2od.com/2010/08/13/salesforce-ipad-wallpaper/feed</wfw:commentRss>
		<slash:comments>2</slash:comments>
		<feedburner:origLink>http://www.x2od.com/2010/08/13/salesforce-ipad-wallpaper</feedburner:origLink></item>
		<item>
		<title>New Blackberry and iPhone Wallpaper</title>
		<link>http://feedproxy.google.com/~r/x2od_wp/~3/lc8k7eYzX3o/new-blackberry-wallpaper</link>
		<comments>http://www.x2od.com/2010/08/01/new-blackberry-wallpaper#comments</comments>
		<pubDate>Sun, 01 Aug 2010 17:30:25 +0000</pubDate>
		<dc:creator>David Schach</dc:creator>
				<category><![CDATA[salesforce.com]]></category>

		<guid isPermaLink="false">http://www.x2od.com/?p=1100</guid>
		<description><![CDATA[Last year, I published a wallpaper image for Blackberry, at a resolution of 320&#215;240 (how quaint). Screen resolution has grown since then, as has salesforce.com and Salesforce CRM. This is a new wallpaper background using the latest branding, at 480&#215;360. For those of you using retinal displays, here&#8217;s one for you: I expect to see [...]]]></description>
			<content:encoded><![CDATA[<p>Last year, I published a <a href="http://www.x2od.com/2009/04/09/salesforce-blackberry-wallpaper.html">wallpaper image for Blackberry</a>, at a resolution of 320&#215;240 (how quaint).  Screen resolution has grown since then, as has salesforce.com and Salesforce CRM.</p>
<p>This is a new wallpaper background using the latest branding, at 480&#215;360.</p>
<p><center>
<div id="attachment_1101" class="wp-caption aligncenter" style="width: 310px"><a href="http://www.x2od.com/wp/wp-content/uploads/2010/07/sfdc_cloud_Blackberry_480x360.jpg"><img src="http://www.x2od.com/wp/wp-content/uploads/2010/07/sfdc_cloud_Blackberry_480x360-300x225.jpg" alt="" title="Blackberry Background 480x360" width="300" height="225" class="size-medium wp-image-1101" /></a><p class="wp-caption-text">Blackberry Wallpaper 480x360px</p></div>
</center></p>
<p>For those of you using retinal displays, here&#8217;s one for you:</p>
<p><center>
<div id="attachment_1112" class="wp-caption aligncenter" style="width: 210px"><a href="http://www.x2od.com/wp/wp-content/uploads/2010/07/sfdc_cloud_iPhone.jpg"><img src="http://www.x2od.com/wp/wp-content/uploads/2010/07/sfdc_cloud_iPhone-200x300.jpg" alt="" title="iPhone Background 640x960" width="200" height="300" class="size-medium wp-image-1112" /></a><p class="wp-caption-text">iPhone Wallpaper 640x960px</p></div>
</center></p>
<p>I expect to see you ALL using these at Dreamforce 2010!</p>
<p>(Thanks to Jamie Grenney at salesforce.com for the original image post years ago.)</p><div class="evernoteSiteMemory"><a href="javascript:" onclick="Evernote.doClip({title: 'New Blackberry and iPhone Wallpaper on X-Squared On Demand',url: 'http://www.x2od.com/2010/08/01/new-blackberry-wallpaper',contentID: 'contentleft',suggestNotebook: 'Salesforce',suggestTags: '',providerName: 'X-Squared On Demand',styling: 'full' });return false" class="evernoteSiteMemoryLink"><img src="http://static.evernote.com/article-clipper.png" class="evernoteSiteMemoryButton" />
				</a>				<div class="evernoteSiteMemoryClear">&nbsp;</div>
</div>
<p><a href="http://feedads.g.doubleclick.net/~a/qWHjOTSkHgkWW6D3PlvhCep4BiM/0/da"><img src="http://feedads.g.doubleclick.net/~a/qWHjOTSkHgkWW6D3PlvhCep4BiM/0/di" border="0" ismap="true"></img></a><br/>
<a href="http://feedads.g.doubleclick.net/~a/qWHjOTSkHgkWW6D3PlvhCep4BiM/1/da"><img src="http://feedads.g.doubleclick.net/~a/qWHjOTSkHgkWW6D3PlvhCep4BiM/1/di" border="0" ismap="true"></img></a></p><div class="feedflare">
<a href="http://feeds.feedburner.com/~ff/x2od_wp?a=lc8k7eYzX3o:TxUOPFFK_oA:D7DqB2pKExk"><img src="http://feeds.feedburner.com/~ff/x2od_wp?i=lc8k7eYzX3o:TxUOPFFK_oA:D7DqB2pKExk" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/x2od_wp?a=lc8k7eYzX3o:TxUOPFFK_oA: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=lc8k7eYzX3o:TxUOPFFK_oA: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=lc8k7eYzX3o:TxUOPFFK_oA: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/lc8k7eYzX3o" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://www.x2od.com/2010/08/01/new-blackberry-wallpaper/feed</wfw:commentRss>
		<slash:comments>4</slash:comments>
		<feedburner:origLink>http://www.x2od.com/2010/08/01/new-blackberry-wallpaper</feedburner:origLink></item>
		<item>
		<title>Chatter and the CLM</title>
		<link>http://feedproxy.google.com/~r/x2od_wp/~3/cycmLRgiP6o/chatter-clm</link>
		<comments>http://www.x2od.com/2010/06/11/chatter-clm#comments</comments>
		<pubDate>Fri, 11 Jun 2010 16:30:20 +0000</pubDate>
		<dc:creator>David Schach</dc:creator>
				<category><![CDATA[New Features]]></category>
		<category><![CDATA[salesforce.com]]></category>
		<category><![CDATA[Tips and Tricks]]></category>
		<category><![CDATA[Chatter]]></category>
		<category><![CDATA[Enterprise]]></category>

		<guid isPermaLink="false">http://www.x2od.com/?p=1061</guid>
		<description><![CDATA[I love Chatter. I love the way that it is a game-changer. I think that Chatter is a powerful tool. But as Peter Parker's Uncle Ben said, "With great power comes great responsibility," and with the possibility of great rewards from Chatter comes great risks. First I'll list my conclusions, just so there's no misunderstanding. [...]]]></description>
			<content:encoded><![CDATA[<p>I love Chatter.  I love the way that it is a game-changer.  I think that Chatter is a powerful tool.  But as Peter Parker's Uncle Ben said, "With great power comes great responsibility," and with the possibility of great rewards from Chatter comes great risks.</p>
<p>First I'll list my conclusions, just so there's no misunderstanding.  Then I'll explain some of the possible pitfalls that Chatter presents.</p>
<ol>
<li>Chatter is amazing.  It  lets users share information in ways never seen before.</li>
<li>Chatter should be enabled in an org as an all-or-nothing switch - as it is now.  Allowing it to be disabled for some users goes against its core purpose.</li>
<li>As a single-opt-in system, the risk of Chatter-Spam is huge, but responsibility falls to each user to self-police, and probably to each company to educate its users in appropriate chatting.</li>
</ol>
<p>Let's compare Chatter, Facebook, and Twitter in terms of what is necessary for a conversation between two people to appear in my activity stream.</p>
<p><strong>Facebook</strong></p>
<p>Facebook is a <strong>double-double</strong> opt-in system.  To see a wall post from one person to another in my stream, I must be friends with both of them, and each friendship-connection is a double opt-in, meaning that one person requests and the other approves.</p>
<p><strong>Twitter</strong></p>
<p>Twitter is a double-single opt-in system.  To see one person's reply to another, I must be following both of them.  But unless one of them decides to block me, the default is that I will see the entire exchange in my twitter feed.</p>
<p><strong>Chatter</strong></p>
</p>
<p>Chatter is a single-single opt-in system.  This means that if I post something to anyone in the org, everyone following that person will see.  Here's an example: Let's assume that every user at salesforce.com follows Marc Benioff.  One user posts a photo of his son's graduation to Marc.  Everyone following Marc will see it.</p>
<p>Sounds innocuous, right?  Probably.  But if a user keeps posting silly things to Marc, and enough people see it, other users could become annoyed.</p>
<p>Take it down a level, and imagine that everyone on a sales team follows each other.  A junior AE keeps sending silly stuff to the strongest seller in the group, and all the sales people have to see it.  This could clog their streams.</p>
</p>
<p>This is called a CLM: A Career-Limiting Move.  As great power requires great responsibility, we must ask who should shoulder this responsibility.</p>
<ol>
<li>The company: Training for users and a quick eye to bring inappropriate chatters into line.</li>
<li>Individuals: Just be careful.  This is the Facebook public-posting dilemma.  Don't forget that you have no control with whom you are connected, so anyone who wants to follow you will see anything you post, and anyone who follows someone you post to will see it as well.</li>
</ol>
<p>The solution is NOT to turn off Chatter for certain people - Chatter is about the free-flow of data across an org, organized into forms that make it useful information.  By putting information at the fingertips of every user, productivity will be increased.</p>
<p>Blocking people is also not a good solution.</p>
<p>Chatter Groups (Safe Harbor Statement!) will help, but will attenuate, not completely remove, the chances that this will happen.</p>
<p>Salesforce CRM should be a "sticky" app - that is, it should provide services in one place so that users see it as their central point of information.  The best way to ensure the free-flow of information is to prevent blocking of certain users.</p>
<div class="evernoteSiteMemory"><a href="javascript:" onclick="Evernote.doClip({title: 'Chatter and the CLM on X-Squared On Demand',url: 'http://www.x2od.com/2010/06/11/chatter-clm',contentID: 'contentleft',suggestNotebook: 'Salesforce',suggestTags: 'Chatter,Enterprise',providerName: 'X-Squared On Demand',styling: 'full' });return false" class="evernoteSiteMemoryLink"><img src="http://static.evernote.com/article-clipper.png" class="evernoteSiteMemoryButton" />
				</a>				<div class="evernoteSiteMemoryClear">&nbsp;</div>
</div>
<p><a href="http://feedads.g.doubleclick.net/~a/qDplMzfIjky8EIWk59Xa22zyJY0/0/da"><img src="http://feedads.g.doubleclick.net/~a/qDplMzfIjky8EIWk59Xa22zyJY0/0/di" border="0" ismap="true"></img></a><br/>
<a href="http://feedads.g.doubleclick.net/~a/qDplMzfIjky8EIWk59Xa22zyJY0/1/da"><img src="http://feedads.g.doubleclick.net/~a/qDplMzfIjky8EIWk59Xa22zyJY0/1/di" border="0" ismap="true"></img></a></p><div class="feedflare">
<a href="http://feeds.feedburner.com/~ff/x2od_wp?a=cycmLRgiP6o:rbzLCYp6xIk:D7DqB2pKExk"><img src="http://feeds.feedburner.com/~ff/x2od_wp?i=cycmLRgiP6o:rbzLCYp6xIk:D7DqB2pKExk" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/x2od_wp?a=cycmLRgiP6o:rbzLCYp6xIk: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=cycmLRgiP6o:rbzLCYp6xIk: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=cycmLRgiP6o:rbzLCYp6xIk: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/cycmLRgiP6o" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://www.x2od.com/2010/06/11/chatter-clm/feed</wfw:commentRss>
		<slash:comments>2</slash:comments>
		<feedburner:origLink>http://www.x2od.com/2010/06/11/chatter-clm</feedburner:origLink></item>
		<item>
		<title>I Found a Bug – And Salesforce Support Was Great</title>
		<link>http://feedproxy.google.com/~r/x2od_wp/~3/IFiIU3bvDLE/i-found-a-bug-and-salesforce-support-was-great</link>
		<comments>http://www.x2od.com/2010/06/10/i-found-a-bug-and-salesforce-support-was-great#comments</comments>
		<pubDate>Thu, 10 Jun 2010 20:23:50 +0000</pubDate>
		<dc:creator>David Schach</dc:creator>
				<category><![CDATA[salesforce.com]]></category>
		<category><![CDATA[Force.com Builder]]></category>
		<category><![CDATA[Salesforce.com]]></category>

		<guid isPermaLink="false">http://www.x2od.com/?p=1069</guid>
		<description><![CDATA[A week ago, I installed Scott Hemmeter&#8217;s amazing app, Geopointe. Everything was going smoothly until I decided to manage the licenses I had assigned to the app. I successfully managed the licenses and tried to click the &#8220;Back to Previous Page&#8221; link, but something broke: Here&#8217;s a video of the problem in action: Managing Licenses [...]]]></description>
			<content:encoded><![CDATA[<p>A week ago, I installed Scott Hemmeter&#8217;s amazing app, Geopointe.  Everything was going smoothly until I decided to manage the licenses I had assigned to the app.</p>
<p>I successfully managed the licenses and tried to click the &#8220;Back to Previous Page&#8221; link, but something broke:</p>
<div id="attachment_1070" class="wp-caption aligncenter" style="width: 310px"><a href="http://www.x2od.com/wp/wp-content/uploads/2010/06/URL-Error.png"><img src="http://www.x2od.com/wp/wp-content/uploads/2010/06/URL-Error-300x188.png" alt="Salesforce CRM&#039;s standard &quot;Bad URL&quot; error" title="URL Error" width="300" height="188" class="size-medium wp-image-1070" /></a><p class="wp-caption-text">This should never happen for a Salesforce-generated URL</p></div>
<p>Here&#8217;s a video of the problem in action: <a href='http://www.x2od.com/wp/wp-content/uploads/2010/06/2010-06_SFDC_Bug.mp4'>Managing Licenses Previous Page Link Is Broken.</a></p>
<p>This is a story about the super-responsiveness of the salesforce.com support team.  (I&#8217;m not including peoples&#8217; names, but for any employees, it is Case 03580410.</p>
<p>I submitted my case May 24, and the first response was received May 25.  The first person, JW, sent an email asking me to clear my cache and change my browser.  I cleared the cache, used multiple browsers, and even tried with different packages in my org.  All had the same problem.</p>
<p>May 27, JW tried to call me, but I was unavailable.  (Good follow-up.)  He also sent an email, and I promised to get back to him.  I replied the next day and told him that the problem occurred even on different computers, with different browsers, and different packages.  He quickly replied and asked to login to the org to try to recreate the issue.</p>
<p>The next step was for us both to login to the org while on the phone.  He verified that the problem was happening, and we noticed something interesting:</p>
<p>Clicking &#8220;View Installed Packages&#8221; gives a URL like &#8230;/0A3?setupid&#8230; and clicking Manage Licenses gives a long URL including ?allPackageId=033600000004Pjn.  The broken link was https://na7.salesforce.com/033600000004Pjn.  See anything there?</p>
<p>The &#8220;Back to Previous Page&#8221; link should have taken me back to the /0A3 page (exactly as the browser Back button did), but instead tried to show me the inner workings of a package, which Salesforce clearly cannot display.</p>
<p>JW suggested that this was a problem with the app, as the link was on a page managing licenses for two managed apps by the same publisher.  I quickly explained that I had developed managed applications before and that I knew that this was a feature created by salesforce.com, and therefore salesforce.com was responsible for the broken link.  He said that he understood and that he would escalate the case to Tier 2.</p>
<p>Quick recap so far: Salesforce Support has responded quickly, so they get good points for that, but I&#8217;ve not been available to talk.  The support rep has tried everything he and I can think of, and we have found a problem in a link that directs to the wrong URL.  I&#8217;m up to Tier 2.</p>
<p>At this point, I don&#8217;t have any more communication until June 8.  I&#8217;m not fussed, as I know it&#8217;s a real issue, but I have a good workaround (use the Back button).</p>
<p>June 8, GE sends me an email saying that he reproduced the error and escalated it to Tier 3 for further investigation.  I thanked him and said that it felt bittersweet because I had found a real problem and it&#8217;s no fun when my beloved Salesforce CRM has a bug.  He validated my feelings. (Warm fuzzies all around.)</p>
<p>The next day, GE sends an email.  This is the text:</p>
<blockquote><p>An issue tracking number has been attached to your case, and is awaiting prioritization by R&#038;D. I will receive updates on this, but the timeline for rollout may not be known for some time.  Just wanted to let you know that it has been queued up for a fix, and I will let you know more when I know. Feel free to check in any time, and also bear in mind that there is a very good workaround for this, being the browser back button J We’re just required to mention workarounds, even though I know you know this. Let me know if you need anything else.</p></blockquote>
<p>Music to my ears!  An issue tracking number!  R&#038;D looking into it!  I had found a real bug and it would be fixed!  </p>
<p>The point of all this is to say that for all the complaints (many justified) that people have about salesforce.com support (why do they automatically want login access when the problem sometimes has nothing to do with anything in an org???) there are times that they really shine.</p>
<p>Thank you, JW and GE.  At least I know a fix is coming.  </p>
<div class="evernoteSiteMemory"><a href="javascript:" onclick="Evernote.doClip({title: 'I Found a Bug &amp;#8211; And Salesforce Support Was Great on X-Squared On Demand',url: 'http://www.x2od.com/2010/06/10/i-found-a-bug-and-salesforce-support-was-great',contentID: 'contentleft',suggestNotebook: 'Salesforce',suggestTags: 'Force.com Builder,Salesforce.com',providerName: 'X-Squared On Demand',styling: 'full' });return false" class="evernoteSiteMemoryLink"><img src="http://static.evernote.com/article-clipper.png" class="evernoteSiteMemoryButton" />
				</a>				<div class="evernoteSiteMemoryClear">&nbsp;</div>
</div>
<p><a href="http://feedads.g.doubleclick.net/~a/z-lSEHs-25_ypJtaYP5LrhT9R_s/0/da"><img src="http://feedads.g.doubleclick.net/~a/z-lSEHs-25_ypJtaYP5LrhT9R_s/0/di" border="0" ismap="true"></img></a><br/>
<a href="http://feedads.g.doubleclick.net/~a/z-lSEHs-25_ypJtaYP5LrhT9R_s/1/da"><img src="http://feedads.g.doubleclick.net/~a/z-lSEHs-25_ypJtaYP5LrhT9R_s/1/di" border="0" ismap="true"></img></a></p><div class="feedflare">
<a href="http://feeds.feedburner.com/~ff/x2od_wp?a=IFiIU3bvDLE:0gdM2OuZutY:D7DqB2pKExk"><img src="http://feeds.feedburner.com/~ff/x2od_wp?i=IFiIU3bvDLE:0gdM2OuZutY:D7DqB2pKExk" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/x2od_wp?a=IFiIU3bvDLE:0gdM2OuZutY: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=IFiIU3bvDLE:0gdM2OuZutY: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=IFiIU3bvDLE:0gdM2OuZutY: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/IFiIU3bvDLE" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://www.x2od.com/2010/06/10/i-found-a-bug-and-salesforce-support-was-great/feed</wfw:commentRss>
		<slash:comments>6</slash:comments>
<enclosure url="http://www.x2od.com/wp/wp-content/uploads/2010/06/2010-06_SFDC_Bug.mp4" length="1056761" type="video/mp4" />
		<feedburner:origLink>http://www.x2od.com/2010/06/10/i-found-a-bug-and-salesforce-support-was-great</feedburner:origLink></item>
		<item>
		<title>Sophisticated DateTime “Formula Fields” with Apex and Field-Level Security</title>
		<link>http://feedproxy.google.com/~r/x2od_wp/~3/dZ4Wj9F0BGw/sophisticated-datetime-formula-fields-with-apex-and-fls</link>
		<comments>http://www.x2od.com/2010/05/17/sophisticated-datetime-formula-fields-with-apex-and-fls#comments</comments>
		<pubDate>Mon, 17 May 2010 20:39:25 +0000</pubDate>
		<dc:creator>David Schach</dc:creator>
				<category><![CDATA[Apex]]></category>
		<category><![CDATA[Configuration]]></category>
		<category><![CDATA[Development]]></category>
		<category><![CDATA[Force.com Platform]]></category>
		<category><![CDATA[Native Application]]></category>
		<category><![CDATA[Salesforce CRM]]></category>
		<category><![CDATA[salesforce.com]]></category>
		<category><![CDATA[Tips and Tricks]]></category>
		<category><![CDATA[Eclipse IDE]]></category>
		<category><![CDATA[Force.com Builder]]></category>

		<guid isPermaLink="false">http://www.x2od.com/?p=997</guid>
		<description><![CDATA[What do you do when you want to calculate a formula-like field but a regular formula won't work? Salesforce CRM's formulas handle dates very well. If you want to enter a date value and have formula fields display, for instance, mydate__c + 21 days, that's simple. Just use mydate__c + 21. Side note: If you [...]]]></description>
			<content:encoded><![CDATA[<p>What do you do when you want to calculate a formula-like field but a regular formula won't work?  </p>
<p>Salesforce CRM's formulas handle dates very well.  If you want to enter a date value and have formula fields display, for instance, mydate__c + 21 days, that's simple.  Just use <code> mydate__c + 21</code>.</p>
<p><i>Side note: If you try going the long way around and use <code>DATE( YEAR( mydate__c ), MONTH( mydate__c ), DAY( mydate__c ) + 21 ) </code> and mydate__c = 09/17/2010, Salesforce returns #Error! because there's no date 09/38/2010.  Similarly, adding three months to a date like 1/31/2010 will also give an error.  More about this in a future post.</i></p>
<p>DateTime fields are like Date fields, but they include... wait for it... a time component (and can be created in the running user's local time zone or in GMT).</p>
<p>Here's a use-case for a DateTime formula field:</p>
<p>A photography studio schedules photo shoots, and different packages include different durations.  Similarly, we could use a hair salon which offers different services, each with a different duration, a dentist... you get the idea.</p>
<p>Requirements:</p>
<ol>
	<li>Enter a DateTime for an appointment start time (<code>starttime__c</code>)</li>
	<li>Enter a duration (though in a production system, I'd include a value on the <code>Product2</code> sObject, we'll just enter a value here) (<code>minutes__c</code>)</li>
	<li>Display a read-only DateTime field with the end time (<code>endtime__c</code>)</li>
	<li>The end time must be read-only to all users, like any formula field</li>
</ol>
<p>Here's what won't work:</p>
<ul>
	<li>A formula field won't work because there are no MINUTE(), HOUR(), SECOND() formula functions</li>
	<li>Workflow won't work because it depends on formulas to fill new values for date/datetime fields</li>
</ul>
<p>That leaves Apex.  First, the configuration:</p>
<ol>
	<li>Create DateTime field <code>starttime__c</code></li>
	<li>Create DateTime field <code>endtime__c</code></li>
	<li>Set <code>endtime__c</code> field-level security to Read-Only for all profiles</li>
	<li>Create Number (18,0) field <code>minutes__c</code></li>
	<li>Create a trigger on the sobject</li>
</ol>
<p>Here's the trigger:</p>
<pre class="brush: java; title: ; notranslate">
trigger timeTrigger on TestObject__c (before insert, before update) {
    for (TestObject__c t : Trigger.New){
    	if(t.StartTime__c != null &amp;&amp; t.minutes__c != null){
        datetime myDateT = t.StartTime__c;
        double d = t.minutes__c;
        Integer shootmins = d.intValue();
        if(mydateT != null &amp;&amp; shootmins != null)
        	t.EndTime__c = myDateT.addminutes(integer.valueof(shootmins));
       	}
    }
} 
</pre>
<p>Regular readers will note that I do usually split triggers into a trigger and a class, but I've not done so here purely for the sake of brevity.</p>
<p>Here's the test code:</p>
<pre class="brush: java; title: ; notranslate">
public without sharing class shootTimesTriggerTest {

    private static testMethod void ShootCalculateEndTime_PositiveTestCases() {
        TestObject__c to;
        TestObject__c l;    
        test.starttest();
        l = new TestObject__c (name = 'test');
        datetime myDateTime = datetime.newInstance(2008, 12, 1, 12, 30, 2);
        l.StartTime__c = myDateTime;
        l.minutes__c = 90;
        insert l;
        to = [SELECT id, EndTime__c FROM TestObject__c WHERE id = :l.id];
        datetime newDateTime = datetime.newInstance(2008, 12, 1, 14, 0, 2);
        system.assertequals(to.EndTime__c, newDateTime);
        l.minutes__c = 45;
        update l;        
        to = [SELECT id, EndTime__c FROM TestObject__c WHERE id = :l.id];
        newDateTime = datetime.newInstance(2008, 12, 1, 13, 15, 2);
        system.assertequals(to.EndTime__c, newDateTime);
        test.stoptest();
    }

    private static testMethod void OppCalculateEndTime_NegativeTestCases() {
        test.starttest();
        TestObject__c l = new TestObject__c (name = 'test');
        l.minutes__c = null;
        insert l;
        system.assertequals(l.EndTime__c, null);
        test.stoptest();
    } 
}
</pre>
<p>A few points about how this works:</p>
<ul>
	<li>Triggers run in System mode, so they don't respect field-level security.  Thus, we can set a field to read-only for all profiles, and the EndTime__c field will still be updated.</li>
	<li>The test code runs in System mode as well, avoiding any potential problems if the field were set to invisible to a profile and we used System.RunAs() to test for various profiles.</li>
	<li>Although I'm not a fan of using SOQL queries this often, I used these in the interest of saving time.  Keep in mind that if you had quite a few queries in your regular code, adding these two might put you over the limit, so use queries sparingly!</li>
	<li>This is the only way I know of to add minutes to a DateTime.</li>
</ul>
<p>Did I miss anything?  Please let me know in the comments.</p>
<div class="evernoteSiteMemory"><a href="javascript:" onclick="Evernote.doClip({title: 'Sophisticated DateTime \&quot;Formula Fields\&quot; with Apex and Field-Level Security on X-Squared On Demand',url: 'http://www.x2od.com/2010/05/17/sophisticated-datetime-formula-fields-with-apex-and-fls',contentID: 'contentleft',suggestNotebook: 'Salesforce',suggestTags: 'Apex,Eclipse IDE,Force.com Builder',providerName: 'X-Squared On Demand',styling: 'full' });return false" class="evernoteSiteMemoryLink"><img src="http://static.evernote.com/article-clipper.png" class="evernoteSiteMemoryButton" />
				</a>				<div class="evernoteSiteMemoryClear">&nbsp;</div>
</div>
<p><a href="http://feedads.g.doubleclick.net/~a/XR11gSr8HLDfffTbkMxDJENsOps/0/da"><img src="http://feedads.g.doubleclick.net/~a/XR11gSr8HLDfffTbkMxDJENsOps/0/di" border="0" ismap="true"></img></a><br/>
<a href="http://feedads.g.doubleclick.net/~a/XR11gSr8HLDfffTbkMxDJENsOps/1/da"><img src="http://feedads.g.doubleclick.net/~a/XR11gSr8HLDfffTbkMxDJENsOps/1/di" border="0" ismap="true"></img></a></p><div class="feedflare">
<a href="http://feeds.feedburner.com/~ff/x2od_wp?a=dZ4Wj9F0BGw:lLbjY-hRd3U:D7DqB2pKExk"><img src="http://feeds.feedburner.com/~ff/x2od_wp?i=dZ4Wj9F0BGw:lLbjY-hRd3U:D7DqB2pKExk" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/x2od_wp?a=dZ4Wj9F0BGw:lLbjY-hRd3U: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=dZ4Wj9F0BGw:lLbjY-hRd3U: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=dZ4Wj9F0BGw:lLbjY-hRd3U: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/dZ4Wj9F0BGw" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://www.x2od.com/2010/05/17/sophisticated-datetime-formula-fields-with-apex-and-fls/feed</wfw:commentRss>
		<slash:comments>3</slash:comments>
		<feedburner:origLink>http://www.x2od.com/2010/05/17/sophisticated-datetime-formula-fields-with-apex-and-fls</feedburner:origLink></item>
		<item>
		<title>Extended NA1 Maintenance Next Weekend (3/20)</title>
		<link>http://feedproxy.google.com/~r/x2od_wp/~3/rkYhv5FWCzE/extended-na1-maintenance</link>
		<comments>http://www.x2od.com/2010/03/13/extended-na1-maintenance#comments</comments>
		<pubDate>Sat, 13 Mar 2010 21:24:30 +0000</pubDate>
		<dc:creator>David Schach</dc:creator>
				<category><![CDATA[salesforce.com]]></category>
		<category><![CDATA[Spring 10]]></category>
		<category><![CDATA[New Developments]]></category>
		<category><![CDATA[Salesforce.com]]></category>

		<guid isPermaLink="false">http://www.x2od.com/?p=999</guid>
		<description><![CDATA[Next weekend, March 20, 2010, Salesforce NA1 will be down for an extended (8-hour) maintenance window - the longest in memory - from 7pm 3/20 to 3am 3/21 (All times PST). Overlapping this is another 8-hour window for NA0 (SSL) starting two hours earlier. Also starting at 7pm PST, EU0 (EMEA) will be down for [...]]]></description>
			<content:encoded><![CDATA[<p>Next weekend, March 20, 2010, Salesforce NA1 will be down for an extended (<b>8-hour</b>) maintenance window - the longest in memory - from 7pm 3/20
to 3am 3/21 (All times PST). </p> 
<p>Overlapping this is another 8-hour window for NA0 (SSL) starting two hours earlier.</p> 
<p>Also starting at 7pm PST, EU0 (EMEA) will be down for 2.5 hours. </p> 
<p>All other instances will be down for 30 minutes, from 9pm PST.</p> 
<p>As the email from salesforce.com explains:</p>
<table width="575px"> <tbody> <tr> <td><span style="font-family: Tahoma;"><span style="font-size: smaller;"><img src="https://a248.e.akamai.net/f/248/25855/14d/ig.rsys1.net/responsysimages/sfc/__RS_CP__/new_header.jpg" alt="" border="0" width="575px"/></span></span></td> </tr>
<tr> <td><span style="font-family: Tahoma;"><span style="font-size: smaller;">&nbsp;</span></span></td> </tr> <tr> <td valign="top">

 <span style="font-family: Tahoma;"><span style="font-size: smaller;"> <p>Dear Salesforce Administrator,</p> </span></span><span style="font-size:
smaller;">

 </span><span style="font-family: Tahoma;"><span style="font-size: x-small;">

 </span></span>

 <span style="font-family: Tahoma;"><span style="font-size: smaller;"> <p>At <a href="http://salesforce.com" target="_blank">salesforce.com</a>, customer
success through system availability and reliability is our top priority. As part of our ongoing plan to deliver high availability and reliability, we are
enhancing our service infrastructure on our NA1 instance.</p> </span></span> <span style="font-family: Tahoma;"><span style="font-size: x-small;">

 </span></span> <p><span style="font-family: Tahoma;"><span style="font-size: smaller;">Please be aware that <a href="http://salesforce.com" target="_blank">salesforce.com</a> will be performing scheduled maintenance <em>that will extend beyond standard system
maintenance windows</em>. The current scheduled window is:<br /> </span></span> <span style="font-family: Tahoma;"><span style="font-size:
smaller;"></span></span><span style="font-family: Tahoma;"></span>

 </p> <p class="MsoNormal"><span style="font-family: Tahoma;"><span style="font-size: smaller;"><b>Saturday, March 20th, 2010 from 7:00pm PST to Sunday,
March 21<sup>st</sup> at 3:00am PST </b></span></span><span style="font-size: 10pt;"></span></p>

 <span style="font-family: Tahoma;"><span style="font-size: smaller;"> During this time, the <a href="http://salesforce.com"
target="_blank">salesforce.com</a> NA1 service will be unavailable. Users attempting to access the service during this time will be presented with a
scheduled maintenance notification page. </span></span> <span style="font-family: Tahoma;"><span style="font-size: smaller;"> <p>We appreciate your
patience during this maintenance window.</p>

 </span></span><span style="font-family: Tahoma;"><span style="font-size: x-small;">

 </span></span>

 <span style="font-family: Tahoma;"><span style="font-size: smaller;"> <p>Best regards,<br /> -<a href="http://salesforce.com"
target="_blank">salesforce.com</a> Support</p> </span></span><span style="font-size: smaller;">

 </span><span style="font-family: Tahoma;"></span></td>

 </tr> 
 <tr> <td align="center" bgcolor="#ffffff" height="34"><span style="font-family: Tahoma;"><span style="font-size: smaller;"><span style="color: rgb(102, 102,
102);"><br /> Copyright 2000-2010 <a href="http://salesforce.com" target="_blank">salesforce.com</a> - All rights reserved - Various trademarks held by
their respective owners<br />

 Salesforce.com, One Market Street, Suite 300, San Francisco, CA 94105</span></span></span></td> </tr> </tbody> </table>



<div leftmargin="0" topmargin="0" alink="#003366" bgcolor="#ffffff" link="#003366" marginheight="0" marginwidth="0" text="#000000" vlink="#666666">

    <!--== System Status Content ==-->
    <table bgcolor="#ffffff" border="0" cellpadding="0" cellspacing="0" width="575">
        <tr>
            <td width="575" style="padding-left:15px;padding-top:15px;padding-right:15px;padding-bottom:15px;">
                <table border="0" cellpadding="0" cellspacing="0">
                    <tr>
                        <td valign="top">

                            <table border="0" cellpadding="0" cellspacing="0">
                                <tbody>
                                    <tr>
                                        <td><img src="http://trust.salesforce.com/opencms/status-data/img/headerSchedMaint.gif" alt="" width="575px"/></td>
                                    </tr>
                                    <tr>
                                        <td style="border-left: 1px solid rgb(255, 204, 0); border-right: 1px solid rgb(255, 204, 0); padding: 0px 0px 0px 0px; width: 575px; -moz-background-clip: -moz-initial; -moz-background-origin: -moz-initial; -moz-background-inline-policy: -moz-initial;">
                                            <center>
                                                
                                                <table border="0" cellspacing="0" cellpadding="0" width="100%">

                                                    
                                                    <tr>
                                                        <td width="10%"
                                                            style="border-bottom: 1px solid rgb(255, 204, 0); border-right: 1px solid rgb(255, 204, 0); padding:5px; ">
                                                            <b>NA0 (SSL)
                                                            </b>
                                                        </td>
                                                        <td width="26%"
                                                            style="border-bottom: 1px solid rgb(255, 204, 0); border-right: 1px solid rgb(255, 204, 0); padding:5px; ">
                                                            March 20, 5:00 pm PDT&nbsp;-<br />March 21, 1:00 am PDT
                                                        </td>

                                                        <td style="border-bottom: 1px solid rgb(255, 204, 0); padding:5px; ">

                                                            The NA0 instance will have maintenance performed at this time. The instance will be unavailable for the duration of the maintenance.
                                                        </td>
                                                    </tr>
                                                    
                                                    <tr>
                                                        <td width="13%"
                                                            style="border-bottom: 1px solid rgb(255, 204, 0); border-right: 1px solid rgb(255, 204, 0); padding:5px; background: rgb(243, 243, 236) none repeat scroll 0%;">
                                                            <b>EU0 (EMEA)
                                                            </b>
                                                        </td>
                                                        <td width="25%"
                                                            style="border-bottom: 1px solid rgb(255, 204, 0); border-right: 1px solid rgb(255, 204, 0); padding:5px; background: rgb(243, 243, 236) none repeat scroll 0%;">
                                                            March 20, 7:00 pm PDT&nbsp;-<br />March 20, 9:30 pm PDT
                                                        </td>

                                                        <td style="border-bottom: 1px solid rgb(255, 204, 0); padding:5px; background: rgb(243, 243, 236) none repeat scroll 0%;">
                                                            The EU0 instance will have maintenance performed at this time. The instance will be unavailable for the duration of the maintenance.
                                                        </td>
                                                    </tr>
                                                    
                                                    <tr>
                                                        <td width="13%"
                                                            style="border-bottom: 1px solid rgb(255, 204, 0); border-right: 1px solid rgb(255, 204, 0); padding:5px; ">
                                                            <b>NA1
                                                            </b>
                                                        </td>

                                                        <td width="25%"
                                                            style="border-bottom: 1px solid rgb(255, 204, 0); border-right: 1px solid rgb(255, 204, 0); padding:5px; ">
                                                            March 20, 7:00 pm PDT&nbsp;-<br />March 21, 3:00 am PDT
                                                        </td>

                                                        <td style="border-bottom: 1px solid rgb(255, 204, 0); padding:5px; ">
                                                            The NA1 instance will have maintenance performed at this time. The instance will be unavailable for the duration of the maintenance.
                                                        </td>
                                                    </tr>
                                                    
                                                    <tr>
                                                        <td width="13%"
                                                            style="border-bottom: 1px solid rgb(255, 204, 0); border-right: 1px solid rgb(255, 204, 0); padding:5px; background: rgb(243, 243, 236) none repeat scroll 0%;">

                                                            <b>All instances
                                                            </b>
                                                        </td>
                                                        <td width="25%"
                                                            style="border-bottom: 1px solid rgb(255, 204, 0); border-right: 1px solid rgb(255, 204, 0); padding:5px; background: rgb(243, 243, 236) none repeat scroll 0%;">
                                                            March 20, 9:00 pm PDT&nbsp;-<br />March 20, 9:30 pm PDT
                                                        </td>

                                                        <td style="border-bottom: 1px solid rgb(255, 204, 0); padding:5px; background: rgb(243, 243, 236) none repeat scroll 0%;">
                                                            The Salesforce.com Technology will be performing maintenance at this time. During this time all instances will be unavailable for the duration of the maintenance.
                                                        </td>

                                                    </tr>
                                                    
                                                </table>
                                                
                                            </center>
                                        </td>
                                    </tr>
                                </tbody>
                            </table>
                        </td>
                    </tr>

                </table>
            </td>
        </tr>
    </table>
</div><div class="evernoteSiteMemory"><a href="javascript:" onclick="Evernote.doClip({title: 'Extended NA1 Maintenance Next Weekend (3/20) on X-Squared On Demand',url: 'http://www.x2od.com/2010/03/13/extended-na1-maintenance',contentID: 'contentleft',suggestNotebook: 'Salesforce',suggestTags: 'New Developments,Salesforce.com',providerName: 'X-Squared On Demand',styling: 'full' });return false" class="evernoteSiteMemoryLink"><img src="http://static.evernote.com/article-clipper.png" class="evernoteSiteMemoryButton" />
				</a>				<div class="evernoteSiteMemoryClear">&nbsp;</div>
</div>
<p><a href="http://feedads.g.doubleclick.net/~a/VnS0-g5kcidIqlHW4E_A5WlNXSI/0/da"><img src="http://feedads.g.doubleclick.net/~a/VnS0-g5kcidIqlHW4E_A5WlNXSI/0/di" border="0" ismap="true"></img></a><br/>
<a href="http://feedads.g.doubleclick.net/~a/VnS0-g5kcidIqlHW4E_A5WlNXSI/1/da"><img src="http://feedads.g.doubleclick.net/~a/VnS0-g5kcidIqlHW4E_A5WlNXSI/1/di" border="0" ismap="true"></img></a></p><div class="feedflare">
<a href="http://feeds.feedburner.com/~ff/x2od_wp?a=rkYhv5FWCzE:Q7RAs94we-c:D7DqB2pKExk"><img src="http://feeds.feedburner.com/~ff/x2od_wp?i=rkYhv5FWCzE:Q7RAs94we-c:D7DqB2pKExk" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/x2od_wp?a=rkYhv5FWCzE:Q7RAs94we-c: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=rkYhv5FWCzE:Q7RAs94we-c: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=rkYhv5FWCzE:Q7RAs94we-c: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/rkYhv5FWCzE" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://www.x2od.com/2010/03/13/extended-na1-maintenance/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		<feedburner:origLink>http://www.x2od.com/2010/03/13/extended-na1-maintenance</feedburner:origLink></item>
		<item>
		<title>New Opportunity Page Layout – With Highlights Panel!</title>
		<link>http://feedproxy.google.com/~r/x2od_wp/~3/WthED42iPXg/new-opportunity-page-layout-with-highlights-panel</link>
		<comments>http://www.x2od.com/2010/02/18/new-opportunity-page-layout-with-highlights-panel#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[salesforce.com]]></category>
		<category><![CDATA[Spring 10]]></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 &#8217;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. Then be patient. It takes a minute or two for the update to propagate. Clearly, [...]]]></description>
			<content:encoded><![CDATA[<p>
      Yesterday, I enabled the new Opportunity page layout in my Developer Spring &#8217;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>
<p><div id="attachment_975" class="wp-caption aligncenter" style="width: 310px"><a href="http://www.x2od.com/wp/wp-content/uploads/2010/02/Highlights-Panel-0.png"><img src="http://www.x2od.com/wp/wp-content/uploads/2010/02/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><br />
<div id="attachment_970" class="wp-caption aligncenter" style="width: 310px"><a href="http://www.x2od.com/wp/wp-content/uploads/2010/02/Highlights-Panel-1.png"><img src="http://www.x2od.com/wp/wp-content/uploads/2010/02/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><br />
<div id="attachment_976" class="wp-caption aligncenter" style="width: 310px"><a href="http://www.x2od.com/wp/wp-content/uploads/2010/02/Highlights-Panel-1.5.png"><img src="http://www.x2od.com/wp/wp-content/uploads/2010/02/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><br />
<div id="attachment_965" class="wp-caption aligncenter" style="width: 310px"><a href="http://www.x2od.com/wp/wp-content/uploads/2010/02/Highlights-Panel-2.png"><img src="http://www.x2od.com/wp/wp-content/uploads/2010/02/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">Choosing Fields to Display</p></div></p>
<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/wp-content/uploads/2010/02/Highlights-Panel-3.png"><img src="http://www.x2od.com/wp/wp-content/uploads/2010/02/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&#039;re (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/wp-content/uploads/2010/02/Highlights-Panel-8.png"><img src="http://www.x2od.com/wp/wp-content/uploads/2010/02/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/wp-content/uploads/2010/02/Highlights-Panel-4.png"><img src="http://www.x2od.com/wp/wp-content/uploads/2010/02/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/wp-content/uploads/2010/02/Highlights-Panel-5.png"><img src="http://www.x2od.com/wp/wp-content/uploads/2010/02/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>
<div id="attachment_969" class="wp-caption aligncenter" style="width: 310px"><a href="http://www.x2od.com/wp/wp-content/uploads/2010/02/Highlights-Panel-6.png"><img src="http://www.x2od.com/wp/wp-content/uploads/2010/02/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/wp-content/uploads/2010/02/Highlights-Panel-7.png"><img src="http://www.x2od.com/wp/wp-content/uploads/2010/02/Highlights-Panel-7-300x300.png" alt="When this is enabled, you cannot turn off two settings" title="Highlights Panel 7" width="300" height="300" 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>
<div class="evernoteSiteMemory"><a href="javascript:" onclick="Evernote.doClip({title: 'New Opportunity Page Layout &amp;#8211; With Highlights Panel! on X-Squared On Demand',url: 'http://www.x2od.com/2010/02/18/new-opportunity-page-layout-with-highlights-panel',contentID: 'contentleft',suggestNotebook: 'Salesforce',suggestTags: 'Configuration,Force.com Builder,New Features',providerName: 'X-Squared On Demand',styling: 'full' });return false" class="evernoteSiteMemoryLink"><img src="http://static.evernote.com/article-clipper.png" class="evernoteSiteMemoryButton" />
				</a>				<div class="evernoteSiteMemoryClear">&nbsp;</div>
</div>
<p><a href="http://feedads.g.doubleclick.net/~a/Q_TZAgMuvrXQdcTGMFpUXd3882E/0/da"><img src="http://feedads.g.doubleclick.net/~a/Q_TZAgMuvrXQdcTGMFpUXd3882E/0/di" border="0" ismap="true"></img></a><br/>
<a href="http://feedads.g.doubleclick.net/~a/Q_TZAgMuvrXQdcTGMFpUXd3882E/1/da"><img src="http://feedads.g.doubleclick.net/~a/Q_TZAgMuvrXQdcTGMFpUXd3882E/1/di" border="0" ismap="true"></img></a></p><div class="feedflare">
<a href="http://feeds.feedburner.com/~ff/x2od_wp?a=WthED42iPXg:FsCSOAZTpPM:D7DqB2pKExk"><img src="http://feeds.feedburner.com/~ff/x2od_wp?i=WthED42iPXg:FsCSOAZTpPM:D7DqB2pKExk" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/x2od_wp?a=WthED42iPXg: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=WthED42iPXg: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=WthED42iPXg: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/WthED42iPXg" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://www.x2od.com/2010/02/18/new-opportunity-page-layout-with-highlights-panel/feed</wfw:commentRss>
		<slash:comments>6</slash:comments>
		<feedburner:origLink>http://www.x2od.com/2010/02/18/new-opportunity-page-layout-with-highlights-panel</feedburner:origLink></item>
		<item>
		<title>Get Documents and Attachments out of Salesforce</title>
		<link>http://feedproxy.google.com/~r/x2od_wp/~3/2fZjBJYquyU/docs-and-attachs-out-of-salesforce</link>
		<comments>http://www.x2od.com/2010/02/08/docs-and-attachs-out-of-salesforce#comments</comments>
		<pubDate>Mon, 08 Feb 2010 19:16:03 +0000</pubDate>
		<dc:creator>David Schach</dc:creator>
				<category><![CDATA[Configuration]]></category>
		<category><![CDATA[salesforce.com]]></category>
		<category><![CDATA[Spring 10]]></category>
		<category><![CDATA[Tips and Tricks]]></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 [...]]]></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; title: ; notranslate">
# 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 : $namen&quot;;
  
  $result = rename($id, $name);
  #print &quot;$resultn&quot;;
}

close (F);
</pre>
The instructions: 
<pre class="brush: plain; title: ; notranslate">
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><div class="evernoteSiteMemory"><a href="javascript:" onclick="Evernote.doClip({title: 'Get Documents and Attachments out of Salesforce on X-Squared On Demand',url: 'http://www.x2od.com/2010/02/08/docs-and-attachs-out-of-salesforce',contentID: 'contentleft',suggestNotebook: 'Salesforce',suggestTags: 'Configuration,DreamFactory,Force.com Builder,New Features,Salesforce.com',providerName: 'X-Squared On Demand',styling: 'full' });return false" class="evernoteSiteMemoryLink"><img src="http://static.evernote.com/article-clipper.png" class="evernoteSiteMemoryButton" />
				</a>				<div class="evernoteSiteMemoryClear">&nbsp;</div>
</div>
<p><a href="http://feedads.g.doubleclick.net/~a/gfmALKU9OONbtttzJdOaVj8FMpg/0/da"><img src="http://feedads.g.doubleclick.net/~a/gfmALKU9OONbtttzJdOaVj8FMpg/0/di" border="0" ismap="true"></img></a><br/>
<a href="http://feedads.g.doubleclick.net/~a/gfmALKU9OONbtttzJdOaVj8FMpg/1/da"><img src="http://feedads.g.doubleclick.net/~a/gfmALKU9OONbtttzJdOaVj8FMpg/1/di" border="0" ismap="true"></img></a></p><div class="feedflare">
<a href="http://feeds.feedburner.com/~ff/x2od_wp?a=2fZjBJYquyU:uGgzIFcIraQ:D7DqB2pKExk"><img src="http://feeds.feedburner.com/~ff/x2od_wp?i=2fZjBJYquyU:uGgzIFcIraQ:D7DqB2pKExk" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/x2od_wp?a=2fZjBJYquyU: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=2fZjBJYquyU: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=2fZjBJYquyU: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/2fZjBJYquyU" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://www.x2od.com/2010/02/08/docs-and-attachs-out-of-salesforce/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		<feedburner:origLink>http://www.x2od.com/2010/02/08/docs-and-attachs-out-of-salesforce</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/nwv32BsRAEE/computer-associates-planned-dev-tool</link>
		<comments>http://www.x2od.com/2009/11/19/computer-associates-planned-dev-tool#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>
<div class="evernoteSiteMemory"><a href="javascript:" onclick="Evernote.doClip({title: 'Computer Associates Plans To Release Agile Development Tool On Force.com Platform on X-Squared On Demand',url: 'http://www.x2od.com/2009/11/19/computer-associates-planned-dev-tool',contentID: 'contentleft',suggestNotebook: 'Salesforce',suggestTags: 'Force.com Platform,New Features',providerName: 'X-Squared On Demand',styling: 'full' });return false" class="evernoteSiteMemoryLink"><img src="http://static.evernote.com/article-clipper.png" class="evernoteSiteMemoryButton" />
				</a>				<div class="evernoteSiteMemoryClear">&nbsp;</div>
</div>
<p><a href="http://feedads.g.doubleclick.net/~a/sUBad5VJ5QpFZHnmGHUcO2QKfQA/0/da"><img src="http://feedads.g.doubleclick.net/~a/sUBad5VJ5QpFZHnmGHUcO2QKfQA/0/di" border="0" ismap="true"></img></a><br/>
<a href="http://feedads.g.doubleclick.net/~a/sUBad5VJ5QpFZHnmGHUcO2QKfQA/1/da"><img src="http://feedads.g.doubleclick.net/~a/sUBad5VJ5QpFZHnmGHUcO2QKfQA/1/di" border="0" ismap="true"></img></a></p><div class="feedflare">
<a href="http://feeds.feedburner.com/~ff/x2od_wp?a=nwv32BsRAEE:L_FY4rCyYLE:D7DqB2pKExk"><img src="http://feeds.feedburner.com/~ff/x2od_wp?i=nwv32BsRAEE:L_FY4rCyYLE:D7DqB2pKExk" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/x2od_wp?a=nwv32BsRAEE: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=nwv32BsRAEE: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=nwv32BsRAEE: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/nwv32BsRAEE" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://www.x2od.com/2009/11/19/computer-associates-planned-dev-tool/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		<feedburner:origLink>http://www.x2od.com/2009/11/19/computer-associates-planned-dev-tool</feedburner:origLink></item>
	</channel>
</rss><!-- Dynamic page generated in 1.284 seconds. --><!-- Cached page generated by WP-Super-Cache on 2012-02-04 04:55:30 -->

