<?xml version="1.0" encoding="UTF-8"?>
<rss xmlns:atom="http://www.w3.org/2005/Atom" xmlns:content="http://purl.org/rss/1.0/modules/content/" xmlns:g-custom="http://base.google.com/cns/1.0" xmlns:media="http://search.yahoo.com/mrss/" version="2.0">
  <channel>
    <title>My Blog of Salesforce Stuff</title>
    <link>https://www.mikearthur.net</link>
    <description>Salesforce and tech info that I hope you will find useful.  If you do, tell your friends, if you don't, tell me.</description>
    <atom:link href="https://www.mikearthur.net/feed/rss2" type="application/rss+xml" rel="self" />
    <image>
      <title>My Blog of Salesforce Stuff</title>
      <url>https://irp-cdn.multiscreensite.com/677b77a5/dms3rep/multi/mike-icon-300x300.jpg</url>
      <link>https://www.mikearthur.net</link>
    </image>
    <item>
      <title>Visual Studio Code error while fetching extensions. XHR Failed.</title>
      <link>https://www.mikearthur.net/visual-studio-code-error-while-fetching-extensions-xhr-failed</link>
      <description>'XHR Failed' error when trying to install VS Code extension</description>
      <content:encoded>&lt;h3&gt;&#xD;
  
         "XHR Failed" error when attempting to install VS Code Extension
         &#xD;
  &lt;br/&gt;&#xD;
