<?xml version="1.0" encoding="UTF-8"?>
<?xml-stylesheet type="text/xsl" media="screen" href="/~d/styles/atom10full.xsl"?><?xml-stylesheet type="text/css" media="screen" href="http://feeds.feedburner.com/~d/styles/itemcontent.css"?><feed xmlns="http://www.w3.org/2005/Atom" xmlns:idx="urn:atom-extension:indexing" xmlns:gr="http://www.google.com/schemas/reader/atom/" xmlns:media="http://search.yahoo.com/mrss/" xmlns:feedburner="http://rssnamespace.org/feedburner/ext/1.0" idx:index="no"><!--
Content-type: Preventing XSRF in IE.

--><generator uri="http://www.google.com/reader">Google Reader</generator><id>tag:google.com,2005:reader/user/08504759903397147205/state/com.google/broadcast</id><title>David's shared items in Google Reader</title><gr:continuation>CNWxmpztipsC</gr:continuation><author><name>David</name></author><updated>2009-07-16T04:23:08Z</updated><xhtml:meta xmlns:xhtml="http://www.w3.org/1999/xhtml" name="robots" content="noindex" /><logo>http://www.x2od.com/favicon.ico</logo><link rel="self" href="http://feeds.feedburner.com/x2od_greadershared" type="application/atom+xml" /><entry gr:crawl-timestamp-msec="1245114555071"><id gr:original-id="http://developinthecloud.wordpress.com/?p=20">tag:google.com,2005:reader/item/4c6c5f338ca98ef6</id><category term="Apex" /><category term="SalesForce" /><category term="Dynamic Apex" /><category term="force.com" /><category term="SObject" /><title type="html">Instantiating an empty list of SObjects</title><published>2009-06-08T12:13:54Z</published><updated>2009-06-08T12:13:54Z</updated><link rel="alternate" href="http://feedproxy.google.com/~r/x2od_greadershared/~3/5FB7pPYus1M/" type="text/html" /><media:group><media:content url="" /></media:group><author><name>Wes</name></author><source gr:stream-id="feed/http://developinthecloud.wordpress.com/feed/"><id>tag:google.com,2005:reader/feed/http://developinthecloud.wordpress.com/feed/</id><title type="html">Cloud Computing</title><link rel="alternate" href="http://developinthecloud.wordpress.com" type="text/html" /></source><content type="html">You’re building a dynamic Apex class so general you’re thinking about promoting it to colonel. You’ve slogged through the Salesforce documentation on the topic, a feat in itself, but are having issues instantiating an empty list of SObjects to be processed in some way.
If you attempt to do this in the seemingly Salesforce manner i.e.
List&amp;lt;SObject&amp;gt; [...]&lt;img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=developinthecloud.wordpress.com&amp;amp;blog=8062455&amp;amp;post=20&amp;amp;subd=developinthecloud&amp;amp;ref=&amp;amp;feed=1"&gt;
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/KkrphmG8EWls4ZLxzDXrJk1FwkQ/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/KkrphmG8EWls4ZLxzDXrJk1FwkQ/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/KkrphmG8EWls4ZLxzDXrJk1FwkQ/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/KkrphmG8EWls4ZLxzDXrJk1FwkQ/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/x2od_greadershared?a=5FB7pPYus1M:7SYqiFXO9Kg:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/x2od_greadershared?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/x2od_greadershared?a=5FB7pPYus1M:7SYqiFXO9Kg:dnMXMwOfBR0"&gt;&lt;img src="http://feeds.feedburner.com/~ff/x2od_greadershared?d=dnMXMwOfBR0" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/x2od_greadershared?a=5FB7pPYus1M:7SYqiFXO9Kg:V_sGLiPBpWU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/x2od_greadershared?i=5FB7pPYus1M:7SYqiFXO9Kg:V_sGLiPBpWU" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/x2od_greadershared/~4/5FB7pPYus1M" height="1" width="1"/&gt;</content><feedburner:origLink>http://developinthecloud.wordpress.com/2009/06/08/instantiating-an-empty-list-of-sobjects/</feedburner:origLink></entry><entry gr:crawl-timestamp-msec="1245114549883"><id gr:original-id="http://developinthecloud.wordpress.com/?p=81">tag:google.com,2005:reader/item/8f3fca7592729c08</id><category term="Apex" /><category term="SalesForce" /><category term="VisualForce" /><category term="force.com" /><category term="translation workbench" /><category term="dynamic" /><category term="outputText" /><category term="custom labels" /><title type="html">Dynamic Custom Labels</title><published>2009-06-10T17:11:10Z</published><updated>2009-06-10T17:11:10Z</updated><link rel="alternate" href="http://feedproxy.google.com/~r/x2od_greadershared/~3/LtK5mtd5X8E/" type="text/html" /><media:group><media:content url="" /></media:group><author><name>Wes</name></author><source gr:stream-id="feed/http://developinthecloud.wordpress.com/feed/"><id>tag:google.com,2005:reader/feed/http://developinthecloud.wordpress.com/feed/</id><title type="html">Cloud Computing</title><link rel="alternate" href="http://developinthecloud.wordpress.com" type="text/html" /></source><content type="html">I know what you’re thinking, ‘this is cRAzY talk’. But do not doubt my friend, Salesforce has a very powerful translation framework.
Besides being able to change the language used by the Salesforce standard areas with the flick of a picklist, you can include translatable Custom Labels in most of your custom application. To do this [...]&lt;img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=developinthecloud.wordpress.com&amp;amp;blog=8062455&amp;amp;post=81&amp;amp;subd=developinthecloud&amp;amp;ref=&amp;amp;feed=1"&gt;
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/jwMEjiHXeWqsbD08_H9imcsfHKM/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/jwMEjiHXeWqsbD08_H9imcsfHKM/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/jwMEjiHXeWqsbD08_H9imcsfHKM/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/jwMEjiHXeWqsbD08_H9imcsfHKM/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/x2od_greadershared?a=LtK5mtd5X8E:QqVn0qeVbHI:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/x2od_greadershared?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/x2od_greadershared?a=LtK5mtd5X8E:QqVn0qeVbHI:dnMXMwOfBR0"&gt;&lt;img src="http://feeds.feedburner.com/~ff/x2od_greadershared?d=dnMXMwOfBR0" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/x2od_greadershared?a=LtK5mtd5X8E:QqVn0qeVbHI:V_sGLiPBpWU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/x2od_greadershared?i=LtK5mtd5X8E:QqVn0qeVbHI:V_sGLiPBpWU" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/x2od_greadershared/~4/LtK5mtd5X8E" height="1" width="1"/&gt;</content><feedburner:origLink>http://developinthecloud.wordpress.com/2009/06/10/dynamic-custom-labels/</feedburner:origLink></entry><entry gr:crawl-timestamp-msec="1245114539332"><id gr:original-id="http://developinthecloud.wordpress.com/?p=103">tag:google.com,2005:reader/item/626dcde16c81ffaa</id><category term="Apex" /><category term="SalesForce" /><category term="database" /><category term="force.com" /><category term="rollback" /><category term="savepoint" /><category term="soql" /><title type="html">Salesforce Savepoints</title><published>2009-06-15T07:28:17Z</published><updated>2009-06-15T07:28:17Z</updated><link rel="alternate" href="http://feedproxy.google.com/~r/x2od_greadershared/~3/P0tlWyn2RJE/" type="text/html" /><media:group><media:content url="" /></media:group><author><name>Wes</name></author><source gr:stream-id="feed/http://developinthecloud.wordpress.com/feed/"><id>tag:google.com,2005:reader/feed/http://developinthecloud.wordpress.com/feed/</id><title type="html">Cloud Computing</title><link rel="alternate" href="http://developinthecloud.wordpress.com" type="text/html" /></source><content type="html">Transaction control is an important part of any system that interacts with a database and Salesforce has neat ways of implementing said control.
Anyone that’s worked with SQL databases will be familiar with savepoints and rolling back, and Salesforce has implemented similar constructs. For those who haven’t heard of these terms wikipedia describes them as
A savepoint is [...]&lt;img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=developinthecloud.wordpress.com&amp;amp;blog=8062455&amp;amp;post=103&amp;amp;subd=developinthecloud&amp;amp;ref=&amp;amp;feed=1"&gt;
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/p2plrhy5lWMif-WVX7YjLi60bPI/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/p2plrhy5lWMif-WVX7YjLi60bPI/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/p2plrhy5lWMif-WVX7YjLi60bPI/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/p2plrhy5lWMif-WVX7YjLi60bPI/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/x2od_greadershared?a=P0tlWyn2RJE:AjYNKRP_ync:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/x2od_greadershared?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/x2od_greadershared?a=P0tlWyn2RJE:AjYNKRP_ync:dnMXMwOfBR0"&gt;&lt;img src="http://feeds.feedburner.com/~ff/x2od_greadershared?d=dnMXMwOfBR0" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/x2od_greadershared?a=P0tlWyn2RJE:AjYNKRP_ync:V_sGLiPBpWU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/x2od_greadershared?i=P0tlWyn2RJE:AjYNKRP_ync:V_sGLiPBpWU" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/x2od_greadershared/~4/P0tlWyn2RJE" height="1" width="1"/&gt;</content><feedburner:origLink>http://developinthecloud.wordpress.com/2009/06/15/salesforce-savepoints/</feedburner:origLink></entry><entry gr:crawl-timestamp-msec="1245118159700"><id gr:original-id="tag:blog.jingproject.com,2009://6.2820">tag:google.com,2005:reader/item/f17526a4d16e40a9</id><category term="How Do I..." /><category term="Tech Stuff" /><category term="Wicked Cool Uses" /><category term="youtubehd" /><title type="html">Jing Pro &amp;amp; HD Video on YouTube: Definitive How-To</title><published>2009-06-15T20:52:14Z</published><updated>2009-06-15T20:52:14Z</updated><link rel="alternate" href="http://feedproxy.google.com/~r/x2od_greadershared/~3/f57JE4rmWrM/jing-pro-hd-video-on-youtube-d.html" type="text/html" /><link rel="enclosure" href="http://feedproxy.google.com/~r/JingBlog/~5/iRi4B6yphBs/jing-to-youtube.pdf" type="application/pdf" length="100043" /><media:group><media:content url="http://feedproxy.google.com/~r/JingBlog/~5/iRi4B6yphBs/jing-to-youtube.pdf" /></media:group><content xml:base="http://blog.jingproject.com/" type="html">&lt;p&gt;Want to put some sweet-looking screencasts up on YouTube? It's easier than ever, and Brooks shows you how. (See outline of steps below video.) In Brooks' &lt;a href="http://blog.jingproject.com/2009/05/power-users-memory-management.html"&gt;last post&lt;/a&gt; I gave him a hard time about that face close-up. I mean, people are trying to learn stuff here! The good news is that Brooks took efforts to make his intros a little more bearable. Did it work? You be the judge.&lt;/p&gt;

&lt;p&gt;I also &lt;a href="http://blog.jingproject.com/2009/06/15/jing-to-youtube.pdf"&gt;made a convenient PDF&lt;/a&gt; (less than 2 pages) with all the steps too. &lt;/p&gt;


   
   
   
   


