After the authentication process, enter any of the folowwing command that will be run against your org.
Usage :
        ? [command] or Help [command] : Display this Screen or the detail of a command.
        activate user id1 [id2 [id3 [...]]]
        analyse config|code|data objName fieldAPIname [where clause]|user
        apex code
        app [label]
        Backup SObjectAPIName [SObjectAPIName [SObjectAPIName [...]]]
        browse url
        cache prepare|emtpy|print|id
        cd [path]
        content [filter criteria]
        cookies [dump]
        count [*|SObjectAPIName [SObjectAPIName [SObjectAPIName [...]]]]
        delete Id1 [Id2 [Id3 [...]]]
        delete from SObject [where ...]
        DeltaApi ApiVersionNumber1 ApiVersionNumber2
        desc [all|attribute|object [field [attribute]]]
        emptyRecycleBin Id1 [Id2 [Id3 [...]]]
        documents [filter criteria]
        helpdoc ApexCode|API|MetaData|Ajax|VisualForce|OfficeToolKit|Ant|DataLoader|CTI|OpenCTI|ScriptingToolKit|AdminBooster|SOQL|SOSL|CSS|Flex|BatchApex|DataModel
        impact something
        inactivate user id1 [id2 [id3 [...]]]
        InvalidateSessions SessionId1 [SessionId2 [SessionId3 [...]]]
        isValid18 Id
        quality SObjectAPIName [SObjectAPIName [SObjectAPIName [...]]]
        quit | exit
        required SObjectAPIName
        resetpassword UserId1 [UserId2 [...]]
        select SOQL
        selectall SOQL
        setpassword UserId theNewPassword
        sms phonenumber message
        spool filename
        UNDER CONSTRUCTION : template SObjectName before|after insert|update|delete|undelete
        truncate SObjectAPIName [SObjectAPIName2 [...]]
        undelete Id1 [Id2 [Id3 [...]]]
        unarchive task|event [where clause]
        UNDER CONSTRUCTION : update [field assignment] SObject [where clause]
        UNDER CONSTRUCTION : updateall [field assignment] SObject [where clause]
        15to18 Id
Use F7 to reuse a command.
Max line length is 250 characters.
Use _ at the end of a line to continue the command on the next line.
This list is displayed if you enter an empty command or if you type help or ?. If you want to print detailed information about a command, type help command where command should be replaced with one of the available commands.


Usage :
        activate user id1 [id2 [id3 [...]]]
To update to 'true' the IsActive field for the defined UserId
example: activate user 00530000000sxFX
If you want to activate one or more inactive users, you have to put a list of ids as parameters to this command (simple ids without quotes, that can be on 15 or 18 characters).
You can retrieve the list of inactive users with the following SOQL query:
Select Id, IsActive from User
This is very useful if you plan a training session: prepare your users (create them a few days before the training day) without activating them. Just before starting the training, you will be able to activate them all very quickly.
Tip: Use the command setpassword to define the same password for all your trainees.


Usage :
        analyse config|code|data objName fieldAPIname [where clause]|user
To identify any part of the configuration that could be improved.
Data analysis is showing usage ratio for one field. (if picklist, displaying values ratio too)
With this command you will identify how to optimise your data or configuration.

analyse code

This will display statistics about the code.
(Sun Jan 20 19:50:59 UTC+0100 2013) 1 >analyse code
|                                        Code statistics                                         |
| Object       | Code  | Comments                                                                |
| Scontrol     | Stats | Nb of code:0 Total size:0 Total lines:0                                 |
| Apex Class   | Stats | Nb of code:75 Total size:411578 (w/o comments 369682) Total lines:10231 |
| Apex Trigger | Stats | Nb of code:4 Total size:2121 (w/o comments 2074) Total lines:45         |
| Buttons/Link | Stats | Nb of code:6 Total size:797 Total lines:12                              |
| Total        | Stats | Nb of code:85 Total size:414496 Total lines:10288                       |
| Optimizeable | Apex  | 21281 characters can be removed without visual or code impact           |
| Code Limit   | Apex  | 371756 / 3MB = 12.39% used                                              |
It is important to know that if you encounter the Apex Code limit, you can still optimize the existing code by removing trailing white spaces, or using tabs instead of space for indentation.
This will have no impact on your code. Configure your code editor with these options and you will be able to add more code to your org.