&lt;/h3&gt;&#xD;
&lt;div data-rss-type="text"&gt;&#xD;
  &lt;div&gt;&#xD;
    
          Brand new Windows 10 Dell out of the box.
         &#xD;
  &lt;/div&gt;&#xD;
  &lt;div&gt;&#xD;
    
          Installed VS Code then tried to install extension, specifically the 'Salesforce Extension Pack', but I see reports of this error for other extensions too.
         &#xD;
  &lt;/div&gt;&#xD;
  &lt;div&gt;&#xD;
    
          It failed to install with 'XHR Failed'.
         &#xD;
  &lt;/div&gt;&#xD;
  &lt;div&gt;&#xD;
    
          Just on home wifi here, no corporate firewall, proxy, VPN or anything.
         &#xD;
  &lt;/div&gt;&#xD;
  &lt;div&gt;&#xD;
    &lt;br/&gt;&#xD;
  &lt;/div&gt;&#xD;
  &lt;div&gt;&#xD;
    
          Got it working with the help of
          &#xD;
    &lt;a href="https://stackoverflow.com/questions/61190800/why-is-vscode-unable-to-open-extension-an-unknown-error-occurred" target="_blank"&gt;&#xD;
      
           this post
          &#xD;
    &lt;/a&gt;&#xD;
  &lt;/div&gt;&#xD;
  &lt;div&gt;&#xD;
    &lt;ul&gt;&#xD;
      &lt;li&gt;&#xD;
        
            Press Windows key and type 'Network Connections'
           &#xD;
      &lt;/li&gt;&#xD;
      &lt;li&gt;&#xD;
        
            Select 'View Network Connections'
           &#xD;
      &lt;/li&gt;&#xD;
      &lt;li&gt;&#xD;
        
            Right click the network that you are connected to and select 'Properties'
           &#xD;
      &lt;/li&gt;&#xD;
      &lt;li&gt;&#xD;
        
            Click 'Internet Protocol Version 4 (TCP/IPv4) and 'Properties'
           &#xD;
      &lt;/li&gt;&#xD;
      &lt;li&gt;&#xD;
        
            Click 'Use the following DNS server addresses' and enter
           &#xD;
      &lt;/li&gt;&#xD;
      &lt;ul&gt;&#xD;
        &lt;li&gt;&#xD;
          
             Preferred DNS Server: 8.8.8.8
            &#xD;
        &lt;/li&gt;&#xD;
        &lt;li&gt;&#xD;
          
             Alternate DNS Server: 8.8.4.4
             &#xD;
          &lt;br/&gt;&#xD;
          
             (These are Google's DNS servers)
             &#xD;
          &lt;br/&gt;&#xD;
        &lt;/li&gt;&#xD;
      &lt;/ul&gt;&#xD;
      &lt;li&gt;&#xD;
        
            Click 'OK', 'Close'
           &#xD;
      &lt;/li&gt;&#xD;
      &lt;li&gt;&#xD;
        
            Press Windows key and enter 'cmd'
           &#xD;
      &lt;/li&gt;&#xD;
      &lt;li&gt;&#xD;
        
            Click on 'Command Prompt'
           &#xD;
      &lt;/li&gt;&#xD;
      &lt;li&gt;&#xD;
        
            Type
             &#xD;
        &lt;br/&gt;&#xD;
        
            ipconfig /flushdns
            &#xD;
        &lt;br/&gt;&#xD;
        
            enter
           &#xD;
      &lt;/li&gt;&#xD;
      &lt;li&gt;&#xD;
        
            Restart VS Code and try again to install extension
            &#xD;
        &lt;br/&gt;&#xD;
      &lt;/li&gt;&#xD;
    &lt;/ul&gt;&#xD;
  &lt;/div&gt;&#xD;
&lt;/div&gt;</content:encoded>
      <pubDate>Sat, 16 Oct 2021 14:12:20 GMT</pubDate>
      <author>mike@mikearthur.net (Mike Arthur)</author>
      <guid>https://www.mikearthur.net/visual-studio-code-error-while-fetching-extensions-xhr-failed</guid>
      <g-custom:tags type="string">Extension,Salesforce Extension Pack,XHR Failed,Visual Studio,VS Code</g-custom:tags>
    </item>
    <item>
      <title>What is '$A' in Lightning Component Aura Framework?</title>
      <link>https://www.mikearthur.net/what-is-dollar-a-in-lightning-component-aura-framework</link>
      <description>What is $A (dollar A) in Lightning Aura component framework?  Is it a global variable?  Where are the docs for $A?</description>
      <content:encoded>&lt;div data-rss-type="text"&gt;&#xD;
  &lt;div&gt;&#xD;
    
          Whilst learning about Aura components, you will come across $A.
         &#xD;
  &lt;/div&gt;&#xD;
  &lt;div&gt;&#xD;
    &lt;br/&gt;&#xD;
  &lt;/div&gt;&#xD;
  &lt;div&gt;&#xD;
    
          E.g. When making a call to the server from your javascript client controller to retrieve data from the Apex server controller, you queue up the action with '$A.enqueueAction(action)', or when you create a framework event you use '$A.get("e.force:createRecord")'
         &#xD;
  &lt;/div&gt;&#xD;
  &lt;div&gt;&#xD;
    &lt;br/&gt;&#xD;
  &lt;/div&gt;&#xD;
  &lt;div&gt;&#xD;
    
          What is '$A' and where can I find out more about it?
         &#xD;
  &lt;/div&gt;&#xD;
  &lt;div&gt;&#xD;
    &lt;br/&gt;&#xD;
  &lt;/div&gt;&#xD;
  &lt;div&gt;&#xD;
    
          The $A namespace is the entry point for using the framework in JavaScript code.  It allows you to interact with the framework.
         &#xD;
  &lt;/div&gt;&#xD;
  &lt;div&gt;&#xD;
    &lt;br/&gt;&#xD;
  &lt;/div&gt;&#xD;
  &lt;div&gt;&#xD;
    
          The methods available are listed here -
          &#xD;
    &lt;a href="https://developer.salesforce.com/docs/atlas.en-us.lightning.meta/lightning/ref_jsapi_dollarA.htm" target="_blank"&gt;&#xD;
      
           https://developer.salesforce.com/docs/atlas.en-us.lightning.meta/lightning/ref_jsapi_dollarA.htm
          &#xD;
    &lt;/a&gt;&#xD;
    &lt;br/&gt;&#xD;
  &lt;/div&gt;&#xD;
  &lt;div&gt;&#xD;
    &lt;br/&gt;&#xD;
  &lt;/div&gt;&#xD;
  &lt;div&gt;&#xD;
    &lt;br/&gt;&#xD;
  &lt;/div&gt;&#xD;
&lt;/div&gt;</content:encoded>
      <pubDate>Tue, 09 Jun 2020 07:33:43 GMT</pubDate>
      <author>mike@mikearthur.net (Mike Arthur)</author>
      <guid>https://www.mikearthur.net/what-is-dollar-a-in-lightning-component-aura-framework</guid>
      <g-custom:tags type="string">lightning,framework global variable,dollar A,Aura,Component,$A,Framework,Salesforce</g-custom:tags>
    </item>
    <item>
      <title>OAuth 2.0 Authorisation with JWT Bearer Flow</title>
      <link>https://www.mikearthur.net/oauth-2-0-authorisation-with-jwt-bearer-flow</link>
      <description>Authorise a Salesforce Connected App using OAuth 2.0 JWT Bearer Flow</description>
      <content:encoded>&lt;div data-rss-type="text"&gt;&#xD;
  &lt;div&gt;&#xD;
    
                    
          In a server-to-server integration, there is no user to interactively log in to provide authorisation.  In this case OAuth 2.0 JSON Web Token (JWT) bearer flow can provide the authorisation.
         
                  &#xD;
  &lt;/div&gt;&#xD;
  &lt;div&gt;&#xD;
    &lt;br/&gt;&#xD;
  &lt;/div&gt;&#xD;
  &lt;div&gt;&#xD;
    
                    
          There are numerous online resources explaining how to set this up.  I used a pinch from one and a sprinkle from another to arrive at a process that worked for me which I will share here.  All of those sources will be referenced.
         
                  &#xD;
  &lt;/div&gt;&#xD;
  &lt;div&gt;&#xD;
    &lt;br/&gt;&#xD;
  &lt;/div&gt;&#xD;
  &lt;div&gt;&#xD;
    &lt;span&gt;&#xD;
      &lt;b&gt;&#xD;
        
                        
            Ingredients
           
                      &#xD;
      &lt;/b&gt;&#xD;
    &lt;/span&gt;&#xD;
    &lt;br/&gt;&#xD;
  &lt;/div&gt;&#xD;
  &lt;div&gt;&#xD;
    &lt;ul&gt;&#xD;
      &lt;li&gt;&#xD;
        
                        
            A Salesforce Org
           
                      &#xD;
      &lt;/li&gt;&#xD;
      &lt;li&gt;&#xD;
        
                        
            OpenSSL
           
                      &#xD;
      &lt;/li&gt;&#xD;
      &lt;li&gt;&#xD;
        
                        
            Apex or Node or Python
           
                      &#xD;
      &lt;/li&gt;&#xD;
      &lt;li&gt;&#xD;
        
                        
            Postman
           
                      &#xD;
      &lt;/li&gt;&#xD;
    &lt;/ul&gt;&#xD;
  &lt;/div&gt;&#xD;
  &lt;div&gt;&#xD;
    
                    
          If you don't have all of those in your cupboard, don't worry, neither did I when I started.
         
                  &#xD;
  &lt;/div&gt;&#xD;
  &lt;div&gt;&#xD;
    &lt;br/&gt;&#xD;
  &lt;/div&gt;&#xD;
  &lt;div&gt;&#xD;
    &lt;br/&gt;&#xD;
  &lt;/div&gt;&#xD;
  &lt;div&gt;&#xD;
    &lt;span&gt;&#xD;
      &lt;b&gt;&#xD;
        
                        
            Method
           
                      &#xD;
      &lt;/b&gt;&#xD;
    &lt;/span&gt;&#xD;
  &lt;/div&gt;&#xD;
  &lt;div&gt;&#xD;
    &lt;br/&gt;&#xD;
  &lt;/div&gt;&#xD;
  &lt;div&gt;&#xD;
    
                    
          The first part is to generate a X.509 certificate.  Most of the resources that I visited assumed that the reader already had OpenSSL installed, which I did not.
         
                  &#xD;
  &lt;/div&gt;&#xD;
  &lt;div&gt;&#xD;
    &lt;br/&gt;&#xD;
  &lt;/div&gt;&#xD;
  &lt;div&gt;&#xD;
    
                    
          You can check if OpenSSL is installed from the command prompt (I'm using Windows throughout this):
         
                  &#xD;
  &lt;/div&gt;&#xD;
  &lt;div&gt;&#xD;
    &lt;br/&gt;&#xD;
  &lt;/div&gt;&#xD;
  &lt;div&gt;&#xD;
    &lt;span&gt;&#xD;
      
                      
           &amp;gt; which openssl
          
                    &#xD;
    &lt;/span&gt;&#xD;
  &lt;/div&gt;&#xD;
  &lt;div&gt;&#xD;
    &lt;br/&gt;&#xD;
  &lt;/div&gt;&#xD;
&lt;/div&gt;&#xD;
&lt;div&gt;&#xD;
  &lt;a target="_blank" href="https://trailhead.salesforce.com/en/content/learn/modules/sfdx_travis_ci/sfdx_travis_ci_connected_app"&gt;&#xD;
    &lt;img src="https://irp-cdn.multiscreensite.com/677b77a5/dms3rep/multi/JWT1.PNG" alt="Install OpenSSL"/&gt;&#xD;
  &lt;/a&gt;&#xD;
&lt;/div&gt;&#xD;
&lt;div data-rss-type="text"&gt;&#xD;
  &lt;div&gt;&#xD;
    
                    
          Installing OpenSSL on Windows looks pretty complex, and a
          
                    &#xD;
    &lt;a href="https://duckduckgo.com" target="_blank"&gt;&#xD;
      
                      
           DuckDuckGo
          
                    &#xD;
    &lt;/a&gt;&#xD;
    
                    
          search returns lots of questions about errors encountered.  However, a comment in a post on the community pointed out that the git installation for Windows includes OpenSSL, so you can access it from Git Bash.  I already had this installed, so Thanks
          
                    &#xD;
    &lt;a href="https://kaushikghosh12.blogspot.com/2016/08/self-signed-certificates-with-microsoft.html" target="_blank"&gt;&#xD;
      
                      
           Kaushik Ghosh
          
                    &#xD;
    &lt;/a&gt;&#xD;
    
                    
          !
         
                  &#xD;
  &lt;/div&gt;&#xD;
  &lt;div&gt;&#xD;
    &lt;br/&gt;&#xD;
  &lt;/div&gt;&#xD;
  &lt;div&gt;&#xD;
    
                    
          If you don't have OpenSSL or git on Windows, just
          
                    &#xD;
    &lt;a href="https://git-scm.com/downloads" target="_blank"&gt;&#xD;
      
                      
           install git
          
                    &#xD;
    &lt;/a&gt;&#xD;
    
                    
          , it looks much easier tha installing OpenSSL, and open the Git Bash application which gets installed.
         
                  &#xD;
  &lt;/div&gt;&#xD;
  &lt;div&gt;&#xD;
    &lt;br/&gt;&#xD;
  &lt;/div&gt;&#xD;
  &lt;div&gt;&#xD;
    
                    
          Now we can generate the certificate, '
          
                    &#xD;
    &lt;a href="https://trailhead.salesforce.com/content/learn/modules/sfdx_travis_ci/sfdx_travis_ci_connected_app" target="_blank"&gt;&#xD;
      
                      
           straight outta Trailhead
          
                    &#xD;
    &lt;/a&gt;&#xD;
    
                    
          ':
         
                  &#xD;
  &lt;/div&gt;&#xD;
  &lt;div&gt;&#xD;
    &lt;br/&gt;&#xD;
  &lt;/div&gt;&#xD;
  &lt;div&gt;&#xD;
    &lt;div&gt;&#xD;
      
                      
           •    Create a new directory, e.g. cert, and switch to it.
          
                    &#xD;
    &lt;/div&gt;&#xD;
    &lt;div&gt;&#xD;
      &lt;br/&gt;&#xD;
    &lt;/div&gt;&#xD;
    
                    
          •    Generate an RSA private key:
          
                    &#xD;
    &lt;br/&gt;&#xD;
    &lt;br/&gt;&#xD;
    &lt;span&gt;&#xD;
      
                      
           &amp;gt; openssl genrsa -des3 -passout pass:SomePassword -out server.pass.key 2048
          
                    &#xD;
    &lt;/span&gt;&#xD;
  &lt;/div&gt;&#xD;
  &lt;div&gt;&#xD;
    &lt;br/&gt;&#xD;
    
                    
          •    Create a key file from the server.pass.key file:
          
                    &#xD;
    &lt;br/&gt;&#xD;
    &lt;br/&gt;&#xD;
    &lt;span&gt;&#xD;
      
                      
            &amp;gt; openssl rsa -passin pass:SomePassword -in server.pass.key -out server.key
          
                    &#xD;
    &lt;/span&gt;&#xD;
  &lt;/div&gt;&#xD;
  &lt;div&gt;&#xD;
    &lt;br/&gt;&#xD;
  &lt;/div&gt;&#xD;
  &lt;div&gt;&#xD;
    
                    
          •    Delete the server.pass.key:
          
                    &#xD;
    &lt;br/&gt;&#xD;
    &lt;br/&gt;&#xD;
    &lt;span&gt;&#xD;
      
                      
            &amp;gt; rm server.pass.key
          
                    &#xD;
    &lt;/span&gt;&#xD;
  &lt;/div&gt;&#xD;
  &lt;div&gt;&#xD;
    &lt;br/&gt;&#xD;
  &lt;/div&gt;&#xD;
  &lt;div&gt;&#xD;
    
                    
          •    Request and generate the certificate:
          
                    &#xD;
    &lt;br/&gt;&#xD;
    &lt;span&gt;&#xD;
      &lt;br/&gt;&#xD;
    &lt;/span&gt;&#xD;
  &lt;/div&gt;&#xD;
  &lt;div&gt;&#xD;
    &lt;span&gt;&#xD;
      
                      
            &amp;gt; openssl req -new -key server.key -out server.csr
          
                    &#xD;
    &lt;/span&gt;&#xD;
  &lt;/div&gt;&#xD;
  &lt;div&gt;&#xD;
    &lt;br/&gt;&#xD;
  &lt;/div&gt;&#xD;
  &lt;div&gt;&#xD;
    
                    
          •    Enter all requested information.
          
                    &#xD;
    &lt;br/&gt;&#xD;
    &lt;div&gt;&#xD;
      
                      
           o    Press Enter when prompted for the challenge password.
           
                      &#xD;
      &lt;br/&gt;&#xD;
      
                      
           o    The Certificate Authorities use this password to authenticate the certificate owner when they want to revoke their certificate. Because it’s a self-signed certificate, there’s no way to revoke it via CRL (Certificate Revocation List).
           
                      &#xD;
      &lt;br/&gt;&#xD;
      
                      
           o    Enter a period (.) to skip entering an optional company name.
          
                    &#xD;
    &lt;/div&gt;&#xD;
    &lt;div&gt;&#xD;
      &lt;br/&gt;&#xD;
    &lt;/div&gt;&#xD;
    
                    
          •    Generate the SSL certificate:
          
                    &#xD;
    &lt;br/&gt;&#xD;
    &lt;br/&gt;&#xD;
  &lt;/div&gt;&#xD;
  &lt;div&gt;&#xD;
    
                    
           
          
                    &#xD;
    &lt;span&gt;&#xD;
      
                      
           &amp;gt; openssl x509 -req -sha256 -days 365 -in server.csr -signkey server.key -out server.crt
          
                    &#xD;
    &lt;/span&gt;&#xD;
  &lt;/div&gt;&#xD;
  &lt;div&gt;&#xD;
    &lt;br/&gt;&#xD;
  &lt;/div&gt;&#xD;
  &lt;div&gt;&#xD;
    
                    
          •    In your directory, you will now find server.crt, server.csr and server.key.
         
                  &#xD;
  &lt;/div&gt;&#xD;
  &lt;div&gt;&#xD;
    &lt;br/&gt;&#xD;
  &lt;/div&gt;&#xD;
  &lt;div&gt;&#xD;
    
                    
          Next we create a Connected App in Salesforce.
         
                  &#xD;
  &lt;/div&gt;&#xD;
  &lt;div&gt;&#xD;
    &lt;ul&gt;&#xD;
      &lt;li&gt;&#xD;
        
                        
            Go to Setup, and then -
            
                        &#xD;
        &lt;br/&gt;&#xD;
      &lt;/li&gt;&#xD;
      &lt;span&gt;&#xD;
        
                        
            - In Classic, go to Create - Apps and click 'New' next to 'Connected Apps' related list
           
                      &#xD;
      &lt;/span&gt;&#xD;
      &lt;br/&gt;&#xD;
      &lt;span&gt;&#xD;
        
                        
            - In Lightning, type 'app m' in Quick Find, click on 'App Manager' and click 'New Connected App' button at top right
           
                      &#xD;
      &lt;/span&gt;&#xD;
      &lt;br/&gt;&#xD;
      &lt;br/&gt;&#xD;
      &lt;li&gt;&#xD;
        
                        
            Fill in the blanks like this, using your own details.
            
                        &#xD;
        &lt;br/&gt;&#xD;
        &lt;span&gt;&#xD;
          
                          
             - ‘Callback URL’ can be anything.
            
                        &#xD;
        &lt;/span&gt;&#xD;
        &lt;br/&gt;&#xD;
        &lt;span&gt;&#xD;
          
                          
             - Make sure ‘Use digital signatures is checked’ and browse to ‘server.crt’ that was generated above.
            
                        &#xD;
        &lt;/span&gt;&#xD;
      &lt;/li&gt;&#xD;
    &lt;/ul&gt;&#xD;
  &lt;/div&gt;&#xD;
&lt;/div&gt;&#xD;
&lt;div&gt;&#xD;
  &lt;a&gt;&#xD;
    &lt;img src="https://irp-cdn.multiscreensite.com/677b77a5/dms3rep/multi/JWT2-fa24eda2.PNG" alt="New Connected App"/&gt;&#xD;
  &lt;/a&gt;&#xD;
&lt;/div&gt;&#xD;
&lt;div data-rss-type="text"&gt;&#xD;
  &lt;div&gt;&#xD;
    &lt;ul&gt;&#xD;
      &lt;li&gt;&#xD;
        
                        
            Save your Connected app.
           
                      &#xD;
      &lt;/li&gt;&#xD;
    &lt;/ul&gt;&#xD;
  &lt;/div&gt;&#xD;
  &lt;ul&gt;&#xD;
    &lt;li&gt;&#xD;
      
                      
           Click ‘Manage’
          
                    &#xD;
    &lt;/li&gt;&#xD;
  &lt;/ul&gt;&#xD;
  &lt;div&gt;&#xD;
    &lt;ul&gt;&#xD;
      &lt;li&gt;&#xD;
        
                        
            Under ‘OAuth Policies’ set ‘Permitted Users’ to ‘Admin approved users are pre-authorized’
           
                      &#xD;
      &lt;/li&gt;&#xD;
    &lt;/ul&gt;&#xD;
  &lt;/div&gt;&#xD;
  &lt;div&gt;&#xD;
    &lt;ul&gt;&#xD;
      &lt;li&gt;&#xD;
        
                        
            Save, and under ‘Profiles’, add a Profile, e.g. System Administrator
           
                      &#xD;
      &lt;/li&gt;&#xD;
    &lt;/ul&gt;&#xD;
  &lt;/div&gt;&#xD;
  &lt;div&gt;&#xD;
    
                    
          Now we can generate the token that will be used for authorisation.
          
                    &#xD;
    &lt;br/&gt;&#xD;
    &lt;br/&gt;&#xD;
  &lt;/div&gt;&#xD;
  &lt;div&gt;&#xD;
    
                    
          I found various options online for performing this step using
          
                    &#xD;
    &lt;br/&gt;&#xD;
  &lt;/div&gt;&#xD;
  &lt;div&gt;&#xD;
    &lt;div&gt;&#xD;
      
                      
           -
           
                      &#xD;
      &lt;a href="https://salesforce.stackexchange.com/questions/201636/authentication-using-jwt" target="_blank"&gt;&#xD;
        
                        
            Apex
           
                      &#xD;
      &lt;/a&gt;&#xD;
      &lt;br/&gt;&#xD;
    &lt;/div&gt;&#xD;
    &lt;div&gt;&#xD;
      
                      
           -
           
                      &#xD;
      &lt;a href="http://blog.deadlypenguin.com/blog/2019/03/08/jwt-bearer-auth-salesforce-node/" target="_blank"&gt;&#xD;
        
                        
            Node
           
                      &#xD;
      &lt;/a&gt;&#xD;
      &lt;br/&gt;&#xD;
    &lt;/div&gt;&#xD;
    &lt;div&gt;&#xD;
      
                      
           -
           
                      &#xD;
      &lt;a href="https://gist.github.com/booleangate/30d345ecf0617db0ea19c54c7a44d06f" target="_blank"&gt;&#xD;
        
                        
            Python
           
                      &#xD;
      &lt;/a&gt;&#xD;
    &lt;/div&gt;&#xD;
  &lt;/div&gt;&#xD;
  &lt;div&gt;&#xD;
    &lt;br/&gt;&#xD;
  &lt;/div&gt;&#xD;
  &lt;div&gt;&#xD;
    
                    
          I recommend having a look at each as there is a lot of useful information there.  In my case, I had difficulty with the certificate format for the Apex one, and I’ve not used Node, so I went for Python which I have used a little.  It's pretty easy to install and use.
         
                  &#xD;
  &lt;/div&gt;&#xD;
  
                  
         If you don’t have Python, you can install it from
         
                  &#xD;
  &lt;a href="https://www.python.org/downloads/" target="_blank"&gt;&#xD;
    
                    
          here
         
                  &#xD;
  &lt;/a&gt;&#xD;
  
                  
         .
         
                  &#xD;
  &lt;div&gt;&#xD;
    &lt;ul&gt;&#xD;
      &lt;li&gt;&#xD;
        
                        
            Run this command from command line to install needed extensions:
           
                      &#xD;
      &lt;/li&gt;&#xD;
    &lt;/ul&gt;&#xD;
  &lt;/div&gt;&#xD;
  &lt;span&gt;&#xD;
    
                    
          &amp;gt; python -m pip install pyjwt cryptography requests
         
                  &#xD;
  &lt;/span&gt;&#xD;
  &lt;br/&gt;&#xD;
  &lt;div&gt;&#xD;
    &lt;ul&gt;&#xD;
      &lt;li&gt;&#xD;
        
                        
            The python code from
            
                        &#xD;
        &lt;a href="https://gist.github.com/booleangate/30d345ecf0617db0ea19c54c7a44d06f" target="_blank"&gt;&#xD;
          
                          
             booleangate's github page
            
                        &#xD;
        &lt;/a&gt;&#xD;
        
                        
            is shown at the foot of this page.  Paste it into a new file and save it as ‘generate-token.py’.  Put it in the same directory as the .crt and .key files.
           
                      &#xD;
      &lt;/li&gt;&#xD;
    &lt;/ul&gt;&#xD;
    &lt;ul&gt;&#xD;
      &lt;li&gt;&#xD;
        
                        
            Modify these lines:-
             
                        &#xD;
        &lt;br/&gt;&#xD;
        
                        
            IS_SANDBOX – True or False
            
                        &#xD;
        &lt;br/&gt;&#xD;
        
                        
            KEY_FILE – the filename of your .key file.  Include the path if not in the same directory
            
                        &#xD;
        &lt;br/&gt;&#xD;
        
                        
            ISSUER – paste the consumer key from your connected app
            
                        &#xD;
        &lt;br/&gt;&#xD;
        
                        
            SUBJECT – the username of the authenticating user
           
                      &#xD;
      &lt;/li&gt;&#xD;
    &lt;/ul&gt;&#xD;
  &lt;/div&gt;&#xD;
  &lt;div&gt;&#xD;
    &lt;ul&gt;&#xD;
      &lt;li&gt;&#xD;
        
                        
            At the command line make sure you are in the directory containing the .py, .crt and .key files, then issue
           
                      &#xD;
      &lt;/li&gt;&#xD;
    &lt;/ul&gt;&#xD;
    &lt;span&gt;&#xD;
      
                      
            &amp;gt; python generate-token.py
          
                    &#xD;
    &lt;/span&gt;&#xD;
  &lt;/div&gt;&#xD;
  &lt;div&gt;&#xD;
    &lt;br/&gt;&#xD;
  &lt;/div&gt;&#xD;
  &lt;div&gt;&#xD;
    
                    
          All being well you will receive a response like this:
          
                    &#xD;
    &lt;br/&gt;&#xD;
    &lt;br/&gt;&#xD;
  &lt;/div&gt;&#xD;
  &lt;div&gt;&#xD;
    
                    
          PS C:\Users\Mike\cert&amp;gt; python generate-token.py
          
                    &#xD;
    &lt;br/&gt;&#xD;
    
                    
          Loading private key...
          
                    &#xD;
    &lt;br/&gt;&#xD;
    
                    
          Generating signed JWT assertion...
          
                    &#xD;
    &lt;br/&gt;&#xD;
    
                    
          Making OAuth request...
          
                    &#xD;
    &lt;br/&gt;&#xD;
    
                    
          Status: 200
          
                    &#xD;
    &lt;br/&gt;&#xD;
    
                    
          {'access_token': '00DZ0000000cZFp!ARcThisIsNotARealToken5CeekNFm5o8pQfKVNlZoCmTo4mVWOPzR_WrMfbUAcQCH40cuc9rJm9XS4onzrEjhN7JIpAlXYRAGw', 'scope': 'api', 'instance_url': 'https://my-domain.my.salesforce.com', 'id': 'https://login.salesforce.com/id/00Dd0000000NotReal/005d0000000NotReal', 'token_type': 'Bearer'}
          
                    &#xD;
    &lt;br/&gt;&#xD;
  &lt;/div&gt;&#xD;
  &lt;div&gt;&#xD;
    &lt;br/&gt;&#xD;
  &lt;/div&gt;&#xD;
  &lt;div&gt;&#xD;
    
                    
          Copy the access token value, starting 00D…, without the quotes, and use it in Postman.  Postman is a tool for developing and testing APIs and can be freely downloaded
          
                    &#xD;
    &lt;a href="https://www.postman.com/downloads/" target="_blank"&gt;&#xD;
      
                      
           here
          
                    &#xD;
    &lt;/a&gt;&#xD;
    
                    
          .  See
          
                    &#xD;
    &lt;a href="https://www.mikearthur.net/rest-api-connection-to-salesforce-connected-app-using-oauth-2-0-authentication-from-postman" target="_blank"&gt;&#xD;
      
                      
           this post
          
                    &#xD;
    &lt;/a&gt;&#xD;
    
                    
          for an intro to Postman.
         
                  &#xD;
  &lt;/div&gt;&#xD;
  &lt;div&gt;&#xD;
    &lt;br/&gt;&#xD;
  &lt;/div&gt;&#xD;
  &lt;div&gt;&#xD;
    &lt;ul&gt;&#xD;
      &lt;li&gt;&#xD;
        
                        
            Use this for a GET request:
           
                      &#xD;
      &lt;/li&gt;&#xD;
    &lt;/ul&gt;&#xD;
    &lt;span&gt;&#xD;
      
                      
           https://my-domain.my.salesforce.com/services/data/v47.0/query/?q=SELECT+Id, Name+From+Account+LIMIT+1
          
                    &#xD;
    &lt;/span&gt;&#xD;
  &lt;/div&gt;&#xD;
  &lt;div&gt;&#xD;
    &lt;br/&gt;&#xD;
  &lt;/div&gt;&#xD;
  &lt;div&gt;&#xD;
    &lt;ul&gt;&#xD;
      &lt;li&gt;&#xD;
        
                        
            On the ‘Authorization’ tab, choose ‘Bearer Token’ as the ‘Type’ and paste the access token into the ‘Token’ field.  Press ‘Send’ and you should see a JSON response:
           
                      &#xD;
      &lt;/li&gt;&#xD;
    &lt;/ul&gt;&#xD;
  &lt;/div&gt;&#xD;
&lt;/div&gt;&#xD;
&lt;div&gt;&#xD;
  &lt;a&gt;&#xD;
    &lt;img src="https://irp-cdn.multiscreensite.com/677b77a5/dms3rep/multi/JWT3.PNG" alt="Postman screen"/&gt;&#xD;
  &lt;/a&gt;&#xD;
&lt;/div&gt;&#xD;
&lt;div data-rss-type="text"&gt;&#xD;
  &lt;div&gt;&#xD;
    &lt;br/&gt;&#xD;
  &lt;/div&gt;&#xD;
  &lt;div&gt;&#xD;
    &lt;br/&gt;&#xD;
  &lt;/div&gt;&#xD;
  &lt;div&gt;&#xD;
    &lt;span&gt;&#xD;
      &lt;b&gt;&#xD;
        
                        
            Python code for generating JSON Web Token (from
            
                        &#xD;
        &lt;a href="https://gist.github.com/booleangate/30d345ecf0617db0ea19c54c7a44d06f" target="_blank"&gt;&#xD;
          
                          
             booleangate
            
                        &#xD;
        &lt;/a&gt;&#xD;
        
                        
            )
           
                      &#xD;
      &lt;/b&gt;&#xD;
    &lt;/span&gt;&#xD;
  &lt;/div&gt;&#xD;
  &lt;span&gt;&#xD;
    &lt;b&gt;&#xD;
    &lt;/b&gt;&#xD;
  &lt;/span&gt;&#xD;
  &lt;div&gt;&#xD;
    &lt;br/&gt;&#xD;
  &lt;/div&gt;&#xD;
  &lt;div&gt;&#xD;
    &lt;div&gt;&#xD;
      
                      
           from datetime import datetime
           
                      &#xD;
      &lt;br/&gt;&#xD;
      
                      
           import jwt
           
                      &#xD;
      &lt;br/&gt;&#xD;
      
                      
           import time
           
                      &#xD;
      &lt;br/&gt;&#xD;
      
                      
           import requests
           
                      &#xD;
      &lt;br/&gt;&#xD;
      &lt;br/&gt;&#xD;
      
                      
           # *** Update these values to match your configuration ***
           
                      &#xD;
      &lt;br/&gt;&#xD;
      
                      
           IS_SANDBOX = True
           
                      &#xD;
      &lt;br/&gt;&#xD;
      
                      
           KEY_FILE = 'salesforce.key'
           
                      &#xD;
      &lt;br/&gt;&#xD;
      
                      
           ISSUER = 'the consumer key from your application'
           
                      &#xD;
      &lt;br/&gt;&#xD;
      
                      
           SUBJECT = 'your-sf-user@email.tld'
           
                      &#xD;
      &lt;br/&gt;&#xD;
      
                      
           # *******************************************************
           
                      &#xD;
      &lt;br/&gt;&#xD;
      &lt;br/&gt;&#xD;
      
                      
           DOMAIN = 'test' if IS_SANDBOX else 'login'
           
                      &#xD;
      &lt;br/&gt;&#xD;
      &lt;br/&gt;&#xD;
      
                      
           print('Loading private key...')
           
                      &#xD;
      &lt;br/&gt;&#xD;
      
                      
           with open(KEY_FILE) as fd:
           
                      &#xD;
      &lt;br/&gt;&#xD;
      
                      
               private_key = fd.read()
           
                      &#xD;
      &lt;br/&gt;&#xD;
      &lt;br/&gt;&#xD;
      
                      
           print('Generating signed JWT assertion...')
           
                      &#xD;
      &lt;br/&gt;&#xD;
      
                      
           claim = {
           
                      &#xD;
      &lt;br/&gt;&#xD;
      
                      
               'iss': ISSUER,
           
                      &#xD;
      &lt;br/&gt;&#xD;
      
                      
               'exp': int(time.time()) + 300,
           
                      &#xD;
      &lt;br/&gt;&#xD;
      
                      
               'aud': 'https://{}.salesforce.com'.format(DOMAIN),
           
                      &#xD;
      &lt;br/&gt;&#xD;
      
                      
               'sub': SUBJECT,
           
                      &#xD;
      &lt;br/&gt;&#xD;
      
                      
           }
           
                      &#xD;
      &lt;br/&gt;&#xD;
      
                      
           assertion = jwt.encode(claim, private_key, algorithm='RS256', headers={'alg':'RS256'}).decode('utf8')
           
                      &#xD;
      &lt;br/&gt;&#xD;
      &lt;br/&gt;&#xD;
      
                      
           print('Making OAuth request...')
           
                      &#xD;
      &lt;br/&gt;&#xD;
      
                      
           r = requests.post('https://{}.salesforce.com/services/oauth2/token'.format(DOMAIN), data = {
           
                      &#xD;
      &lt;br/&gt;&#xD;
      
                      
               'grant_type': 'urn:ietf:params:oauth:grant-type:jwt-bearer',
           
                      &#xD;
      &lt;br/&gt;&#xD;
      
                      
               'assertion': assertion,
           
                      &#xD;
      &lt;br/&gt;&#xD;
      
                      
           })
           
                      &#xD;
      &lt;br/&gt;&#xD;
      &lt;br/&gt;&#xD;
      
                      
           print('Status:', r.status_code)
           
                      &#xD;
      &lt;br/&gt;&#xD;
      
                      
           print(r.json())
           
                      &#xD;
      &lt;br/&gt;&#xD;
    &lt;/div&gt;&#xD;
  &lt;/div&gt;&#xD;
&lt;/div&gt;</content:encoded>
      <pubDate>Fri, 08 May 2020 13:26:09 GMT</pubDate>
      <author>mike@mikearthur.net (Mike Arthur)</author>
      <guid>https://www.mikearthur.net/oauth-2-0-authorisation-with-jwt-bearer-flow</guid>
      <g-custom:tags type="string">Integration,JSON Web Token,JWT,Developer,Scotland,OAuth,Authorization,REST,Contractor,Authentication,Authorisation,API,Consultant,Edinburgh,Postman,Salesforce</g-custom:tags>
    </item>
    <item>
      <title>Salesforce OAuth 2.0 Web Server Flow Authorisation with Postman</title>
      <link>https://www.mikearthur.net/salesforce-oauth-2-0-web-server-flow-authorisation-with-postman</link>
      <description>REST API Connection to Salesforce Connected App Using OAuth 2.0 Authentication from Postman</description>
      <content:encoded>&lt;div data-rss-type="text"&gt;&#xD;
  &lt;div&gt;&#xD;
    
                    
          As it says at
          
                    &#xD;
    &lt;a href="http://postman.com"&gt;&#xD;
      
                      
           postman.com
          
                    &#xD;
    &lt;/a&gt;&#xD;
    
                    
          ‘Postman is a collaboration platform for API development. Postman's features simplify each step of building an API and streamline collaboration so you can create better APIs—faster.’
         
                  &#xD;
  &lt;/div&gt;&#xD;
  &lt;div&gt;&#xD;
    &lt;br/&gt;&#xD;
  &lt;/div&gt;&#xD;
  &lt;div&gt;&#xD;
    
                    
          It’s a free, downloadable client app currently used by 10 million developers across 500,000 companies.
         
                  &#xD;
  &lt;/div&gt;&#xD;
  &lt;div&gt;&#xD;
    &lt;br/&gt;&#xD;
  &lt;/div&gt;&#xD;
  &lt;div&gt;&#xD;
    
                    
          To demonstrate the process I’m going to use the Connected App from the Trailhead module ‘
          
                    &#xD;
    &lt;a href="https://trailhead.salesforce.com/en/content/learn/projects/build-a-connected-app-for-api-integration" target="_blank"&gt;&#xD;
      
                      
           Build a Connected App for API Integration
          
                    &#xD;
    &lt;/a&gt;&#xD;
    
                    
          ’  and the ‘
          
                    &#xD;
    &lt;a target="_blank" href="https://trailhead.salesforce.com/en/content/learn/modules/api_basics/api_basics_rest"&gt;&#xD;
      
                      
           Use REST API
          
                    &#xD;
    &lt;/a&gt;&#xD;
    
                    
          ’ unit.
         
                  &#xD;
  &lt;/div&gt;&#xD;
  &lt;div&gt;&#xD;
    &lt;br/&gt;&#xD;
  &lt;/div&gt;&#xD;
  
                  
         Once you have
         
                  &#xD;
  &lt;a target="_blank" href="https://www.postman.com/downloads/"&gt;&#xD;
    
                    
          downloaded
         
                  &#xD;
  &lt;/a&gt;&#xD;
  
                  
         and installed the Postman client, open it and click on ‘Create a request’:
         
                  &#xD;
  &lt;br/&gt;&#xD;
  &lt;br/&gt;&#xD;
&lt;/div&gt;&#xD;
&lt;div&gt;&#xD;
  &lt;a&gt;&#xD;
    &lt;img src="https://irp-cdn.multiscreensite.com/677b77a5/dms3rep/multi/Postman1.png" alt="Create new request in Postman"/&gt;&#xD;
  &lt;/a&gt;&#xD;
&lt;/div&gt;&#xD;
&lt;div&gt;&#xD;
  &lt;a&gt;&#xD;
    &lt;img src="https://irp-cdn.multiscreensite.com/677b77a5/dms3rep/multi/Postman2.png" alt="Postman authorization tab"/&gt;&#xD;
  &lt;/a&gt;&#xD;
&lt;/div&gt;&#xD;
&lt;div data-rss-type="text"&gt;&#xD;
  &lt;div&gt;&#xD;
    &lt;br/&gt;&#xD;
  &lt;/div&gt;&#xD;
  &lt;div&gt;&#xD;
    
                    
          Now we need some values from the OAuth settings of the Connected App.  To get back to those settings in your Salesforce org, go to Setup and click on App Manager, then click the dropdown next to your Connected App on the far right and select ‘View’:
         
                  &#xD;
  &lt;/div&gt;&#xD;
  &lt;div&gt;&#xD;
    &lt;br/&gt;&#xD;
  &lt;/div&gt;&#xD;
&lt;/div&gt;&#xD;
&lt;div&gt;&#xD;
  &lt;a&gt;&#xD;
    &lt;img src="https://irp-cdn.multiscreensite.com/677b77a5/dms3rep/multi/Postman3.png" alt="Salesforce Setup App Manager"/&gt;&#xD;
  &lt;/a&gt;&#xD;
&lt;/div&gt;&#xD;
&lt;div data-rss-type="text"&gt;&#xD;
  &lt;div&gt;&#xD;
    &lt;br/&gt;&#xD;
  &lt;/div&gt;&#xD;
  &lt;div&gt;&#xD;
    
                    
          You will need the ‘Consumer Key’, ‘Consumer Secret’ (click to reveal it) and the ‘Callback URL’:
         
                  &#xD;
  &lt;/div&gt;&#xD;
  &lt;div&gt;&#xD;
    &lt;br/&gt;&#xD;
  &lt;/div&gt;&#xD;
&lt;/div&gt;&#xD;
&lt;div&gt;&#xD;
  &lt;a&gt;&#xD;
    &lt;img src="https://irp-cdn.multiscreensite.com/677b77a5/dms3rep/multi/Postman4-1.png" alt="Salesforce Setup Manage Connected Apps"/&gt;&#xD;
  &lt;/a&gt;&#xD;
&lt;/div&gt;&#xD;
&lt;div data-rss-type="text"&gt;&#xD;
  &lt;div&gt;&#xD;
    &lt;br/&gt;&#xD;
  &lt;/div&gt;&#xD;
  &lt;div&gt;&#xD;
    
                    
          Whilst in the org, click on App Manager again and this time click ‘Manage’ in the dropdown on the right next to your Connected org.  For this demo, set ‘Permitted Users’ to ‘All users may self-authorize’ and set ‘IP Relaxation’ to ‘Relax IP restrictions’.  These may have been set to different values during the Trailhead module.
         
                  &#xD;
  &lt;/div&gt;&#xD;
  &lt;div&gt;&#xD;
    &lt;br/&gt;&#xD;
  &lt;/div&gt;&#xD;
&lt;/div&gt;&#xD;
&lt;div&gt;&#xD;
  &lt;a&gt;&#xD;
    &lt;img src="https://irp-cdn.multiscreensite.com/677b77a5/dms3rep/multi/Postman5.png" alt="Salesforce Setup Edit Connected App Policies"/&gt;&#xD;
  &lt;/a&gt;&#xD;
&lt;/div&gt;&#xD;
&lt;div data-rss-type="text"&gt;&#xD;
  &lt;div&gt;&#xD;
    &lt;br/&gt;&#xD;
  &lt;/div&gt;&#xD;
  &lt;div&gt;&#xD;
    
                    
          Postman will also need values for an Authorization URL and Access Token URL:
         
                  &#xD;
  &lt;/div&gt;&#xD;
  &lt;ul&gt;&#xD;
    &lt;li&gt;&#xD;
      
                      
           Find your ‘domain’, it’s the part between ‘https://’ and ‘.lightning.force.com’ when you look at the address of a page in your org.  E.g. for an Account in my Trailhead Playground –
           
                      &#xD;
      &lt;br/&gt;&#xD;
      
                      
           https://
           
                      &#xD;
      &lt;i&gt;&#xD;
        &lt;b&gt;&#xD;
          &lt;font&gt;&#xD;
            
                            
              cunning-bear-pw9vyc-dev-ed
             
                          &#xD;
          &lt;/font&gt;&#xD;
        &lt;/b&gt;&#xD;
      &lt;/i&gt;&#xD;
      
                      
           .lightning.force.com/lightning/r/Account/0011t0000081O5vAAE/view
           
                      &#xD;
      &lt;br/&gt;&#xD;
    &lt;/li&gt;&#xD;
  &lt;/ul&gt;&#xD;
  &lt;ul&gt;&#xD;
    &lt;li&gt;&#xD;
      
                      
           For the Auth URL, Replace ‘MyDomain’ with your domain here:
           
                      &#xD;
      &lt;br/&gt;&#xD;
      
                      
           https://MyDomain.my.salesforce.com/services/oauth2/authorize
           
                      &#xD;
      &lt;br/&gt;&#xD;
    &lt;/li&gt;&#xD;
  &lt;/ul&gt;&#xD;
  &lt;ul&gt;&#xD;
    &lt;li&gt;&#xD;
      
                      
           Do the same for the Access Token URL:
           
                      &#xD;
      &lt;br/&gt;&#xD;
      
                      
           https://MyDomain.my.salesforce.com/services/oauth2/token
           
                      &#xD;
      &lt;br/&gt;&#xD;
    &lt;/li&gt;&#xD;
  &lt;/ul&gt;&#xD;
  &lt;br/&gt;&#xD;
  
                  
         Now you can fill in the blanks in Postman for the OAuth 2.0 values:
         
                  &#xD;
  &lt;br/&gt;&#xD;
  &lt;ul&gt;&#xD;
    &lt;li&gt;&#xD;
      
                      
           Token Name can be anything you like, it allows you to retrieve the token later
          
                    &#xD;
    &lt;/li&gt;&#xD;
    &lt;li&gt;&#xD;
      
                      
           Fill ‘Client ID’ with your ‘Consumer Secret’ and ‘Client Secret’ with your ‘Consumer Secret’
          
                    &#xD;
    &lt;/li&gt;&#xD;
    &lt;li&gt;&#xD;
      
                      
           For ‘Scope’ I matched the values with the ‘Selected OAuth Scopes’ of my Connected App, using the value in brackets for each one, separated by a single space
          
                    &#xD;
    &lt;/li&gt;&#xD;
  &lt;/ul&gt;&#xD;
  &lt;br/&gt;&#xD;
&lt;/div&gt;&#xD;
&lt;div&gt;&#xD;
  &lt;a&gt;&#xD;
    &lt;img src="https://irp-cdn.multiscreensite.com/677b77a5/dms3rep/multi/Postman6.png" alt="Postman Get New Access Token Parameters"/&gt;&#xD;
  &lt;/a&gt;&#xD;
&lt;/div&gt;&#xD;
&lt;div data-rss-type="text"&gt;&#xD;
  &lt;div&gt;&#xD;
    &lt;br/&gt;&#xD;
  &lt;/div&gt;&#xD;
  &lt;div&gt;&#xD;
    
                    
          Click on ‘Request Token’.  You will be prompted for your org login.  Login and allow the connection if prompted.
         
                  &#xD;
  &lt;/div&gt;&#xD;
  &lt;div&gt;&#xD;
    &lt;br/&gt;&#xD;
  &lt;/div&gt;&#xD;
&lt;/div&gt;&#xD;
&lt;div&gt;&#xD;
  &lt;a&gt;&#xD;
    &lt;img src="https://irp-cdn.multiscreensite.com/677b77a5/dms3rep/multi/Postman7.png" alt="Postman Access Token"/&gt;&#xD;
  &lt;/a&gt;&#xD;
&lt;/div&gt;&#xD;
&lt;div data-rss-type="text"&gt;&#xD;
  &lt;div&gt;&#xD;
    &lt;br/&gt;&#xD;
  &lt;/div&gt;&#xD;
  &lt;div&gt;&#xD;
    
                    
          Now, from the ‘Available Tokens’ dropdown, select the token just generated.  They are named by the ‘Token Name’ that you gave it when generating it:
         
                  &#xD;
  &lt;/div&gt;&#xD;
  &lt;div&gt;&#xD;
    &lt;br/&gt;&#xD;
  &lt;/div&gt;&#xD;
&lt;/div&gt;&#xD;
&lt;div&gt;&#xD;
  &lt;a&gt;&#xD;
    &lt;img src="https://irp-cdn.multiscreensite.com/677b77a5/dms3rep/multi/Postman8.png" alt="Postman REST Request"/&gt;&#xD;
  &lt;/a&gt;&#xD;
&lt;/div&gt;&#xD;
&lt;div data-rss-type="text"&gt;&#xD;
  &lt;div&gt;&#xD;
    &lt;br/&gt;&#xD;
  &lt;/div&gt;&#xD;
  &lt;div&gt;&#xD;
    
                    
          A request, based on the ‘
          
                    &#xD;
    &lt;a target="_blank" href="https://trailhead.salesforce.com/en/content/learn/modules/api_basics/api_basics_rest"&gt;&#xD;
      
                      
           Use REST API
          
                    &#xD;
    &lt;/a&gt;&#xD;
    
                    
          ’ Trailhead unit can now be sent to get details of an Account:
         
                  &#xD;
  &lt;/div&gt;&#xD;
  &lt;ul&gt;&#xD;
    &lt;li&gt;&#xD;
      
                      
           For the ‘Get’ request, enter
           
                      &#xD;
      &lt;br/&gt;&#xD;
      
                      
           https://MyDomain.my.salesforce.com/services/data/v48.0/query/?q=SELECT+Id, Name+From+Account+WHERE+AccountNumber='CD656092'
           
                      &#xD;
      &lt;br/&gt;&#xD;
      &lt;br/&gt;&#xD;
      
                      
           Use a query filter which will return data for your org and replace ‘MyDomain’ with your domain:
           
                      &#xD;
      &lt;br/&gt;&#xD;
    &lt;/li&gt;&#xD;
  &lt;/ul&gt;&#xD;
  &lt;br/&gt;&#xD;
&lt;/div&gt;&#xD;
&lt;div&gt;&#xD;
  &lt;a&gt;&#xD;
    &lt;img src="https://irp-cdn.multiscreensite.com/677b77a5/dms3rep/multi/Postman9.png" alt="Postman REST Request"/&gt;&#xD;
  &lt;/a&gt;&#xD;
&lt;/div&gt;&#xD;
&lt;div data-rss-type="text"&gt;&#xD;
  &lt;div&gt;&#xD;
    &lt;br/&gt;&#xD;
  &lt;/div&gt;&#xD;
  &lt;div&gt;&#xD;
    
                    
          Press ‘Send’ and you will get the JSON response:
         
                  &#xD;
  &lt;/div&gt;&#xD;
  &lt;div&gt;&#xD;
    &lt;br/&gt;&#xD;
  &lt;/div&gt;&#xD;
&lt;/div&gt;&#xD;
&lt;div&gt;&#xD;
  &lt;a&gt;&#xD;
    &lt;img src="https://irp-cdn.multiscreensite.com/677b77a5/dms3rep/multi/Postman10.png" alt="Postman REST Request Response"/&gt;&#xD;
  &lt;/a&gt;&#xD;
&lt;/div&gt;&#xD;
&lt;div data-rss-type="text"&gt;&#xD;
  &lt;div&gt;&#xD;
    &lt;br/&gt;&#xD;
  &lt;/div&gt;&#xD;
  &lt;div&gt;&#xD;
    
                    
          Hopefully you will have that very satisfied feeling when it works &amp;#55357;&amp;#56842;
         
                  &#xD;
  &lt;/div&gt;&#xD;
  &lt;br/&gt;&#xD;
  
                  
         To take it a step further and get a little deeper into Postman, click where it says ‘Learn more about variables’:
         
                  &#xD;
  &lt;br/&gt;&#xD;
  &lt;br/&gt;&#xD;
&lt;/div&gt;&#xD;
&lt;div&gt;&#xD;
  &lt;a&gt;&#xD;
    &lt;img src="https://irp-cdn.multiscreensite.com/677b77a5/dms3rep/multi/Postman11.png" alt="Postman Variables"/&gt;&#xD;
  &lt;/a&gt;&#xD;
&lt;/div&gt;&#xD;
&lt;div data-rss-type="text"&gt;&#xD;
  &lt;div&gt;&#xD;
    &lt;br/&gt;&#xD;
  &lt;/div&gt;&#xD;
  &lt;div&gt;&#xD;
    
                    
          Find out about variables and environments, then instead of having to paste in all that pesky guff each time you want a token, you can refer to variables like this:
         
                  &#xD;
  &lt;/div&gt;&#xD;
  &lt;div&gt;&#xD;
    &lt;br/&gt;&#xD;
  &lt;/div&gt;&#xD;
&lt;/div&gt;&#xD;
&lt;div&gt;&#xD;
  &lt;a&gt;&#xD;
    &lt;img src="https://irp-cdn.multiscreensite.com/677b77a5/dms3rep/multi/Postman12.png" alt="Postman OAuth 2.0 Parameters with Variables"/&gt;&#xD;
  &lt;/a&gt;&#xD;
&lt;/div&gt;</content:encoded>
      <enclosure url="https://irp-cdn.multiscreensite.com/677b77a5/dms3rep/multi/Postman9.png" length="13420" type="image/png" />
      <pubDate>Sun, 26 Apr 2020 20:49:30 GMT</pubDate>
      <guid>https://www.mikearthur.net/salesforce-oauth-2-0-web-server-flow-authorisation-with-postman</guid>
      <g-custom:tags type="string">Integration,Developer,Scotland,OAuth,Authorization,REST,Contractor,Authentication,Authorisation,API,Consultant,Edinburgh,Connected App,Postman,Salesforce</g-custom:tags>
      <media:content medium="image" url="https://irp-cdn.multiscreensite.com/677b77a5/dms3rep/multi/Postman9.png">
        <media:description>thumbnail</media:description>
      </media:content>
    </item>
    <item>
      <title>How to create a Lightning tab menu with dropdown sub-menu</title>
      <link>https://www.mikearthur.net/how-to-create-a-lightning-tab-menu-with-dropdown-sub-menu</link>
      <description>How to create a Lightning tab menu with dropdown sub-menu</description>
      <content:encoded>&lt;h3&gt;&#xD;
  
                  
         No out of the box option so I built my own
         
                  &#xD;
  &lt;br/&gt;&#xD;
&lt;/h3&gt;&#xD;
&lt;div data-rss-type="text"&gt;&#xD;
  &lt;div&gt;&#xD;
    
                    
          Display a row of tabs. When one of them is clicked, it displays a dropdown sub-menu, allowing the user to click on one of the options.
         
                  &#xD;
  &lt;/div&gt;&#xD;
  &lt;div&gt;&#xD;
    &lt;br/&gt;&#xD;
  &lt;/div&gt;&#xD;
&lt;/div&gt;&#xD;
&lt;div&gt;&#xD;
  &lt;a&gt;&#xD;
    &lt;img src="https://irp-cdn.multiscreensite.com/677b77a5/dms3rep/multi/PhMU2.gif" alt="gif showing lightning component tab menu with dropdown sub menus"/&gt;&#xD;
  &lt;/a&gt;&#xD;
&lt;/div&gt;&#xD;
&lt;div data-rss-type="text"&gt;&#xD;
  &lt;div&gt;&#xD;
    &lt;br/&gt;&#xD;
  &lt;/div&gt;&#xD;
  &lt;div&gt;&#xD;
    
                    
          This is the component:
         
                  &#xD;
  &lt;/div&gt;&#xD;
&lt;/div&gt;&#xD;
&lt;div data-rss-type="text"&gt;&#xD;
  
                  
         Here is the controller:
         
                  &#xD;
  &lt;br/&gt;&#xD;
&lt;/div&gt;&#xD;
&lt;div data-rss-type="text"&gt;&#xD;
  &lt;div&gt;&#xD;
    &lt;br/&gt;&#xD;
  &lt;/div&gt;&#xD;
  &lt;div&gt;&#xD;
    
                    
          and here is the helper:
         
                  &#xD;
  &lt;/div&gt;&#xD;
&lt;/div&gt;</content:encoded>
      <pubDate>Mon, 23 Mar 2020 22:20:35 GMT</pubDate>
      <guid>https://www.mikearthur.net/how-to-create-a-lightning-tab-menu-with-dropdown-sub-menu</guid>
      <g-custom:tags type="string">Developer Consultant Contractor Lightning Integration Aura component menu dropdown submenu</g-custom:tags>
    </item>
    <item>
      <title>Month by Month Trend Chart Showing Year on Year Comparison</title>
      <link>https://www.mikearthur.net/month-by-month-trend-chart-showing-year-on-year-comparison</link>
      <description>How to show a month by month trend chart with multiple years on same chart</description>
      <content:encoded>&lt;h3&gt;&#xD;
  
                  
         How to show month by month trend for a year, with multiple years shown on same chart?
        
                &#xD;
&lt;/h3&gt;&#xD;
&lt;div&gt;&#xD;
  &lt;a&gt;&#xD;
    &lt;img src="https://irp-cdn.multiscreensite.com/677b77a5/dms3rep/multi/TrendChart-747x262.PNG" alt="Month by Month Trend Chart for Multiple Years" title=""/&gt;&#xD;
  &lt;/a&gt;&#xD;
&lt;/div&gt;&#xD;
&lt;div data-rss-type="text"&gt;&#xD;
  &lt;p&gt;&#xD;
    
                    
          Thanks to
          
                    &#xD;
    &lt;a href="https://success.salesforce.com/ProfileView?u=0053000000B05iO" target="_blank"&gt;&#xD;
      
                      
           Evan Ponter
          
                    &#xD;
    &lt;/a&gt;&#xD;
    
                    
          for a neat solution to this trending chart requirement over on the success community
          
                    &#xD;
    &lt;a href="https://success.salesforce.com/answers?id=9063A0000019easQAA"&gt;&#xD;
      
                      
           https://success.salesforce.com/answers?id=9063A0000019easQAA
          
                    &#xD;
    &lt;/a&gt;&#xD;
    &lt;br/&gt;&#xD;
  &lt;/p&gt;&#xD;
&lt;/div&gt;</content:encoded>
      <enclosure url="https://irp-cdn.multiscreensite.com/677b77a5/dms3rep/multi/TrendChart_130UFMsuSBaYfZy1Owe2-747x262.PNG" length="33072" type="image/png" />
      <pubDate>Tue, 27 Nov 2018 10:42:05 GMT</pubDate>
      <author>mike@mikearthur.net (Mike Arthur)</author>
      <guid>https://www.mikearthur.net/month-by-month-trend-chart-showing-year-on-year-comparison</guid>
      <g-custom:tags type="string">Salesforce,chart,trend,month,year,comparison,consultant,developer,admin,Scotland,Edinburgh</g-custom:tags>
      <media:content medium="image" url="https://irp-cdn.multiscreensite.com/677b77a5/dms3rep/multi/TrendChart_130UFMsuSBaYfZy1Owe2-747x262.PNG">
        <media:description>thumbnail</media:description>
      </media:content>
    </item>
    <item>
      <title>SFDC Expiring Certificate Notification</title>
      <link>https://www.mikearthur.net/sfdc-expiring-certificate-notification</link>
      <description>What to do if you receive emails about expiring certificates</description>
      <content:encoded>&lt;h3&gt;&#xD;
  
                  
  What to do if you receive emails about expiring certificates

                &#xD;
&lt;/h3&gt;&#xD;
&lt;div data-rss-type="text"&gt;&#xD;
  &lt;p&gt;&#xD;
  &lt;/p&gt;&#xD;
  &lt;div&gt;&#xD;
    
                    
    There are a lot of questions on the communities about what to do when you are notified about expiring certificates.
  
                  &#xD;
  &lt;/div&gt;&#xD;
  &lt;div&gt;&#xD;
    &lt;br/&gt;&#xD;
  &lt;/div&gt;&#xD;
  &lt;div&gt;&#xD;
    
                    
    Fortunately, Fabrice Cathala has put together a very helpful explanation 
    
                    &#xD;
    &lt;a href="https://saas-components.com/sfdc-expiring-certificate/" target="_blank"&gt;&#xD;
      
                      
      here
    
                    &#xD;
    &lt;/a&gt;&#xD;
    &lt;br/&gt;&#xD;
  &lt;/div&gt;&#xD;
  &lt;p&gt;&#xD;
  &lt;/p&gt;&#xD;
&lt;/div&gt;</content:encoded>
      <pubDate>Tue, 06 Nov 2018 15:16:20 GMT</pubDate>
      <author>mike@mikearthur.net (Mike Arthur)</author>
      <guid>https://www.mikearthur.net/sfdc-expiring-certificate-notification</guid>
      <g-custom:tags type="string">salesforce,certificate,developer,administrator,admin,consultant,scotland,edinburgh</g-custom:tags>
    </item>
    <item>
      <title>Deserialising json in Salesforce</title>
      <link>https://www.mikearthur.net/deserialising-json-in-salesforce</link>
      <description>Process json strings when working with integrations</description>
      <content:encoded>&lt;h3&gt;&#xD;
  
                  
                  
  Process json strings when working with integrations

                
                &#xD;
&lt;/h3&gt;&#xD;
&lt;div&gt;&#xD;
  &lt;a&gt;&#xD;
    &lt;img src="https://irp-cdn.multiscreensite.com/677b77a5/dms3rep/multi/json-string.PNG" alt="" title=""/&gt;&#xD;
  &lt;/a&gt;&#xD;
&lt;/div&gt;&#xD;
&lt;div data-rss-type="text"&gt;&#xD;
  &lt;p&gt;&#xD;
  &lt;/p&gt;&#xD;
  &lt;div&gt;&#xD;
    
                    
                    
    You can learn about methods for processing json on Trailhead, such as in the 
    
                    
                    &#xD;
    &lt;a href="https://trailhead.salesforce.com/modules/apex_integration_services" target="_blank"&gt;&#xD;
      
                      
                      
      Apex Integration Services
    
                    
                    &#xD;
    &lt;/a&gt;&#xD;
    
                    
                    
     unit.
  
                  
                  &#xD;
  &lt;/div&gt;&#xD;
  &lt;div&gt;&#xD;
    &lt;br/&gt;&#xD;
  &lt;/div&gt;&#xD;
  &lt;div&gt;&#xD;
    
                    
                    
    If you need some more insight into processing json, here are a couple of great resources that I turned to whilst completing the 
    
                    
                    &#xD;
    &lt;a href="https://trailhead.salesforce.com/en/superbadges/superbadge_apex" target="_blank"&gt;&#xD;
      
                      
                      
      Apex Specialist Superbadge
    
                    
                    &#xD;
    &lt;/a&gt;&#xD;
    
                    
                    
    :
  
                  
                  &#xD;
  &lt;/div&gt;&#xD;
  &lt;div&gt;&#xD;
    &lt;br/&gt;&#xD;
  &lt;/div&gt;&#xD;
  &lt;div&gt;&#xD;
    
                    
                    
    - 
    
                    
                    &#xD;
    &lt;a href="http://blog.deadlypenguin.com/blog/2015/11/30/json-deserialization-in-salesforce/" target="_blank"&gt;&#xD;
      
                      
                      
      DeadlyPenguin
    
                    
                    &#xD;
    &lt;/a&gt;&#xD;
    
                    
                    
     - Thanks Patrick!
  
                  
                  &#xD;
  &lt;/div&gt;&#xD;
  &lt;div&gt;&#xD;
    
                    
                    
    - 
    
                    
                    &#xD;
    &lt;a href="https://opfocus.com/json-deserialization-techniques-in-salesforce/" target="_blank"&gt;&#xD;
      
                      
                      
      OpFocus
    
                    
                    &#xD;
    &lt;/a&gt;&#xD;
    
                    
                    
     - Thanks Brenda!
  
                  
                  &#xD;
  &lt;/div&gt;&#xD;
  &lt;div&gt;&#xD;
    &lt;br/&gt;&#xD;
  &lt;/div&gt;&#xD;
  &lt;div&gt;&#xD;
    
                    
                    
    The lightbulb moment for me was spotting that I needed to deserialise into a list, not a record!
    
                    
                    &#xD;
    &lt;br/&gt;&#xD;
  &lt;/div&gt;&#xD;
  &lt;p&gt;&#xD;
  &lt;/p&gt;&#xD;
&lt;/div&gt;</content:encoded>
      <enclosure url="https://irp-cdn.multiscreensite.com/677b77a5/dms3rep/multi/json-string.PNG" length="3186" type="image/png" />
      <pubDate>Wed, 22 Aug 2018 20:43:14 GMT</pubDate>
      <guid>https://www.mikearthur.net/deserialising-json-in-salesforce</guid>
      <g-custom:tags type="string" />
      <media:content medium="image" url="https://irp-cdn.multiscreensite.com/677b77a5/dms3rep/multi/json-string.PNG">
        <media:description>thumbnail</media:description>
      </media:content>
    </item>
    <item>
      <title>How to copy appointments between accounts in Outlook</title>
      <link>https://www.mikearthur.net/how-to-copy-appointments-between-accounts-in-outlook</link>
      <description>If you're switching email accounts you can copy appointments from one calendar to the other</description>
      <content:encoded>&lt;h3&gt;&#xD;
  
                  
                  
  If you're switching email accounts you can copy appointments from one calendar to the other

                
                &#xD;
&lt;/h3&gt;&#xD;
&lt;div&gt;&#xD;
  &lt;a&gt;&#xD;
    &lt;img src="https://irp-cdn.multiscreensite.com/677b77a5/dms3rep/multi/outlook-list-view.PNG" alt="" title=""/&gt;&#xD;
  &lt;/a&gt;&#xD;
&lt;/div&gt;&#xD;
&lt;div data-rss-type="text"&gt;&#xD;
  &lt;p&gt;&#xD;
    
                    
                    Choose the list view for the calendar.  Then you can select all the appointments that you want, copy (ctrl-c), switch to the other calendar, also in list view, and paste (ctrl-v).  Done!
  
                    
                    &#xD;
    &lt;br/&gt;&#xD;
  &lt;/p&gt;&#xD;
&lt;/div&gt;</content:encoded>
      <enclosure url="https://irp-cdn.multiscreensite.com/677b77a5/dms3rep/multi/outlook-list-view.PNG" length="22133" type="image/png" />
      <pubDate>Wed, 22 Aug 2018 20:06:52 GMT</pubDate>
      <author>mike@mikearthur.net (Mike Arthur)</author>
      <guid>https://www.mikearthur.net/how-to-copy-appointments-between-accounts-in-outlook</guid>
      <g-custom:tags type="string">microsoft,outlook,calendar,copy,appointments</g-custom:tags>
      <media:content medium="image" url="https://irp-cdn.multiscreensite.com/677b77a5/dms3rep/multi/outlook-list-view.PNG">
        <media:description>thumbnail</media:description>
      </media:content>
    </item>
    <item>
      <title>Outlook 2016 Search - Which Folder is that email in?</title>
      <link>https://www.mikearthur.net/outlook-2016-search-which-folder-is-that-email-in</link>
      <description>When you search in Outlook 2016, how do you see in which folder you filed an email in the results?</description>
      <content:encoded>&lt;h3&gt;&#xD;
  
                  
                  
  When you search in Outlook 2016, how do you see in which folder you filed an email in the results?

                
                &#xD;
&lt;/h3&gt;&#xD;
&lt;div&gt;&#xD;
  &lt;a&gt;&#xD;
    &lt;img src="https://irp-cdn.multiscreensite.com/677b77a5/dms3rep/multi/show-folder-in-outlook-2016-search.PNG" alt="" title=""/&gt;&#xD;
  &lt;/a&gt;&#xD;
&lt;/div&gt;&#xD;
&lt;div data-rss-type="text"&gt;&#xD;
  &lt;p&gt;&#xD;
    
                    
                    It's so simple when you know how - just hover your mouse on the result!
  
                    
                    &#xD;
    &lt;br/&gt;&#xD;
  &lt;/p&gt;&#xD;
&lt;/div&gt;</content:encoded>
      <enclosure url="https://irp-cdn.multiscreensite.com/677b77a5/dms3rep/multi/show-folder-in-outlook-2016-search.PNG" length="9028" type="image/png" />
      <pubDate>Wed, 22 Aug 2018 19:23:05 GMT</pubDate>
      <author>mike@mikearthur.net (Mike Arthur)</author>
      <guid>https://www.mikearthur.net/outlook-2016-search-which-folder-is-that-email-in</guid>
      <g-custom:tags type="string">microsoft,outlook,2016,search,folder</g-custom:tags>
      <media:content medium="image" url="https://irp-cdn.multiscreensite.com/677b77a5/dms3rep/multi/show-folder-in-outlook-2016-search.PNG">
        <media:description>thumbnail</media:description>
      </media:content>
    </item>
    <item>
      <title>Error: You cannot deploy to a required field</title>
      <link>https://www.mikearthur.net/error-you-cannot-deploy-to-a-required-field</link>
      <description>A change set or ant deployment will fail if a field that is required in the field definition is included in a profile or permission set that is being deployed</description>
      <content:encoded>&lt;h3&gt;&#xD;
  
                  
                  
  Avoid required fields in profiles and permission sets

                
                &#xD;
&lt;/h3&gt;&#xD;
&lt;div&gt;&#xD;
  &lt;a&gt;&#xD;
    &lt;img src="https://irp-cdn.multiscreensite.com/677b77a5/dms3rep/multi/CannotDeploy.PNG" alt="" title=""/&gt;&#xD;
  &lt;/a&gt;&#xD;
&lt;/div&gt;&#xD;
&lt;div data-rss-type="text"&gt;&#xD;
  &lt;p&gt;&#xD;
    
                    
                    Since API version 30.0 a change set or ant deployment will fail if a field that is required in the field definition is included in a profile or permission set that is being deployed.
  
                    
                    &#xD;
    &lt;br/&gt;&#xD;
    &lt;br/&gt;&#xD;
    &lt;!--StartFragment--&gt;                                              If you create a new custom field and check 
'Required', Field Level Security automatically becomes 'Visible' for all
 profiles.  Similarly, if you edit the definition of a custom field 
which is not visible to all profiles and check 'Required' then it 
automatically becomes visible to all profiles.  Therefore there is no 
need to reference it in a permission set.  Try it!

  
                    
                    &#xD;
    &lt;!--EndFragment--&gt;    &lt;br/&gt;&#xD;
  &lt;/p&gt;&#xD;
&lt;/div&gt;</content:encoded>
      <enclosure url="https://irp-cdn.multiscreensite.com/677b77a5/dms3rep/multi/CannotDeploy.PNG" length="2556" type="image/png" />
      <pubDate>Thu, 10 May 2018 16:25:22 GMT</pubDate>
      <author>mike@mikearthur.net (Mike Arthur)</author>
      <guid>https://www.mikearthur.net/error-you-cannot-deploy-to-a-required-field</guid>
      <g-custom:tags type="string">deploy,profile,permission,required,ant,change,salesforce,scotland,edinburgh,admin,administrator,developer</g-custom:tags>
      <media:content medium="image" url="https://irp-cdn.multiscreensite.com/677b77a5/dms3rep/multi/CannotDeploy.PNG">
        <media:description>thumbnail</media:description>
      </media:content>
    </item>
    <item>
      <title>How to count the number of child records under a parent using Apex</title>
      <link>https://www.mikearthur.net/how-to-count-the-number-of-child-records-under-a-parent-using-apex</link>
      <description>Use a Set and an Aggregate query to count the number of child records under a parent using Apex in Salesforce</description>
      <content:encoded>&lt;h3&gt;&#xD;
  
                  
                  
  No need for any counter, use a Set and an Aggregate query

                
                &#xD;
&lt;/h3&gt;&#xD;
&lt;div&gt;&#xD;
  &lt;a&gt;&#xD;
    &lt;img src="https://irp-cdn.multiscreensite.com/677b77a5/dms3rep/multi/170816-1.PNG" alt="" title=""/&gt;&#xD;
  &lt;/a&gt;&#xD;
&lt;/div&gt;&#xD;
&lt;div data-rss-type="text"&gt;&#xD;
  &lt;p&gt;&#xD;
    
                    
                    No content of my own here, just a pointer to someone who really knows what he's talking about, Peter_sfdc, the mighty Peter Chittum, check out his reply here:
  
                    
                    &#xD;
    &lt;br/&gt;&#xD;
    &lt;a href="https://developer.salesforce.com/forums/?id=906F0000000AcdaIAC"&gt;&#xD;
      
                      
                      
    https://developer.salesforce.com/forums/?id=906F0000000AcdaIAC
  
                    
                    &#xD;
    &lt;/a&gt;&#xD;
    &lt;br/&gt;&#xD;
    &lt;br/&gt;&#xD;
    
                    
                    
  (Of course, if you don't have a good reason to use Apex, you can always go with Flow, as explained by the equally mighty Mike Gill:
  
                    
                    &#xD;
    &lt;br/&gt;&#xD;
    &lt;a href="http://www.salesforceweek.ly/2015/02/how-to-create-roll-up-summaries-using-flow.html"&gt;&#xD;
      
                      
                      
    http://www.salesforceweek.ly/2015/02/how-to-create-roll-up-summaries-using-flow.html
  
                    
                    &#xD;
    &lt;/a&gt;&#xD;
    &lt;br/&gt;&#xD;
    &lt;a href="http://www.salesforceweek.ly/2015/02/how-to-create-roll-up-summaries-using-flow-part-2.html"&gt;&#xD;
      
                      
                      
    http://www.salesforceweek.ly/2015/02/how-to-create-roll-up-summaries-using-flow-part-2.html
  
                    
                    &#xD;
    &lt;/a&gt;&#xD;
    
                    
                    
  )
  
                    
                    &#xD;
    &lt;br/&gt;&#xD;
  &lt;/p&gt;&#xD;
&lt;/div&gt;</content:encoded>
      <enclosure url="https://irp-cdn.multiscreensite.com/677b77a5/dms3rep/multi/170816-1.PNG" length="32113" type="image/png" />
      <pubDate>Wed, 16 Aug 2017 19:43:17 GMT</pubDate>
      <author>mike@mikearthur.net (Mike Arthur)</author>
      <guid>https://www.mikearthur.net/how-to-count-the-number-of-child-records-under-a-parent-using-apex</guid>
      <g-custom:tags type="string">Salesforce,Developer,Development,Apex,child,aggregate,count,soql,query,admin,consultant,edinburgh,scotland</g-custom:tags>
      <media:content medium="image" url="https://irp-cdn.multiscreensite.com/677b77a5/dms3rep/multi/170816-1.PNG">
        <media:description>thumbnail</media:description>
      </media:content>
    </item>
    <item>
      <title>Displaying summarised values in Visualforce table</title>
      <link>https://www.mikearthur.net/displaying-summarised-values-in-visualforce-table</link>
      <description>How to display summary information in a Visualforce table using an inner class and SOQL aggregate function.</description>
      <content:encoded>&lt;h3&gt;&#xD;
  
                  
  Use an inner class with aggregate SOQL function

                &#xD;
&lt;/h3&gt;&#xD;
&lt;div data-rss-type="text"&gt;&#xD;
  &lt;p&gt;&#xD;
    
                    Thanks to Keith Clarke for the code posted here:
  
                    &#xD;
    &lt;br/&gt;&#xD;
    &lt;a href="https://salesforce.stackexchange.com/questions/84256/counting-query-results-and-displaying-them-in-visualforce"&gt;&#xD;
      
                      
    https://salesforce.stackexchange.com/questions/84256/counting-query-results-and-displaying-them-in-v...
  
                    &#xD;
    &lt;/a&gt;&#xD;
    &lt;br/&gt;&#xD;
    &lt;br/&gt;&#xD;
    
                    
  I used that and adapted it and it worked a treat :-)
  
                    &#xD;
    &lt;br/&gt;&#xD;
  &lt;/p&gt;&#xD;
&lt;/div&gt;</content:encoded>
      <enclosure url="https://irp-cdn.multiscreensite.com/677b77a5/dms3rep/multi/1708143.JPG" length="8970" type="image/jpeg" />
      <pubDate>Mon, 14 Aug 2017 16:36:26 GMT</pubDate>
      <author>mike@mikearthur.net (Mike Arthur)</author>
      <guid>https://www.mikearthur.net/displaying-summarised-values-in-visualforce-table</guid>
      <g-custom:tags type="string">salesforce,developer,aggregate,visualforce,summary,table,soql,count,admin,consultant,edinburgh,scotland</g-custom:tags>
      <media:content medium="image" url="https://irp-cdn.multiscreensite.com/677b77a5/dms3rep/multi/1708143.JPG">
        <media:description>thumbnail</media:description>
      </media:content>
    </item>
    <item>
      <title>Serious Error in Cloud Flow Designer</title>
      <link>https://www.mikearthur.net/serious-error-in-cloud-flow-designer</link>
      <description>Salesforce Flow Error - We're Sorry but a serious error occurred. Please don't close the Cloud Flow designer window. Contact Salesforce Customer support as soon as possible.</description>
      <content:encoded>&lt;h3&gt;&#xD;
  
                  
                  
  What to do if you get "We're Sorry but a serious error occurred. Please don't close the cloud 
flow designer window.  Contact Salesforce Customer support as soon as 
possible." when trying to save a Flow.

                
                &#xD;
&lt;/h3&gt;&#xD;
&lt;div&gt;&#xD;
  &lt;a&gt;&#xD;
    &lt;img src="https://irp-cdn.multiscreensite.com/677b77a5/dms3rep/multi/Flow+Error+1.PNG" alt="" title=""/&gt;&#xD;
  &lt;/a&gt;&#xD;
&lt;/div&gt;&#xD;
&lt;div data-rss-type="text"&gt;&#xD;
  &lt;p&gt;&#xD;
    
                    
                    If you see this error when trying to save a Flow, there doesn't appear to be any further information available.  But there is!
  
                    
                    &#xD;
    &lt;br/&gt;&#xD;
    &lt;br/&gt;&#xD;
    
                    
                    
  Click 'OK' and, in Windows, press ctrl-shift-M, or Mac command-shift-m.  You will then see diagnostic information.  Click each box until you see something useful.
  
                    
                    &#xD;
    &lt;br/&gt;&#xD;
    &lt;br/&gt;&#xD;
    
                    
                    
  In my case, the Flow had been deployed from another org but the field level security on one of the referenced fields did not allow access. 
  
                    
                    &#xD;
    &lt;br/&gt;&#xD;
  &lt;/p&gt;&#xD;
&lt;/div&gt;&#xD;
&lt;div&gt;&#xD;
  &lt;a&gt;&#xD;
    &lt;img src="https://irp-cdn.multiscreensite.com/677b77a5/dms3rep/multi/Flow+Error+Details+1.PNG" alt="" title=""/&gt;&#xD;
  &lt;/a&gt;&#xD;
&lt;/div&gt;</content:encoded>
      <enclosure url="https://irp-cdn.multiscreensite.com/677b77a5/dms3rep/multi/Flow+Error+1.PNG" length="18324" type="image/png" />
      <pubDate>Tue, 20 Jun 2017 19:51:42 GMT</pubDate>
      <author>mike@mikearthur.net (Mike Arthur)</author>
      <guid>https://www.mikearthur.net/serious-error-in-cloud-flow-designer</guid>
      <g-custom:tags type="string">Salesforce,Flow,Error,Cloud,Designer,Developer,Dev,Admin,Administrator,Consultant,Freelance,Contractor,Scotland,Edinburgh</g-custom:tags>
      <media:content medium="image" url="https://irp-cdn.multiscreensite.com/677b77a5/dms3rep/multi/Flow+Error+1.PNG">
        <media:description>thumbnail</media:description>
      </media:content>
    </item>
    <item>
      <title>The flow failed to access the value for myVariable_current.Custom_Type__c because it hasn't been set or assigned</title>
      <link>https://www.mikearthur.net/the-flow-failed-to-access-the-value-for-myvariable_current-custom_type__c-because-it-hasn-t-been-set-or-assigned</link>
      <description>Be sure that the API name of fields in formulae are written with the correct case or you will encounter 'The flow failed to access the value for myVariable_current.Custom_Type__c because it hasn't been set or assigned'</description>
      <content:encoded>&lt;h3&gt;&#xD;
  
                  
  Be sure that the API name of fields in formulae are written with the correct case!

                &#xD;
&lt;/h3&gt;&#xD;
&lt;div data-rss-type="text"&gt;&#xD;
  &lt;p&gt;&#xD;
    &lt;!--StartFragment--&gt;    &lt;span&gt;&#xD;
      
                      
    I was building a Process 
Builder so that if a field on one object is updated, the corresponding 
field on another object is updated with the same value.  Another PB 
operates in the opposite direction to keep these fields in sync.
    
                      &#xD;
      &lt;br/&gt;&#xD;
      &lt;br/&gt;&#xD;
      
                      
    The (pre-existing) fields were Object1__c.Custom_Type__c and Object2__c.Custom_type__c.
    
                      &#xD;
      &lt;br/&gt;&#xD;
      &lt;br/&gt;&#xD;
      
                      
    The
 PB to update Object1 when Object2 is changed kept failing with 'The 
flow failed to access the value for myVariable_current.Custom_Type__c'.
    
                      &#xD;
      &lt;br/&gt;&#xD;
      &lt;br/&gt;&#xD;
      
                      
    I
 tried many ways of ensuring that Custom_Type__c was not blank before 
checking ISCHANGED(Custom_Type__c), which is one of the most common 
causes of this error.
    
                      &#xD;
      &lt;br/&gt;&#xD;
      &lt;br/&gt;&#xD;
      
                      
    However, I then noticed that the error was 
reporting on field Custom_Type__c, whilst the actual field API name is 
Custom_type__c.  I amended my formula in PB to Custom_type__c and all is
 good.
    
                      &#xD;
      &lt;br/&gt;&#xD;
      &lt;br/&gt;&#xD;
      
                      
    So PB will let you create a formula using a valid API name but with incorrect case, but will then fail at runtime.  Nice!
  
                    &#xD;
    &lt;/span&gt;&#xD;
    &lt;!--EndFragment--&gt;  &lt;/p&gt;&#xD;
&lt;/div&gt;</content:encoded>
      <pubDate>Thu, 15 Jun 2017 13:35:00 GMT</pubDate>
      <author>mike@mikearthur.net (Mike Arthur)</author>
      <guid>https://www.mikearthur.net/the-flow-failed-to-access-the-value-for-myvariable_current-custom_type__c-because-it-hasn-t-been-set-or-assigned</guid>
      <g-custom:tags type="string">salesforce,flow,process,builder,error,consultant,edinburgh,scotland,administrator,admin,dev,developer</g-custom:tags>
    </item>
    <item>
      <title>'Dashboard Settings' Button Missing</title>
      <link>https://www.mikearthur.net/dashboard-settings-button-missing</link>
      <description>Why can't I find 'Dashboard Settings' Button?</description>
      <content:encoded>&lt;h3&gt;&#xD;
  
                  
  Why can't I see the 'Dashboard Settings' button?

                &#xD;
&lt;/h3&gt;&#xD;
&lt;div data-rss-type="text"&gt;&#xD;
  &lt;p&gt;&#xD;
    &lt;!--[if gte mso 9]&gt;&lt;xml&gt;
 &lt;o:OfficeDocumentSettings&gt;
  &lt;o:AllowPNG&gt;&lt;/o:AllowPNG&gt;
 &lt;/o:OfficeDocumentSettings&gt;
&lt;/xml&gt;&lt;![endif]--&gt;    &lt;!--[if gte mso 9]&gt;&lt;xml&gt;
 &lt;w:WordDocument&gt;
  &lt;w:View&gt;Normal&lt;/w:View&gt;
  &lt;w:Zoom&gt;0&lt;/w:Zoom&gt;
  &lt;w:TrackMoves&gt;&lt;/w:TrackMoves&gt;
  &lt;w:TrackFormatting&gt;&lt;/w:TrackFormatting&gt;
  &lt;w:PunctuationKerning&gt;&lt;/w:PunctuationKerning&gt;
  &lt;w:ValidateAgainstSchemas&gt;&lt;/w:ValidateAgainstSchemas&gt;
  &lt;w:SaveIfXMLInvalid&gt;false&lt;/w:SaveIfXMLInvalid&gt;
  &lt;w:IgnoreMixedContent&gt;false&lt;/w:IgnoreMixedContent&gt;
  &lt;w:AlwaysShowPlaceholderText&gt;false&lt;/w:AlwaysShowPlaceholderText&gt;
  &lt;w:DoNotPromoteQF&gt;&lt;/w:DoNotPromoteQF&gt;
  &lt;w:LidThemeOther&gt;EN-GB&lt;/w:LidThemeOther&gt;
  &lt;w:LidThemeAsian&gt;X-NONE&lt;/w:LidThemeAsian&gt;
  &lt;w:LidThemeComplexScript&gt;X-NONE&lt;/w:LidThemeComplexScript&gt;
  &lt;w:Compatibility&gt;
   &lt;w:BreakWrappedTables&gt;&lt;/w:BreakWrappedTables&gt;
   &lt;w:SnapToGridInCell&gt;&lt;/w:SnapToGridInCell&gt;
   &lt;w:WrapTextWithPunct&gt;&lt;/w:WrapTextWithPunct&gt;
   &lt;w:UseAsianBreakRules&gt;&lt;/w:UseAsianBreakRules&gt;
   &lt;w:DontGrowAutofit&gt;&lt;/w:DontGrowAutofit&gt;
   &lt;w:SplitPgBreakAndParaMark&gt;&lt;/w:SplitPgBreakAndParaMark&gt;
   &lt;w:EnableOpenTypeKerning&gt;&lt;/w:EnableOpenTypeKerning&gt;
   &lt;w:DontFlipMirrorIndents&gt;&lt;/w:DontFlipMirrorIndents&gt;
   &lt;w:OverrideTableStyleHps&gt;&lt;/w:OverrideTableStyleHps&gt;
  &lt;/w:Compatibility&gt;
  &lt;m:mathPr&gt;
   &lt;m:mathFont m:val="Cambria Math"&gt;&lt;/m:mathFont&gt;
   &lt;m:brkBin m:val="before"&gt;&lt;/m:brkBin&gt;
   &lt;m:brkBinSub m:val="&amp;#45;-"&gt;&lt;/m:brkBinSub&gt;
   &lt;m:smallFrac m:val="off"&gt;&lt;/m:smallFrac&gt;
   &lt;m:dispDef&gt;&lt;/m:dispDef&gt;
   &lt;m:lMargin m:val="0"&gt;&lt;/m:lMargin&gt;
   &lt;m:rMargin m:val="0"&gt;&lt;/m:rMargin&gt;
   &lt;m:defJc m:val="centerGroup"&gt;&lt;/m:defJc&gt;
   &lt;m:wrapIndent m:val="1440"&gt;&lt;/m:wrapIndent&gt;
   &lt;m:intLim m:val="subSup"&gt;&lt;/m:intLim&gt;
   &lt;m:naryLim m:val="undOvr"&gt;&lt;/m:naryLim&gt;
  &lt;/m:mathPr&gt;&lt;/w:WordDocument&gt;
&lt;/xml&gt;&lt;![endif]--&gt;    &lt;!--[if gte mso 9]&gt;&lt;xml&gt;
 &lt;w:LatentStyles DefLockedState="false" DefUnhideWhenUsed="true"
  DefSemiHidden="true" DefQFormat="false" DefPriority="99"
  LatentStyleCount="267"&gt;
  &lt;w:LsdException Locked="false" Priority="0" SemiHidden="false"
   UnhideWhenUsed="false" QFormat="true" Name="Normal"&gt;&lt;/w:LsdException&gt;
  &lt;w:LsdException Locked="false" Priority="9" SemiHidden="false"
   UnhideWhenUsed="false" QFormat="true" Name="heading 1"&gt;&lt;/w:LsdException&gt;
  &lt;w:LsdException Locked="false" Priority="9" QFormat="true" Name="heading 2"&gt;&lt;/w:LsdException&gt;
  &lt;w:LsdException Locked="false" Priority="9" QFormat="true" Name="heading 3"&gt;&lt;/w:LsdException&gt;
  &lt;w:LsdException Locked="false" Priority="9" QFormat="true" Name="heading 4"&gt;&lt;/w:LsdException&gt;
  &lt;w:LsdException Locked="false" Priority="9" QFormat="true" Name="heading 5"&gt;&lt;/w:LsdException&gt;
  &lt;w:LsdException Locked="false" Priority="9" QFormat="true" Name="heading 6"&gt;&lt;/w:LsdException&gt;
  &lt;w:LsdException Locked="false" Priority="9" QFormat="true" Name="heading 7"&gt;&lt;/w:LsdException&gt;
  &lt;w:LsdException Locked="false" Priority="9" QFormat="true" Name="heading 8"&gt;&lt;/w:LsdException&gt;
  &lt;w:LsdException Locked="false" Priority="9" QFormat="true" Name="heading 9"&gt;&lt;/w:LsdException&gt;
  &lt;w:LsdException Locked="false" Priority="39" Name="toc 1"&gt;&lt;/w:LsdException&gt;
  &lt;w:LsdException Locked="false" Priority="39" Name="toc 2"&gt;&lt;/w:LsdException&gt;
  &lt;w:LsdException Locked="false" Priority="39" Name="toc 3"&gt;&lt;/w:LsdException&gt;
  &lt;w:LsdException Locked="false" Priority="39" Name="toc 4"&gt;&lt;/w:LsdException&gt;
  &lt;w:LsdException Locked="false" Priority="39" Name="toc 5"&gt;&lt;/w:LsdException&gt;
  &lt;w:LsdException Locked="false" Priority="39" Name="toc 6"&gt;&lt;/w:LsdException&gt;
  &lt;w:LsdException Locked="false" Priority="39" Name="toc 7"&gt;&lt;/w:LsdException&gt;
  &lt;w:LsdException Locked="false" Priority="39" Name="toc 8"&gt;&lt;/w:LsdException&gt;
  &lt;w:LsdException Locked="false" Priority="39" Name="toc 9"&gt;&lt;/w:LsdException&gt;
  &lt;w:LsdException Locked="false" Priority="35" QFormat="true" Name="caption"&gt;&lt;/w:LsdException&gt;
  &lt;w:LsdException Locked="false" Priority="10" SemiHidden="false"
   UnhideWhenUsed="false" QFormat="true" Name="Title"&gt;&lt;/w:LsdException&gt;
  &lt;w:LsdException Locked="false" Priority="1" Name="Default Paragraph Font"&gt;&lt;/w:LsdException&gt;
  &lt;w:LsdException Locked="false" Priority="11" SemiHidden="false"
   UnhideWhenUsed="false" QFormat="true" Name="Subtitle"&gt;&lt;/w:LsdException&gt;
  &lt;w:LsdException Locked="false" Priority="22" SemiHidden="false"
   UnhideWhenUsed="false" QFormat="true" Name="Strong"&gt;&lt;/w:LsdException&gt;
  &lt;w:LsdException Locked="false" Priority="20" SemiHidden="false"
   UnhideWhenUsed="false" QFormat="true" Name="Emphasis"&gt;&lt;/w:LsdException&gt;
  &lt;w:LsdException Locked="false" Priority="59" SemiHidden="false"
   UnhideWhenUsed="false" Name="Table Grid"&gt;&lt;/w:LsdException&gt;
  &lt;w:LsdException Locked="false" UnhideWhenUsed="false" Name="Placeholder Text"&gt;&lt;/w:LsdException&gt;
  &lt;w:LsdException Locked="false" Priority="1" SemiHidden="false"
   UnhideWhenUsed="false" QFormat="true" Name="No Spacing"&gt;&lt;/w:LsdException&gt;
  &lt;w:LsdException Locked="false" Priority="60" SemiHidden="false"
   UnhideWhenUsed="false" Name="Light Shading"&gt;&lt;/w:LsdException&gt;
  &lt;w:LsdException Locked="false" Priority="61" SemiHidden="false"
   UnhideWhenUsed="false" Name="Light List"&gt;&lt;/w:LsdException&gt;
  &lt;w:LsdException Locked="false" Priority="62" SemiHidden="false"
   UnhideWhenUsed="false" Name="Light Grid"&gt;&lt;/w:LsdException&gt;
  &lt;w:LsdException Locked="false" Priority="63" SemiHidden="false"
   UnhideWhenUsed="false" Name="Medium Shading 1"&gt;&lt;/w:LsdException&gt;
  &lt;w:LsdException Locked="false" Priority="64" SemiHidden="false"
   UnhideWhenUsed="false" Name="Medium Shading 2"&gt;&lt;/w:LsdException&gt;
  &lt;w:LsdException Locked="false" Priority="65" SemiHidden="false"
   UnhideWhenUsed="false" Name="Medium List 1"&gt;&lt;/w:LsdException&gt;
  &lt;w:LsdException Locked="false" Priority="66" SemiHidden="false"
   UnhideWhenUsed="false" Name="Medium List 2"&gt;&lt;/w:LsdException&gt;
  &lt;w:LsdException Locked="false" Priority="67" SemiHidden="false"
   UnhideWhenUsed="false" Name="Medium Grid 1"&gt;&lt;/w:LsdException&gt;
  &lt;w:LsdException Locked="false" Priority="68" SemiHidden="false"
   UnhideWhenUsed="false" Name="Medium Grid 2"&gt;&lt;/w:LsdException&gt;
  &lt;w:LsdException Locked="false" Priority="69" SemiHidden="false"
   UnhideWhenUsed="false" Name="Medium Grid 3"&gt;&lt;/w:LsdException&gt;
  &lt;w:LsdException Locked="false" Priority="70" SemiHidden="false"
   UnhideWhenUsed="false" Name="Dark List"&gt;&lt;/w:LsdException&gt;
  &lt;w:LsdException Locked="false" Priority="71" SemiHidden="false"
   UnhideWhenUsed="false" Name="Colorful Shading"&gt;&lt;/w:LsdException&gt;
  &lt;w:LsdException Locked="false" Priority="72" SemiHidden="false"
   UnhideWhenUsed="false" Name="Colorful List"&gt;&lt;/w:LsdException&gt;
  &lt;w:LsdException Locked="false" Priority="73" SemiHidden="false"
   UnhideWhenUsed="false" Name="Colorful Grid"&gt;&lt;/w:LsdException&gt;
  &lt;w:LsdException Locked="false" Priority="60" SemiHidden="false"
   UnhideWhenUsed="false" Name="Light Shading Accent 1"&gt;&lt;/w:LsdException&gt;
  &lt;w:LsdException Locked="false" Priority="61" SemiHidden="false"
   UnhideWhenUsed="false" Name="Light List Accent 1"&gt;&lt;/w:LsdException&gt;
  &lt;w:LsdException Locked="false" Priority="62" SemiHidden="false"
   UnhideWhenUsed="false" Name="Light Grid Accent 1"&gt;&lt;/w:LsdException&gt;
  &lt;w:LsdException Locked="false" Priority="63" SemiHidden="false"
   UnhideWhenUsed="false" Name="Medium Shading 1 Accent 1"&gt;&lt;/w:LsdException&gt;
  &lt;w:LsdException Locked="false" Priority="64" SemiHidden="false"
   UnhideWhenUsed="false" Name="Medium Shading 2 Accent 1"&gt;&lt;/w:LsdException&gt;
  &lt;w:LsdException Locked="false" Priority="65" SemiHidden="false"
   UnhideWhenUsed="false" Name="Medium List 1 Accent 1"&gt;&lt;/w:LsdException&gt;
  &lt;w:LsdException Locked="false" UnhideWhenUsed="false" Name="Revision"&gt;&lt;/w:LsdException&gt;
  &lt;w:LsdException Locked="false" Priority="34" SemiHidden="false"
   UnhideWhenUsed="false" QFormat="true" Name="List Paragraph"&gt;&lt;/w:LsdException&gt;
  &lt;w:LsdException Locked="false" Priority="29" SemiHidden="false"
   UnhideWhenUsed="false" QFormat="true" Name="Quote"&gt;&lt;/w:LsdException&gt;
  &lt;w:LsdException Locked="false" Priority="30" SemiHidden="false"
   UnhideWhenUsed="false" QFormat="true" Name="Intense Quote"&gt;&lt;/w:LsdException&gt;
  &lt;w:LsdException Locked="false" Priority="66" SemiHidden="false"
   UnhideWhenUsed="false" Name="Medium List 2 Accent 1"&gt;&lt;/w:LsdException&gt;
  &lt;w:LsdException Locked="false" Priority="67" SemiHidden="false"
   UnhideWhenUsed="false" Name="Medium Grid 1 Accent 1"&gt;&lt;/w:LsdException&gt;
  &lt;w:LsdException Locked="false" Priority="68" SemiHidden="false"
   UnhideWhenUsed="false" Name="Medium Grid 2 Accent 1"&gt;&lt;/w:LsdException&gt;
  &lt;w:LsdException Locked="false" Priority="69" SemiHidden="false"
   UnhideWhenUsed="false" Name="Medium Grid 3 Accent 1"&gt;&lt;/w:LsdException&gt;
  &lt;w:LsdException Locked="false" Priority="70" SemiHidden="false"
   UnhideWhenUsed="false" Name="Dark List Accent 1"&gt;&lt;/w:LsdException&gt;
  &lt;w:LsdException Locked="false" Priority="71" SemiHidden="false"
   UnhideWhenUsed="false" Name="Colorful Shading Accent 1"&gt;&lt;/w:LsdException&gt;
  &lt;w:LsdException Locked="false" Priority="72" SemiHidden="false"
   UnhideWhenUsed="false" Name="Colorful List Accent 1"&gt;&lt;/w:LsdException&gt;
  &lt;w:LsdException Locked="false" Priority="73" SemiHidden="false"
   UnhideWhenUsed="false" Name="Colorful Grid Accent 1"&gt;&lt;/w:LsdException&gt;
  &lt;w:LsdException Locked="false" Priority="60" SemiHidden="false"
   UnhideWhenUsed="false" Name="Light Shading Accent 2"&gt;&lt;/w:LsdException&gt;
  &lt;w:LsdException Locked="false" Priority="61" SemiHidden="false"
   UnhideWhenUsed="false" Name="Light List Accent 2"&gt;&lt;/w:LsdException&gt;
  &lt;w:LsdException Locked="false" Priority="62" SemiHidden="false"
   UnhideWhenUsed="false" Name="Light Grid Accent 2"&gt;&lt;/w:LsdException&gt;
  &lt;w:LsdException Locked="false" Priority="63" SemiHidden="false"
   UnhideWhenUsed="false" Name="Medium Shading 1 Accent 2"&gt;&lt;/w:LsdException&gt;
  &lt;w:LsdException Locked="false" Priority="64" SemiHidden="false"
   UnhideWhenUsed="false" Name="Medium Shading 2 Accent 2"&gt;&lt;/w:LsdException&gt;
  &lt;w:LsdException Locked="false" Priority="65" SemiHidden="false"
   UnhideWhenUsed="false" Name="Medium List 1 Accent 2"&gt;&lt;/w:LsdException&gt;
  &lt;w:LsdException Locked="false" Priority="66" SemiHidden="false"
   UnhideWhenUsed="false" Name="Medium List 2 Accent 2"&gt;&lt;/w:LsdException&gt;
  &lt;w:LsdException Locked="false" Priority="67" SemiHidden="false"
   UnhideWhenUsed="false" Name="Medium Grid 1 Accent 2"&gt;&lt;/w:LsdException&gt;
  &lt;w:LsdException Locked="false" Priority="68" SemiHidden="false"
   UnhideWhenUsed="false" Name="Medium Grid 2 Accent 2"&gt;&lt;/w:LsdException&gt;
  &lt;w:LsdException Locked="false" Priority="69" SemiHidden="false"
   UnhideWhenUsed="false" Name="Medium Grid 3 Accent 2"&gt;&lt;/w:LsdException&gt;
  &lt;w:LsdException Locked="false" Priority="70" SemiHidden="false"
   UnhideWhenUsed="false" Name="Dark List Accent 2"&gt;&lt;/w:LsdException&gt;
  &lt;w:LsdException Locked="false" Priority="71" SemiHidden="false"
   UnhideWhenUsed="false" Name="Colorful Shading Accent 2"&gt;&lt;/w:LsdException&gt;
  &lt;w:LsdException Locked="false" Priority="72" SemiHidden="false"
   UnhideWhenUsed="false" Name="Colorful List Accent 2"&gt;&lt;/w:LsdException&gt;
  &lt;w:LsdException Locked="false" Priority="73" SemiHidden="false"
   UnhideWhenUsed="false" Name="Colorful Grid Accent 2"&gt;&lt;/w:LsdException&gt;
  &lt;w:LsdException Locked="false" Priority="60" SemiHidden="false"
   UnhideWhenUsed="false" Name="Light Shading Accent 3"&gt;&lt;/w:LsdException&gt;
  &lt;w:LsdException Locked="false" Priority="61" SemiHidden="false"
   UnhideWhenUsed="false" Name="Light List Accent 3"&gt;&lt;/w:LsdException&gt;
  &lt;w:LsdException Locked="false" Priority="62" SemiHidden="false"
   UnhideWhenUsed="false" Name="Light Grid Accent 3"&gt;&lt;/w:LsdException&gt;
  &lt;w:LsdException Locked="false" Priority="63" SemiHidden="false"
   UnhideWhenUsed="false" Name="Medium Shading 1 Accent 3"&gt;&lt;/w:LsdException&gt;
  &lt;w:LsdException Locked="false" Priority="64" SemiHidden="false"
   UnhideWhenUsed="false" Name="Medium Shading 2 Accent 3"&gt;&lt;/w:LsdException&gt;
  &lt;w:LsdException Locked="false" Priority="65" SemiHidden="false"
   UnhideWhenUsed="false" Name="Medium List 1 Accent 3"&gt;&lt;/w:LsdException&gt;
  &lt;w:LsdException Locked="false" Priority="66" SemiHidden="false"
   UnhideWhenUsed="false" Name="Medium List 2 Accent 3"&gt;&lt;/w:LsdException&gt;
  &lt;w:LsdException Locked="false" Priority="67" SemiHidden="false"
   UnhideWhenUsed="false" Name="Medium Grid 1 Accent 3"&gt;&lt;/w:LsdException&gt;
  &lt;w:LsdException Locked="false" Priority="68" SemiHidden="false"
   UnhideWhenUsed="false" Name="Medium Grid 2 Accent 3"&gt;&lt;/w:LsdException&gt;
  &lt;w:LsdException Locked="false" Priority="69" SemiHidden="false"
   UnhideWhenUsed="false" Name="Medium Grid 3 Accent 3"&gt;&lt;/w:LsdException&gt;
  &lt;w:LsdException Locked="false" Priority="70" SemiHidden="false"
   UnhideWhenUsed="false" Name="Dark List Accent 3"&gt;&lt;/w:LsdException&gt;
  &lt;w:LsdException Locked="false" Priority="71" SemiHidden="false"
   UnhideWhenUsed="false" Name="Colorful Shading Accent 3"&gt;&lt;/w:LsdException&gt;
  &lt;w:LsdException Locked="false" Priority="72" SemiHidden="false"
   UnhideWhenUsed="false" Name="Colorful List Accent 3"&gt;&lt;/w:LsdException&gt;
  &lt;w:LsdException Locked="false" Priority="73" SemiHidden="false"
   UnhideWhenUsed="false" Name="Colorful Grid Accent 3"&gt;&lt;/w:LsdException&gt;
  &lt;w:LsdException Locked="false" Priority="60" SemiHidden="false"
   UnhideWhenUsed="false" Name="Light Shading Accent 4"&gt;&lt;/w:LsdException&gt;
  &lt;w:LsdException Locked="false" Priority="61" SemiHidden="false"
   UnhideWhenUsed="false" Name="Light List Accent 4"&gt;&lt;/w:LsdException&gt;
  &lt;w:LsdException Locked="false" Priority="62" SemiHidden="false"
   UnhideWhenUsed="false" Name="Light Grid Accent 4"&gt;&lt;/w:LsdException&gt;
  &lt;w:LsdException Locked="false" Priority="63" SemiHidden="false"
   UnhideWhenUsed="false" Name="Medium Shading 1 Accent 4"&gt;&lt;/w:LsdException&gt;
  &lt;w:LsdException Locked="false" Priority="64" SemiHidden="false"
   UnhideWhenUsed="false" Name="Medium Shading 2 Accent 4"&gt;&lt;/w:LsdException&gt;
  &lt;w:LsdException Locked="false" Priority="65" SemiHidden="false"
   UnhideWhenUsed="false" Name="Medium List 1 Accent 4"&gt;&lt;/w:LsdException&gt;
  &lt;w:LsdException Locked="false" Priority="66" SemiHidden="false"
   UnhideWhenUsed="false" Name="Medium List 2 Accent 4"&gt;&lt;/w:LsdException&gt;
  &lt;w:LsdException Locked="false" Priority="67" SemiHidden="false"
   UnhideWhenUsed="false" Name="Medium Grid 1 Accent 4"&gt;&lt;/w:LsdException&gt;
  &lt;w:LsdException Locked="false" Priority="68" SemiHidden="false"
   UnhideWhenUsed="false" Name="Medium Grid 2 Accent 4"&gt;&lt;/w:LsdException&gt;
  &lt;w:LsdException Locked="false" Priority="69" SemiHidden="false"
   UnhideWhenUsed="false" Name="Medium Grid 3 Accent 4"&gt;&lt;/w:LsdException&gt;
  &lt;w:LsdException Locked="false" Priority="70" SemiHidden="false"
   UnhideWhenUsed="false" Name="Dark List Accent 4"&gt;&lt;/w:LsdException&gt;
  &lt;w:LsdException Locked="false" Priority="71" SemiHidden="false"
   UnhideWhenUsed="false" Name="Colorful Shading Accent 4"&gt;&lt;/w:LsdException&gt;
  &lt;w:LsdException Locked="false" Priority="72" SemiHidden="false"
   UnhideWhenUsed="false" Name="Colorful List Accent 4"&gt;&lt;/w:LsdException&gt;
  &lt;w:LsdException Locked="false" Priority="73" SemiHidden="false"
   UnhideWhenUsed="false" Name="Colorful Grid Accent 4"&gt;&lt;/w:LsdException&gt;
  &lt;w:LsdException Locked="false" Priority="60" SemiHidden="false"
   UnhideWhenUsed="false" Name="Light Shading Accent 5"&gt;&lt;/w:LsdException&gt;
  &lt;w:LsdException Locked="false" Priority="61" SemiHidden="false"
   UnhideWhenUsed="false" Name="Light List Accent 5"&gt;&lt;/w:LsdException&gt;
  &lt;w:LsdException Locked="false" Priority="62" SemiHidden="false"
   UnhideWhenUsed="false" Name="Light Grid Accent 5"&gt;&lt;/w:LsdException&gt;
  &lt;w:LsdException Locked="false" Priority="63" SemiHidden="false"
   UnhideWhenUsed="false" Name="Medium Shading 1 Accent 5"&gt;&lt;/w:LsdException&gt;
  &lt;w:LsdException Locked="false" Priority="64" SemiHidden="false"
   UnhideWhenUsed="false" Name="Medium Shading 2 Accent 5"&gt;&lt;/w:LsdException&gt;
  &lt;w:LsdException Locked="false" Priority="65" SemiHidden="false"
   UnhideWhenUsed="false" Name="Medium List 1 Accent 5"&gt;&lt;/w:LsdException&gt;
  &lt;w:LsdException Locked="false" Priority="66" SemiHidden="false"
   UnhideWhenUsed="false" Name="Medium List 2 Accent 5"&gt;&lt;/w:LsdException&gt;
  &lt;w:LsdException Locked="false" Priority="67" SemiHidden="false"
   UnhideWhenUsed="false" Name="Medium Grid 1 Accent 5"&gt;&lt;/w:LsdException&gt;
  &lt;w:LsdException Locked="false" Priority="68" SemiHidden="false"
   UnhideWhenUsed="false" Name="Medium Grid 2 Accent 5"&gt;&lt;/w:LsdException&gt;
  &lt;w:LsdException Locked="false" Priority="69" SemiHidden="false"
   UnhideWhenUsed="false" Name="Medium Grid 3 Accent 5"&gt;&lt;/w:LsdException&gt;
  &lt;w:LsdException Locked="false" Priority="70" SemiHidden="false"
   UnhideWhenUsed="false" Name="Dark List Accent 5"&gt;&lt;/w:LsdException&gt;
  &lt;w:LsdException Locked="false" Priority="71" SemiHidden="false"
   UnhideWhenUsed="false" Name="Colorful Shading Accent 5"&gt;&lt;/w:LsdException&gt;
  &lt;w:LsdException Locked="false" Priority="72" SemiHidden="false"
   UnhideWhenUsed="false" Name="Colorful List Accent 5"&gt;&lt;/w:LsdException&gt;
  &lt;w:LsdException Locked="false" Priority="73" SemiHidden="false"
   UnhideWhenUsed="false" Name="Colorful Grid Accent 5"&gt;&lt;/w:LsdException&gt;
  &lt;w:LsdException Locked="false" Priority="60" SemiHidden="false"
   UnhideWhenUsed="false" Name="Light Shading Accent 6"&gt;&lt;/w:LsdException&gt;
  &lt;w:LsdException Locked="false" Priority="61" SemiHidden="false"
   UnhideWhenUsed="false" Name="Light List Accent 6"&gt;&lt;/w:LsdException&gt;
  &lt;w:LsdException Locked="false" Priority="62" SemiHidden="false"
   UnhideWhenUsed="false" Name="Light Grid Accent 6"&gt;&lt;/w:LsdException&gt;
  &lt;w:LsdException Locked="false" Priority="63" SemiHidden="false"
   UnhideWhenUsed="false" Name="Medium Shading 1 Accent 6"&gt;&lt;/w:LsdException&gt;
  &lt;w:LsdException Locked="false" Priority="64" SemiHidden="false"
   UnhideWhenUsed="false" Name="Medium Shading 2 Accent 6"&gt;&lt;/w:LsdException&gt;
  &lt;w:LsdException Locked="false" Priority="65" SemiHidden="false"
   UnhideWhenUsed="false" Name="Medium List 1 Accent 6"&gt;&lt;/w:LsdException&gt;
  &lt;w:LsdException Locked="false" Priority="66" SemiHidden="false"
   UnhideWhenUsed="false" Name="Medium List 2 Accent 6"&gt;&lt;/w:LsdException&gt;
  &lt;w:LsdException Locked="false" Priority="67" SemiHidden="false"
   UnhideWhenUsed="false" Name="Medium Grid 1 Accent 6"&gt;&lt;/w:LsdException&gt;
  &lt;w:LsdException Locked="false" Priority="68" SemiHidden="false"
   UnhideWhenUsed="false" Name="Medium Grid 2 Accent 6"&gt;&lt;/w:LsdException&gt;
  &lt;w:LsdException Locked="false" Priority="69" SemiHidden="false"
   UnhideWhenUsed="false" Name="Medium Grid 3 Accent 6"&gt;&lt;/w:LsdException&gt;
  &lt;w:LsdException Locked="false" Priority="70" SemiHidden="false"
   UnhideWhenUsed="false" Name="Dark List Accent 6"&gt;&lt;/w:LsdException&gt;
  &lt;w:LsdException Locked="false" Priority="71" SemiHidden="false"
   UnhideWhenUsed="false" Name="Colorful Shading Accent 6"&gt;&lt;/w:LsdException&gt;
  &lt;w:LsdException Locked="false" Priority="72" SemiHidden="false"
   UnhideWhenUsed="false" Name="Colorful List Accent 6"&gt;&lt;/w:LsdException&gt;
  &lt;w:LsdException Locked="false" Priority="73" SemiHidden="false"
   UnhideWhenUsed="false" Name="Colorful Grid Accent 6"&gt;&lt;/w:LsdException&gt;
  &lt;w:LsdException Locked="false" Priority="19" SemiHidden="false"
   UnhideWhenUsed="false" QFormat="true" Name="Subtle Emphasis"&gt;&lt;/w:LsdException&gt;
  &lt;w:LsdException Locked="false" Priority="21" SemiHidden="false"
   UnhideWhenUsed="false" QFormat="true" Name="Intense Emphasis"&gt;&lt;/w:LsdException&gt;
  &lt;w:LsdException Locked="false" Priority="31" SemiHidden="false"
   UnhideWhenUsed="false" QFormat="true" Name="Subtle Reference"&gt;&lt;/w:LsdException&gt;
  &lt;w:LsdException Locked="false" Priority="32" SemiHidden="false"
   UnhideWhenUsed="false" QFormat="true" Name="Intense Reference"&gt;&lt;/w:LsdException&gt;
  &lt;w:LsdException Locked="false" Priority="33" SemiHidden="false"
   UnhideWhenUsed="false" QFormat="true" Name="Book Title"&gt;&lt;/w:LsdException&gt;
  &lt;w:LsdException Locked="false" Priority="37" Name="Bibliography"&gt;&lt;/w:LsdException&gt;
  &lt;w:LsdException Locked="false" Priority="39" QFormat="true" Name="TOC Heading"&gt;&lt;/w:LsdException&gt;
 &lt;/w:LatentStyles&gt;
&lt;/xml&gt;&lt;![endif]--&gt;    &lt;!--[if gte mso 10]&gt;
&lt;style&gt;
 /* Style Definitions */
 table.MsoNormalTable
	{mso-style-name:"Table Normal";
	mso-tstyle-rowband-size:0;
	mso-tstyle-colband-size:0;
	mso-style-noshow:yes;
	mso-style-priority:99;
	mso-style-parent:"";
	mso-padding-alt:0cm 5.4pt 0cm 5.4pt;
	mso-para-margin:0cm;
	mso-para-margin-bottom:.0001pt;
	mso-pagination:widow-orphan;
	font-size:11.0pt;
	font-family:"Calibri","sans-serif";
	mso-ascii-font-family:Calibri;
	mso-ascii-theme-font:minor-latin;
	mso-hansi-font-family:Calibri;
	mso-hansi-theme-font:minor-latin;
	mso-bidi-font-family:"Times New Roman";
	mso-bidi-theme-font:minor-bidi;
	mso-fareast-language:EN-US;}
&lt;/style&gt;
&lt;![endif]--&gt;    &lt;!--StartFragment--&gt;                          After adding a row
limit to a tabular report, the 'Dashboard Settings' button should appear.  In one client org we just couldn't find the button.
  
                    &#xD;
    &lt;br/&gt;&#xD;
    &lt;br/&gt;&#xD;
    
                    
  I logged a Case with Salesforce Support and it turns out that 'sometimes it just doesn't get added'!
  
                    &#xD;
    &lt;br/&gt;&#xD;
    &lt;br/&gt;&#xD;
    
                    
  Support ticked a checkbox somewhere and our lovely 'Dashboard Settings' button was shining brightly.
  
                    &#xD;
    &lt;!--EndFragment--&gt;  &lt;/p&gt;&#xD;
&lt;/div&gt;</content:encoded>
      <pubDate>Tue, 25 Apr 2017 00:00:00 GMT</pubDate>
      <author>mike@mikearthur.net (Mike Arthur)</author>
      <guid>https://www.mikearthur.net/dashboard-settings-button-missing</guid>
      <g-custom:tags type="string">salesforce,report,dashboard,settings,button,tabular,consultant,admin,administrator,dev,developer,edinburgh,scotland</g-custom:tags>
    </item>
    <item>
      <title>Which Products are not on any Opportunity?</title>
      <link>https://www.mikearthur.net/which-products-are-not-on-any-opportunity</link>
      <description>You want to know which products are not on any Opportunity but reports can't answer this.  Here's how to find out using Workbench.</description>
      <content:encoded>&lt;h3&gt;&#xD;
  
                  
                  
  Reports can't answer this but Workbench can

                
                &#xD;
&lt;/h3&gt;&#xD;
&lt;div&gt;&#xD;
  &lt;a&gt;&#xD;
    &lt;img src="https://irp-cdn.multiscreensite.com/677b77a5/dms3rep/multi/170224-1-477x241.JPG" alt="" title=""/&gt;&#xD;
  &lt;/a&gt;&#xD;
&lt;/div&gt;&#xD;
&lt;div data-rss-type="text"&gt;&#xD;
  &lt;p&gt;&#xD;
    &lt;!--StartFragment--&gt;                                              Knowing which of your products have never been added to an Opportunity is a good thing to know.  Unfortunately, you can't get that answer with Reports, but it's easy to find out using Workbench.
  
                    
                    &#xD;
    &lt;br/&gt;&#xD;
    &lt;br/&gt;&#xD;
    
                    
                    
  You need to be on Enterprise Edition or higher﻿, as Professional Edition and below don't have access to the API.
  
                    
                    &#xD;
    &lt;b&gt;&#xD;
      &lt;br/&gt;&#xD;
      &lt;br/&gt;&#xD;
    &lt;/b&gt;&#xD;
    
                    
                    
  - go to 
  
                    
                    &#xD;
    &lt;a href="https://workbench.developerforce.com"&gt;&#xD;
      
                      
                      
    https://workbench.developerforce.com
  
                    
                    &#xD;
    &lt;/a&gt;&#xD;
    &lt;b&gt;&#xD;
      &lt;br/&gt;&#xD;
    &lt;/b&gt;&#xD;
    
                    
                    
  - click 'agree to terms' and login
  
                    
                    &#xD;
    &lt;b&gt;&#xD;
      &lt;br/&gt;&#xD;
    &lt;/b&gt;&#xD;
    
                    
                    
  - Select 'SOQL Query' in 'Jump To' picklist, leave 'Object' blank, click 'Select'
  
                    
                    &#xD;
    &lt;b&gt;&#xD;
      &lt;br/&gt;&#xD;
    &lt;/b&gt;&#xD;
    
                    
                    
  - In the 'Enter or modify a SOQL query below' box paste this
  
                    
                    &#xD;
    &lt;b&gt;&#xD;
      &lt;br/&gt;&#xD;
    &lt;/b&gt;&#xD;
    
                    
                    
    select name, productcode, id from product2 where id not in (select product2id from opportunitylineitem)
  
                    
                    &#xD;
    &lt;b&gt;&#xD;
      &lt;br/&gt;&#xD;
    &lt;/b&gt;&#xD;
    
                    
                    
    Click 'Query'
  
                    
                    &#xD;
    &lt;b&gt;&#xD;
      &lt;br/&gt;&#xD;
    &lt;/b&gt;&#xD;
    
                    
                    
  - This is the list of products that are gathering dust (good description @SteveMo :-) ).
  
                    
                    &#xD;
    &lt;b&gt;&#xD;
      &lt;br/&gt;&#xD;
    &lt;/b&gt;&#xD;
    
                    
                    
  - You can copy the results to paste somewhere else
  
                    
                    &#xD;
    &lt;b&gt;&#xD;
      &lt;br/&gt;&#xD;
    &lt;/b&gt;&#xD;
    
                    
                    
  -
 Copy the url showing in the address bar and save it somewhere.  Just 
