doDev Help
Nothing in the help matches that. Try another word.
Getting started
doDev helps Salesforce admins and developers find any metadata, see who can access what and why, compare users, permissions and orgs, query data without writing SOQL, and keep an eye on scheduled jobs. It runs in your browser with the Salesforce login you already have – nothing to install in Salesforce, no connected app.
- Open a Salesforce tab and log in as usual.
- Click the doDev icon in the Chrome toolbar (pin it from the puzzle-piece menu so it is always there). The workspace opens in a new tab, connected to that org.
- Pick a section at the top – Data, Find, Compare or Monitor – and a tool.
From a record page: open doDev while you look at a record, user, profile, Apex class and so on, and the tool you open fills its inputs from it (it never runs on its own – you click Run).
Two orgs: to compare orgs (e.g. a sandbox and production), log into both in the same browser. Their names then appear in the org pickers.
doDev only reads from Salesforce, with one exception: Data Import creates, updates or deletes the records you confirm – nothing else changes anything.
The workspace
- Org (top right): the org every tool works in. It starts with the org you launched doDev from, marked (launch org) – also after a reload – and lists every other org you are logged into in this browser. Switching it reloads the open tools in that org (you are asked first – their results are cleared); compare tools use it as the first org.
- Sections: Data · Find · Compare · Monitor. A section shows its tools as tiles (each says what question it answers) and on one line under the top bar. A ● on a section means something in it is still running.
- Several at once: every tool keeps its work while you switch, so a query and a comparison can run side by side. + opens another copy, × closes one, double-click a tool's label to rename it, and Open tabs (n) ▾ lists everything open – each by what it is about (e.g. what you searched), with its tool underneath.
- Search box (top, Ctrl+K): type any metadata or user – an object, field, flow, Apex class, LWC, profile, label – or a tool. All ▾ narrows it to one type. Results show as they arrive, in this order: objects, permission sets, profiles, permission set groups, then the rest – custom fields last, unless you type a field's full name. Clicking into the empty box shows your recent searches for this org. A result opens its Find Any Metadata page.
- Footer (bottom of every screen): Help, Report an issue, Community & support, Privacy policy and the contact email.
- Dates and times show in your Salesforce time zone (your Salesforce settings → Language & Time Zone), as Salesforce shows them.
- ↺ Restore last session reopens the tools you had open with their last inputs (never their results).
Inputs – the same in every tool
- One box with the org on its left, any type choice next to it, then the search. The placeholder says what to enter.
- Options such as Include inactive users and the log button (terminal icon) sit on the caption line, top right above Run.
- ■ Stop ends a run at once. If something goes wrong, the message appears under the inputs with ↻ Try again and ⟲ Restart this tool; the log keeps the details.
- Messages show at the top of the page: red for a warning or error (for example Choose an object first), green when something worked (Copied, Saved).
- Before your first run each tool shows Recent runs (one click fills the inputs, ▶ runs again) and What you'll get.
Results – the same layout in every Find and Compare tool
- One card. Its first row has the title or count on the left and, on the right, the search box and the buttons (CSV, query, chart, columns).
- Left: a tree. Everyone / All differences / Everywhere on top, then groups that fold, each entry with its count. Click an entry to see just that on the right; the picked entry is outlined.
- ☷ Columns: on people tables (Who Has Metadata Access, Who Has Record Access), uncheck the columns you don't need, or add any User field under User fields – type to find it (e.g. Email, Department, Manager); its values are read for everyone listed and go into the CSV too. Uncheck an added field to remove it. Your choice is kept for that tool; Show all columns shows the basic columns again.
- Exports: the Find and Compare tools' Export ▾ has Download CSV and Download Excel (.xlsx). In Data Explorer, CSV ▾ / JSON ▾ ask first: ⧉ Copy puts the content on the clipboard (CSV can also be copied for Excel), ⬇ Download saves the file.
- ⌕ buttons open the matching query in a new Data Explorer tab. ⧉ copies a value.
- Sort: click a column header – ▲ ascending, ▼ descending, a third click back to the first order. Tables with a Name column start sorted by name; dates sort by date and counts by number.
- Record Ids are links in every tool: a click asks 👁 View here (the record in Data Explorer) or ↗ View in Salesforce. Ctrl / ⌘ + click goes straight to Salesforce.
- Results as they load: Compare Users, Compare Permissions, the org compares and Where Is It Used show each part as soon as it is read, with a progress bar under the results header (Comparing… 60%). Counts may still change until it is done; ■ Stop keeps what has loaded and marks the rest.
- Errors in plain words: when Salesforce refuses something, the message says what happened and what to do; the original Salesforce text is one click away.
Data Explorer
Query records with SOQL, or search text across objects with SOSL.
Step-by-step guides: Query Salesforce data without writing SOQL
Write a query
- Type an object in the object box (top left) and pick it – a starter query appears – or type SOQL straight into the editor.
- As you type, suggestions offer objects, fields, related fields (
Owner.), related lists, picklist values and date literals. Ctrl+Space shows them; Enter or Tab picks one while you are completing a word, otherwise Enter starts a new line. - Click ▶ Run or press Ctrl+Enter. Nothing runs until you do.
Pick fields and relationships
☰ Fields & relationships… opens a picker: the tree on the left has Fields of <object> (standard and custom), Parent records (lookups) and Related lists; the right side lists the fields of what you pick. Each side has its own search: the box above the tree finds lookups and related lists, the box above the fields filters that field list. A FIELDS(ALL), FIELDS(STANDARD) or FIELDS(CUSTOM) in your query shows its fields checked and stays as written; uncheck one of them and the query lists the fields you kept instead.
- A lookup (e.g. Owner) shows its fields, and under them Go further – its own lookups (e.g. Owner › Manager), up to 5 levels.
- A related list shows its fields straight away; check any field to add the list to the query, uncheck them all to leave it out. Related lists already in your query start checked.
- Apply writes the query; ▶ Apply & run also runs it. Your own subqueries and filters are kept.
Other ways to start
Start a query: from a list view, from a report, from a record, or paste Ids or names – each writes the query into the editor. Templates has ready-made queries for the object and an admin library. History keeps your last 100 queries; Saved keeps the ones you name – ☆ Save this query at its top adds the one in the editor; ⬇ Export / ⬆ Import share them as a file. Under the editor: ▶ Run, ☰ Fields & relationships… and ⧉ Copy SOQL. To count records, use Templates › Record count (add a WHERE to count only some). Object suggestions (in the Object box and after FROM) put the exact API name or label first, then names that start with what you typed. SOSL searches text across several objects: it starts with one object (the one you are working with, or Account) – + Add object adds more.
Results
- Click a column header to sort, drag its edge to resize, hover a cell or header for ⧉ copy.
- Checkbox fields show true or false.
- Filter these results narrows the rows as you type; the count next to it then says how many match, for example 12 of 2,000 Accounts match the filter.
- Above the results: the filter box, then Related ▾ (when the query has related lists) – check one or several of With … / Without … to narrow by related records. On the right: Excel ▾ (copy for Excel or download .xlsx), CSV ▾ and JSON ▾ (copy or download). While you filter, the line under the editor says how many match.
- One record opens as a single table – Field, API name, Value, Field type – all fields A–Z, with Find a field… and Show empty fields. Formula fields are marked ƒ; hover the type or value to see the formula. Related lists in the query are chips at the top with their counts – click one to open its records right there.
- 👁 View here on a record Id (or opening doDev from a Salesforce record page) shows the record on its own, without the query editor, and Quick links on the right: Write a new query, Edit this query, Who has access to this record, the object's page, all its records, where the object is used, and the record and Object Manager in Salesforce.
- The way back: each record you open with View here is a step in a trail at the top (‹ Back · Account query › GenePoint › Owner) – click any step to go back to it as it was.
- To change many records at once, use Data Import › ✎ Mass update.
- CSV ▾ and JSON ▾ copy or download what is loaded (the filters apply). Include deleted also returns records in the Recycle Bin.
- Tooling API (next to Include deleted): send the query to the Tooling API instead of the data API – for objects both have, such as
PermissionSetTabSetting. Objects only one of them has always go to that one. - A new query: click Data Explorer in the tool row while it is on screen. A blank Data Explorer tab that is already open is used; otherwise a new one opens.
Data Import
Load, update or delete records – the only tool that writes to Salesforce.
Step-by-step guides: Import, update or delete records from a CSV or Excel
- At the top: the org, the object (it loads as soon as you pick it – no Start button) and the Operation – Insert, Update (by Id, the default), Upsert (by an external Id), Delete (by Id) or Hard delete (skips the Recycle Bin; needs a Bulk API and the Bulk API Hard Delete permission). Change it any time; the rows are checked again.
- Next to it, where the records come from:
- ⬆ Import file – click it, or drop a CSV on it.
- 📋 Paste rows – Ctrl+V anywhere on the page (or click the tile, then Ctrl+V) with CSV or rows copied from Excel / Google Sheets.
- ✎ Mass update ▾ – pick the records (Start from a query, Start from a list view, Start from a report or Paste IDs), then give one or more fields a new value on all of them, or clear them; the records come back here as Update rows.
- ⚙ Settings (the tile after them – it opens on the right; as in Data Loader, kept in this browser): the API – REST (quickest for small loads), Bulk API or Bulk API 2.0 (for tens of thousands of rows); the batch size (REST up to 200, Bulk API up to 10,000; Bulk API 2.0 splits the data itself); if a row fails – save the other rows, or roll back its whole batch (REST); the date format in the file (MM/DD/YYYY or DD/MM/YYYY) and the time zone for date-times without one; blank cells clear the field; serial mode (Bulk API); run assignment rules (leads, cases); and cut text that is too long (off: such a row fails before anything is sent).
- On the left: the column → field mapping (for delete only the Id column is used). On the right: the Run box, then the records as they will be sent. Problems such as required fields, unknown picklist values or bad dates are shown next to the Run button and on the rows they affect, before anything is sent. Once a run starts, the mapping folds into one line and the results take the full width.
- At the bottom: Records – every loaded row as it will be sent (the matched columns, by field), a page at a time (25 to 200 per page, ‹ Prev / Next ›). Rows that will likely fail are marked in red with the reason (Possible error); how many is shown above the mapping.
- At the top, after the tiles: click the button (e.g. Update 450 records) – it runs straight away (a production org gets a warning next to it). The results appear on the right as each batch finishes (with a Bulk API: as the job runs) – total, done, failed, pending, a bar and one line per row, the result or error first. ■ Stop ends it early (a Bulk API job is aborted); when it is done the failed rows come first and ⬇ Results CSV has every row's Salesforce Id or error.
Blank cells leave the current value as it is (unless ⚙ Settings says they clear it); #N/A in a cell clears the field (update and upsert).
Deleted records go to the Recycle Bin, where they can be restored for 15 days – hard-deleted ones don't. This tool cannot undo an import – keep your file and the results CSV.
Who Has Metadata Access
Who has this permission, and where does it come from?
Step-by-step guides: Who has access to a field · Users with a system permission (e.g. Export Reports)
- Search any system permission, object, field, Apex class, Visualforce page, custom permission, app, connected app or flow. For a field, pick the object and type
.(or typeAccount.) to list its fields. - Check Include inactive users if you want them too, then Find users.
- The tree lists Profiles, Permission sets and Permission set groups in separate sections, with head counts; click one to see its people.
- A permission set that is in permission set groups shows a 2 groups button: click it to list those groups, and pick one to see the people it gives the access to.
- For objects and fields the table shows a ✓ per access level (View All / Modify All in orange).
- The search above the table finds both people and profiles / permission sets. Hover a Group: pill to see the permission sets in that group.
- 📊 Access by source: how many people each profile, permission set or group gives each level.
Who Has Record Access
Who can open this record, and why?
Step-by-step guides: Who can access a record – and why
- Enter the record ID (15 or 18 characters).
- Choose Everyone (default) or Specific users – then pick users one by one; each becomes a pill (× removes it).
- Check Include inactive users if needed and click Check access.
Everyone: the tree groups people by why they have access – Owner, Role hierarchy (roles nested as in the hierarchy), Sharing rules (who each rule shares with), Manual shares, Teams, Territories, Global Modify All Data, Global View All Data, Modify All on the object, View All on the object and Parent record. Click any entry to see its people. People who get a share but lack Read on the object are listed separately.
The pills above the tree – Full access, Read/Write, Read only, Blocked: no Read on the object and No access, each with its count – list only those people when clicked. Click several to combine them; All clears them.
The people table shows each person's User Id, and the filter box also finds a person by user Id. To check one person, you can paste their user Id (005…) when picking users.
Specific users: one column per person with their access level and every reason.
Where Is It Used
Where is this used – before I change or delete it?
Step-by-step guides: Where a field is used before you change or delete it
- Choose the type (field, object, profile, role, group, permission set, Apex class, label, custom permission, record type, or any text) and the name or Id.
- In What to search (right), check the places to search. The (slower) ones need one call per item: flows and validation rules start checked; Lightning pages and apps, quick actions, reports, Experience Cloud sites, OmniStudio, prompt templates and Agentforce start unchecked. Up to 3 slower places can be checked at a time. All checks the quick places only.
- Click Find references.
- Results show place by place as they are found, with the progress bar; ■ Stop keeps what was found.
- Not searched, at the top of the results, names every place that was left out, with Choose places to search – so "nothing found" is never read as "not used anywhere".
- Who and what uses it heads the results: the item and facts such as records with a value.
- The tree lists places (e.g. Code › Apex classes, Apex test classes); each reference shows its line with the match highlighted, marked exact or name only. View › opens the component.
- Checked another place after the search? Search … too adds just those.
Find Any Metadata
Find anything in the org and see everything about it on one page.
Step-by-step guides: Find any metadata in an org · See everything a user can access
- Search from the box at the top of the workspace, or in this tool. Objects, fields, users, flows, Apex, LWC, Aura, Visualforce, profiles, permission sets, roles, groups, labels, static resources, email templates, Lightning pages and validation rules each have their own page.
- Code shows with line numbers and colours. Find in file (or Ctrl+F inside it) marks every match; Enter / Shift+Enter step through them.
- ⇄ Compare with ▾ → an org shows the same component from that org (one org at a time – picking another replaces it; ✕ Stop comparing goes back): the details become a side-by-side table and each tab lists only the differences (uncheck Only differences to see all). Code becomes a side-by-side diff.
- For a profile, permission set or permission set group, ⇄ Compare with ▾ → an org opens Compare Permissions straight away with the same item in both orgs: every permission – objects, fields, system and app permissions, Apex, pages, tabs and more – side by side.
- Each page starts with its key details – the label above each value – and its tabs. Every table on a page sorts by its headers (Name first).
- A user's page: profile, role, email, last login and created at the top; everything else (status, role path, licence, user type, alias, time zone…) is on the Details tab, in groups. Permission sets lists the profile, permission sets, groups and licences with Assigned on and Assigned by from the Setup Audit Trail – older than its 180 days shows ≈ the last change.
- 👤 Log in as (users) opens Salesforce's own login-as, when you are allowed to.
- A user's Access summary tab lists everything they can do – system permissions, objects (Read · Create · Edit · Delete · View All · Modify All), fields, tabs, Apex classes, Visualforce pages, custom permissions, apps… – each with the profile, permission set or group that grants it. It opens on Objects – every object with its level, in sections: the key Sales / Service Cloud objects first, then your custom objects, then all other standard objects and each managed package (these two folded until you click them, or opened by a search or filter); filter by level (e.g. only objects with View All and Modify All) and use Fields › to jump to an object's fields. Fields lists them grouped by object (filter by Read / Edit); Granted by (folded at first) shows what each profile, permission set or group gives. One search covers the tree and the table.
- Components from a managed package show its namespace as a badge after the name in every search result (e.g. LeadTrigger
pkg), so two with the same name are easy to tell apart.
Compare Users
Why can one user see or do something another user can't?
Step-by-step guides: Compare two users · Compare a user in two orgs
Pick 2–5 users (from one org or several) and click Compare. Results combine each user's profile, permission sets and groups, and also cover assignments, licences, groups, queues, teams, territories, the role path and the user record. Each difference says which profile, permission set or group grants it. The layout is the same as Compare Permissions.
Compare Permissions
Why can one profile or permission set do something another can't?
Step-by-step guides: Compare two profiles or permission sets · A profile between two orgs · A profile with a permission set · A permission set between sandbox and production · Permission set groups
- Pick 2–5 profiles, permission sets or permission set groups, from one org or several. Categories ▾ chooses what is compared.
- Click Compare.
- The counts – differences, only in each, changed in both, matched in both – filter the results when clicked. When both sides have the same name (the same permission set in two orgs), the counts name the orgs: only in uat.
- The tree lists the sections; click one to see just it. Sections start collapsed; Expand all opens them.
- Objects and Fields: one row per object (or field), a column per permission. Comparing two: a green ✓ is only in the first, a red ✓ only in the second, a grey ✓ in both, and an empty cell in neither; ≠ marks what differs. Each object shows how many of its fields differ – click it to open the Fields section on that object. Only differences (the default) shows just what differs; Everything provisioned shows all access either side has.
- Export: Download CSV or Excel, or a deployable gap permission set that grants one side what the other has.
Role & Profile Members
What does everyone in a role or profile actually have – and who is different?
Step-by-step guides: What everyone in a role or profile has – and who is different
- Pick a role (optionally with the roles below it) or a profile.
- Click Build matrix.
- The tree groups what people hold: Everyone has, Most have, Only a few have, Licences – then Profiles and People (those who differ first). Click a permission set to see who has it and who is missing it, or a person to see what they're missing.
- The Matrix lists the profiles first, in their own section, then the permission sets, groups and licences.
- Views: Coverage, Matrix, Differences per person and Suggested permission set group (with a deployable file and an assignment plan).
Compare Code & Metadata
What code and metadata differ between two orgs – before a deployment?
Step-by-step guides: Compare Apex and metadata between sandbox and production
Pick two orgs and click Compare code & metadata. Everything is compared by default; ⚙ What to compare narrows the types or names (remembered for that pair of orgs). It is open beside the inputs when the tool opens, and closes when the results show – reopen it with the same button. Results are a project tree with changed / same counts; click a component or file for a side-by-side diff (the button switches to one column). When only the line endings differ (Windows CRLF against Unix LF, or a missing last line break), that is shown instead – each line's ending marked. ↑ / ↓ (or j / k) move between changes. Global value sets, custom metadata records and custom settings are (slower) – one call per item – so they start unchecked, up to 3 at a time.
Compare Objects
Is this object the same in both orgs?
Step-by-step guides: Compare an object between two orgs
Type the object, pick two orgs and click Compare object. You get object settings, every field attribute, picklist values (also per record type), record types, validation rules, triggers, record-triggered flows, layouts and Lightning pages, with the differences highlighted. On the left, a tree lists All differences, then each section with its changed items, and the sections that are the same in every org under Identical in all orgs. Click a section or an item to see just that on the right; the filter above narrows the tree.
Compare Records
How do two records differ – their fields and their child records?
Step-by-step guides: Compare two Salesforce records, field by field
- For each record, pick its org and paste its Id (15 or 18 characters). The records can be in one org or in several – for example the same account in a sandbox and in production. ⇄ swaps the first two.
- + Add a record adds a third, fourth and fifth (up to 5); × takes one away again. All of them must be records of the same object.
- Click Compare records.
- One line at the top: the records' names, the filter box and two counts – differences and the same – that pick the fields shown.
- Fields: every field – label, API name, then one column per record. Only the values that differ are highlighted: with two records both, with more the ones that differ from what most of them have. A field one org doesn't have says so.
- Lookups (Owner, Parent Account…) are compared by the name of the record they point to, not its Id – Ids differ between orgs. Hover one for its Id; a click offers View here / View in Salesforce.
- System fields (Id, created and last modified, Photo URL…) always differ, so they are kept apart – check System fields to see them.
- Child records: each child object (contacts, cases, history, your custom objects…) with the field it points through and how many records each record has. A count opens those records in Data Explorer. Also child objects with no records lists the empty ones too.
Compare Org Settings
How are two orgs set up differently?
Step-by-step guides: Compare settings between two orgs
Pick two orgs and click Compare orgs: org-wide defaults, role hierarchy, password and session policies, trusted IP ranges, connected app policies and organization settings. Values that differ from the first org are highlighted. Org-Wide Defaults lists only real sharing changes (e.g. Private → Read/Write); objects that exist in only one org are listed apart, under Objects in only one org. On the left, a tree lists All differences, then each section with its changed items, and the sections that are the same in every org under Identical in all orgs. Click a section or an item to see just that on the right; the filter above narrows the tree.
Jobs
Which scheduled and background jobs ran, when, and which failed – and what exactly happened to this one?
Step-by-step guides: Monitor scheduled and failed Apex jobs
There are two ways to start:
- Load all jobs – last 7 days shows every job.
- Job Id, Apex class or scheduled job name + Find job (or Enter) goes straight to one job.
All jobs
On the left, a tree lists every job grouped by type – a dot shows how it is doing (red: failed recently, yellow: running, blue: waiting for its first run, green: fine) – Scheduled Apex, Batch Apex, Queueable, Future, then scheduled flows and data export – with how many runs failed. Report runs, report notifications, dashboard refreshes and reporting snapshots are not shown. The search above the tree narrows it by name, Apex class or Id.
- Overview (top of the tree): tiles for scheduled jobs, runs in 7 days, failed runs and what is running now; Needs attention (jobs with failures, worst first) and Coming up · next 24 h; runs per day; and each type with its success rate and next run.
- A type: its jobs with the schedule in words, next and last run, and a 7-day grid coloured by result.
- A job: its page (below).
Find one job
You can enter:
- a scheduled job Id (
08e…) or its job detail Id (08a…), from Scheduled Jobs in Setup; - a run Id (
707…), from Apex Jobs in Setup – a copied Setup link works too; - an Apex class Id (
01p…), an Apex class name or a scheduled job name – part of a name is enough. When several jobs match, they are listed and you pick one.
An Id reads just that job, so it opens quickly; a name searches every job of the last 7 days.
A job's page
- At the top: the job's name, type and state; the schedule in words with its cron expression and time zone; and, on the right, Next run as a countdown.
- Apex class on one line: click the class name to open its code in Find Any Metadata; its Id (click to copy); Open job in Apex Jobs ↗ (and Scheduled Jobs for a schedule) in Setup. Future methods show the method.
- The run you picked on one line – when you searched by a run Id or clicked a bar: its Id, status, start, how long it took, batches, errors and who started it (✕ hides it); a failed run shows Salesforce's message under it.
- Tiles: runs kept, succeeded, failed or with errors, the typical run time (and the longest) and how the last run went.
- Each run as a bar – height for how long it took, colour for how it went; click a bar to pick that run.
- Latest error in red, with Salesforce's full message.
- Schedule (scheduled jobs): its Id, previous run, how many times it has run, start and end, and who scheduled it.
- Running or queued now, then Runs: every run Salesforce still has (about 7 days) with a bar for how long each took; failed rows are tinted and Failed only narrows to them. Click any Id to copy it.
A batch or queueable job started by a scheduled class is a separate job: look up that class to see its runs. Scheduled flows show their schedule, but Salesforce does not record their runs as Apex jobs.
Keyboard shortcuts
| Ctrl + K | Jump to the search box at the top |
| Ctrl + Enter | Run the query (Data Explorer) |
| Ctrl + Space | Show suggestions (SOQL editor) |
| Esc | Stop a running query; close a menu |
| Ctrl + F | Find in file (inside a code view) |
| Enter / Shift + Enter | Next / previous match (Find in file) |
| ↑ / ↓ or j / k | Previous / next change (Compare Code & Metadata) |
Troubleshooting
- "Your Salesforce session has expired"
- Log in again in a Salesforce tab, then click ⟲ Restart this tool.
- "You are logged into more than one Salesforce org"
- Go to a tab of the org you want and click the doDev icon there.
- "Salesforce didn't answer within 150 seconds"
- Ask for less at once (fewer places, a narrower query) and try again.
- "This org has used up its API requests for now"
- Salesforce limits API calls per org over a rolling 24 hours. Wait and try again later. doDev warns you when an org passes 90%.
- Salesforce is busy (too many requests)
- doDev waits and retries reads by itself, and never sends more than a few requests at once. Data Import writes are never retried, so nothing is created twice.
- A tool shows something unexpected
- Open the log (terminal icon) for details, and report it – please without any Salesforce data.
Privacy and your data
- Everything runs in your browser. doDev talks only to your own Salesforce org(s) with the login you already have; it sends nothing to its developer or anyone else, and has no tracking.
- What it keeps on your computer – saved queries, query history, recent runs, the last session, recent searches and choices such as columns or Where to look – is encrypted (AES-256-GCM) with a key created on your computer that cannot be read out. It never contains Salesforce records.
- Clear it any time with Delete / Clear history in the tools, or by clearing the browser's site data.
- Full policy: privacy policy.
About
doDev – Admin & Dev Toolkit for Salesforce. Free to use. Copyright © 2026 doInit Tools. All rights reserved.
Questions, bugs or ideas: the support page (report a bug, request a feature), the community site, or email doinittools@gmail.com.
Not affiliated with or endorsed by Salesforce, Inc. Salesforce is a trademark of Salesforce, Inc.