analyse config

If you want to backup all your data, you will need to list all your fields in a "select" query to retrieve values.
A SOQL query is limited to 10Kb.
An 0bject can have 500 fields. 1 character is need in the query to separate each field.
Mathematically, you need to have an average length of 18 charaters per field, or you won't be able to retrieve all your data in 1 query.
This command will let you identify which fields or object names are too long based on this.
(Sun Jan 20 19:59:37 UTC+0100 2013) 3 >analyse config
Analysing cached configuration only...
|                                                  Configuration analysis                                                   |
| Object                          | Item                                      | Comments                                    |
| Account                         | GC_Days_since_last_update_or_activity__c  | Warning, Api Name is too long               |
| Account                         | GC_Sales_target_this_year__c              | Warning, Api Name is too long               |
| Account                         | EDY_ORGCUSTOM__Old_Title__pc              | Warning, Api Name is too long               |
| Case                            | EDY_ORGCUSTOM__Old_Subject__c             | Warning, Api Name is too long               |
| Case                            | EDY_ORGCUSTOM__Old_Description__c         | Warning, Api Name is too long               |
| Contact                         | EDY_ORGCUSTOM__Old_Title__c               | Warning, Api Name is too long               |
| FAQ__kav                        | Descriptif_de_la_question__c              | Warning, Api Name is too long               |
| FAQ__kav                        | Information_compl_mentaire__c             | Warning, Api Name is too long               |
| FAQ__kav                        | Pi_ce_jointe__ContentType__s              | Warning, Api Name is too long               |
| Facturation_et_Paiement__kav    | Name                                      | Warning, Custom Object Api Name is too long |
| Rapport_de_visite__c            | Objectif_de_la_prochaine_visite__c        | Warning, Api Name is too long               |
| Solution                        | EDY_ORGCUSTOM__Old_SolutionNote__c        | Warning, Api Name is too long               |
| Solution                        | EDY_ORGCUSTOM__Old_SolutionName__c        | Warning, Api Name is too long               |
| User                            | EDY_ORGCUSTOM__Old_Last_Name__c           | Warning, Api Name is too long               |
| User                            | EDY_ORGCUSTOM__Old_First_Name__c          | Warning, Api Name is too long               |
| netsize__NetsizeSMS_Template__c | Name                                      | Warning, Custom Object Api Name is too long |

analyse data

The extensive syntaxe is: analyse data SObjectName FieldAPIname [where clause]
To get statistics on value usage for the field. If the field is a picklist, you will get additional info per picklist value.
This will help identifying defined picklist values that are not used, or get the input to create charts for business analysis purpose
You can restrict your analysis with a SOQL "where clause".
(Sun Jan 20 20:17:07 UTC+0100 2013) 10 >analyse data contact salutation
Analysing Salutation on "Contacts"...
|         Values per RecordType for Contact.Salutation         |
| Record Type  | Field with value | Field without data | Total |
| Business     | 91               | 52                 | 143   |
| Social       | 1                | 132                | 133   |
| Standard     | 4                | 2                  | 6     |
| Master       | 0                | 0                  | 0     |
| undefined    | 3                | 14                 | 17    |
| Grand Total: | 99               | 200                | 299   |

|              Occurence per List Of Value for Contact.Salutation               |
| Value\RecordType  | Business | Social | Standard | Master | undefined | Total |
| Mr.               | 81       |        | 4        |        | 3         | 88    |
| Ms.               | 10       |        |          |        |           | 10    |
| Mrs.              |          |        |          |        |           | 0     |
| Dr.               |          |        |          |        |           | 0     |
| Prof.             |          |        |          |        |           | 0     |
| Directeur associe |          | 1      |          |        |           | 1     |

analyse user