paste it back into browser at some later point and it will run the same 
query.
  
                    
                    &#xD;
    &lt;br/&gt;&#xD;
    &lt;br/&gt;&#xD;
    
                    
                    
  You can paste the same query into the Developer Console but the results are easier to copy and you can return to the query by revisiting the url when you use the Workbench option.
  
                    
                    &#xD;
    &lt;!--EndFragment--&gt;  &lt;/p&gt;&#xD;
&lt;/div&gt;</content:encoded>
      <enclosure url="https://irp-cdn.multiscreensite.com/677b77a5/dms3rep/multi/170224-1-477x241.JPG" length="40322" type="image/jpeg" />
      <pubDate>Fri, 24 Feb 2017 08:47:48 GMT</pubDate>
      <author>mike@mikearthur.net (Mike Arthur)</author>
      <guid>https://www.mikearthur.net/which-products-are-not-on-any-opportunity</guid>
      <g-custom:tags type="string">salesforce,products,opportunity,reports,soql,workbench,admin,administrator,dev,developer,consultant,scotland,edinburgh</g-custom:tags>
      <media:content medium="image" url="https://irp-cdn.multiscreensite.com/677b77a5/dms3rep/multi/170224-1-477x241.JPG">
        <media:description>thumbnail</media:description>
      </media:content>
    </item>
    <item>
      <title>Creating a New Project in MavensMate</title>
      <link>https://www.mikearthur.net/creating-a-new-project-in-mavensmate</link>
      <description>How to select Salesforce metadata types when creating a new project in MavensMate</description>
      <content:encoded>&lt;h3&gt;&#xD;
  
                  
                  
  How to select metadata types

                
                &#xD;