&lt;p&gt;Overview:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;You need Jing Pro, and a YouTube account.&lt;/li&gt;
&lt;li&gt;Create a YouTube button in Jing.&lt;/li&gt;
&lt;li&gt;Record a video in 16:9 aspect ratio (Hold &lt;strong&gt;Shift&lt;/strong&gt; while selecting area) at 1280 x 720 dimensions.&lt;/li&gt;
&lt;li&gt;Upload to YouTube, and wait while your video is processed!&lt;/li&gt;
&lt;/ol&gt;

        
    &lt;img src="http://feeds.feedburner.com/~r/JingBlog/~4/xKUsVfMij_w" height="1" width="1"&gt;
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/KsFnU54D7FBcmQxKfii2PtT0sP0/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/KsFnU54D7FBcmQxKfii2PtT0sP0/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/KsFnU54D7FBcmQxKfii2PtT0sP0/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/KsFnU54D7FBcmQxKfii2PtT0sP0/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/x2od_greadershared?a=f57JE4rmWrM:V4ZpCxMRHy0:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/x2od_greadershared?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/x2od_greadershared?a=f57JE4rmWrM:V4ZpCxMRHy0:dnMXMwOfBR0"&gt;&lt;img src="http://feeds.feedburner.com/~ff/x2od_greadershared?d=dnMXMwOfBR0" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/x2od_greadershared?a=f57JE4rmWrM:V4ZpCxMRHy0:V_sGLiPBpWU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/x2od_greadershared?i=f57JE4rmWrM:V4ZpCxMRHy0:V_sGLiPBpWU" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/x2od_greadershared/~4/f57JE4rmWrM" height="1" width="1"/&gt;</content><author><name>Mike Curtis</name></author><source gr:stream-id="feed/http://feeds.feedburner.com/JingBlog/"><id>tag:google.com,2005:reader/feed/http://feeds.feedburner.com/JingBlog/</id><title type="html">Jing Blog</title><link rel="alternate" href="http://blog.jingproject.com/" type="text/html" /></source><feedburner:origLink>http://feedproxy.google.com/~r/JingBlog/~3/xKUsVfMij_w/jing-pro-hd-video-on-youtube-d.html</feedburner:origLink></entry><entry gr:crawl-timestamp-msec="1246452952890"><id gr:original-id="tag:google.com,2005:reader/item/5dd6f31e5a548a1f">tag:google.com,2005:reader/item/3a3bffe8a4414b03</id><category term="Best Practices" /><title type="html">New in Summer &amp;#39;09: Email Alerts For Case Comment Workflow</title><published>2009-06-18T17:05:14Z</published><updated>2009-06-18T17:05:14Z</updated><link rel="alternate" href="http://feedproxy.google.com/~r/x2od_greadershared/~3/fl9Ou236I1s/new-in-summer-09-workflow-email-alerts-for-case-comments.html" type="text/html" /><content xml:base="http://blogs.salesforce.com/support/" xml:lang="en-US" type="html">&lt;div&gt;&lt;p&gt;Back in Winter &amp;#39;08 we turned on Workflow from Case Comments.  That workflow allowed you to perform a field update on the parent Case.  Because it is a &amp;quot;chaining&amp;quot; workflow, that means that you could send email alerts or outbound messages by creating another workflow on the parent case which would receive the changes from the Case Comment workflow and react to them.  It was a little bit convoluted, but it worked.&lt;/p&gt;&lt;p&gt;Although having a field update capability from Case Comments was useful, many of the use cases for Workflow From Case Comments involved sending emails.  As of Summer &amp;#39;09, you can send emails directly from a Workflow From Case Comments.  Here&amp;#39;s an example of how.&lt;/p&gt;&lt;p&gt;Let&amp;#39;s say that I want to create a workflow which, whenever a new comment is submitted to a case, notifies the case team of that new comment.&lt;/p&gt;&lt;p&gt;My first step is to create the workflow rule:&lt;/p&gt;&lt;p&gt;&lt;a href="http://blogs.salesforce.com/.a/6a00e54ee3905b88330115702c45ba970c-popup" style="display:inline"&gt;&lt;img alt="Step1" border="0" src="http://blogs.salesforce.com/.a/6a00e54ee3905b88330115702c45ba970c-800wi" title="Step1"&gt;&lt;/a&gt; &lt;/p&gt;&lt;p&gt;I want any case comment to trigger this workflow, so I&amp;#39;m going to set my criteria to fire whenever a comment is created, and whenever that comment has anything in the body:&lt;/p&gt;&lt;p&gt;&lt;a href="http://blogs.salesforce.com/.a/6a00e54ee3905b88330115702c46ab970c-popup" style="display:inline"&gt;&lt;/a&gt;&lt;a href="http://blogs.salesforce.com/.a/6a00e54ee3905b8833011571217579970b-popup" style="display:inline"&gt;&lt;img alt="Step2" src="http://blogs.salesforce.com/.a/6a00e54ee3905b8833011571217579970b-500wi"&gt;&lt;/a&gt;  &lt;/p&gt;&lt;p&gt;In the next step, I can now create an email alert:&lt;/p&gt;&lt;p&gt;&lt;a href="http://blogs.salesforce.com/.a/6a00e54ee3905b883301157121771d970b-popup" style="display:inline"&gt;&lt;img alt="Step3" src="http://blogs.salesforce.com/.a/6a00e54ee3905b883301157121771d970b-500wi"&gt;&lt;/a&gt; &lt;/p&gt;&lt;p&gt;Before finishing up this email alert, though, I&amp;#39;ll want to make an email template that contains the body of the comment.  The {!Case.Last_Case_Comment} merge field is really handy for this:&lt;/p&gt;&lt;p&gt;&lt;span style="text-decoration:underline"&gt;&lt;a href="http://blogs.salesforce.com/.a/6a00e54ee3905b88330115702c4b04970c-popup" style="display:inline"&gt;&lt;img alt="Template" src="http://blogs.salesforce.com/.a/6a00e54ee3905b88330115702c4b04970c-500wi"&gt;&lt;/a&gt; &lt;/span&gt; &lt;/p&gt;&lt;p&gt;Finally, I can make my email alert.  I want to set it to notify members of the Case Team where their role is Support Staff:&lt;/p&gt;&lt;p&gt;&lt;span style="text-decoration:underline"&gt;&lt;a href="http://blogs.salesforce.com/.a/6a00e54ee3905b88330115712179de970b-popup" style="display:inline"&gt;&lt;img alt="Email alert" src="http://blogs.salesforce.com/.a/6a00e54ee3905b88330115712179de970b-500wi"&gt;&lt;/a&gt; &lt;/span&gt; &lt;/p&gt;&lt;p&gt;And that&amp;#39;s all there is to it!  Once I go back to the the workflow rule and click Activate, this workflow rule will fire whenever a case comment is added, notifying the Support Staff members of the case team with an email containing the comment body.&lt;/p&gt;&lt;/div&gt;
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/KCZvaU5q6Gxxl5rtDZd8hP5fKqo/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/KCZvaU5q6Gxxl5rtDZd8hP5fKqo/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/KCZvaU5q6Gxxl5rtDZd8hP5fKqo/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/KCZvaU5q6Gxxl5rtDZd8hP5fKqo/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/x2od_greadershared?a=fl9Ou236I1s:h4Tuq4D1ZJo:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/x2od_greadershared?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/x2od_greadershared?a=fl9Ou236I1s:h4Tuq4D1ZJo:dnMXMwOfBR0"&gt;&lt;img src="http://feeds.feedburner.com/~ff/x2od_greadershared?d=dnMXMwOfBR0" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/x2od_greadershared?a=fl9Ou236I1s:h4Tuq4D1ZJo:V_sGLiPBpWU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/x2od_greadershared?i=fl9Ou236I1s:h4Tuq4D1ZJo:V_sGLiPBpWU" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/x2od_greadershared/~4/fl9Ou236I1s" height="1" width="1"/&gt;</content><author><name>Marco Casalaina</name></author><source gr:stream-id="feed/http://feeds.feedburner.com/Successforce/Recent"><id>tag:google.com,2005:reader/feed/http://feeds.feedburner.com/Successforce/Recent</id><title type="html">All Salesforce Blogs</title><link rel="alternate" href="http://feeds.feedburner.com/Successforce/Recent" type="text/html" /></source><feedburner:origLink>http://feedproxy.google.com/~r/Successforce/Recent/~3/98487smQskE/new-in-summer-09-workflow-email-alerts-for-case-comments.html</feedburner:origLink></entry><entry gr:crawl-timestamp-msec="1245714296171"><id gr:original-id="http://blog.jeffdouglas.com/?p=917">tag:google.com,2005:reader/item/085f3035cc8e936f</id><category term="Salesforce.com" /><title type="html">Real World Release Management with Salesforce.com</title><published>2009-06-19T22:14:37Z</published><updated>2009-06-19T22:14:37Z</updated><link rel="alternate" href="http://feedproxy.google.com/~r/x2od_greadershared/~3/JMqSbKxkFd0/" type="text/html" /><media:group><media:content url="http://0.gravatar.com/avatar/08d36c8ba06395c61fbddb2da3cd9326?s=96&amp;d=identicon&amp;r=G" /></media:group><media:group><media:content url="http://jeffdonthemic.files.wordpress.com/2009/06/dev-method1.png?w=300" /></media:group><media:group><media:content url="http://jeffdonthemic.files.wordpress.com/2009/06/dev-method2.png?w=188" /></media:group><content xml:base="http://blog.jeffdouglas.com/" type="html">&lt;div&gt;&lt;br&gt;&lt;p&gt;We’ve been working with Salesforce.com on and off for about a year on their release and change management best practices. We’ve had a number of calls with them discussing the Metadata API’s functionality (or lack of functionality) and best practices for release management for large, complex orgs. It looks like they’ve taken of our suggestions and experiences to heart as they recently &lt;a href="http://blog.sforce.com/sforce/2009/06/new-book-the-forcecom-development-lifecycle-guide.html"&gt;released their Development Lifecycle Guide&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;First let me state that we have a complex org and development environment. We have a global Saleforce.com project team with multiple projects running concurrently in all continents. We have 15 development sandboxes, 5 test sandboxes, 1 full-copy UAT sandbox and 1 Production box. Our production org consists of 40+ distinct and separately functioning companies with over 500 recordtypes to manage access to data.&lt;/p&gt;
&lt;p&gt;The guide is fairly thorough and has a lot of best practices and practical info for orgs of all sizes. My one main criticism of the guide is that in a couple of areas they paint a rosy picture of the migration process and the amount of effort required to migrate configuration items and assets. If you’ve ever done a moderately complex migration you know that not everything is possible via the Metadata API. This leaves you with some manual processes that are grueling, time-consuming and tedious. For instance, Salesforce.com just completed a moderately sized project for us and they scheduled 40 hours to migrate the manual changes to Production.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Scheduling Releases&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;For change and release management we’ve broken our development work into four types with different release timeframes:&lt;/p&gt;
&lt;p&gt;1. Project – these are typically large amounts of work for a specific business (or business stream) requiring multiple resources for development, data migration, testing and training. Projects are released on a monthly based once completed.&lt;/p&gt;
&lt;p&gt;2. Major Change – these are changes which may include the creation of new objects, tabs, validation rules, workflows, recordtypes or page layouts. They may also require end-user training, integration with other system and data migration. They changes are also released monthly.&lt;/p&gt;
&lt;p&gt;3. Minor Change – these changes are released weekly and may include changes to existing page layouts, picklist values, sharing rules or formulas.&lt;/p&gt;
&lt;p&gt;4. Incident – these are released immediately into Production as needed. These are typically bug fixes or changes not relating to metadata.&lt;/p&gt;
&lt;p&gt;Release management also requires communication and documentation of changes. The best way to accomplish this is to have a dedicated release manager who is responsible for tracking and documenting all proposed and actual changes to Production. This becomes extremely time consuming, but valuable, when tracking down the cause of errors or migrating an entire project. Ideally, this person is also the one that does the migration but that may not be feasible due to the technical nature of Metadata and Apex migrations.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Application Development Strategy&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;The guide does a good job illustrating the different development scenarios and resources that are available. Our “ideal” methodology is the one illustrated in the “developing enterprise application” section. Coming from the Java and .NET world, this route is the most familiar to our developers.&lt;/p&gt;
&lt;p&gt;&lt;a href="http://jeffdonthemic.files.wordpress.com/2009/06/dev-method1.png"&gt;&lt;img title="development methodology 1" src="http://jeffdonthemic.files.wordpress.com/2009/06/dev-method1.png?w=300&amp;amp;h=182" alt="development methodology 1" width="300" height="182"&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;However, after much debating and testing, we came to the conclusion that this approach is simply not workable with our available resources for large projects. In a perfect world (i.e. where you can push all code and config cleanly from box to box) this approach is great but there are too many manual, time-consuming processes in the real world. Our businesses (and finance) were demanding us to deliver projects and changes faster with less resources. The proposed process above increased our time to production and the number of resources needed. Until the Metadata API is capable of pushing everything to Production cleanly and reliably, we have come up with the following development and deployment methodology:&lt;/p&gt;
&lt;p&gt;&lt;a href="http://jeffdonthemic.files.wordpress.com/2009/06/dev-method2.png"&gt;&lt;img title="development methodology 2" src="http://jeffdonthemic.files.wordpress.com/2009/06/dev-method2.png?w=188&amp;amp;h=300" alt="development methodology 2" width="188" height="300"&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;Essentially, we try to do all of the config in Production and then refresh to a sandbox for code and process development. We’ve run into problems when doing migrations with RecordtypeIds and PricebookEntryId and trying to migrate them. We’ve found that for security, profile and integration purposes, you should create these in Production and refresh to your development sandbox. Therefore, if you do migrate profiles, page layouts, etc using the Metadata API you will have a much greater chance of success if these IDs are identical.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Learned Lessons&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;During long development cycles it is very likely that your sandbox(es) will become out of synch. You may have objects from other projects that are required for your sandbox that need to be created, security settings that need to be applied manually due to data integration issues or Salesforce.com upgrades that wipeout or implement new functionality. Another common scenario may be that you need to refresh your full-copy sandbox for UAT testing for a specific project but you have another project preventing this as it has not yet been tested and put into Production.&lt;/p&gt;
&lt;p&gt;The Metadata API is not quite ready for this type of development process. Don’t get me wrong, I love the Metadata API (it’s getting better each release) but there are still some basic things you cannot migrate such as standard picklist values and role hierarchies. Salesforce.com finally came out with a list of things the API can and cannot do. This was a huge step as we had been hounding them for this information for months.&lt;/p&gt;
&lt;p&gt;Migration dependencies are one of the frustrating and aggravating aspects of this process. There are many cases where your migration crashes due to a code, static resource or parent-child dependency. We’ve discovered the hard way that the order of migrations is sometimes the key to success. Unfortunately Salesforce.com does not provide clear examples.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Upcoming Migration Tools&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;We had a sneak-peak a few weeks ago at a new deployment tool coming this Winter from Salesforce.com which should make everyone much happier. The product manager was quick to point out that this new tool is dependent upon proposed functionality in the Metadata API so hopefully all will be released together.&lt;/p&gt;
  &lt;a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/jeffdonthemic.wordpress.com/917/"&gt;&lt;img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/jeffdonthemic.wordpress.com/917/"&gt;&lt;/a&gt; &lt;a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/jeffdonthemic.wordpress.com/917/"&gt;&lt;img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/jeffdonthemic.wordpress.com/917/"&gt;&lt;/a&gt; &lt;a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/jeffdonthemic.wordpress.com/917/"&gt;&lt;img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/jeffdonthemic.wordpress.com/917/"&gt;&lt;/a&gt; &lt;a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/jeffdonthemic.wordpress.com/917/"&gt;&lt;img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/jeffdonthemic.wordpress.com/917/"&gt;&lt;/a&gt; &lt;a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/jeffdonthemic.wordpress.com/917/"&gt;&lt;img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/jeffdonthemic.wordpress.com/917/"&gt;&lt;/a&gt; &lt;img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=blog.jeffdouglas.com&amp;amp;blog=5109090&amp;amp;post=917&amp;amp;subd=jeffdonthemic&amp;amp;ref=&amp;amp;feed=1"&gt;&lt;/div&gt;
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/MvFQOZtjcd6MuCgXigU9hWWGd8E/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/MvFQOZtjcd6MuCgXigU9hWWGd8E/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/MvFQOZtjcd6MuCgXigU9hWWGd8E/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/MvFQOZtjcd6MuCgXigU9hWWGd8E/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/x2od_greadershared?a=JMqSbKxkFd0:NaJnMa569zo:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/x2od_greadershared?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/x2od_greadershared?a=JMqSbKxkFd0:NaJnMa569zo:dnMXMwOfBR0"&gt;&lt;img src="http://feeds.feedburner.com/~ff/x2od_greadershared?d=dnMXMwOfBR0" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/x2od_greadershared?a=JMqSbKxkFd0:NaJnMa569zo:V_sGLiPBpWU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/x2od_greadershared?i=JMqSbKxkFd0:NaJnMa569zo:V_sGLiPBpWU" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/x2od_greadershared/~4/JMqSbKxkFd0" height="1" width="1"/&gt;</content><author><name>jeffdonthemic</name></author><source gr:stream-id="feed/http://blog.jeffdouglas.com/feed/"><id>tag:google.com,2005:reader/feed/http://blog.jeffdouglas.com/feed/</id><title type="html">Jeff Douglas - Technology, Coding and Bears... OH MY!</title><link rel="alternate" href="http://blog.jeffdouglas.com" type="text/html" /></source><feedburner:origLink>http://blog.jeffdouglas.com/2009/06/19/real-world-release-management-with-salesforce-com/</feedburner:origLink></entry><entry gr:crawl-timestamp-msec="1245714371891"><id gr:original-id="">tag:google.com,2005:reader/item/3ea96fe68b96872c</id><title type="html">Programming Techniques</title><published>2009-06-22T16:53:39Z</published><updated>2009-06-22T16:53:39Z</updated><link rel="alternate" href="http://feedproxy.google.com/~r/x2od_greadershared/~3/x43HNa3I2XQ/Programming_Techniques" type="text/html" /><author><name>Peter Churchill (BritishBoyinDC)</name></author><source gr:stream-id="feed/http://wiki.apexdevnet.com/index.php?title=Special:Recentchanges&amp;feed=rss"><id>tag:google.com,2005:reader/feed/http://wiki.apexdevnet.com/index.php?title=Special:Recentchanges&amp;feed=rss</id><title type="html">developer.force.com - Recent changes [en]</title><link rel="alternate" href="http://wiki.developerforce.com/index.php/Special:Recentchanges" type="text/html" /></source><content type="html">&lt;p&gt;&lt;span&gt;Using a Map as an In-Memory Join Table&lt;/span&gt;&lt;/p&gt;

			&lt;table border="0" width="98%" cellpadding="0" cellspacing="4" style="background-color:white"&gt;
			&lt;tr&gt;
				&lt;td colspan="2" width="50%" align="center" style="background-color:white"&gt;←Older revision&lt;/td&gt;
				&lt;td colspan="2" width="50%" align="center" style="background-color:white"&gt;Revision as of 16:53, 22 June 2009&lt;/td&gt;
			&lt;/tr&gt;
			&lt;tr&gt;&lt;td colspan="2" align="left"&gt;&lt;strong&gt;Line 113:&lt;/strong&gt;&lt;/td&gt;
&lt;td colspan="2" align="left"&gt;&lt;strong&gt;Line 113:&lt;/strong&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td&gt; &lt;/td&gt;&lt;td style="background:#eee;font-size:smaller"&gt;&amp;lt;code&amp;gt;Opportunity[] opps = new List&amp;lt; Opportunity&amp;gt;();&amp;lt;br /&amp;gt;&lt;/td&gt;&lt;td&gt; &lt;/td&gt;&lt;td style="background:#eee;font-size:smaller"&gt;&amp;lt;code&amp;gt;Opportunity[] opps = new List&amp;lt; Opportunity&amp;gt;();&amp;lt;br /&amp;gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td&gt; &lt;/td&gt;&lt;td style="background:#eee;font-size:smaller"&gt;for (Account eachAcct: accts) {&amp;lt;br /&amp;gt;&lt;/td&gt;&lt;td&gt; &lt;/td&gt;&lt;td style="background:#eee;font-size:smaller"&gt;for (Account eachAcct: accts) {&amp;lt;br /&amp;gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td&gt;-&lt;/td&gt;&lt;td style="background:#ffa;font-size:smaller"&gt;&amp;amp;nbsp;&amp;amp;nbsp;opps = &lt;span style="color:red;font-weight:bold"&gt;[select Id, Amount, CloseDate from Opps where Id = :&lt;/span&gt;eachAcct.Id&lt;span style="color:red;font-weight:bold"&gt;]&lt;/span&gt;;&amp;lt;br /&amp;gt;&lt;/td&gt;&lt;td&gt;+&lt;/td&gt;&lt;td style="background:#cfc;font-size:smaller"&gt;&amp;amp;nbsp;&amp;amp;nbsp;opps = &lt;span style="color:red;font-weight:bold"&gt;acctOpps.get(&lt;/span&gt;eachAcct.Id&lt;span style="color:red;font-weight:bold"&gt;)&lt;/span&gt;;&amp;lt;br /&amp;gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td&gt; &lt;/td&gt;&lt;td style="background:#eee;font-size:smaller"&gt;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;#47;&amp;amp;#47;...&amp;lt;br /&amp;gt;&lt;/td&gt;&lt;td&gt; &lt;/td&gt;&lt;td style="background:#eee;font-size:smaller"&gt;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;#47;&amp;amp;#47;...&amp;lt;br /&amp;gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td&gt; &lt;/td&gt;&lt;td style="background:#eee;font-size:smaller"&gt;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;#47;&amp;amp;#47;code here whatever data manipulation you are attempting.&amp;lt;br /&amp;gt;&lt;/td&gt;&lt;td&gt; &lt;/td&gt;&lt;td style="background:#eee;font-size:smaller"&gt;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;#47;&amp;amp;#47;code here whatever data manipulation you are attempting.&amp;lt;br /&amp;gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan="2" align="left"&gt;&lt;strong&gt;Line 125:&lt;/strong&gt;&lt;/td&gt;
&lt;td colspan="2" align="left"&gt;&lt;strong&gt;Line 125:&lt;/strong&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td&gt; &lt;/td&gt;&lt;td style="background:#eee;font-size:smaller"&gt;}&amp;lt;/code&amp;gt;&lt;/td&gt;&lt;td&gt; &lt;/td&gt;&lt;td style="background:#eee;font-size:smaller"&gt;}&amp;lt;/code&amp;gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td&gt; &lt;/td&gt;&lt;td style="background:#eee;font-size:smaller"&gt;&amp;lt;br/&amp;gt;&lt;/td&gt;&lt;td&gt; &lt;/td&gt;&lt;td style="background:#eee;font-size:smaller"&gt;&amp;lt;br/&amp;gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan="2"&gt; &lt;/td&gt;&lt;td&gt;+&lt;/td&gt;&lt;td style="background:#cfc;font-size:smaller"&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td&gt; &lt;/td&gt;&lt;td style="background:#eee;font-size:smaller"&gt;==Creating a “Reverse” Map==&lt;/td&gt;&lt;td&gt; &lt;/td&gt;&lt;td style="background:#eee;font-size:smaller"&gt;==Creating a “Reverse” Map==&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td&gt; &lt;/td&gt;&lt;td style="background:#eee;font-size:smaller"&gt;A map typically consists of an ID as the key and a string value as the value.  However, there may be times when you want to reverse the roles and look up an ID based on a string.&lt;/td&gt;&lt;td&gt; &lt;/td&gt;&lt;td style="background:#eee;font-size:smaller"&gt;A map typically consists of an ID as the key and a string value as the value.  However, there may be times when you want to reverse the roles and look up an ID based on a string.&lt;/td&gt;&lt;/tr&gt;

			&lt;/table&gt;
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/yhYsqDG2xrHyf7-zLMxhKP1hKj4/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/yhYsqDG2xrHyf7-zLMxhKP1hKj4/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/yhYsqDG2xrHyf7-zLMxhKP1hKj4/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/yhYsqDG2xrHyf7-zLMxhKP1hKj4/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/x2od_greadershared?a=x43HNa3I2XQ:OHFA4tTQqxM:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/x2od_greadershared?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/x2od_greadershared?a=x43HNa3I2XQ:OHFA4tTQqxM:dnMXMwOfBR0"&gt;&lt;img src="http://feeds.feedburner.com/~ff/x2od_greadershared?d=dnMXMwOfBR0" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/x2od_greadershared?a=x43HNa3I2XQ:OHFA4tTQqxM:V_sGLiPBpWU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/x2od_greadershared?i=x43HNa3I2XQ:OHFA4tTQqxM:V_sGLiPBpWU" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/x2od_greadershared/~4/x43HNa3I2XQ" height="1" width="1"/&gt;</content><feedburner:origLink>http://wiki.developerforce.com/index.php/Programming_Techniques</feedburner:origLink></entry><entry gr:crawl-timestamp-msec="1246411908704"><id gr:original-id="1A4C2C9D-A72D-4A0F-86C5-46561C69DB9F-9259-000029A0D0B90015-FFA">tag:google.com,2005:reader/item/b63b0cf58bf59219</id><title type="html">Using Formulas and Google Charts to Visualize Data</title><published>2009-06-24T16:51:54Z</published><updated>2009-06-24T16:51:54Z</updated><link rel="alternate" href="http://feedproxy.google.com/~r/x2od_greadershared/~3/w0KpL-e6z8o/Using_Formulas_and_Google_Charts_to_Visualize_Data" type="text/html" /><author gr:unknown-author="true"><name>(author unknown)</name></author><source gr:stream-id="feed/http://wiki.apexdevnet.com/feeds/ADN_Featured_Content.xml"><id>tag:google.com,2005:reader/feed/http://wiki.apexdevnet.com/feeds/ADN_Featured_Content.xml</id><title type="html">DFC Featured Content</title><link rel="alternate" href="http://wiki.apexdevnet.com/index.php/An_Introduction_to_Apex_Code_Test_Methods" type="text/html" /></source><content type="html">Learn how to embed visualizations by simply using formulas.
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/khn3gwsVMS9p5yFEofNMIfhZYYQ/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/khn3gwsVMS9p5yFEofNMIfhZYYQ/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/khn3gwsVMS9p5yFEofNMIfhZYYQ/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/khn3gwsVMS9p5yFEofNMIfhZYYQ/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/x2od_greadershared?a=w0KpL-e6z8o:jVPoyDpBmP8:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/x2od_greadershared?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/x2od_greadershared?a=w0KpL-e6z8o:jVPoyDpBmP8:dnMXMwOfBR0"&gt;&lt;img src="http://feeds.feedburner.com/~ff/x2od_greadershared?d=dnMXMwOfBR0" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/x2od_greadershared?a=w0KpL-e6z8o:jVPoyDpBmP8:V_sGLiPBpWU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/x2od_greadershared?i=w0KpL-e6z8o:jVPoyDpBmP8:V_sGLiPBpWU" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/x2od_greadershared/~4/w0KpL-e6z8o" height="1" width="1"/&gt;</content><feedburner:origLink>http://wiki.developerforce.com/index.php/Using_Formulas_and_Google_Charts_to_Visualize_Data</feedburner:origLink></entry><entry gr:crawl-timestamp-msec="1246411891445"><id gr:original-id="tag:typepad.com,2003:post-68187193">tag:google.com,2005:reader/item/69916cd8c8648d21</id><title type="html">Automated Multi-Wave Campaigns In Salesforce Marketing (Summer ’09 part 2)</title><published>2009-06-17T02:45:20Z</published><updated>2009-06-24T20:53:42Z</updated><link rel="alternate" href="http://feedproxy.google.com/~r/x2od_greadershared/~3/kcXraA_dAUs/automated-multiwave-campaigns-in-salesforce-marketing-summer-09-part-2.html" type="text/html" /><content xml:base="http://blogs.salesforce.com/marketing/" xml:lang="en-US" type="html">&lt;div&gt;&lt;p style="font-size:13px;font-family:Verdana"&gt;&lt;span style="font-size:14px"&gt;&lt;/span&gt;&lt;/p&gt;&lt;p style="font-size:13px;font-family:Verdana"&gt;

&lt;/p&gt;&lt;p style="font-size:13px;font-family:Verdana"&gt;Have you ever wanted to automatically email prospects or
customers based on rules you set up?&lt;span&gt; 
&lt;/span&gt;Ever wanted to email both leads and contacts without two separate
templates and processes?&lt;span&gt;  &lt;/span&gt;In Summer ’09,
it’s as easy as creating a few campaign member workflow rules!&lt;span&gt;  &lt;/span&gt;&lt;/p&gt;
    