(Sat Jan 19 23:45:11 UTC+0100 2013) 1 >analyse user
Listing users...
Total users:9 - 9 active users, no deactivated users (+ 0 inactive users who never logged in)
analysing data on Account
analysing data on Campaign
analysing data on Case
analysing data on Contact
analysing data on ContentVersion
analysing data on Contract
analysing data on Event
analysing data on Lead
analysing data on Opportunity
analysing data on Solution
analysing data on Task
0 inactive users with data: no data.
|      2 active users without data      |
| User                                  |
| Jean-Luc Antoine (005i0000000UA6rAAG) |
| Chatter Expert (005i0000000UA76AAG)   |
As a result, you get the information on how you could optimize your licences:
  • Inactive users who never logged in: you can freely reuse them instead of creating a new user, as they won't have any data in the org
  • identify inactive users who own records (these records should probably be transfered)
  • identify active users who don't own records (these users are not using Salesforce ? reallocate them)

apex code

To run apex code that is not hosted in your org (anonymous code with current user visibility).
Same as the developer console, just enter any apex code, you will retrieve the output (like system.debug).
(Sun Jan 20 20:34:27 UTC+0100 2013) 16 >apex Integer i = 0; i++; System.Debug('toto');System.assert(i == 1,'the assert message');
Execute Anonymous: Integer i = 0; i++; System.Debug('toto');System.assert(i == 1,'the assert message');
20:37:38.304 (304508000)|EXECUTION_STARTED
20:37:38.304 (304531000)|CODE_UNIT_STARTED|[EXTERNAL]|execute_anonymous_apex
20:37:38.305 (305943000)|USER_DEBUG|[1]|DEBUG|toto
20:37:38.306 (306123000)|CODE_UNIT_FINISHED|execute_anonymous_apex
20:37:38.306 (306145000)|EXECUTION_FINISHED
If you need multi-line code, add an underscore (_) at the end of the line. Your command will be executed as soon as you enter a line that don't end with the underscore.
It's a way to run apex code in production without deployment and test methods.


To list available applications or tabs associated to an application.
(Sun Jan 20 20:17:16 UTC+0100 2013) 11 >app
|                                                                                    Applications                                                                                     |
| label                            | logoUrl                                                                                                                   | namespace | selected |
| Sales                            |                                                         |           | true     |
| Call Center                      |                                                         |           | false    |
| Marketing                        |                                                         |           | false    |
|                        |                                                         |           | false    |
| Sample Console                   |                                                         |           | false    |
| Authenticated Website User       |                                                         |           | false    |
| High Volume Customer Portal User |                                                         |           | false    |
| Community                        |                                                         |           | false    |
| Salesforce Chatter               |                                                                    |           | false    |
|                         |                                                         |           | false    |
| Content                          |                                                         |           | false    |
| PKB 2                            | |           | false    |
| Facebook Toolkit 3               |                                                         |           | false    |
If you add the application label as a parameter, you will print all tabs associated to this app.
(Sun Jan 20 20:45:39 UTC+0100 2013) 12 >app
|                                                                                                                tabs for application ''                                                                                                                |
| custom | iconUrl                                                            | label      | miniIconUrl                                                        | sobjectName | url                                                                              |
| false  |                    | Home       |                    |             |                                        |
| false  |                | Chatter    |                |             |                      |
| false  |                   | Files      |                   |             |                   |
| true   |                  | Start Here |                  |             | |
| true   | | Logs       | | Log__c      |                                                |


Usage :
        backup SObjectAPIName [SObjectAPIName [SObjectAPIName [...]]]
                where SObjectAPIName is the API name of an existing object.
To backup one or more SObjects into one or more UTF8 CSV files.
The variable CSVdelim (see the command 'set') can define the separator. By default a coma ','
The variable CSVquote, if set, can define the string encapsulation. By default a double quote "
The variable ExtractAllFields, if set to true, enable all fields export. By default set to false, which export createable, updateable,  and some system fields.
The variable HeaderUTF8, if set to true, will add an UTF-8 header to your csv file.
To view or define variables, use the command "set".
With this command you are savig all your data into a CSV file on your computer, into the current diectory (use the "cd" command to change the current directory). You can put a list of objects that you want to backup, separated by a space.