&lt;/h3&gt;&#xD;
&lt;div&gt;&#xD;
  &lt;a&gt;&#xD;
    &lt;img src="https://irp-cdn.multiscreensite.com/677b77a5/dms3rep/multi/170220-1-554x291.JPG" alt="" title=""/&gt;&#xD;
  &lt;/a&gt;&#xD;
&lt;/div&gt;&#xD;
&lt;div data-rss-type="text"&gt;&#xD;
  &lt;p&gt;&#xD;
    
                    
                    MavensMate and Sublime Text are a great combination for developing in Salesforce and moving config between orgs.  For  installation instructions there's a great resource here:
  
                    
                    &#xD;
    &lt;br/&gt;&#xD;
    &lt;a href="https://www.xgeek.net/salesforce/sublime-text-3-mavensmate-for-salesforce-development/"&gt;&#xD;
      
                      
                      
    https://www.xgeek.net/salesforce/sublime-text-3-mavensmate-for-salesforce-development/
  
                    
                    &#xD;
    &lt;/a&gt;&#xD;
    &lt;br/&gt;&#xD;
    &lt;br/&gt;&#xD;
    
                    
                    
  However, I sometimes end up in a bit of a loop when trying to create a new project and select the metadata types that I want.  So, for future reference, for me and others, here are the steps to create a project in MavensMate and select your metadata types:
  
                    
                    &#xD;
    &lt;br/&gt;&#xD;
    &lt;br/&gt;&#xD;
  &lt;/p&gt;&#xD;
  &lt;ol&gt;&#xD;
    &lt;li&gt;&#xD;
      
                      
                      
      From the Hopme tab click on the Menu and 'New Project'.  Fill in the blanks and remember to add Security Token to Password
    
                    
                    &#xD;
    &lt;/li&gt;&#xD;
    &lt;li&gt;&#xD;
      
                      
                      
      Close MM.  Start MM. Open above Project
    
                    
                    &#xD;
    &lt;/li&gt;&#xD;
    &lt;li&gt;&#xD;
      
                      
                      
      Menu - Project - Edit Project
    
                    
                    &#xD;
    &lt;/li&gt;&#xD;
    &lt;li&gt;&#xD;
      
                      
                      
      Advanced Tab - Select Metadata Types to index. Click 'Update Subscription' then 'Refresh Index' and 'Update Project' at top right.
    
                    
                    &#xD;
    &lt;/li&gt;&#xD;
    &lt;li&gt;&#xD;
      
                      
                      
      Click 'Refresh' on the 'Project Metadata' tab
    
                    
                    &#xD;
    &lt;/li&gt;&#xD;
    &lt;li&gt;&#xD;
      
                      
                      
      Tick the boxes and click 'Update Project'
    
                    
                    &#xD;
    &lt;/li&gt;&#xD;
  &lt;/ol&gt;&#xD;
  &lt;br/&gt;&#xD;
  &lt;p&gt;&#xD;
  &lt;/p&gt;&#xD;