&lt;p style="font-size:13px;font-family:Verdana"&gt; &lt;a href="http://blogs.salesforce.com/marketing/2009/05/track-campaign-rsvps-with-campaign-member-triggers-summer-09-part-1.html"&gt;In part
1&lt;/a&gt;, we walked through how triggers can be used to summarize campaign
information.&lt;span&gt;  &lt;/span&gt;In this example, we’ll show
you how two workflow rules and a trigger can be used to auto-email a second
reminder to non-respondents.&lt;span&gt;  &lt;/span&gt;If any
pieces seem tricky, your SFDC Administrator can help you set up these steps.&lt;/p&gt;
&lt;br&gt;
&lt;p style="font-size:13px;font-family:Verdana"&gt;Continuing our example,&lt;span&gt; &lt;/span&gt;Whitney has already created a parent campaign “2009-Q3-Webinar”
and a child campaign “&lt;span style="font-size:10pt;color:black"&gt;2009-Q3-Webinar-Email Reminder&lt;/span&gt;”.&lt;span&gt;  Both of these campaigns include the Status &amp;quot;No Response-2nd Email&amp;quot;.  &lt;/span&gt;&lt;/p&gt;&lt;p style="font-size:13px;font-family:Verdana"&gt;&lt;br&gt;Whitney can work with her SFDC admin to create a
workflow email alert to auto-email anyone that is added to the campaign.&lt;span&gt;  &lt;/span&gt;&lt;span&gt;&lt;/span&gt;However, we only want those that haven’t registered for the webinar to
receive this second email. With Summer ’09, it’s now easy to auto-email
campaign members with a workflow email alert, regardless of whether they are a
lead or contact!&lt;span&gt;   &lt;/span&gt;&lt;/p&gt;
&lt;br&gt;
&lt;p style="font-size:13px;font-family:Verdana"&gt;We’ll walk through the key steps to set up this
multi-campaign automation:&lt;span&gt;&lt;span&gt;&lt;/span&gt;&lt;br&gt;&lt;/span&gt;        &lt;/p&gt;&lt;div style="margin-left:40px;font-family:Verdana"&gt;&lt;span style="font-size:13px;font-family:Verdana"&gt;1) Create
the time–dependent workflow rule, which delays the action by seven days&lt;/span&gt;&lt;br&gt;&lt;span style="font-size:13px;font-family:Verdana"&gt;2) Create
an after update trigger, which clones this campaign member to the “Reminder
Email” campaign when the workflow fires&lt;/span&gt;&lt;br&gt;&lt;span style="font-size:13px;font-family:Verdana"&gt;3) Create
a workflow email alert, which auto-emails campaign members added to the
“Reminder Email” campaign&lt;br&gt;&lt;br&gt;&lt;/span&gt;&lt;ol&gt;



&lt;/ol&gt;
&lt;/div&gt;


&lt;p style="font-size:15px;font-family:Verdana"&gt;&lt;strong&gt;&lt;span style="text-decoration:underline"&gt;Step 1: Workflow
rule fires seven days after first email sent&lt;/span&gt;&lt;/strong&gt;&lt;/p&gt;&lt;div style="text-align:right"&gt;&lt;p style="font-size:15px;font-family:Verdana"&gt;&lt;u&gt;&lt;a href="http://blogs.salesforce.com/marketing/2009/06/automated-multiwave-campaigns-in-salesforce-marketing-summer-09-part-2.html" title="Full Blog Entry"&gt;Read More &amp;gt;&lt;/a&gt;&lt;/u&gt;&lt;/p&gt;&lt;br&gt;&lt;/div&gt;&lt;br&gt;&lt;strong&gt;&lt;span style="text-decoration:underline"&gt;&lt;/span&gt;&lt;/strong&gt;



&lt;p style="font-size:13px;font-family:Verdana"&gt;First, we want to create a rule that fires seven days after
the person was first emailed, which in this case happened as soon as they were
added to the “TechCo Webinar Email” campaign.&lt;span&gt; 
&lt;/span&gt;To create this workflow rule, navigate to Setup&lt;span&gt;--&amp;gt;&lt;/span&gt;Create&lt;span&gt;--&amp;gt;&lt;/span&gt;Workflow
&amp;amp; Approvals--&amp;gt;&lt;span&gt;&lt;/span&gt;Workflow
Rules--&amp;gt;Workflow
Rule&lt;span&gt;--&amp;gt;&lt;/span&gt;New
Rule, then select Campaign Member.&lt;/p&gt;
&lt;br&gt;
&lt;p style="font-size:13px;font-family:Verdana"&gt;&lt;a href="http://blogs.salesforce.com/.a/6a00e54ee3905b8833011570274911970c-pi" style="display:inline"&gt;&lt;img alt="Campaign Member Email pic 1" src="http://blogs.salesforce.com/.a/6a00e54ee3905b8833011570274911970c-800wi" title="Campaign Member Email pic 1" border="0"&gt;&lt;/a&gt; &lt;/p&gt;
&lt;br&gt;
&lt;p style="font-size:13px;font-family:Verdana"&gt;&lt;a href="http://blogs.salesforce.com/.a/6a00e54ee3905b88330115711c7a3b970b-pi" style="display:inline"&gt;&lt;img alt="Campaign Member Email pic 2" src="http://blogs.salesforce.com/.a/6a00e54ee3905b88330115711c7a3b970b-800wi" title="Campaign Member Email pic 2" border="0"&gt;&lt;/a&gt; &lt;/p&gt;
&lt;br&gt;
&lt;p style="font-size:13px;font-family:Verdana"&gt;Next, select the Campaign Member object:&lt;/p&gt;
&lt;br&gt;
&lt;p style="font-size:13px;font-family:Verdana"&gt;&lt;a href="http://blogs.salesforce.com/.a/6a00e54ee3905b8833011570274977970c-pi" style="display:inline"&gt;&lt;img alt="Campaign Member Email pic 3" src="http://blogs.salesforce.com/.a/6a00e54ee3905b8833011570274977970c-800wi" title="Campaign Member Email pic 3" border="0"&gt;&lt;/a&gt; &lt;/p&gt;
&lt;br&gt;
&lt;p style="font-size:13px;font-family:Verdana"&gt;After naming the rule, it’s time to set the rule criteria.&lt;span&gt;  &lt;/span&gt;For this rule, we want the seven-day delay to
start counting from when the record was created, so under Evaluation Criteria,
we select “Only when a record is created.”&lt;span&gt; 
&lt;/span&gt;For the Rule Criteria, we select only members added to the campaign with
a status of “Sent” and Campaign Name equal to “&lt;span&gt;&lt;span style="font-size:9pt;line-height:115%;color:black"&gt;2009-Q3-Webinar&lt;/span&gt;&lt;/span&gt;&lt;span&gt;&lt;span style="font-size:9pt;line-height:115%;color:black"&gt;”—the name of our campaign.&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;br&gt;
&lt;p style="font-size:13px;font-family:Verdana"&gt;&lt;span&gt;&lt;a href="http://blogs.salesforce.com/.a/6a00e54ee3905b88330115711c7ac4970b-pi" style="display:inline"&gt;&lt;img alt="Campaign Member Email pic 4" src="http://blogs.salesforce.com/.a/6a00e54ee3905b88330115711c7ac4970b-800wi" title="Campaign Member Email pic 4" border="0"&gt;&lt;/a&gt; &lt;br&gt;&lt;/span&gt;&lt;/p&gt;
&lt;br&gt;
&lt;p style="font-size:13px;font-family:Verdana"&gt;Now that you have specified the conditions for the workflow
rule to fire, specify what happens when it fires, and when.&lt;span&gt;  &lt;/span&gt;In this example, we set the “when”, by
clicking “Add Time Trigger, ” then entering seven days after the campaign
member created date.&lt;/p&gt;
&lt;br&gt;
&lt;p style="font-size:13px;font-family:Verdana"&gt;&lt;a href="http://blogs.salesforce.com/.a/6a00e54ee3905b88330115711c7b1b970b-pi" style="display:inline"&gt;&lt;img alt="Campaign Member Email pic 5" src="http://blogs.salesforce.com/.a/6a00e54ee3905b88330115711c7b1b970b-800wi" title="Campaign Member Email pic 5" border="0"&gt;&lt;/a&gt; &lt;span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;br&gt;
&lt;p style="font-size:13px;font-family:Verdana"&gt;&lt;span&gt;&lt;a href="http://blogs.salesforce.com/.a/6a00e54ee3905b8833011570274a5e970c-pi" style="display:inline"&gt;&lt;img alt="Campaign Member Email pic 6" src="http://blogs.salesforce.com/.a/6a00e54ee3905b8833011570274a5e970c-800wi" title="Campaign Member Email pic 6" border="0"&gt;&lt;/a&gt; &lt;br&gt;&lt;/span&gt;&lt;/p&gt;
&lt;br&gt;
&lt;p style="font-size:13px;font-family:Verdana"&gt;Next, set the action that will happen when the trigger fires.&lt;span&gt;  &lt;/span&gt;In this case, we want it to update the Status
to “No Response–2&lt;sup&gt;nd&lt;/sup&gt; Email.” From “Add Workflow Action,” we select
“New Field Update” and enter our criteria, then click “Save.”&lt;/p&gt;
&lt;br&gt;
&lt;p style="font-size:13px;font-family:Verdana"&gt;&lt;span style="margin-left:26px;margin-top:103px;width:155px;height:29px"&gt;&lt;img src="javascript:void(0);" width="155" height="29"&gt;&lt;/span&gt;&lt;span&gt;&lt;a href="http://blogs.salesforce.com/.a/6a00e54ee3905b88330115711c7bb1970b-pi" style="display:inline"&gt;&lt;img alt="Campaign Member Email pic 7" src="http://blogs.salesforce.com/.a/6a00e54ee3905b88330115711c7bb1970b-800wi" title="Campaign Member Email pic 7" border="0"&gt;&lt;/a&gt; &lt;/span&gt;&lt;/p&gt;
&lt;br&gt;
&lt;p style="font-size:13px;font-family:Verdana"&gt;&lt;span&gt;&lt;a href="http://blogs.salesforce.com/.a/6a00e54ee3905b88330115711c7bf4970b-pi" style="display:inline"&gt;&lt;img alt="Campaign Member Email pic 8" src="http://blogs.salesforce.com/.a/6a00e54ee3905b88330115711c7bf4970b-800wi" title="Campaign Member Email pic 8" border="0"&gt;&lt;/a&gt; &lt;br&gt;&lt;/span&gt;&lt;/p&gt;
&lt;br&gt;
&lt;p style="font-size:13px;font-family:Verdana"&gt;Back on the Edit Rule page, click Done. Finally, activate
the rule by clicking “Activate.”&lt;/p&gt;
&lt;br&gt;
&lt;p style="font-size:13px;font-family:Verdana"&gt;&lt;span style="margin-left:367px;margin-top:7px;width:74px;height:29px"&gt;&lt;img src="javascript:void(0);" width="74" height="29"&gt;&lt;/span&gt;&lt;span&gt;&lt;img src="javascript:void(0);" border="0" width="691" height="406"&gt;&lt;/span&gt;&lt;/p&gt;
&lt;br&gt;
&lt;p style="font-size:15px;font-family:Verdana"&gt;&lt;strong&gt;&lt;span style="text-decoration:underline"&gt;Step 2: Trigger
clones non-respondents to new campaign&lt;/span&gt;&lt;/strong&gt;&lt;/p&gt;
&lt;br&gt;
&lt;p style="font-size:13px;font-family:Verdana"&gt;Phew!&lt;span&gt;  &lt;/span&gt;Now you might
be wondering one of two questions:&lt;span&gt;&lt;span&gt;&lt;span style="font-style:normal;font-variant:normal;font-weight:normal;font-size:7pt;line-height:normal;font-size-adjust:none;font-stretch:normal"&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;p style="font-size:13px;font-family:Verdana;margin-left:40px"&gt;&lt;span&gt;&lt;span&gt;&lt;span style="font-style:normal;font-variant:normal;font-weight:normal;font-size:7pt;line-height:normal;font-size-adjust:none;font-stretch:normal"&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;1) Why
can’t I just use an email alert on this campaign once the status changes?&lt;/p&gt;&lt;p style="font-size:13px;font-family:Verdana;margin-left:40px"&gt;2) What
happens if someone already registered – won’t we be overwriting the status?? &lt;/p&gt;
&lt;br&gt;
&lt;p style="font-size:13px;font-family:Verdana"&gt;The reason we can’t simply create two workflow rules is that
workflow cannot trigger workflow upon save.&lt;span&gt; 
&lt;/span&gt;We get around that problem by using this trigger to add the person to a
new campaign.&lt;span&gt;  &lt;/span&gt;The added bonus is that
it’s a cleaner record of who was emailed and who wasn’t.&lt;/p&gt;
&lt;br&gt;
&lt;p style="font-size:13px;font-family:Verdana"&gt;Our trigger resolves the second question as it checks if the
status before the update was Sent, and if the new status is No Response–2&lt;sup&gt;nd&lt;/sup&gt;
Email.&lt;span&gt;  &lt;/span&gt;If so, it puts this prospect into
a second campaign called “2009-Q3-Webinar-Email Reminder.”&lt;span&gt;   &lt;/span&gt;If not, it reverts the status, as we don’t
want to overwrite RSVP-Yes statuses!&lt;/p&gt;
&lt;br&gt;
&lt;p style="margin-bottom:0.0001pt;line-height:normal;font-size:13px;font-family:Verdana"&gt;&lt;span style="font-size:10pt;color:black"&gt;trigger CloneCampaignMember on CampaignMember (before update) {&lt;/span&gt;&lt;/p&gt;

&lt;p style="margin-bottom:0.0001pt;line-height:normal;font-size:13px;font-family:Verdana"&gt;&lt;span style="font-size:10pt;color:black"&gt;&lt;span&gt;  &lt;/span&gt;for (Integer i = 0; i &amp;lt;
Trigger.new.size(); i++) {&lt;/span&gt;&lt;/p&gt;

&lt;p style="margin-bottom:0.0001pt;line-height:normal;font-size:13px;font-family:Verdana"&gt;&lt;span style="font-size:10pt;color:black"&gt;&lt;span&gt;    &lt;/span&gt;if
(Trigger.old[i].Status == '&lt;strong&gt;Sent&lt;/strong&gt;&amp;#39; &amp;amp;&amp;amp; Trigger.new[i].Status == &amp;#39;&lt;strong&gt;No
Response-2nd Email&lt;/strong&gt;') {&lt;/span&gt;&lt;/p&gt;

&lt;p style="margin-bottom:0.0001pt;line-height:normal;font-size:13px;font-family:Verdana"&gt;&lt;span style="font-size:10pt;color:black"&gt;&lt;span&gt;               
&lt;/span&gt;CampaignMember nurtureCM= Trigger.new[i].clone(false);&lt;/span&gt;&lt;/p&gt;

&lt;p style="margin-bottom:0.0001pt;line-height:normal;font-size:13px;font-family:Verdana"&gt;&lt;span style="font-size:10pt;color:black"&gt;&lt;span&gt;            &lt;/span&gt;try{&lt;span&gt;  &lt;/span&gt;//try lets the trigger recover from a problem
- such as if the campaign isn't found&lt;/span&gt;&lt;/p&gt;

&lt;p style="margin-bottom:0.0001pt;line-height:normal;font-size:13px;font-family:Verdana"&gt;&lt;span style="font-size:10pt;color:black"&gt;&lt;span&gt;                &lt;/span&gt;Campaign c =
[SELECT Id FROM Campaign WHERE Name = '&lt;strong&gt;2009-Q3-Webinar-Email Reminder&lt;/strong&gt;'];//pick
the right campaign&lt;/span&gt;&lt;/p&gt;

&lt;p style="margin-bottom:0.0001pt;line-height:normal;font-size:13px;font-family:Verdana"&gt;&lt;span style="font-size:10pt;color:black"&gt;&lt;span&gt;               
&lt;/span&gt;nurtureCM.CampaignID = c.Id; //assign this campaign to the new member&lt;/span&gt;&lt;/p&gt;

&lt;p style="margin-bottom:0.0001pt;line-height:normal;font-size:13px;font-family:Verdana"&gt;&lt;span style="font-size:10pt;color:black"&gt;&lt;span&gt;               
&lt;/span&gt;nurtureCM.Status = '&lt;strong&gt;No Response-2nd Email&lt;/strong&gt;';&lt;span&gt;  &lt;/span&gt;//set status for the new member&lt;/span&gt;&lt;/p&gt;

&lt;p style="margin-bottom:0.0001pt;line-height:normal;font-size:13px;font-family:Verdana"&gt;&lt;span style="font-size:10pt;color:black"&gt;&lt;span&gt;            &lt;/span&gt;}catch(Exception
e){ // this 'catches' an error if the insert fails so that an ugly message
doesn't occur&lt;/span&gt;&lt;/p&gt;

&lt;p style="margin-bottom:0.0001pt;line-height:normal;font-size:13px;font-family:Verdana"&gt;&lt;span style="font-size:10pt;color:black"&gt;&lt;span&gt;                &lt;/span&gt;System.debug('Campaign
named 2009-Q3-Webinar-Email Reminder does not exist: ' + e); //this prints the
error to the system log&lt;/span&gt;&lt;/p&gt;

&lt;p style="margin-bottom:0.0001pt;line-height:normal;font-size:13px;font-family:Verdana"&gt;&lt;span style="font-size:10pt;color:black"&gt;&lt;span&gt;            &lt;/span&gt;}//try&lt;/span&gt;&lt;/p&gt;

&lt;p style="margin-bottom:0.0001pt;line-height:normal;font-size:13px;font-family:Verdana"&gt;&lt;span style="font-size:10pt;color:black"&gt;&lt;span&gt;            &lt;/span&gt;try{&lt;/span&gt;&lt;/p&gt;

&lt;p style="margin-bottom:0.0001pt;line-height:normal;font-size:13px;font-family:Verdana"&gt;&lt;span style="font-size:10pt;color:black"&gt;&lt;span&gt;                &lt;/span&gt;insert
nurtureCM; //Copy the newmember to the database&lt;span&gt;          &lt;/span&gt;&lt;/span&gt;&lt;/p&gt;

&lt;p style="margin-bottom:0.0001pt;line-height:normal;font-size:13px;font-family:Verdana"&gt;&lt;span style="font-size:10pt;color:black"&gt;&lt;span&gt;            &lt;/span&gt;}catch(DMLException
e){ // this 'catches' an error if the insert fails so that an ugly message
doesn't occur&lt;/span&gt;&lt;/p&gt;

&lt;p style="margin-bottom:0.0001pt;line-height:normal;font-size:13px;font-family:Verdana"&gt;&lt;span style="font-size:10pt;color:black"&gt;&lt;span&gt;               
&lt;/span&gt;System.debug('Campaign Member insert failed: ' + e); //this prints the
error to the system log&lt;/span&gt;&lt;/p&gt;

&lt;p style="margin-bottom:0.0001pt;line-height:normal;font-size:13px;font-family:Verdana"&gt;&lt;span style="font-size:10pt;color:black"&gt;&lt;span&gt;            &lt;/span&gt;}//try&lt;/span&gt;&lt;/p&gt;

&lt;p style="margin-bottom:0.0001pt;line-height:normal;font-size:13px;font-family:Verdana"&gt;&lt;span style="font-size:10pt;color:black"&gt;&lt;span&gt;    &lt;/span&gt;}else {&lt;/span&gt;&lt;/p&gt;

&lt;p style="margin-bottom:0.0001pt;line-height:normal;font-size:13px;font-family:Verdana"&gt;&lt;span style="font-size:10pt;color:black"&gt;&lt;span&gt;        &lt;/span&gt;if (Trigger.new[i].Status
== '&lt;strong&gt;No Response-2nd Email&lt;/strong&gt;'){&lt;/span&gt;&lt;/p&gt;

&lt;p style="margin-bottom:0.0001pt;line-height:normal;font-size:13px;font-family:Verdana"&gt;&lt;span style="font-size:10pt;color:black"&gt;&lt;span&gt;            &lt;/span&gt;try{&lt;span&gt;  &lt;/span&gt;//try lets the trigger recover from a problem&lt;/span&gt;&lt;/p&gt;

&lt;p style="margin-bottom:0.0001pt;line-height:normal;font-size:13px;font-family:Verdana"&gt;&lt;span style="font-size:10pt;color:black"&gt;&lt;span&gt;               
&lt;/span&gt;CampaignMember revertStatusCM= Trigger.new[i].clone(false);&lt;/span&gt;&lt;/p&gt;

&lt;p style="margin-bottom:0.0001pt;line-height:normal;font-size:13px;font-family:Verdana"&gt;&lt;span style="font-size:10pt;color:black"&gt;&lt;span&gt;               
&lt;/span&gt;revertStatusCM.Status=Trigger.old[i].status;&lt;/span&gt;&lt;/p&gt;

&lt;p style="margin-bottom:0.0001pt;line-height:normal;font-size:13px;font-family:Verdana"&gt;&lt;span style="font-size:10pt;color:black"&gt;&lt;span&gt;     &lt;/span&gt;&lt;span&gt;           &lt;/span&gt;update revertStatusCM;&lt;/span&gt;&lt;/p&gt;

&lt;p style="margin-bottom:0.0001pt;line-height:normal;font-size:13px;font-family:Verdana"&gt;&lt;span style="font-size:10pt;color:black"&gt;&lt;span&gt;            
&lt;/span&gt;}catch(DMLException e){ // this 'catches' an error if the insert fails
so that an ugly message doesn't occur&lt;/span&gt;&lt;/p&gt;

&lt;p style="margin-bottom:0.0001pt;line-height:normal;font-size:13px;font-family:Verdana"&gt;&lt;span style="font-size:10pt;color:black"&gt;&lt;span&gt;               
&lt;/span&gt;System.debug('Campaign Member status reversion failed:' + e); //this
prints the error to the system log&lt;/span&gt;&lt;/p&gt;

&lt;p style="margin-bottom:0.0001pt;line-height:normal;font-size:13px;font-family:Verdana"&gt;&lt;span style="font-size:10pt;color:black"&gt;&lt;span&gt;            &lt;/span&gt;}//try&lt;/span&gt;&lt;/p&gt;

&lt;p style="margin-bottom:0.0001pt;line-height:normal;font-size:13px;font-family:Verdana"&gt;&lt;span style="font-size:10pt;color:black"&gt;&lt;span&gt;        &lt;/span&gt;}//if 2&lt;/span&gt;&lt;/p&gt;

&lt;p style="margin-bottom:0.0001pt;line-height:normal;font-size:13px;font-family:Verdana"&gt;&lt;span style="font-size:10pt;color:black"&gt;&lt;span&gt;    &lt;/span&gt;}//if 1&lt;span&gt;        &lt;/span&gt;&lt;/span&gt;&lt;/p&gt;

&lt;p style="margin-bottom:0.0001pt;line-height:normal;font-size:13px;font-family:Verdana"&gt;&lt;span style="font-size:10pt;color:black"&gt;&lt;span&gt;  &lt;/span&gt;}//for&lt;/span&gt;&lt;/p&gt;

&lt;p style="margin-bottom:0.0001pt;line-height:normal;font-size:13px;font-family:Verdana"&gt;&lt;span style="font-size:10pt;color:black"&gt;}//trigger&lt;/span&gt;&lt;/p&gt;

&lt;p style="margin-bottom:0.0001pt;line-height:normal;font-size:13px;font-family:Verdana"&gt;&lt;span style="font-size:10pt;color:black"&gt; &lt;/span&gt;&lt;/p&gt;
&lt;br&gt;
&lt;p style="font-size:13px;font-family:Verdana"&gt;&lt;span style="font-size:10pt;line-height:115%;color:black"&gt;&lt;a href="http://blogs.salesforce.com/.a/6a00e54ee3905b8833011570274b48970c-pi" style="display:inline"&gt;&lt;img alt="Campaign Member Email pic 10" src="http://blogs.salesforce.com/.a/6a00e54ee3905b8833011570274b48970c-800wi" title="Campaign Member Email pic 10" border="0"&gt;&lt;/a&gt; &lt;br&gt;&lt;/span&gt;&lt;span style="font-size:10pt;line-height:115%;color:black"&gt;&lt;/span&gt;&lt;/p&gt;
&lt;br&gt;
&lt;p style="font-size:15px;font-family:Verdana"&gt;&lt;strong&gt;&lt;span style="text-decoration:underline"&gt;Step 3: Workflow
auto-emails a reminder&lt;/span&gt;&lt;/strong&gt;&lt;/p&gt;
&lt;br&gt;
&lt;p style="font-size:13px;font-family:Verdana"&gt;Now that the members are set to be cloned, the last step is
to create an email alert workflow rule. 
Similar to the above, first we create the rule, which we want to fire
when the member is added to the Email Reminder campaign with a status of “No
Response-2&lt;sup&gt;nd&lt;/sup&gt; Email”:&lt;/p&gt;
&lt;br&gt;
&lt;p style="font-size:13px;font-family:Verdana"&gt;&lt;a href="http://blogs.salesforce.com/.a/6a00e54ee3905b88330115711c7cda970b-pi" style="display:inline"&gt;&lt;img alt="Campaign Member Email pic 11" src="http://blogs.salesforce.com/.a/6a00e54ee3905b88330115711c7cda970b-800wi" title="Campaign Member Email pic 11" border="0"&gt;&lt;/a&gt; &lt;/p&gt;
&lt;br&gt;
&lt;p style="font-size:13px;font-family:Verdana"&gt;Then we set the action – what we want to happen when this
rule fires.&lt;span&gt;  &lt;/span&gt;We want to send an email, so
we pick “New Email Alert.”&lt;/p&gt;
&lt;br&gt;
&lt;p style="font-size:13px;font-family:Verdana"&gt;&lt;span&gt;&lt;img src="javascript:void(0);" border="0" width="677" height="350"&gt;&lt;/span&gt;&lt;/p&gt;
&lt;br&gt;
&lt;p style="font-size:13px;font-family:Verdana"&gt;We select our reminder email template, and
under Recipient Type, select “Email Field.”&lt;span&gt; 
&lt;/span&gt;The field “Email Field:Email” is the Lead/Contact email address, which
is the one we want.&lt;span&gt;  &lt;/span&gt;Finally we can send
one email to both leads and contacts at once!&lt;/p&gt;
&lt;br&gt;
&lt;p style="font-size:13px;font-family:Verdana"&gt;&lt;span&gt;&lt;a href="http://blogs.salesforce.com/.a/6a00e54ee3905b88330115711c7d18970b-pi" style="display:inline"&gt;&lt;img alt="Campaign Member Email pic 12" src="http://blogs.salesforce.com/.a/6a00e54ee3905b88330115711c7d18970b-800wi" title="Campaign Member Email pic 12" border="0"&gt;&lt;/a&gt; &lt;br&gt;&lt;/span&gt;&lt;/p&gt;
&lt;br&gt;
&lt;p style="font-size:13px;font-family:Verdana"&gt;To finish, click “Done” then click “Activate” to activate the
rule.&lt;/p&gt;
&lt;br&gt;
&lt;p style="font-size:13px;font-family:Verdana"&gt;&lt;strong&gt;The Payoff&lt;/strong&gt;&lt;/p&gt;
&lt;br&gt;
&lt;p style="font-size:13px;font-family:Verdana"&gt;With this automated flow set up, leads or contacts added to
the campaign, who still have the status of Sent after seven days, will be sent
a reminder email.&lt;span&gt;  &lt;/span&gt;This is one example of
how you can use the building blocks of campaign member triggers and workflow to
create multi-wave campaign.&lt;span&gt;  &lt;/span&gt;You could
copy and tweak any of the steps above to accomplish more complex flows, such a
series of nurturing emails sent to new leads that haven’t been converted into
opportunities.&lt;span&gt;  &lt;/span&gt;Also, once the first flow
is built, you can easily clone the pieces or change the filters for your next
campaign!&lt;/p&gt;
&lt;br&gt;
&lt;p style="font-size:13px;font-family:Verdana"&gt;&lt;span&gt;&lt;a href="http://blogs.salesforce.com/.a/6a00e54ee3905b88330115711c7d72970b-pi" style="display:inline"&gt;&lt;img alt="Campaign Member Email pic 13" src="http://blogs.salesforce.com/.a/6a00e54ee3905b88330115711c7d72970b-800wi" title="Campaign Member Email pic 13" border="0"&gt;&lt;/a&gt; &lt;br&gt;&lt;/span&gt;&lt;/p&gt;
&lt;br&gt;
&lt;p style="font-size:13px;font-family:Verdana"&gt;In the next post, you’ll see how to avoid lead dupes by
leveraging Salesforce Sites as your campaign member registration pages!&lt;/p&gt;&lt;/div&gt;
&lt;img src="http://feeds.feedburner.com/~r/sfm/~4/YY7KUvOJK74" height="1" width="1"&gt;
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/pOVafL4EMl2Ac4pLmnnRBf13fEs/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/pOVafL4EMl2Ac4pLmnnRBf13fEs/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/pOVafL4EMl2Ac4pLmnnRBf13fEs/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/pOVafL4EMl2Ac4pLmnnRBf13fEs/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/x2od_greadershared?a=kcXraA_dAUs:axgvPB39sS4:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/x2od_greadershared?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/x2od_greadershared?a=kcXraA_dAUs:axgvPB39sS4:dnMXMwOfBR0"&gt;&lt;img src="http://feeds.feedburner.com/~ff/x2od_greadershared?d=dnMXMwOfBR0" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/x2od_greadershared?a=kcXraA_dAUs:axgvPB39sS4:V_sGLiPBpWU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/x2od_greadershared?i=kcXraA_dAUs:axgvPB39sS4:V_sGLiPBpWU" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/x2od_greadershared/~4/kcXraA_dAUs" height="1" width="1"/&gt;</content><author><name>John Kucera</name></author><source gr:stream-id="feed/http://blogs.salesforce.com/marketing/atom.xml"><id>tag:google.com,2005:reader/feed/http://blogs.salesforce.com/marketing/atom.xml</id><title type="html">Salesforce Marketing Blog</title><link rel="alternate" href="http://blogs.salesforce.com/marketing/" type="text/html" /></source><feedburner:origLink>http://feedproxy.google.com/~r/sfm/~3/YY7KUvOJK74/automated-multiwave-campaigns-in-salesforce-marketing-summer-09-part-2.html</feedburner:origLink></entry><entry gr:crawl-timestamp-msec="1246411898505"><id gr:original-id="tag:typepad.com,2003:post-67377171">tag:google.com,2005:reader/item/a0b948999126bfaf</id><title type="html">Track Campaign RSVP&amp;#39;s with Campaign Member Triggers (Summer &amp;#39;09 part 1)</title><published>2009-05-28T18:19:38Z</published><updated>2009-06-24T20:55:34Z</updated><link rel="alternate" href="http://feedproxy.google.com/~r/x2od_greadershared/~3/QjOYzQQXIgY/track-campaign-rsvps-with-campaign-member-triggers-summer-09-part-1.html" type="text/html" /><content xml:base="http://blogs.salesforce.com/marketing/" xml:lang="en-US" type="html">&lt;div&gt;&lt;p&gt;With the Summer ’09 release, there are some major
improvements to Campaign Members!&lt;span&gt;  &lt;/span&gt;Over
the next month we’ll do our best to give a few examples of how to take
advantage of these improvements.&lt;/p&gt;

&lt;p&gt;To help make it more real, we’ll follow Whitney, a marketing
manager who is responsible for putting together a webinar for her company
TechCo.&lt;span&gt;   &lt;/span&gt;We’ll break this down into
several parts:&lt;/p&gt;

&lt;p style="text-indent:-0.25in;margin-left:40px"&gt;&lt;span&gt;&lt;span&gt;1)&lt;span style="font-family:&amp;quot;Times New Roman&amp;quot;;font-style:normal;font-variant:normal;font-weight:normal;font-size:7pt;line-height:normal;font-size-adjust:none;font-stretch:normal"&gt;      &lt;/span&gt;&lt;/span&gt;&lt;/span&gt;Creating
a basic trigger to keep a quick count of the # RSVP’s&lt;/p&gt;

