<?xml version='1.0' encoding='UTF-8'?><?xml-stylesheet href="http://www.blogger.com/styles/atom.css" type="text/css"?><feed xmlns='http://www.w3.org/2005/Atom' xmlns:openSearch='http://a9.com/-/spec/opensearchrss/1.0/' xmlns:blogger='http://schemas.google.com/blogger/2008' xmlns:georss='http://www.georss.org/georss' xmlns:gd="http://schemas.google.com/g/2005" xmlns:thr='http://purl.org/syndication/thread/1.0'><id>tag:blogger.com,1999:blog-2810682963225669649</id><updated>2024-02-18T19:14:09.374-08:00</updated><category term="formula"/><category term="views"/><title type='text'>Salesforcery!</title><subtitle type='html'></subtitle><link rel='http://schemas.google.com/g/2005#feed' type='application/atom+xml' href='http://salesforcery.blogspot.com/feeds/posts/default'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2810682963225669649/posts/default?redirect=false'/><link rel='alternate' type='text/html' href='http://salesforcery.blogspot.com/'/><link rel='hub' href='http://pubsubhubbub.appspot.com/'/><link rel='next' type='application/atom+xml' href='http://www.blogger.com/feeds/2810682963225669649/posts/default?start-index=26&amp;max-results=25&amp;redirect=false'/><author><name>Kirk</name><uri>http://www.blogger.com/profile/06983456068299525612</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><generator version='7.00' uri='http://www.blogger.com'>Blogger</generator><openSearch:totalResults>37</openSearch:totalResults><openSearch:startIndex>1</openSearch:startIndex><openSearch:itemsPerPage>25</openSearch:itemsPerPage><entry><id>tag:blogger.com,1999:blog-2810682963225669649.post-1530907070894084806</id><published>2012-11-06T19:20:00.004-08:00</published><updated>2012-11-06T19:20:47.166-08:00</updated><title type='text'>Removing the Magic, Applying the Science, Keeping the Force</title><content type='html'>I&#39;m very excited and happy to announce that I have joined Ami Assayag (&lt;a href=&quot;https://twitter.com/amiassayag&quot; target=&quot;_blank&quot;&gt;@amiassayag&lt;/a&gt;) and his company, CRM Science &amp;nbsp;(&lt;a href=&quot;http://www.crmscience.com/&quot;&gt;www.crmscience.com&lt;/a&gt;), as a Salesforce.com developer. &lt;br /&gt;
&lt;br /&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;
&lt;a href=&quot;http://www.crmscience.com/&quot; target=&quot;_blank&quot;&gt;&lt;img border=&quot;0&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEheCONK-IJ0enqdYKrcP8r5DLMGVbu5TEl2hoKLlpOVCgj3dETgmQJnCiocsgfBS0ejrtSO1Sbtrl98iXGroxn6dWDnfHA3BaAXQnh2jnihcNI2DAHV_or_wtrzYpLwSv3spZkYo_TTq9HP/s1600/CRMScience_165x165.png&quot; /&gt;&lt;/a&gt;&lt;/div&gt;
&lt;br /&gt;
&lt;br /&gt;
Be sure to check out &lt;a href=&quot;http://www.crmscience.com/&quot;&gt;www.crmscience.com&lt;/a&gt; and follow us on Twitter &lt;a href=&quot;https://twitter.com/CRMScience&quot; target=&quot;_blank&quot;&gt;@CRMScience&lt;/a&gt;&amp;nbsp;for the latest and greatest.&lt;br /&gt;
&lt;br /&gt;
If you&#39;re in the Philadelphia area, be sure to check out the PhillyForce Salesforce User&#39;s Group (&lt;a href=&quot;http://www.meetup.com/PhillyForce/&quot;&gt;http://www.meetup.com/PhillyForce&lt;/a&gt;). &amp;nbsp;It&#39;s a great community with a great number of area experts that offers monthly meetups and fairly regular co-working sessions during the week. &amp;nbsp;(&lt;a href=&quot;https://twitter.com/phillyforce&quot; target=&quot;_blank&quot;&gt;@PhillyForce&lt;/a&gt;)&lt;br /&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;
&lt;a href=&quot;http://www.meetup.com/PhillyForce&quot; target=&quot;_blank&quot;&gt;&lt;img border=&quot;0&quot; height=&quot;192&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEh72D0Au_hbfAvumqLMl51Sqzg_5xcGQFmzbk76s92ESLPWBhMl3aEcw7qPOhoaIviF_Pk6fjbNPLnBBo1hLUYqRrIAUkQIOOFDny4MrGFQrTDnLEjjH_geVddQrJ_3QVb3kdl4NGCHcndC/s320/PhillyForce.jpeg&quot; width=&quot;320&quot; /&gt;&lt;/a&gt;&lt;/div&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;</content><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2810682963225669649/posts/default/1530907070894084806'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2810682963225669649/posts/default/1530907070894084806'/><link rel='alternate' type='text/html' href='http://salesforcery.blogspot.com/2012/11/removing-magic-applying-science-keeping.html' title='Removing the Magic, Applying the Science, Keeping the Force'/><author><name>Kirk</name><uri>http://www.blogger.com/profile/06983456068299525612</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEheCONK-IJ0enqdYKrcP8r5DLMGVbu5TEl2hoKLlpOVCgj3dETgmQJnCiocsgfBS0ejrtSO1Sbtrl98iXGroxn6dWDnfHA3BaAXQnh2jnihcNI2DAHV_or_wtrzYpLwSv3spZkYo_TTq9HP/s72-c/CRMScience_165x165.png" height="72" width="72"/></entry><entry><id>tag:blogger.com,1999:blog-2810682963225669649.post-4880816569520941456</id><published>2012-09-19T23:40:00.000-07:00</published><updated>2012-09-19T23:40:08.676-07:00</updated><title type='text'>Dreamforce &#39;12 - Red Hot Day 2</title><content type='html'>Today boils down into Keynotes and the Gala. &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;div&gt;
The keynote featured success stories from many clients, using many of the new in &#39;12 sister sites. &amp;nbsp;The School of Rock is an example of this and they demonstrated how their school functions with Do.com. &amp;nbsp;Two announcements made for Do.com were an Android app and a now open API for developer use.&lt;/div&gt;
&lt;div&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div&gt;
Then on came MC Hammer, performing with his crew &quot;Too Legit to Quit&quot; and &quot;Can&#39;t Touch This.&quot;&lt;/div&gt;
&lt;div&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div&gt;
Next came a quick segment that seemed fairly recycled from last year, touting the evolution of computing and its shift from on-premise servers and hardware to the cloud. &amp;nbsp;These changes are fostering the &quot;Social Revolution&quot; in which Salesforce.com is proud to be part of.&lt;/div&gt;
&lt;div&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div&gt;
The rest of the keynote were success stories from GE,&amp;nbsp;Rossignol, Charles Schwab, Activision, Yelp, Commonwealth Bank, Virgin America, and Facebook. &amp;nbsp;Marc Benioff&#39;s vision of General Electrics future was interesting and in short form think of engines with APIs, dumping data into Salesforce for analysis. &amp;nbsp;I saw this on a smaller scale in the Dev Zone yesterday with the Fitbit. &amp;nbsp;My highschool Cisco networking professor, Mr. Thomas, predicted this over a decade &amp;nbsp;ago when he said everything will talk to everything and collect information about itself. &amp;nbsp;Data is king.&lt;/div&gt;
&lt;div&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div&gt;
The Fireside Chat with Marc Benioff and Sir Richard Branson started off interesting and then seemed to snowball off-topic. &amp;nbsp;I enjoyed hearing about Branson&#39;s start and how he became who he is, but the conversation quickly turned to politics and my ears went numb; tuning in and out. &amp;nbsp;Benioff inquired Branson&#39;s stance on the war on drugs. &amp;nbsp;A cheer erupted as Branson announced the war on drugs was a failed effort and he would like to see countries &quot;decriminalize&quot; drugs (note, not legalize) and treat their use the same as you would treat alcoholism.&lt;/div&gt;
&lt;div&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div&gt;
The Gala this evening was very enjoyable. &amp;nbsp;7-8 blocks away from the Moscone Center, City Hall was set up to entertain this year&#39;s almost 90,000 Dreamforce attendees. &amp;nbsp;Starving from a long day, we were first greeted with popcorn. &amp;nbsp;Popcorn turned into tents with&amp;nbsp;gazpacho, BLTs, shrimp coctails and tons of beer and wine. &amp;nbsp;Hiking deeper into the lawn area, more food tents contained quite an array of food including fish and chips, nachos, meatballs, pizza, and more.&lt;/div&gt;
&lt;div&gt;
&lt;br /&gt;Red Hot Chili Peppers came on a little after 8:15 and played their greatest hits, new and old (Can&#39;t Stop, By The Way, Dani California,&amp;nbsp;Californications, Under the Bridge, Snow and others with Give It Away as the encore.&lt;/div&gt;
&lt;div&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;
&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhd56NHUPwsXx6zOkTiLwo1WuqTSNdIvjS7gprCQmrk9Oxn1AXnOfPQml84NmqmT1qb1VgoH8fz89PNBUIl40IoV52wDMqlfasRMRm4ZjsrFWG1GlUuXbLkpAN1IuOPQYvQXoBi1sdTeGOV/s1600/RHCP.jpg&quot; imageanchor=&quot;1&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; height=&quot;231&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhd56NHUPwsXx6zOkTiLwo1WuqTSNdIvjS7gprCQmrk9Oxn1AXnOfPQml84NmqmT1qb1VgoH8fz89PNBUIl40IoV52wDMqlfasRMRm4ZjsrFWG1GlUuXbLkpAN1IuOPQYvQXoBi1sdTeGOV/s320/RHCP.jpg&quot; width=&quot;320&quot; /&gt;&lt;/a&gt;&lt;/div&gt;
&lt;div&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;</content><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2810682963225669649/posts/default/4880816569520941456'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2810682963225669649/posts/default/4880816569520941456'/><link rel='alternate' type='text/html' href='http://salesforcery.blogspot.com/2012/09/dreamforce-12-red-hot-day-2.html' title='Dreamforce &#39;12 - Red Hot Day 2'/><author><name>Kirk</name><uri>http://www.blogger.com/profile/06983456068299525612</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhd56NHUPwsXx6zOkTiLwo1WuqTSNdIvjS7gprCQmrk9Oxn1AXnOfPQml84NmqmT1qb1VgoH8fz89PNBUIl40IoV52wDMqlfasRMRm4ZjsrFWG1GlUuXbLkpAN1IuOPQYvQXoBi1sdTeGOV/s72-c/RHCP.jpg" height="72" width="72"/></entry><entry><id>tag:blogger.com,1999:blog-2810682963225669649.post-9207010617664813630</id><published>2012-09-18T23:45:00.001-07:00</published><updated>2012-09-18T23:45:30.743-07:00</updated><title type='text'>Dreamforce &#39;12 - Day 1</title><content type='html'>
 
 
 


&lt;div style=&quot;margin-bottom: 0in;&quot;&gt;
&lt;span style=&quot;color: black;&quot;&gt;&lt;span style=&quot;font-family: Times New Roman;&quot;&gt;&lt;span style=&quot;font-size: medium;&quot;&gt;I&#39;m
back in San Francisco again this year for Dreamforce &#39;12. &amp;nbsp;After
an (adventurous || adrenaline packed || terrifying || downright good
time) weekend of climbing in Yosemite with&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;a href=&quot;http://crmscience.com/&quot; target=&quot;_blank&quot;&gt;&amp;nbsp;&lt;span style=&quot;font-family: Times New Roman;&quot;&gt;&lt;span style=&quot;font-size: medium;&quot;&gt;CRM
Science&#39;s&lt;/span&gt;&lt;/span&gt;&lt;/a&gt;&lt;span style=&quot;color: black;&quot;&gt;&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;color: black;&quot;&gt;&lt;span style=&quot;font-family: Times New Roman;&quot;&gt;&lt;span style=&quot;font-size: medium;&quot;&gt;Ami
Assayag, I came to this city in a mentally prepared state to soak in
as much as I can. &amp;nbsp;The older, wiser, and more experienced me
thought I knew what to expect, but it seems #df12 has grown just as
much as I have over the past year.&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;margin-bottom: 0in;&quot;&gt;
&lt;br /&gt;
&lt;/div&gt;
&lt;div style=&quot;margin-bottom: 0in;&quot;&gt;
&lt;span style=&quot;color: black;&quot;&gt;&lt;span style=&quot;font-family: Times New Roman;&quot;&gt;&lt;span style=&quot;font-size: medium;&quot;&gt;The
number of attendees, venues, and sessions have all expanded. &amp;nbsp;
&amp;nbsp;Somehow, I managed to spend all of my day in the Moscone West
building.&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;margin-bottom: 0in;&quot;&gt;
&lt;br /&gt;
&lt;/div&gt;
&lt;div style=&quot;margin-bottom: 0in;&quot;&gt;
&lt;span style=&quot;color: black;&quot;&gt;&lt;span style=&quot;font-family: Times New Roman;&quot;&gt;&lt;span style=&quot;font-size: medium;&quot;&gt;&lt;b&gt;&lt;u&gt;Session
#1:  Unleash the Force.com User Interface with Skuid&lt;/u&gt;&lt;/b&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;margin-bottom: 0in;&quot;&gt;
&lt;span style=&quot;color: black;&quot;&gt;&lt;span style=&quot;font-family: Times New Roman;&quot;&gt;&lt;span style=&quot;font-size: medium;&quot;&gt;&lt;a href=&quot;http://www.skoodat.com/skuid&quot; target=&quot;_blank&quot;&gt;Skoodat&#39;s&amp;nbsp;Skuid&lt;/a&gt;
seems like a great tool that would save a ton of time in developing
custom page layouts or even stand-alone pages.  Its drag and drop
visual page editor reminded me of Frontpage or Dreamweaver as the
code for the page is created for you behind the scenes.  Within a few
minutes, the presenters created a new multi-paned and tabbed Contact
view as well as a custom list page.  With a handful of clicks, they
were able to add additional actions to each row of their data set. 
I&#39;d love to see something like this become a general release feature&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;margin-bottom: 0in;&quot;&gt;
&lt;br /&gt;
&lt;/div&gt;
&lt;div style=&quot;margin-bottom: 0in;&quot;&gt;
&lt;span style=&quot;color: black;&quot;&gt;&lt;span style=&quot;font-family: Times New Roman;&quot;&gt;&lt;span style=&quot;font-size: medium;&quot;&gt;&lt;b&gt;&lt;u&gt;Session
#2: &amp;nbsp;The 10-Year Evolution of Developers and Salesforce.com&lt;/u&gt;&lt;/b&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;margin-bottom: 0in;&quot;&gt;
&lt;span style=&quot;color: black;&quot;&gt;&lt;span style=&quot;font-family: Times New Roman;&quot;&gt;&lt;span style=&quot;font-size: medium;&quot;&gt;This
was another session that took place in the Developer Theater tucked behind the Dev Zone.&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;font-size: medium;&quot;&gt;David Claiborne of The Claiborne Company&lt;/span&gt;&lt;span style=&quot;font-size: medium;&quot;&gt;&amp;nbsp;did a great job of showing how far Salesforce.com has come along over the last decade+.  Apex and
Visualforce haven&#39;t always been key components to the platform,
neither have sandboxes or custom objects.  This session made me
realize that I began working with many of the modern enhancements of
Salesforce.com as they were being released.&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;margin-bottom: 0in;&quot;&gt;
&lt;br /&gt;
&lt;/div&gt;
&lt;div style=&quot;margin-bottom: 0in;&quot;&gt;
&lt;span style=&quot;color: black;&quot;&gt;&lt;span style=&quot;font-family: Times New Roman;&quot;&gt;&lt;span style=&quot;font-size: medium;&quot;&gt;For a
list of those features and to vote for your 3 favorite features visit: &lt;a href=&quot;http://df12vote.force.com/vote&quot; target=&quot;_blank&quot;&gt;here&lt;/a&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;margin-bottom: 0in;&quot;&gt;
&lt;br /&gt;
&lt;/div&gt;
&lt;div style=&quot;margin-bottom: 0in;&quot;&gt;
&lt;span style=&quot;color: black;&quot;&gt;&lt;span style=&quot;font-family: Times New Roman;&quot;&gt;&lt;span style=&quot;font-size: medium;&quot;&gt;&lt;b&gt;&lt;u&gt;Session
#3:  Apex Design Patterns&lt;/u&gt;&lt;/b&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;margin-bottom: 0in;&quot;&gt;
&lt;span style=&quot;color: black;&quot;&gt;&lt;span style=&quot;font-family: Times New Roman;&quot;&gt;&lt;span style=&quot;font-size: medium;&quot;&gt;Not
coming from a developer background, this was one of the best sessions
of the day for me.  Not only were best practices discussed, but
common development patterns applied to Apex were demonstrated.  I can
see future posts in my near future as I explore the 6 patterns
presented.&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;margin-bottom: 0in;&quot;&gt;
&lt;br /&gt;
&lt;/div&gt;
&lt;div style=&quot;margin-bottom: 0in;&quot;&gt;
&lt;/div&gt;
&lt;div style=&quot;margin-bottom: 0in;&quot;&gt;
&lt;/div&gt;
&lt;ol&gt;
&lt;li&gt;Singleton&lt;/li&gt;
&lt;li&gt;Strategy&lt;/li&gt;
&lt;li&gt;sObject Decorater&lt;/li&gt;
&lt;li&gt;Façade&lt;/li&gt;
&lt;li&gt;Composite&lt;/li&gt;
&lt;li&gt;Bulk State Transition&lt;/li&gt;
&lt;/ol&gt;
&lt;br /&gt;
&lt;div&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div&gt;
My other sessions of the day included:&lt;/div&gt;
&lt;div&gt;
Session #4: &amp;nbsp;JavaScript Patterns and Practices from the Salesforce Experts&lt;/div&gt;
&lt;div&gt;
Session #5: &amp;nbsp;Introduction to Heroku&lt;/div&gt;
&lt;div&gt;
Session #6: &amp;nbsp;Workbench: &amp;nbsp;The API Swiss Army Knife&lt;/div&gt;
&lt;br /&gt;

&lt;div style=&quot;margin-bottom: 0in;&quot;&gt;
&lt;br /&gt;
&lt;/div&gt;
&lt;div style=&quot;margin-bottom: 0in;&quot;&gt;
The Expo (Moscone North) and Campground (between North and south) opened today at 2 and held a Welcoming Reception at 6. &amp;nbsp;Great food and drinks spread out&amp;nbsp;among the vendors. &amp;nbsp;&lt;/div&gt;
&lt;div style=&quot;margin-bottom: 0in;&quot;&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div style=&quot;margin-bottom: 0in;&quot;&gt;
Follow me on Twitter: &amp;nbsp;&lt;a href=&quot;https://twitter.com/kirkevonphilly&quot; target=&quot;_blank&quot;&gt;@kirkevonphilly&lt;/a&gt;&lt;/div&gt;
&lt;div style=&quot;margin-bottom: 0in;&quot;&gt;
Join the PhillyForce Salesforce.com User Group: &amp;nbsp;&lt;a href=&quot;http://philly.force.com/&quot;&gt;http://philly.force.com/&lt;/a&gt;&amp;nbsp;&lt;/div&gt;
&lt;div style=&quot;margin-bottom: 0in;&quot;&gt;
&lt;br /&gt;
&lt;/div&gt;
</content><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2810682963225669649/posts/default/9207010617664813630'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2810682963225669649/posts/default/9207010617664813630'/><link rel='alternate' type='text/html' href='http://salesforcery.blogspot.com/2012/09/dreamforce-12-day-1.html' title='Dreamforce &#39;12 - Day 1'/><author><name>Kirk</name><uri>http://www.blogger.com/profile/06983456068299525612</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author></entry><entry><id>tag:blogger.com,1999:blog-2810682963225669649.post-5082022403925164119</id><published>2012-08-30T21:50:00.001-07:00</published><updated>2012-08-30T21:50:31.032-07:00</updated><title type='text'>Day Changer: Chrome Extension - Force.com LOGINS</title><content type='html'>Today&#39;s Day Changer is a Chrome Extension named &quot;Force.com LOGINS.&quot;&lt;br /&gt;
&lt;br /&gt;
Download it &lt;a href=&quot;https://chrome.google.com/webstore/detail/ldjbglicecgnpkpdhpbogkednmmbebec&quot; target=&quot;_blank&quot;&gt;here&lt;/a&gt;.&lt;br /&gt;
&lt;br /&gt;
Why is it useful? &amp;nbsp;If you&#39;ve got multiple Salesforce.com credentials to keep track of, this extension allows you to keep them organized. &amp;nbsp;Once you&#39;ve entered them, it only takes two clicks to log into any instance in either a new tab or a new window. &amp;nbsp;Working on several different projects through out the day, I&#39;m frequently in and out of production and sandbox orgs. &amp;nbsp;With this extension, I&#39;m typing my credentials a lot less frequently.&lt;br /&gt;
&lt;br /&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;
&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEibJ1ZoD1dfs8MaFcTEYDaJ51ZeSMUr51aL5VZKPQfHkIvUZPPggMYk-W9y0TayXt4E5sMXFB92FigRilzahPqnE3gGwexqVhmHgihrJF7G8I-DiXxMlQdnd348s4GgMwCpA9Ez2uNCpiV6/s1600/ForceComLOGINS.JPG&quot; imageanchor=&quot;1&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; height=&quot;320&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEibJ1ZoD1dfs8MaFcTEYDaJ51ZeSMUr51aL5VZKPQfHkIvUZPPggMYk-W9y0TayXt4E5sMXFB92FigRilzahPqnE3gGwexqVhmHgihrJF7G8I-DiXxMlQdnd348s4GgMwCpA9Ez2uNCpiV6/s320/ForceComLOGINS.JPG&quot; width=&quot;293&quot; /&gt;&lt;/a&gt;&lt;/div&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: left;&quot;&gt;
Before you install it, take a look at the author&#39;s security note to decide if this extension will work for you in your working environment. &amp;nbsp;If not, there are plenty of non-Salesforce specific credential managers out there.&lt;/div&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: left;&quot;&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: left;&quot;&gt;
&lt;/div&gt;
&lt;pre class=&quot;webstore-Fc-Ab-zb&quot; style=&quot;background-color: #f1f1f1; color: #666666; font-family: &#39;Open Sans&#39;, arial, sans-serif; font-size: 13px; white-space: pre-wrap; word-wrap: break-word;&quot;&gt;++++++++++++++++++++++++++++
Security Notice      (2012/3/7)
++++++++++++++++++++++++++++
This extension throws Force.com login username and password via POST when logging in with new tab, and via GET when logging in with new window.
Throwing information via GET means there will be URL containing username and password shown in the browser history.

For those of you who do not want your username and password shown in your browser history, please do not use &#39;window&#39; button to login with new window.

Please also be aware that if anybody has access to your chrome browser, he/she can look into localStorage where all your force.com credentials are stored in.
Your credentials are not encrypted since anybody can look at the source code of the extension and somehow decrypt it.
++++++++++++++++++++++++++++&lt;/pre&gt;
&lt;br /&gt;
&lt;br /&gt;</content><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2810682963225669649/posts/default/5082022403925164119'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2810682963225669649/posts/default/5082022403925164119'/><link rel='alternate' type='text/html' href='http://salesforcery.blogspot.com/2012/08/day-changer-chrome-extension-forcecom.html' title='Day Changer: Chrome Extension - Force.com LOGINS'/><author><name>Kirk</name><uri>http://www.blogger.com/profile/06983456068299525612</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEibJ1ZoD1dfs8MaFcTEYDaJ51ZeSMUr51aL5VZKPQfHkIvUZPPggMYk-W9y0TayXt4E5sMXFB92FigRilzahPqnE3gGwexqVhmHgihrJF7G8I-DiXxMlQdnd348s4GgMwCpA9Ez2uNCpiV6/s72-c/ForceComLOGINS.JPG" height="72" width="72"/></entry><entry><id>tag:blogger.com,1999:blog-2810682963225669649.post-6590670708919409087</id><published>2012-08-22T21:34:00.000-07:00</published><updated>2012-08-22T21:34:43.717-07:00</updated><title type='text'>Day Changer:  Dexpot Virtual Desktops for Windows</title><content type='html'>&lt;p&gt;
Day Changers are those tools you stumble upon that make an impact on your day to day Salesforcing.  Today&#39;s Day Changer is one that helps me maximize the use of my laptop screen.
&lt;/p&gt;
&lt;p&gt;
When I was with my old company, I fully embraced the power of multiple monitors.  When I started, I had a 15&quot; CRT beige box.  When I left, I had a triple-headed monster.  21&quot; widescreen monitor in portrait mode on the left for coding, 21&quot; widescreen center monitor, and a 19&quot; square for email/reference.  
&lt;/p&gt;

&lt;p&gt;
Anyway, now that I&#39;m on my own, I don&#39;t always have the luxury of multiple monitors.  I work off of a laptop and at best I get to work at my desk with an additional 21&quot; lcd.  Most of the time, I&#39;m working off of my laptop&#39;s 13.3&quot; screen.
&lt;/p&gt;
&lt;p&gt;
Ouch.
&lt;/p&gt;
&lt;p&gt;
Granted you can get by, but it&#39;s hardly efficient.  Shortcuts like ALT+Tab are useful, toggling windows and keeping my hands on my keyboard, but I need more.
&lt;/p&gt;
&lt;p&gt;
I&#39;m a big fan of the virtual desktops found in many of the linux flavor.  A quick CTRL + Alt + left, right, up, or down and I&#39;m on another desktop with its windows exactly where I left them.
&lt;/p&gt;
&lt;p&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;
&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhmxl5gTO9Eea2BduhtF2t577kLPX05hRQS64jrtQ5Hft0zVq71ajwmIPTgDFUnmq8-zZEr1D8dj9kxCpAWxGKYQWzkdkudij0LPv0U3zn0vJC2QLRiGFbja6RVwqTSc0FRo8SuLNDUWBi4/s1600/MultiScreens_200.png&quot; imageanchor=&quot;1&quot; style=&quot;margin-left:1em; margin-right:1em&quot;&gt;&lt;img border=&quot;0&quot; height=&quot;112&quot; width=&quot;200&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhmxl5gTO9Eea2BduhtF2t577kLPX05hRQS64jrtQ5Hft0zVq71ajwmIPTgDFUnmq8-zZEr1D8dj9kxCpAWxGKYQWzkdkudij0LPv0U3zn0vJC2QLRiGFbja6RVwqTSc0FRo8SuLNDUWBi4/s200/MultiScreens_200.png&quot; /&gt;&lt;/a&gt;&lt;/div&gt;
&lt;/p&gt;
&lt;p&gt;
However, try as I might, I&#39;ve yet to find equivalents for all of the tools I use on a day to day basis.  But what if virtual desktops existed for Windows?  
&lt;/p&gt;
&lt;p&gt;
That&#39;s where Dexpot comes into play.  A quick download, install, and a few key key assignments later I was good to go.  The tool is quite flexible and offers several additional plugins like Dexgrid and Dexcube for additional eye candy.
&lt;/p&gt;
&lt;p&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;
&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjN_gBQN8evBL9jSuLmjxh2ix8EnKdP3h6wjeezqJSKJ1VfsJO9UevdVDOQHRuh6MRcQzGem2ycmpP2SLxJOc8VBUbKQUaqO75636XLaTJaxNxLXa4rQyvUwRH2uOk3XTFpHJzgXb-VAgJ6/s1600/dexgrid.png&quot; imageanchor=&quot;1&quot; style=&quot;margin-left:1em; margin-right:1em&quot;&gt;&lt;img border=&quot;0&quot; height=&quot;207&quot; width=&quot;320&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjN_gBQN8evBL9jSuLmjxh2ix8EnKdP3h6wjeezqJSKJ1VfsJO9UevdVDOQHRuh6MRcQzGem2ycmpP2SLxJOc8VBUbKQUaqO75636XLaTJaxNxLXa4rQyvUwRH2uOk3XTFpHJzgXb-VAgJ6/s320/dexgrid.png&quot; /&gt;&lt;/a&gt;&lt;/div&gt;
&lt;/p&gt;
&lt;p&gt;
You can configure additional desktops if needed, but I easily get by with 4 in a 2x2 grid.  My top-left desktop is usually the Force.com IDE/Eclipse.  Top-right is a Chrome window with multiple tabs (all within the same SF instance).  Bottom-left is usually the Developer Console or a Debug Log window for testing.  Bottom-right is my leftover desktop - maybe another Chrome window, Evernote, Notepad++, whatever I need. 
&lt;/p&gt;
&lt;p&gt;
I can keep everything logically organized on these additional virtual screens and without taking my hands off the keyboard, I flip over to another screen and quickly switch back.  Adding an additional key and using CTRL+ALT+Shift and an arrow key, I can move the active window over to another virtual desktop.
&lt;/p&gt;
&lt;p&gt;
If you do have multiple monitors, you can utilize them as well. Or not, by turning disabling Dexpot for those displays.
&lt;/p&gt;
&lt;p&gt;
Bonus Tip #1:  Windows key + arrow left or right to resize and snap a window.
&lt;/p&gt;
&lt;p&gt;
Bonus Tip #2:  There are shortcomings of the above shortcut key. For instance, monitor orientation is not taken into consideration.  Snap a window to a portrait mode monitor and you end up with a long thin column of a window.  Not too useful.  That&#39;s where GridMove (http://jgpaiva.dcmembers.com/gridmove.html) comes into play.  You can create custom zones and assign keyboard shortcuts to snap windows into each.  For example, on my 19&quot; square, I broke it up into 2 rows; the top half dedicated to Outlook and the bottom equally split between Evernote and Notepad++.
&lt;/p&gt;



</content><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2810682963225669649/posts/default/6590670708919409087'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2810682963225669649/posts/default/6590670708919409087'/><link rel='alternate' type='text/html' href='http://salesforcery.blogspot.com/2012/08/day-changer-dexpot-virtual-desktops-for.html' title='Day Changer:  Dexpot Virtual Desktops for Windows'/><author><name>Kirk</name><uri>http://www.blogger.com/profile/06983456068299525612</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhmxl5gTO9Eea2BduhtF2t577kLPX05hRQS64jrtQ5Hft0zVq71ajwmIPTgDFUnmq8-zZEr1D8dj9kxCpAWxGKYQWzkdkudij0LPv0U3zn0vJC2QLRiGFbja6RVwqTSc0FRo8SuLNDUWBi4/s72-c/MultiScreens_200.png" height="72" width="72"/></entry><entry><id>tag:blogger.com,1999:blog-2810682963225669649.post-3936402336251049336</id><published>2012-06-01T10:00:00.001-07:00</published><updated>2012-06-01T10:00:19.971-07:00</updated><title type='text'>Using Change Sets</title><content type='html'>A question came to me this morning from someone who had certain components built out in a a sandbox and needed them to be replicated in production.  The components in this scenarios were page layouts; something easy enough to rebuild manually, but if you have dozens of fields, either of these methods would be faster.&lt;br /&gt;
&lt;br /&gt;
&lt;ol&gt;
&lt;li&gt;Eclipse&lt;/li&gt;
&lt;li&gt;Change Sets&lt;/li&gt;
&lt;/ol&gt;
&lt;br /&gt;

They both require a few additional steps, but both prevent you from having to reproduce your work.  Since we are dealing with page layouts, the first thing you need to make sure of is that all the fields referenced in the page layout exist within your production instance.  You&#39;ll definitely receive error messages upon trying to deploy a layout to an object that is missing fields.

&lt;h1&gt;Using Change Sets&lt;/h1&gt;
The Change Sets method will be easier for non-developers that don&#39;t know their way around Eclipse.  This method will allow you to build Outbound Change Sets bu adding and removing components, and then uploading them to any allowed Deployment Connection.  Let&#39;s start there by allowing establishing a Deployment Connection between your sandbox and your production instance which will allow you to upload Outbound Change Sets to Production for deployement.
&lt;ol&gt;
&lt;li&gt;
First, within your production instance, click on your name at the top of the page, and then click on &quot;Setup&quot;
On the left-hand side, under &quot;App Setup,&quot; expand &quot;Deploy&quot; and click on &quot;Deployment Connections&quot;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;
&lt;a href=&quot;http://2.bp.blogspot.com/-28se8KPtY3s/T8jsunC118I/AAAAAAAAAj8/He9SJABvMU8/s1600/Deploy_Deployment_Connections_1.JPG&quot; imageanchor=&quot;1&quot; style=&quot;margin-left:1em; margin-right:1em&quot;&gt;&lt;img border=&quot;0&quot; height=&quot;113&quot; width=&quot;215&quot; src=&quot;http://2.bp.blogspot.com/-28se8KPtY3s/T8jsunC118I/AAAAAAAAAj8/He9SJABvMU8/s400/Deploy_Deployment_Connections_1.JPG&quot; /&gt;&lt;/a&gt;&lt;/div&gt;
&lt;/li&gt;
&lt;li&gt;
Find the name of your sandbox and click on the &quot;Edit&quot; link next to it
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;
&lt;a href=&quot;http://3.bp.blogspot.com/-JiZ-sDMeNEU/T8js6skOAfI/AAAAAAAAAkI/UMJ_Grlti7A/s1600/Deploy_Deployment_Connections_2.JPG&quot; imageanchor=&quot;1&quot; style=&quot;margin-left:1em; margin-right:1em&quot;&gt;&lt;img border=&quot;0&quot; height=&quot;21&quot; width=&quot;400&quot; src=&quot;http://3.bp.blogspot.com/-JiZ-sDMeNEU/T8js6skOAfI/AAAAAAAAAkI/UMJ_Grlti7A/s400/Deploy_Deployment_Connections_2.JPG&quot; /&gt;&lt;/a&gt;&lt;/div&gt;

&lt;/li&gt;
&lt;li&gt;
Check off the box that says &quot;Allow Inbound Changes&quot; and then click on the &quot;Save&quot; button.
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;
&lt;a href=&quot;http://1.bp.blogspot.com/-XrodCwdV9fQ/T8jtQNmWcAI/AAAAAAAAAkU/WcOddMQ8rJ8/s1600/Deploy_Deployment_Connections_3.JPG&quot; imageanchor=&quot;1&quot; style=&quot;margin-left:1em; margin-right:1em&quot;&gt;&lt;img border=&quot;0&quot; height=&quot;142&quot; width=&quot;400&quot; src=&quot;http://1.bp.blogspot.com/-XrodCwdV9fQ/T8jtQNmWcAI/AAAAAAAAAkU/WcOddMQ8rJ8/s400/Deploy_Deployment_Connections_3.JPG&quot; /&gt;&lt;/a&gt;&lt;/div&gt;
&lt;/li&gt;
&lt;/ol&gt;


The next thing to do is to create an Outbound Change Set within your sandbox.  For this scenario, the change set will include a page layout that I want to deploy within my production instance as well as a new field that I added to the object within the sandbox.  One change set, two components, one deployment.  Nice!

&lt;ol&gt;
&lt;li&gt;
Within your sandbox, click on your name at the top of the page again and then click on the &quot;Setup&quot; link
&lt;/li&gt;
&lt;li&gt;
On the left-hand side, navigate to &quot;App Setup&quot; --&gt; &quot;Deploy&quot; and then click on &quot;Outbound Change Sets&quot;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;
&lt;a href=&quot;http://3.bp.blogspot.com/-iCTWJG7dFFQ/T8jufTfbSnI/AAAAAAAAAkg/my7ON1VVUTk/s1600/Outbound_1.JPG&quot; imageanchor=&quot;1&quot; style=&quot;margin-left:1em; margin-right:1em&quot;&gt;&lt;img border=&quot;0&quot; height=&quot;115&quot; width=&quot;208&quot; src=&quot;http://3.bp.blogspot.com/-iCTWJG7dFFQ/T8jufTfbSnI/AAAAAAAAAkg/my7ON1VVUTk/s400/Outbound_1.JPG&quot; /&gt;&lt;/a&gt;&lt;/div&gt;
&lt;/li&gt;
&lt;li&gt;
Click on the &quot;New&quot; button to create a new Outbound Change Set
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;
&lt;a href=&quot;http://2.bp.blogspot.com/-LoHJDHIRURc/T8jutJLDrfI/AAAAAAAAAks/rVFu0AKeL04/s1600/Outbound_2.JPG&quot; imageanchor=&quot;1&quot; style=&quot;margin-left:1em; margin-right:1em&quot;&gt;&lt;img border=&quot;0&quot; height=&quot;62&quot; width=&quot;400&quot; src=&quot;http://2.bp.blogspot.com/-LoHJDHIRURc/T8jutJLDrfI/AAAAAAAAAks/rVFu0AKeL04/s400/Outbound_2.JPG&quot; /&gt;&lt;/a&gt;&lt;/div&gt;
&lt;/li&gt;
&lt;li&gt;
Provide a &quot;Name&quot; and &quot;Description&quot; for your change set.
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;
&lt;a href=&quot;http://1.bp.blogspot.com/-enNoHbdSYrc/T8jwMHZaHuI/AAAAAAAAAk4/DVUISeCU1xk/s1600/Outbound_3.JPG&quot; imageanchor=&quot;1&quot; style=&quot;margin-left:1em; margin-right:1em&quot;&gt;&lt;img border=&quot;0&quot; height=&quot;242&quot; width=&quot;400&quot; src=&quot;http://1.bp.blogspot.com/-enNoHbdSYrc/T8jwMHZaHuI/AAAAAAAAAk4/DVUISeCU1xk/s400/Outbound_3.JPG&quot; /&gt;&lt;/a&gt;&lt;/div&gt;
&lt;/li&gt;
&lt;li&gt;
Click on the &quot;Save&quot; button.
&lt;/li&gt;
&lt;li&gt;
Within the &quot;Change Set Components&quot; section, click on the &quot;Add&quot; button.
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;
&lt;a href=&quot;http://3.bp.blogspot.com/-wTSEsQyRyYQ/T8jwza4fyzI/AAAAAAAAAlE/dS218dJb1Rc/s1600/Components_1.JPG&quot; imageanchor=&quot;1&quot; style=&quot;margin-left:1em; margin-right:1em&quot;&gt;&lt;img border=&quot;0&quot; height=&quot;105&quot; width=&quot;400&quot; src=&quot;http://3.bp.blogspot.com/-wTSEsQyRyYQ/T8jwza4fyzI/AAAAAAAAAlE/dS218dJb1Rc/s400/Components_1.JPG&quot; /&gt;&lt;/a&gt;&lt;/div&gt;
&lt;/li&gt;
&lt;li&gt;
First, let&#39;s add the new field.  Change the &quot;Component Type&quot; dropdown to &quot;Custom Field&quot;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;
&lt;a href=&quot;http://1.bp.blogspot.com/-yLLPPqFuDXM/T8jxSaeBrzI/AAAAAAAAAlQ/WTOxbtyB5Pw/s1600/Components_2.JPG&quot; imageanchor=&quot;1&quot; style=&quot;margin-left:1em; margin-right:1em&quot;&gt;&lt;img border=&quot;0&quot; height=&quot;142&quot; width=&quot;400&quot; src=&quot;http://1.bp.blogspot.com/-yLLPPqFuDXM/T8jxSaeBrzI/AAAAAAAAAlQ/WTOxbtyB5Pw/s400/Components_2.JPG&quot; /&gt;&lt;/a&gt;&lt;/div&gt;
&lt;/li&gt;
&lt;li&gt;
Next, find and select any fields that you also need to deploy that are not currently found in production.
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;
&lt;a href=&quot;http://4.bp.blogspot.com/-dN-OUvgvAjs/T8jxu8dKhxI/AAAAAAAAAlc/QAaiG4puPVk/s1600/Components_3.JPG&quot; imageanchor=&quot;1&quot; style=&quot;margin-left:1em; margin-right:1em&quot;&gt;&lt;img border=&quot;0&quot; height=&quot;18&quot; width=&quot;400&quot; src=&quot;http://4.bp.blogspot.com/-dN-OUvgvAjs/T8jxu8dKhxI/AAAAAAAAAlc/QAaiG4puPVk/s400/Components_3.JPG&quot; /&gt;&lt;/a&gt;&lt;/div&gt;
&lt;/li&gt;
&lt;li&gt;
Click on the &quot;Add to Change Set&quot; button at the top of the page.  Here&#39;s a quick tip -- make sure that you use the &quot;Add To Change Set&quot; button after you select something.  Changing the component letter, page, or &quot;Component Type&quot; will clear any previous selections.
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;
&lt;a href=&quot;http://1.bp.blogspot.com/-hRsuNq03sxg/T8jyNy83E_I/AAAAAAAAAlo/aBSvJGBC-XE/s1600/Components_4.JPG&quot; imageanchor=&quot;1&quot; style=&quot;margin-left:1em; margin-right:1em&quot;&gt;&lt;img border=&quot;0&quot; height=&quot;40&quot; width=&quot;195&quot; src=&quot;http://1.bp.blogspot.com/-hRsuNq03sxg/T8jyNy83E_I/AAAAAAAAAlo/aBSvJGBC-XE/s400/Components_4.JPG&quot; /&gt;&lt;/a&gt;&lt;/div&gt;
&lt;/li&gt;
&lt;li&gt;
Now it is time to do the same for the page layout.  Change the &quot;Component Type&quot; to &quot;Page Layout, find and select your new layout, and then click on &quot;Add To Change Set&quot; again.
&lt;/li&gt;
&lt;li&gt;
Your change set should have two components in it now.
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;
&lt;a href=&quot;http://2.bp.blogspot.com/-3x7k8E2bm04/T8jywXnOU9I/AAAAAAAAAl0/HODFHOQ8AcQ/s1600/Change_Set_1.JPG&quot; imageanchor=&quot;1&quot; style=&quot;margin-left:1em; margin-right:1em&quot;&gt;&lt;img border=&quot;0&quot; height=&quot;67&quot; width=&quot;400&quot; src=&quot;http://2.bp.blogspot.com/-3x7k8E2bm04/T8jywXnOU9I/AAAAAAAAAl0/HODFHOQ8AcQ/s400/Change_Set_1.JPG&quot; /&gt;&lt;/a&gt;&lt;/div&gt;
&lt;/li&gt;
&lt;li&gt;
To push your Outbound Change Set to the Production instance for deployment, click on the &quot;Upload&quot; button.
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;
&lt;a href=&quot;http://2.bp.blogspot.com/-qf2UxaCWH8Y/T8jzEzbo32I/AAAAAAAAAmA/TTsv0ky1TXU/s1600/Change_Set_2.JPG&quot; imageanchor=&quot;1&quot; style=&quot;margin-left:1em; margin-right:1em&quot;&gt;&lt;img border=&quot;0&quot; height=&quot;50&quot; width=&quot;400&quot; src=&quot;http://2.bp.blogspot.com/-qf2UxaCWH8Y/T8jzEzbo32I/AAAAAAAAAmA/TTsv0ky1TXU/s400/Change_Set_2.JPG&quot; /&gt;&lt;/a&gt;&lt;/div&gt;
&lt;/li&gt;
&lt;li&gt;
Choose your Production instance and then click on &quot;Upload&quot;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;
&lt;a href=&quot;http://1.bp.blogspot.com/-5XGxzh3Lvw0/T8jzVGR-AZI/AAAAAAAAAmM/G0D7rASq9R8/s1600/Change_Set_3.JPG&quot; imageanchor=&quot;1&quot; style=&quot;margin-left:1em; margin-right:1em&quot;&gt;&lt;img border=&quot;0&quot; height=&quot;82&quot; width=&quot;400&quot; src=&quot;http://1.bp.blogspot.com/-5XGxzh3Lvw0/T8jzVGR-AZI/AAAAAAAAAmM/G0D7rASq9R8/s400/Change_Set_3.JPG&quot; /&gt;&lt;/a&gt;&lt;/div&gt;
&lt;/li&gt;
&lt;/ol&gt;
&lt;br /&gt;
Within a few minutes you should receive an email, letting you know that your Change Set was uploaded to the production instance.  Keep in mind that you don&#39;t always have to push from a sandbox to production.  You can go from sandbox to sandbox or even production to sandbox.&lt;br /&gt;

Once you do receive that email, it is time to deploy it.
&lt;ol&gt;
&lt;li&gt;
Within your sandbox, click on your name at the top of the page again and then click on the &quot;Setup&quot; link
&lt;/li&gt;
&lt;li&gt;
On the left-hand side, navigate to &quot;App Setup&quot; --&gt; &quot;Deploy&quot; and then this time click on &quot;Inbound Change Sets&quot;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;
&lt;a href=&quot;http://4.bp.blogspot.com/-HNqRvET-FmU/T8jz8hc7ieI/AAAAAAAAAmY/giPzNXRhtJ0/s1600/Inbound_1.JPG&quot; imageanchor=&quot;1&quot; style=&quot;margin-left:1em; margin-right:1em&quot;&gt;&lt;img border=&quot;0&quot; height=&quot;119&quot; width=&quot;197&quot; src=&quot;http://4.bp.blogspot.com/-HNqRvET-FmU/T8jz8hc7ieI/AAAAAAAAAmY/giPzNXRhtJ0/s400/Inbound_1.JPG&quot; /&gt;&lt;/a&gt;&lt;/div&gt;
&lt;/li&gt;
&lt;li&gt;
Click on your change set.  Here you will be able to see information about the change set, including its components, any details, and its deployment history.  You also have two options; &quot;Validate&quot; and &quot;Deploy.&quot;  
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;
&lt;a href=&quot;http://2.bp.blogspot.com/-zHUczf4vYfA/T8j0nsvhIHI/AAAAAAAAAmk/Jq4RkJZ2snU/s1600/Inbound_2.JPG&quot; imageanchor=&quot;1&quot; style=&quot;margin-left:1em; margin-right:1em&quot;&gt;&lt;img border=&quot;0&quot; height=&quot;38&quot; width=&quot;198&quot; src=&quot;http://2.bp.blogspot.com/-zHUczf4vYfA/T8j0nsvhIHI/AAAAAAAAAmk/Jq4RkJZ2snU/s400/Inbound_2.JPG&quot; /&gt;&lt;/a&gt;&lt;/div&gt;
&lt;/li&gt;
&lt;li&gt;
Clicking on &quot;Validate&quot; goes through all of the actions required to deploy the change set without actually deploying it.  This is always a safer bet as you can learn which components will be new, overwritten, or deleted.  Sometimes you learn things from a validation that you didn&#39;t expect and can save yourself from making mistakes.  
&lt;/li&gt;
&lt;li&gt;
&quot;Deploy&quot; first validates and if all is well will deploy your change set.  Keep in mind that if you&#39;ve added new layouts, they won&#39;t be assigned to a recordtype yet, so you&#39;ll have to do that manually.  If you added fields, permissions won&#39;t be set up on that field as they would be if you were to manually create the field.  The same goes for picklists options and their recordtype preferences.
&lt;/li&gt;
&lt;/ol&gt;</content><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2810682963225669649/posts/default/3936402336251049336'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2810682963225669649/posts/default/3936402336251049336'/><link rel='alternate' type='text/html' href='http://salesforcery.blogspot.com/2012/06/using-change-sets.html' title='Using Change Sets'/><author><name>Kirk</name><uri>http://www.blogger.com/profile/06983456068299525612</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="http://2.bp.blogspot.com/-28se8KPtY3s/T8jsunC118I/AAAAAAAAAj8/He9SJABvMU8/s72-c/Deploy_Deployment_Connections_1.JPG" height="72" width="72"/></entry><entry><id>tag:blogger.com,1999:blog-2810682963225669649.post-1540143049220971580</id><published>2012-05-31T22:23:00.000-07:00</published><updated>2012-05-31T22:23:28.391-07:00</updated><title type='text'>Server Monitoring - Disk Space Batch File</title><content type='html'>&lt;style&gt;
.remarks{
font-weight:700;
font-size: 10px;
color:red;
}
&lt;/style&gt;

Weeks ago we began down a road, experimenting with the idea that you could monitor servers with Salesforce.&amp;nbsp; I did mislead you; Salesforce isn&#39;t doing the monitoring, but will be responsible for creating notifications (through workflow) and give additional metrics for future systems reporting.&lt;br /&gt;
&lt;br /&gt;
We&#39;ve already created an object called &quot;Alerts&quot; to place information into (records that could cause sys admins night sweats and tremors).&amp;nbsp; That object has two fields, basically who (the node) triggered the alert and what (the conditions) the alert is for.&lt;br /&gt;
&lt;br /&gt;
The next step is to create and schedule a batch.  The batch below will take two parameters - the drive letter that you want to monitor and the low disk space threshold in MBs (i.e., &quot;Disk_Space_Alert.bat C 20480&quot; would monitor the C:\ and create an alert when the amount of disk space was 20480MBs/20GBs or less) &lt;br /&gt;
&lt;blockquote&gt;
@ECHO OFF&lt;br /&gt;
setlocal&lt;br /&gt;
&lt;br /&gt;
&lt;span class=&quot;remarks&quot;&gt;
REM - This issues the DIR command on the disk letter provided, pipes it &lt;br /&gt;
REM - into FINDSTR, looks for the line where &quot;free&quot; is located, and places that&lt;br /&gt;
REM - line into a temp file&lt;br /&gt;
REM - Then it converts that line into tokens and assigns the number of free bytes&lt;br /&gt;
REM - to the FREE_BYTES variable&lt;br /&gt;&lt;/span&gt;
dir %1: 2&amp;gt;&amp;amp;1 | findstr free &amp;gt; temp&lt;br /&gt;
&lt;br /&gt;
    for /f &amp;quot;tokens=3,4*&amp;quot; %%f in ( temp ) do (&lt;br /&gt;
    &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;    set FREE_BYTES=%%f&lt;br /&gt;
    )&lt;br /&gt;
&lt;br /&gt;
&lt;span class=&quot;remarks&quot;&gt;REM - This removes commas and decimal points from FREE_BYTES&lt;/span&gt;&lt;br /&gt;
&lt;br /&gt;
set FREE_BYTES=%FREE_BYTES:.=%&lt;br /&gt;
set FREE_BYTES=%FREE_BYTES:,=%&lt;br /&gt;
&lt;br /&gt;
&lt;span class=&quot;remarks&quot;&gt;REM - The following line takes the number of free bytes and uses Powershell&lt;br /&gt;
REM - to calculate the number of MBs and assigned as a string variable&lt;br /&gt;
REM - This was done due to batch files numbers being limited to 32-bits of precision&lt;/span&gt;&lt;br /&gt;
&lt;br /&gt;
FOR /F %%B IN (&amp;#039;powershell %FREE_BYTES%/1024/1024&amp;#039;) DO (&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;SET FREE_M_BYTES=%%B&lt;br /&gt;
)&lt;br /&gt;
&lt;br /&gt;
&lt;span class=&quot;remarks&quot;&gt;REM - Next the decimals are removed and assigned to an integer variable&lt;/span&gt;&lt;br /&gt;
&lt;br /&gt;
FOR /F &amp;quot;tokens=1* delims=,.&amp;quot; %%B IN (&amp;quot;%FREE_M_BYTES%&amp;quot;) DO (&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;SET /A FREE_M_BYTES_INT = %%B&lt;br /&gt;
)&lt;br /&gt;
&lt;br /&gt;
&lt;span class=&quot;remarks&quot;&gt;REM - Here we assign the threshold limit parameter to a variable&lt;/span&gt;&lt;br /&gt;
&lt;br /&gt;
set /A LIMIT=%2&lt;br /&gt;
&lt;br /&gt;
&lt;span class=&quot;remarks&quot;&gt;REM - Next, if the number of free MBs is less or equal to the limit&lt;br /&gt;
REM - a CSV is created.  First the headers, then the alert fields&lt;br /&gt;
REM - After the file is created, process.bat is called to initiate the insert&lt;br /&gt;
REM - into Salesforce.  Don&#39;t forget to install Data Loader, change your path&lt;br /&gt;
REM - and see my next post about the config file&lt;/span&gt;&lt;br /&gt;
&lt;br /&gt;
IF %FREE_M_BYTES_INT% LEQ %LIMIT% (&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;echo RESOURCE, DETAILS &amp;gt; alert.csv&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;echo %COMPUTERNAME%, Low Space on %1 - %FREE_M_BYTES_INT% MB remaining &amp;gt;&amp;gt; alert.csv&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;C:Program Files (x86)salesforce.comData Loaderbinprocess.bat ../conf Disk_Space_Alert&lt;br /&gt;
)&lt;br /&gt;
&lt;/blockquote&gt;
&lt;br /&gt;

So in a nutshell:
&lt;ol&gt;
&lt;li&gt;Create the batch file&lt;/li&gt;
&lt;li&gt;Schedule the batch file&lt;/li&gt;
&lt;li&gt;When scheduling, you&#39;ll need to specify the disk letter and the MB limit (i.e., &quot;Disk_Space_Alert.bat C 20480&quot;)&lt;/li&gt;
&lt;li&gt;The program will launch, check the amount of disk space on the specified drive&lt;/li&gt;
&lt;li&gt;The batch will then convert bytes to MBs and compare it to the limit specified&lt;/li&gt;
&lt;li&gt;If the limit is met or exceeded, a CSV is created and formatted with information about the issue&lt;/li&gt;
&lt;li&gt;Finally, the batch calls another batch file that initiates a Data Loader insert&lt;/li&gt;
&lt;/ol&gt;
In the next post, I&#39;ll discuss using the SF Data Loader from the command line and how my config file is set up.</content><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2810682963225669649/posts/default/1540143049220971580'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2810682963225669649/posts/default/1540143049220971580'/><link rel='alternate' type='text/html' href='http://salesforcery.blogspot.com/2012/05/server-monitoring-disk-space-batch-file.html' title='Server Monitoring - Disk Space Batch File'/><author><name>Kirk</name><uri>http://www.blogger.com/profile/06983456068299525612</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author></entry><entry><id>tag:blogger.com,1999:blog-2810682963225669649.post-597714952972443544</id><published>2012-05-31T21:44:00.003-07:00</published><updated>2012-05-31T21:44:46.098-07:00</updated><title type='text'>Where&#39;d He Go?</title><content type='html'>Hope you aren&#39;t feeling too neglected with my blogging absence!&amp;nbsp; I&#39;ve been going through various life changes and preparing for the road ahead.&amp;nbsp;&lt;br /&gt;
&lt;br /&gt;
Since my last post, I&#39;ve peacefully and respectfully parted ways with my previous employer and excited to announce that I will be providing Salesforce administration and development consulting services as I further develop my own company on the force.com platform.&lt;br /&gt;
&lt;br /&gt;
If you&#39;re interested in hiring, bouncing ideas off of, having a cup of coffee with, hitting the gym with, or any other activity in general where you want to discuss Salesforce projects with me, feel free to shoot me an e-mail at &lt;a href=&quot;mailto:kirk@salesforcery.com&quot;&gt;kirk@salesforcery.com&lt;/a&gt;.&lt;br /&gt;
&lt;br /&gt;
There should be plenty of updates in the future weeks.&amp;nbsp; Summer &#39;12 is out now with some great features and I&#39;m already one post into a series on server monitoring (talk about a cliff-hanger).&amp;nbsp; Thanks to all the visitors that I&#39;ve picked up on this blog over the past year; it&#39;s only going to get better!&lt;br /&gt;
&lt;br /&gt;
...and seriously, it doesn&#39;t cost anything to email me, so here&#39;s that link again:&amp;nbsp; &lt;a href=&quot;mailto:kirk@salesforcery.com&quot;&gt;kirk@salesforcery.com&lt;/a&gt;.&lt;br /&gt;
&lt;br /&gt;
-Kirk&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;</content><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2810682963225669649/posts/default/597714952972443544'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2810682963225669649/posts/default/597714952972443544'/><link rel='alternate' type='text/html' href='http://salesforcery.blogspot.com/2012/05/whered-he-go.html' title='Where&#39;d He Go?'/><author><name>Kirk</name><uri>http://www.blogger.com/profile/06983456068299525612</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author></entry><entry><id>tag:blogger.com,1999:blog-2810682963225669649.post-329672820386642654</id><published>2012-04-19T05:59:00.000-07:00</published><updated>2012-04-19T05:59:11.697-07:00</updated><title type='text'>Server Monitoring - Alerts Object</title><content type='html'>The first thing that I&#39;m going&amp;nbsp;do is create the object in which my alerts are going to live in Salesforce.&amp;nbsp; For this example, I&#39;m going to create a dedicated custom object for this.&amp;nbsp; You may want to use Chatter or even incorporate it into your existing structure; perhaps you have some sort of IT inventory (who doesn&#39;t?)&amp;nbsp;objects that you can connect to.&lt;br /&gt;
&lt;br /&gt;
The basics of what we need are:&lt;br /&gt;
&lt;ul&gt;
&lt;li&gt;The resource - what device is having an issue&lt;/li&gt;
&lt;li&gt;The alert - details about the issue the resource is having (low disk space for our usage)&lt;/li&gt;
&lt;/ul&gt;
This is how I&#39;m configuring the object on the &quot;New Custom Object&quot; page:&lt;br /&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;
&lt;a href=&quot;http://4.bp.blogspot.com/-zCvqTLQ_5p8/T5AJIkbNkhI/AAAAAAAAAiw/pDlZsy1xIpU/s1600/Alerts_object.PNG&quot; imageanchor=&quot;1&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; src=&quot;http://4.bp.blogspot.com/-zCvqTLQ_5p8/T5AJIkbNkhI/AAAAAAAAAiw/pDlZsy1xIpU/s1600/Alerts_object.PNG&quot; /&gt;&lt;/a&gt;&lt;/div&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;
﻿&lt;/div&gt;
&lt;br /&gt;
I&#39;ve checked off both &quot;Allow Reports&quot; and &quot;Allow Activities.&quot;&amp;nbsp; Ideally, when the alerts are configuring and being dumped into Salesforce, I will be building workflow to send off some e-mails.&amp;nbsp; Then I&#39;ll begin building a few reports for any notifications over the course of time - scheduled weekly emails of low system resources sounds kind of cool.&amp;nbsp; Imagine that patterns you could observe over the course of a few months.&amp;nbsp; I&#39;ve also enabled notes and attachments as I imagine this could be used for future issue identification and resolution as well.&amp;nbsp; Feel free to create a tab for this if you&#39;d like.&lt;br /&gt;
&lt;br /&gt;
Once the object is created, I&#39;ve got my shell of an object with the basic fields:&lt;br /&gt;
&lt;ul&gt;
&lt;li&gt;Alert Name - auto number&lt;/li&gt;
&lt;li&gt;Created By&lt;/li&gt;
&lt;li&gt;Last Modified By&lt;/li&gt;
&lt;li&gt;Owner&lt;/li&gt;
&lt;/ul&gt;
Now I&#39;m going to add my two custom fields mentioned above and listed below:&lt;br /&gt;
&lt;ul&gt;
&lt;li&gt;Resource&lt;/li&gt;
&lt;li&gt;Details&lt;/li&gt;
&lt;/ul&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;
&lt;a href=&quot;http://4.bp.blogspot.com/-SRJvrHhO4ck/T5AKq8wIB3I/AAAAAAAAAi8/lhcCv2TbzN4/s1600/Resource.PNG&quot; imageanchor=&quot;1&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; height=&quot;236&quot; src=&quot;http://4.bp.blogspot.com/-SRJvrHhO4ck/T5AKq8wIB3I/AAAAAAAAAi8/lhcCv2TbzN4/s320/Resource.PNG&quot; width=&quot;320&quot; /&gt;&lt;/a&gt;&lt;a href=&quot;http://4.bp.blogspot.com/-Y5aWOtGHowA/T5AKqLA2mBI/AAAAAAAAAi4/36qO9xMVQJE/s1600/Details.PNG&quot; imageanchor=&quot;1&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; height=&quot;187&quot; src=&quot;http://4.bp.blogspot.com/-Y5aWOtGHowA/T5AKqLA2mBI/AAAAAAAAAi4/36qO9xMVQJE/s320/Details.PNG&quot; width=&quot;320&quot; /&gt;&lt;/a&gt;&lt;/div&gt;
&lt;div align=&quot;left&quot; class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;
﻿&lt;/div&gt;
I&#39;ve required that the &quot;Resource&quot; field be populated at the field level.&amp;nbsp; Don&#39;t forget to set the correct permissions for these fields based on profiles on the following screen.&lt;br /&gt;
&lt;br /&gt;
Not a lot of rocket science in this post, but at least now we&#39;ve got our object for which we&#39;ll insert our alert records into.&amp;nbsp; The next posts will be a little more exciting and cover creating and scheduling a&amp;nbsp;batch file for performing a disk space checks and creating a Windows Perfmon alert.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;</content><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2810682963225669649/posts/default/329672820386642654'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2810682963225669649/posts/default/329672820386642654'/><link rel='alternate' type='text/html' href='http://salesforcery.blogspot.com/2012/04/server-monitoring-alerts-object.html' title='Server Monitoring - Alerts Object'/><author><name>Kirk</name><uri>http://www.blogger.com/profile/06983456068299525612</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="http://4.bp.blogspot.com/-zCvqTLQ_5p8/T5AJIkbNkhI/AAAAAAAAAiw/pDlZsy1xIpU/s72-c/Alerts_object.PNG" height="72" width="72"/></entry><entry><id>tag:blogger.com,1999:blog-2810682963225669649.post-6143179955410696304</id><published>2012-03-23T09:30:00.000-07:00</published><updated>2012-03-23T09:30:02.025-07:00</updated><title type='text'>Server Monitoring - Project Description</title><content type='html'>It&#39;s a very Salesforce Friday; the weather is nice, my fingers are flying, and most importantly my code is saving without errors!&lt;br /&gt;
&lt;br /&gt;
I&#39;m hoping the description got your attention on this one and you wondering how in the world Salesforce is going to monitor your servers.&amp;nbsp; Well, I&#39;ve fed your assumptions a half-truth.&amp;nbsp; At this point, Salesforce isn&#39;t going to be doing the monitoring (yet?); it will be simply providing to you notifications.&lt;br /&gt;
&lt;br /&gt;
I know, I know - you&#39;ve got high-end systems in place doing all the server monitoring you could ever dream of full of alerts, notifications, bells, whistles, and some Rita&#39;s Water Ice on top of that too (you know, in honor of it being Spring).&amp;nbsp; Don&#39;t overlook the point of this series; it isn&#39;t to just create a custom object that will trigger some workflow.&amp;nbsp; It&#39;s about being able to tie together three or four different pieces of software to build an entire system that leverages the flexibility of Salesforce (and because all roads will inevitably lead to Salesforce).&amp;nbsp; Not just a system, but something that can easily be expanded an built upon.&lt;br /&gt;
&lt;br /&gt;
Here&#39;s what I&#39;m thinking:&lt;br /&gt;
&lt;br /&gt;
&lt;u&gt;&lt;b&gt;Monitor a server&lt;/b&gt;&lt;/u&gt;&lt;br /&gt;Use Perfmon - Memory Usage&lt;br /&gt;Use a command-line utility - Hard disk utilization&lt;br /&gt;&lt;br /&gt;
&lt;u&gt;&lt;b&gt;Create Alerts&lt;/b&gt;&lt;/u&gt;&lt;br /&gt;
What&#39;s wrong with who&lt;br /&gt;
&lt;br /&gt;
&lt;u&gt;&lt;b&gt;Import Process&lt;/b&gt;&lt;/u&gt;&lt;br /&gt;
Get that info into Salesforce so we can use it&lt;br /&gt;
Where&#39;s the data going to live?&lt;br /&gt;
&lt;br /&gt;
&lt;u&gt;&lt;b&gt;Dashboard/Workflow&lt;/b&gt;&lt;/u&gt;&lt;br /&gt;
What are you going to do with that data?&lt;br /&gt;
&lt;br /&gt;
Stay tuned!&amp;nbsp; We&#39;re going to have some fun with Perfmon, batching, Data Loader, and some VF.&lt;br /&gt;
&lt;br /&gt;</content><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2810682963225669649/posts/default/6143179955410696304'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2810682963225669649/posts/default/6143179955410696304'/><link rel='alternate' type='text/html' href='http://salesforcery.blogspot.com/2012/03/server-monitoring-project-description.html' title='Server Monitoring - Project Description'/><author><name>Kirk</name><uri>http://www.blogger.com/profile/06983456068299525612</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author></entry><entry><id>tag:blogger.com,1999:blog-2810682963225669649.post-8197875124507844226</id><published>2012-03-15T23:00:00.000-07:00</published><updated>2012-03-16T09:11:01.193-07:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="formula"/><category scheme="http://www.blogger.com/atom/ns#" term="views"/><title type='text'>One View to Rule Them All</title><content type='html'>&lt;b&gt;Scenario:&lt;/b&gt;&amp;nbsp; I was working on customizing a project management app and needed a quick view named &quot;My Projects&quot; that would allow a user to see only the projects in which they were listed as the &quot;Project Manager.&quot;&lt;br /&gt;
&lt;br /&gt;
&quot;Project Manager&quot; was a custom User lookup field.&amp;nbsp; It seemed erroneous to instruct users to create their own views.&amp;nbsp; There had to be a way that I could create it once and it would provide the correct results for each user.&lt;br /&gt;
&lt;br /&gt;
When you are on the &quot;Create New View&quot; screen, unlike when you are writing a workflow rule, you don&#39;t have the ability to create formula based criteria; only the &quot;&lt;strong style=&quot;font-weight: normal;&quot;&gt;Filter By Additional Fields&quot; field-operator-value drop downs are available.&lt;/strong&gt;&lt;br /&gt;
&lt;strong style=&quot;font-weight: normal;&quot;&gt;IdeaExchange:&amp;nbsp; &lt;a href=&quot;https://sites.secure.force.com/success/ideaView?id=08730000000K149AAC&quot; target=&quot;_blank&quot;&gt;https://sites.secure.force.com/success/ideaView?id=08730000000K149AAC &lt;/a&gt;&lt;/strong&gt;&lt;br /&gt;
&lt;strong style=&quot;font-weight: normal;&quot;&gt;&lt;br /&gt;&lt;/strong&gt;&lt;br /&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;
&lt;a href=&quot;http://2.bp.blogspot.com/-X3pqvNhHqws/T2M29E_mHlI/AAAAAAAAAhM/y233Kox0k7I/s1600/CreateNewView.PNG&quot; imageanchor=&quot;1&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; height=&quot;280&quot; src=&quot;http://2.bp.blogspot.com/-X3pqvNhHqws/T2M29E_mHlI/AAAAAAAAAhM/y233Kox0k7I/s320/CreateNewView.PNG&quot; width=&quot;320&quot; /&gt;&lt;/a&gt;&lt;/div&gt;
&lt;strong style=&quot;font-weight: normal;&quot;&gt;&lt;br /&gt;&lt;/strong&gt;&lt;br /&gt;
&lt;strong style=&quot;font-weight: normal;&quot;&gt;Unfortunately, the Owner of a Project record won&#39;t necessarily be the Project Manager, so using the &quot;My Projects&quot; filter won&#39;t work (wouldn&#39;t it be nice if for any &quot;My&quot; option, a list of User lookup fields would appear that you could select from?)&lt;/strong&gt;&lt;br /&gt;
&lt;strong style=&quot;font-weight: normal;&quot;&gt;IdeaExchange:&amp;nbsp; &lt;a href=&quot;https://sites.secure.force.com/success/ideaView?id=08730000000grYFAAY&quot; target=&quot;_blank&quot;&gt;https://sites.secure.force.com/success/ideaView?id=08730000000grYFAAY &lt;/a&gt;&lt;/strong&gt;&lt;br /&gt;
&lt;strong style=&quot;font-weight: normal;&quot;&gt;&lt;br /&gt;&lt;/strong&gt;&lt;br /&gt;
&lt;strong style=&quot;font-weight: normal;&quot;&gt;To create one view to rule them all, I ended up creating a formula field that would compare the current user&#39;s ID to the Project Manager field and return either 0 or 1.&lt;/strong&gt;&lt;br /&gt;
&lt;strong style=&quot;font-weight: normal;&quot;&gt;&lt;br /&gt;&lt;/strong&gt;&lt;br /&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;
&lt;a href=&quot;http://3.bp.blogspot.com/-gzsHCXQc5fg/T2M3-mbpw3I/AAAAAAAAAhU/7VTHywZLYxA/s1600/PMisMeFormula.png&quot; imageanchor=&quot;1&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; height=&quot;226&quot; src=&quot;http://3.bp.blogspot.com/-gzsHCXQc5fg/T2M3-mbpw3I/AAAAAAAAAhU/7VTHywZLYxA/s320/PMisMeFormula.png&quot; width=&quot;320&quot; /&gt;&lt;/a&gt;&lt;/div&gt;
&lt;strong style=&quot;font-weight: normal;&quot;&gt;IF($User.Id = Project_Manager__c, 1,0)&lt;/strong&gt;&lt;br /&gt;
&lt;strong style=&quot;font-weight: normal;&quot;&gt;&lt;br /&gt;&lt;/strong&gt;&lt;br /&gt;
&lt;strong style=&quot;font-weight: normal;&quot;&gt;Now that you have your field, any record that you are looking at in which your User ID matches the ID found in the Project Manager field, the &quot;PM is Me&quot; formula field should read &quot;1.&quot;&lt;/strong&gt;&lt;br /&gt;
&lt;strong style=&quot;font-weight: normal;&quot;&gt;&lt;br /&gt;&lt;/strong&gt;&lt;br /&gt;
&lt;strong style=&quot;font-weight: normal;&quot;&gt;That being so, you can create your view with a single criterion:&lt;/strong&gt;&lt;br /&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;
&lt;a href=&quot;http://4.bp.blogspot.com/-em9SH3z2LlY/T2M47K0BfOI/AAAAAAAAAhc/HzIXnuJck7g/s1600/MyProjects.PNG&quot; imageanchor=&quot;1&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; height=&quot;286&quot; src=&quot;http://4.bp.blogspot.com/-em9SH3z2LlY/T2M47K0BfOI/AAAAAAAAAhc/HzIXnuJck7g/s320/MyProjects.PNG&quot; width=&quot;320&quot; /&gt;&lt;/a&gt;&lt;/div&gt;
&lt;br /&gt;
&lt;strong style=&quot;font-weight: normal;&quot;&gt;That&#39;s that! &lt;/strong&gt;&lt;br /&gt;
&lt;strong style=&quot;font-weight: normal;&quot;&gt;&lt;br /&gt;&lt;/strong&gt;&lt;br /&gt;
&lt;strong style=&quot;font-weight: normal;&quot;&gt;&lt;br /&gt;&lt;/strong&gt;</content><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2810682963225669649/posts/default/8197875124507844226'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2810682963225669649/posts/default/8197875124507844226'/><link rel='alternate' type='text/html' href='http://salesforcery.blogspot.com/2012/03/one-view-to-rule-them-all.html' title='One View to Rule Them All'/><author><name>Kirk</name><uri>http://www.blogger.com/profile/06983456068299525612</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="http://2.bp.blogspot.com/-X3pqvNhHqws/T2M29E_mHlI/AAAAAAAAAhM/y233Kox0k7I/s72-c/CreateNewView.PNG" height="72" width="72"/></entry><entry><id>tag:blogger.com,1999:blog-2810682963225669649.post-7438236309116286396</id><published>2012-02-13T07:09:00.000-08:00</published><updated>2012-02-13T07:21:47.701-08:00</updated><title type='text'>There&#39;s a Hole in My Bucket!</title><content type='html'>Ah, for many Salesforce users, Spring &#39;12 was rolled out over the weekend.  There are lots of new features that I&#39;ve been chewing on in the pre-release sandbox and a few surprises.&lt;br /&gt;
&lt;br /&gt;
One of the new features is the ability to create report &quot;Buckets.&quot;  Buckets let you create groups for a field&#39;s data without needing to create a formula field.  I can&#39;t tell you how many formula fields I&#39;ve created just to display the information I want to see on a report correctly.  Of course - these bucket fields exist only on the report you&#39;re creating, so if you want to base workflow off of the field, it is off to the formula field editor for you.
&lt;br /&gt;
&lt;br /&gt;
Say you&#39;ve got your list of clients, all equally important to you (of course), but you&#39;d like to group them by the amount of assets they&#39;ve brought to you.  I&#39;m not saying my Gold level clients are going to receive any special treatment over the Bronze level - I just want to know... really.
&lt;br /&gt;
&lt;br /&gt;
I&#39;m going to classify my clients, using three tiers:
&lt;br /&gt;
Gold:  
Anyone over 3,000,000&lt;br /&gt;
Silver:  
Between 1,000,000 and 3,000,000&lt;br /&gt;
Bronze:  
Below 1,000,000&lt;br /&gt;
&lt;br /&gt;
1)&amp;nbsp; To create a new Bucket field, within a new/existing report, click on the &quot;Add Bucket&quot; link within the fields section.
&lt;br /&gt;
&lt;br /&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;
&lt;a href=&quot;http://1.bp.blogspot.com/-NFpfESE24io/TzkmRPxz7DI/AAAAAAAAAgY/huQvR90Hv1w/s1600/addBucket.PNG&quot; imageanchor=&quot;1&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; src=&quot;http://1.bp.blogspot.com/-NFpfESE24io/TzkmRPxz7DI/AAAAAAAAAgY/huQvR90Hv1w/s1600/addBucket.PNG&quot; /&gt;&lt;/a&gt;&lt;/div&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: left;&quot;&gt;
&lt;/div&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: left;&quot;&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: left;&quot;&gt;
2)&amp;nbsp; Next, double-check your &quot;Source Column, give your Bucket field a name, and define your ranges:﻿&lt;/div&gt;
&lt;br /&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;
&lt;a href=&quot;http://4.bp.blogspot.com/-JS6Qj7XDbaI/TzknMjW5MoI/AAAAAAAAAgo/IXI5ZXAUAQM/s1600/editBucket.png&quot; imageanchor=&quot;1&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; src=&quot;http://4.bp.blogspot.com/-JS6Qj7XDbaI/TzknMjW5MoI/AAAAAAAAAgo/IXI5ZXAUAQM/s1600/editBucket.png&quot; /&gt;&lt;/a&gt;&lt;/div&gt;
&lt;div align=&quot;left&quot; class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;
&lt;/div&gt;
3)&amp;nbsp; Click on the &quot;OK&quot; button and you&#39;ll see your newly created &quot;Service Level&quot; field within your report grid:﻿&lt;br /&gt;
&lt;br /&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;
&lt;a href=&quot;http://4.bp.blogspot.com/-hvz27rz3xUA/TzkmSoXrC_I/AAAAAAAAAgg/06kbNqhWWO0/s1600/exampleBucket.png&quot; imageanchor=&quot;1&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; src=&quot;http://4.bp.blogspot.com/-hvz27rz3xUA/TzkmSoXrC_I/AAAAAAAAAgg/06kbNqhWWO0/s1600/exampleBucket.png&quot; /&gt;&lt;/a&gt;&lt;/div&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;
&lt;br /&gt;&amp;nbsp;&lt;/div&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: left;&quot;&gt;
Unfortunately, like many initial rollouts of SF (I&#39;m looking at you lookup field filters), it is lacking the ability to create and use filters.&lt;/div&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: left;&quot;&gt;
&lt;br /&gt;What if I had a client that has been with me from day one.&amp;nbsp; Sounds like an instant Gold Service Level criterion to me.&amp;nbsp; It would be great to be able to include something like &quot;Initial Contract Date &amp;lt; 1/1/2005&quot; = Gold, else follow the ranged criteria.&lt;/div&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: left;&quot;&gt;
For more information, check out this video, by my new favorite SF video narrator:&amp;nbsp; &lt;a href=&quot;http://www.youtube.com/watch?v=QFYEtBtLHG4&quot;&gt;http://www.youtube.com/watch?v=QFYEtBtLHG4&lt;/a&gt;&lt;/div&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: left;&quot;&gt;
&lt;/div&gt;</content><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2810682963225669649/posts/default/7438236309116286396'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2810682963225669649/posts/default/7438236309116286396'/><link rel='alternate' type='text/html' href='http://salesforcery.blogspot.com/2012/02/theres-hole-in-my-bucket.html' title='There&#39;s a Hole in My Bucket!'/><author><name>Kirk</name><uri>http://www.blogger.com/profile/06983456068299525612</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="http://1.bp.blogspot.com/-NFpfESE24io/TzkmRPxz7DI/AAAAAAAAAgY/huQvR90Hv1w/s72-c/addBucket.PNG" height="72" width="72"/></entry><entry><id>tag:blogger.com,1999:blog-2810682963225669649.post-7935257812336118305</id><published>2012-02-11T11:54:00.000-08:00</published><updated>2012-02-11T11:57:15.041-08:00</updated><title type='text'>Don&#39;t Double Quote Me!</title><content type='html'>I came across an odd bug within a Visualforce page yesterday.&amp;nbsp; At least I think it is a bug - I can&#39;t explain it and it has been esclated to an upper tier of premier support.&lt;br /&gt;
&lt;br /&gt;
Within an &amp;lt;apex:outputPanel /&amp;gt;, I was using a &quot;rendered&quot; formula within the tag:&lt;br /&gt;
&lt;br /&gt;
&lt;pre style=&quot;background-color: #eeeeee; border: 1px dashed rgb(153, 153, 153); color: black; font-family: Andale Mono, Lucida Console, Monaco, fixed, monospace; font-size: 12px; line-height: 14px; overflow: auto; padding: 5px; width: 100%;&quot;&gt;&lt;code&gt;&amp;lt;apex:outputPanel rendered=&quot;{!If(AND(myObject__c.relatedObject__r.theSuspectField__c = &lt;span style=&quot;background: yellow;&quot;&gt;&#39;The Picklist Value&#39;&lt;/span&gt;,myObject__c.myField2 &amp;gt; 0), true,false)}&quot;&amp;gt;

&lt;/code&gt;&lt;/pre&gt;
&lt;br /&gt;
Ater I saved the page (and although the page would save), I started to receive warnings that I needed to close my &lt;apex:outputpanel&gt; tag.  Thinking that was strange, I commented out everything between my &lt;apex:outputpanel&gt; and &lt;/apex:outputpanel&gt; tags and received the same thing.

Then I saw my rendered formula - that&#39;s strange, I must have used double quotes by accident.  This is what I saw:
&lt;br /&gt;
&lt;/apex:outputpanel&gt;&lt;br /&gt;
&lt;pre style=&quot;background-color: #eeeeee; border: 1px dashed rgb(153, 153, 153); color: black; font-family: Andale Mono, Lucida Console, Monaco, fixed, monospace; font-size: 12px; line-height: 14px; overflow: auto; padding: 5px; width: 100%;&quot;&gt;&lt;code&gt;&amp;lt;apex:outputPanel rendered=&quot;{!If(AND(myObject__c.relatedObject__r.theSuspectField__c = &lt;span style=&quot;background: yellow;&quot;&gt;&quot;The Picklist Value&quot;&lt;/span&gt;,myObject__c.myField2 &amp;gt; 0), true,false)}&quot;&amp;gt;

&lt;/code&gt;&lt;/pre&gt;
&lt;br /&gt;
I replaced the double quotes with single ticks again, hit save, and bam - they were converted to doubles again.&lt;br /&gt;
&lt;br /&gt;
What gives?&lt;br /&gt;
&lt;br /&gt;
Eventually I figured out that if I changed the order in which my fields were listed, the record would save as expected - no double quotes:&lt;br /&gt;
&lt;br /&gt;
&lt;pre style=&quot;background-color: #eeeeee; border: 1px dashed rgb(153, 153, 153); color: black; font-family: Andale Mono, Lucida Console, Monaco, fixed, monospace; font-size: 12px; line-height: 14px; overflow: auto; padding: 5px; width: 100%;&quot;&gt;&lt;code&gt;&amp;lt;apex:outputPanel rendered=&quot;{!If(AND(&lt;span style=&quot;background: yellow;&quot;&gt;myObject__c.myField2&lt;/span&gt; &amp;gt; 0,myObject__c.relatedObject__r.theSuspectField__c = &#39;The Picklist Value&#39;), true,false)}&quot;&amp;gt;

&lt;/code&gt;&lt;/pre&gt;
&lt;br /&gt;
I&#39;m assuming that this it has something to do with myObject__c.relatedObject__r.theSuspectField__c being a picklist field, located on a related record.&amp;nbsp; Why it works in an alternate position in the formula, beats me, but is probably one of those strang quirks of Salesforce.&lt;br /&gt;
&lt;br /&gt;
I&#39;ll update as I find out more.&lt;br /&gt;
&lt;br /&gt;
Note:&amp;nbsp; I was using the inline VF editor, but saw the same issue when I attempted to resolve the issue within the Force.com/Eclipse IDE.</content><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2810682963225669649/posts/default/7935257812336118305'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2810682963225669649/posts/default/7935257812336118305'/><link rel='alternate' type='text/html' href='http://salesforcery.blogspot.com/2012/02/dont-double-quote-me.html' title='Don&#39;t Double Quote Me!'/><author><name>Kirk</name><uri>http://www.blogger.com/profile/06983456068299525612</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author></entry><entry><id>tag:blogger.com,1999:blog-2810682963225669649.post-6444069712011336574</id><published>2012-01-03T23:00:00.000-08:00</published><updated>2012-01-04T13:05:26.936-08:00</updated><title type='text'>VF Templates:  Formatted Merge Values (dates)</title><content type='html'>Just like in the previous post, another type of field that you might not receive your expected data format are date fields.&lt;br /&gt;
My record said:&amp;nbsp; &lt;br /&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;
&lt;a href=&quot;http://4.bp.blogspot.com/-nUUe26LAILM/TwS7KBnlhSI/AAAAAAAAAd8/9tLA5DaBnaU/s1600/date_field.PNG&quot; imageanchor=&quot;1&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; src=&quot;http://4.bp.blogspot.com/-nUUe26LAILM/TwS7KBnlhSI/AAAAAAAAAd8/9tLA5DaBnaU/s1600/date_field.PNG&quot; /&gt;&lt;/a&gt;&lt;/div&gt;
&lt;br /&gt;
This is the VF code I was using:&lt;br /&gt;
&lt;pre style=&quot;background-color: #eeeeee; border: 1px dashed rgb(153, 153, 153); color: black; font-family: Andale Mono, Lucida Console, Monaco, fixed, monospace; font-size: 12px; line-height: 14px; overflow: auto; padding: 5px; width: 100%;&quot;&gt;&lt;code&gt;{!relatedTo.myDateField__c}
&lt;/code&gt;&lt;/pre&gt;
&lt;br /&gt;
The resulting text displayed in an email was:&lt;br /&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;
&lt;a href=&quot;http://3.bp.blogspot.com/-rVNnPL3bt7o/TwS8kCBADbI/AAAAAAAAAeI/MKWFEkYvLtY/s1600/date_preformat.png&quot; imageanchor=&quot;1&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; src=&quot;http://3.bp.blogspot.com/-rVNnPL3bt7o/TwS8kCBADbI/AAAAAAAAAeI/MKWFEkYvLtY/s1600/date_preformat.png&quot; /&gt;&lt;/a&gt;&lt;/div&gt;
&lt;br /&gt;
That&#39;s not too pretty.&lt;br /&gt;
For date fields, you can extract individual pieces of the date, including the month, year, and date.&amp;nbsp; Once you pull those pieces out, you can separate them with a forward slash (“/”) and then it will look more like the date field you were hoping for.&lt;br /&gt;
&lt;br /&gt;
I&#39;m hoping for something that looks like &quot;1/3/2012.&quot;&lt;br /&gt;
&lt;br /&gt;
To retrieve the &quot;1&quot; for the month:&lt;br /&gt;
&lt;pre style=&quot;background-color: #eeeeee; border: 1px dashed rgb(153, 153, 153); color: black; font-family: Andale Mono, Lucida Console, Monaco, fixed, monospace; font-size: 12px; line-height: 14px; overflow: auto; padding: 5px; width: 100%;&quot;&gt;&lt;code&gt;
{!month(relatedto.Distribution_Form_Received_Date__c)}
&lt;/code&gt;&lt;/pre&gt;
&lt;br /&gt;
&lt;code&gt;To retrieve the &quot;3&quot; for the date:&lt;/code&gt;&lt;br /&gt;
&lt;code&gt;&lt;/code&gt;&lt;br /&gt;
&lt;code&gt;&lt;pre style=&quot;background-color: #eeeeee; border: 1px dashed rgb(153, 153, 153); color: black; font-family: Andale Mono, Lucida Console, Monaco, fixed, monospace; font-size: 12px; line-height: 14px; overflow: auto; padding: 5px; width: 100%;&quot;&gt;&lt;code&gt;
{!day(relatedto.Distribution_Form_Received_Date__c)}
&lt;/code&gt;&lt;/pre&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;code&gt;
To retrieve the year &quot;2012&quot;:&lt;/code&gt;&lt;br /&gt;
&lt;code&gt;&lt;pre style=&quot;background-color: #eeeeee; border: 1px dashed rgb(153, 153, 153); color: black; font-family: Andale Mono, Lucida Console, Monaco, fixed, monospace; font-size: 12px; line-height: 14px; overflow: auto; padding: 5px; width: 100%;&quot;&gt;&lt;code&gt;
{!year(relatedto.Distribution_Form_Received_Date__c)}
&lt;/code&gt;&lt;/pre&gt;
&lt;code&gt;
&lt;br /&gt;
 &lt;br /&gt;
Put them all together with those forward slashes:&lt;br /&gt;
&lt;pre style=&quot;background-color: #eeeeee; border: 1px dashed rgb(153, 153, 153); color: black; font-family: Andale Mono, Lucida Console, Monaco, fixed, monospace; font-size: 12px; line-height: 14px; overflow: auto; padding: 5px; width: 100%;&quot;&gt;&lt;code&gt;{!month(relatedto.Distribution_Form_Received_Date__c)}/{!day(relatedto.Distribution_Form_Received_Date__c)}/{!year(relatedto.Distribution_Form_Received_Date__c)}&lt;/code&gt;
&lt;/pre&gt;
&lt;/code&gt;
&lt;br /&gt;
&lt;br /&gt;
With that little bit of magic, your end result will be:&lt;br /&gt;
&lt;/code&gt;&lt;/code&gt;&lt;a href=&quot;http://2.bp.blogspot.com/-1IQEQa8h-0w/TwS-i-5IZBI/AAAAAAAAAeU/gO3nOcPNhFA/s1600/date_post_format.PNG&quot; imageanchor=&quot;1&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; src=&quot;http://2.bp.blogspot.com/-1IQEQa8h-0w/TwS-i-5IZBI/AAAAAAAAAeU/gO3nOcPNhFA/s1600/date_post_format.PNG&quot; /&gt;&lt;/a&gt;&lt;br /&gt;</content><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2810682963225669649/posts/default/6444069712011336574'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2810682963225669649/posts/default/6444069712011336574'/><link rel='alternate' type='text/html' href='http://salesforcery.blogspot.com/2012/01/vf-templates-formatted-merge-values_03.html' title='VF Templates:  Formatted Merge Values (dates)'/><author><name>Kirk</name><uri>http://www.blogger.com/profile/06983456068299525612</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="http://4.bp.blogspot.com/-nUUe26LAILM/TwS7KBnlhSI/AAAAAAAAAd8/9tLA5DaBnaU/s72-c/date_field.PNG" height="72" width="72"/></entry><entry><id>tag:blogger.com,1999:blog-2810682963225669649.post-5358184289865155022</id><published>2012-01-02T19:00:00.000-08:00</published><updated>2012-01-04T12:44:21.047-08:00</updated><title type='text'>VF Templates:  Formatted Merge Values (currency)</title><content type='html'>&lt;a href=&quot;http://www.java2s.com/Code/Java/Development-Class/Currencynumberformat.htm&quot; target=&quot;_blank&quot;&gt;&lt;/a&gt;Once in a while, I&#39;ll run across something that I&#39;ve forgotten all about.&amp;nbsp; Today, I was working with a Visualforce e-mail template that contained a currency field as one of the merge fields.&lt;br /&gt;
&lt;br /&gt;
My record said:&amp;nbsp; $99.00&lt;br /&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;
&lt;a href=&quot;http://3.bp.blogspot.com/-RZFgG9lc7lQ/TwM6GNW0ApI/AAAAAAAAAdY/0kpYPjL5W4s/s1600/99.PNG&quot; imageanchor=&quot;1&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; src=&quot;http://3.bp.blogspot.com/-RZFgG9lc7lQ/TwM6GNW0ApI/AAAAAAAAAdY/0kpYPjL5W4s/s1600/99.PNG&quot; /&gt;&lt;/a&gt;&lt;/div&gt;
I was pulling it in with just this VF code:&lt;br /&gt;
&lt;br /&gt;
&lt;pre style=&quot;background-color: #eeeeee; border: 1px dashed rgb(153, 153, 153); color: black; font-family: Andale Mono, Lucida Console, Monaco, fixed, monospace; font-size: 12px; line-height: 14px; overflow: auto; padding: 5px; width: 100%;&quot;&gt;&lt;code&gt;{!relatedTo.myCurrencyField__c}
&lt;/code&gt;&lt;/pre&gt;
&lt;br /&gt;
Just doing that resulted in the template displaying:&lt;br /&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;
&lt;a href=&quot;http://4.bp.blogspot.com/-xRPWF8FBwOQ/TwM6nkj8tmI/AAAAAAAAAdk/SnEb62xnUls/s1600/pre_format.PNG&quot; imageanchor=&quot;1&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; src=&quot;http://4.bp.blogspot.com/-xRPWF8FBwOQ/TwM6nkj8tmI/AAAAAAAAAdk/SnEb62xnUls/s1600/pre_format.PNG&quot; /&gt;&lt;/a&gt;&lt;/div&gt;
Not quite what I was looking for.&amp;nbsp; What I ended up doing was throwing my merge data into a pre-formatted apex:outputText field, using an apex:param:&lt;br /&gt;
&lt;br /&gt;
&lt;pre style=&quot;background-color: #eeeeee; border: 1px dashed rgb(153, 153, 153); color: black; font-family: Andale Mono,Lucida Console,Monaco,fixed,monospace; font-size: 12px; line-height: 14px; overflow: auto; padding: 5px; width: 100%;&quot;&gt;&lt;code&gt;&amp;lt;apex:outputText value=&quot;{0,number,$###,###,##0.00}&quot;&amp;gt;
    &amp;lt;apex:param value=&quot;{!relatedTo.myCurrencyField__c}&quot; /&amp;gt;
&amp;lt;/apex:outputText&amp;gt;
&lt;/code&gt;&lt;/pre&gt;
&lt;br /&gt;
This will format the dollar amount up to $999,999,999.99.&amp;nbsp; The 0&#39;s are there just incase your amount is not a full dollar ($0.89) or an amount that ends in 0 ($25.40).&amp;nbsp; Otherwise, those values are truncated ($.89 and $25.4 respectively).&lt;br /&gt;
&lt;br /&gt;
Now the template looks like this:&lt;br /&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;
&lt;a href=&quot;http://2.bp.blogspot.com/-zpFT-Fw0o4o/TwM7wkH8JJI/AAAAAAAAAdw/v4ZSQ8GqUFw/s1600/post_format.png&quot; imageanchor=&quot;1&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; src=&quot;http://2.bp.blogspot.com/-zpFT-Fw0o4o/TwM7wkH8JJI/AAAAAAAAAdw/v4ZSQ8GqUFw/s1600/post_format.png&quot; /&gt;&lt;/a&gt;&lt;/div&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
To see more of what you can do, check out:&amp;nbsp; &lt;a href=&quot;http://www.java2s.com/Code/Java/Development-Class/Currencynumberformat.htm&quot; target=&quot;_blank&quot;&gt;Java MessageFormat&lt;/a&gt;</content><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2810682963225669649/posts/default/5358184289865155022'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2810682963225669649/posts/default/5358184289865155022'/><link rel='alternate' type='text/html' href='http://salesforcery.blogspot.com/2012/01/vf-templates-formatted-merge-values.html' title='VF Templates:  Formatted Merge Values (currency)'/><author><name>Kirk</name><uri>http://www.blogger.com/profile/06983456068299525612</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="http://3.bp.blogspot.com/-RZFgG9lc7lQ/TwM6GNW0ApI/AAAAAAAAAdY/0kpYPjL5W4s/s72-c/99.PNG" height="72" width="72"/></entry><entry><id>tag:blogger.com,1999:blog-2810682963225669649.post-1812071175343439287</id><published>2011-12-21T16:44:00.000-08:00</published><updated>2011-12-21T20:35:39.000-08:00</updated><title type='text'>Now you see it... Now you don&#39;t!</title><content type='html'>Part of a recent project requirement was to display a set of fields on a record from a related record.&amp;nbsp; One possibility could have been formula fields for each related field that needed to be displayed.&amp;nbsp; Sigh...&lt;br /&gt;
&lt;br /&gt;
Another would have been to open a second window on a second monitor.&amp;nbsp; Nah... too easy&lt;br /&gt;
&lt;br /&gt;
Of course you could create a Visualforce page that pulls these fields in and add it to the page layout.&amp;nbsp; That would work, but ah... the panel is part of the page, meaning you scroll - it moves.&amp;nbsp; Suddenly you&#39;re scrolling up and down and you might as well have had two windows open.&amp;nbsp; Forehead slap!&lt;br /&gt;
&lt;br /&gt;
What do you do?&lt;br /&gt;
&lt;br /&gt;
I&#39;m a huge fan of the Force.com Quick Access Menu; one of the best time savers rolled out in a recent release.&lt;br /&gt;
&lt;br /&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;
&lt;a href=&quot;http://3.bp.blogspot.com/-VPCdYb1YPHI/TvJ6tiMLOOI/AAAAAAAAAc4/AEs9X1tW9oQ/s1600/force_quick_access.png&quot; imageanchor=&quot;1&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; height=&quot;320&quot; src=&quot;http://3.bp.blogspot.com/-VPCdYb1YPHI/TvJ6tiMLOOI/AAAAAAAAAc4/AEs9X1tW9oQ/s320/force_quick_access.png&quot; width=&quot;260&quot; /&gt;&lt;/a&gt;&lt;/div&gt;
It&#39;s just a small menu panel that floats at the side of the page.&amp;nbsp; The cool part about this is if you scroll, it moves with you.&amp;nbsp; Now, how in the world are you supposed to recreate that?&lt;br /&gt;
&lt;br /&gt;
Fortunately for me, I didn&#39;t want it always displayed.&amp;nbsp; Because of that, I knew I had access to Custom Links and Custom buttons (&lt;a href=&quot;http://www.salesforce.com/us/developer/docs/pages/Content/pages_controller_define_custom_buttons.htm&quot;&gt;read more&lt;/a&gt;).&amp;nbsp; They aren&#39;t just good for linking to pages, you can use them for launching onClick Javascripts too!&lt;br /&gt;
&lt;blockquote&gt;
//Start of Custom Javascript Button Code&lt;br /&gt;
{!REQUIRESCRIPT(&quot;/soap/ajax/15.0/connection.js&quot;)} 
&lt;br /&gt;
&amp;nbsp;//Let&#39;s create a new DIV&lt;br /&gt;
var newdiv = document.createElement(&quot;div&quot;);     
&lt;br /&gt;
var result = sforce.connection.query(&quot;Select ID From &lt;i&gt;ObjectID &lt;/i&gt;where ID = &#39;{!&lt;i&gt;ObjectID&lt;/i&gt;.ID}&#39; AND &lt;i&gt;other criteria if required&lt;/i&gt;);
&lt;br /&gt;
&lt;br /&gt;
//In my case, not every record would have a related record, so to avoid unnecessary errors we&#39;ll add make sure we have a result.&amp;nbsp; Granted, in your scenario, you may return more than one record.&lt;br /&gt;
&lt;br /&gt;
if(result.size&amp;gt;0){
&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; var records = result.getArray(&quot;records&quot;);
&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; var newdiv = document.createElement(&#39;div&#39;); 
&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; //I&#39;m just going to build out my URL + parameters here&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; var string1 = &quot;apex/yourVFpage?core.apexpages.devmode.url=1&amp;amp;id=&quot;;
&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; var string2 = records[0].Id;
&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; var string3 = string1 + string2;
&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; newdiv.setAttribute(&#39;id&#39;, &quot;thepanel&quot;);
&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; newdiv.style.width = &quot;85%&quot;;
&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; newdiv.style.height = &quot;255px&quot;;
&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; newdiv.style.position = &quot;fixed&quot;;
&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; newdiv.style.left = &quot;220px&quot;;
&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; newdiv.style.top = &quot;0px&quot;;
&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; newdiv.style.background = &quot;#FFFFFF&quot;;
&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; newdiv.style.border = &quot;1px solid #000&quot;;
&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; newdiv.style.zIndex = &quot;1000&quot;; 
&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; newdiv.style.padding = &quot;0px&quot;;
&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; //Use a regular old iframe to pull in your VF page&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; newdiv.innerHTML = &quot;&amp;lt;iframe src=&#39;&quot;+string3+&quot;&#39; width=&#39;100%&#39; height=&#39;240px&#39; scrolling=&#39;false&#39;/&amp;gt;&quot;; 
&lt;br /&gt;
&lt;br /&gt;
//This DIV displays the up arrow graphic and provides the onClick functionality for hiding the panel&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; var newdivUp = document.createElement(&#39;div&#39;); 
&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; newdivUp.setAttribute(&#39;id&#39;, &quot;UpPanel&quot;); 
&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; newdivUp.style.width = &quot;46px&quot;;
&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; newdivUp.style.height = &quot;46px&quot;;
&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; newdivUp.style.position = &quot;fixed&quot;;
&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; newdivUp.style.left = &quot;174px&quot;;
&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; newdivUp.style.top = &quot;0px&quot;;
&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; newdivUp.style.background = &quot;transparent&quot;;
&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; newdivUp.style.zIndex = &quot;1000&quot;; 
&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; //Display the image and onClick hide this panel, display the down graphic panel, and hide the info panel&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; newdivUp.innerHTML = &quot;&amp;lt;img id=&#39;up&#39; 
src=&#39;yourUpGraphic.png&#39;
 
onClick=&#39;document.getElementById(\&quot;UpPanel\&quot;).style.display=\&quot;none\&quot;;document.getElementById(\&quot;DownPanel\&quot;).style.display=\&quot;block\&quot;;document.getElementById(\&quot;thepanel\&quot;).style.display=\&quot;none\&quot;;document.getElementById(\&quot;DownPanel\&quot;).style.display=\&quot;block\&quot;;&#39;/&amp;gt;&quot;;
&lt;br /&gt;
&lt;br /&gt;
//This DIV displays the down arrow &lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; var newdivDown = document.createElement(&#39;div&#39;); 
&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; newdivDown.setAttribute(&#39;id&#39;, &quot;DownPanel&quot;); 
&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; newdivDown.style.width = &quot;46px&quot;;
&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; newdivDown.style.height = &quot;46px&quot;;
&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; newdivDown.style.position = &quot;fixed&quot;;
&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; newdivDown.style.left = &quot;174px&quot;;
&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; newdivDown.style.top = &quot;0px&quot;;
&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; newdivDown.style.background = &quot;transparent&quot;;
&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; newdivDown.style.zIndex = &quot;1000&quot;; 
&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; newdivDown.style.display = &quot;none&quot;;&lt;br /&gt;
&amp;nbsp; &amp;nbsp; //Displays the image and onClick hide this panel, display the up graphic and the info panel&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; newdivDown.innerHTML = &quot;&amp;lt;img 
src=&#39;youDownGraphic.png&#39;
 id=&#39;down&#39; 
onClick=&#39;document.getElementById(\&quot;DownPanel\&quot;).style.display=\&quot;none\&quot;;document.getElementById(\&quot;UpPanel\&quot;).style.display=\&quot;block\&quot;;document.getElementById(\&quot;thepanel\&quot;).style.display=\&quot;block\&quot;;&#39; /&amp;gt;&quot;;
&lt;br /&gt;
&lt;br /&gt;
//These three lines will add the DIVs created above to your page&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; document.body.appendChild(newdiv);
&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; document.body.appendChild(newdivUp);
&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; document.body.appendChild(newdivDown);
&lt;br /&gt;
}&lt;br /&gt;
//And just in case you don&#39;t return any records, display an error message&lt;br /&gt;
else if(result.size==0){
&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; alert(&#39;This record is not associated with an \&#39;&lt;i&gt;yourObject&lt;/i&gt;\&#39; record.  Please check the \&#39;&lt;i&gt;yourObject&lt;/i&gt;\&#39; field and try again.&#39;);
&lt;br /&gt;
}&lt;/blockquote&gt;
&lt;br /&gt;
Here&#39;s my end result in the &quot;opened&quot; state:&lt;br /&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;
&lt;a href=&quot;http://1.bp.blogspot.com/-T7FSq-nkCQs/TvKvyu795II/AAAAAAAAAdE/UbfGDy3yfYw/s1600/Open.png&quot; imageanchor=&quot;1&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; src=&quot;http://1.bp.blogspot.com/-T7FSq-nkCQs/TvKvyu795II/AAAAAAAAAdE/UbfGDy3yfYw/s1600/Open.png&quot; /&gt;&lt;/a&gt;&lt;/div&gt;
&lt;br /&gt;
In the closed state: &lt;br /&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;
&lt;a href=&quot;http://4.bp.blogspot.com/-6apCAmNXHKo/TvKvz9EiL3I/AAAAAAAAAdM/TBXRmi3sZ3I/s1600/Closed.png&quot; imageanchor=&quot;1&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; height=&quot;45&quot; src=&quot;http://4.bp.blogspot.com/-6apCAmNXHKo/TvKvz9EiL3I/AAAAAAAAAdM/TBXRmi3sZ3I/s320/Closed.png&quot; width=&quot;320&quot; /&gt;&lt;/a&gt;&lt;/div&gt;
And since you each DIV&#39;s position attribution to be &quot;fixed&quot;, the panel, &quot;x,&quot; or &quot;+&quot; will float at the top of your page for easy use when related data is needed for comparison purposes.&lt;br /&gt;
&lt;br /&gt;
...or of course you could just open two browser windows.&amp;nbsp; Your choice.</content><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2810682963225669649/posts/default/1812071175343439287'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2810682963225669649/posts/default/1812071175343439287'/><link rel='alternate' type='text/html' href='http://salesforcery.blogspot.com/2011/12/now-you-see-it-now-you-dont.html' title='Now you see it... Now you don&#39;t!'/><author><name>Kirk</name><uri>http://www.blogger.com/profile/06983456068299525612</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="http://3.bp.blogspot.com/-VPCdYb1YPHI/TvJ6tiMLOOI/AAAAAAAAAc4/AEs9X1tW9oQ/s72-c/force_quick_access.png" height="72" width="72"/></entry><entry><id>tag:blogger.com,1999:blog-2810682963225669649.post-5079052762890446519</id><published>2011-10-24T09:47:00.000-07:00</published><updated>2011-10-24T19:45:24.482-07:00</updated><title type='text'>Automated Phone Calls Via Workflow???</title><content type='html'>Sure, you&#39;ve got four workflow actions that you can choose from when setting up your fancy new automated processes.&lt;br /&gt;
&lt;ul&gt;
&lt;li&gt;Tasks&lt;/li&gt;
&lt;li&gt;Email Alerts&lt;/li&gt;
&lt;li&gt;Field Updates&lt;/li&gt;
&lt;li&gt;Outbound Messages&lt;/li&gt;
&lt;/ul&gt;
What if I said you could extend this to include:&lt;br /&gt;
&lt;ul&gt;
&lt;li&gt;Automated Calls&lt;/li&gt;
&lt;ul&gt;
&lt;li&gt;Pre-recorded messages&lt;/li&gt;
&lt;li&gt;Robot voice messages (text-to-speech)&lt;/li&gt;
&lt;/ul&gt;
&lt;li&gt;Text messages&lt;/li&gt;
&lt;/ul&gt;
Pretty sweet right?&amp;nbsp; Check out &lt;a href=&quot;http://www.call-em-all.com/&quot;&gt;Call-em-All&lt;/a&gt;.&amp;nbsp; Let&#39;s get it out of the way now... I&#39;m not affiliated with them and they were just a lucky Google search result that I found when searching for broadcast messaging solutions.  Sign up for an account and then register for API authorization to get some test credits.&lt;br /&gt;
&lt;br /&gt;
Through the GUI, you can setup call broadcasts; essentially the same as a mass e-mail, but with phone calls.&amp;nbsp; It&#39;s an easy service as all you do is upload your calls list (first name, last name, phone number) and record a message to be played.&lt;br /&gt;
&lt;br /&gt;
They&#39;ve got a great API that comes loaded with documentation, code samples, and a staging environment.&amp;nbsp; &lt;br /&gt;
&lt;br /&gt;
You can leverage this to create some Apex that can be initiated by a button/link click, scheduled, or yes...even a trigger.&lt;br /&gt;
&lt;br /&gt;
In the following sample, I will be initiating a call broadcast from my Opportunity by updating the Stage.  Utilizing their text-to-speech feature, the call will dynamically include the Opportunity&#39;s name and stage.  There will be two parts; the class and the trigger.&lt;br /&gt;
&lt;br /&gt;
First, the class (excuse the body as it&#39;s lengthy):&lt;br /&gt;
&lt;blockquote&gt;
public class Call_em {&lt;br /&gt;
@future (callout=true)&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;public static void callMe(string a, string b){&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;string Name = a;&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;string stage = b;&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;string username = &#39;username&#39;;&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;string pin = &#39;pin&#39;;&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;string broadcast_type = &#39;1&#39;; &lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;string phone_number_source = &#39;3&#39;;&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;string broadcast_name = &#39;SAMPLE API Broadcast&#39;;&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;string caller_id = &#39;caller_id&#39;;&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;string PhoneNumbers = &#39;phonenumbers&#39;;&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;string TTSText = &#39;This is a test call for the&#39; + Name +&#39; opportunity.  The stage has been set to &#39; + stage;&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;string proxy = &#39;http://staging-api.call-em-all.com/webservices/CEAAPI_v2.asmx?WSDL&#39;;&lt;br /&gt;
&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;HttpRequest req = new HttpRequest();&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;req.setMethod(&#39;POST&#39;);&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;req.setEndpoint(&#39;http://staging-api.call-em-all.com/webservices/CEAAPI_v2.asmx?WSDL&#39;);&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;req.setHeader(&#39;Host&#39;, &#39;api.call-em-all.com&#39;);&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;req.setHeader(&#39;Content-Type&#39;, &#39;text/xml; charset=utf-8&#39;);&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;req.setHeader(&#39;SOAPAction&#39;, &#39;http://call-em-all.com/ExtCreateBroadcast&#39;);&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;string bod = &#39;&lt;soap:envelope xmlns:soap=&quot;http://schemas.xmlsoap.org/soap/envelope/&quot; xmlns:xsd=&quot;http://www.w3.org/2001/XMLSchema&quot; xmlns:xsi=&quot;http://www.w3.org/2001/XMLSchema-instance&quot;&gt;&lt;soap:body&gt;&lt;extcreatebroadcast xmlns=&quot;http://call-em-all.com/&quot;&gt;&lt;myrequest&gt;&lt;username&gt;&#39;+username+&#39;&lt;/username&gt;&lt;pin&gt;&#39;+pin+&#39;&lt;/pin&gt;&lt;ttstext&gt;&#39;+TTSText+&#39;&lt;/ttstext&gt;&lt;ttstextvm&gt;&#39;+TTSText+&#39;&lt;/ttstextvm&gt;&lt;broadcastname&gt;&#39;+broadcast_name+&#39;&lt;/broadcastname&gt;&lt;broadcasttype&gt;&#39;+broadcast_type+&#39;&lt;/broadcasttype&gt;&lt;callerid&gt;&#39;+caller_ID+&#39;&lt;/callerid&gt;&lt;commadelimitedphonenumbers&gt;&#39;+PhoneNumbers+&#39;&lt;/commadelimitedphonenumbers&gt;&lt;phonenumbersource&gt;&#39;+phone_number_source+&#39;&lt;/phonenumbersource&gt;&lt;/myrequest&gt;&lt;/extcreatebroadcast&gt;&lt;/soap:body&gt;&lt;/soap:envelope&gt;&#39;;&lt;br /&gt;
&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;req.setbody(bod);&lt;br /&gt;
&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;Http http = new Http();&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;HTTPResponse res = http.send(req);&lt;br /&gt;
&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;System.debug(&#39;These were the results:  &#39; +res.getBody());&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}&lt;br /&gt;
}&lt;/blockquote&gt;
&lt;br /&gt;
&lt;br /&gt;
And the trigger:
&lt;br /&gt;
&lt;blockquote&gt;
trigger Opportunity on Opportunity (before update){&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;for(Opportunity o: trigger.new){&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;if(yourcriteriahere!){&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;Call_em.callMe(o.Name,o.StageName);&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}&lt;br /&gt;
}&lt;/blockquote&gt;
&lt;br /&gt;
&lt;br /&gt;
Explanations:  I&#39;ve kept the class as simple as possible for now.  Ideally, you would probably not want to create a new broadcast every time the trigger was initiated.  You would want to create your broadcast in advance and add the new number to it.  
&lt;br /&gt;
Note that the method is annotated with @future and callout=true.  This is required as the trigger will make the callout asynchronously.  The first part of the class is just setting up some variables.  Looking at it, I don&#39;t think I used the proxy variable.  My trigger will feed it two strings (yum); the Opportunity Name and the Opportunity Stage.  I then create the new POST HTTPRequest, decalre the endpoint, and set up a few headers.  Notice that my endpoint is set to their &quot;staging&quot; URL.  I would recommend that this be set to a variable so that you could toggle between their staging and production environments relatively easily.
&lt;br /&gt;
&lt;br /&gt;
The trigger speaks for itself.  You can use the &quot;Call_em.callMe(o.Name,o.StageName)&quot; line as an action for a button or even modify it to be used in a schedule Apex class.
&lt;br /&gt;
&lt;br /&gt;
Once you get this sample working, dig around in their API a little bit.  You should be able to leverage existing broadcasts, modify lists, send text messages and so much more!  
&lt;br /&gt;
&lt;br /&gt;
API Documentation: &lt;a href=&quot;http://www.call-em-all.com/dev/docs.aspx%20&quot;&gt; http://www.call-em-all.com/dev/docs.aspx&lt;/a&gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/end sales pitch&amp;gt; ...just kidding</content><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2810682963225669649/posts/default/5079052762890446519'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2810682963225669649/posts/default/5079052762890446519'/><link rel='alternate' type='text/html' href='http://salesforcery.blogspot.com/2011/10/automated-phone-calls-via-workflow.html' title='Automated Phone Calls Via Workflow???'/><author><name>Kirk</name><uri>http://www.blogger.com/profile/06983456068299525612</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author></entry><entry><id>tag:blogger.com,1999:blog-2810682963225669649.post-8336840180441418614</id><published>2011-10-18T18:44:00.000-07:00</published><updated>2011-10-20T07:09:15.656-07:00</updated><title type='text'>Business Hours and Holidays!</title><content type='html'>&lt;script type=&quot;text/javascript&quot;&gt;

  var _gaq = _gaq || [];
  _gaq.push([&#39;_setAccount&#39;, &#39;UA-26372781-1&#39;]);
  _gaq.push([&#39;_trackPageview&#39;]);

  (function() {
    var ga = document.createElement(&#39;script&#39;); ga.type = &#39;text/javascript&#39;; ga.async = true;
    ga.src = (&#39;https:&#39; == document.location.protocol ? &#39;https://ssl&#39; : &#39;http://www&#39;) + &#39;.google-analytics.com/ga.js&#39;;
    var s = document.getElementsByTagName(&#39;script&#39;)[0]; s.parentNode.insertBefore(ga, s);
  })();

&lt;/script&gt;

The holidays are coming and do you know when your tasks are due?&amp;nbsp; There&#39;s an ongoing issue with Salesforce that I&#39;ve inquired about throughout the years.&amp;nbsp; Although you can set business hours (even multiple profiles for hours) and holidays, these aren&#39;t taken into consideration when workflow actions are applied or due.&lt;br /&gt;
&lt;br /&gt;
A few years ago, the answer to my inquiry was to research the IdeaExchange.&amp;nbsp; The idea already existed then and unfortunately is still just an idea today.&lt;br /&gt;
&lt;br /&gt;
IdeaExchange Link:&amp;nbsp; &lt;a href=&quot;http://success.salesforce.com/ideaView?c=09a30000000D9xtAAC&amp;amp;id=08730000000Bpq3AAC&quot;&gt;http://success.salesforce.com/ideaView?c=09a30000000D9xtAAC&amp;amp;id=08730000000Bpq3AAC&lt;/a&gt;&lt;br /&gt;
&lt;br /&gt;
What a shame!&lt;br /&gt;
&lt;br /&gt;
Is there anything you can do?&amp;nbsp; Absolutely, but I hope you like Apex Triggers.&lt;br /&gt;
&lt;br /&gt;
There is a BusinessHours Class that you can read about in the Apex Developer&#39;s Guide:&amp;nbsp; &lt;a href=&quot;http://www.salesforce.com/us/developer/docs/apexcode/index.htm?businesshours&quot;&gt;http://www.salesforce.com/us/developer/docs/apexcode/index.htm?businesshours&lt;/a&gt;&lt;br /&gt;
&lt;br /&gt;
The first thing you want to do before you start playing around with that, though, is to set up your business hours by going to Setup --&amp;gt; Administration Setup --&amp;gt; Company Profile --&amp;gt; Business Hours&lt;br /&gt;
&lt;br /&gt;
For my example, I&#39;ll have a default schedule of Monday through Friday, 8AM to 7PM.&lt;br /&gt;
&lt;br /&gt;
I&#39;ve also set up some holidays through Setup --&amp;gt;&amp;nbsp; Administration Setup --&amp;gt; Company Profile --&amp;gt; Holidays.&amp;nbsp; Don&#39;t forget to go back to your Business Hour schedule and add the holidays to it by clicking on the &quot;Add/Remove&quot; button.&lt;br /&gt;
&lt;br /&gt;
Got that configured?&amp;nbsp; Now you&#39;re ready to give it a whirl.&lt;br /&gt;
&lt;br /&gt;
Of course you&#39;ll want to work this into a trigger, but for demonstration purposes I&#39;ve just created a test class and pulled in the system date/time (system.now()).&lt;br /&gt;
&lt;br /&gt;
&lt;p style=&quot;font-weight:700;&quot;&gt;The VF Page:&lt;/p&gt;
&lt;blockquote&gt;
&amp;lt;apex:page controller=&amp;quot;test_business&amp;quot; &amp;gt;&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;lt;apex:form &amp;gt;&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;Current Date:  {!oldDate}&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;lt;br /&amp;gt;&amp;lt;br /&amp;gt;&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;New (w/ GMT):  {!newDateGMT}    &lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;lt;/apex:form&amp;gt;&lt;br /&gt;
&amp;lt;/apex:page&amp;gt;&lt;br /&gt;
&lt;/blockquote&gt;
&lt;br /&gt;
Explanation:&amp;nbsp; Just two simple getter methods from the test class.&lt;br /&gt;
&lt;ul&gt;
&lt;li&gt;oldDate is simply pulling in the current date/time using the system.now() method.&amp;nbsp; &lt;/li&gt;
&lt;li&gt;newDateGMT is returning the adjusted date/time according to the line w/in that getter method&lt;/li&gt;
&lt;/ul&gt;
&lt;p style=&quot;font-weight:700;&quot;&gt;The Class:&lt;/p&gt;
&lt;blockquote&gt;
public with sharing class test_business {&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;public DateTime getoldDate(){&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;DateTime oldDate = system.now();&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;return oldDate;&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}&lt;br /&gt;
&lt;br /&gt;    
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;public DateTime getnewDateGMT(){&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;BusinessHours bh = [SELECT Id FROM BusinessHours WHERE IsDefault=true];&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;Datetime oldDate = system.now();&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;Datetime newDate = BusinessHours.addGMT(bh.id, oldDate, 3 * 60 * 60 * 1000L);&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;return newDate;&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}&lt;br /&gt;
}&lt;br /&gt;
&lt;/blockquote&gt;
&lt;br /&gt;
Class Explanation:&amp;nbsp; &lt;br /&gt;
&lt;ul&gt;
&lt;li&gt;getoldDate just retrieves the 
system.new() method as explained above.&amp;nbsp; This is the full GMT value, not
 adjusted for your time zone.&lt;/li&gt;
&lt;li&gt;getnewDateGMT has two main parts&lt;/li&gt;
&lt;/ul&gt;
&lt;ol&gt;
&lt;li&gt;The query is creating a BusinessHours object named bh after retrieving the one I created earlier and set as the default.&lt;/li&gt;
&lt;li&gt;Where
 I declare the newDate Datetime, I&#39;m taking advantage of the addGMT 
method in the businesshours class.&amp;nbsp; I need to feed to it the ID of a 
BusinessHours object, a starting date, and my increment (in 
milliseconds).&amp;nbsp; Broken down, that looks like this: &lt;/li&gt;
&lt;ol&gt;
&lt;li&gt;3 - # of hours&lt;/li&gt;
&lt;li&gt;60 - 60 seconds in a minute&lt;/li&gt;
&lt;li&gt;60 - 60 minutes in an hour&lt;/li&gt;
&lt;li&gt;1000L - 1000 milliseconds in second&lt;/li&gt;
&lt;/ol&gt;
&lt;/ol&gt;
&lt;br /&gt;&lt;/blockquote&gt;
&lt;/blockquote&gt;
</content><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2810682963225669649/posts/default/8336840180441418614'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2810682963225669649/posts/default/8336840180441418614'/><link rel='alternate' type='text/html' href='http://salesforcery.blogspot.com/2011/10/business-hours-and-holidays.html' title='Business Hours and Holidays!'/><author><name>Kirk</name><uri>http://www.blogger.com/profile/06983456068299525612</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author></entry><entry><id>tag:blogger.com,1999:blog-2810682963225669649.post-3876314721190916371</id><published>2011-10-17T07:44:00.000-07:00</published><updated>2011-10-17T11:22:31.862-07:00</updated><title type='text'>Summary Report Export:  Too Many Details!!!</title><content type='html'>Say you&#39;re perusing a few reports you haven&#39;t seen since the dawn of your SF Org, thanks to the new Winter &#39;12 report folder interface, and you come across an oldie but a goodie summary report.&lt;br /&gt;
&lt;br /&gt;
&quot;Awesome,&quot; you think as you quickly click on the &quot;Export Details&quot; button to work some Excel magic and show off your report&#39;s findings.  Wait a second, that once dusty report&#39;s Excel file equivalent looks nothing like what you saw in your browser window.  What&#39;s going on here?&lt;br /&gt;
&lt;br /&gt;
The &quot;Export Details&quot; button does exactly that... it exports the details of the report; meaning every line that makes up your report will be rendered as a new line in your .xls or .csv.  This is regardless of whether or not you have clicked on the &quot;Show Details&quot; or &quot;Hide Details&quot; button.  Of course, you could rework the resulting spreadsheet and do the grouping yourself, but why would you do that?&lt;br /&gt;
&lt;br /&gt;
Rather than eagerly clicking on the &quot;Export Details button,&quot; take the &quot;Printable View&quot; button for a test drive.  It will render your report again as an .xls file, but retain the grouping as you see it on your report.&lt;br /&gt;
&lt;br /&gt;
If you want to see the details, click on the &quot;Show Details&quot; button prior to clicking on the &quot;Printable View&quot; button.  This will show each line item as well as the summarized headers.  If you don&#39;t want details, make sure that you&#39;ve clicked on the &quot;Hide Details&quot; button.&lt;br /&gt;
&lt;br /&gt;
In case you were wondering, this also works for Matrix reports!&lt;br /&gt;</content><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2810682963225669649/posts/default/3876314721190916371'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2810682963225669649/posts/default/3876314721190916371'/><link rel='alternate' type='text/html' href='http://salesforcery.blogspot.com/2011/10/summary-report-export-too-many-details.html' title='Summary Report Export:  Too Many Details!!!'/><author><name>Kirk</name><uri>http://www.blogger.com/profile/06983456068299525612</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author></entry><entry><id>tag:blogger.com,1999:blog-2810682963225669649.post-1425603748439930743</id><published>2011-10-12T20:03:00.000-07:00</published><updated>2011-10-12T20:03:47.308-07:00</updated><title type='text'>Error:  Invalid API Version... Come Again?</title><content type='html'>One thing that I love about Salesforce is the sneak peak that we get in our sandboxes prior to each new release.  On occasion though, I&#39;ve worked on something new in one of these developer preview sandboxes and wanted to deploy my code to production.  Only to receive an &quot;Invalid API Version&quot; error message.&lt;br /&gt;
&lt;br /&gt;
Right now, my production environment is Summer &#39;11, but my sandbox is Winter &#39;12.  If I were to create a new Visualforce page in my production environment, the Salesforce API version would be version 22.0.  If I do the same within my sandbox, the API version is 23.0.  The dilemma, upon deployment, is trying to push version 23.0 into a platform that only supports up to version 22.0; hence the &quot;Invalid API Version&quot; error message.  I&#39;ve done this with pages, but I imagine it is quite possible to experience with classes, triggers, templates, etc.&lt;br /&gt;
&lt;br /&gt;
How do you fix this?  Wait for the update to be applied to your production environment.  Just kidding...  &lt;br /&gt;
Within Salesforce, you can go to &quot;Setup&quot; --&gt; &quot;Develop&quot; --&gt; &quot;Pages&quot; --&gt; and click on your page&#39;s name.   From there click on the &quot;Edit&quot; button and then on the &quot;Version Settings&quot; tab.  Drop your version down to that which matches your production instance.  Click on &quot;Save&quot; and try your deployment again.&lt;br /&gt;
From within the Force.com IDE/Eclipse, expand your project and browse to the page, class, trigger, whatever file you&#39;re having issues deploying.  Below that file, you should see an identically named file, appended with -meta.xml... edit that.  In the editor pane, you should see an xml file structure.  You may need to click on the &quot;Source&quot; tab below.  Look for the &lt;apiVersion&gt; tags and replace the version number with that which matches your production instance.  Save it down and try deployment again.&lt;br /&gt;
&lt;br /&gt;
Example:&lt;br /&gt;
&lt;blockquote&gt;&lt;pre style=&quot;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%&quot;&gt;&lt;code&gt;&amp;lt;?xml version=&amp;quot;1.0&amp;quot; encoding=&amp;quot;UTF-8&amp;quot;?&amp;gt;
&amp;lt;ApexPage xmlns=&amp;quot;http://soap.sforce.com/2006/04/metadata&amp;quot;&amp;gt;
  &lt;p style=&quot;color:red;&quot;&gt;&amp;lt;apiVersion&amp;gt;23.0&amp;lt;/apiVersion&amp;gt; &lt;/p&gt;    &amp;lt;description&amp;gt;Default Force.com Change Password page&amp;lt;/description&amp;gt;
    &amp;lt;label&amp;gt;ChangePassword&amp;lt;/label&amp;gt;
&amp;lt;/ApexPage&amp;gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/blockquote&gt;&lt;br /&gt;
While that should fix your problem, keep in mind you are reducing the API version, some it is possible that if you are utilizing some of the new release&#39;s features - your file won&#39;t save after the API version number change and those features won&#39;t work.&lt;br /&gt;
&lt;br /&gt;
Speaking of version numbers, one question you might have is whether or not you need to go through all of your old code to update the API Version after a new update comes along.  Once Winter &#39;12 comes out, am I going to update all of my classes, triggers, and pages to be version 23.0?  No - you don&#39;t have to and you can leave them as is as Salesforce will maintain backwards compatibility.  If you want to use some nifty new tags or features that didn&#39;t exist in that version set, you might have to change it down the road - but you&#39;ll know when you have to.</content><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2810682963225669649/posts/default/1425603748439930743'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2810682963225669649/posts/default/1425603748439930743'/><link rel='alternate' type='text/html' href='http://salesforcery.blogspot.com/2011/10/error-invalid-api-version-come-again.html' title='Error:  Invalid API Version... Come Again?'/><author><name>Kirk</name><uri>http://www.blogger.com/profile/06983456068299525612</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author></entry><entry><id>tag:blogger.com,1999:blog-2810682963225669649.post-1670038866130732445</id><published>2011-10-07T20:52:00.000-07:00</published><updated>2011-10-07T20:59:05.993-07:00</updated><title type='text'>Reduce Deployment Pains (pt. 2):  E-mail Templates</title><content type='html'>Here we are, nearing the end of the week, and as promised, here is part 2 of the &quot;Reduce Deployment Pains&quot; series.  See what we did there with record types?  Guess what?  You can use the same idea for e-mail templates too.  Say you&#39;re working with a method that is responsible for sending an e-mail.  You can specify the individual parts of an email, the subject and the body, or you can specify an e-mail template.  You&#39;ll want to shy away from using an ID again as sometimes you end up in situations where you have an ID mismatch between production and your sandbox.  &lt;br /&gt;
&lt;br /&gt;
Instead, like we did for obtaining a record type ID, we&#39;ll query the template by its name and use it later within a SingleEmailMessage.&lt;br /&gt;
&lt;br /&gt;
&lt;blockquote&gt;public EmailTemplate template = [select Id,Name,Subject,body from EmailTemplate where name =&#39;Your template&#39;s name here&#39;];&lt;br /&gt;
&lt;br /&gt;
...&lt;br /&gt;
&lt;br /&gt;
Messaging.SingleEmailMessage mail = new Messaging.SingleEmailMessage();&lt;br /&gt;
mail.setTemplateID(template.id);&lt;br /&gt;
...&lt;br /&gt;
&lt;/blockquote&gt;</content><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2810682963225669649/posts/default/1670038866130732445'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2810682963225669649/posts/default/1670038866130732445'/><link rel='alternate' type='text/html' href='http://salesforcery.blogspot.com/2011/10/reduce-deployment-pains-pt-2-e-mail.html' title='Reduce Deployment Pains (pt. 2):  E-mail Templates'/><author><name>Kirk</name><uri>http://www.blogger.com/profile/06983456068299525612</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author></entry><entry><id>tag:blogger.com,1999:blog-2810682963225669649.post-1275275218149065566</id><published>2011-10-06T06:45:00.000-07:00</published><updated>2011-10-06T06:45:25.013-07:00</updated><title type='text'>Reduce Deployment Pains (pt. 1):  Record Types</title><content type='html'>Let&#39;s get this ball rolling right away.  One amateur mistake that continually haunts my early code is the hard coding of RecordTypeIDs.  Remember, I&#39;m new to the development game and have preached and have been preached at to not hard code anything.  &lt;br /&gt;
&lt;br /&gt;
Yeah, well under a tight deadline I was more than happy to throw that to the wind.  Now everytime I go to deploy some old code from a sandbox, I&#39;ll get nagged with some sort of error message that the RecordTypeID doesn&#39;t exist in production. &lt;br /&gt;
&lt;br /&gt;
Ah rats, busted.  I created the record type outside of the sandbox or after the sandbox was created and now my record type IDs don&#39;t match up.  What I would do before is just update the ID, deploy, and be on my merry way.&lt;br /&gt;
&lt;br /&gt;
Wrong.&lt;br /&gt;
&lt;br /&gt;
The better way to specify things like IDs will always be to query them so you have the latest and greatest, despite your environment.&lt;br /&gt;
&lt;br /&gt;
Check out this little ditty:&lt;br /&gt;
&lt;br /&gt;
&lt;blockquote&gt;public list&amp;lt;recordType&amp;gt; RecordTypes= new list&amp;lt;recordType&amp;gt;();&lt;br /&gt;
public map&amp;lt;string,id&amp;gt; RecordTypes_Map = new map&amp;lt;string,id&amp;gt;();&lt;br /&gt;
&lt;br /&gt;
public YourClass(ApexPages.StandardController controller) {&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;RecordTypes = [select id, name from recordtype where sObjectType = &amp;#039;YourObjectAPI__c&amp;#039;];&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;if(RecordTypes.size()&amp;gt;0){&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;for(recordtype r:RecordTypes){&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;RecordTypes_Map.put(r.name,r.id);&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}&lt;br /&gt;
}&lt;br /&gt;
&lt;/blockquote&gt;&lt;br /&gt;
I&#39;m creating a map of all the names and IDs of recordtypes for a particular object (don&#39;t forget to chance &#39;YourObjectAPI__c&#39;).&lt;br /&gt;
&lt;br /&gt;
Then within the section of code I want to retrieve the ID, I just use:&lt;br /&gt;
&lt;blockquote&gt;NB_RecordTypes_Map.get(&#39;Name of Your Record Type&#39;));&lt;br /&gt;
&lt;/blockquote&gt;&lt;br /&gt;
The obvious caveat here is if your record type name doesn&#39;t exist or has changed between your production and sandbox instances.  Salesforce will probably puke all over itself in that event, so it probably wouldn&#39;t hurt to include some safe guard catches in your code.</content><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2810682963225669649/posts/default/1275275218149065566'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2810682963225669649/posts/default/1275275218149065566'/><link rel='alternate' type='text/html' href='http://salesforcery.blogspot.com/2011/10/reduce-deployment-pains-pt-1-record.html' title='Reduce Deployment Pains (pt. 1):  Record Types'/><author><name>Kirk</name><uri>http://www.blogger.com/profile/06983456068299525612</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author></entry><entry><id>tag:blogger.com,1999:blog-2810682963225669649.post-5862354800000598750</id><published>2011-10-06T06:30:00.000-07:00</published><updated>2011-10-06T06:30:55.822-07:00</updated><title type='text'>Post Dreamforce Life:  Crazy</title><content type='html'>So it has been a while since my last updates.  If you couldn&#39;t tell or haven&#39;t caught any of the hype that is the monsoon of fun called Dreamforce; it was awesome.  If you ever have a chance to go... do it!  Worth every penny.&lt;br /&gt;
&lt;br /&gt;
The &quot;9-5&quot; has more often than not been a &quot;9-9+&quot; after the conference due to one of the largest and fastest paced projects the company has taken on.  A multi-server hosted platform moved in-house to all new hardware on a brand new network.  The teams&#39;s still alive and are sorting out the system&#39;s &quot;Post Move Blues.&quot;  However, this blog&#39;s not about that the life of an admin; I just wanted to throw out my excuses for being a lazy blogger.&lt;br /&gt;
&lt;br /&gt;
I&#39;ve got some great Salesforce projects in the pipeline (120+ work related and about 20 non-work related to be precise).  I&#39;ll be wrapping of this week with a new series on how to make life easier when it comes to deploying a project from a Sandbox to Production.&lt;br /&gt;
&lt;br /&gt;
Onwards and upwards!</content><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2810682963225669649/posts/default/5862354800000598750'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2810682963225669649/posts/default/5862354800000598750'/><link rel='alternate' type='text/html' href='http://salesforcery.blogspot.com/2011/10/post-dreamforce-life-crazy.html' title='Post Dreamforce Life:  Crazy'/><author><name>Kirk</name><uri>http://www.blogger.com/profile/06983456068299525612</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author></entry><entry><id>tag:blogger.com,1999:blog-2810682963225669649.post-652493605008441715</id><published>2011-08-31T17:03:00.000-07:00</published><updated>2011-08-31T17:03:15.614-07:00</updated><title type='text'>Day 3:  Keynote, Chatter, and Blazing Pages!</title><content type='html'>Hey all again!&lt;br /&gt;
&lt;br /&gt;
Busy day out there today!  Quick shout out to the ! flying solo ! group.  Good success and hopefully I&#39;ll be meeting with some more of you guys in a few hours before the Gala!&lt;br /&gt;
&lt;br /&gt;
Started out the day by meeting fellow &quot;Flying Solo&quot; group member Aoife for breakfast before making our way over to the keynote.  Glad we left when we did; although not a straight on shot of the stage, we had a good profile view and plenty of monitors.&lt;br /&gt;
&lt;br /&gt;
The keynote was great; speakers included Marc Benioff, Parker Harris, and Kraig Swensrud of Salesforce.  Guest speakers were Tim Campos, CIO of Facebook, and Angela Ahrendts, CEO of Burberry.  Also in attendance, Neil Young and MC Hammer.&lt;br /&gt;
&lt;br /&gt;
Big things are happening for Chatter.  IM and screen sharing internal to your org and public groups and meetings with your clients.  Quick easy invites to the client gives access to these public groups.  This left me with one good question... can it be branded or are we stuck with Salesforce branding?&lt;br /&gt;
&lt;br /&gt;
Another cool concept that was discussed was touch.salesforce.com.  This was an iPad app that handled Salesforce.com as an HTML5 app.  They were pushing the write once, ready for many philosophies.  Can&#39;t wait to start playing around with that.  Imagine writing an app for the web, that also works on your iPad, Android tablets, and mobile phones, across any platform, all the same.&lt;br /&gt;
&lt;br /&gt;
Service and support gets some new goodies too, aside from the Radian6 buyout, there is a cool new tool that allows Facetime, directly to clients from a case.  Pretty sweet idea.  Jigsaw has been merged with D&amp;B and now called data.com.  No telling if this is included with Salesforce, or still the pay for a premium version model we saw in the past few releases.&lt;br /&gt;
&lt;br /&gt;
Check out the whole thing here:  https://www.facebook.com/salesforce&lt;br /&gt;
&lt;br /&gt;
Time for the Cloud Expo, Gala, and Metallica!!!</content><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2810682963225669649/posts/default/652493605008441715'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2810682963225669649/posts/default/652493605008441715'/><link rel='alternate' type='text/html' href='http://salesforcery.blogspot.com/2011/08/day-3-keynote-chatter-and-blazing-pages.html' title='Day 3:  Keynote, Chatter, and Blazing Pages!'/><author><name>Kirk</name><uri>http://www.blogger.com/profile/06983456068299525612</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author></entry><entry><id>tag:blogger.com,1999:blog-2810682963225669649.post-1339714424866905762</id><published>2011-08-30T17:06:00.000-07:00</published><updated>2011-08-30T17:06:20.888-07:00</updated><title type='text'>Day 2:  Using Chatter to Transform Your Company</title><content type='html'>This was a great session that practiced what it preached.  If learning about Chatter use cases wasn&#39;t enough, the presenters utilized the DF Dreamforce Chatter for this Session.  Great!  &lt;br /&gt;
&lt;br /&gt;
Doing that introduced a nice way to discuss the presentation as it was going on with other audience members.  At the end, some questions were read aloud and answered.  I&#39;m hoping all of the sessions are like this.&lt;br /&gt;
&lt;br /&gt;
Like a lot of companies that got excited with a pilot of Chatter, we introduced it quickly without proper planning and the attention it deserves.  We enabled it for everyone, tracked a bunch of fields on a bunch of objects, effectively creating too much &quot;noise&quot; to do our deployment much good.&lt;br /&gt;
&lt;br /&gt;
An example given during the presentation was to think of Chatter as an old time radio with a tuner dial.  You can have all static, some static, or a nice crystal clear signal.  It&#39;s all about fine tuning for your audience.  The record oriented updates didn&#39;t mean anything to our users because it was too much of the wrong stuff.  For you it might be too many fields, the wrong fields, or the wrong org environment to follow these record &quot;changes.&quot;&lt;br /&gt;
&lt;br /&gt;
For my company, I believe Chatter can be an effective communication tool.  It will come down to grouping and empowerment.  I&#39;ve disabled the Chatter updates for records within my org and will have a stronger focus on the next attempt.  I&#39;ll create a basic set of department based groups and elect a leader.  The leader will be the employee of the highest position within the company hierarchy.  The tip I&#39;ve heard the most is that adoption of Chatter increases as the higher ups become involved.&lt;br /&gt;
&lt;br /&gt;
With departmental groups, I hope to foster intra-department specialization, increased shared knowledge, and open up communication between the employees in that group.&lt;br /&gt;
&lt;br /&gt;
One challenge will be to establish guidelines of when to use the group and when to pick up the phone.  &lt;br /&gt;
&lt;br /&gt;
I&#39;d also like to try an experiment where a group is created for specific projects.  I would think that this would help my firm stay on track, be more organized, be more open, and ultimately increase awareness on expectations of those involved.&lt;br /&gt;
&lt;br /&gt;
I&#39;m also thinking that it might be good to have a group to let people teach people.  &quot;What do the more experienced users want to share with less experienced employees?  HR should be able spread good news like promotions, group managers should be able to post departmental achievements, and more.  All work and no play makes Jack a dull boy.&lt;br /&gt;
&lt;br /&gt;
I&#39;ll be sure to post more once I have a solidified plan going forward.  Open questions after the session were:&lt;br /&gt;
1)  How do my employees know of groups and hash tags?&lt;br /&gt;
2)  Compliance related issues:  SEC 17a-3 and 4.&lt;br /&gt;
3)  Future of Chatter in workflow - auto create Chatter; auto-enroll employees into groups&lt;br /&gt;
4)  Administratively add users to groups - no opt out&lt;br /&gt;
&lt;br /&gt;
</content><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2810682963225669649/posts/default/1339714424866905762'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2810682963225669649/posts/default/1339714424866905762'/><link rel='alternate' type='text/html' href='http://salesforcery.blogspot.com/2011/08/day-2-using-chatter-to-transform-your.html' title='Day 2:  Using Chatter to Transform Your Company'/><author><name>Kirk</name><uri>http://www.blogger.com/profile/06983456068299525612</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author></entry></feed>