&lt;/div&gt;</content:encoded>
      <enclosure url="https://irp-cdn.multiscreensite.com/677b77a5/dms3rep/multi/170220-1-554x291.JPG" length="18341" type="image/jpeg" />
      <pubDate>Mon, 20 Feb 2017 11:28:40 GMT</pubDate>
      <author>mike@mikearthur.net (Mike Arthur)</author>
      <guid>https://www.mikearthur.net/creating-a-new-project-in-mavensmate</guid>
      <g-custom:tags type="string">Salesforce,MavensMate,metadata,types,consultant,admin,administrator,dev,developer,edinburgh,scotland,ide,force.com</g-custom:tags>
      <media:content medium="image" url="https://irp-cdn.multiscreensite.com/677b77a5/dms3rep/multi/170220-1-554x291.JPG">
        <media:description>thumbnail</media:description>
      </media:content>
    </item>
    <item>
      <title>Working with filenames containing international characters</title>
      <link>https://www.mikearthur.net/working-with-filenames-containing-international-characters</link>
      <description>How to retain international characters when renaming attachment files from a Salesforce data export</description>
      <content:encoded>&lt;h3&gt;&#xD;
  
                  
                  
  How to ensure that international characters are maintained

                
                &#xD;
&lt;/h3&gt;&#xD;
&lt;div&gt;&#xD;
  &lt;a&gt;&#xD;
    &lt;img src="https://irp-cdn.multiscreensite.com/677b77a5/dms3rep/multi/161214-1-217x91.JPG" alt="" title=""/&gt;&#xD;
  &lt;/a&gt;&#xD;
&lt;/div&gt;&#xD;
&lt;div data-rss-type="text"&gt;&#xD;
  &lt;p&gt;&#xD;
    
                    
                    One of the steps when importing attachments from a data export is to rename the actual attachment files back to their real name because the real name is replaced with a record id in the data export.
  
                    
                    &#xD;
    &lt;br/&gt;&#xD;
    &lt;br/&gt;&#xD;
    
                    
                    
  If the filenames contain international characters, such as umlauts, these can be replaced with 'garbage' characters when you perform the rename operation at the Windows command line.
  
                    
                    &#xD;
    &lt;br/&gt;&#xD;
    &lt;br/&gt;&#xD;
    
                    
                    
  To stop this happening, type 'chcp 1252' at the 

  
                    
                    &#xD;
    &lt;!--StartFragment--&gt;                                              Windows command line
  
                    
                    &#xD;
    &lt;!--EndFragment--&gt;                                              

before performing the rename.  This changes the 
  
                    
                    &#xD;
    &lt;a href="https://en.wikipedia.org/wiki/Windows_code_page" target="_blank"&gt;&#xD;
      
                      
                      
    Code Page
  
                    
                    &#xD;
    &lt;/a&gt;&#xD;
    
                    
                    
   so that the characters are recognised and retained in the renamed filename.
  
                    
                    &#xD;
    &lt;br/&gt;&#xD;
    &lt;br/&gt;&#xD;
    
                    
                    
  For more information, see:
  
                    
                    &#xD;
    &lt;br/&gt;&#xD;
    &lt;!--StartFragment--&gt;  &lt;/p&gt;&#xD;
  &lt;p&gt;&#xD;
    &lt;span&gt;&#xD;
      &lt;a href="https://help.salesforce.com/articleView?id=How-do-I-import-attachments-using-my-Data-Export-files-1327108330906&amp;amp;language=en_US&amp;amp;type=1" target="_blank"&gt;&#xD;
        
                        
                        
        How do I import attachments using my Data Export files?
      
                      
                      &#xD;
      &lt;/a&gt;&#xD;
    &lt;/span&gt;&#xD;
  &lt;/p&gt;&#xD;
  &lt;!--EndFragment--&gt;  &lt;!--StartFragment--&gt;  &lt;p&gt;&#xD;
    &lt;span&gt;&#xD;
      &lt;a href="https://help.salesforce.com/articleView?id=000007269&amp;amp;type=1&amp;amp;language=en_US" target="_blank"&gt;&#xD;
        
                        
                        
        Renaming exported Attachments/Documents files in a data export
      
                      
                      &#xD;
      &lt;/a&gt;&#xD;
    &lt;/span&gt;&#xD;
  &lt;/p&gt;&#xD;
  &lt;!--EndFragment--&gt;  &lt;a href="http://ss64.com/nt/chcp.html" target="_blank"&gt;&#xD;
    
                    
                    
    CHCP
  
                  
                  &#xD;
  &lt;/a&gt;&#xD;
  &lt;br/&gt;&#xD;
  &lt;br/&gt;&#xD;
  &lt;p&gt;&#xD;
  &lt;/p&gt;&#xD;
&lt;/div&gt;</content:encoded>
      <enclosure url="https://irp-cdn.multiscreensite.com/677b77a5/dms3rep/multi/161214-1-217x91.JPG" length="9052" type="image/jpeg" />
      <pubDate>Wed, 14 Dec 2016 16:28:31 GMT</pubDate>
      <author>mike@mikearthur.net (Mike Arthur)</author>
      <guid>https://www.mikearthur.net/working-with-filenames-containing-international-characters</guid>
      <g-custom:tags type="string">salesforce,data,export,attachment,rename,import,umlaut,international,character,code,page,chcp,1252,850,admin,dev,develop,edinburgh,scotland,consultant</g-custom:tags>
      <media:content medium="image" url="https://irp-cdn.multiscreensite.com/677b77a5/dms3rep/multi/161214-1-217x91.JPG">
        <media:description>thumbnail</media:description>
      </media:content>
    </item>
    <item>
      <title>Bad value for restricted picklist field</title>
      <link>https://www.mikearthur.net/bad-value-for-restricted-picklist-field</link>
      <description>Why an import can fail with 'bad value for restricted picklist error' when using global picklists</description>
      <content:encoded>&lt;h3&gt;&#xD;
  
                  
                  
  Or why your import is failing...

                
                &#xD;
&lt;/h3&gt;&#xD;
&lt;div&gt;&#xD;
  &lt;a&gt;&#xD;
    &lt;img src="https://irp-cdn.multiscreensite.com/677b77a5/dms3rep/multi/Error 3-472x136.JPG" alt="" title=""/&gt;&#xD;
  &lt;/a&gt;&#xD;
&lt;/div&gt;&#xD;
&lt;div data-rss-type="text"&gt;&#xD;
  &lt;p&gt;&#xD;
    
                    
                    So you're trying to import some data and it bombs out with the error 'bad value for restricted picklist field:...'.
  
                    
                    &#xD;
    &lt;br/&gt;&#xD;
    
                    
                    
  The value in your csv matches the value in Salesforce exactly, because you copied and pasted it.
  
                    
                    &#xD;
    &lt;br/&gt;&#xD;
    
                    
                    
  What's the problem?
  
                    
                    &#xD;
    &lt;br/&gt;&#xD;
    
                    
                    
  Make sure that the picklist values are enabled for each Record Type.  This is an easy step to miss if you have set up a 

  
                    
                    &#xD;
    &lt;!--StartFragment--&gt;                                              Global Value Set
  
                    
                    &#xD;
    &lt;!--EndFragment--&gt;                                               and assigned it to a field as a Global Picklist.
  
                    
                    &#xD;
    &lt;br/&gt;&#xD;
  &lt;/p&gt;&#xD;
&lt;/div&gt;</content:encoded>
      <enclosure url="https://irp-cdn.multiscreensite.com/677b77a5/dms3rep/multi/Error%203-472x136.JPG" length="21665" type="image/jpeg" />
      <pubDate>Fri, 09 Dec 2016 15:51:39 GMT</pubDate>
      <author>mike@mikearthur.net (Mike Arthur)</author>
      <guid>https://www.mikearthur.net/bad-value-for-restricted-picklist-field</guid>
      <g-custom:tags type="string">bad value for restricted picklist field,bad,value,for,restricted,picklist,field,global,salesforce,admin,developer,development,scotland,edinburgh,uk,import,error,dataloader,data,loader</g-custom:tags>
      <media:content medium="image" url="https://irp-cdn.multiscreensite.com/677b77a5/dms3rep/multi/Error%203-472x136.JPG">
        <media:description>thumbnail</media:description>
      </media:content>
    </item>
    <item>
      <title>Mail Merge Field Names</title>
      <link>https://www.mikearthur.net/mail-merge-field-names</link>
      <description>Where to find Salesforce field names when setting up a Word Mail Merge document</description>
      <content:encoded>&lt;h3&gt;&#xD;
  
                  
                  
  Here's a handy tip for when you're creating a Word Mail Merge template

                
                &#xD;
&lt;/h3&gt;&#xD;
&lt;div&gt;&#xD;
  &lt;a&gt;&#xD;
    &lt;img src="https://irp-cdn.multiscreensite.com/677b77a5/dms3rep/multi/1611301-482x120.JPG" alt="" title=""/&gt;&#xD;
  &lt;/a&gt;&#xD;
&lt;/div&gt;&#xD;
&lt;div data-rss-type="text"&gt;&#xD;
  &lt;p&gt;&#xD;
    
                    
                    Getting the field names right when creating a Word Mail Merge template to use with Salesforce Extended Mail Merge can be frustrating and time consuming.
  
                    
                    &#xD;
    &lt;br/&gt;&#xD;
    &lt;br/&gt;&#xD;
    
                    
                    
  However, if you navigate to a record in Salesforce, e.g. a Lead, the url will be something like
  
                    
                    &#xD;
    &lt;br/&gt;&#xD;
    &lt;br/&gt;&#xD;
    &lt;a href="http://www.mikearthur.net/mail-merge-field-names" target="_top"&gt;&#xD;
      
                      
                      
    https://cs99.salesforce.com/00Q99000002Kwwp
  
                    
                    &#xD;
    &lt;/a&gt;&#xD;
    &lt;br/&gt;&#xD;
    &lt;br/&gt;&#xD;
    
                    
                    
  Now, if you paste 'servlet/servlet.SForceMailMerge?id=' after the 'com/' so that it looks like
  
                    
                    &#xD;
    &lt;br/&gt;&#xD;
    &lt;br/&gt;&#xD;
    &lt;a href="http://www.mikearthur.net/mail-merge-field-names" target="_top"&gt;&#xD;
      
                      
                      
    https://cs99.salesforce.com/servlet/servlet.SForceMailMerge?id=00Q99000002Kwwp
  
                    
                    &#xD;
    &lt;/a&gt;&#xD;
    &lt;br/&gt;&#xD;
    &lt;br/&gt;&#xD;
    
                    
                    
  You get a (not very pretty but very useful) list of the Mail Merge fields that you can copy and paste into your Word doc.
  
                    
                    &#xD;
    &lt;br/&gt;&#xD;
    &lt;br/&gt;&#xD;
    
                    
                    
  Thanks 
  
                    
                    &#xD;
    &lt;a href="http://salesforce.stackexchange.com/users/3121/dacology" target="_top"&gt;&#xD;
      
                      
                      
    
dacology.
  
                    
                    &#xD;
    &lt;/a&gt;&#xD;
    &lt;!--StartFragment--&gt;    &lt;!--EndFragment--&gt;    &lt;br/&gt;&#xD;
    &lt;br/&gt;&#xD;
  &lt;/p&gt;&#xD;
&lt;/div&gt;</content:encoded>
      <enclosure url="https://irp-cdn.multiscreensite.com/677b77a5/dms3rep/multi/1611301-482x120.JPG" length="28459" type="image/jpeg" />
      <pubDate>Wed, 30 Nov 2016 14:30:39 GMT</pubDate>
      <author>mike@mikearthur.net (Mike Arthur)</author>
      <guid>https://www.mikearthur.net/mail-merge-field-names</guid>
      <g-custom:tags type="string">salesforce,mail,merge,word,field,names,scotland,edinburgh</g-custom:tags>
      <media:content medium="image" url="https://irp-cdn.multiscreensite.com/677b77a5/dms3rep/multi/1611301-482x120.JPG">
        <media:description>thumbnail</media:description>
      </media:content>
    </item>
    <item>
      <title>What's New in Winter '17?</title>
      <link>https://www.mikearthur.net/what-s-new-in-winter-17</link>
      <description>Salesforce Winter '17 new features</description>
      <content:encoded>&lt;h3&gt;&#xD;
  
                  
                  
  Lightning strikes again

                
                &#xD;
&lt;/h3&gt;&#xD;
&lt;div&gt;&#xD;
  &lt;a&gt;&#xD;
    &lt;img src="https://irp-cdn.multiscreensite.com/677b77a5/dms3rep/multi/Winter17-332x442.png" alt="" title=""/&gt;&#xD;
  &lt;/a&gt;&#xD;
&lt;/div&gt;&#xD;
&lt;div data-rss-type="text"&gt;&#xD;
  &lt;p&gt;&#xD;
    
                    
                    Winter '17 is here and as usual it's packed with new features - 466 pages of release notes worth in this case!  Most of the development has gone into improving the Lightning experience.
  
                    
                    &#xD;
    &lt;br/&gt;&#xD;
    &lt;br/&gt;&#xD;
    
                    
                    
  I find train journeys are the perfect time to peruse the release notes.  Here are the things that I spotted during my travels that I think will be the most useful to customers using mainly out of the box sales cloud functionality:
  
                    
                    &#xD;
    &lt;br/&gt;&#xD;
    &lt;br/&gt;&#xD;
    &lt;b&gt;&#xD;
      
                      
                      
    New Navigation in Lightning
  
                    
                    &#xD;
    &lt;/b&gt;&#xD;
    &lt;br/&gt;&#xD;
    
                    
                    
  Gone are the icons down the left, replaced with a tab style navigation bar along the top.  Each tab has a drop down where you can access recent records.  I really like it as you have actual words rather than icons, which is particularly helpful when you have a number of custom objects, you can get to records directly from the tab and it will ease the transition to Lightning for existing Classic users who will be more familiar with the style of the new Lightning interface than the previous one.
  
                    
                    &#xD;
    &lt;br/&gt;&#xD;
    &lt;br/&gt;&#xD;
    &lt;b&gt;&#xD;
      
                      
                      
    Field Level Help
  
                    
                    &#xD;
    &lt;/b&gt;&#xD;
    &lt;br/&gt;&#xD;
    
                    
                    
  Help popups that Classic users are used to when you hover over the '?' next to a field now appear in Lightning Experience.
  
                    
                    &#xD;
    &lt;br/&gt;&#xD;
    &lt;br/&gt;&#xD;
    &lt;b&gt;&#xD;
      
                      
                      
    Create Multiple Records More Quickly in Lightning
  
                    
                    &#xD;
    &lt;/b&gt;&#xD;
    &lt;br/&gt;&#xD;
    
                    
                    
  Lightning users now get a 'Save &amp;amp; New' button whenever they create, edit or clone a record.
  
                    
                    &#xD;
    &lt;br/&gt;&#xD;
    &lt;br/&gt;&#xD;
    &lt;b&gt;&#xD;
      
                      
                      
    Record Details Remembers if a Section is Collapsed in Lightning
  
                    
                    &#xD;
    &lt;/b&gt;&#xD;
    &lt;br/&gt;&#xD;
    
                    
                    
  If you expand or collapse a section in Lightning on the record details, it will stay that way even after navigating to other objects.
  
                    
                    &#xD;
    &lt;br/&gt;&#xD;
    &lt;br/&gt;&#xD;
    &lt;b&gt;&#xD;
      
                      
                      
    Account Hierarchy
  
                    
                    &#xD;
    &lt;/b&gt;&#xD;
    &lt;br/&gt;&#xD;
    
                    
                    
  Still no Account Hierarchy in Lightning but there is a free AppExchange package for it.
  
                    
                    &#xD;
    &lt;br/&gt;&#xD;
    &lt;br/&gt;&#xD;
    &lt;b&gt;&#xD;
      
                      
                      
    Duplicate Leads
  
                    
                    &#xD;
    &lt;/b&gt;&#xD;
    &lt;br/&gt;&#xD;
    
                    
                    
  Potential duplicates are identified when viewing a Lead in Lightning so that the sales person can be made aware of this and merge the duplicates.
  
                    
                    &#xD;
    &lt;br/&gt;&#xD;
    &lt;br/&gt;&#xD;
    &lt;b&gt;&#xD;
      
                      
                      
    Quotes comes to Lightning
  
                    
                    &#xD;
    &lt;/b&gt;&#xD;
    &lt;br/&gt;&#xD;
    
                    
                    
  At last! Now we can add Quotes and Quote Line Items and saves Quotes as PDFs in Lightning.
  
                    
                    &#xD;
    &lt;br/&gt;&#xD;
    &lt;br/&gt;&#xD;
    &lt;b&gt;&#xD;
      
                      
                      
    Lightning Voice
  
                    
                    &#xD;
    &lt;/b&gt;&#xD;
    &lt;br/&gt;&#xD;
    
                    
                    
  Make calls from within Salesforce - but only to the US and Canada for now.
  
                    
                    &#xD;
    &lt;br/&gt;&#xD;
    &lt;br/&gt;&#xD;
    &lt;b&gt;&#xD;
      
                      
                      
    Inline Editing in Lightning List Views
  
                    
                    &#xD;
    &lt;/b&gt;&#xD;
    &lt;br/&gt;&#xD;
    
                    
                    
  Now you can edit inline in list views in Lightning, just as in Classic.  Only one reord can be edited but the change can be applied to multiple records (beta in this release).
  
                    
                    &#xD;
    &lt;br/&gt;&#xD;
    
                    
                    
  You can’t edit inline in a Lightning list view if:
  
                    
                    &#xD;
    &lt;br/&gt;&#xD;
    
                    
                    
  • The list view contains more than one record type (same as in Classic).
  
                    
                    &#xD;
    &lt;br/&gt;&#xD;
    
                    
                    
  • The list view uses filter logic that contains OR clauses.
  
                    
                    &#xD;
    &lt;br/&gt;&#xD;
    
                    
                    
  • The list view contains lookup or dependent picklist fields.
  
                    
                    &#xD;
    &lt;br/&gt;&#xD;
    &lt;br/&gt;&#xD;
    &lt;b&gt;&#xD;
      
                      
                      
    Kanban View
  
                    
                    &#xD;
    &lt;/b&gt;&#xD;
    &lt;br/&gt;&#xD;
    
                    
                    
  This card style view that makes managing Opportunities so much easier is now available for Leads, Contracts and Campaigns.  Also, you can edit and delete records directly from the Kanban view.
  
                    
                    &#xD;
    &lt;br/&gt;&#xD;
    &lt;br/&gt;&#xD;
    &lt;b&gt;&#xD;
      
                      
                      
    Security Updates
  
                    
                    &#xD;
    &lt;/b&gt;&#xD;
    &lt;br/&gt;&#xD;
    
                    
                    
  Remember that Salesforce is disabling TLS 1.0 encryption protocol by March 2017.  What this means is that if your users use Salesforce for Outlook, they must be on version 3.0 or later and if they use Data Loader they must be on version xxx by that time.
  
                    
                    &#xD;
    &lt;br/&gt;&#xD;
    &lt;br/&gt;&#xD;
    &lt;b&gt;&#xD;
      
                      
                      
    New Changeset Component
  
                    
                    &#xD;
    &lt;/b&gt;&#xD;
    &lt;br/&gt;&#xD;
    
                    
                    
  Global Value Set - Now you can deploy a global picklist value set, which is the set of shared values that custom picklist fields can use, as a Changeset component.
  
                    
                    &#xD;
    &lt;br/&gt;&#xD;
    &lt;br/&gt;&#xD;
    
                    
                    
  As mentioned at the start, most of the development is on Lightning features.  If you've not tried Lightning yet, give it a go, you might find that it now does enough of the things that you're used to and the modern, new interface boosts users interest and you see an improvement in adoption!
  
                    
                    &#xD;
    &lt;br/&gt;&#xD;
    &lt;br/&gt;&#xD;
    
                    
                    
  The full release notes can be accessed here:
  
                    
                    &#xD;
    &lt;br/&gt;&#xD;
    &lt;a href="https://resources.docs.salesforce.com/204/latest/en-us/sfdc/pdf/salesforce_winter17_release_notes.pdf"&gt;&#xD;
      
                      
                      
    https://resources.docs.salesforce.com/204/latest/en-us/sfdc/pdf/salesforce_winter17_release_notes.pd...
  
                    
                    &#xD;
    &lt;/a&gt;&#xD;
    &lt;br/&gt;&#xD;
  &lt;/p&gt;&#xD;
