SOQL “Select *”

badideaSo, let me start off this post by saying how this is a bad idea for nearly all applications.  Wildcarding columns has performance impacts and kittens die when you do it.  There is a reason Salesforce doesn’t allow you to do this natively.

THAT SAID, I did happen to come across a scenario where I needed to export multiple records to an Excel file, and there were fields being added, removed, and changed on a quarterly basis.  Fieldset?  Sure, I could go that way, but I figure I try something new – a “set it and forget it” option.

So, I decided I needed to create a “Select *” option that:

  • Dynamically returned all fields in an sObject
  • Could reference and return any object
  • Could either reference a set of Ids or just pull the top 50 records
  • Can handle fields I do NOT want to return
  • Handle multi-level sorting of results

So after a little baby punching and kitten killing, I created a monster.  =)

You can check out my GitHub repo here, but this is the high-level explanation of what beast I just unleashed.

// Specify Record Ids
Set<Id> setRecordIds = new Set<Id>();
setRecords.add(whatever);

// Exclude Audit Fields
Set<String> setBlockedFields = UtilityMethods.setAuditFields;
setBlockedFields.add('whatever__c');

// Set Sorts
Map<String, String> mapSort = new Map<String, String>();
mapSort.put('State', UtilityMethods.G_SORT_ASCENDING);
mapSort.put('Name', UtilityMethods.G_SORT_ASCENDING);
// Awaken the monster
Map<Id, SObject> mapRecordData = UtilityMethods.objRecordData('Account', setRecordIds, setBlockedFields, mapSort);

// Do stuff with the results
GatesOfHell.spawnSatanEternal(mapRecordData);

young-frankenstein-song-and-dance-menSo – please don’t abuse this.  I release this monster into the world as more of an academic exercise as well as ya know what – you may have a real need for this at some point.

Do NOT, by any means, use this in your day-to-day Apex coding.  It’s bad and if you use this, you should feel bad.

Now…if you flipped the purpose of this code to be an INCLUSIVE field set instead of an EXCLUSIVE field set, then I’ll give you a pat on the back.  =)

Discover Lightning on Trailhead!

Lightning-1024x512Unless you’ve been living under a rock lately in the Salesforce community, you’ve heard about the new Lightning Experience (“LEX”) due out in Winter ’16!  (queue elated yet half-scared applause and amazement)

Also, unless you’ve been living under a rock or have not read my previous posts, I’m a pretty rabid fan of Salesforce Trailhead as well – and they have come through with bright shiny colors on delivering FOUR NEW TRAILS all around migrating, administering, and developing around the initial release of LEX.  If you are a developer, administrator, or even end-user – there are trails for you!

My biggest questions have been around “what works and what doesn’t so I can accurately advise my clients”.  I’m slowly digesting the new Winter ’16 pre-release notes that dropped at the end of last week, but as I’ve said before – Trailhead content is written in a way to cut right to the quick; give me contextually-appropriate major chunks of information and test me to ensure I comprehended it right.  There are many times where a Trailhead challenge has given me information in JUST SLIGHTLY a different light that (full pun intended) sets off the light bulb in my brain.

Without further ado, I wanted to introduce you to the four new Trailhead trails and my take on each.  You’ll see some overlap between some of the trails – some modules and challenges cross trails to ensure maximum contextual assistance.

Trail 1:  “Admin Trail – Migrating to Lightning Experience”

Where:  https://developer.salesforce.com/trailhead/trail/lex_admin_migration

Who:  Admins and Developers

What:  Four modules walk you through topics such as:

  • What is LEX and is it right for your organization?
    • Yes!  There are things that work and don’t work – this is “version 1” ya know…
  • How to enable LEX for discovery and testing
  • Navigating setup and new LEX-exclusive enhancements
  • Customizing the LEX UI and a re-introduction to Actions
    • Bye-bye URL hacks!
    • Bye-bye Javascript buttons!
    • Bye-bye raw URL navigation!
  • Setting yourself up for a successful deployment

When:  Do this one first.

Why:  Unless your users are a group of supermen and superwomen that can handle any blip that comes their way, LEX is going to be a tough rollout – specifically in user training and “Salesforce Classic” feature parity.  Start your education here.

Trail 2:  “Admin Trail – Starting with Lightning Experience”

Where:  https://developer.salesforce.com/trailhead/trail/lex_admin_implementation

Who:  Admins and Developers

What:  Three modules walk you through topics such as:

  • Introduction to Salesforce and Lightning
  • Diving into the new Opportunity Workspace
  • Customizing Layouts, Actions, Objects, and Fields
  • Executing a LEX education plan and strategy for your company
  • Dropping the hammer:  LEX Rollout

