<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>Radial Web</title>
	<atom:link href="http://www.radialweb.com/feed/" rel="self" type="application/rss+xml" />
	<link>http://www.radialweb.com</link>
	<description>Solutions In The Cloud</description>
	<lastBuildDate>Mon, 30 Aug 2010 20:17:04 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.0.1</generator>
		<item>
		<title>What will YOU build on Force.com?</title>
		<link>http://www.radialweb.com/2010/08/what-will-you-build-on-force-com/</link>
		<comments>http://www.radialweb.com/2010/08/what-will-you-build-on-force-com/#comments</comments>
		<pubDate>Mon, 30 Aug 2010 20:12:15 +0000</pubDate>
		<dc:creator>Kevin</dc:creator>
				<category><![CDATA[Code Examples]]></category>
		<category><![CDATA[Salesforce.com]]></category>

		<guid isPermaLink="false">http://www.radialweb.com/?p=246</guid>
		<description><![CDATA[Don&#8217;t get me wrong&#8230;Salesforce.com&#8217;s &#8220;Sales Cloud&#8221; and &#8220;Service Cloud&#8221; are top-notch. But I&#8217;m a developer, so I&#8217;m all about the Custom Cloud. If you&#8217;re just tuning in, Custom Cloud represents the Force.com development platform that makes the rest of Salesforce.com hum. With it, you can customize Salesforce.com to your heart&#8217;s content. Or, you can build [...]]]></description>
			<content:encoded><![CDATA[<p><a href="http://www.radialweb.com/wp-content/uploads/2010/08/blocks.jpg"><img class="alignleft size-full wp-image-247" title="blocks" src="http://www.radialweb.com/wp-content/uploads/2010/08/blocks.jpg" alt="" width="250" height="188" /></a>Don&#8217;t get me wrong&#8230;Salesforce.com&#8217;s &#8220;<a href="http://www.salesforce.com/crm/sales-force-automation/?d=70130000000FMMR&amp;internal=true" target="_blank">Sales Cloud</a>&#8221; and &#8220;<a href="http://www.salesforce.com/crm/customer-service-support/" target="_blank">Service Cloud</a>&#8221; are top-notch. But I&#8217;m a developer, so I&#8217;m all about the <a href="http://www.salesforce.com/platform/" target="_blank">Custom Cloud</a>. If you&#8217;re just tuning in, Custom Cloud represents the Force.com development platform that makes the rest of Salesforce.com hum. With it, you can customize Salesforce.com to your heart&#8217;s content. Or, you can build brand new applications that have nothing to do with sales or customer service.</p>
<p>So&#8230; what to do with this readily available platform? After all, if you&#8217;re a Salesforce.com customer (EE or higher), you already own it. I&#8217;ve never had a client that didn&#8217;t have an application wishlist, but I&#8217;m here to offer 8 ideas to get those creative juices flowing.</p>
<p><strong><span style="text-decoration: underline;"><span id="more-246"></span>Time Tracking</span></strong><strong>:</strong> True&#8230;you can&#8217;t throw a rock without hitting some sort of time tracking app. But maybe you just need something simple to keep track of time spent on a project instead of a complex timesheet. Just create a <em>Project </em>object (name, description, status, and budgeted hours) and then a <em>Time Entry</em> object linked as a Master-Detail relationship (Date, Project, User, Hours, Notes). Create a roll-up summary field on the project to sum the TimeEntry hours, create some reports and dashboards, and you&#8217;re good to go.</p>
<p><strong><span style="text-decoration: underline;">PC/Software Tracking</span></strong>: I&#8217;ve seen many flavors for this type of app over the years&#8230;usually in Excel but sometimes more sophisticated. The common theme: who has what equipment, where is it, and what&#8217;s on it. Start with an <em>Equipment </em>object (Name, Type, Serial Number, Status, Notes) and then an <em>Assignment </em>object (Equipment, User or Contact, date assigned). Get fancy and add a <em>Software License</em> object (Name, Vendor, # Licenses Purchased) and link it to <em>Equipment </em>via an <em>Equipment-Software</em> object (Equipment, Software License, status).</p>
<p><span style="text-decoration: underline;"><strong>Employee Training</strong></span>: &#8220;Hey, Kevin. I see you haven&#8217;t been to <a href="http://www.radialweb.com/2010/08/dreamforce-starts-now-with-chatter/" target="_blank">Dreamforce </a>for the past two years. I think you should sign up this year. I already see that Mike and Amber are going.&#8221; Pretty simple. Create a <em>Training Event</em> object (Name, Date(s), Description, Cost) and a <em>Training Attendance</em> object (Training Event, User or Contact, notes). Hey, while you&#8217;re at it, add an approval process on the <em>Training Attendance</em> object so employees can ask to go to an event and a manager can approve (did I mention that the Approval Process engine is already included).</p>
<p><strong><span style="text-decoration: underline;">Skills Management</span></strong>: I once sat in a week-long Java boot camp where our classroom exercise was to create an employee skills tracking utility. Heh&#8230;we never finished it&#8230;.too much time writing database access code (Spring wasn&#8217;t around back then). Here&#8217;s my chance at redemption: Create a <em>Skill </em>object (Name, Type, Notes, Difficulty Level) and an <em>Employee Skill</em> object (User or Contact, Skill, Competency).</p>
<p><strong><span style="text-decoration: underline;">Budget Tracking</span></strong>: Follow the money! I can&#8217;t tell you how many spreadsheets I&#8217;ve encountered that track corporate budgets. &#8220;Hey, Jerry. Just fill out your budget expenditure spreadsheet template for the week and send it to Bob. He&#8217;ll merge it into the department template and sent it to Mary.&#8221; Shudder. How about this: a <em>Project </em>object (name, status, dates, owner). Then a<em> Budget Line Item</em> (Project, Type (salary, travel, equipment, etc), Amount, and Status). Finally, a <em>Project Payment</em> object (Project, Budget Line Item, Amount, Date, Paid To). Add some roll-up summary fields and Field History tracking (yep&#8230;included) and you have a dashboard that Mary could only dream of. Of course, this one might get tricky. You could always look *<em>cough</em>* <a href="/budget-management-for-projects/" target="_blank">here</a> instead. (Chatter integration coming soon! Grin.)</p>
<p><strong><span style="text-decoration: underline;">Lease Tracking</span></strong>: Maybe you own apartment units and all you need to know is who&#8217;s leasing what, when did it start, and when did it end. Spreadsheet? No! How about this. <em>Apartment Unit</em> object (Name, Unit Number, Building, Status (inhabitable, uninhabitable), Address). Then add an <em>Apartment Lease</em> object (Apartment Unit, Contact, Start Date, End Date, Rent, Security Deposit, Notes).</p>
<p><strong><span style="text-decoration: underline;">Homesite Management</span></strong>: Whether you&#8217;re a homebuilder (big or small) or a land developer (or both), keeping track of your inventory of homesites can be cumbersome. Track it in Force.com! A <em>Homesite </em>object could store Address, Status, Description, Square Feet, Easements, Zoning requirements, Lot improvements and whatever else you could imagine. Maybe you could create workflow rules to automatically create some tasks on each homesite (get zoning approved, request water/sewer connections, etc)&#8230;oh yes, workflow rules are also included.</p>
<p>There&#8217;s something important to note here: Not one of these examples requires coding. All can be done with just clicks-not-code object/field/user interface creation. But, if you want to go beyond the standard user-interface and features, Apex code, custom triggers, and Visualforce user interface features are always available. Your choice.</p>
<p>And one other thing. Before you get started on any app, check out the <a href="http://sites.force.com/appexchange/apex/home" target="_blank">AppExchange</a>. Your solution may already be for you. <a href="http://sites.force.com/appexchange/results?type=Apps&amp;keywords=force.com%20Labs" target="_blank">Force.com Labs</a> is a great place to start.</p>
<p>So I&#8217;ve broken a blogging rule: always provide lists of 10. I only have 8. Why? I&#8217;m a consultant and I need to get back to work. How about this: leave a comment and tell me what application <em><strong>you </strong></em>would build. I would start with that list of Excel spreadsheets sitting on file servers and jumping from inbox to inbox.</p>
<p>And if you don&#8217;t have/need Salesforce.com, you can get Force.com as a standalone platform. Start with the Free Edition and go build something today. Coding optional.</p>]]></content:encoded>
			<wfw:commentRss>http://www.radialweb.com/2010/08/what-will-you-build-on-force-com/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Chatter “makes our core product better,”&#8230;</title>
		<link>http://www.radialweb.com/2010/08/chatter-%e2%80%9cmakes-our-core-product-better%e2%80%9d/</link>
		<comments>http://www.radialweb.com/2010/08/chatter-%e2%80%9cmakes-our-core-product-better%e2%80%9d/#comments</comments>
		<pubDate>Fri, 27 Aug 2010 16:25:47 +0000</pubDate>
		<dc:creator>Kevin</dc:creator>
				<category><![CDATA[quote]]></category>
		<category><![CDATA[Chatter]]></category>
		<category><![CDATA[Salesforce]]></category>

		<guid isPermaLink="false">http://www.radialweb.com/2010/08/chatter-%e2%80%9cmakes-our-core-product-better%e2%80%9d/</guid>
		<description><![CDATA[Chatter “makes our core product better,” says Marc Benioff, Salesforce.com’s voluble chairman and chief executive, who adds that e-mail traffic at Salesforce has fallen 40 percent since his employees started Chattering in June. “You can see which employees are adding value to your business.” He says he uses the software to keep an eye on [...]]]></description>
			<content:encoded><![CDATA[<p>Chatter “makes our core product better,” says Marc Benioff, Salesforce.com’s voluble chairman and chief executive, who adds that e-mail traffic at Salesforce has fallen 40 percent since his employees started Chattering in June. “You can see which employees are adding value to your business.” He says he uses the software to keep an eye on big deals and see which of his support reps are best at squelching problems.</p>
<p><cite>Businessweek.com – Salesforce.com Channels Facebook</cite></p>]]></content:encoded>
			<wfw:commentRss>http://www.radialweb.com/2010/08/chatter-%e2%80%9cmakes-our-core-product-better%e2%80%9d/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Dreamforce Starts Now With Chatter</title>
		<link>http://www.radialweb.com/2010/08/dreamforce-starts-now-with-chatter/</link>
		<comments>http://www.radialweb.com/2010/08/dreamforce-starts-now-with-chatter/#comments</comments>
		<pubDate>Wed, 25 Aug 2010 20:57:49 +0000</pubDate>
		<dc:creator>Kevin</dc:creator>
				<category><![CDATA[Salesforce.com]]></category>

		<guid isPermaLink="false">http://radialweb.com/?p=212</guid>
		<description><![CDATA[I&#8217;ve been to my fair share of tradeshows. Usually they&#8217;re pretty good: sessions are informative, food is ok, drinks are free, and I walk away with a handful of new connections in that industry (and a bag full of schwag that the kids can divvy up when I get home). This year is my first [...]]]></description>
			<content:encoded><![CDATA[<p>I&#8217;ve been to my fair share of tradeshows. Usually they&#8217;re pretty good: sessions are informative, food is ok, drinks are free, and I walk away with a handful of new connections in that industry (and a bag full of schwag that the kids can divvy up when I get home). This year is my first trip to <a href="http://www.salesforce.com/dreamforce/DF10/home/" target="_blank">Dreamforce </a>(not for lack of trying in previous years) and already I can tell:</p>
<p><em>Dreamforce is different.</em></p>
<p><em><br />
</em></p>
<p><a href="http://www.radialweb.net/wp-content/uploads/2010/08/networking.jpg"><img class="alignleft size-medium wp-image-214" title="networking" src="http://radialweb.com/wp-content/uploads/2010/08/networking-300x224.jpg" alt="" width="300" height="224" /></a>Last year&#8217;s Dreamforce announced <a title="Salesforce Chatter" href="http://www.salesforce.com/chatter/" target="_blank">Chatter</a>&#8230;a social network that runs inside the enterprise. Less than a year later, Salesforce is using that same tool to dramatically change the tradeshow experience. Within the Dreamforce registration portal, users will find a new Chatter instance dedicated to conference attendees. I can start connecting with other users<em> right now</em>&#8230; to share our background, interests, and goals for the week. I uploaded my photo so that people <em>might </em>recognize me and start a conversation (I might have to wear my orange hat). And, I can follow groups and individual sessions to learn who else will be there and what they want to learn.</p>
<p>Suddenly, Dreamforce is not a 4 day conference in December where 16,000+ people watch a <a href="http://www.salesforce.com/dreamforce/DF10/schedule/keynotes.jsp" target="_blank">keynote</a>, <a href="http://www.salesforce.com/dreamforce/DF10/schedule/tracks.jsp" target="_blank">attend sessions</a>, <a href="http://www.salesforce.com/dreamforce/DF10/networking/" target="_blank">network</a>, and <del datetime="2010-08-25T21:00:20+00:00">party</del> celebrate. (well, it IS still all of that&#8230;don&#8217;t panic). Now it&#8217;s a gathering of community members that have been talking long before day one. We&#8217;re not walking around looking to shake hands with anyone who will shake back. We&#8217;re seeking out colleagues with similar interests for that first face-to-face meeting. We&#8217;re not walking into a session with no prior knowledge about what it will cover and who else will be there. We&#8217;ll have been talking about it for weeks&#8230;months even!</p>
<p>That&#8217;s different. That&#8217;s cool!</p>
<p>If you&#8217;re <a href="http://www.salesforce.com/dreamforce/DF10/register/" target="_blank">signing up</a> for Dreamforce now, make sure to fill out your Chatter profile and start talking. If you&#8217;ve already registered, go back in and get started. Every new discussion benefits the entire Dreamforce experience.</p>
<p>Look me up once you&#8217;re in there and let&#8217;s connect.</p>
<p>Oh&#8230;and for you <a href="http://www.salesforce.com/dreamforce/DF10/cloudexpo/exposponsor.jsp" target="_blank">exhibitors</a>&#8230;you could disclose your schwag now (via Chatter) so I can get my kids&#8217; order up front&#8230;.just sayin&#8217;.</p>]]></content:encoded>
			<wfw:commentRss>http://www.radialweb.com/2010/08/dreamforce-starts-now-with-chatter/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>Mad Money&#8217;s Jim Cramer: Salesforce.com Fanboy</title>
		<link>http://www.radialweb.com/2010/08/mad-money-jim-cramer-salesforce/</link>
		<comments>http://www.radialweb.com/2010/08/mad-money-jim-cramer-salesforce/#comments</comments>
		<pubDate>Tue, 24 Aug 2010 14:05:05 +0000</pubDate>
		<dc:creator>Serious Kevin</dc:creator>
				<category><![CDATA[Salesforce.com]]></category>

		<guid isPermaLink="false">http://radialweb.com/?p=203</guid>
		<description><![CDATA[You&#8217;ve got several considerations when selecting a cloud computing solution: price, features, expandability, and company stability. I can talk all day long about features and expandability&#8230;I&#8217;ll leave it up to Jim to make the case for company stability. Notice there&#8217;s no talk of VC Funding or profitability in X years. Salesforce.com is growing their customer [...]]]></description>
			<content:encoded><![CDATA[<p>You&#8217;ve got several considerations when selecting a cloud computing solution: price, features, expandability, and company stability. I can talk all day long about features and expandability&#8230;I&#8217;ll leave it up to Jim to make the case for company stability.</p>
<p><object id="cnbcplayer" classid="clsid:d27cdb6e-ae6d-11cf-96b8-444553540000" width="400" height="380" codebase="http://download.macromedia.com/pub/shockwave/cabs/flash/swflash.cab#version=6,0,40,0"><param name="type" value="application/x-shockwave-flash" /><param name="allowfullscreen" value="true" /><param name="allowscriptaccess" value="always" /><param name="quality" value="best" /><param name="scale" value="noscale" /><param name="wmode" value="transparent" /><param name="bgcolor" value="#000000" /><param name="salign" value="lt" /><param name="src" value="http://plus.cnbc.com/rssvideosearch/action/player/id/1573177023/code/cnbcplayershare" /><param name="name" value="cnbcplayer" /><embed id="cnbcplayer" type="application/x-shockwave-flash" width="400" height="380" src="http://plus.cnbc.com/rssvideosearch/action/player/id/1573177023/code/cnbcplayershare" name="cnbcplayer" salign="lt" bgcolor="#000000" wmode="transparent" scale="noscale" quality="best" allowscriptaccess="always" allowfullscreen="true"></embed></object></p>
<p>Notice there&#8217;s no talk of VC Funding or profitability in X years. Salesforce.com is growing their customer base, innovating like no other company its size, and they&#8217;re making money.</p>
<p>My take:  a solid investment choice equates to a sound choice for your business computing needs. 82,400 other businesses would probably agree.</p>]]></content:encoded>
			<wfw:commentRss>http://www.radialweb.com/2010/08/mad-money-jim-cramer-salesforce/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Solving Simple Problems. Envelopes Using Visualforce</title>
		<link>http://www.radialweb.com/2010/08/solving-simple-problems-envelopes-using-visualforce/</link>
		<comments>http://www.radialweb.com/2010/08/solving-simple-problems-envelopes-using-visualforce/#comments</comments>
		<pubDate>Thu, 19 Aug 2010 22:01:17 +0000</pubDate>
		<dc:creator>Kevin</dc:creator>
				<category><![CDATA[Code Examples]]></category>
		<category><![CDATA[Salesforce.com]]></category>

		<guid isPermaLink="false">http://radialweb.com/?p=190</guid>
		<description><![CDATA[If there&#8217;s one thing I hate, it&#8217;s snail mail. Just the printing, the folding, the licking, the pressing&#8230;arrrgh. Hate it. The one thing I did fix&#8230;the envelope printing process. I could either use a label printer (don&#8217;t have one), print on a label sheet (but I only need one), or I could print the envelope [...]]]></description>
			<content:encoded><![CDATA[<p>If there&#8217;s one thing I hate, it&#8217;s snail mail. Just the printing, the folding, the licking, the pressing&#8230;arrrgh. Hate it.</p>
<p><a href="http://www.radialweb.net/wp-content/uploads/2010/08/envelope.png"><img class="alignleft size-medium wp-image-193" title="envelope" src="http://radialweb.com/wp-content/uploads/2010/08/envelope-300x113.png" alt="" width="300" height="113" /></a>The one thing I did fix&#8230;the envelope printing process. I could either use a label printer (don&#8217;t have one), print on a label sheet (but I only need one), or I could print the envelope using MS Word (I did this for years&#8230;I also used to use a pay phone).</p>
<p>All my contact information (name, address, etc) was in Salesforce. I just wanted a button on the Contact screen that would popup an envelope in PDF format. So I built it&#8230;and OMG it was easy.</p>
<p>All you&#8217;re going to need is a Visualforce page, a CSS stylesheet uploaded as a static resource, and a custom button on the Contact object.</p>
<p><strong><br />
<span id="more-190"></span><br />
</strong></p>
<p>First off, I&#8217;ve written this to include details about how to navigate through the Setup menus of Salesforce. We wouldn&#8217;t want to leave anyone out.</p>
<p><strong>Part 1.</strong> Let&#8217;s start with the <strong>stylesheet</strong>. Using any text editor, create a file called &#8220;envelope.css&#8221;.</p>
<p>The contents should be:</p>
<pre style="font-family: Andale Mono, Lucida Console, Monaco, fixed, monospace; color: #000000; background-color: #eee; font-size: 12px; border: 1px dashed #999999; line-height: 14px; padding: 5px; overflow: auto; width: 100%;"><code>@page {
    size: 9.5in 4.1in;/* width height */
    margin:10px 10px 10px 10px;
}

body {
    font-family: sans-serif;
}
</code></pre>
<p>Notice I&#8217;ve formatted the stylesheet for a standard 4 by 9.5 inch envelope and I&#8217;ve set the font to sans-serif. The default font for PDFs in Visualforce is Times&#8230;and there&#8217;s a very limited set of fonts available to use. (e.g., &#8220;Arial&#8221; won&#8217;t work, &#8220;Arial Unicode MS&#8221; will)</p>
<p>Now upload that stylesheet as a static resource. Goto <em>Setup -&gt; Develop -&gt; Static Resources</em> and click <em>New</em>.<br />
Name it Envelope and upload your file. (Leave Cache control as Private)</p>
<p>Check. Moving on</p>
<p><strong>Part 2. The Visualforce Page</strong><br />
The Visualforce page is probably the most complicated piece, and yet it&#8217;s pretty simple.</p>
<p>Create the new Visualforce Page. <em>Setup -&gt; Develop -&gt; Pages</em>. Click <em>New</em>.</p>
<p>Label it Envelope, and name it Envelope. Maybe even &#8220;Contact Envelope&#8221; in case you want to extend this example to Leads, Accounts, etc.</p>
<p>Here&#8217;s the entire Visualforce code:</p>
<pre style="font-family: Andale Mono, Lucida Console, Monaco, fixed, monospace; color: #000000; background-color: #eee; font-size: 12px; border: 1px dashed #999999; line-height: 14px; padding: 5px; overflow: auto; width: 100%;"><code>&lt;apex:page standardController="Contact" renderAs="PDF" showheader="false" sidebar="false"&gt;

&lt;apex:styleSheet value="{!URLFOR($Resource.Envelope)}" /&gt;

    &lt;apex:panelGrid columns="1"&gt;
        &lt;apex:outputField value="{!Contact.owner.name}"/&gt;
        &lt;apex:outputText value="{!$Organization.Name}"/&gt;
        &lt;apex:outputField value="{!Contact.owner.Street}"/&gt;
        &lt;apex:panelGroup &gt;
            &lt;apex:outputField value="{!Contact.owner.City}"/&gt;,
            &lt;apex:outputField value="{!Contact.owner.State}"/&gt;&amp;nbsp;
            &lt;apex:outputField value="{!Contact.owner.PostalCode}"/&gt;
        &lt;/apex:panelGroup&gt;
    &lt;/apex:panelGrid&gt;

    &lt;apex:panelGrid columns="1" style="padding-left:300px; margin-top:100px;width:100%"&gt;
        &lt;apex:outputField value="{!Contact.account.name}"/&gt;
        &lt;apex:panelGroup &gt;
            Attn: &lt;apex:outputField value="{!Contact.name}"/&gt;
        &lt;/apex:panelGroup&gt;
        &lt;apex:outputField value="{!Contact.mailingStreet}"/&gt;
        &lt;apex:panelGroup &gt;
            &lt;apex:outputField value="{!Contact.mailingCity}"/&gt;,
            &lt;apex:outputField value="{!Contact.mailingState}"/&gt;&amp;nbsp;
            &lt;apex:outputField value="{!Contact.mailingPostalCode}"/&gt;
        &lt;/apex:panelGroup&gt;
    &lt;/apex:panelGrid&gt;

&lt;/apex:page&gt;
</code></pre>
<p><em>Save </em>it.</p>
<p>I&#8217;ve set up the envelope to send to the Contact&#8217;s mailing address with the Contact Owner&#8217;s return address (set in the user&#8217;s Personal Information).</p>
<p><em>Here&#8217;s the piece I always forget</em>. After you save, you should be looking at the list of Visualforce pages. Click on the <em>Security</em> link next to the Envelope page. This defines which Salesforce profiles are allowed to view your Visualforce page. Make good choices and click <em>Save</em>.</p>
<p>&#8230;and you&#8217;re done with Part 2.</p>
<p><strong>Part 3. The custom button</strong><br />
First the custom button entry. <em>Setup -&gt; Customize -&gt; Contacts -&gt; Buttons and Links</em>. Click New next to Custom Buttons and Links toward the bottom of the screen. Label and Name&#8230;you guessed in&#8230;&#8221;Envelope&#8221;. Or &#8220;Print Envelope&#8221; or &#8220;Create Envelope&#8221;. Go Nuts.</p>
<p>Display Type should be <em>Detail Page Button</em> and Behavior should be <em>Display in New Window</em>.</p>
<p>Change Content Source to Visualforce Page. The screen will update and you should see your Visualforce Envelope page in the dropdown list of Content. Select it. (Trivia note for the non-programmers. The reason your page is included in this list is due to your visualforce page being defined with standardController=&#8221;Contact&#8221;.)</p>
<p>Click <em>Save</em>.</p>
<p>You&#8217;re essentially done. Now you just need to open the Page Layout for contacts and add your new button. <em>Setup -&gt; Customize -&gt; Contacts -&gt; Page Layouts</em>. Find the appropriate layout(s) and click <em>Edit</em>.</p>
<p>Select the <em>Buttons </em>option in the top left-hand box&#8230;you should see your Envelope button as one of the options. Drag it to the <em>Custom Buttons</em> box at the top of the Contact Detail section.</p>
<p>Once again, click Save. Depending on your organization setup, you may need to add your button to multiple page layouts&#8230;just repeat as necessary.</p>
<p>That&#8217;s it. You&#8217;re done. Open up a contact and click your new button. A window should pop open as a PDF formatted for your envelope.</p>
<p><strong>Important Printing Note:</strong> When you print the PDF, make sure to select..<br />
Page Scaling = None<br />
Auto-Rotate and Center = Checked<br />
Choose Paper Source by PDF Page Size = Checked</p>
<p>I&#8217;ve only tested this on my own HP Inkjet Printer. But all printers should work alike (ok, that was a lie)</p>
<p>Give it a shot&#8230;and drop a comment to let me know how it works for you.</p>]]></content:encoded>
			<wfw:commentRss>http://www.radialweb.com/2010/08/solving-simple-problems-envelopes-using-visualforce/feed/</wfw:commentRss>
		<slash:comments>3</slash:comments>
		</item>
		<item>
		<title>Summarizing Salesforce fields with Triggers</title>
		<link>http://www.radialweb.com/2010/08/summarizing_salesforce_fields_with_triggers/</link>
		<comments>http://www.radialweb.com/2010/08/summarizing_salesforce_fields_with_triggers/#comments</comments>
		<pubDate>Fri, 13 Aug 2010 21:58:44 +0000</pubDate>
		<dc:creator>Kevin</dc:creator>
				<category><![CDATA[Code Examples]]></category>
		<category><![CDATA[Salesforce.com]]></category>

		<guid isPermaLink="false">http://radialweb.com/?p=172</guid>
		<description><![CDATA[Roll Up Summary fields are a Salesforce Admin&#8217;s best friend. But they&#8217;re only available on Master-Detail relationships. Understandable, but what to do when you need a summary of data when the master-detail relationship isn&#8217;t there? Triggers to the rescue In this example, I&#8217;ll be counting the number of activities related to an Opportunity. This one&#8217;s [...]]]></description>
			<content:encoded><![CDATA[<p>Roll Up Summary fields are a Salesforce Admin&#8217;s best friend. But they&#8217;re only available on Master-Detail relationships. Understandable, but what to do when you need a summary of data when the master-detail relationship isn&#8217;t there?  Triggers to the rescue  In this example, I&#8217;ll be counting the number of activities related to an Opportunity. This one&#8217;s for you <a href="http://twitter.com/amber9904" target="_blank">@Amber9904</a>.</p>
<p>This example is a bit trickier since activities are made up of Tasks and Events&#8230;so we need to deal with each one. To do this, we&#8217;ll create 3 elements:</p>
<ul>
<li>A class called OpportunityActivityCount</li>
<li>A Trigger on Task that fires After Insert, After Update, After Delete, and After Undelete</li>
<li>A Trigger on Event that fires After Insert, After Update, After Delete, and After Undelete</li>
</ul>
<p><span id="more-172"></span>Some requirements:  You&#8217;ll need a <strong>new field on the opportunity table</strong>. Name it whatever you want, but for the attached code, it&#8217;s expecting <strong>Activity_Count (Activity_Count__c)</strong></p>
<p><strong>First off, the class:</strong></p>
<p>(Note that we&#8217;re including the unit test in here as well. It depends on the triggers to be loaded later in order to work. Whether the unit tests belong here, or in a central test class is another topic)</p>
<pre style="font-family: Andale Mono, Lucida Console, Monaco, fixed, monospace; color: #000000; background-color: #eee; font-size: 12px; border: 1px dashed #999999; line-height: 14px; padding: 5px; overflow: auto; width: 100%;"><code>public with sharing class OpportunityActivityCount {

    public static Boolean didRun = false;
    public static String oppPrefix =  Opportunity.sObjectType.getDescribe().getKeyPrefix();

    /*
    * Takes a set of opportunity IDs, queries those opportunities, and updates the activity count if appropriate
    */
    public static void updateOpportunityCounts(Set&lt;ID&gt; oppIds) {

        if (didRun == false) { //We only want this operation to run once per transaction.
            didRun = true;

            //Query all the opportunites, including the tasks child relationships
            List&lt;Opportunity&gt; opps = [SELECT ID, activity_count__c, (SELECT ID FROM Tasks), (SELECT ID FROM Events) FROM Opportunity WHERE ID IN :oppIds];
            List&lt;Opportunity&gt; updateOpps = new List&lt;Opportunity&gt;();

            for (Opportunity o : opps) {
                Integer count = o.tasks.size() + o.events.size();

                if (o.activity_count__c != count) {
                    o.activity_count__c = count;
                    updateOpps.add(o); //we're only doing updates to opps that have changed...no need to modify the others
                }
            }

            //Update the appropriate opportunities
            try {
                update updateOpps;
            } catch (Exception e) {
                //This is controversial. Anything could happen when updating the opportunity..validation rule, security, etc. The key is we don't
                //want the event update to fail...so we put a try catch around the opp update to make sure we don't stop that from happening.
            }
        }
    }

    /*
    * Test method for this class and TaskUpdateOpportunity and EventUpdateOpportunity
    */
    public static testMethod void testCountTask() {
        //Setup
        Account a = new Account(name='Test');
        insert a;

        Opportunity opp = new Opportunity(accountId = a.id, name='Test Opp', StageName='New', CloseDate=System.today());
        insert opp;

        //Insert our first task
        Task t = new Task(subject='Test Activity', whatId = opp.id);
        insert t;

        //Verify count
        opp = [SELECT ID, activity_count__c FROM Opportunity WHERE ID = :opp.id];
        System.assertEquals(1,opp.activity_count__c);

        //Disconnect task from the opportunity
        didRun = false; //Reset
        t.whatId = null;
        update t;
        //Verify count = 0
        opp = [SELECT ID, activity_count__c FROM Opportunity WHERE ID = :opp.id];
        System.assertEquals(0,opp.activity_count__c);

        didRun = false; //Reset
        //Add an event
        Event e = new Event(subject='Test Event', whatId = opp.id, startDateTime = System.Now(), endDateTime = System.now());
        insert e;

        //Verify count = 1
        opp = [SELECT ID, activity_count__c FROM Opportunity WHERE ID = :opp.id];
        System.assertEquals(1,opp.activity_count__c);

        //Relink the task to the opportunity
        didRun = false; //Reset
        t.whatId = opp.id;
        update t;

        //Verify count = 2
        opp = [SELECT ID, activity_count__c FROM Opportunity WHERE ID = :opp.id];
        System.assertEquals(2,opp.activity_count__c);

        //Disconnect the event from the opportunity
        didRun = false; //Reset
        e.whatId = null;
        update e;

        //Verify count is back down to 1
        opp = [SELECT ID, activity_count__c FROM Opportunity WHERE ID = :opp.id];
        System.assertEquals(1,opp.activity_count__c);

        //Delete the task
        didRun = false; //reset
        delete t;
        //Verify count is back down to 0
        opp = [SELECT ID, activity_count__c FROM Opportunity WHERE ID = :opp.id];
        System.assertEquals(0,opp.activity_count__c);

    }

}
</code></pre>
<p><strong>Next, the Task Trigger</strong>.</p>
<p>Notice that we&#8217;re capturing all of the &#8220;After&#8221; events.  This is important since deleting a task affects the count just as much as adding a task. Also note that we need to do a little be extra legwork when it comes to Tasks&#8230;the relationship from Task to Opportunity is a &#8220;soft&#8221; relationship&#8230;since tasks can be related to all sorts of record types. Given that, we&#8217;re doing a check on the task to see if it&#8217;s linked to an Opportunity to prevent trying to do a bunch of unneeded stuff on non-opportunity-related tasks.</p>
<pre style="font-family: Andale Mono, Lucida Console, Monaco, fixed, monospace; color: #000000; background-color: #eee; font-size: 12px; border: 1px dashed #999999; line-height: 14px; padding: 5px; overflow: auto; width: 100%;"><code>trigger TaskUpdateOpportunity on Task (after delete, after insert, after undelete, after update) {

    Set&lt;ID&gt; oppIds = new Set&lt;ID&gt;();
    //We only care about tasks linked to opportunities.
    String prefix =  OpportunityActivityCount.oppPrefix;

    //Add any opportunity ids coming from the new data
    if (Trigger.new != null) {
        for (Task t : Trigger.new) {
            if (t.WhatId != null &amp;&amp; String.valueOf(t.whatId).startsWith(prefix) ) {
                oppIds.add(t.whatId);
            }
        }
    }

    //Also add any opportunity ids coming from the old data (deletes, moving an activity from one opportunity to another)
    if (Trigger.old != null) {
        for (Task t : Trigger.old) {
            if (t.WhatId != null &amp;&amp; String.valueOf(t.whatId).startsWith(prefix) ) {
                oppIds.add(t.whatId);
            }
        }
    }

    if (oppIds.size() &gt; 0)
        OpportunityActivityCount.updateOpportunityCounts(oppIds);

}
</code></pre>
<p><strong>Finally, the Event Trigger.</strong></p>
<p>This should look familiar. It&#8217;s just like Task..but with event.</p>
<pre style="font-family: Andale Mono, Lucida Console, Monaco, fixed, monospace; color: #000000; background-color: #eee; font-size: 12px; border: 1px dashed #999999; line-height: 14px; padding: 5px; overflow: auto; width: 100%;"><code>trigger EventUpdateOpportunity on Event (after delete, after insert, after undelete, after update) {

    Set&lt;ID&gt; oppIds = new Set&lt;ID&gt;();
    //We only care about tasks linked to opportunities.
    String prefix = OpportunityActivityCount.oppPrefix;

    //Add any opportunity ids coming from the new data
    if (Trigger.new != null) {
        for (Event e : Trigger.new) {
            if (e.WhatId != null &amp;&amp; String.valueOf(e.whatId).startsWith(prefix) ) {
                oppIds.add(e.whatId);
            }
        }
    }

    //Also add any opportunity ids coming from the old data (deletes, moving an activity from one opportunity to another)
    if (Trigger.old != null) {
        for (Event e : Trigger.old) {
            if (e.WhatId != null &amp;&amp; String.valueOf(e.whatId).startsWith(prefix) ) {
                oppIds.add(e.whatId);
            }
        }
    }

    if (oppIds.size() &gt; 0)
        OpportunityActivityCount.updateOpportunityCounts(oppIds);

}
</code></pre>
<p>That&#8217;s it. Give it a try and let me know how it works out for you.</p>
<p>Here&#8217;s some items to keep in mind. The triggers are &#8220;bulkified&#8221; to account for large numbers of Tasks and Events. I would still recommend testing multiple task inserts&#8230;especially as they interact with add-on services like Outlook Connector, Conga, and mass email marketing tools.</p>]]></content:encoded>
			<wfw:commentRss>http://www.radialweb.com/2010/08/summarizing_salesforce_fields_with_triggers/feed/</wfw:commentRss>
		<slash:comments>7</slash:comments>
		</item>
		<item>
		<title>Software Build vs. Buy&#8230;a Third Option</title>
		<link>http://www.radialweb.com/2010/07/software-build-vs-buy-a-third-option/</link>
		<comments>http://www.radialweb.com/2010/07/software-build-vs-buy-a-third-option/#comments</comments>
		<pubDate>Fri, 16 Jul 2010 17:09:01 +0000</pubDate>
		<dc:creator>Kevin</dc:creator>
				<category><![CDATA[Salesforce.com]]></category>
		<category><![CDATA[Force.com]]></category>
		<category><![CDATA[Salesforce]]></category>

		<guid isPermaLink="false">http://radialweb.com/?p=150</guid>
		<description><![CDATA[As an IT consultant and software developer, no initial client meeting would be complete without the question, &#8220;Do we need to custom-build this thing or can we buy off-the-shelf?&#8221; Fellow tweet @darthgarry pointed out a great article about a project that objectively compared the two options. In that case, off-the-shelf was the hands-down winner. I [...]]]></description>
			<content:encoded><![CDATA[<p><a href="http://www.radialweb.net/wp-content/uploads/2010/07/choices-sml.jpg"><img class="alignleft size-full wp-image-153" style="border: 0px initial initial;" title="choices" src="http://www.radialweb.net/wp-content/uploads/2010/07/choices-sml.jpg" alt="Build vs Buy" width="160" height="107" /></a>As an IT consultant and software developer, no initial client meeting would be complete without the question, &#8220;Do we need to custom-build this thing or can we buy off-the-shelf?&#8221; Fellow tweet @<a href="http://twitter.com/DarthGarry" target="_blank">darthgarry </a>pointed out a <a href="http://www.effectivedatabase.com/CustomvsOTS.shtml" target="_blank">great article</a> about a project that objectively compared the two options. In that case, off-the-shelf was the hands-down winner. I answer the question by evaluating the level of innovation for the customer&#8217;s designed solution and the market maturity in that space. I would never build a customer relationship application or accounting package (at least, not anymore) but I would consider it for a new, innovative process that the client has designed to improve productivity (sorry that&#8217;s so vague).</p>
<p><em>Enter Option #3</em>. <a href="http://www.salesforce.com" target="_blank">Salesforce.com</a> and the <a href="http://www.salesforce.com/platform/" target="_blank">Force.com</a> development platform grant another choice: subscribe to their service and all the great features within, and use custom configuration and development to fill in the gaps. Configuration options in off-the-shelf software are nothing new, but Salesforce.com takes it to a new level: <a href="http://www.salesforce.com/platform/cloud-platform/database.jsp" target="_blank">custom fields and data tables</a> with zero programming, customized page layouts via a drag-and-drop administrative screen, and/or entirely custom user interfaces and application logic using <a href="http://www.salesforce.com/platform/cloud-platform/programmable-ui.jsp" target="_blank">Visualforce </a>and <a href="http://www.salesforce.com/platform/cloud-platform/programmable-logic.jsp" target="_blank">Apex programming</a>.</p>
<p><span id="more-150"></span>Back to my vague example: the client wants an application for an innovative process that improves productivity. Great stuff&#8230;no off the shelf software is going to do that (that&#8217;s what makes it innovative). But a from-scratch custom software solution is going to drag in all the non-innovative elements with it: screens to track customer information, email notifications, reporting, dashboards, login screens, forgot-your-password functionality, etc. Need to build in a workflow engine and some approval processes? There&#8217;s open source code libraries for that stuff, but I&#8217;ll need to load it up and incorporate that into the solution. Share data with another system via web services?  This is getting expensive.</p>
<p>Salesforce.com&#8217;s option 3 gets you started with all the essentials (and more): secure login, account/contact management, activity tracking, reporting, dashboards, workflow and approvals, and the list goes on. Start there, and then spend your customization time and money on the innovative stuff. And while you&#8217;re at it, turn on Salesforce.com&#8217;s newest feature, <a href="http://www.salesforce.com/chatter/" target="_blank">Chatter</a>, and watch your users turn your software solution into a collaborative business environment.</p>
<p>Best part: if you already use Salesforce.com (Enterprise Edition or above), you already have the Force.com platform. Build your custom application regardless of it having anything to do with CRM. Link it to your Acounts/Contacts/Opportunities, or build it entirely separate. You have an army of security options to determine which users see what features.</p>
<p>Don&#8217;t have Salesforce.com yet? Don&#8217;t forget to consider the power of the Force.com platform to solve other business challenges outside of your CRM need. More Return for the same Investment. Get the <a href="http://radialweb.com/salesforce/" target="_blank">30-Day Free Trial</a> to experience the benefits first hand.</p>
<p>Don&#8217;t need CRM right now? The Force.com is available as a <a href="http://www.salesforce.com/platform/platform-edition/" target="_blank">stand-alone solution</a> without all the CRM features. There&#8217;s even a <a href="https://www.salesforce.com/form/signup/freeforce-platform.jsp?d=70130000000EoAM&amp;internal=true" target="_blank">Free Edition</a> to get you started.</p>
<p>And don&#8217;t forget to check out the Salesforce <a href="http://sites.force.com/appexchange/home" target="_blank">AppExchange </a>to see what other features can be loaded in before settling in on your build/buy decision. You&#8217;ll find free add-ons from Force.com Labs and hundreds of 3rd party solutions offered by the Salesforce.com ISV community.</p>
<p>So many options!</p>]]></content:encoded>
			<wfw:commentRss>http://www.radialweb.com/2010/07/software-build-vs-buy-a-third-option/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>Salesforce.com&#8217;s Marc Benioff on Mad Money</title>
		<link>http://www.radialweb.com/2009/10/salesforce-coms-mark-benioff-on-mad-money/</link>
		<comments>http://www.radialweb.com/2009/10/salesforce-coms-mark-benioff-on-mad-money/#comments</comments>
		<pubDate>Wed, 07 Oct 2009 14:03:27 +0000</pubDate>
		<dc:creator>Serious Kevin</dc:creator>
				<category><![CDATA[Salesforce.com]]></category>

		<guid isPermaLink="false">http://radialweb.com/?p=101</guid>
		<description><![CDATA[Marc B makes his third trip back to Mad Money&#8230;and this time, he brought a demo!]]></description>
			<content:encoded><![CDATA[<p>Marc B makes his third trip back to Mad Money&#8230;and this time, he brought a demo!</p>
<p><br/><br />
<object id="cnbcplayer" height="380" width="400" classid="clsid:D27CDB6E-AE6D-11cf-96B8-444553540000" codebase="http://download.macromedia.com/pub/shockwave/cabs/flash/swflash.cab#version=9,0,0,0" ><param name="type" value="application/x-shockwave-flash"/><param name="allowfullscreen" value="true"/><param name="allowscriptaccess" value="always"/><param name="quality" value="best"/><param name="scale" value="noscale" /><param name="wmode" value="transparent"/><param name="bgcolor" value="#000000"/><param name="salign" value="lt"/><param name="movie" value="http://plus.cnbc.com/rssvideosearch/action/player/id/1285589574/code/cnbcplayershare"/><embed name="cnbcplayer" PLUGINSPAGE="http://www.macromedia.com/go/getflashplayer" allowfullscreen="true" allowscriptaccess="always" bgcolor="#000000" height="380" width="400" quality="best" wmode="transparent" scale="noscale" salign="lt" src="http://plus.cnbc.com/rssvideosearch/action/player/id/1285589574/code/cnbcplayershare" type="application/x-shockwave-flash" /><br />
</object></p>]]></content:encoded>
			<wfw:commentRss>http://www.radialweb.com/2009/10/salesforce-coms-mark-benioff-on-mad-money/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Force.com introduces Sites and Free Edition</title>
		<link>http://www.radialweb.com/2009/06/forcecom-introduces-sites-and-free-edition/</link>
		<comments>http://www.radialweb.com/2009/06/forcecom-introduces-sites-and-free-edition/#comments</comments>
		<pubDate>Tue, 23 Jun 2009 15:54:24 +0000</pubDate>
		<dc:creator>Kevin</dc:creator>
				<category><![CDATA[Uncategorized]]></category>

		<guid isPermaLink="false">http://radialweb.com/?p=77</guid>
		<description><![CDATA[]]></description>
			<content:encoded><![CDATA[<p><object width="640" height="385"><param name="movie" value="http://www.youtube.com/v/8tf_WaD52mI&#038;hl=en&#038;fs=1&#038;rel=0&#038;color1=0x2b405b&#038;color2=0x6b8ab6"></param><param name="allowFullScreen" value="true"></param><param name="allowscriptaccess" value="always"></param><embed src="http://www.youtube.com/v/8tf_WaD52mI&#038;hl=en&#038;fs=1&#038;rel=0&#038;color1=0x2b405b&#038;color2=0x6b8ab6" type="application/x-shockwave-flash" allowscriptaccess="always" allowfullscreen="true" width="640" height="385"></embed></object></p>]]></content:encoded>
			<wfw:commentRss>http://www.radialweb.com/2009/06/forcecom-introduces-sites-and-free-edition/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>