&lt;/div&gt;</content:encoded>
      <enclosure url="https://irp-cdn.multiscreensite.com/677b77a5/dms3rep/multi/Winter17-332x442.png" length="4532" type="image/png" />
      <pubDate>Sat, 22 Oct 2016 00:00:00 GMT</pubDate>
      <author>mike@mikearthur.net (Mike Arthur)</author>
      <guid>https://www.mikearthur.net/what-s-new-in-winter-17</guid>
      <g-custom:tags type="string">Salesforce,Winter17,release,notes,lightning,scotland,edinburgh</g-custom:tags>
      <media:content medium="image" url="https://irp-cdn.multiscreensite.com/677b77a5/dms3rep/multi/Winter17-332x442.png">
        <media:description>thumbnail</media:description>
      </media:content>
    </item>
    <item>
      <title>Understand Code Coverage before Deploying Apex</title>
      <link>https://www.mikearthur.net/understand-code-coverage-before-deploying-apex</link>
      <description>What steps should be followed before deploying Salesforce Apex and how is code coverage calculated and stored?</description>
      <content:encoded>&lt;h3&gt;&#xD;
  
                  
  How is code coverage calculated and what are the requirements?

                &#xD;
&lt;/h3&gt;&#xD;
&lt;div data-rss-type="text"&gt;&#xD;
  &lt;p&gt;&#xD;
    
                    I've been having some 'challenges' in deploying Apex.  These articles helped with understanding the criteria and how coverage is calculated and stored:
  
                    &#xD;
    &lt;br/&gt;&#xD;
    &lt;!--StartFragment--&gt;    &lt;br/&gt;&#xD;
  &lt;/p&gt;&#xD;
  &lt;ul&gt;&#xD;
    &lt;li&gt;&#xD;
      &lt;a target="_blank" href="https://developer.salesforce.com/blogs/developer-relations/2012/11/how-code-coverage-works.html"&gt;&#xD;
        
                        
        How Code Coverage Works
      
                      &#xD;
      &lt;/a&gt;&#xD;
    &lt;/li&gt;&#xD;
    &lt;li&gt;&#xD;
      &lt;!--StartFragment--&gt;      &lt;a target="_blank" href="https://help.salesforce.com/apex/HTViewSolution?urlname=Code-coverage-steps-and-considerations-prior-to-deployments"&gt;&#xD;
        
                        
        Code coverage steps and considerations prior to deployments
      
                      &#xD;
      &lt;/a&gt;&#xD;
    &lt;/li&gt;&#xD;
  &lt;/ul&gt;&#xD;
  
                  
  When you get to the step to run 'SELECT Id FROM ApexCodeCoverageAggregate' in Query Editor of Dev Console, ensure that 'Use Tooling API' next to the 'Execute' button is checked.
  
                  &#xD;
  &lt;br/&gt;&#xD;
  &lt;br/&gt;&#xD;
  
                  
  When deleting the rows returned by that query, select the first row, shift select the last row and click the 'Delete Row' button.
  
                  &#xD;
  &lt;br/&gt;&#xD;
  &lt;!--EndFragment--&gt;  &lt;br/&gt;&#xD;
  &lt;p&gt;&#xD;
  &lt;/p&gt;&#xD;
&lt;/div&gt;</content:encoded>
      <pubDate>Tue, 30 Aug 2016 12:36:45 GMT</pubDate>
      <author>mike@mikearthur.net (Mike Arthur)</author>
      <guid>https://www.mikearthur.net/understand-code-coverage-before-deploying-apex</guid>
      <g-custom:tags type="string">salesforce,apex,code,coverage,deploy,ant,migration,eclipse,mavens,mate,scotland,edinburgh</g-custom:tags>
    </item>
    <item>
      <title>Migrate Process Builder with Ant Migration Tool</title>
      <link>https://www.mikearthur.net/migrate-process-builder-with-ant-migration-tool</link>
      <description>How to set up package.xml to take Process Builder from one Salesforce org to another using Ant migration tool.</description>
      <content:encoded>&lt;h3&gt;&#xD;
  
                  
                  
  What to put in package.xml

                
                &#xD;
&lt;/h3&gt;&#xD;
&lt;div data-rss-type="text"&gt;&#xD;
  &lt;p&gt;&#xD;
  &lt;/p&gt;&#xD;
  &lt;div&gt;&#xD;
    
                    
                    
    Update:  As of API Version 44.0, the dash and version number is no longer needed.  Details are here, near the bottom of the page, in the section 'Upgrade Flow Files to API Version 44.0 or Later':
    
                    
                    &#xD;
    &lt;br/&gt;&#xD;
  &lt;/div&gt;&#xD;
  &lt;div&gt;&#xD;
    &lt;a href="https://developer.salesforce.com/docs/atlas.en-us.api_meta.meta/api_meta/meta_visual_workflow.htm#" target="_blank"&gt;&#xD;
      
                      
                      
      https://developer.salesforce.com/docs/atlas.en-us.api_meta.meta/api_meta/meta_visual_workflow.htm#
    
                    
                    &#xD;
    &lt;/a&gt;&#xD;
    
                    
                    
    !
    
                    
                    &#xD;
    &lt;br/&gt;&#xD;
  &lt;/div&gt;&#xD;
  &lt;div&gt;&#xD;
    &lt;br/&gt;&#xD;
  &lt;/div&gt;&#xD;
  &lt;div&gt;&#xD;
    
                    
                    
    =======================================================================================================================
    
                    
                    &#xD;
    &lt;br/&gt;&#xD;
  &lt;/div&gt;&#xD;
  &lt;div&gt;&#xD;
    
                    
                    
    As part of an org merge, a number of Process Builder processes need to be copied from one org to another and I wasn't about to re-create them all manually.
  
                  
                  &#xD;
  &lt;/div&gt;&#xD;
  &lt;br/&gt;&#xD;
  
                  
                  
  It took a bit of digging around but I figured out what content you need in your package.xml file to retrieve and deploy Process Builder.
  
                  
                  &#xD;
  &lt;br/&gt;&#xD;
  &lt;br/&gt;&#xD;
  
                  
                  
  If you look at Metadata Types in Workbench, you will see that there are two types - Flow and Flow Definition.  Which one to use?
  
                  
                  &#xD;
  &lt;br/&gt;&#xD;
  &lt;br/&gt;&#xD;
  
                  
                  
  What you need in your package.xml is Flow in your &amp;lt;name&amp;gt; tag and you must append a dash and the version number that you want to the API name of your Process Builder:
  
                  
                  &#xD;
  &lt;br/&gt;&#xD;
  &lt;p&gt;&#xD;
  &lt;/p&gt;&#xD;
&lt;/div&gt;&#xD;
&lt;div&gt;&#xD;
  &lt;a&gt;&#xD;
    &lt;img src="https://irp-cdn.multiscreensite.com/677b77a5/dms3rep/multi/1608221-339x63.PNG" alt="" title=""/&gt;&#xD;
  &lt;/a&gt;&#xD;
&lt;/div&gt;&#xD;
&lt;div data-rss-type="text"&gt;&#xD;
  &lt;p&gt;&#xD;
    
                    
                    With that, you get a definition that can then be deployed.  The definition file starts like this:
  
                    
                    &#xD;
    &lt;br/&gt;&#xD;
  &lt;/p&gt;&#xD;
&lt;/div&gt;&#xD;
&lt;div&gt;&#xD;
  &lt;a&gt;&#xD;
    &lt;img src="https://irp-cdn.multiscreensite.com/677b77a5/dms3rep/multi/1608222-594x214.PNG" alt="" title=""/&gt;&#xD;
  &lt;/a&gt;&#xD;
&lt;/div&gt;&#xD;
&lt;div data-rss-type="text"&gt;&#xD;
  &lt;p&gt;&#xD;
    
                    
                    Once you have deployed your Process Builder you will need to Activate it manually.
  
                    
                    &#xD;
    &lt;br/&gt;&#xD;
    &lt;br/&gt;&#xD;
    
                    
                    
  Out of curiosity I wanted to find out what FlowDefinition gives you.  It is the '
  
                    
                    &#xD;
    &lt;a target="_top" href="https://developer.salesforce.com/docs/atlas.en-us.api_tooling.meta/api_tooling/tooling_api_objects_flowdefinition.htm"&gt;&#xD;
      
                      
                      
    parent of a set of flow versions
  
                    
                    &#xD;
    &lt;/a&gt;&#xD;
    
                    
                    
  '.  If you retrieve a FlowDefinition and do not provide a version number of the Process Builder:
  
                    
                    &#xD;
    &lt;br/&gt;&#xD;
  &lt;/p&gt;&#xD;
&lt;/div&gt;&#xD;
&lt;div&gt;&#xD;
  &lt;a&gt;&#xD;
    &lt;img src="https://irp-cdn.multiscreensite.com/677b77a5/dms3rep/multi/1608223-325x63.PNG" alt="" title=""/&gt;&#xD;
  &lt;/a&gt;&#xD;
&lt;/div&gt;&#xD;
&lt;div data-rss-type="text"&gt;&#xD;
  &lt;p&gt;&#xD;
    
                    
                    You get the active version, but no definition content:
  
                    
                    &#xD;
    &lt;br/&gt;&#xD;
  &lt;/p&gt;&#xD;
&lt;/div&gt;&#xD;
&lt;div&gt;&#xD;
  &lt;a&gt;&#xD;
    &lt;img src="https://irp-cdn.multiscreensite.com/677b77a5/dms3rep/multi/1608224-460x72.PNG" alt="" title=""/&gt;&#xD;
  &lt;/a&gt;&#xD;
&lt;/div&gt;&#xD;
&lt;div data-rss-type="text"&gt;&#xD;
  &lt;p&gt;&#xD;
    
                    
                    So, to take a Process Builder from one org to another, use 'Flow' in the &amp;lt;name&amp;gt; tag, append a dash and the version number to your API name in the &amp;lt;members&amp;gt; tag and activate the Process Builder once deployed.
  
                    
                    &#xD;
    &lt;br/&gt;&#xD;
    &lt;br/&gt;&#xD;
    
                    
                    
  Wildcarding works as well, i.e. &amp;lt;members&amp;gt;*&amp;lt;/members&amp;gt; with &amp;lt;name&amp;gt;Flow&amp;lt;/name&amp;gt;
  
                    
                    &#xD;
    &lt;br/&gt;&#xD;
  &lt;/p&gt;&#xD;
&lt;/div&gt;</content:encoded>
      <enclosure url="https://irp-cdn.multiscreensite.com/677b77a5/dms3rep/multi/1608225-597x164.PNG" length="4643" type="image/png" />
      <pubDate>Mon, 22 Aug 2016 16:03:17 GMT</pubDate>
      <guid>https://www.mikearthur.net/migrate-process-builder-with-ant-migration-tool</guid>
      <g-custom:tags type="string">Salesforce,develop,developer,ant,migration,apache,process,builder,package,package.xml,retrieve,deploy,eclipse,mavens,mate,ide,flow,flowdefinition,visual</g-custom:tags>
      <media:content medium="image" url="https://irp-cdn.multiscreensite.com/677b77a5/dms3rep/multi/1608225-597x164.PNG">
        <media:description>thumbnail</media:description>
      </media:content>
    </item>
    <item>
      <title>Importing leads or cases against external id on owner field</title>
      <link>https://www.mikearthur.net/importing-leads-or-cases-against-external-id-on-owner-field</link>
      <description>Why isn't the external id field on User available for 'Owner' when importing Leads or Cases?</description>
      <content:encoded>&lt;h3&gt;&#xD;
  
                  
  Why isn't the external id field on User available for 'Owner' when importing Leads or Cases?

                &#xD;
&lt;/h3&gt;&#xD;
&lt;div data-rss-type="text"&gt;&#xD;
  &lt;p&gt;&#xD;
    
                    I have been exporting records from one org and importing to another.  For all objects, I created a custom text field set as an external id, called 'Other_Org_Id' and import the Salesforce record id from the source org into that field in the target org.  When I then import say, Opportunities, I can map the Opp AccountId field to the 'Other_Org_Id' Account external Id field and I don't need to use Excel to get the new Account Ids in the target org.
  
                    &#xD;
    &lt;br/&gt;&#xD;
    &lt;br/&gt;&#xD;
    
                    
  There's more info on using external Ids when importing related records 
  
                    &#xD;
    &lt;a target="_blank" href="http://help.salesforce.com/HTViewSolution?id=000002783"&gt;&#xD;
      
                      
    here
  
                    &#xD;
    &lt;/a&gt;&#xD;
    
                    
  .
  
                    &#xD;
    &lt;br/&gt;&#xD;
    &lt;br/&gt;&#xD;
    
                    
  This works great for most relationships, including the 'Owner' field.  I created an 

  
                    &#xD;
    &lt;!--StartFragment--&gt;                          'Other_Org_Id'
  
                    &#xD;
    &lt;!--EndFragment--&gt;                          

external Id field on User object, imported the User records from the source org and I can use the User 

  
                    &#xD;
    &lt;!--StartFragment--&gt;                          'Other_Org_Id'
  
                    &#xD;
    &lt;!--EndFragment--&gt;                          

to map the 'Owner' field when importing Accounts, Contacts, Opportunities and so on.
  
                    &#xD;
    &lt;br/&gt;&#xD;
    &lt;br/&gt;&#xD;
    
                    
  When I came to import Leads though, 'Owner' wasn't in the list of fields that could be mapped to external Ids.

  
                    &#xD;
    &lt;!--StartFragment--&gt;                           The same thing happens if you try to import Cases.
  
                    &#xD;
    &lt;!--EndFragment--&gt;                          

  After some head scratching and trying other things, I figured it out. 
  
                    &#xD;
    &lt;br/&gt;&#xD;
    &lt;br/&gt;&#xD;
    
                    
  It's because Leads and Cases can be owned by Queues as well as Users, and there is currently no way to add a custom external Id field to Queues, so an external Id field is not offered against Owner when importing Leads and Cases.
  
                    &#xD;
    &lt;br/&gt;&#xD;
    &lt;br/&gt;&#xD;
    
                    
  So it's back to vlookup in Excel to get the new User Ids for Leads and Cases.
  
                    &#xD;
    &lt;br/&gt;&#xD;
  &lt;/p&gt;&#xD;
&lt;/div&gt;</content:encoded>
      <pubDate>Wed, 17 Aug 2016 11:36:15 GMT</pubDate>
      <author>mike@mikearthur.net (Mike Arthur)</author>
      <guid>https://www.mikearthur.net/importing-leads-or-cases-against-external-id-on-owner-field</guid>
      <g-custom:tags type="string">salesforce,import,data,loader,dataloader,external,id,externalid,Lead,Leads,Case,Cases,Owner,User,related,records</g-custom:tags>
    </item>
    <item>
      <title>Copy query results from Salesforce Developer Console and paste to Excel</title>
      <link>https://www.mikearthur.net/copy-query-results-from-Salesforce-Developer-Console</link>
      <description>A simple tweak in your browser can make the query results selectable so that you can copy and paste to Excel.</description>
      <content:encoded>&lt;div data-rss-type="text"&gt;&#xD;
  &lt;p&gt;&#xD;
    
                    
                    Developer Console is a quick way to fire off a Salesforce SOQL query but there's no standard way to be able to copy the results and paste them into Excel.  Using Workbench instead is one option but if you happen to be working in Dev Console there is a way to do it - 
  
                    
                    &#xD;
    &lt;br/&gt;&#xD;
    &lt;br/&gt;&#xD;
  &lt;/p&gt;&#xD;
  &lt;ul&gt;&#xD;
    &lt;li&gt;&#xD;
      
                      
                      
      In your browser, Firefox in my case, right click on the Query Results and click 'Inspect Element'
    
                    
                    &#xD;
    &lt;/li&gt;&#xD;
    &lt;li&gt;&#xD;
      
                      
                      
      In the inspector, find the div that starts '&amp;lt;div id="gridview...'
    
                    
                    &#xD;
    &lt;/li&gt;&#xD;
    &lt;li&gt;&#xD;
      
                      
                      
      Untick 'moz-user-select' in the '.x-unselectable' section to the right
    
                    
                    &#xD;
    &lt;/li&gt;&#xD;
    &lt;li&gt;&#xD;
      
                      
                      
      Now you can select and copy from the Query Results and paste into Excel
    
                    
                    &#xD;
    &lt;/li&gt;&#xD;
  &lt;/ul&gt;&#xD;
  &lt;br/&gt;&#xD;
  
                  
                  
  Thanks to Sergey Utko's reply on StackExchange - 
  
                  
                  &#xD;
  &lt;a href="http://salesforce.stackexchange.com/questions/15328/export-results-from-developer-console-query-editor"&gt;&#xD;
    
                    
                    
    http://salesforce.stackexchange.com/questions/15328/export-results-from-developer-console-query-edit...
  
                  
                  &#xD;
  &lt;/a&gt;&#xD;
  &lt;br/&gt;&#xD;
  &lt;p&gt;&#xD;
  &lt;/p&gt;&#xD;
&lt;/div&gt;&#xD;
&lt;div&gt;&#xD;
  &lt;a&gt;&#xD;
    &lt;img src="https://irp-cdn.multiscreensite.com/677b77a5/dms3rep/multi/1608161-780x524.JPG" alt="" title=""/&gt;&#xD;
  &lt;/a&gt;&#xD;
&lt;/div&gt;</content:encoded>
      <enclosure url="https://irp-cdn.multiscreensite.com/677b77a5/dms3rep/multi/1608161-780x524.JPG" length="69354" type="image/jpeg" />
      <pubDate>Tue, 16 Aug 2016 13:40:50 GMT</pubDate>
      <author>mike@mikearthur.net (Mike Arthur)</author>
      <guid>https://www.mikearthur.net/copy-query-results-from-Salesforce-Developer-Console</guid>
      <g-custom:tags type="string">salesforce,developer,console,copy,paste,excel,csv,workbench</g-custom:tags>
      <media:content medium="image" url="https://irp-cdn.multiscreensite.com/677b77a5/dms3rep/multi/1608161-780x524.JPG">
        <media:description>thumbnail</media:description>
      </media:content>
    </item>
    <item>
      <title>Importing Products, Price Books &amp; Opportunity Line Items with Data Loader</title>
      <link>https://www.mikearthur.net/importing-products-price-books-opportunity-line-items-with-data-loader</link>
      <description>Importing Products, Price Books, Price Book Entrues and Opportunity Line Items can be a frustrating experience - follow these steps for a smooth import.</description>
      <content:encoded>&lt;h3&gt;&#xD;
  
                  
  There are some important steps to be followed for a successful import

                &#xD;
&lt;/h3&gt;&#xD;
&lt;div data-rss-type="text"&gt;&#xD;
  &lt;p&gt;&#xD;
    
                    Importing Products, Price Books, Price Book Entries and Opportunity Line Items isn't as straightforward as when you're importing some Contacts and relating them to Accounts.  
  
                    &#xD;
    &lt;br/&gt;&#xD;
    &lt;br/&gt;&#xD;
    
                    
  If you're confident with importing data you might dive straight in but then hit import errors.  There are some steps that must be followed but aren't obvious and will be the most likely cause of your import error.  These are:
  
                    &#xD;
    &lt;br/&gt;&#xD;
    &lt;br/&gt;&#xD;
  &lt;/p&gt;&#xD;
  &lt;ul&gt;&#xD;
    &lt;li&gt;&#xD;
      
                      
      All products 
      
                      &#xD;
      &lt;u&gt;&#xD;
        
                        
        must 
      
                      &#xD;
      &lt;/u&gt;&#xD;
      
                      
      be imported into the Standard Price Book before you can import them into any custom Price Books, even if you don't want them to be available in the Standard Price Book.
    
                    &#xD;
    &lt;/li&gt;&#xD;
  &lt;/ul&gt;&#xD;
  &lt;br/&gt;&#xD;
  &lt;ul&gt;&#xD;
    &lt;li&gt;&#xD;
      
                      
      When importing Products into the Standard Price Book
      
                      &#xD;
      &lt;ul&gt;&#xD;
        &lt;li&gt;&#xD;
          
                          
          'IsActive' 
          
                          &#xD;
          &lt;u&gt;&#xD;
            
                            
            must 
          
                          &#xD;
          &lt;/u&gt;&#xD;
          
                          
          be set set TRUE for all Products
        
                        &#xD;
        &lt;/li&gt;&#xD;
        &lt;li&gt;&#xD;
          &lt;u&gt;&#xD;
            
                            
            Do not map
          
                          &#xD;
          &lt;/u&gt;&#xD;
          
                          
           UseStandardPrice
          
                          &#xD;
          &lt;br/&gt;&#xD;
        &lt;/li&gt;&#xD;
      &lt;/ul&gt;&#xD;
    &lt;/li&gt;&#xD;
  &lt;/ul&gt;&#xD;
  
                  
  Once you have successfully imported all Products into Standard Price Book, you can then import them into custom Price Books, setting IsActive and UseStandardPrice as you wish.
  
                  &#xD;
  &lt;br/&gt;&#xD;
  &lt;br/&gt;&#xD;
  
                  
  If you don't want the Products to be available in the Standard Price Book you can now set IsActive to FALSE for those Price Book Entry records.
  
                  &#xD;
  &lt;br/&gt;&#xD;
  &lt;br/&gt;&#xD;
  
                  
  This Salesforce document will walk you through the steps - follow it carefully!
  
                  &#xD;
  &lt;br/&gt;&#xD;
  &lt;a href="https://help.salesforce.com/servlet/servlet.FileDownload?file=01530000001OdbFAAS"&gt;&#xD;
    
                    
    https://help.salesforce.com/servlet/servlet.FileDownload?file=01530000001OdbFAAS
  
                  &#xD;
  &lt;/a&gt;&#xD;
  &lt;br/&gt;&#xD;
  &lt;br/&gt;&#xD;
  
                  
  Another area that caused me some bother was that I had imported some Products and Price Books, the Product was Active and the Price Book Entry was active but when I went to add the Product to an Opportunity it was not available.  The reason for this turned out to be that only Price Book Entries in the currency of the Opportunity are available.  As my Opp had a currency of USD but I had only imported EUR Price Book Entries, there were no Products available to my Opp.  As soon as I imported USD Price Book Entries, the Products became available to the Opp.
  
                  &#xD;
  &lt;br/&gt;&#xD;
  &lt;br/&gt;&#xD;
  &lt;p&gt;&#xD;
  &lt;/p&gt;&#xD;
&lt;/div&gt;</content:encoded>
      <pubDate>Sun, 31 Jul 2016 00:00:00 GMT</pubDate>
      <author>mike@mikearthur.net (Mike Arthur)</author>
      <guid>https://www.mikearthur.net/importing-products-price-books-opportunity-line-items-with-data-loader</guid>
      <g-custom:tags type="string">salesforce,import,csv,products,price,books,pricebooks,entry,entries,pricebookentry,line,item,items,opportunity,opportunitylineitem,data,loader,dataloader</g-custom:tags>
    </item>
    <item>
      <title>Control Access to a Custom Button</title>
      <link>https://www.mikearthur.net/control-access-to-a-custom-button</link>
      <description />
      <content:encoded>&lt;h3&gt;&#xD;
  
                  
                  
  How to use Custom Permissions to control access to a custom button

                
                &#xD;
&lt;/h3&gt;&#xD;
&lt;div data-rss-type="text"&gt;&#xD;
  &lt;p&gt;&#xD;
    
                    
                    I recently installed 
  
                    
                    &#xD;
    &lt;a target="_blank" href="https://appexchange.salesforce.com/listingDetail?listingId=a0N3000000B4l5tEAB"&gt;&#xD;
      
                      
                      
    ChimpSync
  
                    
                    &#xD;
    &lt;/a&gt;&#xD;
    
                    
                    
  , which, by the way, I am mightily impressed with.  To use it, you add a custom button 'Synchronize with MailChimp' onto the Campaign Page Layout.  However, I didn't want all users to have access to this.  Controlling access to a button is not currently available as standard functionality but there is an idea 
  
                    
                    &#xD;
    &lt;a target="_blank" href="https://success.salesforce.com/ideaview?id=08730000000Br37AAC"&gt;&#xD;
      
                      
                      
    here
  
                    
                    &#xD;
    &lt;/a&gt;&#xD;
    
                    
                    
   that you can vote on.
  
                    
                    &#xD;
    &lt;br/&gt;&#xD;
    &lt;br/&gt;&#xD;
    
                    
                    
  One solution would have been to create a new profile and map the Campaign Page Layout with button to the new profile and map the Campaign Page Layout without the button to other profiles.  This introduces a maintenance overhead though as any subsequent changes to the Campaign Page Layout need to be made in two places and both profiles need to be maintained.
  
                    
                    &#xD;
    &lt;br/&gt;&#xD;
    &lt;br/&gt;&#xD;
    
                    
                    
  Instead, I used Custom Permissions, Generally Available (GA) in 
  
                    
                    &#xD;
    &lt;a target="_blank" href="http://docs.releasenotes.salesforce.com/en-us/winter15/release-notes/rn_forcecom_custom_permissions.htm"&gt;&#xD;
      
                      
                      
    Winter '15
  
                    
                    &#xD;
    &lt;/a&gt;&#xD;
    
                    
                    
  , to control which users could use the button and which received an error.  With this solution, all users that see the Page Layout on which the button has been placed will see the button but only those with the Custom Permission can use it.  Also, the 'button behaviour' needs to be 'Execute Javascript' to use this solution.
  
                    
                    &#xD;
    &lt;br/&gt;&#xD;
    &lt;br/&gt;&#xD;
    
                    
                    
  To set this up, first create a Custom Permission by typing 'custom p' in Setup Search and clicking on 'Custom Permissions'.  Click 'New', give it a label, tab through the name field and give it a description.  Did you get that last bit?  Give it a description!
  
                    
                    &#xD;
    &lt;br/&gt;&#xD;
  &lt;/p&gt;&#xD;