&lt;p style="text-indent:-0.25in;margin-left:40px"&gt;&lt;span&gt;&lt;span&gt;2)&lt;span style="font-family:&amp;quot;Times New Roman&amp;quot;;font-style:normal;font-variant:normal;font-weight:normal;font-size:7pt;line-height:normal;font-size-adjust:none;font-stretch:normal"&gt;      &lt;/span&gt;&lt;/span&gt;&lt;/span&gt;Using
workflow &amp;amp; triggers to auto-email non-respondents 7 days later (automated multi wave drip campaigns)&lt;/p&gt;

&lt;p style="text-indent:-0.25in;margin-left:40px"&gt;&lt;span&gt;&lt;span&gt;3)&lt;span style="font-family:&amp;quot;Times New Roman&amp;quot;;font-style:normal;font-variant:normal;font-weight:normal;font-size:7pt;line-height:normal;font-size-adjust:none;font-stretch:normal"&gt;      &lt;/span&gt;&lt;/span&gt;&lt;/span&gt;Using
Salesforce Sites for event registration landing pages&lt;/p&gt;

&lt;p style="text-indent:-0.25in;margin-left:40px"&gt;&lt;span&gt;&lt;span&gt;4)&lt;span style="font-family:&amp;quot;Times New Roman&amp;quot;;font-style:normal;font-variant:normal;font-weight:normal;font-size:7pt;line-height:normal;font-size-adjust:none;font-stretch:normal"&gt;      &lt;/span&gt;&lt;/span&gt;&lt;/span&gt;Using
campaign member custom fields to prioritize responses from the webinar&lt;/p&gt;

&lt;p style="text-indent:-0.25in;margin-left:40px"&gt;&lt;span&gt;&lt;span&gt;5)&lt;span style="font-family:&amp;quot;Times New Roman&amp;quot;;font-style:normal;font-variant:normal;font-weight:normal;font-size:7pt;line-height:normal;font-size-adjust:none;font-stretch:normal"&gt;      &lt;/span&gt;&lt;/span&gt;&lt;/span&gt;Using
campaign member custom fields &amp;amp; reports for offer management across
campaigns&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Create Campaign Custom Field&lt;/strong&gt;&lt;/p&gt;&lt;p&gt;We join Whitney after she’s sent out a blast to invite, and
wants to create an RSVP counter on the Webinar campaign.&lt;span&gt;  &lt;/span&gt;First, she creates a number custom field on
Campaign with a label of “# RSVP Yes” and a field name of “RSVP_Yes”. &lt;/p&gt;&lt;p&gt;&lt;a href="http://blogs.salesforce.com/.a/6a00e54ee3905b8833011570ad3c2d970b-pi" style="display:inline"&gt;&lt;img alt="Campaign Member Trigger pic 1" border="0" src="http://blogs.salesforce.com/.a/6a00e54ee3905b8833011570ad3c2d970b-800wi" title="Campaign Member Trigger pic 1"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p style="font-size:15px;font-family:Verdana;text-align:right"&gt;&lt;span style="text-decoration:underline"&gt;
&lt;a href="http://blogs.salesforce.com/marketing/2009/05/track-campaign-rsvps-with-campaign-member-triggers-summer-09-part-1.html" title="Full Blog Entry"&gt;Read More &amp;gt;&lt;/a&gt;&lt;br&gt;&lt;a href="http://blogs.salesforce.com/.a/6a00e54ee3905b8833011570ad3c2d970b-pi" style="display:inline"&gt;
&lt;/a&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href="http://blogs.salesforce.com/.a/6a00e54ee3905b8833011570ad3c2d970b-pi" style="display:inline"&gt; &lt;/a&gt; &lt;/p&gt;&lt;p&gt;&lt;a href="http://blogs.salesforce.com/.a/6a00e54ee3905b883301156fb80453970c-pi" style="display:inline"&gt;&lt;img alt="Campaign Member Trigger pic 2.5" border="0" src="http://blogs.salesforce.com/.a/6a00e54ee3905b883301156fb80453970c-800wi" title="Campaign Member Trigger pic 2.5"&gt;&lt;/a&gt; &lt;/p&gt;&lt;p&gt;When
she’s done, she adds it to the Campaign layout:&lt;/p&gt;&lt;p&gt;&lt;a href="http://blogs.salesforce.com/.a/6a00e54ee3905b8833011570ad3d67970b-pi" style="display:inline"&gt;&lt;img alt="Campaign Member Trigger pic 2" border="0" src="http://blogs.salesforce.com/.a/6a00e54ee3905b8833011570ad3d67970b-800wi" title="Campaign Member Trigger pic 2"&gt;&lt;/a&gt; &lt;br&gt;&lt;/p&gt;

&lt;p&gt;&lt;span&gt;&lt;img height="273" src="javascript:void(0);" width="230"&gt;&lt;/span&gt;&lt;/p&gt;

&lt;p&gt;&lt;span&gt;&lt;img height="513" src="javascript:void(0);" width="498"&gt;&lt;/span&gt;&lt;/p&gt;

&lt;p&gt;&lt;span style="margin-left:68px;margin-top:148px;width:272px;height:24px"&gt;&lt;img height="24" src="javascript:void(0);" width="272"&gt;&lt;/span&gt;&lt;span&gt;&lt;img height="175" src="javascript:void(0);" width="407"&gt;&lt;/span&gt;&lt;/p&gt;

&lt;p&gt;Next, she creates a new trigger from Setup--&amp;gt;&lt;span style="font-family:Wingdings"&gt;&lt;span&gt;&lt;/span&gt;&lt;/span&gt;Customize&lt;span style="font-family:Wingdings"&gt;&lt;span&gt;--&amp;gt;&lt;/span&gt;&lt;/span&gt;Campaigns--&amp;gt;&lt;span style="font-family:Wingdings"&gt;&lt;span&gt;&lt;/span&gt;&lt;/span&gt;Campaign
Members&lt;span style="font-family:Wingdings"&gt;&lt;span&gt;--&amp;gt;&lt;/span&gt;&lt;/span&gt;Triggers.&lt;span&gt;  &lt;br&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;a href="http://blogs.salesforce.com/.a/6a00e54ee3905b8833011570ad3ee1970b-pi" style="display:inline"&gt;&lt;img alt="Campaign Member Trigger pic 3" border="0" src="http://blogs.salesforce.com/.a/6a00e54ee3905b8833011570ad3ee1970b-800wi" title="Campaign Member Trigger pic 3"&gt;&lt;/a&gt; &lt;br&gt;&lt;span&gt;&lt;/span&gt;&lt;/p&gt;

&lt;p&gt;&lt;span&gt;&lt;img height="290" src="javascript:void(0);" width="178"&gt;&lt;/span&gt;&lt;/p&gt;

&lt;p&gt;With some help from the &lt;a href="http://community.salesforce.com/sforce/board/message?board.id=apex&amp;amp;thread.id=1790"&gt;Salesforce Community&lt;/a&gt;, she copies
and pastes the code below and saves the trigger, and she’s done!&lt;/p&gt;

&lt;p style="margin-bottom:0.0001pt;line-height:normal"&gt;&lt;span style="font-size:9pt;font-family:&amp;quot;Courier New&amp;quot;;color:black"&gt;trigger
UpdateCmpRegistered on CampaignMember (before update) {&lt;/span&gt;&lt;/p&gt;

&lt;p style="margin-bottom:0.0001pt;line-height:normal"&gt;&lt;span style="font-size:9pt;font-family:&amp;quot;Courier New&amp;quot;;color:black"&gt;&lt;span&gt;    &lt;/span&gt;Campaign c = [select Id,Registered__c, name
from Campaign where Id = :Trigger.new[0].CampaignId limit 1];&lt;/span&gt;&lt;/p&gt;

&lt;p style="margin-bottom:0.0001pt;line-height:normal"&gt;&lt;span style="font-size:9pt;font-family:&amp;quot;Courier New&amp;quot;;color:black"&gt;&lt;span&gt;    &lt;/span&gt;&lt;/span&gt;&lt;/p&gt;

&lt;p style="margin-bottom:0.0001pt;line-height:normal"&gt;&lt;span style="font-size:9pt;font-family:&amp;quot;Courier New&amp;quot;;color:black"&gt;&lt;span&gt;    &lt;/span&gt;for(CampaignMember cm : Trigger.new){&lt;/span&gt;&lt;/p&gt;

&lt;p style="margin-bottom:0.0001pt;line-height:normal"&gt;&lt;span style="font-size:9pt;font-family:&amp;quot;Courier New&amp;quot;;color:black"&gt;&lt;span&gt;        &lt;/span&gt;if (cm.Status == &amp;#39;RSVP-Yes&amp;#39;) { &lt;/span&gt;&lt;/p&gt;

&lt;p style="margin-bottom:0.0001pt;line-height:normal"&gt;&lt;span style="font-size:9pt;font-family:&amp;quot;Courier New&amp;quot;;color:black"&gt;&lt;span&gt;          &lt;/span&gt;if (c.Registered__c== null) {&lt;/span&gt;&lt;/p&gt;

&lt;p style="margin-bottom:0.0001pt;line-height:normal"&gt;&lt;span style="font-size:9pt;font-family:&amp;quot;Courier New&amp;quot;;color:black"&gt;&lt;span&gt;       &lt;/span&gt;&lt;span&gt;       &lt;/span&gt;c.Registered__c=0;&lt;/span&gt;&lt;/p&gt;

&lt;p style="margin-bottom:0.0001pt;line-height:normal"&gt;&lt;span style="font-size:9pt;font-family:&amp;quot;Courier New&amp;quot;;color:black"&gt;&lt;span&gt;              &lt;/span&gt;}&lt;/span&gt;&lt;/p&gt;

&lt;p style="margin-bottom:0.0001pt;line-height:normal"&gt;&lt;span style="font-size:9pt;font-family:&amp;quot;Courier New&amp;quot;;color:black"&gt;&lt;span&gt;          &lt;/span&gt;c.Registered__c += 1;&lt;/span&gt;&lt;/p&gt;

&lt;p style="margin-bottom:0.0001pt;line-height:normal"&gt;&lt;span style="font-size:9pt;font-family:&amp;quot;Courier New&amp;quot;;color:black"&gt;&lt;span&gt;        &lt;/span&gt;} &lt;/span&gt;&lt;/p&gt;

&lt;p style="margin-bottom:0.0001pt;line-height:normal"&gt;&lt;span style="font-size:9pt;font-family:&amp;quot;Courier New&amp;quot;;color:black"&gt;&lt;span&gt;     &lt;/span&gt;} &lt;/span&gt;&lt;/p&gt;

&lt;p style="margin-bottom:0.0001pt;line-height:normal"&gt;&lt;span style="font-size:9pt;font-family:&amp;quot;Courier New&amp;quot;;color:black"&gt;&lt;span&gt;    &lt;/span&gt;&lt;/span&gt;&lt;/p&gt;

&lt;p style="margin-bottom:0.0001pt;line-height:normal"&gt;&lt;span style="font-size:9pt;font-family:&amp;quot;Courier New&amp;quot;;color:black"&gt;&lt;span&gt;    &lt;/span&gt;update(c);&lt;/span&gt;&lt;/p&gt;

&lt;p style="margin-bottom:0.0001pt;line-height:normal"&gt;&lt;span style="font-size:9pt;font-family:&amp;quot;Courier New&amp;quot;;color:black"&gt;}&lt;/span&gt;&lt;/p&gt;