To identify time taken for any network roundtrip to Salesforce. Use it in case of performance issue, to identify the time taken on the network (outside of Salesforce) between sfdc servers and your computer. For instance, run it from 2 different locations in your enterprise (ie San Francisco, Bruxelles), at the same time; this will assume the load on the POD is the same, the difference will be a network issue.
(Sun Jan 20 20:54:45 UTC+0100 2013) 17 >bench
=== HEAD calls === will open a new socket each time
Benching 10 API endpoint HEAD calls
Average=520.3 ms. Min=140 ms. Max=2297 ms
Benching 10 User interface HEAD calls to
Average=190.7 ms. Min=140 ms. Max=297 ms
=== GET calls === will open a socket once and reuse it, including data transfer
Benching 10 API endpoint GET calls
Average=578.1 ms. Min=406 ms. Max=766 ms
Benching 10 User interface GET calls to
Average=682.9 ms. Min=484 ms. Max=1813 ms
The benchmark is targeted to Salesforce homepage and API endpoint, which does not run any of your apex code.
Opening a socket takes time, reusing a socket will be quicker. On a user perspective, the socket is kept open a few seconds (keep-alive), this means that after a while of inactivity, if the user clicks in the user interface, the refresh of the page will take longer than if he does it again just after the refresh.
Browser configuration and proxy usage can impact the reuse of the socket and decrease performance.
The first connection can be impacted by domaine name resolution (DNS).
You have to pay attention on the time in the day you run this command, as many items can affect performance: Salesforce POD load, your network load etc.


Without using a browser, you will dump in text mode a web page into the console.
An easy way to get the content of an external REST Api Endpoint


You have probably discovered the incredible speed of AdminBooster. This is because of an internal cache system: metadata will only be retrieved once, and reused if already in the cache.
Each time there is a need of meta data, if it is not present inside the cache then it will be requested and the cache will be updated.
This behavior is completely transparent to the user, except if you are simultaneously updating the meta data in your org: you will have to purge the cache to get new meta data.
When starting AdminBooster, the cache is empty.

cache print

This will list all objects stored in the in-memory cache.
The list can be quite long, including SObjects, Page Layouts, Apex Classes and Triggers, Pages, and much more.
(Mon Jan 21 16:53:56 UTC+0100 2013) 7 >cache print
|      Cached content       |
| Object       | Values     |
| Object list  | 287 values |
| Object desc. | Account    |
| Object desc. | User       |
| Layouts      | User       |

cache prepare

This will fill the cache with all the required metadata.
Some commands work only on the cache content, for instance "analyse config". This means that before running these commands, you have to prepare the cache
Preparing the cache can take a few seconds up to a minute, depending on your configuration complexity and available bandwidth.
Use "cache print" after this command to display the full content of the cache.

cache empty

This will remove everything from the cache.
Use this each time you change the API endpoint, or each time you update the datamodel manually with an active adminbooster session.

cache id