&lt;/div&gt;&#xD;
&lt;div&gt;&#xD;
  &lt;a&gt;&#xD;
    &lt;img src="https://irp-cdn.multiscreensite.com/677b77a5/dms3rep/multi/365ce2c135374f879b4c63c02cdd4855-800x90.dm.edit_sH7mOo.jpg" alt="New custom permission" title=""/&gt;&#xD;
  &lt;/a&gt;&#xD;
&lt;/div&gt;&#xD;
&lt;div data-rss-type="text"&gt;&#xD;
  &lt;p&gt;&#xD;
    
                    
                    Now, in Setup, go to the object where the button will be added to the page layout, Campaign in this case.  Click 'Buttons, Links and Actions' and click the 'New Button or Link' button. 

  
                    
                    &#xD;
    &lt;!--StartFragment--&gt;                                              Give it a label, tab through the name field and give it a description.  Did you get that last bit?  Give it a description!
  
                    
                    &#xD;
    &lt;!--EndFragment--&gt;  &lt;/p&gt;&#xD;
&lt;/div&gt;&#xD;
&lt;div&gt;&#xD;
  &lt;a&gt;&#xD;
    &lt;img src="https://irp-cdn.multiscreensite.com/677b77a5/dms3rep/multi/3db72b7077e6408d8682ccd4b810fe0d-782x294.dm.edit_rIyNCG.jpg" alt="New custom button dialogue" title=""/&gt;&#xD;
  &lt;/a&gt;&#xD;