When:  Do this one second.

Why:  LEX is the #1 largest UI-based change in over a decade.  The underlying administration concepts and foundational abilities aren’t changing, but how you and your users access them are.  You need to learn the gaps that do exist in LEX v1 and how to appropriately mitigate or delay each area so you aren’t left high and dry.

NOTE!  This trail was originally designed for brand new admins who are walking into a Winter ’16 org with LEX enabled, but EVERYONE can learn from this module.

Trail 3:  “Developer Trail – Lightning Experience”

Where:  https://developer.salesforce.com/trailhead/trail/lex_dev

Who:  Developers primarily, but Admins can learn a LOT from this as well

What:  Five modules walk you through topics such as:

  • What is LEX and is it right for your organization?
    • Yes!  There are things that work and don’t work – this is “version 1” ya know…
  • How to enable LEX for discovery and testing
  • UI framework and approach
  • How LEX impacts Visualforce overall
  • How LEX impacts ISVs, Packaging, and the AppExchange
    • How to tell if your 3rd party packages are ready for LEX
  • What else is changing with development tools?
  • How to use Visualforce within the LEX framework
    • Overall expectations
    • Navigation
    • Styling
    • What NOT to do in LEX
  • How to use Lightning Components with the LEX framework
    • Components and Attributes
    • Standard and Force.com Components
    • Events and JavaScript handling
  • Lightning Design System (LDS)
    • SURPRISE!
    • Salesforce has released a Salesforce bootstrap framework
    • How to use it
    • How NOT to use it…

When:  Do this one third overall, or if you’re a dev – do it first just for LDS.

Why:  Because you’re a developer and have questions about how your knowledge will convert into the LEX world – flat out.  Salesforce does not have any delusions that LEX will be perfect on “day 1”, nor do they expect that everyone will be able to transition over even within the next few releases.  What they do expect is that you will take the lessons learned here and start making smart design decisions so that when you are ready to move, you can.

Trail 4:  “Sales Rep Trail – Using Lightning Experience”

Where:  https://developer.salesforce.com/trailhead/trail/lex_end_user

Who:  Admins, Developers, and END USERS (yes!  I said END USERS!)

What:  Two modules walk you through concepts such as:

  • What is Salesforce?
  • What is LEX?
  • Working with your Admins
  • Working with Leads and Opportunities in LEX
  • Leveraging Reports & Dashboards (and more) in LEX

When:  This is a great follow-up to the other trails, or a must for your users as part of your rollout strategy – even if you have seasoned veteran users.

Why:  One thing that admins and devs often skip over is the user experience – or how users will be introduced and trained on the system.  We’re so often mired in the details of fields, triggers, and workflow that we completely space that someone will have to advance their Opportunity through the new Sales Path in LEX.  This module is KEY for getting some good ol’ fashioned context.  =)

IN SUMMARY!  (Yes, I’m finally done!)

  • LEX is BIG.  Not like DF keynote/Benioff’s shoes big – like impacting your career big.
  • Trailhead = awesome.  I can’t pick a better word for it.
  • Salesforce has gifted you a fast-track with Trailhead.  Use it.
  • If you want a Winter ’16 LEX org before your sandbox window – you have to do these modules
    • Pre-release org activation is queued and prioritized based on your Trailhead progress
  • Sound off on Twitter!  Mention me (@andyboettcher) when you complete a badge!  I want to hear from all of you!

Come see me at Dreamforce ’15!

dreamforce_15_cloud_logotype_RGBIt’s almost time for Dreamforce ’15!  I’m going to be working my magic, meeting as many people as I can, and speaking at a good number of sessions this year.  Want to come see me?  Sign up for these sessions today!

Tuesday

9:30am-11:30am – Hands-on Workshop: Introduction to Point-And-Click App Building, Moscone West 2020

Are you a new Salesforce Admin or a Super User looking to understand the power of the creating an application with point-and-click tools on the platform? This session is for you! The goal of this session is to help familiarize you what tools exist on the platform and how you can use them to build an app without writing a single line of code. In addition, in between lessons you’ll get hands-on and build a sustainable app that you can put to work today. At the end of the workshop, you will feel empowered about point-and-click app building, confident in your ability to streamline business process, and be engaged with Salesforce.

NOTE!  We’ll be using one of the Trailhead Projects as the basis for this workshop – come ready to point-and-click your way to success!

12:00pm-12:30pm – Trailhead Gladiators, Moscone West Developer Theater

Watch customers go head-to-head in the DevZone arena as they face off on Trailhead challenges. Who will emerge victorious? Join us and find out.

Wednesday

