Sliick Docs: Complete User Guide
Version: Updated for Sliick Docs v1.0.0 (Captivating-v1), live on the Salesforce AppExchange. This release adds theme-driven styling and an inline formatting toolbar, image merge fields, hyperlinks, lists, watermarks, 5-hop parent lookups, aggregate merge fields, the Doc Batches console, multi-template Doc Bundles, auto-email, three Flow actions, and Template + Bundle Export / Import.
Sliick Docs brings native, versioned document generation to your Salesforce org. Admins design templates in a WYSIWYG editor and publish them as immutable releases; business users generate the resulting PDFs in one click from any record page; Flows generate them in bulk; and the auto-email pipeline routes the finished file to the right recipients automatically. This guide is the complete reference for everyone who touches the product.
Guide overview
- What is Sliick Docs?
- Quick start: generate a PDF from a record
- Install, permission sets, and the org-wide theme
- Authoring templates
- Templates, Bundles, and Batches: the three units of work
- Bulk generation with Doc Batches
- Multi-template Doc Bundles
- Auto-email after generation
- Flow integration: three Flow actions
- Template and Bundle portability: Export and Import
- Security and permissions
- Troubleshooting and reference
What is Sliick Docs?
Sliick Docs is a 100% native Salesforce document-generation app. Everything runs inside your org and PDF rendering uses the native Salesforce PDF engine, so no document content ever leaves your boundary or transits a third-party service.
Key concepts:
- Template: one per logical document type (Account Summary, Quote Cover Letter, Work Order). Admins edit a template; end users generate from it.
- Draft and Release: while a template is being edited it lives as a draft. Publishing creates an immutable Release: a frozen snapshot the runtime renders from. Drafts can change freely; releases never do.
- Active Release: the release currently serving end users. Switching versions or rolling back is a single, fully audited change.
- Bundle: a named, ordered collection of templates rendered together against a single record as one combined PDF. Bundles publish to immutable releases too.
- Batch: a bulk run that produces many PDFs from one template (or one bundle) against many records.
- Base object: every template (and bundle) is anchored to a single Salesforce object. Merge fields and runtime data come from records of that object.
There are three ways to generate a document: from a record page (one click), from the Doc Batches console (bulk), or from a Flow (record-triggered, scheduled, or screen). All three share the same rendering engine, so what your admin sees in proof is what every recipient gets.
Quick start: generate a PDF from a record
The fastest path from a fresh install to a generated PDF, assuming an admin has already done section 3 below.
- Open a Salesforce record on an object that has a published Sliick Docs template (Account, Opportunity, your custom object).
- Find the Sliick Docs Generator component on the record page.
- Pick a template from the list (only templates with an active release for this object appear).
- Click Generate.
- The PDF appears in the Files related list. Click to open or download.
That is the end-user experience. Everything else in this guide is about giving admins the tools to design those templates well and to scale generation up to bulk, automation, and multi-template bundles.

Install, permission sets, and the org-wide theme
Install the package
Install from the Sliick Docs AppExchange listing.
When prompted, install for All Users (or Admins Only if you want a controlled rollout, then assign the relevant permission set per user).
Permission sets
Three permission sets ship with v1.0. Assign each user the one (or two) that match their role.
| Permission set | Grants |
|---|---|
Sliick_Docs_Admin | Template authoring, proof, publish, the Doc Batches console, and the Doc Bundles console. |
Sliick_Docs_User | Record-page generation only - no authoring, no consoles. |
Sliick_Docs_Automation | For the running user of any Flow that calls Sliick Docs, or for a dedicated integration user. Just enough access to run document generation from automation. No broad “View All / Modify All” rights. |
Assign from Setup > Users > Permission Sets.
Tip: in production, treat
Sliick_Docs_Adminas a privileged role for a small group of template authors. End users only ever needSliick_Docs_User. The running user of every Sliick Docs Flow needsSliick_Docs_Automation.
Set the org-wide theme
Open the Sliick Docs app from the App Launcher and click Settings. The Brand & theme panel controls the palette every template inherits.
| Setting | Default | Notes |
|---|---|---|
| Brand primary / secondary / accent | #1F5FBF / #475569 / #00A1E0 | Pickable as brand.primary / brand.secondary / brand.accent in any colour picker. |
| Body colour / body size | #1C1C1C / 11 pt | Default text colour and size for body copy. |
| Heading colour | #1C1C1C | Default heading colour. |
| Heading size H1 / H2 / H3 | 24 / 20 / 16 pt | Heading-level defaults. |
| Spacing: tight / normal / spacious | 4 / 8 / 16 pt | The three named spacing presets every block’s Spacing control uses. |
Theme changes take effect the next time a template is published. Existing releases keep the theme they were published with, so historical PDFs remain reproducible even after a rebrand.
Open the Template Library
Open the App Launcher and select Sliick Docs. The default landing tab is the Template Library. The other top-level tabs you will use are Doc Bundles, Doc Batches, and Settings.