&lt;/div&gt;&#xD;
&lt;div data-rss-type="text"&gt;&#xD;
  &lt;p&gt;&#xD;
    
                    
                    Where the button code goes, surround your code with
  
                    
                    &#xD;
    &lt;br/&gt;&#xD;
    &lt;br/&gt;&#xD;
    
                    
                    
  if ( {!$Permission.ChimpSync} ) {
  
                    
                    &#xD;
    &lt;br/&gt;&#xD;
    &lt;br/&gt;&#xD;
    
                    
                    
    &amp;lt;-- the code that authorised users get to execute --&amp;gt;
  
                    
                    &#xD;
    &lt;br/&gt;&#xD;
    &lt;br/&gt;&#xD;
    
                    
                    
  else {
  
                    
                    &#xD;
    &lt;br/&gt;&#xD;
    
                    
                    
  alert ("You are a lowly and powerless being.  You are not worthy of The Mighty Custom Permission.  You have no place here.  Be gone.");
  
                    
                    &#xD;
    &lt;br/&gt;&#xD;
    
                    
                    
  }
  
                    
                    &#xD;
    &lt;br/&gt;&#xD;
    &lt;br/&gt;&#xD;
    
                    
                    
  where 'ChimpSync' is what appears in the 'Name' field of your Custom Permission.  If you entered 'My Custom Permission' as the label and tabbed into Name, the Name will be My_Custom_Permission' and the line above would be
  
                    
                    &#xD;
    &lt;br/&gt;&#xD;
    &lt;br/&gt;&#xD;
    &lt;!--StartFragment--&gt;                                              if ( {!$Permission.My_Custom_Permission} ) {
  
                    
                    &#xD;
    &lt;br/&gt;&#xD;
    &lt;!--EndFragment--&gt;    &lt;br/&gt;&#xD;
    
                    
                    
  In my case, I viewed the Campaign custom button 'Synchronize with MailChimp' that is installed with the AppExchange package, copied the JavaScript and pasted it into my own custom button where I took the opportunity to correct the label spelling and called it 'Synchronise with MailChimp'.  The 'if...' statement above goes before the very first line of the pasted code and the 'else...' goes after the very last '}'.
  
                    
                    &#xD;
    &lt;br/&gt;&#xD;
    &lt;br/&gt;&#xD;
    
                    
                    
  If you add your new custom button to the Page Layout(s) now, all users, including system admins, will get the error message.  You may wish to use a more sensitive tone than that adopted above.
  
                    
                    &#xD;
    &lt;br/&gt;&#xD;
    &lt;br/&gt;&#xD;
    
                    
                    
  To authorise users to run the code in the button, either add the Custom Permission to one or more Profiles, or add it to a Permission Set and assign the Permission Set to users.  In my case I used the latter approach:
  
                    
                    &#xD;
    &lt;br/&gt;&#xD;
  &lt;/p&gt;&#xD;
&lt;/div&gt;&#xD;
&lt;div&gt;&#xD;
  &lt;a&gt;&#xD;
    &lt;img src="https://irp-cdn.multiscreensite.com/677b77a5/dms3rep/multi/Capture13-1059x732.JPG" alt="" title=""/&gt;&#xD;
  &lt;/a&gt;&#xD;
&lt;/div&gt;&#xD;
&lt;div data-rss-type="text"&gt;&#xD;
  &lt;p&gt;&#xD;
    
                    
                    Now users with the Custom Permission can use the button.
                  
                  &#xD;
  &lt;/p&gt;&#xD;
&lt;/div&gt;</content:encoded>
      <enclosure url="https://irp-cdn.multiscreensite.com/677b77a5/dms3rep/multi/365ce2c135374f879b4c63c02cdd4855-800x90.dm.edit_sH7mOo.jpg" length="9743" type="image/jpeg" />
      <pubDate>Wed, 04 May 2016 11:34:38 GMT</pubDate>
      <author>mike@mikearthur.net (Mike Arthur)</author>
      <guid>https://www.mikearthur.net/control-access-to-a-custom-button</guid>
      <g-custom:tags type="string" />
      <media:content medium="image" url="https://irp-cdn.multiscreensite.com/677b77a5/dms3rep/multi/365ce2c135374f879b4c63c02cdd4855-800x90.dm.edit_sH7mOo.jpg">
        <media:description>thumbnail</media:description>
      </media:content>
    </item>
    <item>
      <title>The quickest way to manage field level security</title>
      <link>https://www.mikearthur.net/the-quickest-way-to-manage-field-level-security</link>
      <description />
      <content:encoded>&lt;h3&gt;&#xD;
  
                  
                  
  Use schema builder to manage field permissions

                
                &#xD;
&lt;/h3&gt;&#xD;
&lt;div data-rss-type="text"&gt;&#xD;
  &lt;p&gt;&#xD;
    
                    
                    If you need to manage field level security for a lot of fields, it can add up to a lot of clicks if you go via the field definitions or via the profiles.
  
                    
                    &#xD;
    &lt;br/&gt;&#xD;
    &lt;br/&gt;&#xD;
    
                    
                    
  It can be done quickly via schema builder - here's how:
  
                    
                    &#xD;
    &lt;br/&gt;&#xD;
    &lt;br/&gt;&#xD;
    
                    
                    
  In 'Setup Search' type 'Schema':
  
                    
                    &#xD;
    &lt;br/&gt;&#xD;
  &lt;/p&gt;&#xD;
&lt;/div&gt;&#xD;
&lt;div&gt;&#xD;
  &lt;a&gt;&#xD;
    &lt;img src="https://irp-cdn.multiscreensite.com/677b77a5/dms3rep/multi/SB1-226x186.JPG" alt="" title=""/&gt;&#xD;
  &lt;/a&gt;&#xD;
&lt;/div&gt;&#xD;
&lt;div data-rss-type="text"&gt;&#xD;
  &lt;p&gt;&#xD;
    
                    
                    Wait - you don't know what schema builder is?  It is truly wondrous.  Go 
  
                    
                    &#xD;
    &lt;a target="_blank" href="https://developer.salesforce.com/trailhead/en/data_modeling/schema_builder"&gt;&#xD;
      
                      
                      
    here 
  
                    
                    &#xD;
    &lt;/a&gt;&#xD;
    
                    
                    
  to find out more about schema builder.  Please.
  
                    
                    &#xD;
    &lt;br/&gt;&#xD;
    &lt;br/&gt;&#xD;
    
                    
                    
  Ok, where were we?  Oh yes, click 'Clear All' then search for the object whose fields you want to manage:
  
                    
                    &#xD;
    &lt;br/&gt;&#xD;
  &lt;/p&gt;&#xD;
&lt;/div&gt;&#xD;
&lt;div&gt;&#xD;
  &lt;a&gt;&#xD;
    &lt;img src="https://irp-cdn.multiscreensite.com/677b77a5/dms3rep/multi/SB2-675x516.JPG" alt="" title=""/&gt;&#xD;
  &lt;/a&gt;&#xD;
&lt;/div&gt;&#xD;
&lt;div data-rss-type="text"&gt;&#xD;
  &lt;p&gt;&#xD;
    
                    
                    Right click on the field whose permissions you want to alter, click 'Manage Field Permissions' and you can set the permission for each profile:
  
                    
                    &#xD;
    &lt;br/&gt;&#xD;
  &lt;/p&gt;&#xD;
&lt;/div&gt;&#xD;
&lt;div&gt;&#xD;
  &lt;a&gt;&#xD;
    &lt;img src="https://irp-cdn.multiscreensite.com/677b77a5/dms3rep/multi/eca5d73fc6cf4b32a9196fea7779704a-575x744.dm.edit_uQ5wgE.jpg" alt="" title=""/&gt;&#xD;
  &lt;/a&gt;&#xD;
&lt;/div&gt;&#xD;
&lt;div data-rss-type="text"&gt;&#xD;
  &lt;p&gt;&#xD;
    
                    
                    If you need to do this for a lot of custom fields, you don't need to remember which fields are custom and which are standard because if you right click on a standard field you don't get the option to set field permissions, so just blast through them all!
                  
                  &#xD;
  &lt;/p&gt;&#xD;
&lt;/div&gt;&#xD;
&lt;div&gt;&#xD;
  &lt;a&gt;&#xD;
    &lt;img src="https://irp-cdn.multiscreensite.com/677b77a5/dms3rep/multi/SB4-310x270.JPG" alt="" title=""/&gt;&#xD;
  &lt;/a&gt;&#xD;
&lt;/div&gt;</content:encoded>
      <enclosure url="https://irp-cdn.multiscreensite.com/677b77a5/dms3rep/multi/SB1-226x186.JPG" length="6136" type="image/jpeg" />
      <pubDate>Thu, 24 Mar 2016 13:05:17 GMT</pubDate>
      <author>mike@mikearthur.net (Mike Arthur)</author>
      <guid>https://www.mikearthur.net/the-quickest-way-to-manage-field-level-security</guid>
      <g-custom:tags type="string" />
      <media:content medium="image" url="https://irp-cdn.multiscreensite.com/677b77a5/dms3rep/multi/SB1-226x186.JPG">
        <media:description>thumbnail</media:description>
      </media:content>
    </item>
    <item>
      <title>Salesforce for Outlook side panel has disappeared</title>
      <link>https://www.mikearthur.net/salesforce-for-outlook-side-panel-has-disappeared</link>
      <description>What to do when Salesforce for Outlook side panel disappears</description>
      <content:encoded>&lt;h3&gt;&#xD;
  
                  
  Where did my side panel go?

                &#xD;
&lt;/h3&gt;&#xD;
&lt;div data-rss-type="text"&gt;&#xD;
  &lt;p&gt;&#xD;
    
                    I've seen this happen on a number of occasions.  Users are happily syncing away using their Salesforce side panel in Outlook and then one day the side panel is not there.
  
                    &#xD;
    &lt;br/&gt;&#xD;
    &lt;br/&gt;&#xD;
    
                    
  Here's where to look:
  
                    &#xD;
    &lt;br/&gt;&#xD;
    
                    
  (This is in Outlook 2010, other versions will have similar options)
  
                    &#xD;
    &lt;br/&gt;&#xD;
    &lt;br/&gt;&#xD;
  &lt;/p&gt;&#xD;
  &lt;ul&gt;&#xD;
    &lt;li&gt;&#xD;
      
                      
      In Outlook, go to Help, Options, Add ins

    
                    &#xD;
    &lt;/li&gt;&#xD;
    &lt;li&gt;&#xD;
      
                      
      
Look at disabled addins

    
                    &#xD;
    &lt;/li&gt;&#xD;
    &lt;li&gt;&#xD;
      
                      
      
If SF4O is there, click on 'Manage Add ins' at the bottom, choose 'disabled addins' from the dropdown and click 'enable'

    
                    &#xD;
    &lt;/li&gt;&#xD;
  &lt;/ul&gt;&#xD;
  &lt;br/&gt;&#xD;
  
                  
  Restart Outlook and hopefully your side panel is back.
  
                  &#xD;
  &lt;br/&gt;&#xD;
  &lt;br/&gt;&#xD;
  
                  
  Why does it go away?  The 'disabled add ins' section suggests that the add in prevented Outlook from functioning correctly.  So one day, something went wrong and Outlook helpfully disabled your side panel for you.
  
                  &#xD;
  &lt;br/&gt;&#xD;
  &lt;br/&gt;&#xD;
  
                  
  There are some more thoughts on this here:
  
                  &#xD;
  &lt;br/&gt;&#xD;
  &lt;a href="http://blog.emailaddressmanager.com/outlook/outlook-missing-add-in-toolbar.html"&gt;&#xD;
    
                    
    http://blog.emailaddressmanager.com/outlook/outlook-missing-add-in-toolbar.html
  
                  &#xD;
  &lt;/a&gt;&#xD;
  &lt;br/&gt;&#xD;
  &lt;br/&gt;&#xD;
  
                  
  December 2016 - Here's a troubleshooting guide from Salesforce:
  
                  &#xD;
  &lt;br/&gt;&#xD;
  &lt;a href="https://help.salesforce.com/apex/HTViewSolution?urlname=Salesforce-for-Outlook-Side-Panel-fails-to-Load&amp;amp;language=en_US"&gt;&#xD;
    
                    
    https://help.salesforce.com/apex/HTViewSolution?urlname=Salesforce-for-Outlook-Side-Panel-fails-to-L...
  
                  &#xD;
  &lt;/a&gt;&#xD;
  &lt;br/&gt;&#xD;
  &lt;p&gt;&#xD;
  &lt;/p&gt;&#xD;
&lt;/div&gt;</content:encoded>
      <pubDate>Fri, 12 Feb 2016 17:06:56 GMT</pubDate>
      <author>mike@mikearthur.net (Mike Arthur)</author>
      <guid>https://www.mikearthur.net/salesforce-for-outlook-side-panel-has-disappeared</guid>
      <g-custom:tags type="string">Salesforce,for,Outlook,Side,Panel,Disappeared,SF4O,Addin,Add,In,Microsoft,dll,Certified,Consultant,Freelance,Admin,Administrator,Dev,Developer,Edinburgh,Scotland</g-custom:tags>
    </item>
    <item>
      <title>Thunderbird on Linux with Office365</title>
      <link>https://www.mikearthur.net/thunderbird-on-linux-and-office365</link>
      <description />
      <content:encoded>&lt;h3&gt;&#xD;
  
                  
  Intermittent 'Unable to connect to smtp.office365.com'

                &#xD;
&lt;/h3&gt;&#xD;
&lt;div data-rss-type="text"&gt;&#xD;
  &lt;p&gt;&#xD;
    
                    I use Thunderbird on Linux Mint as my main email client and my email is through office365.com.
  
                    &#xD;
    &lt;br/&gt;&#xD;
    &lt;br/&gt;&#xD;
    
                    
  It had been working fine and then recently I kept getting 'unable to connect to smtp.office365.com' which would prevent me from sending emails, but only for short periods of time, no longer than 10 minutes or so and would then be ok again.
  
                    &#xD;
    &lt;br/&gt;&#xD;
    &lt;br/&gt;&#xD;
    
                    
  It became sufficiently frustrating to do something about it and I came across 
  
                    &#xD;
    &lt;a target="_top" href="http://ubuntuforums.org/showthread.php?t=2270096&amp;amp;page=2"&gt;&#xD;
      
                      
    this thread
  
                    &#xD;
    &lt;/a&gt;&#xD;
    
                    
   which suggests that it's the ipv6 setting in Thunderbird.  If your router isn't capable of handling ipv6 then this is a problem.  This would tie in as I recently received a new router from my isp.
  
                    &#xD;
    &lt;br/&gt;&#xD;
    &lt;br/&gt;&#xD;
    
                    
  What you need to do is go into preferences - preferences - click 'congif editor' button - click 'I'll be careful, I promise' (make sure that you are!) - type 'ipv6' in the search box - double click the 'network.dns.disableIPv6' entry to toggle the value to 'true'
  
                    &#xD;
    &lt;br/&gt;&#xD;
    &lt;br/&gt;&#xD;
    
                    
  I've not had a problem since, hope it works for you too.
  
                    &#xD;
    &lt;br/&gt;&#xD;
    &lt;br/&gt;&#xD;
  &lt;/p&gt;&#xD;
&lt;/div&gt;</content:encoded>
      <pubDate>Thu, 28 Jan 2016 16:08:00 GMT</pubDate>
      <author>mike@mikearthur.net (Mike Arthur)</author>
      <guid>https://www.mikearthur.net/thunderbird-on-linux-and-office365</guid>
      <g-custom:tags type="string" />
    </item>
    <item>
      <title>Salesforce Winter '16 Release Training Resources</title>
      <link>https://www.mikearthur.net/salesforce-winter-16-release-training-resources</link>
      <description>Training material for the Salesforce Winter '16 certification maintenance exams</description>
      <content:encoded>&lt;h3&gt;&#xD;
  
                  
                  
  Salesforce certification maintenance exam training material

                
                &#xD;
&lt;/h3&gt;&#xD;
&lt;div&gt;&#xD;
  &lt;a&gt;&#xD;
    &lt;img src="https://irp-cdn.multiscreensite.com/677b77a5/dms3rep/multi/3%20Certifications%20%28small%29-220x72.png" alt="" title=""/&gt;&#xD;
  &lt;/a&gt;&#xD;
&lt;/div&gt;&#xD;
&lt;div data-rss-type="text"&gt;&#xD;
  &lt;p&gt;&#xD;
    
                    
                    I don't recall receiving an 
email alert for the certification maintenance exams for Winter '16 on 
either Admin or Dev certs.  Googling for the training resources only 
revealed that others had noted the same.
  
                    
                    &#xD;
    &lt;br/&gt;&#xD;
    &lt;br/&gt;&#xD;
    
                    
                    
  To save others the time of hunting for the training material, it's here:
  
                    
                    &#xD;
    &lt;br/&gt;&#xD;
    &lt;a target="_blank" href="http://certification.force.com/pkb/articles/Public_KB/Winter-16-Administrator-Release-Exam/?q=winter+16&amp;amp;l=en_US&amp;amp;fs=Search&amp;amp;pn=1"&gt;&#xD;
      
                      
                      
    Winter ‘16 Administrator Release Exam
  
                    
                    &#xD;
    &lt;/a&gt;&#xD;
    &lt;br/&gt;&#xD;
    &lt;span&gt;&#xD;
      &lt;a target="_top" href="http://certification.force.com/pkb/articles/Public_KB/Winter-16-Developer-Release-Exam/?q=winter+16&amp;amp;l=en_US&amp;amp;fs=Search&amp;amp;pn=1"&gt;&#xD;
        
                        
                        
      Winter ‘16 Developer Release Exam
    
                      
                      &#xD;
      &lt;/a&gt;&#xD;
      &lt;b&gt;&#xD;
        &lt;br/&gt;&#xD;
        &lt;br/&gt;&#xD;
      &lt;/b&gt;&#xD;
    &lt;/span&gt;&#xD;
    
                    
                    
  The modules are listed here:
  
                    
                    &#xD;
    &lt;br/&gt;&#xD;
    &lt;a target="_blank" href="https://help.salesforce.com/HTTrainingModulesDetail?courseId=a1S300000032xGB"&gt;&#xD;
      
                      
                      
    Winter '16 Release Training for Certified Professionals
  
                    
                    &#xD;
    &lt;/a&gt;&#xD;
    &lt;br/&gt;&#xD;
  &lt;/p&gt;&#xD;
&lt;/div&gt;</content:encoded>
      <enclosure url="https://irp-cdn.multiscreensite.com/677b77a5/dms3rep/multi/3%20Certifications%20%28small%29-220x72.png" length="3980" type="image/png" />
      <pubDate>Mon, 04 Jan 2016 00:00:00 GMT</pubDate>
      <author>mike@mikearthur.net (Mike Arthur)</author>
      <guid>https://www.mikearthur.net/salesforce-winter-16-release-training-resources</guid>
      <g-custom:tags type="string">salesforce,certification,maintenance,exam,certified,administrator,admin,developer,dev,adm201,adm401,winter,16,'16,freelance,consultant,edinburgh,scotland,training,resources</g-custom:tags>
      <media:content medium="image" url="https://irp-cdn.multiscreensite.com/677b77a5/dms3rep/multi/3%20Certifications%20%28small%29-220x72.png">
        <media:description>thumbnail</media:description>
      </media:content>
    </item>
    <item>
      <title>Relative Dates in Reports</title>
      <link>https://www.mikearthur.net/relative-dates-in-reports</link>
      <description>Did you know that if you filter a Salesforce report by 'Date Field' equals 'last 3 months', you won't see data where 'Date Field' is this month?</description>
      <content:encoded>&lt;h3&gt;&#xD;
  
                  
  Check that you're returning all the data that you think you are!

                &#xD;
&lt;/h3&gt;&#xD;
&lt;div data-rss-type="text"&gt;&#xD;
  &lt;p&gt;&#xD;
    
                    Did you know that if you filter a report by 'Date Field' equals 'last 3 months', you won't see data where 'Date Field' is this month?
  
                    &#xD;
    &lt;br/&gt;&#xD;
    &lt;br/&gt;&#xD;
    
                    
  I found this out when my report wasn't returning everything that I expected to see.
  
                    &#xD;
    &lt;br/&gt;&#xD;
    &lt;br/&gt;&#xD;
    
                    
  The range for the relative date filter 
  
                    &#xD;
    &lt;span&gt;&#xD;
      &lt;span&gt;&#xD;
        
                        
      'LAST 
      
                        &#xD;
        &lt;em&gt;&#xD;
          
                          
        n
      
                        &#xD;
        &lt;/em&gt;&#xD;
        
                        
                                                         MONTHS
    
                      &#xD;
      &lt;/span&gt;&#xD;
    &lt;/span&gt;&#xD;
    
                    
  ' is '
  
                    &#xD;
    &lt;span&gt;&#xD;
      &lt;span&gt;&#xD;
        
                        
      Starts
 at 12:00:00 AM                                                   on the
 first day of the month that started                                    
               
      
                        &#xD;
        &lt;em&gt;&#xD;
          
                          
        n
      
                        &#xD;
        &lt;/em&gt;&#xD;
        
                        
       months before the current month 
and                                                   continues up to 
11:59 PM on the 
      
                        &#xD;
        &lt;i&gt;&#xD;
          
                          
        last day of the                                         
          month before the current month
      
                        &#xD;
        &lt;/i&gt;&#xD;
        
                        
      .
    
                      &#xD;
      &lt;/span&gt;&#xD;
    &lt;/span&gt;&#xD;
    
                    
  ' (my italics).
  
                    &#xD;
    &lt;br/&gt;&#xD;
    &lt;br/&gt;&#xD;
    
                    
  Be sure to read the range definitions carefully to ensure that your reports return everything that you expect.
  
                    &#xD;
    &lt;br/&gt;&#xD;
    &lt;br/&gt;&#xD;
    
                    
  You can find all the relative date filters defined 
  
                    &#xD;
    &lt;a target="_top" href="https://help.salesforce.com/apex/HTViewHelpDoc?id=custom_dates.htm"&gt;&#xD;
      
                      
    here
  
                    &#xD;
    &lt;/a&gt;&#xD;
    
                    
  .
  
                    &#xD;
    &lt;br/&gt;&#xD;
    &lt;br/&gt;&#xD;
    
                    
  In order to show records where 'Date Field' is from the first of the month up to and including this month, I changed my filter to '
  
                    &#xD;
    &lt;span&gt;&#xD;
      
                      
    Last Modified Date
  
                    &#xD;
    &lt;/span&gt;&#xD;
    &lt;span&gt;&#xD;
      
                      
    equals
  
                    &#xD;
    &lt;/span&gt;&#xD;
    &lt;span&gt;&#xD;
      
                      
    LAST 3 MONTHS,THIS MONTH
  
                    &#xD;
    &lt;/span&gt;&#xD;
    
                    
  ', i.e. the last 3 months or this month.
  
                    &#xD;
    &lt;br/&gt;&#xD;
  &lt;/p&gt;&#xD;
&lt;/div&gt;</content:encoded>
      <pubDate>Mon, 21 Dec 2015 10:26:39 GMT</pubDate>
      <author>mike@mikearthur.net (Mike Arthur)</author>
      <guid>https://www.mikearthur.net/relative-dates-in-reports</guid>
      <g-custom:tags type="string">Salesforce,report,relative,date,filter,freelance,consultant,edinburgh,scotland,admin,administrator,certified,adm201</g-custom:tags>
    </item>
    <item>
      <title>Maximum length of a formula field</title>
      <link>https://www.mikearthur.net/maximum-length-of-a-formula-field</link>
      <description>How many characters can my formula field run to?  Salesforce has recently updated the formula field length limitations...</description>
      <content:encoded>&lt;h3&gt;&#xD;
  
                  
  How many characters can I have in a formula field?

                &#xD;
&lt;/h3&gt;&#xD;
&lt;div data-rss-type="text"&gt;&#xD;
  &lt;p&gt;&#xD;
    
                    Previously, Salesforce help told us that a formula field could be up to 3,900 characters, or 5,000 characters when referenced formulae were included.
  
                    &#xD;
    &lt;br/&gt;&#xD;
    &lt;br/&gt;&#xD;
    
                    
  The help has recently been updated, Winter '16 perhaps though I don't see anything in the release notes.
  
                    &#xD;
    &lt;br/&gt;&#xD;
    &lt;br/&gt;&#xD;
    
                    
  It is now 3,900 characters, or 5,000 
  
                    &#xD;
    &lt;i&gt;&#xD;
      
                      
    bytes
  
                    &#xD;
    &lt;/i&gt;&#xD;
    
                    
   when compiled.  Unfortunately there is no way to predict the compiled size.
  
                    &#xD;
    &lt;br/&gt;&#xD;
    &lt;br/&gt;&#xD;
    
                    
  Have a look at the official help on 
  
                    &#xD;
    &lt;a target="_blank" href="https://help.salesforce.com/HTViewHelpDoc?id=formula_field_limits.htm&amp;amp;language=en_US"&gt;&#xD;
      
                      
    Formula Field Limits and Restrictions
  
                    &#xD;
    &lt;/a&gt;&#xD;
    
                    
  .  Salesforce also provides a 
  
                    &#xD;
    &lt;a target="_blank" href="http://resources.docs.salesforce.com/198/15/en-us/sfdc/pdf/salesforce_formula_size_tipsheet.pdf"&gt;&#xD;
      
                      
    Tips for Reducing Formula Size
  
                    &#xD;
    &lt;/a&gt;&#xD;
    
                    
  .
  
                    &#xD;
    &lt;br/&gt;&#xD;
    &lt;br/&gt;&#xD;
  &lt;/p&gt;&#xD;
&lt;/div&gt;</content:encoded>
      <pubDate>Thu, 17 Dec 2015 10:59:57 GMT</pubDate>
      <author>mike@mikearthur.net (Mike Arthur)</author>
      <guid>https://www.mikearthur.net/maximum-length-of-a-formula-field</guid>
      <g-custom:tags type="string">salesforce,admin,administrator,dev,developer,edinburgh,scotland,freelance,consultant,formula,field,length,characters,bytes,winter,16</g-custom:tags>
    </item>
    <item>
      <title>Enhanced Enhanced Lookups in Salesforce</title>
      <link>https://www.mikearthur.net/salesforce-enhanced-enhanced-lookups</link>
      <description>How can you make a lookup search a bit more like a Salesforce picklist?  Here's a handy little trick to help your users when they don't know what to search for.</description>
      <content:encoded>&lt;h3&gt;&#xD;
  
                  
  Here's a little trick to make Enhanced Lookups even more user friendly

                &#xD;
&lt;/h3&gt;&#xD;
&lt;div data-rss-type="text"&gt;&#xD;
  &lt;p&gt;&#xD;
    
                    This applies to both Salesforce Classic and Lightning...
  
                    &#xD;
    &lt;br/&gt;&#xD;
    &lt;br/&gt;&#xD;
    
                    
  I had developed some new functionality for a customer and we were reviewing how it worked.  One of the fields to be completed was a lookup field on a custom object.  As this was new functionality, users wouldn't know what values are available in the lookup, and hence what to search for, and they asked if it could be a picklist so that they could see the possible values.  As a picklist wasn't suitable in this case, I decided to look into it in more depth.
  
                    &#xD;
    &lt;br/&gt;&#xD;
    &lt;br/&gt;&#xD;
    
                    
  Firstly, I dug into the differences between Standard Lookups and Enhanced Lookups - you can see that 
  
                    &#xD;
    &lt;a target="_top" href="https://help.salesforce.com/apex/HTViewHelpDoc?id=search_lookupdialog.htm&amp;amp;language=en_US"&gt;&#xD;
      
                      
    here
  
                    &#xD;
    &lt;/a&gt;&#xD;
    
                    
  .
  
                    &#xD;
    &lt;br/&gt;&#xD;
    &lt;br/&gt;&#xD;
    
                    
  Finding out which fields are searchable proved tricky in itself but I eventually managed to find out which fields on a custom object are searchable 
  
                    &#xD;
    &lt;a target="_top" href="https://help.salesforce.com/HTViewHelpDoc?id=search_fields_custom_object.htm&amp;amp;language=en_US"&gt;&#xD;
      
                      
    here
  
                    &#xD;
    &lt;/a&gt;&#xD;
    
                    
  .
  
                    &#xD;
    &lt;br/&gt;&#xD;
    &lt;br/&gt;&#xD;
    
                    
  There is plenty of documentation on how to edit search 
  
                    &#xD;
    &lt;i&gt;&#xD;
      
                      
    layouts
  
                    &#xD;
    &lt;/i&gt;&#xD;
    
                    
  , but remember, that only affects the display, not the fields that are searched.  Turns out that there is very little control over which fields are actually searchable as  the above link shows.
  
                    &#xD;
    &lt;br/&gt;&#xD;
    &lt;br/&gt;&#xD;
    
                    
  The feature that I took advantage of to make my enhanced lookup more 'picklist' like was the fact that when 'Enhanced Lookups' are enabled for the custom object, custom text fields are searched if the user clicks the 'All Fields' radio button on the Lookup Search dialogue.
  
                    &#xD;
    &lt;br/&gt;&#xD;
    &lt;br/&gt;&#xD;
    
                    
  To enable Enhanced Lookups, type 'Search Settings' in the Quick Find box in Setup and click on 'Search Settings'. There you will find settings for each object.
  
                    &#xD;
    &lt;br/&gt;&#xD;
    &lt;br/&gt;&#xD;
    
                    
  I added a custom field to the custom object which is the subject of the lookup search and called it 'Search Me'.  It is visible to all profiles but not displayed on any page layouts.  I gave it a default value of 'All'.
  
                    &#xD;
    &lt;br/&gt;&#xD;
    &lt;br/&gt;&#xD;
    
                    
  To update all existing records I went to an 'All' list view for the custom object, included the field 'Search Me' as a column, ticked the checkbox at the top of the column on the left to select all records, double-clicked 'Search Me', chose 'update all selected' and set the value to 'All'.  To do this you need to bring the 'Search Me' field on to a page layout temporarily so that it is inline editable.  If the field is not on a page layout you can't edit it inline in a list view.  If you have a large number of existing records you may prefer to use a data manipulation tool such as Data Loader or dataloader.io to update them all.
  
                    &#xD;
    &lt;br/&gt;&#xD;
    &lt;br/&gt;&#xD;
    
                    
  Now, when a user gets to the lookup search and they don't know what to search for, the pop up help text on the field tells them to enter 'All' in the search box, click 'All Fields' and click 'Go'.  When they do this, hey presto, all records are returned.  The number of records on each result page can be set in the 'Search Settings' mentioned above.  
  
                    &#xD;
    &lt;br/&gt;&#xD;
    &lt;br/&gt;&#xD;
    
                    
  With Lightning, you just enter 'All' in the search box, click to search and you get an infinitely scrolling list of results.
  
                    &#xD;
    &lt;br/&gt;&#xD;
    &lt;br/&gt;&#xD;
    
                    
  Hopefully this makes it a little bit easier to use and hence more likely to be used.
  
                    &#xD;
    &lt;br/&gt;&#xD;
  &lt;/p&gt;&#xD;
&lt;/div&gt;</content:encoded>
      <pubDate>Mon, 30 Nov 2015 15:34:25 GMT</pubDate>
      <author>mike@mikearthur.net (Mike Arthur)</author>
      <guid>https://www.mikearthur.net/salesforce-enhanced-enhanced-lookups</guid>
      <g-custom:tags type="string">salesforce,enhanced,lookup,search,picklist,custom,object,field,setup,settings,freelance,consultant,edinburgh,scotland,admin,administrator,dev,developer</g-custom:tags>
    </item>
    <item>
      <title>Extend Your Analytics Brilliance With The Power of One</title>
      <link>https://www.mikearthur.net/extend-your-analytics-brilliance-with-the-power-of-one</link>
      <description>The Power of One is an incredibly powerful formula that you can use to get even more information out of your reports.  Don't be put off by its complexity...</description>
      <content:encoded>&lt;h3&gt;&#xD;
  
                  
  Here's a neat analytics trick

                &#xD;
&lt;/h3&gt;&#xD;
&lt;div data-rss-type="text"&gt;&#xD;
  &lt;p&gt;&#xD;
  &lt;/p&gt;&#xD;
  &lt;p&gt;&#xD;
    
                    
    Ok, I freely admit that many of the articles that I post are 
selfishly for myself, so that in 6 months time when I have a 'now I did 
that 6 months ago, how did I do it' moment, I can refer back here.  This
 is one of those.
  
                  &#xD;
  &lt;/p&gt;&#xD;
  &lt;p&gt;&#xD;
    
                    
    If you need averages based on sub-grouping record counts in your reports then you need to know about 
    
                    &#xD;
    &lt;a href="http://www.adminhero.com/power-of-one-the-most-brilliant-analytics-trick-of-all-time/"&gt;&#xD;
      
                      
      The Power of One
    
                    &#xD;
    &lt;/a&gt;&#xD;
    
                    
    .
  
                  &#xD;
  &lt;/p&gt;&#xD;
  &lt;p&gt;&#xD;
    
                    
    Many thanks to Brent Downey at adminhero.com.
  
                  &#xD;
  &lt;/p&gt;&#xD;
  &lt;span&gt;&#xD;
    
                    
    ﻿
  
                  &#xD;
  &lt;/span&gt;&#xD;
  &lt;p&gt;&#xD;
  &lt;/p&gt;&#xD;
&lt;/div&gt;</content:encoded>
      <pubDate>Thu, 22 Oct 2015 00:00:00 GMT</pubDate>
      <author>mike@mikearthur.net (Mike Arthur)</author>
      <guid>https://www.mikearthur.net/extend-your-analytics-brilliance-with-the-power-of-one</guid>
      <g-custom:tags type="string">power,of,one,reports,dashboards,analytics,summary,grouping,count,salesforce,freelance,consultant,edinburgh,scotland,admin,administrator,dev,developer</g-custom:tags>
    </item>
    <item>
      <title>Data Loader Time Zone</title>
      <link>https://www.mikearthur.net/data-loader-time-zone</link>
      <description>If you import data into Salesforce and your date fields show a different date to what you imported, check your data loader time zone...</description>
      <content:encoded>&lt;h3&gt;&#xD;
  
                  
  When dates don't display what you entered or imported

                &#xD;
&lt;/h3&gt;&#xD;
&lt;div data-rss-type="text"&gt;&#xD;
  &lt;p&gt;&#xD;
  &lt;/p&gt;&#xD;
  &lt;p&gt;&#xD;
    
                    
    Had a strange one today - I used Data Loader to import some Contract records, including Start Date and End Date.
  
                  &#xD;
  &lt;/p&gt;&#xD;
  &lt;p&gt;&#xD;
    
                    
    With
 my 1 row test import the dates showed in Salesforce as 1 day earlier 
than the date in the csv file.  I had a look at csv date formats but 
that didn't fix it.
  
                  &#xD;
  &lt;/p&gt;&#xD;
  &lt;p&gt;&#xD;
    
                    
    The Start Date and End Date fields are 'Date' type and not 'Date/Time' so that wasn't it either.
  
                  &#xD;
  &lt;/p&gt;&#xD;
  &lt;p&gt;&#xD;
    
                    
    In
 the interests of just getting the job done I added a day to the date in
 the import test file and, after loading, the dates in Salesforce were 
as intended.
  
                  &#xD;
  &lt;/p&gt;&#xD;
  &lt;p&gt;&#xD;
    
                    
    I applied this to the full import file and loaded the
 data.  The result was that in Salesforce, some of the dates were as 
intended and some were a day later than intended!  I deleted the 
imported records.
  
                  &#xD;
  &lt;/p&gt;&#xD;
  &lt;p&gt;&#xD;
    
                    
    After more poking around I came to Data Loader 
Time Zone in the Settings menu.  Mine was set to 'Europe/London'.  I 
changed it to 'GMT' and reran the test import file using the original 
date in the file.  Success!
  
                  &#xD;
  &lt;/p&gt;&#xD;
  &lt;p&gt;&#xD;
    
                    
    Loaded the original full import file with the dates that were intended and all loaded correctly.
  
                  &#xD;
  &lt;/p&gt;&#xD;
  &lt;p&gt;&#xD;
    
                    
    Can't
 explain that one, British Summer Time possibly a factor, but if you're 
having strange things happening with dates in Data Loader, have a look 
at the Time Zone setting.
  
                  &#xD;
  &lt;/p&gt;&#xD;
  &lt;span&gt;&#xD;
    
                    
    ﻿
  
                  &#xD;
  &lt;/span&gt;&#xD;
  &lt;p&gt;&#xD;
  &lt;/p&gt;&#xD;
&lt;/div&gt;</content:encoded>
      <pubDate>Fri, 11 Sep 2015 16:01:06 GMT</pubDate>
      <author>mike@mikearthur.net (Mike Arthur)</author>
      <guid>https://www.mikearthur.net/data-loader-time-zone</guid>
      <g-custom:tags type="string">salesforce,admin,administrator,dev,developer,data,loader,time,zone,date,field,edinburgh,scotland,freelance,consultant</g-custom:tags>
    </item>
    <item>
      <title>The New Salesforce - Struck by Lightning</title>
      <link>https://www.mikearthur.net/the-new-salesforce-struck-by-lightning</link>
      <description>Salesforce introduces a brand new visual experience - the Lightning Experience!</description>
      <content:encoded>&lt;h3&gt;&#xD;
  
                  
  Salesforce to get a major makeover

                &#xD;
&lt;/h3&gt;&#xD;
&lt;div data-rss-type="text"&gt;&#xD;
  &lt;p&gt;&#xD;
  &lt;/p&gt;&#xD;
  &lt;p&gt;&#xD;
    
                    
    Just finished watching the launch of the New Salesforce.
  
                  &#xD;
  &lt;/p&gt;&#xD;
  &lt;p&gt;&#xD;
    
                    
    A new Lightning based interface will be available with the Winter '16 release. 
  
                  &#xD;
  &lt;/p&gt;&#xD;
  &lt;p&gt;&#xD;
    
                    
    It has the look and feel of the Salesforce1 UI as it is built around Lightning components.
  
                  &#xD;
  &lt;/p&gt;&#xD;
  &lt;p&gt;&#xD;
    
                    
    A lot of thought and development effort has gone into improving productivity and making the user experience smoother.
  
                  &#xD;
  &lt;/p&gt;&#xD;
  &lt;p&gt;&#xD;
    
                    
    Navigation across objects changes from tabs to a SF1 style sidebar and there are more customisation options for the home page.
  
                  &#xD;
  &lt;/p&gt;&#xD;
  &lt;p&gt;&#xD;
    
                    
    Opportunities
 focus on sales stages and activities.  A timeline shows the activities 
that have taken place on an opportunity whilst the Opportunity Workspace
 displays opportunities as cards arranged in columns based on stage so 
you can view all opportunities by stage and drag the cards between 
columns to change stage.
  
                  &#xD;
  &lt;/p&gt;&#xD;
  &lt;p&gt;&#xD;
    
                    
    Reports and dashboards have also had a 
major overhaul.  Dashboards can now contain more than 3 columns and rows
 don't all have to contain the same number of columns.  The look of the 
components has been brought up to date and also includes animations.
  
                  &#xD;
  &lt;/p&gt;&#xD;
  &lt;p&gt;&#xD;
    
                    
    You
 can choose whether to enable it or not and roll it out to users based 
on profile or permission set.  Salesforce will continue to support the 
Classic, i.e. current, interface.
  
                  &#xD;
  &lt;/p&gt;&#xD;
  &lt;p&gt;&#xD;
    
                    
    The beauty of the Salesforce 
platform is that customisations to existing systems will carry through 
to the new interface.  There was however a comment that all Visualforce 
pages should be tested in the new interface to confirm that they work as
 intended.
  
                  &#xD;
  &lt;/p&gt;&#xD;
  &lt;p&gt;&#xD;
    
                    
    Trailhead has a new Lightning module to help prepare for this, have a look at trailhead.salesforce.com.
  
                  &#xD;
  &lt;/p&gt;&#xD;
  &lt;p&gt;&#xD;
    
                    
    Can't
 wait to get my hands on this.  Previews are available in sandbox and 
the new interface will be available in production with the Winter'16 
release.  Check out the release schedule for your instance at 
trust.salesforce.com.
  
                  &#xD;
  &lt;/p&gt;&#xD;
  &lt;span&gt;&#xD;
    
                    
    ﻿
  
                  &#xD;
  &lt;/span&gt;&#xD;
  &lt;p&gt;&#xD;
  &lt;/p&gt;&#xD;
&lt;/div&gt;</content:encoded>
      <pubDate>Wed, 26 Aug 2015 00:00:00 GMT</pubDate>
      <author>mike@mikearthur.net (Mike Arthur)</author>
      <guid>https://www.mikearthur.net/the-new-salesforce-struck-by-lightning</guid>
      <g-custom:tags type="string">salesforce,admin,administrator,dev,developer,freelance,consultant,edinburgh,scotland,lightning,experience</g-custom:tags>
    </item>
    <item>
      <title>Passing the Certified Developer Exam</title>
      <link>https://www.mikearthur.net/passing-certified-developer-exam</link>
      <description>Should you invest time and money to become Salesforce certified? Here's what I think...</description>
      <content:encoded>&lt;h3&gt;&#xD;
  
                  
  How I (successfully) prepared for the Certified Developer Exam

                &#xD;
&lt;/h3&gt;&#xD;
&lt;div data-rss-type="text"&gt;&#xD;
  &lt;p&gt;&#xD;
  &lt;/p&gt;&#xD;
  &lt;p&gt;&#xD;
    
                    
    I'm delighted to have earned the right to call myself a 'Certified 
Force.com Developer' today so I thought I would share what I consider to
 be some of the key aspects of preparing for the exam.
  
                  &#xD;
  &lt;/p&gt;&#xD;
  &lt;p&gt;&#xD;
    
                    
    A lot of 
the core content is similar to the Certified Administrator, particularly
 around security and 'who sees what' - profiles, permission sets, org 
wide defaults, roles, sharing rules and so on.  The 'Development' 
aspects are mainly concerned with the declarative capabilities of the 
platform, i.e. what can be configured with clicks.  That focusses on 
Workflow, Validation Rules and Approval Processes.  You don't need to be
 a programmer to pass this exam - knowledge of Apex and Visualforce only
 extends to 'Use Cases', there is no requirement to be able to write 
Apex or Visualforce code.
  
                  &#xD;
  &lt;/p&gt;&#xD;
  &lt;p&gt;&#xD;
    
                    
    The full Study Guide is available 
    
                    &#xD;
    &lt;a href="http://certification.salesforce.com/SG_CertifiedDeveloper.pdf"&gt;&#xD;
      
                      
      here
    
                    &#xD;
    &lt;/a&gt;&#xD;
    
                    
    .
  
                  &#xD;
  &lt;/p&gt;&#xD;
  &lt;p&gt;&#xD;
    
                    
    As for preparation, 
    
                    &#xD;
    &lt;a href="https://developer.salesforce.com/trailhead"&gt;&#xD;
      
                      
      Trailhead
    
                    &#xD;
    &lt;/a&gt;&#xD;
    
                    
     and the 
    
                    &#xD;
    &lt;a href="https://developer.salesforce.com/page/Force.com_workbook"&gt;&#xD;
      
                      
      Force.com Workbook
    
                    &#xD;
    &lt;/a&gt;&#xD;
    
                    
     got me through.  '
    
                    &#xD;
    &lt;a href="https://developer.salesforce.com/trailhead/trail/force_com_dev_beginner"&gt;&#xD;
      
                      
      Developer Trail - Beginner
    
                    &#xD;
    &lt;/a&gt;&#xD;
    
                    
    '
 covers a lot of the material in the Study Guide.  Work through the 
exercises in each whilst remaining cogniscent of the subjects in the 
Study Guide.
  
                  &#xD;
  &lt;/p&gt;&#xD;
  &lt;p&gt;&#xD;
    
                    
    Working through those resources gave me a lot of new 
and useful knowledge, some of it in areas not required for the exam but 
useful nonetheless, such as configuring the Salesforce1 mobile interface
 and also Visual Workflow.  The '
    
                    &#xD;
    &lt;a href="https://resources.docs.salesforce.com/sfdc/pdf/workbook_flow.pdf"&gt;&#xD;
      
                      
      Cloud Flow Workbook
    
                    &#xD;
    &lt;/a&gt;&#xD;
    
                    
    ' is next on my hitlist.
  
                  &#xD;
  &lt;/p&gt;&#xD;
  &lt;p&gt;&#xD;
    
                    
    If you already have the Admin Certification, Developer shouldn't be a stretch.  Experience is key - get your own (free) 
    
                    &#xD;
    &lt;a href="https://developer.salesforce.com/signup"&gt;&#xD;
      
                      
      Developer Environment
    
                    &#xD;
    &lt;/a&gt;&#xD;
    
                    
    , complete the challenges in Trailhead, visit the pages described in the text, press buttons and do stuff!
  
                  &#xD;
  &lt;/p&gt;&#xD;
  &lt;p&gt;&#xD;
    
                    
    Prepare - Play - Pass - Go do it!
  
                  &#xD;
  &lt;/p&gt;&#xD;
  &lt;span&gt;&#xD;
    
                    
    ﻿
  
                  &#xD;
  &lt;/span&gt;&#xD;
  &lt;p&gt;&#xD;
  &lt;/p&gt;&#xD;
&lt;/div&gt;</content:encoded>
      <pubDate>Sun, 19 Jul 2015 00:00:00 GMT</pubDate>
      <author>mike@mikearthur.net (Mike Arthur)</author>
      <guid>https://www.mikearthur.net/passing-certified-developer-exam</guid>
      <g-custom:tags type="string">salesforce,certified,admin,administrator,adm201,dev,developer,adm401,edinburgh,scotland,freelance,consultant</g-custom:tags>
    </item>
    <item>
      <title>Trailhead</title>
      <link>https://www.mikearthur.net/trailhead</link>
      <description>Looking for a free resource to teach yourself Salesforce?  Trailhead is the place to go...</description>
      <content:encoded>&lt;h3&gt;&#xD;
  
                  
  The best way to learn Salesforce

                &#xD;
&lt;/h3&gt;&#xD;
&lt;div data-rss-type="text"&gt;&#xD;
  &lt;p&gt;&#xD;
  &lt;/p&gt;&#xD;
  &lt;p&gt;&#xD;
    
                    
    According
 to Wikipedia, "a trailhead is the point at which a trail begins, where 
the trail is often intended for hiking, biking, horseback riding, or 
off-road vehicles".  Or learning Salesforce skills. In a structured 
way.  For free.  Yippee - how cool is that!
    
                    &#xD;
    &lt;br/&gt;&#xD;
    &lt;br/&gt;&#xD;
    
                    
    I
 recently had a scenario where we needed to simplify the way that we 
achieved a business process in Salesforce in order to improve user 
adoption.  The way I had in mind would require custom screen layouts.  
Having written BASIC code (go look it up!) as a teenager and COBOL in my
 first job (a long time ago!) I thought I would dust off the coding 
corner in my brain and learn Visualforce, Salesforce's programming 
language for creating custom pages.
    
                    &#xD;
    &lt;br/&gt;&#xD;
    &lt;br/&gt;&#xD;
    
                    
    I
 had heard of Salesforce's Trailhead online learning resources so went 
to check out it out.  Turns out there's a whole host of training 
material available there, for free, covering everything from the basics 
to advanced topics.  
    
                    &#xD;
    &lt;br/&gt;&#xD;
    &lt;br/&gt;&#xD;
    
                    
    There's
 'Reports and Dashboards', 'Chatter Basics', how to customise pages 
using clicks not code, 'Data Security' and a whole lot more.  If you 
want to know how to write Apex Triggers or Visualforce, that's there 
too.  As well as technical topics, there are business topics like 
'Application Lifecycle Management' and 'Change Management'.
    
                    &#xD;
    &lt;br/&gt;&#xD;
    &lt;br/&gt;&#xD;
    
                    
    If you're just starting out, don't be put off by the fact that it's in the developer's area - head over to 
    
                    &#xD;
    &lt;a href="https://developer.salesforce.com/trailhead"&gt;&#xD;
      
                      
      developer.salesforce.com/trailhead
    
                    &#xD;
    &lt;/a&gt;&#xD;
    
                    
     and start learning.  I would recommend signing up for a free Developer Edition org (find out what this is and sign up for one 
    
                    &#xD;
    &lt;a href="https://developer.salesforce.com/page/Developer_Edition"&gt;&#xD;
      
                      
      here
    
                    &#xD;
    &lt;/a&gt;&#xD;
    
                    
    ) and then you can complete the exercises on Trailhead in your own org and collect points and badges for completing challenges.
    
                    &#xD;
    &lt;br/&gt;&#xD;
    &lt;br/&gt;&#xD;
    
                    
    Happy Learning!
  
                  &#xD;
  &lt;/p&gt;&#xD;
  &lt;p&gt;&#xD;
    
                    
    (Update - Setptember 2015 - There are now 65 modules to work through, including how to do Dreamforce.)
    
                    &#xD;
    &lt;br/&gt;&#xD;
  &lt;/p&gt;&#xD;
  &lt;p&gt;&#xD;
  &lt;/p&gt;&#xD;
&lt;/div&gt;</content:encoded>
      <pubDate>Sun, 21 Jun 2015 00:00:00 GMT</pubDate>
      <author>mike@mikearthur.net (Mike Arthur)</author>
      <guid>https://www.mikearthur.net/trailhead</guid>
      <g-custom:tags type="string">salesforce,admin,administrator,dev,developer,freelance,consultant,edinburgh,scotland,learn,teach,trailhead</g-custom:tags>
    </item>
    <item>
      <title>Should I Go For Salesforce Certification?</title>
      <link>https://www.mikearthur.net/salesforce-certification</link>
      <description>Should I Go For Salesforce Certification?</description>
      <content:encoded>&lt;h3&gt;&#xD;
  
                  
  What are the benefits of achieving Salesforce certification?

                &#xD;
&lt;/h3&gt;&#xD;
&lt;div&gt;&#xD;
  &lt;a&gt;&#xD;
    &lt;img src="//dd-cdn.multiscreensite.com/blog/blog_post_image.png" alt="" title=""/&gt;&#xD;
  &lt;/a&gt;&#xD;
&lt;/div&gt;&#xD;
&lt;div data-rss-type="text"&gt;&#xD;
  &lt;p&gt;&#xD;
    
                    Having
 been a Salesforce Administrator for over 6 years in the same company I 
hadn't really considered this until I decided to go it alone.  I thought
 I was pretty knowledgeable about most areas of Salesforce having used 
most of the items under the 'Setup' menu.  Having applied for a few 
roles unsuccessfully I then began to think about Certification from the 
perspective of a credential which would improve my chances of securing a
 role.
  
                    &#xD;
    &lt;br/&gt;&#xD;
    &lt;br/&gt;&#xD;
    
                    
  'Certified
 Administrator' is the first level of qualification and the topics 
covered in the exam can change with each release of Salesforce (there 
are three each year  - Spring, Summer and Winter followed by the year, 
e.g. Spring '15).  The topics covered by the current exam can be found 
on the Certification page 
  
                    &#xD;
    &lt;a href="http://certification.salesforce.com/administrators"&gt;&#xD;
      
                      
    here
  
                    &#xD;
    &lt;/a&gt;&#xD;
    
                    
  .
  
                    &#xD;
    &lt;br/&gt;&#xD;
    &lt;br/&gt;&#xD;
    
                    
  At
 the time of writing, the exam costs $200 USD to sit and consists of 60 
multiple choice questions to be answered in 90 mins.  The passmark is 
65%.  The exam can be taken at a testing centre or at your desk, in 
which case you need a webcam and will be monitored during the exam.  No 
books or online help is allowed.
  
                    &#xD;
    &lt;br/&gt;&#xD;
    &lt;br/&gt;&#xD;
    
                    
  Though
 the questions are multiple choice, the possible answers are cleverly 
constructed so you really do have to know your stuff to ensure that you 
get it right.  Answers can be 'marked' for review so that you can 
revisit them at the end before submitting your answers.  When you submit
 your answers you get an immediate pass/fail notification with no 
indication of your actual score.
  
                    &#xD;
    &lt;br/&gt;&#xD;
    &lt;br/&gt;&#xD;
    
                    
  In
 all honesty it was harder than I expected it to be and I realised that I
 didn't know as much beforehand as I thought I did.  Experience with the
 subject areas is the key to passing this exam.  The areas that I found 
hardest were ones where I didn't have real experience, such as console 
functionality.  Though it is possble to pass by sitting down and reading
 the help documents cover to cover, if I were to go for one of the 
Service Cloud Certifications, I would spend time in my free developer 
org, playing with the areas that I am less familiar with in order to 
develop a real understanding, rather than simply learning a bunch of 
facts.
  
                    &#xD;
    &lt;br/&gt;&#xD;
    &lt;br/&gt;&#xD;
    
                    
  Once
 you have passed the exam, you then need to pass 'maintenance' exams for
 each of the releases mentioned above throughout the year in order to 
keep the certification.  There is no additional cost for taking these 
and they are open book, i.e. you take them at your desk, unsupervised 
and can use whatever resources you need.  So far I haven't found them to
 be particularly onerous.  Though the 'Release Notes' pdf for a release 
may be several hundred pages long, the exam notes point you to 2-3 hours
 of videos that cover the subjects to be tested and the exam only takes 
30 minutes.
  
                    &#xD;
    &lt;br/&gt;&#xD;
    &lt;br/&gt;&#xD;
    
                    
  So
 are there real benefits to putting yourself through all this?  
Absolutely yes.  I learnt a lot in doing the initial Certified 
Administrator exam and the 'maintenance' exams ensure that I am up to 
speed with new features included in the latest release.  I wish I had 
gone for Certification sooner as I'm sure I would have been able to 
bring more improvements to the system that I looked after in my first 
Salesforce role.  If I was going to hire someone to look after my 
Salesforce system I would want them to be Certified as this proves that 
they have a good understanding of the fundamentals and are up to date 
with the latest functionality.
  
                    &#xD;
    &lt;br/&gt;&#xD;
    &lt;br/&gt;&#xD;
    
                    
  I was hired for the first role that I applied for after becoming Certified by the way!
                  &#xD;
  &lt;/p&gt;&#xD;
&lt;/div&gt;</content:encoded>
      <pubDate>Sat, 09 May 2015 00:00:00 GMT</pubDate>
      <author>mike@mikearthur.net (Mike Arthur)</author>
      <guid>https://www.mikearthur.net/salesforce-certification</guid>
      <g-custom:tags type="string">salesforce,certification,administrator,developer,adm201,adm401,adm501</g-custom:tags>
      <media:content medium="image" url="//dd-cdn.multiscreensite.com/blog/blog_post_image.png">
        <media:description>thumbnail</media:description>
      </media:content>
    </item>
  </channel>
</rss>