11:30pm-12:00pm – Trailhead Gladiators, Moscone West Developer Theater

Watch customers go head-to-head in the DevZone arena as they face off on Trailhead challenges. Who will emerge victorious? Join us and find out.

Thursday

12:00pm-1:00pm – Hands-on Training by MVP: Enhance Your Processes and Flows with Apex, Moscone West 2024

Processes and Flows are quickly becoming a go-to tool for both Administrators and Developers. Field updates, time-based actions, fast record lookups, and record creates are all possible declaratively. However, what happens when you need to take your process to the next step, and basic Processes and Flows cannot support your business logic? Join us to learn how developers can utilize Apex interfaces and annotations to customize and support Processes and Flows. You’ll leave with an understanding of how to use the ProcessPlugin interface and the InvocableMethod annotation for allowing Flows to make callouts, handle faults, and implement customized business processes. You should have some familiarity with writing Apex, along with a basic understanding of Processes and Flows to fully participate in this session.

1:30pm-2:00pm – Integrations with the Force.com Platform using Custom Apex REST Services, Moscone West Developer Theater (Innovation Theater)

Join us to learn how to create custom Apex REST web services to allow multiple external systems to integrate – more specifically, the architecture of such services to control and sanitize inputs, fully handle internal exception reporting, and return standard outputs that are able to be consumed and handled by any external programmatic solution.

3:00pm-3:30pm – Trailhead Gladiators, Moscone West Developer Theater

Watch customers go head-to-head in the DevZone arena as they face off on Trailhead challenges. Who will emerge victorious? Join us and find out.

Friday

9:00am-10:00am – Designing an interface users will actually want to use, Moscone West Community Campfire A

“Why won’t the users use my interface? It does exactly what they want it to do!” is a common frustration by developers. Change your mindset. Developers work like developers, users work like users. Let’s talk about how to think like a user.

Trailhead: Event Log Monitoring

 

trailhead_module_shield_event_monitoringSay what?  Event Monitoring?  What’s that?

Winter ’15 delivered a little hidden gem – Event Log Monitoring (ELF).  ELF enables the ability to see a lot of the things that are happening in your org behind the scenes that you just could not answer before – such as:

“Did [x] download my customer list before quitting?”

“How fast is my Visualforce Page loading?”

“Who clicked on a record?”

“Holy moly!”

That’s honestly the only phrase that comes to mind when I’m staring at the new ELF files that I can access.  I can’t tell you how many times I’ve been asked just that first question above by my customers…and up until now all I’ve been able to do is offer future-looking convoluted technical solutions to prevent it from happening in the future.

Ok Andy – I’m not a developer and what I’ve read so far is full of something called “Workbench” and “JSON”.

That’s the best part!  Even though this is really an API-only feature, Salesforce and the community at large have created some great tools (even free in some cases) to help anyone take advantage of this critically important new feature.  *cough* Trailhead *cough*

Ok Andy – enough beaming, let’s get down to brass tacks.  How do I use this?

trailhead-emblemOk.  First things first – let’s start with the new Trailhead module on ELF!  Click here to get started.  “Why would I do Trailhead before just jumping in?” do you ask?  In my opinion, Trailhead is becoming the de facto “first stop” for Salesforce training.  The biggest benefits that Trailhead gives you with ELF are:

  1. Well written content
  2. Real-world examples
  3. In-depth yet contextually appropriate knowledge bullets
  4. “One step further” with great tools and visualizations for ELF

Let’s face it – ELF is not declarative-friendly; this is an API-only feature.  There is no standard UI interface for ELF, you download this data as an array of data and then have to make it useful through a number of visualization tools.  Trailhead takes this situation head-on and gives you INCREDIBLE tools such as Salesforce-ELF to easily retrieve the data you want without needing to write scripts and decipher REST in Workbench, and then visualization tools such (free) Cloudlock Event Monitoring Viewer to actually get you answers to burning questions.

Honesty time:  I read about ELF in the Release Notes, but I saw raw JSON responses and immediately shelved this as “wow, that’ll take some time to visualize…I’ll do that ‘later’.” When Trailhead released their module on ELF – I learned more in 45 minutes than I ever would have by following the release documentation and stumbling around on my own.

So, what are you waiting for?  Head over to the ELF module on Trailhead and start now!

How are you using ELF?  Sound off in the comments below or hit me on Twitter – @andyboettcher!

Write your first APEX trigger – livecoding.tv stream!

Well heck, that was pretty cool.  As part of Salesforce Developer Champions, I set up a streaming channel on Livecoding.TV – a new service dedicated to streaming developers developing stuff.