Authoring templates
Create a template
A template is anchored to a single base SObject (for example Account, Opportunity, or any custom object). Every document the template generates is for one record of that object.
- Open the Template Library and click New template.
- Give the template a clear name (this becomes part of the generated PDF file name). Names are unique across the org, case-insensitive.
- Choose the Base Object the template will run against.
- Click Create. Sliick Docs creates the template and an initial draft, then opens the editor on that draft.

Note: the base object cannot be changed after creation. If you need a different base object, create a new template.
Editor anatomy
The Template Editor has four regions:
- Top bar: Save, Generate proof, Preview, Publish, history drawer, test record picker.
- Left rail: Blocks palette and Merge fields tab.
- Designer canvas: the page being authored.
- Right rail: Page settings and the Properties / Block style panels for the selected block.
A pinned inline formatting toolbar sits above the canvas whenever a styleable block is selected.

Pick a test record
Every draft needs a test record so proofing can render against real data.
- In the top bar, click the Test record picker.
- Pick any record on the base object. Use a record with realistic data including any parent lookups or child collections you reference.
The selection is saved with the template and reused across draft sessions. Picking a test record is a prerequisite for publishing.

Block reference
Drag blocks from the Blocks tab on the left rail, or click + Add block inside any container. Every block is selectable; the right rail switches to its Properties and Block style panels on select.
| Block | Use |
|---|---|
| Heading | H1, H2, or H3 heading line. Supports merge field chips inline. |
| Text | Paragraph text. Supports inline formatting per run and merge field chips. |
| Divider | Horizontal rule. |
| Spacer | Configurable vertical space. |
| Image | Static image embedded in the document (Salesforce File backed). |
| Table | Static table with manually authored rows and cells. |
| Two columns | 50/50 layout (compiles to <table> at runtime). |
| Page break | Forces a new page at runtime. |
| Signature | 2+ signer block with top-bordered lines and merge-field signer labels. |
| Section | Group of blocks with optional padding and “start on new page” behaviour. |
| Callout | Section variant with a tinted background and a coloured left bar (Captivating-v1). |
| Show if (cond) | Conditionally renders its children based on parent-record data. |
| Repeat for each | Loops over a child relationship of the base object; children render once per row. |
| List | Bulleted or numbered list, with merge field chips inside list items (Captivating-v1). |
Block-level styling
Every styleable block exposes a Block style section in the right rail. The controls render live in the canvas so what you see matches what the PDF will contain.
| Control | What it does |
|---|---|
| Spacing | Combobox per side (above / below / inner top / inner bottom). Pick Tight (4 pt) / Normal (8 pt) / Spacious (16 pt) from the theme, or Custom for 0 to 48 pt. |
| Background | A brand or theme swatch (Brand Primary / Secondary / Accent, Heading or Body colour), or a hex code like #F4F6F9. |
| Border | Width 1 to 8 pt, style is one of solid / dashed / dotted, colour (hex or theme reference). Per-side checkboxes pick which edges the border applies to. |
| Corner radius | 0 to 16 pt, all four corners. |
| Line height | Default / 1.0 (tight) / 1.15 / 1.5 / 2.0 (loose). |
| Indent | Stepper 0 to 4. Each level adds 24 pt of left padding. Text, heading, and callout blocks only. |
Theme references (brand.primary, theme.headingColor) resolve at compile time, so an org-wide theme change repaints every block using those references the next time the template is published. Hex codes are literal one-offs that do not track theme changes.
Inline formatting toolbar
When you select a text, heading, table cell, callout, or other styleable block, a toolbar pins itself above the canvas.
| Control | Acts on | What it does |
|---|---|---|
| Font family | Whole block | Combobox: Arial / Helvetica / Times New Roman / Courier New (the four fonts the native Salesforce PDF engine supports). |
| Font size | Per-run / next-typed | Numeric input + chevron. Type any value 6 to 96 pt, or open the popover for a vertical slider plus preset chips (8 / 10 / 11 / 12 / 14 / 16 / 18 / 24 / 36 / 48 / 72 pt). |
| B / I / U / S | Per-run / next-typed | Bold, Italic, Underline, Strikethrough. Hidden on heading blocks. Shortcuts: Cmd / Ctrl + B / I / U. |
| Align L / C / R / J | Whole block | Left, centre, right, justify. |
| Line spacing | Whole block | Default / 1.0 / 1.15 / 1.5 / 2.0. |
| A (text colour) | Per-run / next-typed | Letter over a coloured bar showing the active colour. Opens a swatch picker with brand / theme refs, hex fallback, Clear. |
| H (highlight) | Per-run / next-typed | Same picker pattern for background highlight. |
The per-run controls work in two modes: highlight a range first then click a control (Selection mode), or with just a caret click a control to arm it (Toggle-then-type mode). Active / Mixed / Off states reflect the selection: a Mixed underline button means part of the selection is underlined and part is not.
Merge fields
Merge fields are first-class objects in Sliick Docs. They are stored as structured chips inside text runs, not as plain text placeholders, so they cannot be accidentally broken.
To insert a merge field:
- Click into a Text, Heading, or table cell block.
- Open the Merge fields tab on the left rail (or type
{{to open the autocomplete). - Search by label or API name and click the field to insert it.

Scope of merge fields (v1.0)
- Root scalar fields on the base object.
- Parent lookup fields up to five hops (for example
Account.Owner.Profile.UserType.Name). Works at root scope and inside Repeat scope. - Child collections rendered via Repeat for each blocks (one-hop child relationships, no nested repeats).
- Conditional visibility via Show if (cond) blocks (see grammar below).
- Aggregate functions over child relationships:
SUM,COUNT,AVG,MIN,MAX, with an optional Format. - Image merge fields: any ContentVersion / URL field can be rendered as an image (toggle in the chip popover).
- Hyperlinks: text or merge-field chips can be wrapped in
<a href>; merge-field placeholders are allowed inside the URL (https://salesforce.com/{{Account.Id}}).
Field-level security
Sliick Docs always honours your Salesforce permissions. When an admin browses for merge fields, they only see fields they themselves can read - so two different admins may see different field lists depending on their access. If a field you expect to see is missing, ask your Salesforce admin to check your profile or permission sets.
Format dropdown
Every scalar merge-field chip carries a Format dropdown alongside the fallback input. The format choice applies at PDF render time using the running user’s locale; the chip’s stored value is untouched.
| Format | What it does | Example (Opportunity.Amount = 12345.6 in en-AU) |
|---|---|---|
raw (default) | Renders the value as Salesforce returned it. Useful inside URLs or downstream calculations. | 12345.6 |
currency | Currency formatted using the running user’s locale and the field’s currency ISO code. | $12,345.60 |
number | Locale-aware thousands separators; uses the field’s display scale. | 12,345.6 |
percent | Multiplies fractional values by 100 and appends %. 0.125 renders as 12.5%. | 12.5% |
date | Locale short-date form. | 18/05/2026 |
datetime | Locale short date + time. | 18/05/2026, 14:32 |
Fallback text
The same chip popover offers a Fallback text input. If the resolved value is blank at runtime, the fallback renders instead. Useful for Account.Phone with a fallback of (no phone on file).
Image merge fields
To merge a Salesforce ContentVersion or URL field as a dynamic image:
- Insert the merge field chip as usual.
- Click the chip to open its popover.
- Toggle Render as image. Width and height inputs appear.
At runtime the chip resolves to an <img> tag using the field’s URL or the latest ContentVersion’s download URL. Image merge fields work the same way inside Repeat scope: each iteration resolves to its own image.
Hyperlinks
Wrap text or merge-field chips in <a href> via the link affordance in the inline toolbar. URLs accept merge-field placeholder tokens, for example https://help.example.com/account/{{Account.Id}}. The merge fields inside the URL resolve per record.
Lists
Bulleted and numbered lists are first-class blocks. Each list item is a text run that supports merge field chips and inline formatting.
Conditional content (Show if)
A Show if block conditionally renders its children based on parent-record data. Expressions are parsed at save time, so any syntax errors surface in the right rail as plain-English messages while you author.
| Construct | Example |
|---|---|
| Comparison | Account.AnnualRevenue > 1000000 |
| Equality | Account.Industry = 'Technology' |
| Inequality | Account.Industry != 'Healthcare' |
| Contains | Account.Name contains 'Acme' |
| Logical AND | Account.IsActive = true AND Account.AnnualRevenue > 1000000 |
| Logical OR | Account.Industry = 'Technology' OR Account.Industry = 'Software' |
| Negation | NOT Account.Industry = 'Healthcare' |
| Grouping | (Account.Industry = 'A' OR Account.Industry = 'B') AND Account.Amount > 1000000 |
| Null check | Account.Description = null |
Operators: =, !=, >, >=, <, <=, contains (case-insensitive substring). Literals: single-quoted strings, decimals (including negative), true, false, null.
Repeating sections
A Repeat for each block loops over a child relationship of the base object. The block’s children render once per row (one row per Opportunity Line Item, one row per Contact, and so on).
- Source relationship: pick from the dropdown of available child relationships. The list only shows relationships you have access to.
- Filter (optional): narrow the rows that render, for example
Opportunities.StageName != 'Closed Lost'. - Inside a Repeat block, the Merge fields tab flips to show the child object’s fields. Insert chips like
{{Opportunities.Amount}}; they resolve per row at runtime. - Five-hop parent lookups also work inside Repeat blocks, for example
Opportunities.Account.Owner.Profile.Name. - Nested Repeat blocks aren’t supported in v1.0.
Signatures
A signature block renders a 2+ signer area with top-bordered lines and merge-field signer labels (for example Account.Name for the customer line, Account.Owner.Name for the rep line). Add or remove signers in the right rail; minimum two.
Watermarks
In the right rail Page settings, the Watermark field accepts a string that renders on every page of the generated PDF. Theme references and merge-field chips are not yet supported inside the watermark (string only). Use this for DRAFT, CONFIDENTIAL, copyright lines, or document-classification labels.
Validation, proof, and the Ready state
Sliick Docs validates your template every time you save (and again when you proof or publish). It checks that every merge field, theme reference, and inline expression still resolves and that block-level styling is within bounds, so problems surface before generation rather than during.
The right rail shows the current state (Valid, Warnings, Errors) with a plain-English summary you can act on. Unresolved merge fields are treated as errors so they never silently render as blanks at runtime.
To generate a proof:
- Save your changes.
- Click Generate proof in the top bar.
- Review the resulting PDF. Generated proofs are saved to Salesforce Files with the file name
<Template Name> - v<Version Number> - Proof - <Record Id>.pdf.
A version becomes Ready when validation is Valid and the version has been proofed against its test record at the current saved contract. Saving after proofing drops the version back to Draft until you re-proof.

Publishing
Publishing freezes your current draft into a new, immutable release and atomically makes it the active version. Releases never change after publish, so a document generated today will look identical when re-generated next year.
- From the editor, click Publish in the top bar. (The button appears once the version is Ready.)
- Confirm. Sliick Docs creates the release, snapshots the theme alongside it, and switches end users onto the new version - all in one step.
- The editor goes read-only. A + Create draft button replaces Publish when you’re ready to iterate again.
To roll back, point the template at a prior release (or clear it to take generation offline for that template). Past releases are preserved for audit.

Templates, Bundles, and Batches: the three units of work
It is worth naming the distinction up front.
- Template is the unit of authoring. One template renders one PDF for one record at a time.
- Bundle is the unit of composition. One bundle stitches several templates together into a single combined PDF for one record. Bundles publish to immutable releases too.
- Batch is the unit of bulk. One batch runs one template (or one bundle) against many records. Each batch has its own status (Queued, Running, Merging, Succeeded, Partial Success, Failed, Aborted) and tracks one job per record.
Behind the scenes all three follow the same path: load the record, evaluate any conditional or repeating sections, substitute merge fields, render using the native Salesforce PDF engine, save to Salesforce Files. The difference is who initiates and how many records are covered.
Bulk generation with Doc Batches
The Doc Batches tab is where admins submit and monitor bulk runs.
Submit a new batch
- Click New batch.
- Pick a template (only templates with a published release appear) or a bundle.
- Pick a source:
- By filter: type a SOQL
WHEREclause (or leave blank to target every record of the base object). - By report: pick a tabular Salesforce report (up to 2,000 rows).
- By record IDs: paste a list of up to 2,000 record IDs (also available from the Flow action).
- By filter: type a SOQL
- Pick a batch size (1 to 200, default 1).
- Pick an output mode:
- Individual (default): one PDF per record, attached to that record via
ContentDocumentLink. - Combined PDF only: one merged PDF attached to the batch row; no per-record files.
- Both: one PDF per record plus a combined PDF.
- Individual (default): one PDF per record, attached to that record via
- Click Analyze.
The pre-flight verdict shows release readiness, record count vs the 50,000 cap, and (for Combined / Both) a combined-heap estimate vs the 12 MB async-heap ceiling.
Spot-check sample
From the verdict, click Preview sample to step through up to 5 sample records and see exactly how each will render. This catches merge-field problems before generating 500 PDFs.
Monitor
The batch monitor refreshes every 5 seconds. The header shows a status badge and progress bar; the per-record table updates as each record completes. While the run is in flight, Cancel is available and Sliick Docs stops the underlying job as soon as it can.
When the run terminates, the recent-batches sidebar updates and a Sliick Docs Batch notification is sent to whoever submitted it.
Download
- Individual / Both modes: Download all as ZIP is available on the monitor. Sync up to 50 records; asynchronous above (a notification fires when the ZIP is ready). Each batch also lists per-record files inline.
- Combined / Both modes: the combined PDF is on the batch row itself, available as a single download.
Retry failed
After a batch ends as Partial Success or Failed, expand the row and click Retry failed. If the template has been republished since the original run, Sliick Docs surfaces that in the confirmation dialog so you can decide whether to re-run against the original release or the new one. The new batch links back to the original so you can trace retry chains. Capped at 2,000 failed records per retry.
Limits worth knowing
| Limit | Default | Configurable? |
|---|---|---|
| Records per batch | 50,000 | No - Salesforce platform limit |
| Record IDs per Flow call | 2,000 | No |
| Concurrent batches per template / bundle | 3 | No |
| Sync ZIP record cap | 50 | Yes, via custom metadata |
| Batch size (records per chunk) | 1 | Yes, per submission, 1 to 200 |
| Combined-mode size cap | ~10 MB | No - Salesforce async heap limit |
Multi-template Doc Bundles
A bundle is a named, versioned bundle of templates rendered together against one source record to produce a single combined PDF. A Sales Bundle might combine a cover letter, the actual quote, the terms and conditions, and an optional NDA addendum.
Create a bundle
- Open the Doc Bundles tab.
- Click New bundle.
- Fill in the display name, base object API (every member template must share this base object), and an optional description.
- Click Create.
Add templates to a bundle
- On the bundle card, click + Add template.
- Pick a template that shares the bundle’s base object. Templates already in the bundle are filtered out.
- Set Required or Optional. Required = the bundle fails if the template is inaccessible. Optional = soft-skip and continue.
- Click Add. The item appends to the end.
Reorder items with the up / down arrows on each row. Remove items with the trash icon.
Per-item inclusion expressions
Each bundle item can carry an optional inclusion expression (same grammar as the Show if block, for example Account.Industry = 'Technology'). The expression is frozen into the bundle release at publish and evaluated at runtime against the source record. Items that evaluate to false are silently skipped from the combined PDF.
Publish a bundle
Click Publish on the bundle card. Sliick Docs snapshots each member template’s current active release into the new bundle release. Once published, the bundle renders the same way every time, even if a member template is later republished.
Drift handling
Bundle releases are immutable by design. When a member template is republished after the bundle was published, the bundle does not auto-update. Instead:
- The bundle library card shows a yellow Members updated badge with a tooltip listing affected templates.
- A one-click Republish with current members action produces a fresh release that re-snapshots all current member releases.
- The retry-failed confirmation dialog on the Doc Batches console calls out drift in the same way.
Bundle runtime
Single-record bundle generation is available through the Generate Sliick Bundle Flow action (section 9). Bulk bundle generation is available through Generate Sliick Docs (Bulk) (pass the bundle instead of a template) or directly from the Doc Batches console.
Auto-email after generation
Configure email-on-success per template via six fields on the Template record.
| Field | Purpose |
|---|---|
| Auto Email Enabled | Master switch. Default off. |
| Auto Email Template Id | Lightning or Classic Email Template (both supported). |
| Auto Email Recipient Field | Field path on the base object, for example Owner.Email or PrimaryContact__r.Email. |
| Auto Email Cc Field | Optional CC path. |
| Auto Email From Address Id | Org-Wide Email Address used as the From address. |
| Auto Email Save As Activity | Default on. Logs sent emails as Activities on the source record. |
When generation succeeds for a record (single or batch), Sliick Docs sends the email automatically. The subject and body come from your chosen Email Template (with full merge-field support against the source record); the generated PDF is attached.
Every record’s job carries an email audit trail:
| Field | Values |
|---|---|
| Email Status | Not Required (template has auto-email off) / Pending / Sent / Failed / Skipped (no file to attach) |
| Email Sent At | Timestamp |
| Email Recipients | The actual addresses resolved at send time |
| Email Error | The reason, when status is Failed |
Behaviour on failure: if generation succeeds but the email fails (for example the recipient field is blank), the document still counts as successfully generated and the file is saved. The Email Status field records the failure separately. The batch’s overall status rolls up: any failed email flips the batch to Partial Success even when every document generated cleanly.
Daily limit. Salesforce caps single-recipient emails at 5,000 per 24 hours, org-wide. A batch that would exceed the daily allotment is flagged in the pre-flight analyzer.
Flow integration: three Flow actions
Sliick Docs ships three Flow actions for use in Record-Triggered, Scheduled, and Screen Flows. All three are designed to never throw. Failures are returned cleanly as success=false plus an errorMessage, so your Flow can branch on the outcome rather than halting the whole transaction when something goes wrong.
Generate Sliick Doc (single record, synchronous)
| Input | Required | Notes |
|---|---|---|
templateId | yes | Must reference a template with a published release |
recordId | yes | Must match the release’s base object |
Outputs: jobId, contentDocumentId (the saved PDF), success, errorMessage.
Generate Sliick Docs (Bulk) (asynchronous; returns the batch ID immediately)
| Input | Required | Notes |
|---|---|---|
templateId | either | One of templateId or bundleId is required (not both). |
bundleId | either | Pass for bundle bulk runs. |
queryCondition | one of | A SOQL WHERE clause to target records by filter. |
recordIds | one of | A list of up to 2,000 record IDs. |
reportId | one of | A tabular Salesforce report (up to 2,000 rows). The report’s primary object must match. |
jobLabel | no | Defaults to Flow Run @ <timestamp>. |
batchSize | no | 1 to 200, default 1. |
outputMode | no | Individual (default) / Combined / Both. |
Outputs: batchId, success, errorMessage.
One important Flow-authoring rule: pass your record collection to the bulk action once, not inside a Loop. Wrapping the bulk call in a Loop creates one batch per record instead of one batch for the whole set, which is almost never what you want.
Generate Sliick Bundle (single record, synchronous)
| Input | Required | Notes |
|---|---|---|
bundleId | yes | Must reference a bundle with a published release |
recordId | yes | Must match the bundle’s base object |
Outputs: jobId, contentDocumentId (the combined PDF), success, errorMessage.
Three common automation shapes this unlocks
- Auto-on-state (Record-Triggered Flow): Opportunity entry condition
IsClosed = TRUE→ call Generate Sliick Doc withtemplateId+[Record].Id. A closeout PDF lands on every newly-closed Opportunity automatically. Pair with auto-email to email it to the customer too. - Recurring batch (Scheduled Flow): daily at 2am → Get Records (Accounts updated yesterday) → single call to Generate Sliick Docs (Bulk) with the resulting collection. Customers receive an overnight statement PDF.
- User-driven bulk (Screen Flow): picker for template, picker for filter or report → Generate Sliick Docs (Bulk) → display the returned batch ID with a follow-up link to the Doc Batches tab so the user can monitor progress.
Template and Bundle portability: Export and Import
Templates and bundles are Salesforce records, not metadata, so Change Sets and SFDX deploy do not move them. The Library and the Bundles tab both ship Export and Import actions.
Export
- Template Library: every template card has a download icon. Clicking it downloads
sliick_<TemplateName>_<YYYY-MM-DD>.json. - Bundles tab: every bundle row has an Export link. The export includes the bundle header, items, and every member template by default so the target org has everything it needs.
Org-specific references (test record ID, auto-email recipient / CC / from-address / template IDs) are scrubbed automatically.
Import
- Open the target org’s Template Library (or Bundles tab) with Sliick Docs installed and
Sliick_Docs_Adminassigned. - Click Import Template (or Import Bundle).
- Choose the
.jsonfile. Click Import. - A summary modal lists what was imported with any warnings (renamed-on-collision, unresolved merge fields, fields hidden by your permissions, unresolved bundle members).
What an imported template starts as
- Status: Draft. Imported templates never start as Active. Re-publish after picking a test record and re-validating.
- No active release. Releases are immutable runtime snapshots local to each org.
- Test record is unset.
- Auto-email is disabled. Recipient / CC / from-address / template IDs are org-specific Lookup values and are scrubbed on export.
Name collisions
If the target org already has a template with the same name, the import auto-renames to <Name> (Imported 1), then (Imported 2), and so on. The summary surfaces the rename so you can fix it from the Library.
Security and trust
Sliick Docs is built to a Salesforce-first security model and has passed the AppExchange security review. The short version for a security or compliance reviewer:
- Your data never leaves Salesforce. Documents are rendered by the native Salesforce PDF engine, inside your org. No external rendering service, no third-party endpoint, no Remote Site or Trusted Site is required.
- Your existing Salesforce permissions are enforced everywhere. Every read and write Sliick Docs performs runs with the user’s own sharing, profile, and field-level security. Two users will see only the data they’re already entitled to see, in the editor and in the generated documents.
- Published documents are tamper-proof. Each Publish action creates an immutable release. Releases are never edited or overwritten, so a document generated today will look identical a year from now, even if the underlying template has been rewritten.
- Every generation is fully audited. Each PDF, single or bulk, is logged with who ran it, when, against which record, with which template version, the resulting file, and (when auto-email is on) every recipient address.
- Least-privilege permission sets out of the box. Three permission sets ship with the package - Admin, User, and Automation - so end users only get the ability to generate, automation accounts only get what they need to run, and admin rights stay with a small group of template authors.
- Reviewed by Salesforce, not by us. Sliick Docs is listed on the AppExchange, which means an independent Salesforce security review has examined the package against the AppExchange Security Requirements before it was made available.
Detailed technical guarantees (sharing semantics, query enforcement, stripInaccessible usage, audit-field write paths) are available on request for security-review processes.
Troubleshooting and reference
Authoring
| Symptom | Cause and fix |
|---|---|
| Validation shows “All checks passed” but the proof PDF is missing fields | The test record has no value for those fields. The validator confirms the field exists and is readable; it cannot confirm a particular record has data. |
| ”The repeat source X is not a known accessible child relationship” | The relationship name doesn’t match any of the parent object’s child relationships, or the running user doesn’t have permission to read the child object. |
Proof PDF shows raw {{Account.Field}} text | The merge field could not be substituted: the field was deleted after publish, or the running user no longer has permission to read it. Re-proof to surface the cause. |
| ”Create draft” is missing from the editor | The template has no active release yet. Create draft only appears for published templates. |
| Repeat block renders nothing in the proof | The test record has zero rows in the chosen child relationship. Pick a test record that has child rows, or accept that the empty case is expected. |
| A specific error keeps appearing in a toast | The toast carries the root cause. For the full technical stack, ask your Salesforce admin to enable a debug log on the user and reproduce. |
Batches
| Symptom | Cause and fix |
|---|---|
| ”This template already has 3 active batches” on submit | Hit the per-template concurrency cap. Wait for one to finish, or cancel a Queued one. |
| Analyzer says “Cannot proceed” with heap error in Combined mode | Reduce the record count via a tighter filter, or switch to Individual mode (per-execute heap is independent across chunks). |
Batch is Running for hours without progress | Open the monitor - it will re-check the underlying job and reconcile its state. If still hung, Cancel and resubmit. |
| Combined PDF is missing on the batch row | If status is Merging, the merge is still in flight - wait. If status is terminal but no file is attached, check the batch’s error summary. |
| ”Download all as ZIP” doesn’t appear | Mode is Combined-only (no per-record files), or success count is zero. |
| Flow logs show one batch row per Loop iteration | The Bulk action was called inside a Flow Loop. Replace the Loop with a single Bulk call that passes the whole collection at once. |
| Record-Triggered Flow stops with no PDF generated | The Flow action returns success=false and an errorMessage rather than throwing. Add a Decision element on success and read errorMessage on the failure path. |
Imports
| Symptom | Cause and fix |
|---|---|
| ”Import file uses schemaVersion N but this org only knows version 1” | The export file came from a newer package version than the target org. Upgrade Sliick Docs in the target org, then retry. |
| ”Base object ‘X’ does not exist or is not accessible in this org” | The object (or relevant access) is missing in the target org. Add the object, then re-import. |
| Merge field unresolved warnings | A referenced field doesn’t exist in the target org. Add it (or update the editor state) and re-validate. No need to re-import. |
| Import succeeded but the new template name is “X (Imported 1)“ | Auto-rename on collision. Rename to your preferred name from the Library or the editor. |
| No “Import Template” button | The user lacks Sliick_Docs_Admin. Assign it. |
Runtime (end users)
| Symptom | Cause and fix |
|---|---|
| No templates appear in the Generator component | No template has an active release for this object, or the template has not been published. Contact your admin. |
| Generation fails with a permission error | A field referenced by the template is hidden from you by Salesforce permissions. Ask your admin to grant access or adjust the template. |
| The generated PDF has missing data | A merge field could not resolve. This should normally fail at validation. Ask your admin to re-proof and re-publish. |
| The generated PDF formatting looks unusual | The proof in your admin’s editor is the source of truth. Ask them to compare against a fresh proof; if it differs, raise an issue. |
Generated file naming
- Proof files:
<Template Name> - v<Version Number> - Proof - <Record Id>.pdf - Runtime files: the per-template File name pattern (with merge-field tokens like
{{Account.Name}} - Summary.pdf), or the default{{<BaseObject>.Name}}.pdfif blank. Illegal filename characters are stripped automatically.
What is intentionally NOT in v1.0
- Per-page running headers and footers: the native Salesforce PDF engine doesn’t yet support repeating headers and footers on every page.
- Nested Repeat blocks: one level of looping only.
- Two-hop child paths from inside a Repeat: for example
Opportunities.Account.Nameinside an Opportunities repeat. Parent lookups outside Repeat blocks go five hops. - Junction relationships: multi-hop lookups across junction objects.
- Word / DOCX export: PDF only.
- External rendering engines: native Salesforce PDF engine only - by design, so nothing leaves your org.
- Custom fonts: Arial, Times New Roman, Helvetica, and Courier New only (the fonts the native Salesforce PDF engine supports).