&lt;p&gt; The result looks like this:&lt;/p&gt;&lt;p&gt;&lt;a href="http://blogs.salesforce.com/.a/6a00e54ee3905b883301156fb80628970c-pi" style="display:inline"&gt;&lt;img alt="Campaign Member Trigger pic 4" border="0" src="http://blogs.salesforce.com/.a/6a00e54ee3905b883301156fb80628970c-800wi" title="Campaign Member Trigger pic 4"&gt;&lt;/a&gt; &lt;br&gt;&lt;/p&gt;

&lt;p&gt;&lt;span&gt;&lt;img height="323" src="javascript:void(0);" width="617"&gt;&lt;/span&gt;&lt;/p&gt;

&lt;p&gt;For inquiring minds, here’s what’s happening at each line in English: &lt;/p&gt;

&lt;p style="text-indent:-0.25in"&gt;&lt;span&gt;&lt;span&gt;1)&lt;span style="font-family:&amp;quot;Times New Roman&amp;quot;;font-style:normal;font-variant:normal;font-weight:normal;font-size:7pt;line-height:normal;font-size-adjust:none;font-stretch:normal"&gt;      &lt;/span&gt;&lt;/span&gt;&lt;/span&gt;Run
the trigger called UpdateCmpRSVP on all campaign members that are updated&lt;/p&gt;

&lt;p style="text-indent:-0.25in"&gt;&lt;span&gt;&lt;span&gt;2)&lt;span style="font-family:&amp;quot;Times New Roman&amp;quot;;font-style:normal;font-variant:normal;font-weight:normal;font-size:7pt;line-height:normal;font-size-adjust:none;font-stretch:normal"&gt;      &lt;/span&gt;&lt;/span&gt;&lt;/span&gt;Find
the ID of the campaign for these campaigns&lt;/p&gt;

&lt;p style="text-indent:-0.25in"&gt;&lt;span&gt;&lt;span&gt;3)&lt;span style="font-family:&amp;quot;Times New Roman&amp;quot;;font-style:normal;font-variant:normal;font-weight:normal;font-size:7pt;line-height:normal;font-size-adjust:none;font-stretch:normal"&gt;      &lt;/span&gt;&lt;/span&gt;&lt;/span&gt;Loop
through all the campaign members that were updated&lt;/p&gt;

&lt;p style="text-indent:-0.25in"&gt;&lt;span&gt;&lt;span&gt;4)&lt;span style="font-family:&amp;quot;Times New Roman&amp;quot;;font-style:normal;font-variant:normal;font-weight:normal;font-size:7pt;line-height:normal;font-size-adjust:none;font-stretch:normal"&gt;      &lt;/span&gt;&lt;/span&gt;&lt;/span&gt;If
the Status = RSVP Yes, do the rest of the stuff, otherwise,s do nothing&lt;/p&gt;

&lt;p style="text-indent:-0.25in"&gt;&lt;span&gt;&lt;span&gt;5)&lt;span style="font-family:&amp;quot;Times New Roman&amp;quot;;font-style:normal;font-variant:normal;font-weight:normal;font-size:7pt;line-height:normal;font-size-adjust:none;font-stretch:normal"&gt;      &lt;/span&gt;&lt;/span&gt;&lt;/span&gt;If
the Campaign custom field doesn’t have a value, then do the stuff on the next
line&lt;/p&gt;

&lt;p style="text-indent:-0.25in"&gt;&lt;span&gt;&lt;span&gt;6)&lt;span style="font-family:&amp;quot;Times New Roman&amp;quot;;font-style:normal;font-variant:normal;font-weight:normal;font-size:7pt;line-height:normal;font-size-adjust:none;font-stretch:normal"&gt;      &lt;/span&gt;&lt;/span&gt;&lt;/span&gt;Set
the campaign field RSVP_Yes__c to 0 if it was null in line 5&lt;/p&gt;

&lt;p style="text-indent:-0.25in"&gt;&lt;span&gt;&lt;span&gt;7)&lt;span style="font-family:&amp;quot;Times New Roman&amp;quot;;font-style:normal;font-variant:normal;font-weight:normal;font-size:7pt;line-height:normal;font-size-adjust:none;font-stretch:normal"&gt;      &lt;/span&gt;&lt;/span&gt;&lt;/span&gt;Signals
the end of stuff to do for the line 5 criteria&lt;/p&gt;

&lt;p style="text-indent:-0.25in"&gt;&lt;span&gt;&lt;span&gt;8)&lt;span style="font-family:&amp;quot;Times New Roman&amp;quot;;font-style:normal;font-variant:normal;font-weight:normal;font-size:7pt;line-height:normal;font-size-adjust:none;font-stretch:normal"&gt;      &lt;/span&gt;&lt;/span&gt;&lt;/span&gt;Now
add 1 to the campaign field RSVP_Yes__c &lt;/p&gt;

&lt;p style="text-indent:-0.25in"&gt;&lt;span&gt;&lt;span&gt;9)&lt;span style="font-family:&amp;quot;Times New Roman&amp;quot;;font-style:normal;font-variant:normal;font-weight:normal;font-size:7pt;line-height:normal;font-size-adjust:none;font-stretch:normal"&gt;      &lt;/span&gt;&lt;/span&gt;&lt;/span&gt;Signals
the end of stuff to do for the line 4 criteria&lt;/p&gt;

&lt;p style="text-indent:-0.25in"&gt;&lt;span&gt;&lt;span&gt;10)&lt;span style="font-family:&amp;quot;Times New Roman&amp;quot;;font-style:normal;font-variant:normal;font-weight:normal;font-size:7pt;line-height:normal;font-size-adjust:none;font-stretch:normal"&gt;   &lt;/span&gt;&lt;/span&gt;&lt;/span&gt;Update
the campaign&lt;/p&gt;

&lt;p style="text-indent:-0.25in"&gt;&lt;span&gt;&lt;span&gt;11)&lt;span style="font-family:&amp;quot;Times New Roman&amp;quot;;font-style:normal;font-variant:normal;font-weight:normal;font-size:7pt;line-height:normal;font-size-adjust:none;font-stretch:normal"&gt;   &lt;/span&gt;&lt;/span&gt;&lt;/span&gt;Signals
the end of the trigger&lt;/p&gt;

&lt;p&gt;Note that this trigger isn’t best practice, and though it
works, the triggers you create should generally have more checks to test to check for bad
results, such as if the RSVP_Yes__c field doesn’t exist as well.&lt;/p&gt;