My first experience was pretty slick – I broadcast live to about 40 people how to create your first APEX trigger.  You can watch the recording (it’s in two parts because my connection dropped) at https://www.livecoding.tv/techman97.

Favorite my channel for more streams coming soon!

Passing Variables to Local Application from Salesforce.com

shiftyCreating solutions for a living often puts you in situations where business needs sometimes just don’t align to “how technology normally works”.  One of these situations came up today.

Requirement:  We have information in Salesforce.com that we need to pass to a local (on the Workstation) Access Database and then open it up.

My brain starts screaming “WHAT?!?!  You can’t do that…the browser won’t let you interact with the local file system!”  After some noodling around, my brain reaches WAAAAY back to VB6 days – Microsoft VBScript.  We could use old school ADO and VBScript commands to open up the Access Database, insert records, and then open that same database through a Shell Run command!

Now – only if Salesforce could be manipulated to build the VBScript file and then the user could just execute it!

After a little messing around, here’s the code!  This code generates the VBS, downloads it with a specific name, and the user can just execute it.

**NOTE – It works with one click in IE, but in Chrome and FF you have to execute the file manually from the downloaded location (clicking on the file via the browser throws an error for some reason)

Visualforce Page

<apex:page standardController="Account" extensions="VBScriptGeneratorController" showHeader="false" sidebar="false" contentType="application/vbs#OpenWord.vbs">
<apex:outputText escape="false" value="{!strOutput}" />
</apex:page>

Controller

public VBScriptGeneratorController(ApexPages.StandardController scController) {
 // TODO
 this.soObject = (sObject)scController.getRecord();
Account acct = [SELECT Id, Name FROM Account WHERE Id = :(Id)this.soObject.get('Id')];
strOutput = '';
strOutput+= 'Set conn = CreateObject("ADODB.Connection") \r\n';
 strOutput+= 'conn.Open "Driver={Microsoft Access Driver (*.mdb, *.accdb)};DBQ=C:\\Users\\Andy\\TestADO.accdb;" \r\n';
 strOutput+= 'strSQL = "INSERT INTO tblData (Var1, Var2) VALUES (\'' + acct.Id + '\',\'' + acct.Name +'\')" \r\n';
 strOutput+= 'Set rs = conn.Execute(StrSQL) \r\n';
 strOutput+= 'conn.Close \r\n';
 strOutput+= 'CreateObject("WScript.Shell").Run "C:\\Users\\Andy\\TestADO.accdb" \r\n';
 }

Installing Mavensmate on Win7 64bit

**** NOTE *****

Since the posting of this article, MavensMate has completely overhauled their Windows installation process to use ST’s Package Manager.  It’s a vastly superior solution than what this article was created to help work through.  Please visit MavensMate’s installation guide at http://www.mavensmate.com/Getting_Started/Users to learn more!

*****************

Hello everyone!

I’ve been on a bit of a blog hiatus as of late – learning new tools and processes, applying them to my Force.com toolbelt has been consuming my time as of late.

One of those tools that has been around for a while, but finally someone got it through my head to try out is Mavensmate by Joe Ferraro.

Built as a plugin for Sublime Text Editor 3, Mavensmate is a dream for editing code, using keyboard shortcuts to do so, working with code coverage, and getting in some Tetris during those long-running deploys.  =)

Installing MM on a Mac is a breeze, but a Windows7 64bit install took me two days to figure out.  My post here today is to help those who are trying to do the same thing not kill the same two days it took me.

1.  Sign up for a GitHub account

2.  Install the Git for Windows package per the instructions:
http://mavensmate.com/Plugins/Sublime_Text/Installation#windows

3.  Download and install Chrome

4.  Download and install Sublime Text 3 (32 bit only!  64 bit will NOT work!)

5.  Do NOT start the Mavensmate installer yet; you need to first generate and install the Git SSH key:
https://help.github.com/articles/generating-ssh-keys

6.  Download the Mavensmate installer

Now – this is where it gets tricky…start up the Mavensmate installer but DO NOT PROCEED beyond the first screen.  If you proceed beyond the first screen the install will fail and you’ll be quite frustrated with an error message that doesn’t give you what the real problem is.

At this point – at the first screen of the Mavensmate installer, open up Sublime Text Editor 3 (32 bit).  When it finishes loading up, proceed through the rest of the Mavensmate installer.  You will see a “mavensmate” menu item appear in Sublime near the end of the install.

7.  Proceed with the remaining steps on the official Mavensmate Windows install page
http://mavensmate.com/Plugins/Sublime_Text/Installation#windows

That’s it!  You’ll be up and rocking with Mavensmate in short order.  I haven’t looked back.  =)