To print the cached value for an Id.
For instance, this will dump the cached apexclass
(Mon Jan 21 17:02:03 UTC+0100 2013) 22 >cache 01pU0000000pJxZIAU
public with sharing class ctrlSampledataTableOne {

 public List<account> getAccounts() {

  List<account> accountsForPage = [Select Id,Name,Phone From Account Limit 10];
  return accountsForPage;



To display or change the current directory.
When starting AdminBooster, the current directory is the folder hosting the file adminbooster.jse
Various commands such as spool, backup, documents, content, will use the current directory to write files or create folders when needed.
You can change the current disk with the disk letter +":" as a parameter. Ex:
(Mon Jan 21 17:10:04 UTC+0100 2013) 27 >cd c:
Current directory: C:\
If you define an existing folder as a parameter, this will become the current directory. In that case, it can be a relative (ex: cd \test) or absolute (ex: cd d:\test) path.
This command has been inspired by the unix and doc commands.


Clear the display.
After a few commands, your screen can print lots of information, making difficult to identify what is useful.
This command will dump blank lines to clear the display, but you will still be able to access previous displayed information if your screen buffer has enough lines.
Inspired from the unix and dos commands.


To replicate locally all files from Content.
This will create in the current directory one folder per workspace and push the associated files into these folders
(Mon Jan 21 04:46:54 UTC+0100 2013) 2 >help content
Usage :
        content [filter criteria]
To replicate from Salesforce to the local current directory all Content files in workspaces.
Ex.: content ContentDocument.ParentId='05830000000DFE6AAO'  (to filter based on a workspace id)
Non existing (deleted) remote content files are not removed locally.
Same path/file names with same size are not overwriten (delta replication)
Files are prefixed with their internal Id because multiple Content files can have the same name.

You have to ensure to be in the right folder before starting the replication (using the "cd" command).
(Mon Jan 21 10:36:37 UTC+0100 2013) 2 >cd \test
Current directory: D:\test
(Mon Jan 21 10:36:42 UTC+0100 2013) 3 >content
Retrieving MyWorkspace\0683000000xxxxxAAQ.myfile.pdf (0683000000xxxxxAAQ)
Retrieving MyWorkspace\0683000000yyyyyAAQ.anotherfile.pdf (0683000000yyyyyAAQ)
If you want to remove the prefix (id) of the file names, using a dos prompt you can do "ren *.* .*" from within the directory (warning, this may create a malfunction on your computer if you do it from elsewhere). This will still keep a "." at the beginning of the filename (if anyone has a quick command to remove it, please tell me the tip).


This command will try to find an active salesforce session and associated domain, if you are running Salesforce within Internet Explorer
(Mon Jan 21 17:19:14 UTC+0100 2013) 37 >cookies
1 SID and Domain found.
|                                                    Salesforce cookies                                                     |
| Domain |                                                                                              |
| SID    | 00DA00000009jla!AR0JQOKEWrfbDJq6vgeG04nlryGN7SHFuF5szf8Ut5Oh2pIlArOFwD1M9zLkNcgYNGqiay.T3cmJzofqZ1WFoxRu91q4WlgR |
This is great to get the sessionId (easy to copy/paste from the console) and use it with any tool requiring a sessionId.
If you want to dump all cookies from your active Salesforce session, add the optionnal "dump" parameter to display all cookies and values; great for debugging if you are adding cookies into your VisualForce pages!


Ever wonder how many records in your Objects? You can identify this with a SOQL query similar to "Select count() from Account", but this command will do the job for you, for all the targeted sObjects in 1 single command.
"count Account" will do the same as the above query.
"count account contact opportunity task" will give you all the values in 1 shot
(Mon Jan 21 17:29:16 UTC+0100 2013) 50 >count account contact opportunity task
Counting account...
Counting contact...
Counting opportunity...
Counting task...
|       Records       |
| Object      | Count |
| account     | 36    |
| contact     | 299   |
| opportunity | 51    |
| task        | 1     |
Beware that if your sObjects have high volume of data, the "count" command can take lots of time
To count the records on all sObjects, just write "count *"
This is a very simple way to identify sObjects hosting no or little data, for usage analysis.


Waring, this command will erase data from your Org.
you can delete 1 record by defining an Id as parameter
you can delete a list of records by defining a list of Ids (separated with space) as parameter
you can delete dynamically multiple records with the syntax "delete from SObject [where ...]". Ex: delete from question where UpVotes=0
No confirmation will be asked, pay attention when using this function.
In case of human error, you could consider using the "undelete" function, it will work on most (not all) objects


API gets a new version each major Salesforce release. There can be differences between versions, as new sObjects appear and other are deprecated.
If you want to identify the compatibility of your code with an api version, you will have to compare the api version it has been developed with, and the latest api version released. For instance 13.0 and 26.0
This will show you the differences between those api versions (not on the field detail, only on the sObject detail)
(Mon Jan 21 18:05:47 UTC+0100 2013) 16 >DeltaApi 21.0 22.0
|          Object difference          |
| API v21.0 | API v22.0               |
| FeedPost  | -                       |
| -         | PermissionSet           |
| -         | PermissionSetAssignment |

This page will be completed soon...

© 2017 Jean-Luc Antoine, All Rights Reserved