&lt;p&gt; &lt;/p&gt;&lt;/div&gt;
&lt;img src="http://feeds.feedburner.com/~r/sfm/~4/tVnO9EYnb-I" height="1" width="1"&gt;
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/K-UPOyPvMh5llPLfnDon0485x9U/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/K-UPOyPvMh5llPLfnDon0485x9U/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/K-UPOyPvMh5llPLfnDon0485x9U/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/K-UPOyPvMh5llPLfnDon0485x9U/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/x2od_greadershared?a=QjOYzQQXIgY:kqLezA8AFhE:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/x2od_greadershared?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/x2od_greadershared?a=QjOYzQQXIgY:kqLezA8AFhE:dnMXMwOfBR0"&gt;&lt;img src="http://feeds.feedburner.com/~ff/x2od_greadershared?d=dnMXMwOfBR0" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/x2od_greadershared?a=QjOYzQQXIgY:kqLezA8AFhE:V_sGLiPBpWU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/x2od_greadershared?i=QjOYzQQXIgY:kqLezA8AFhE:V_sGLiPBpWU" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/x2od_greadershared/~4/QjOYzQQXIgY" height="1" width="1"/&gt;</content><author><name>John Kucera</name></author><source gr:stream-id="feed/http://blogs.salesforce.com/marketing/atom.xml"><id>tag:google.com,2005:reader/feed/http://blogs.salesforce.com/marketing/atom.xml</id><title type="html">Salesforce Marketing Blog</title><link rel="alternate" href="http://blogs.salesforce.com/marketing/" type="text/html" /></source><feedburner:origLink>http://feedproxy.google.com/~r/sfm/~3/tVnO9EYnb-I/track-campaign-rsvps-with-campaign-member-triggers-summer-09-part-1.html</feedburner:origLink></entry><entry gr:crawl-timestamp-msec="1246411686892"><id gr:original-id="">tag:google.com,2005:reader/item/8862da4833103f28</id><title type="html">Content Best Practices</title><published>2009-06-29T22:23:41Z</published><updated>2009-06-29T22:23:41Z</updated><link rel="alternate" href="http://feedproxy.google.com/~r/x2od_greadershared/~3/KdzKHa8TyDQ/Content_Best_Practices" type="text/html" /><author><name>Cory Vander Jagt</name></author><source gr:stream-id="feed/http://wiki.apexdevnet.com/index.php?title=Special:Recentchanges&amp;feed=rss"><id>tag:google.com,2005:reader/feed/http://wiki.apexdevnet.com/index.php?title=Special:Recentchanges&amp;feed=rss</id><title type="html">developer.force.com - Recent changes [en]</title><link rel="alternate" href="http://wiki.developerforce.com/index.php/Special:Recentchanges" type="text/html" /></source><content type="html">&lt;p&gt;&lt;/p&gt;
&lt;p&gt;&lt;b&gt;New page&lt;/b&gt;&lt;/p&gt;&lt;div&gt;With Salesforce CRM Content you can organize, share, search, and manage content within your organization and across key areas of the Salesforce application. Content can include all file types, from traditional business documents such as Microsoft® PowerPoint presentations to audio files, video files, Web pages, and Google® docs.&lt;br&gt;
&lt;br&gt;
&lt;br&gt;
&amp;lt;youtube&amp;gt;w0ev0u46Q0k&amp;lt;/youtube&amp;gt;&lt;br&gt;
&lt;br&gt;
&lt;br&gt;
=Overview=&lt;br&gt;
&lt;br&gt;
Salesforce CRM Content simplifies content management by incorporating user-friendly features into the following tasks:&lt;br&gt;
&lt;br&gt;
==Organizing==&lt;br&gt;
&lt;br&gt;
Rather than keep files in folders that make content difficult to find, Salesforce CRM Content stores files in fully searchable file repositories known as workspaces. Administrators can create multiple workspaces based on any classification, such as department name, job function, or team, then configure user permissions within the workspace to balance content access with security. Authors assign descriptive labels called tags to help classify and organize content across workspaces. You can view a list of all content that belongs to a particular tag or filter search results based on a tag or tags. Salesforce CRM Content also provides personal workspaces, which allow users to reduce the clutter on their desktops while using content-management benefits such as document search and version control.&lt;br&gt;
&lt;br&gt;
==Searching==&lt;br&gt;
&lt;br&gt;
The powerful Salesforce CRM Content search engine scans the entire body of the document as well as content properties such as the title, description, tags, categorization data, and author name. You can filter searches by featured content, file format, author, tags, workspaces, or custom fields and then view the results with various levels of detail, providing an easy way to find relevant content quickly. The &amp;quot;smart bar&amp;quot; graphic for downloads, comments, ratings, and subscribers allows you to compare documents within a search result set.&lt;br&gt;
&lt;br&gt;
==Subscribing==&lt;br&gt;
&lt;br&gt;
Once a file is located, subscribing to it ensures that you receive an email notification when new versions are published or changes are made to the file's properties. You can also subscribe to authors, tags, and workspaces, thus reducing the time spent searching for new or updated content. Notification emails will arrive real-time or once daily, depending on your preferences.&lt;br&gt;
&lt;br&gt;
==Previewing==&lt;br&gt;
&lt;br&gt;
In Salesforce CRM Content you do not need to download a large document to determine if its content is relevant to you. The content details page provides document details at a glance, including document title, author, description, tags, workspaces, comments, votes, versions, subscribers, and downloads. If the document is a Microsoft PowerPoint, Word, Excel, or Adobe® PDF file, you can preview the entire file in your browser without downloading it. Microsoft Office 2007 files cannot be previewed.&lt;br&gt;
&lt;br&gt;
==Contributing==&lt;br&gt;
&lt;br&gt;
Uploading new or revised files in Salesforce CRM Content is fast and easy. During the upload process you choose a workspace and content type for your file or Web link, write a description, assign one or more tags, and fill out any customized fields that help categorize and define your content. Version management does not require checking files in and out, rather, you simply upload a new version of the file and Salesforce CRM Content maintains a version list accessible from the content details page. You can download past versions of a file and read all reason-for-change comments that an author may have included with a new version.&lt;br&gt;
&lt;br&gt;
==Reviewing Usage and Providing Feedback==&lt;br&gt;
&lt;br&gt;
Salesforce CRM Content provides several methods for determining whether content is valuable to readers. Featuring a piece of content increases its visibility in search results. Voting thumbs up or thumbs down on a file, Web link, or Google doc and adding comments allow you to participate directly in content improvement. You can also see who has subscribed to a file, link, or doc and how many times files have been downloaded. The Reports tab allows you to create standard or custom reports on Salesforce CRM Content data. If the content delivery feature is enabled, you can send content to colleagues, leads, and contacts and then track how often the content has been previewed or downloaded.&lt;br&gt;
&lt;br&gt;
==Sharing Content in Salesforce==&lt;br&gt;
&lt;br&gt;
Salesforce CRM Content is also integrated with leads, accounts, contacts, opportunities, cases, products, and custom objects. If Salesforce CRM Content functionality is enabled on the Opportunity tab, for example, Salesforce CRM Content uses the fields on the opportunity detail page to search for files that may be relevant to that opportunity. You can drill down in the search results as needed or run your own search and then attach one or more files to the opportunity. The most current version of the file will be available on the detail page for the life of the opportunity.&lt;br&gt;
&lt;br&gt;
=Implementation Tips=&lt;br&gt;
*To implement Salesforce CRM Content for your organization, see [https://na1.salesforce.com/help/doc/en/content_initialsetup.htm Setting Up Salesforce CRM Content].&lt;br&gt;
*Before creating workspaces, review the files you plan to store in Salesforce CRM Content to determine how many workspaces you need and what content belongs in each workspace. Users are given access to content based on workspace.&lt;br&gt;
*If you have a large number of Salesforce CRM Content users, create a public group and add the group to a workspace rather than adding users to the workspace individually.&lt;br&gt;
*To enable Salesforce CRM Content functionality for leads, accounts, contacts, opportunities, cases, products, or custom objects, add the Related Content related list to the appropriate page layout. &lt;br&gt;
*To send web-formatted content to colleagues, leads, or contacts and associate it with Salesforce records, add the Content Deliveries related list to the page layout for leads, accounts, contacts, opportunities, cases, campaigns, or custom objects. For more information about content deliveries and a full list of implementation tips and best practices, see [https://na1.salesforce.com/help/doc/en/content_delivery_about.htm Setting up Content Deliveries.]&lt;br&gt;
*To allow users to publish, edit, and search in any of the Salesforce-supported languages, go to Setup | Customize | Salesforce CRM Content | Settings and click Enable multi-language search and contribute.&lt;br&gt;
*To associate Google docs with a workspace, the Add Google Doc to Salesforce service must be activated for your organization. For more information, see [https://na1.salesforce.com/help/doc/en/google_docs_activate.htm Activating Google Docs in Salesforce].&lt;br&gt;
*If you want PDFs to open inline rather than in a separate window, go to Setup | Customize | Salesforce CRM Content | Settings and click Do not open PDFs in a separate window.&lt;br&gt;
*Salesforce CRM Content is available via the Customer Portal and Partner Portal. For more information, see [https://na1.salesforce.com/help/doc/en/customer_portal_content.htm Enabling Salesforce CRM Content in the Customer Portal] and [https://na1.salesforce.com/help/doc/en/partner_portal_content.htm Enabling Salesforce CRM Content in the Partner Portal].&lt;br&gt;
*For information about using Google Docs with Salesforce CRM Content, see [https://na1.salesforce.com/help/doc/en/content_googledoc_contribute.htm Contributing Google Docs to Salesforce CRM Content].&lt;br&gt;
*Microsoft Office 2007 files cannot be previewed on the content details page or in the content-delivery preview player. Also, the Salesforce CRM Content search engine does not support full-text search for Microsoft Office 2007 files.&lt;br&gt;
&lt;br&gt;
=Best Practices=&lt;br&gt;
*If you are using the Related Content related list on Salesforce objects, align your custom content fields with the standard and custom fields on the object to increase the accuracy of a &amp;quot;Find Content&amp;quot; search. Clicking the Find Content button on the related list matches content to the fields on the record and displays search results containing the related content.&lt;br&gt;
*To ensure that content is classified consistently, define consistent tag names with your contributors. For example, by establishing tag names at the outset, you can avoid having tags such as &amp;quot;channel&amp;quot; and &amp;quot;channels&amp;quot; in the same workspace.&lt;br&gt;
*Avoid using too many tags. The search engine helps users find specific content, whereas tags enable users to browse and subscribe. Therefore, excessive tagging creates unnecessary clutter.&lt;br&gt;
*To highlight valuable content and make it easier to find, mark it as &amp;quot;featured&amp;quot; on the content details page. Featured content receives a higher priority than similar content in search results, and appears on the Workspaces tab for easy access. To feature content, users must have the Feature Content option checked in their workspace permission.&lt;br&gt;
*If your organization uses Google Docs, encourage workspace members to add their Google docs to a workspace. Including Google docs in Salesforce CRM Content allows users to access all types of content from a single location and apply Salesforce CRM Content functionality, such as votes, comments, and subscriptions, to Google docs.&lt;/div&gt;
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/R5LF9YjstRniG3-YpaZ7CNiECi8/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/R5LF9YjstRniG3-YpaZ7CNiECi8/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/R5LF9YjstRniG3-YpaZ7CNiECi8/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/R5LF9YjstRniG3-YpaZ7CNiECi8/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/x2od_greadershared?a=KdzKHa8TyDQ:Mdpz3sxq5Zs:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/x2od_greadershared?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/x2od_greadershared?a=KdzKHa8TyDQ:Mdpz3sxq5Zs:dnMXMwOfBR0"&gt;&lt;img src="http://feeds.feedburner.com/~ff/x2od_greadershared?d=dnMXMwOfBR0" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/x2od_greadershared?a=KdzKHa8TyDQ:Mdpz3sxq5Zs:V_sGLiPBpWU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/x2od_greadershared?i=KdzKHa8TyDQ:Mdpz3sxq5Zs:V_sGLiPBpWU" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/x2od_greadershared/~4/KdzKHa8TyDQ" height="1" width="1"/&gt;</content><feedburner:origLink>http://wiki.developerforce.com/index.php/Content_Best_Practices</feedburner:origLink></entry><entry gr:crawl-timestamp-msec="1246411696801"><id gr:original-id="">tag:google.com,2005:reader/item/23646c8bf232453b</id><title type="html">PRM Best Practices</title><published>2009-06-29T22:30:44Z</published><updated>2009-06-29T22:30:44Z</updated><link rel="alternate" href="http://feedproxy.google.com/~r/x2od_greadershared/~3/BdcIRQBRuUg/PRM_Best_Practices" type="text/html" /><author><name>Cory Vander Jagt</name></author><source gr:stream-id="feed/http://wiki.apexdevnet.com/index.php?title=Special:Recentchanges&amp;feed=rss"><id>tag:google.com,2005:reader/feed/http://wiki.apexdevnet.com/index.php?title=Special:Recentchanges&amp;feed=rss</id><title type="html">developer.force.com - Recent changes [en]</title><link rel="alternate" href="http://wiki.developerforce.com/index.php/Special:Recentchanges" type="text/html" /></source><content type="html">&lt;p&gt;&lt;span&gt;Salesforce Partners Overview -&lt;/span&gt; &lt;/p&gt;

			&lt;table border="0" width="98%" cellpadding="0" cellspacing="4" style="background-color:white"&gt;
			&lt;tr&gt;
				&lt;td colspan="2" width="50%" align="center" style="background-color:white"&gt;←Older revision&lt;/td&gt;
				&lt;td colspan="2" width="50%" align="center" style="background-color:white"&gt;Revision as of 22:30, 29 June 2009&lt;/td&gt;
			&lt;/tr&gt;
			&lt;tr&gt;&lt;td colspan="2" align="left"&gt;&lt;strong&gt;Line 8:&lt;/strong&gt;&lt;/td&gt;
&lt;td colspan="2" align="left"&gt;&lt;strong&gt;Line 8:&lt;/strong&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td&gt; &lt;/td&gt;&lt;td style="background:#eee;font-size:smaller"&gt;&lt;/td&gt;&lt;td&gt; &lt;/td&gt;&lt;td style="background:#eee;font-size:smaller"&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td&gt; &lt;/td&gt;&lt;td style="background:#eee;font-size:smaller"&gt;This page contains resources for consultants implementing Salesforce Partners (PRM).  It is not an exhaustive listing, but rather a collection of relevant content and best practices to be aware of when designing and delivering a solution based on this product to a customer.&lt;/td&gt;&lt;td&gt; &lt;/td&gt;&lt;td style="background:#eee;font-size:smaller"&gt;This page contains resources for consultants implementing Salesforce Partners (PRM).  It is not an exhaustive listing, but rather a collection of relevant content and best practices to be aware of when designing and delivering a solution based on this product to a customer.&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan="2"&gt; &lt;/td&gt;&lt;td&gt;+&lt;/td&gt;&lt;td style="background:#cfc;font-size:smaller"&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan="2"&gt; &lt;/td&gt;&lt;td&gt;+&lt;/td&gt;&lt;td style="background:#cfc;font-size:smaller"&gt;=Implementation Tips=&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan="2"&gt; &lt;/td&gt;&lt;td&gt;+&lt;/td&gt;&lt;td style="background:#cfc;font-size:smaller"&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan="2"&gt; &lt;/td&gt;&lt;td&gt;+&lt;/td&gt;&lt;td style="background:#cfc;font-size:smaller"&gt;*Salesforce provides two different portals to help you better manage your partners—the Partner Portal and the PRM Portal.&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan="2"&gt; &lt;/td&gt;&lt;td&gt;+&lt;/td&gt;&lt;td style="background:#cfc;font-size:smaller"&gt;**If you purchased or enabled PRM after February 2008, you are using the Partner Portal. &lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan="2"&gt; &lt;/td&gt;&lt;td&gt;+&lt;/td&gt;&lt;td style="background:#cfc;font-size:smaller"&gt;**If you purchased or enabled PRM before February 2008, you are using the PRM Portal, unless you explicitly migrated to the Partner Portal. &lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan="2"&gt; &lt;/td&gt;&lt;td&gt;+&lt;/td&gt;&lt;td style="background:#cfc;font-size:smaller"&gt;*Portal users can only log into Partner Portals assigned to their profile. To assign a profile to a Partner Portal, select the name of a portal from the Partner Portal Setup page, click Edit Profiles in the Assigned Profiles section, and select the Active checkbox next to the profile you want to assign to the portal.&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan="2"&gt; &lt;/td&gt;&lt;td&gt;+&lt;/td&gt;&lt;td style="background:#cfc;font-size:smaller"&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan="2"&gt; &lt;/td&gt;&lt;td&gt;+&lt;/td&gt;&lt;td style="background:#cfc;font-size:smaller"&gt;A portal user can access all the Partner Portals assigned to his or her profile with one username and password.&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan="2"&gt; &lt;/td&gt;&lt;td&gt;+&lt;/td&gt;&lt;td style="background:#cfc;font-size:smaller"&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan="2"&gt; &lt;/td&gt;&lt;td&gt;+&lt;/td&gt;&lt;td style="background:#cfc;font-size:smaller"&gt;You can view the number of users associated with each profile assigned to a Partner Portal on the Users field on the Assigned Profiles section.&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan="2"&gt; &lt;/td&gt;&lt;td&gt;+&lt;/td&gt;&lt;td style="background:#cfc;font-size:smaller"&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan="2"&gt; &lt;/td&gt;&lt;td&gt;+&lt;/td&gt;&lt;td style="background:#cfc;font-size:smaller"&gt;*The login URL of each Partner Portal you create contains a unique identifier, such as portalId=060D00000000Q1F. The unique identifier determines the specific portal a user can access. If a user accesses a login URL that does not contain a unique identifier, they are automatically directed to the login URL of the first Partner Portal you created. Note that portal users can only log into a Partner Portal using the portal's login page and not through the Salesforce login page.&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan="2"&gt; &lt;/td&gt;&lt;td&gt;+&lt;/td&gt;&lt;td style="background:#cfc;font-size:smaller"&gt;*The settings on the following items apply to both your organization and your Partner Portals:&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan="2"&gt; &lt;/td&gt;&lt;td&gt;+&lt;/td&gt;&lt;td style="background:#cfc;font-size:smaller"&gt;**List views&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan="2"&gt; &lt;/td&gt;&lt;td&gt;+&lt;/td&gt;&lt;td style="background:#cfc;font-size:smaller"&gt;**Search layouts&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan="2"&gt; &lt;/td&gt;&lt;td&gt;+&lt;/td&gt;&lt;td style="background:#cfc;font-size:smaller"&gt;**Workflow alerts&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan="2"&gt; &lt;/td&gt;&lt;td&gt;+&lt;/td&gt;&lt;td style="background:#cfc;font-size:smaller"&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan="2"&gt; &lt;/td&gt;&lt;td&gt;+&lt;/td&gt;&lt;td style="background:#cfc;font-size:smaller"&gt;=Best Practices=&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan="2"&gt; &lt;/td&gt;&lt;td&gt;+&lt;/td&gt;&lt;td style="background:#cfc;font-size:smaller"&gt;*Because you can uniquely customize the fonts, colors, email templates, and login message of each Partner Portal you create, you can build a Partner Portal for each partner organization supported by your organization, or for different partner tiers or communities. &lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan="2"&gt; &lt;/td&gt;&lt;td&gt;+&lt;/td&gt;&lt;td style="background:#cfc;font-size:smaller"&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan="2"&gt; &lt;/td&gt;&lt;td&gt;+&lt;/td&gt;&lt;td style="background:#cfc;font-size:smaller"&gt;Note - JavaScript and CSS code are automatically removed from HTML files used as the portal login message.&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan="2"&gt; &lt;/td&gt;&lt;td&gt;+&lt;/td&gt;&lt;td style="background:#cfc;font-size:smaller"&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan="2"&gt; &lt;/td&gt;&lt;td&gt;+&lt;/td&gt;&lt;td style="background:#cfc;font-size:smaller"&gt;*You cannot delete a Partner Portal, but you can prevent users from logging into a portal by deselecting the Login Enabled checkbox.&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan="2"&gt; &lt;/td&gt;&lt;td&gt;+&lt;/td&gt;&lt;td style="background:#cfc;font-size:smaller"&gt;*You can create multiple Partner Portals that display different tabs for users with the same profile, as long as the profile has access to each object displayed on a tab. &lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan="2"&gt; &lt;/td&gt;&lt;td&gt;+&lt;/td&gt;&lt;td style="background:#cfc;font-size:smaller"&gt;*You can merge accounts that have contacts associated with the same type of portal. For example, you can merge accounts that have contacts associated with a Partner Portal or Customer Portal, but you cannot merge an account that has contacts associated with a Partner Portal with an account that has contacts associated with a Customer Portal.&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan="2"&gt; &lt;/td&gt;&lt;td&gt;+&lt;/td&gt;&lt;td style="background:#cfc;font-size:smaller"&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan="2"&gt; &lt;/td&gt;&lt;td&gt;+&lt;/td&gt;&lt;td style="background:#cfc;font-size:smaller"&gt;You must have the &amp;quot;Manage Users&amp;quot; profile permission to merge accounts associated with portals.&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan="2"&gt; &lt;/td&gt;&lt;td&gt;+&lt;/td&gt;&lt;td style="background:#cfc;font-size:smaller"&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan="2"&gt; &lt;/td&gt;&lt;td&gt;+&lt;/td&gt;&lt;td style="background:#cfc;font-size:smaller"&gt;*When you enable the Partner Portal, the default portal will be set as Login Enabled. Disable that setting, and re-enable it when the default portal is ready for partner users to login.&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan="2"&gt; &lt;/td&gt;&lt;td&gt;+&lt;/td&gt;&lt;td style="background:#cfc;font-size:smaller"&gt;*Let your partner users know they can make their channel manager the owner of an object.&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan="2"&gt; &lt;/td&gt;&lt;td&gt;+&lt;/td&gt;&lt;td style="background:#cfc;font-size:smaller"&gt;*Create a home page layout for your partner users with custom links to frequently used features.&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan="2"&gt; &lt;/td&gt;&lt;td&gt;+&lt;/td&gt;&lt;td style="background:#cfc;font-size:smaller"&gt;*Customize the Custom Links home page component to include links that your partner users can use, or remove it from the home page layout.&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan="2"&gt; &lt;/td&gt;&lt;td&gt;+&lt;/td&gt;&lt;td style="background:#cfc;font-size:smaller"&gt;*Partner users cannot set reminders on tasks. Create a process to help them manage their tasks without reminders.&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan="2"&gt; &lt;/td&gt;&lt;td&gt;+&lt;/td&gt;&lt;td style="background:#cfc;font-size:smaller"&gt;*If you are migrating partner users from the PRM Portal to the Partner Portal, they can log into both portals for testing purposes. To enable partner users to log into both portals:&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan="2"&gt; &lt;/td&gt;&lt;td&gt;+&lt;/td&gt;&lt;td style="background:#cfc;font-size:smaller"&gt;**Edit the partner user profile and verify that the API Only User permission is not selected.&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan="2"&gt; &lt;/td&gt;&lt;td&gt;+&lt;/td&gt;&lt;td style="background:#cfc;font-size:smaller"&gt;**Assign that profile to the first Partner Portal on the Partners Settings page.&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td&gt; &lt;/td&gt;&lt;td style="background:#eee;font-size:smaller"&gt;&lt;/td&gt;&lt;td&gt; &lt;/td&gt;&lt;td style="background:#eee;font-size:smaller"&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td&gt; &lt;/td&gt;&lt;td style="background:#eee;font-size:smaller"&gt;=Consultant Resources=&lt;/td&gt;&lt;td&gt; &lt;/td&gt;&lt;td style="background:#eee;font-size:smaller"&gt;=Consultant Resources=&lt;/td&gt;&lt;/tr&gt;

			&lt;/table&gt;
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/ZqHCbH_Z_iNGaYqVIx7quteEL_I/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/ZqHCbH_Z_iNGaYqVIx7quteEL_I/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/ZqHCbH_Z_iNGaYqVIx7quteEL_I/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/ZqHCbH_Z_iNGaYqVIx7quteEL_I/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/x2od_greadershared?a=BdcIRQBRuUg:8wJo5wNgfj8:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/x2od_greadershared?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/x2od_greadershared?a=BdcIRQBRuUg:8wJo5wNgfj8:dnMXMwOfBR0"&gt;&lt;img src="http://feeds.feedburner.com/~ff/x2od_greadershared?d=dnMXMwOfBR0" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/x2od_greadershared?a=BdcIRQBRuUg:8wJo5wNgfj8:V_sGLiPBpWU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/x2od_greadershared?i=BdcIRQBRuUg:8wJo5wNgfj8:V_sGLiPBpWU" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/x2od_greadershared/~4/BdcIRQBRuUg" height="1" width="1"/&gt;</content><feedburner:origLink>http://wiki.developerforce.com/index.php/PRM_Best_Practices</feedburner:origLink></entry><entry gr:crawl-timestamp-msec="1246411882798"><id gr:original-id="tag:typepad.com,2003:post-68458763">tag:google.com,2005:reader/item/f2465d680bf62d2d</id><title type="html">Salesforce Sites Event Registration Pages (Summer 09 part 3)</title><published>2009-06-30T20:37:42Z</published><updated>2009-06-30T20:46:54Z</updated><link rel="alternate" href="http://feedproxy.google.com/~r/x2od_greadershared/~3/vANBqeZiOxg/salesforce-sites-event-registration-pages-summer-09-part-3.html" type="text/html" /><content xml:base="http://blogs.salesforce.com/marketing/" xml:lang="en-US" type="html">&lt;div&gt;&lt;p style="font-size:14px;font-family:Verdana"&gt;Salesforce just launched Force.com Sites and it&amp;#39;s free for all Enterprise and Unlimited Edition subscribers!  Here&amp;#39;s a great intro to Force.com Sites, including some possibilities for driving value to your organization leveraging it&amp;#39;s power:&lt;/p&gt;&lt;p style="font-size:14px;font-family:Verdana"&gt;&lt;br&gt;&lt;embed allowFullScreen="true" allowScriptAccess="never" src="http://www.youtube.com/v/8tf_WaD52mI&amp;amp;hl=en&amp;amp;fs=1&amp;amp;" width="560" height="340" wmode="transparent" type="application/x-shockwave-flash"&gt;&lt;/embed&gt;&lt;/p&gt;&lt;br&gt;

&lt;p style="font-size:14px;font-family:Verdana"&gt;My favorite application of Sites is creating landing pages that directly update responses in Salesforce campaigns.  Some advantages of using Sites for response capture on landing pages:&lt;/p&gt;
&lt;br&gt;
&lt;p style="font-size:14px;font-family:Verdana"&gt; - Fewer duplicate leads&lt;/p&gt;&lt;p style="font-size:14px;font-family:Verdana"&gt; - Cleaner response data&lt;/p&gt;&lt;p style="font-size:14px;font-family:Verdana"&gt; - Secure, hosted, and scalable&lt;/p&gt;

&lt;br&gt;
&lt;p&gt;&lt;span style="font-size:14px;font-family:Verdana"&gt;Sites minimizes dupe leads by updating the campaign member record directly instead of creating a duplicate lead that has to be merged back to the original lead or contact.  Sites is a clean, hassle-free way to create webforms because any picklist option you add in Salesforce is immediately available on the web form.  This means if you add an option to a &amp;quot;Product Interest&amp;quot; custom field on campaign member in Salesforce, this product can immediately appear on the Sites pages your prospects and customers see,  minimizing maintenance and creating a simple way to keep data clean.  Finally, Sites is battle tested against security threats and huge traffic spikes so you can rest easy your customers will have a consistent experience.&lt;/span&gt;&lt;/p&gt; 

&lt;br&gt;
&lt;p style="font-size:14px;font-family:Verdana"&gt;Now we&amp;#39;ll get into the meat: how to leverage Sites for event registration pages and set up your first page.  Using &lt;a href="http://blogs.salesforce.com/marketing/2009/06/automated-multiwave-campaigns-in-salesforce-marketing-summer-09-part-2.html"&gt;&lt;u&gt;examples from the last post&lt;/u&gt;&lt;/a&gt;, you can set up workflow rules to email anyone added to a campaign.  By the end of this post, you&amp;#39;ll know how to include smart links in those emails to drive prospects to your campaign member Sites Event pages, and automatically update responses from those pages such as this example:
&lt;br&gt;
&lt;br&gt;&lt;a href="http://jdk470.force.com/?id=00v3000000JIrl6AAD"&gt;&lt;u&gt;
http://jdk470.force.com/?id=00v3000000JIrl6AAD
&lt;/u&gt;&lt;/a&gt;

&lt;br&gt;&lt;br&gt;
&lt;a href="http://blogs.salesforce.com/.a/6a00e54ee3905b883301157169b389970b-pi" style="display:inline"&gt;&lt;img alt="Campaign Member Sites pic 0" src="http://blogs.salesforce.com/.a/6a00e54ee3905b883301157169b389970b-800wi" title="Campaign Member Sites pic 0" border="0"&gt;&lt;/a&gt;

&lt;br&gt;
&lt;br&gt;
To get there, we'll explore the 3 key pieces to your first site page:&lt;br&gt;&lt;br&gt;1) Set up your email links to include campaign member Id's in the URL&lt;br&gt;2) Set up Force.com Sites security permissions to allow access to relevant campaign members&lt;br&gt;3) Set up your Visualforce page to tie to campaign members&lt;/p&gt;

&lt;p style="text-align:right;font-size:14px;font-family:Veranda"&gt;&lt;a href="http://blogs.salesforce.com/marketing/2009/06/salesforce-sites-event-registration-pages-summer-09-part-3.html"&gt;&lt;u&gt;Read More &amp;gt;&lt;/u&gt;&lt;/a&gt;&lt;/p&gt;


&lt;p&gt;&lt;strong&gt;&lt;span style="font-size:17px;font-family:Verdana"&gt;1) Setting up email links to include campaign member Id's in the URL&lt;/span&gt;&lt;/strong&gt;&lt;br&gt;&lt;span style="font-size:14px;font-family:Verdana"&gt;The secret sauce to a Sites page is a variable in the URL that communicates which campaign member to update.  You can either sign up for a free URL such as &amp;lt;yourcompanyname&amp;gt;.force.com or route Sites to your branded URL such as www.&amp;lt;yourcompanyname&amp;gt;.com.  To pass the ID to Sites, the URL needs to look something like this:
&lt;br&gt;
&lt;br&gt;
http://acme.force.com/?id=00v3000000JIrl6AAD
&lt;br&gt;
&lt;br&gt;
or 
this:&lt;br&gt;
&lt;br&gt;
http://www.acme.com/LandingPageName?id=00v3000000JIrl6AAD
&lt;br&gt;
&lt;br&gt;
In &lt;a href="http://blogs.salesforce.com/marketing/2009/06/automated-multiwave-campaigns-in-salesforce-marketing-summer-09-part-2.html"&gt;&lt;u&gt;the last post&lt;/u&gt;&lt;/a&gt;

, we saw how you can send emails to campaign members.  Using campaign member email templates, it&amp;#39;s easy to send an email to both leads and contacts and include their campaign member ID in the URL.  &lt;/span&gt;&lt;/p&gt;&lt;p style="font-size:14px;font-family:Verdana"&gt;&lt;/p&gt;

&lt;br&gt;
&lt;p style="font-size:14px;font-family:Verdana"&gt;First, select your campaign member email template by clicking Setup--&amp;gt;Communication Templates--&amp;gt;Email Templates.&lt;/p&gt;&lt;p style="font-size:14px;font-family:Verdana"&gt;
&lt;br&gt;

&lt;a href="http://blogs.salesforce.com/.a/6a00e54ee3905b88330115715423e9970b-pi" style="display:inline"&gt;&lt;img alt="Campaign Member Sites pic 1" src="http://blogs.salesforce.com/.a/6a00e54ee3905b88330115715423e9970b-800wi" title="Campaign Member Sites pic 1" border="0"&gt;&lt;/a&gt; &lt;/p&gt;&lt;p style="font-size:14px;font-family:Verdana"&gt;&lt;/p&gt;&lt;p style="font-size:14px;font-family:Verdana"&gt;
&lt;br&gt;
Click &amp;quot;Edit HTML Version&amp;quot; or &amp;quot;Edit Text Version,&amp;quot; depending on which type you created. &lt;/p&gt;
&lt;br&gt;

&lt;p style="font-size:14px;font-family:Verdana"&gt;&lt;a href="http://blogs.salesforce.com/.a/6a00e54ee3905b8833011571542464970b-pi" style="display:inline"&gt;&lt;img alt="Campaign Member Sites pic 2" src="http://blogs.salesforce.com/.a/6a00e54ee3905b8833011571542464970b-800wi" title="Campaign Member Sites pic 2" border="0"&gt;&lt;/a&gt; &lt;/p&gt;

&lt;br&gt;
&lt;p style="font-size:14px;font-family:Verdana"&gt;Next, under "Available Merge Fields", select "Campaign Member Fields" and "Campaign ID", and copy the merge field value for campaign member ID:&lt;/p&gt;

&lt;br&gt;
&lt;p style="font-size:14px;font-family:Verdana"&gt;{!CampaignMember.CampaignId}&lt;/p&gt;

&lt;br&gt;
&lt;p style="font-size:14px;font-family:Verdana"&gt;&lt;/p&gt;&lt;p style="font-size:14px;font-family:Verdana"&gt;Highlight the area where you want to make the link, and then click on the icon next to &lt;span style="text-decoration:underline"&gt;U&lt;/span&gt; to insert a link.&lt;/p&gt;
&lt;br&gt;

&lt;p style="font-size:14px;font-family:Verdana"&gt;&lt;/p&gt;&lt;p style="font-size:14px;font-family:Verdana"&gt;&lt;span style="text-decoration:underline"&gt;&lt;a href="http://blogs.salesforce.com/.a/6a00e54ee3905b88330115705ef4b4970c-pi" style="display:inline"&gt;&lt;img alt="Campaign Member Sites pic 3" src="http://blogs.salesforce.com/.a/6a00e54ee3905b88330115705ef4b4970c-800wi" title="Campaign Member Sites pic 3" border="0"&gt;&lt;/a&gt; &lt;/span&gt; &lt;/p&gt;

&lt;br&gt;
&lt;p style="font-size:14px;font-family:Verdana"&gt;Finally, enter the URL of the link to your landing page, making sure to include the Id variable at the end of the URL:&lt;/p&gt;&lt;p style="font-size:14px;font-family:Verdana"&gt;&lt;/p&gt;
&lt;br&gt;
&lt;p style="font-size:14px;font-family:Verdana"&gt;?id={!CampaignMember.CampaignId}&lt;/p&gt;&lt;p style="font-size:14px;font-family:Verdana"&gt;
&lt;/p&gt;

&lt;br&gt;

&lt;br&gt;
&lt;p style="font-size:14px;font-family:Verdana"&gt;&lt;a href="http://blogs.salesforce.com/.a/6a00e54ee3905b88330115705ef40f970c-pi" style="display:inline"&gt;&lt;img alt="Campaign Member Sites pic 4" src="http://blogs.salesforce.com/.a/6a00e54ee3905b88330115705ef40f970c-800wi" title="Campaign Member Sites pic 4" border="0"&gt;&lt;/a&gt;
&lt;br&gt;
&lt;br&gt;
Now whenver the email is sent out, the Campaign Member Id will be included in the link, ensuring the right record is updated on the Sites page.
&lt;/p&gt;
&lt;br&gt;

&lt;p style="font-size:14px;font-family:Verdana"&gt;&lt;strong&gt;&lt;span style="font-size:17px;font-family:Verdana"&gt;2) Setting up Sites Security Permissions&lt;/span&gt;&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;&lt;br&gt;
&lt;span style="font-size:14px;font-family:Verdana"&gt;By default, Force.com Sites doesn&amp;#39;t allow public access to any of your company&amp;#39;s data, as you&amp;#39;d expect.  Therefore, in for the page to know who the campaign member is, we need to open up access to the campaign member table.  
&lt;/span&gt;&lt;/p&gt;
&lt;br&gt;
&lt;p style="font-size:14px;font-family:Verdana"&gt;
First, go to your Sites setup by clicking Setup--&amp;gt;Develop--&amp;gt;Sites, then click the Site Label to get to your site details.
&lt;/p&gt;
&lt;br&gt;

&lt;p style="font-size:14px;font-family:Verdana"&gt;&lt;a href="http://blogs.salesforce.com/.a/6a00e54ee3905b88330115715509ea970b-pi" style="display:inline"&gt;&lt;img alt="Campaign Member Sites pic 5" src="http://blogs.salesforce.com/.a/6a00e54ee3905b88330115715509ea970b-800wi" title="Campaign Member Sites pic 5" border="0"&gt;&lt;/a&gt;
&lt;br&gt;&lt;br&gt;Click on Public Access Settings, then click Edit to view the profile assigned to the Guest User License&lt;/p&gt;
&lt;br&gt;
&lt;p style="font-size:14px;font-family:Verdana"&gt;&lt;a href="http://blogs.salesforce.com/.a/6a00e54ee3905b88330115705fd83a970c-pi" style="display:inline"&gt;&lt;img alt="Campaign Member Sites pic 6" src="http://blogs.salesforce.com/.a/6a00e54ee3905b88330115705fd83a970c-800wi" title="Campaign Member Sites pic 6" border="0"&gt;&lt;/a&gt;

&lt;br&gt;The Guest User license is the license that is used for public access to Sites so changes to this profile will change access levels for the public.  Scroll down to the Standard Objects Permissions, and grant &amp;quot;Read&amp;quot; access to Campaigns, Contacts, and Leads. Don&amp;#39;t worry - this doesn&amp;#39;t mean any hacker can now steal your leads and contacts, it only means that if a Visualforce page (our landing page) is configured properly, the Id variable can be used to display campaign member information that you chose to make public.  &lt;/p&gt;
&lt;br&gt;
&lt;p style="font-size:14px;font-family:Verdana"&gt;&lt;a href="http://blogs.salesforce.com/.a/6a00e54ee3905b8833011571550c21970b-pi" style="display:inline"&gt;&lt;img alt="Campaign Member Sites pic 7" src="http://blogs.salesforce.com/.a/6a00e54ee3905b8833011571550c21970b-800wi" title="Campaign Member Sites pic 7" border="0"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p style="font-size:14px;font-family:Verdana"&gt;&lt;br&gt;
Now any Visualforce page that uses campaign member as the controlling object can read and write information to campaign member records if the correct Id is created.
&lt;br&gt;&lt;br&gt;
To take the security the next level, you could pass an encrypted key in the email link&amp;#39;s URL instead of campaign member Id or enable Captcha to prevent bot responses.  To use the encrypted key instead of campaign member Id, you&amp;#39;d need to pass that key in the email link&amp;#39;s URL instead of the Id, have your campaign member Apex controller find the Id from the key, and load that record into the page.  I&amp;#39;ll write a more detailed post on how this might work in the near future.  These articles talk to each of those options:
&lt;br&gt;
&lt;br&gt;
How to create encrypted keys using a trigger:
&lt;br&gt;
&lt;a href="http://blog.sforce.com/sforce/2009/04/best-practices-sites-and-record-identifiers.html"&gt;&lt;u&gt;http://blog.sforce.com/sforce/2009/04/best-practices-sites-and-record-identifiers.html&lt;/u&gt;&lt;/a&gt;
&lt;br&gt;
&lt;br&gt;
How to embed Captcha spam prevention on Sites:
&lt;br&gt;
&lt;a href="http://wiki.developerforce.com/index.php/Adding_CAPTCHA_to_Force.com_Sites"&gt;&lt;u&gt;http://wiki.developerforce.com/index.php/Adding_CAPTCHA_to_Force.com_Sites&lt;/u&gt;&lt;/a&gt;
&lt;/p&gt;

&lt;br&gt;
&lt;p&gt;
&lt;strong&gt;&lt;span style="font-size:17px;font-family:Verdana"&gt;3) Setting up a Campaign Member Visualforce Page to be used for Sites&lt;/span&gt;&lt;/strong&gt;
&lt;/p&gt;

&lt;p style="font-size:14px;font-family:Verdana"&gt;

The last step is to create a campaign member Visualforce page.  Most of the stuff here is pretty geeky so you&amp;#39;ll want to rope in your web developer if you don&amp;#39;t have Visualforce pages already.  
&lt;br&gt;
&lt;br&gt;

At the most basic level, you need 3 things for this to work:
&lt;br&gt;
1) An Apex controller extension for campaign member to update the campaign member when your prospect clicks "submit"
&lt;br&gt;
2) A Visualforce page
&lt;br&gt;
3) That Visualforce page exposed on Sites

&lt;br&gt;
&lt;br&gt;
To give you a head start on the Apex controller extension and the Visualforce page, here are two different code examples, one simple, and one complex:
&lt;br&gt;
&lt;br&gt;
Simple Visualforce page:
&lt;br&gt;&lt;a href="http://community.salesforce.com/sforce/board/message?board.id=practices&amp;amp;message.id=6256"&gt;&lt;u&gt;http://community.salesforce.com/sforce/board/message?board.id=practices&amp;amp;message.id=6256&lt;/u&gt;&lt;/a&gt;

&lt;br&gt;
&lt;br&gt;
Visualforce page using tables for formatting &amp;amp; publicly cached static resources for pictures:
&lt;br&gt;&lt;a href="http://community.salesforce.com/sforce/board/message?message.uid=131544"&gt;&lt;u&gt;http://community.salesforce.com/sforce/board/message?message.uid=131544&lt;/u&gt;&lt;/a&gt;

&lt;br&gt;&lt;br&gt;
In both of these examples, I&amp;#39;ve exposed fields such as Id and Status to show how they can be updated.  In practice, you&amp;#39;ll probably want to hide these and assign a specific status value such as &amp;quot;RSVP-Yes&amp;quot; to ensure there are no errors.  In the second example, note you&amp;#39;ll have to delete the four static resource references to run it without further customizations.
&lt;br&gt;
&lt;br&gt;
Finally, to expose the page on Sites, first go to your site by clicking Setup--&amp;gt;Develop--&amp;gt;Sites, and then click &amp;quot;Edit&amp;quot; for the site you want to add this page to.  In the Site Edit page, under &amp;quot;Active Site Home Page&amp;quot;, select the VisualForce page you&amp;#39;d like to be public.  Pictured below I&amp;#39;ve added my Visualforce page called &amp;quot;Web2CampaignMember&amp;quot;:
&lt;br&gt;
&lt;br&gt;
&lt;a href="http://blogs.salesforce.com/.a/6a00e54ee3905b8833011570748053970c-pi" style="display:inline"&gt;&lt;img alt="Campaign Member Sites pic 8" src="http://blogs.salesforce.com/.a/6a00e54ee3905b8833011570748053970c-800wi" title="Campaign Member Sites pic 8" border="0"&gt;&lt;/a&gt; 

&lt;br&gt;
Now you should be good to go!  Test it out and you'll see there are many options for using these sites pages including easy event registration forms, passing hidden fields, and showing dynamic content based on who that person is or what they have done.  
&lt;br&gt;
&lt;/p&gt;&lt;/div&gt;
&lt;img src="http://feeds.feedburner.com/~r/sfm/~4/yLXm6CM1_nY" height="1" width="1"&gt;
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/woMGVusNdW4UmDfwHiOM4y1WvpY/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/woMGVusNdW4UmDfwHiOM4y1WvpY/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/woMGVusNdW4UmDfwHiOM4y1WvpY/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/woMGVusNdW4UmDfwHiOM4y1WvpY/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/x2od_greadershared?a=vANBqeZiOxg:E_JfJiF412U:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/x2od_greadershared?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/x2od_greadershared?a=vANBqeZiOxg:E_JfJiF412U:dnMXMwOfBR0"&gt;&lt;img src="http://feeds.feedburner.com/~ff/x2od_greadershared?d=dnMXMwOfBR0" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/x2od_greadershared?a=vANBqeZiOxg:E_JfJiF412U:V_sGLiPBpWU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/x2od_greadershared?i=vANBqeZiOxg:E_JfJiF412U:V_sGLiPBpWU" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/x2od_greadershared/~4/vANBqeZiOxg" height="1" width="1"/&gt;</content><author><name>John Kucera</name></author><source gr:stream-id="feed/http://blogs.salesforce.com/marketing/atom.xml"><id>tag:google.com,2005:reader/feed/http://blogs.salesforce.com/marketing/atom.xml</id><title type="html">Salesforce Marketing Blog</title><link rel="alternate" href="http://blogs.salesforce.com/marketing/" type="text/html" /></source><feedburner:origLink>http://feedproxy.google.com/~r/sfm/~3/yLXm6CM1_nY/salesforce-sites-event-registration-pages-summer-09-part-3.html</feedburner:origLink></entry><entry gr:crawl-timestamp-msec="1246553592193"><id gr:original-id="tag:typepad.com,2003:post-6a00d8341cded353ef0115719b623d970b">tag:google.com,2005:reader/item/62f6e40eae31f7b1</id><title type="html">Let&amp;#39;s talk about Governors</title><published>2009-07-01T22:26:22Z</published><updated>2009-07-01T22:26:22Z</updated><link rel="alternate" href="http://feedproxy.google.com/~r/x2od_greadershared/~3/_ND4iBHLDiM/lets-talk-about-governors.html" type="text/html" /><content xml:base="http://blog.sforce.com/sforce/" xml:lang="en-US" type="html">&lt;div&gt;&lt;p&gt;Are you a new Force.com developer? About to write your first Apex trigger or class? Or already developed some Apex just to run into a governor limit? Want to learn more about governors in Apex?&lt;/p&gt;&lt;p&gt;If so, check out this new technical &lt;a href="http://wiki.developerforce.com/index.php/Governor_Limits_in_Apex_Code"&gt;article&lt;/a&gt; that explains what governors are, why they exist, and how they are calculated. The article is intended for architects and developers writing Apex code on the Force.com platform. Here is a brief snippet from the Abstract:&lt;/p&gt;&lt;div style="margin-left:40px"&gt;&lt;a href="http://wiki.developerforce.com/index.php/Apex" title="Apex"&gt;Apex Code&lt;/a&gt;
is the Force.com programming language used to write custom, robust
business logic. Apex is compiled and executed on the Force.com
multitenant infrastructure, which is a shared resource across all
customers, partners, and developers. Consequently it is important that
Apex code uses infrastructure resources efficiently. &lt;/div&gt;&lt;p style="margin-left:40px"&gt;This is where Apex &lt;em&gt;governor limits&lt;/em&gt; come in. Governor
limits are runtime limits enforced by the Apex runtime engine to ensure
that code does not misbehave. This article presents an overview of Apex
Code governor limits, why they are important, and how to design
scalable, efficient Apex code.&lt;/p&gt;&lt;p&gt;If interested in reading the entire article, it can be found &lt;a href="http://wiki.developerforce.com/index.php/Governor_Limits_in_Apex_Code"&gt;here&lt;/a&gt;.&lt;/p&gt;&lt;img src="http://feeds.feedburner.com/~r/SforceBlog/~4/bUFFsL3KKMo" height="1" width="1"&gt;&lt;/div&gt;
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/QVk8hH6caMh3o1iJYC5kcOcdb90/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/QVk8hH6caMh3o1iJYC5kcOcdb90/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/QVk8hH6caMh3o1iJYC5kcOcdb90/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/QVk8hH6caMh3o1iJYC5kcOcdb90/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/x2od_greadershared?a=_ND4iBHLDiM:jT8ZSJkbUh0:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/x2od_greadershared?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/x2od_greadershared?a=_ND4iBHLDiM:jT8ZSJkbUh0:dnMXMwOfBR0"&gt;&lt;img src="http://feeds.feedburner.com/~ff/x2od_greadershared?d=dnMXMwOfBR0" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/x2od_greadershared?a=_ND4iBHLDiM:jT8ZSJkbUh0:V_sGLiPBpWU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/x2od_greadershared?i=_ND4iBHLDiM:jT8ZSJkbUh0:V_sGLiPBpWU" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/x2od_greadershared/~4/_ND4iBHLDiM" height="1" width="1"/&gt;</content><author><name>Andrew Albert</name></author><source gr:stream-id="feed/http://feeds2.feedburner.com/SforceBlog"><id>tag:google.com,2005:reader/feed/http://feeds2.feedburner.com/SforceBlog</id><title type="html">Force.com Blog</title><link rel="alternate" href="http://blog.sforce.com/sforce/" type="text/html" /></source><feedburner:origLink>http://feedproxy.google.com/~r/SforceBlog/~3/bUFFsL3KKMo/lets-talk-about-governors.html</feedburner:origLink></entry><entry gr:crawl-timestamp-msec="1246553605691"><id gr:original-id="">tag:google.com,2005:reader/item/f13533f66907c6a0</id><title type="html">Let&amp;#39;s talk about Governors</title><published>2009-07-02T16:53:25Z</published><updated>2009-07-02T16:53:25Z</updated><link rel="alternate" href="http://feedproxy.google.com/~r/x2od_greadershared/~3/_ND4iBHLDiM/lets-talk-about-governors.html" type="text/html" /><link rel="related" href="http://blog.sforce.com/sforce/" title="Force.com Blog" /><content xml:base="http://feedproxy.google.com/~r/SforceBlog/~3/bUFFsL3KKMo/lets-talk-about-governors.html" type="html">&lt;blockquote&gt;Shared by  David 
&lt;br&gt;
Not the kind of governors you're likely thinking about!&lt;/blockquote&gt;
&lt;div&gt;&lt;p&gt;Are you a new Force.com developer? About to write your first Apex trigger or class? Or already developed some Apex just to run into a governor limit? Want to learn more about governors in Apex?&lt;/p&gt;&lt;p&gt;If so, check out this new technical &lt;a href="http://wiki.developerforce.com/index.php/Governor_Limits_in_Apex_Code"&gt;article&lt;/a&gt; that explains what governors are, why they exist, and how they are calculated. The article is intended for architects and developers writing Apex code on the Force.com platform. Here is a brief snippet from the Abstract:&lt;/p&gt;&lt;div style="margin-left:40px"&gt;&lt;a href="http://wiki.developerforce.com/index.php/Apex" title="Apex"&gt;Apex Code&lt;/a&gt;
is the Force.com programming language used to write custom, robust
business logic. Apex is compiled and executed on the Force.com
multitenant infrastructure, which is a shared resource across all
customers, partners, and developers. Consequently it is important that
Apex code uses infrastructure resources efficiently. &lt;/div&gt;&lt;p style="margin-left:40px"&gt;This is where Apex &lt;em&gt;governor limits&lt;/em&gt; come in. Governor
limits are runtime limits enforced by the Apex runtime engine to ensure
that code does not misbehave. This article presents an overview of Apex
Code governor limits, why they are important, and how to design
scalable, efficient Apex code.&lt;/p&gt;&lt;p&gt;If interested in reading the entire article, it can be found &lt;a href="http://wiki.developerforce.com/index.php/Governor_Limits_in_Apex_Code"&gt;here&lt;/a&gt;.&lt;/p&gt;&lt;img src="http://feeds.feedburner.com/%7Er/SforceBlog/%7E4/bUFFsL3KKMo" height="1" width="1"&gt;&lt;/div&gt;

&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/B3Se9jcHq7QTwCNSBl8dB6WUNsk/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/B3Se9jcHq7QTwCNSBl8dB6WUNsk/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/B3Se9jcHq7QTwCNSBl8dB6WUNsk/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/B3Se9jcHq7QTwCNSBl8dB6WUNsk/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/x2od_greadershared?a=_ND4iBHLDiM:0ZCutrxIEbg:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/x2od_greadershared?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/x2od_greadershared?a=_ND4iBHLDiM:0ZCutrxIEbg:dnMXMwOfBR0"&gt;&lt;img src="http://feeds.feedburner.com/~ff/x2od_greadershared?d=dnMXMwOfBR0" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/x2od_greadershared?a=_ND4iBHLDiM:0ZCutrxIEbg:V_sGLiPBpWU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/x2od_greadershared?i=_ND4iBHLDiM:0ZCutrxIEbg:V_sGLiPBpWU" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/x2od_greadershared/~4/_ND4iBHLDiM" height="1" width="1"/&gt;</content><author gr:unknown-author="true"><name>(author unknown)</name></author><gr:annotation><content type="html">Not the kind of governors you're likely thinking about!</content><author gr:user-id="08504759903397147205" gr:profile-id="112986397538066639718"><name>David</name></author></gr:annotation><source gr:stream-id="user/08504759903397147205/source/com.google/link"><id>tag:google.com,2005:reader/user/08504759903397147205/source/com.google/link</id><title type="html">Force.com Blog</title><link rel="alternate" href="http://blog.sforce.com/sforce/" type="text/html" /></source><feedburner:origLink>http://feedproxy.google.com/~r/SforceBlog/~3/bUFFsL3KKMo/lets-talk-about-governors.html</feedburner:origLink></entry><entry gr:crawl-timestamp-msec="1246595403858"><id gr:original-id="tag:typepad.com,2003:post-6a00d8341cded353ef011570b01bb6970c">tag:google.com,2005:reader/item/965a35c5d7854b01</id><title type="html">Supercharge your Email Template Merge Fields</title><published>2009-07-02T19:02:30Z</published><updated>2009-07-02T19:02:30Z</updated><link rel="alternate" href="http://feedproxy.google.com/~r/x2od_greadershared/~3/LJ2U1Q92lF0/supercharge-your-email-template-merge-fields.html" type="text/html" /><content xml:base="http://blog.sforce.com/sforce/" xml:lang="en-US" type="html">&lt;div&gt;&lt;p&gt;I was working with some colleagues this morning who had a requirement to send an email using the email template functionality, but wanted to access data from a grandchild object (so Parent Object--&amp;gt;Child Object--&amp;gt;Grandchild Object). At first glance the UI only allows you to select fields from the Parent or Child object, but fear not --- you can supercharge your email template merge fields with just a little extra effort.&lt;/p&gt;&lt;div&gt;&lt;a href="http://blog.sforce.com/.a/6a00d8341cded353ef011571a4f898970b-pi" style="display:inline"&gt;&lt;img alt="Merge" src="http://blog.sforce.com/.a/6a00d8341cded353ef011571a4f898970b-320wi"&gt;&lt;/a&gt; &lt;br&gt;&lt;div&gt;Take the example of a school which has an Enrollments object which is related to Classes via a Master Detail relationship. Classes have a similar relationship with Venues (a class has to be held somewhere), but an Enrollment really shouldn&amp;#39;t have any sort of relationship with a Venue (thats the classes responsibility). To make things easier we may model this the Class-Venue relationship in another custom object, we could call ClassVenues:&lt;/div&gt;&lt;br&gt;&lt;br&gt;&lt;div&gt;&lt;a href="http://blog.sforce.com/.a/6a00d8341cded353ef011571a50a9c970b-pi" style="display:inline"&gt;&lt;img alt="Cv" border="0" src="http://blog.sforce.com/.a/6a00d8341cded353ef011571a50a9c970b-320pi" title="Cv"&gt;&lt;/a&gt; &lt;br&gt;&lt;/div&gt;&lt;br&gt;&lt;div&gt;With our newly discovered superpowers in the Email Template, we can easily traverse the new relationship to send our student all the details they need to make it to class right on time. The trick is writing the merge field yourself. You can use the Available Merge Field picklists as a start, but you have to manually add the grandchild relationship. For this example the following code works great:&lt;/div&gt;&lt;br&gt;&lt;div&gt;&lt;span style="font-family:Arial, Helvetica, sans-serif;font-size:12px;line-height:normal;white-space:pre-wrap"&gt;{!Enrollment__c.Class__c.Venue__c.Building__c}&lt;/span&gt;&lt;br&gt;&lt;/div&gt;&lt;br&gt;&lt;br&gt;&lt;div&gt;&lt;a href="http://blog.sforce.com/.a/6a00d8341cded353ef011570b00db9970c-pi" style="display:inline"&gt;&lt;img alt="Template" src="http://blog.sforce.com/.a/6a00d8341cded353ef011570b00db9970c-320wi"&gt;&lt;/a&gt; &lt;br&gt;&lt;/div&gt;&lt;br&gt;&lt;div&gt;Now if only I could get fix the &amp;#39;dog ate my homework&amp;#39; problem :)&lt;/div&gt;&lt;br&gt;&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/SforceBlog/~4/pjp49p0e_U8" height="1" width="1"&gt;&lt;/div&gt;
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/iR7pzKno_ZOLF0PPcJP3Qypva6c/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/iR7pzKno_ZOLF0PPcJP3Qypva6c/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/iR7pzKno_ZOLF0PPcJP3Qypva6c/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/iR7pzKno_ZOLF0PPcJP3Qypva6c/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/x2od_greadershared?a=LJ2U1Q92lF0:NTRlXIzaMn0:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/x2od_greadershared?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/x2od_greadershared?a=LJ2U1Q92lF0:NTRlXIzaMn0:dnMXMwOfBR0"&gt;&lt;img src="http://feeds.feedburner.com/~ff/x2od_greadershared?d=dnMXMwOfBR0" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/x2od_greadershared?a=LJ2U1Q92lF0:NTRlXIzaMn0:V_sGLiPBpWU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/x2od_greadershared?i=LJ2U1Q92lF0:NTRlXIzaMn0:V_sGLiPBpWU" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/x2od_greadershared/~4/LJ2U1Q92lF0" height="1" width="1"/&gt;</content><author><name>Quinton Wall</name></author><source gr:stream-id="feed/http://blog.sforce.com/sforce/atom.xml"><id>tag:google.com,2005:reader/feed/http://blog.sforce.com/sforce/atom.xml</id><title type="html">Force.com Blog</title><link rel="alternate" href="http://blog.sforce.com/sforce/" type="text/html" /></source><feedburner:origLink>http://feedproxy.google.com/~r/SforceBlog/~3/pjp49p0e_U8/supercharge-your-email-template-merge-fields.html</feedburner:origLink></entry><entry gr:crawl-timestamp-msec="1247717932022"><id gr:original-id="tag:blogger.com,1999:blog-346886237996906916.post-4794981658105270146">tag:google.com,2005:reader/item/b1e346e52854fc4b</id><category term="Apex" scheme="http://www.blogger.com/atom/ns#" /><title type="html">Salesforce Debug Log Parser</title><published>2009-07-10T09:25:00Z</published><updated>2009-07-10T11:55:15Z</updated><link rel="alternate" href="http://feedproxy.google.com/~r/x2od_greadershared/~3/PH3lUo8nyUQ/salesforce-debug-log-parser.html" type="text/html" /><content xml:base="http://www.forcedotcom.com/" type="html">For those of you who regularly find themselves writing Apex code, you may find the salesforce debug log output cluttered and difficult to read. At the very least it can be time consuming trying to find the output you're after (unless you've been putting keywords before the output in System.debug) but even then it can take a while.&lt;br&gt;&lt;br&gt;Well, the good news is that there is a handy free app for parsing the output which has been written in .NET by a guy called Kyle Peterson and amazingly enough it's called the Force.com Debug Log Parser - you can download this tool from &lt;a href="http://codebit.wordpress.com/2009/06/04/force-com-debug-log-parser/"&gt;here&lt;/a&gt;.&lt;br&gt;&lt;br&gt;You can also see a video of it in action &lt;a href="http://home.comcast.net/~kpeterson85/ForceDebugLogParser.swf"&gt;here&lt;/a&gt;. Thanks Kyle!&lt;div&gt;&lt;img width="1" height="1" src="https://blogger.googleusercontent.com/tracker/346886237996906916-4794981658105270146?l=www.forcedotcom.com"&gt;&lt;/div&gt;
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/wszAYKb5IJAXixHctkMMEQFt7jE/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/wszAYKb5IJAXixHctkMMEQFt7jE/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/wszAYKb5IJAXixHctkMMEQFt7jE/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/wszAYKb5IJAXixHctkMMEQFt7jE/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/x2od_greadershared?a=PH3lUo8nyUQ:YE45xg-mRj8:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/x2od_greadershared?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/x2od_greadershared?a=PH3lUo8nyUQ:YE45xg-mRj8:dnMXMwOfBR0"&gt;&lt;img src="http://feeds.feedburner.com/~ff/x2od_greadershared?d=dnMXMwOfBR0" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/x2od_greadershared?a=PH3lUo8nyUQ:YE45xg-mRj8:V_sGLiPBpWU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/x2od_greadershared?i=PH3lUo8nyUQ:YE45xg-mRj8:V_sGLiPBpWU" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/x2od_greadershared/~4/PH3lUo8nyUQ" height="1" width="1"/&gt;</content><author><name>forcedotcom</name></author><source gr:stream-id="feed/http://www.forcedotcom.com/feeds/posts/default"><id>tag:google.com,2005:reader/feed/http://www.forcedotcom.com/feeds/posts/default</id><title type="html">A salesforce blog</title><link rel="alternate" href="http://www.forcedotcom.com/" type="text/html" /></source><feedburner:origLink>http://www.forcedotcom.com/2009/07/salesforce-debug-log-parser.html</feedburner:origLink></entry><entry gr:crawl-timestamp-msec="1247717845811"><id gr:original-id="93BDB58D-BF94-47B3-8A4E-000B43779DF5-12589-000067E7478BBEBE-FFA">tag:google.com,2005:reader/item/0b18e66400532d7d</id><title type="html">A Comprehensive Look at the Force.com Cloud Platform</title><published>2009-07-13T19:33:58Z</published><updated>2009-07-13T19:33:58Z</updated><link rel="alternate" href="http://feedproxy.google.com/~r/x2od_greadershared/~3/QQn3pnfnxTE/A_Comprehensive_Look_at_the_Force.com_Cloud_Platform" type="text/html" /><author gr:unknown-author="true"><name>(author unknown)</name></author><source gr:stream-id="feed/http://wiki.apexdevnet.com/feeds/ADN_Featured_Content.xml"><id>tag:google.com,2005:reader/feed/http://wiki.apexdevnet.com/feeds/ADN_Featured_Content.xml</id><title type="html">DFC Featured Content</title><link rel="alternate" href="http://wiki.apexdevnet.com/index.php/An_Introduction_to_Apex_Code_Test_Methods" type="text/html" /></source><content type="html">This whitepaper provides a bird's-eye view of the Force.com platform and features.
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/UOuVYhZBAK8Kzv7a6eR_1QLCCk4/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/UOuVYhZBAK8Kzv7a6eR_1QLCCk4/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/UOuVYhZBAK8Kzv7a6eR_1QLCCk4/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/UOuVYhZBAK8Kzv7a6eR_1QLCCk4/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/x2od_greadershared?a=QQn3pnfnxTE:vWiweRp9yRQ:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/x2od_greadershared?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/x2od_greadershared?a=QQn3pnfnxTE:vWiweRp9yRQ:dnMXMwOfBR0"&gt;&lt;img src="http://feeds.feedburner.com/~ff/x2od_greadershared?d=dnMXMwOfBR0" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/x2od_greadershared?a=QQn3pnfnxTE:vWiweRp9yRQ:V_sGLiPBpWU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/x2od_greadershared?i=QQn3pnfnxTE:vWiweRp9yRQ:V_sGLiPBpWU" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/x2od_greadershared/~4/QQn3pnfnxTE" height="1" width="1"/&gt;</content><feedburner:origLink>http://wiki.developerforce.com/index.php/A_Comprehensive_Look_at_the_Force.com_Cloud_Platform</feedburner:origLink></entry><entry gr:crawl-timestamp-msec="1247717862193"><id gr:original-id="tag:typepad.com,2003:post-6a00d8341cded353ef0115710a3e35970c">tag:google.com,2005:reader/item/8edf27903e786980</id><category term="Logic" /><title type="html">Email isn&amp;#39;t old school</title><published>2009-07-13T20:27:10Z</published><updated>2009-07-13T20:29:00Z</updated><link rel="alternate" href="http://feedproxy.google.com/~r/x2od_greadershared/~3/acXfEtphkGI/email-isnt-old-school.html" type="text/html" /><content xml:base="http://blog.sforce.com/sforce/" xml:lang="en-US" type="html">&lt;div&gt;&lt;p&gt;With all this focus on new media, we mustn&amp;#39;t forget the old - and here&amp;#39;s &lt;a href="http://wiki.developerforce.com/index.php/Tech_Talk_Series:_Introduction_to_the_Email_Services_on_Force.com"&gt;a tech talk&lt;/a&gt; to help you remember.  Email in particular.  It rocks.  The world pretty much runs on email.  Okay, perhaps a few web services too.  But email is still up there!&lt;/p&gt;
&lt;p&gt;
So it makes sense to know how to use it on Force.com.  When I wrote the &lt;a href="http://wiki.developerforce.com/index.php/Integrating_with_the_Force.com_Platform"&gt;this article on integration&lt;/a&gt; I added email as an integration option.  Want to integrate with an old mainframe?  Chuck in a few email handlers.  Want to integrate with a new human on his palmtop?  Chuck in a few email handlers. &lt;/p&gt;

&lt;p&gt;And it&amp;#39;s not that difficult really.  Here&amp;#39;s the Apex Code that can serve as the basis of an email handler - something that intercepts incoming emails:&lt;/p&gt;

&lt;code&gt;&lt;pre&gt;
global class HandleWhims implements Messaging.InboundEmailHandler { 
  global Messaging.InboundEmailResult handleInboundEmail(Messaging.inboundEmail email, 
  Messaging.InboundEnvelope env) { 
    Messaging.InboundEmailResult result= newMessaging.InboundEmailResult(); 
    System.debug(&amp;#39;from email address:&amp;#39; + email.fromAddress);
    System.debug(&amp;#39;email body:&amp;#39; + email.plainTextBody);
    System.debug(&amp;#39;email subject:&amp;#39; + email.subject);  
    return result;
  }
}
&lt;/pre&gt;&lt;/code&gt;  &lt;br&gt;

&lt;p&gt;Just a little configuration (setting up an email address and associating it with the handler) is about all else you need.  Of course you can also send email, and more.&lt;/p&gt;

&lt;p&gt;We just had a nice little webinar on the topic, &lt;a href="http://wiki.developerforce.com/index.php/Tech_Talk_Series:_Introduction_to_the_Email_Services_on_Force.com"&gt;Tech Talk: Introduction to the Email Services on Force.com&lt;/a&gt; - check it out for an introduction.&lt;/p&gt;&lt;img src="http://feeds.feedburner.com/~r/SforceBlog/~4/jexlg5KZ6C4" height="1" width="1"&gt;&lt;/div&gt;
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/GosHtAxU-vHzrqCdDSShpb-T7vY/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/GosHtAxU-vHzrqCdDSShpb-T7vY/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/GosHtAxU-vHzrqCdDSShpb-T7vY/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/GosHtAxU-vHzrqCdDSShpb-T7vY/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/x2od_greadershared?a=acXfEtphkGI:BFsaeGAdOhM:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/x2od_greadershared?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/x2od_greadershared?a=acXfEtphkGI:BFsaeGAdOhM:dnMXMwOfBR0"&gt;&lt;img src="http://feeds.feedburner.com/~ff/x2od_greadershared?d=dnMXMwOfBR0" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/x2od_greadershared?a=acXfEtphkGI:BFsaeGAdOhM:V_sGLiPBpWU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/x2od_greadershared?i=acXfEtphkGI:BFsaeGAdOhM:V_sGLiPBpWU" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/x2od_greadershared/~4/acXfEtphkGI" height="1" width="1"/&gt;</content><author><name>Jon Mountjoy</name></author><source gr:stream-id="feed/http://feeds.feedburner.com/SforceBlog"><id>tag:google.com,2005:reader/feed/http://feeds.feedburner.com/SforceBlog</id><title type="html">Force.com Blog</title><link rel="alternate" href="http://blog.sforce.com/sforce/" type="text/html" /></source><feedburner:origLink>http://feedproxy.google.com/~r/SforceBlog/~3/jexlg5KZ6C4/email-isnt-old-school.html</feedburner:origLink></entry><entry gr:crawl-timestamp-msec="1247718188959"><id gr:original-id="tag:blogger.com,1999:blog-3390965.post-1731542018214383256">tag:google.com,2005:reader/item/5dcb44c5c2d5d7f8</id><category term="Tips" scheme="http://www.blogger.com/atom/ns#" /><category term="Webinars" scheme="http://www.blogger.com/atom/ns#" /><category term="Learning resources" scheme="http://www.blogger.com/atom/ns#" /><category term="Optimization" scheme="http://www.blogger.com/atom/ns#" /><title type="html">7 deadly sins of landing page design</title><published>2009-07-14T18:59:00Z</published><updated>2009-07-14T19:03:42Z</updated><link rel="alternate" href="http://feedproxy.google.com/~r/x2od_greadershared/~3/MpYpSBqZ8ik/7-deadly-sins-of-landing-page-design.html" type="text/html" /><content xml:base="http://adwords.blogspot.com/" type="html">&lt;div&gt;Have you committed one of the "7 deadly sins of landing page design?"&lt;/div&gt;&lt;div&gt;&lt;br&gt;&lt;/div&gt;&lt;div&gt;Since it's the page visitors see after clicking your ad, your &lt;a href="http://adwords.google.com/support/bin/answer.py?hl=en&amp;amp;answer=14086"&gt;landing page&lt;/a&gt; is one of your most valuable tools. A bad landing page will drive visitors away, while a good one will turn AdWords clicks into customers. This is why we held a webinar on July 1st to expose the "7 deadly sins of landing page design", and explained how to fix them.&lt;/div&gt;&lt;div&gt;&lt;br&gt;&lt;/div&gt;&lt;div&gt;Tim Ash, one of our Website Optimizer Authorized Consultants, led this webinar and shared many insights and best practices to help advertisers improve their conversion rates. A recording of the webinar is now available for anyone who was not able to attend.&lt;/div&gt;&lt;div&gt;&lt;br&gt;&lt;div align="center"&gt;&lt;br&gt;&lt;embed src="http://www.youtube.com/v/erdEZvOq6wo&amp;amp;hl=en&amp;amp;fs=1&amp;amp;" allowScriptAccess="never" allowFullScreen="true" width="425" height="344" wmode="transparent" type="application/x-shockwave-flash"&gt;&lt;/embed&gt;&lt;br&gt;&lt;/div&gt;&lt;div align="center"&gt;&lt;br&gt;&lt;/div&gt;&lt;div&gt;The recording is also available on the &lt;a href="http://www.youtube.com/user/websiteoptimizer"&gt;Website Optimizer Youtube Channel&lt;/a&gt;, where you can learn even more about improving your conversion rate with website testing.&lt;/div&gt;&lt;div&gt;&lt;br&gt;&lt;/div&gt;&lt;div&gt;We hope you will find these resources helpful as you improve your website landing pages to turn more clicks into customers.&lt;/div&gt;&lt;/div&gt;&lt;br&gt;&lt;span&gt;Posted by Emel Mutlu, &lt;i&gt;Inside AdWords&lt;/i&gt; crew&lt;/span&gt;&lt;div&gt;&lt;img width="1" height="1" src="https://blogger.googleusercontent.com/tracker/3390965-1731542018214383256?l=adwords.blogspot.com"&gt;&lt;/div&gt;&lt;div&gt;
&lt;a href="http://feeds.feedburner.com/~ff/blogspot/ATHs?a=mFV2Uc5n69U:KfJYF7hSWFk:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/blogspot/ATHs?d=yIl2AUoC8zA" border="0"&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/blogspot/ATHs/~4/mFV2Uc5n69U" height="1" width="1"&gt;
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/7OuZiPcROndNMhYyiQHhUxvdzmU/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/7OuZiPcROndNMhYyiQHhUxvdzmU/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/7OuZiPcROndNMhYyiQHhUxvdzmU/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/7OuZiPcROndNMhYyiQHhUxvdzmU/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/x2od_greadershared?a=MpYpSBqZ8ik:ggnX0oZVpM0:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/x2od_greadershared?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/x2od_greadershared?a=MpYpSBqZ8ik:ggnX0oZVpM0:dnMXMwOfBR0"&gt;&lt;img src="http://feeds.feedburner.com/~ff/x2od_greadershared?d=dnMXMwOfBR0" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/x2od_greadershared?a=MpYpSBqZ8ik:ggnX0oZVpM0:V_sGLiPBpWU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/x2od_greadershared?i=MpYpSBqZ8ik:ggnX0oZVpM0:V_sGLiPBpWU" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/x2od_greadershared/~4/MpYpSBqZ8ik" height="1" width="1"/&gt;</content><author><name>Inside AdWords crew</name></author><source gr:stream-id="feed/http://adwords.blogspot.com/atom.xml"><id>tag:google.com,2005:reader/feed/http://adwords.blogspot.com/atom.xml</id><title type="html">Inside AdWords</title><link rel="alternate" href="http://adwords.blogspot.com/" type="text/html" /></source><feedburner:origLink>http://feedproxy.google.com/~r/blogspot/ATHs/~3/mFV2Uc5n69U/7-deadly-sins-of-landing-page-design.html</feedburner:origLink></entry></feed>
