A ConfigType will make the link between data and the action to take on the MergeField in the MS Word Document.
Dynamically load pictures from Salesforce into your documents. Linked to records, eg products. Multiple linked to a single record, eg case. And the super complex stuff to add APEX to get exactly what you want.
Product pictures (not complex): Case pictures (medium complex): Logo pictures (very complex): Optimize your pictures for size
Some Mergefields are only for identifying structures in the document, for instance a Table or a Row. When the document is generated,
you do not want to see these anymore. So these will not be replaced via a SINGLE ConfigType.
Of course, you do not want to see these in the resulting document.
PDF Butler allows full control over your mergefields. The lesson shows how to control the removal of MergeFields.
SFDC Rich Text fields can have pictures. Overall we a are not a big fan of this but we do support them.
PDF Butler might be the only solution that supports Rich Text Pictures in a robust, rock-solid way.
If you want to use Rich Text Pictures, contact support@pdfbutler.com to get our free add-on. Make sure to provide your PDF Butler username and your OrgId when contacting us!
The class to use in the Actionable: PDFButler_Actionable_RichTextPics
Do you require to handle multiple and/or large Rich Text Images you might hit Salesforce Limits.
PDF Butler Image processors can work around the SFDC Limits, also for RichText Images.
Depending on your contract, there might be an extra cost, check with your Account Manager.
Want to replicate a block of information. You can do this with a TABLE but also with a CONTENT_CONTROLLER.
Enable Developer menu item in MS Word: Show Developer tab
Use these ConfigTypes in a complex setup with parent-child (Nested) DataSources.
A CONTENT_CONTROLLER can be the child of another CONTENT_CONTROLLER. Here we will make an example how a ROWS_CONTROLLER is the child of a CONTENT_CONTROLLER
This is quite a complex example but gives a very good overview of the power of combining and nesting DataSources and ConfigTypes
Repeats columns in a table.
There is also a complex column repeater that can repeat both columns and row in a table. Contact customer success team for more information.
Repeats pictures on the same line.
Dynamically adds other DocConfigs to your document. The PDFs of the other DocConfigs, supplied via a DataSource, are generated are glued together with the main document.
With this ConfigType, the DocConfigs do not have to be of type TEMPLATE.
If the DocConfigs that are dynamically added have DataSources, these DataSources must be included in the main DocConfig that you are generating!
A DataSource indicates how to get data from Salesforce but also describes the data.
KeyValue DataSources can be used to fill data that is generated by logic, eg APEX.
Sometimes it is easier to re-use certain data instead of having it hardcoded in your document templates. Static values can be used for this purpose. For instance company addresses, names of persons, ... . Keep them in an easy to manage and re-usable Static datasource and use them in multiple templates.
Sometimes it is required to load a large amount of pictures. The special thing here is that the pictures are not loaded in Salesforce but directly in PDF Butler. This enables us to bypass certain Salesforce limits and to faster load these pictures when they come in large amounts (up to 300). PDF Butler will load the pictures in parallel to optimize the generation speed.
Our managed package has a some unique and great Lightning components that have been improved the past 2 years to support almost any process.
Lightning component handles your DocConfigs, your Packs, upload static files, downloads, viewer, ... all in 1 component.
Need more control over which DocConfigs to show, which Alternative or locale to set. We give you full control via a Flow. You can define all data by a Flow.
In some cases, you want to review the document before saving, emailing, signing, ... . The previewer Lightning component shows your document and proposes the actions to take.
Use the Previewer in Lightning Flows, VisualForce, ... . You can just pass in the variables and the component will show the PDF.
This component can be fully tailored by your needs and provides an easy way to show a preview in a Flow
Get the component by contacting: support@pdfbutler.com
You can easily provide 5 parameters to the component. These parameters can be passed on to the DataSources for filtering.
Possible Types for parameters (They have to be copied as these are case sensitive):
Use the Previewer in Lightning Flows, Safari Browsers, Salesforce Mobile, VisualForce, ... .
In this episode learn how easy we made it to define a specific Component that allows to configure a Quick Action.
See the full code example in the Word file you can download below.
Get the component by contacting: support@pdfbutler.com
In some cases, you have to make changes to the document or collaborate with your legal, solutioning, ... teams on the document before sending it out.
With this component, you can easily upload your updated DOCX file and continue the process directly from Salesforce. This component will convert the DOCX to a PDF and run your pack. That can be any action like email, digital signature or just storing the PDF in SFDC.
Because you are working with a DOCX file, you have full control over the information in the document you want to change. As you are working in MS Word (or other editors) you have the world's best document editor which makes it much easier for anyone in the team to make changes and on the Word document, you can collaborate with your teams that are not working in Salesforce (eg Legal).
MS Word can have Restricted Editing on most of the content of the document. You can create areas and fields that can still be edited by employees or customers.
When generating a DOCX file with PDF Butler, Restricted Editing is still on in the MS Word document. Now, the document can be edited safely.
Drag the document on the Live Edit component to continue the process, eg send PDF by email or for signing.
Need your users to select mandatory and optional documents to construct a custom quote. The DocConfig Selector allows to build your own logic to decide which DocConfigs are mandatory and optional.
Variables:
This is an add-on component. Request the latest version via our Customer Success team.
Combining DocConfigs so multiple can be generated in 1 go (and can be merged into 1 document). Adding actionables to docconfigs. Re-using the same docConfig and set it up for different actions, eg pack for mailing, pack for digital signatures, other before/after actionables, running custom code, … .
Edit your emails generated by PDF Butler before sending them out. All from Salesforce and directly from the "Send Email" Quick Action!
Via Lightning Email Template:
Class to use: cadmus_core.Actionable_AutoEmailQuickAction
OR
Via Email DocConfig:
Class to use: cadmus_core.Actionable_EmailDocConfigQuickAction
Salesforce changed the Activity view in Spring 23 release and introduced an issue doing so.
We have discussed this issue with Salesforce already in January and they confirmed that with this update Salesforce breaks backwards compatibility with the Email Quick Action functionalities. But, the Salesforce team still went ahead with the release.
The Salesforce team could not give a date nor a roadmap on when this issue they introduced would be resolved or that compatibility with the Email Quick Action would be restored.
So the only option we have is to activate the option "Activity Tabbed View".
Change back to "Activity Tabbed View"
Customize the PDF Butler process directly in Salesforce. Need to retrieve data from backend, do some serious calculations, prepare variables, take custom actions when the document is generated, ... . We got you covered!
Download example Test Class for BEFORE Actionable
Complex example to transforms JSON data into DataSources. The JSON Data can come from a backend call or from anywhere else. In general, you can transform any data into DataSources.
Our vision is to start your document generation process in a single click but we can do even better ;-). How does zero-click sound?
Lightning Flow is a great tool to build business logic and represent it visually. You can just plug in PDF Butler in your Flow
Call PDF Butler from FlowDo more:
Control your DataSource data via Flow logicYou might have a use-case in which your end user needs to select data or ranges and you want to use that information to select data for PDF Butler to handle. We got you covered and you do not even have to write APEX!
Automation sounds great but you are taking it to the next level... APEX!
LWC code example:
This example shows how to call PDF Butler from a button in an LWC component and download the generated document.
Automation sounds great but you are taking it to the next level... APEX!
This shows how to create an Aura component that generates a PDF and shows a preview. From the previewer, you can download and call a Pack.
Aura previewer overviewWe can cover so much in our Datasources but you might have a use case that is even harder! Complex grouping, calculation, integration with backend systems, tranformation of data, ... . With an APEX Actionable, you can prepare your data in APEX before PDF Butler handles it. No need to store your transformed data, calculated Just-In-Time and passed on to PDF Butler.
A permission set group streamlines permissions assignment and management. Use a permission set group to bundle permission sets together based on user job functions. Users assigned the permission set group receive the combined permissions of all the permission sets in the group.
Permission set groups with PDF Butler (but also BULK, COLLABORATION and SIGN Butler) is the best way to use the permissionsets from the managed package without cloning.
Best to setup 2 types of permission set groups:
On any Salesforce list view, add a button to create multiple documents in 1 go.
It is not possible to configure Lighting Mass Actions yet so the only solution is an sObject specific VisualForce page. We have these for all standard sObjects like Account, Opportunity, ... . Contact support to get this add-on package or a code snippet to easily create your own: support@pdfbutler.com
Setup List View ButtonWhen you want to take an action after the document is generated, this action can be executed from an Autolaunched Flow.
Create an Actionable in PDF Butler of recordType "Run Lightning Flow", pass on the API name of your Flow and the class: "cadmus_core.Actionable_RunAfterFlow"
Update the record Save to document to another recordCPQ spells:
FSL spells:
In this tutorial, we will guide you step by step to create a Service Report that shows
Create the best looking Service Report ever.
Get our thumbnail component via: support@pdfbutler.com. This is a PDF Butler Actionable that can be easily installed as a package. Comes with comments and unit-tests.
PDF Butler will match your environment setup and development lifecycle. You can have different "stages", you can see these as versions
in your development & deployment lifecycle. Map these stages to your Salesforce Orgs. By default everybody will have a PROD and a TEST stage.
If you want more, just sent a mail to: support@pdfbutler.com
Following stages are available:
When you have registered for PDF Butler, you can reuse the same username and passwords on every environment. PDF Butler will know which configuration you need by the Stage that is set in your Org or Sandbox. Deploying between Stages, and thus Salesforce.com Orgs is done by a few clicks (see Deployment)
Overview of how PDF Butler can solve common questions on Salesforce products.
You can use PDF Butler directly from your lightning community..
Common questions on using PDF Butler in a community:
1) Make sure to configure the sharing rules on the PDF Butler objects for external users. Add these objects:
Overview of how PDF Butler Doc Config types. Following types are available:
Start from MS Word to generate your PDF or MS Word documents.
DocConfig emailCreate Excel (XSLX) reports with data from Salesforce. Datadumps or complex groupings ... We got you covered.
Need to handle a Salesforce PERCENT field in Excel? Salesforce does not store Percent fields with decimals eg it will store 75% as 75. While Excel expects 0.75 to show 75% for a Percentage field!
A useful overview of TIPS & TRICKS we have used and learned from our customers.
Need to show templates like product sheets or contract add-ons dynamically based on your data and selection. No problem, this tutorial shows how you can control that.
Product Sheet 1: GenWatt Diesel 10kW
Product Sheet 2: GenWatt Propane 100kW
Generating fully dynamic document in which content must appear or disappear depending on criteria is exactly what you want.
Introducing white-spaces and empty sections along the way is exactly what you do not want!
This video gives some ideas on how to handle this. Working with Criteria on TABLE_ROW/TABLE/PARAGRAPH ConfigTypes can also work to get you that perfect looking document.
We have a solution for every problem, so do not hesitate to contact us: support@pdfbutler.com
PDF/A is an ISO-standardized (ISO 19005-1) version of the Portable Document Format (PDF) specialized for use in the archiving and long-term preservation of electronic/digital documents.
When generating PDF/A compliant documents, we targeted for the full conformance level of PDF/A-1a! So this means that we are completely compliant with PDF/A-1a and PDF/A-1b (as this is a subset of PDF/A-1a).
Get all approval steps and related information. This Actionable will collect all Approval History Information and adds it to a KEYVALUE DataSource.
Class: PDFButler_Act_GetApprovalHistory
Fields for the KEYVALUE DataSource:
Contact PDF Butler support for more information: support@pdfbutler.com
The values of a MultiSelect Picklist are stored as a ";" separated text in Salesforce. That makes it difficult to handle.
This video will show how to retrieve these values in a List.
Class: PDFButler_Actionable_MultiSelect
Fields for the KEYVALUE DataSource:
Contact PDF Butler support for more information: support@pdfbutler.com
How to work with Sections in MS Word to have different headers and footers for different Sections in your Word document.
Make sure to unlink every Section from the previous Section. No "Link to Previous"!
Also look at "CONDITIONAL SECTIONS"
To debug your datasources, it can be very interesting to use our Chrome Plugin: Butler Inspector.
Demo & Install hereA lot of companies have to support multiple languages, brands, templates, ... . No need to re-create the full configuration!
How to link multiple templates to the same DocConfig? And more importantly, how to use the correct template automatically?
You will learn all of this in this video.
We will start with the quote from the "Get Started" section and translate that one.
Multi-Country example: we show different options for managing Documents over countries, create country-specific sections, use labels for translations, work with Alternatives and locales for formatting.
We provide the features, you define your architecture!
Every country, language, and combination of both have their way of formatting dates, currencies, numbers,...
The combination of language and country is called locale. For instance, in Belgium, we speak Dutch, French, and German. Our locales are:
With the PHONE field type in a DataSource, you can format phone number.
This formatting is in the context of the User or the context you define via the locale (see other cards on information on Locales). The phone numbers will be formatted according to international standards for phone number formatting per country.
There are 2 types of format:
Get translations for labels and texts in your document. Manage these translation in Salesforce. Learn how to use Custom labels in relation with your customer or users locale.
Get translations for labels from a STATIC VALUES DataSource. These can be easier to manage and do not require any Actionables.
CPQ offers powerful tools to translate your products and product information. With our "CPQ Translations" add-on, we can use those translations in your multi-language documents.
It does not matter if it is text, text-area, or rich-text fields. All are by PDF Butler supported!
Use your CPQ Localization config to translate your documents.
Request access to this free package via: support@pdfbutler.com
A usefull overview of FAQ we have used and learned from our customers.
This error is annoying, Salesforce tells us the best practice is to use Protected Custom Settings for confidential information, then it goes and invents a new permission and then it does not allow ISV partner to add it to their permissionsets automatically. Sorry, you have to set it yourself.
Check System Permission “View all Custom Settings”PDF Butler support is all about helping! So the best way to help is to access your Org.
No need to create a user, you can just allow access for a certain time. This allows us to check your question.
You need to grant login to "CloudCrossing Support", this is the name of the company that owns the PDF Butler product.
Sure it does!
There is a "but" ;-)
Generating documents is always possible but if you want to configure DocConfigs, you will need to create a password for you Scratch Org user and login via the browser
Otherwise, you will see an error like: "Oops, there was an error rendering Canvas application" or "Your Browsing session has ended or is invalid"
You can generate a password via: sfdx force:user:password:generate --targetusername <username>
You can see the password again by running: sfdx force:user:display -u <username>"
If you open the org via your IDE (eg VSCode), you will get the error: "Your browsing session has ended or is invalid" when opening the configpage.
Of course we can! Shield Platform Encryption for encrypting fields on standard, custom and even managed package fields is fully supported.
Overall, you can add the encrypted fields to your PDF Butler DataSource. All security and permissions of the roaming user are checked by Salesforce before returning the data.
This means when the user has access to the data, it will show unencrypted in your document .... Just as you would expect.
We fully align with the Salesforce platform, this means it capabilities and limits.
See this article for more info: General Trade-Offs
Because you do not allow Salesforce to send emails from your domain name.
An example:
Your domain is "xyz.com" and the SalesRep's email is "igor.stuyver@xyz.com". An automated process in Salesforce sends an email to one of your customers.
So, the email is sent by Salesforce but the from-address of the email is "igor.stuyver@xyz.com", this is seen as SPAM as the sender servers are not from the domain "xyz.com".
If anybody was able to send emails from your domain ... that would make phishing very easy.
Now, how do you allow Salesforce to send emails from your domain?
The Salesforce Admin must work together with the Domain Admin to set this up in just 10mins. All that is required is:
DKIM (Domain Keys Identified Mail): Article
SPF (Sender Policy Framework): Article
SIGN BUTLER V2, the complete guide.
Install and access to SIGN Butler via: SIGN Butler AppExchange
You will need some signature placeholders. These look like this:
If you need multiple signers on your document, every signers will require their specific placeholders.
Download a full set here:
Signature Placeholders
We highly recommend to setup your Salesforce Email settings so that emails do not end up in SPAM folder. See more info here: "FAQ: Why Emails send from Salesforce end up in SPAM folder"
Learn how to setup SIGN Butler, configure the permission sets and register. To register, make sure to have your PDF Butler username and Admin password.
Download documentation hereCreate branded customer Lightning Email Templates that SIGN Butler will use. Your users and customer are going to be thrilled by these emails. No strange branding in the email but an email directly from your company and your brand.
Make sure to Share the email templates with all users that require SIGN Butler! Also best to Share the default SIGN Butler Email folder.
You want you own branded emails, more information on the sender/recipient/record/... included? Watch this:
Link your Lighting Email Templates to your SObject to use more mergefield options.
From SIGN Butler, there are also mergefields that can be used in the SIGN Butler emails. Here a list:
{{{Recipient.FirstName}}}
. But when using custom email addresses for signing or using Re-assign.
Best to use these mergefields
Need to capture data from your customer while signing the document?
You can add multiple form fields via PDF Butler and have these push data back to Salesforce. Updating the record or records related.
You can set if these fields are required, have validation, lock the fields when they have data, ...
Types of form fields:
It is also possible to assign Form Fields to specific signers. The following video will explain how:
If you want to see the created SIGN Request directly, you are with multiple Signers and you want to sign immediately, you are launching a SIGN Request from a Community, ... .
Here is how you can open the SIGN Request directly.
We call it Non-Silent (NonSilent or Non Silent).
Class to use: cadmus_sign2.Actionable_SignButlerNonSilent
Use a translation datasource to translation or change the texts on the signing page.
Add any language or use your own texts. Download an example file with all fields below!
Build your own SIGN Butler experience. Here our API overview: Sign Butler V2 API
Need to test you SIGN Butler APEX code:: Sign Butler V2 Unit Testing API
Build your own SIGN Butler experience from internal SFDC, Communities, Guest User Application forms, ... Sign Butler V2 API
See it in action:
Embedded SIGN demo
Example of code for Lightning Web Component:
Code example
What if you have one or multiple documents that need to be signed but where not created by SIGN Butler?
No problem, just send them out manually:
Permanent or static form-fields on the PDF
If you want your signer to fill out fields every time you send out a PDF for signing? Just add the form-fields to your PDF 1 time and these will be included every time you send out this PDF for signing
Receiver on Manual SIGN Request
Setup a Receiver on Manual SIGN Request. A receiver will receive notification on changes, signatures, ... .
SOQL for DataSource to select the Receiver as the owner of the SIGN Request:
SELECT OwnerId, Id, Owner.FirstName, Owner.LastName, Owner.Email FROM cadmus_sign2__Sign_request__c WHERE Id = :signRequestId
Receiver on Manual SIGN RequestWant to connect your external systems to SIGN Butler. Check out our Postman documentation
SIGN Butler V2 Postman documentationWant to control who sees which SIGN Request? Maybe different Sales teams want to hide SIGN Requests from other teams
Maybe different departments do not want to share SIGN Request information and so on ...
With SIGN Butler, you can just create Salesforce Sharing Rules to control the visibility on the records in the SIGN Butler objects.
When you are sitting in the same room with all the signers, it makes sense to have have everyone sign on a tablet (or mobile).
SIGN Butler will guide you through the In-Person signing process indicating who is the next signer to pass the divice to to sign.
The Actionable should use class: cadmus_sign2.Actionable_SignButlerSignNow
this makes sure the signing process starts immediately and it is not required to open a mail or the SIGN Request page.
If you need more control, more complex logic on how to select your signers then you can best setup a flow that defines the Signers.
You can write the logic that is required to fetch your signers and order them as required.
Document with information signer/receiver/filler data
As SIGN Butler grows in features and user base, we get more & more the question to use it for departments that do not use Salesforce or even at companies without Salesforce.
SIGN Butler Stand Alone article
Your internal staff might need access to the original document that was send out for signing. This can be managed on a per-user or per-team basis with a Custom Permission.
Anyone with the Custom Permission "Show unsigned document on SIGN Request" will be able to download the unsigned document from the SIGN Request page.
SMS OTP (or One-Time-Password) is incredibly easy to use and provides more proof that the signer is the person you intend, the signer must have their phone close. Via SMS, the signer receives a 6-digit number that can only be used 1 time (only valid to sign a specific document).
Make sure to contact your Account Executive when you want to use SMS OTP!
For some Users you might want to block actions like deleting a SIGN Request or Re-assign.
You can control every action via setting Custom Permissions to the user's Profile or PermissionSet.
Chain multiple SIGN Requests so they can be signed, or rejected, directly after each other.
When multiple documents are added to a SIGN Request, all documents must be approved. With a chained SIGN Request, there are separate SIGN Requests for each document. So they can each be signed or rejected separately.
Common mistakes in SIGN Butler is that the number of signers does not match the number of Sign placeholders in the document.
2 options:
Stakeholder not found against the placeholder SIG00X
Number of stakeholder not equal to number of sign places
Stakeholder not found against the placeholder
Number of stakeholder not equal to number of sign places
Setup and configuration of COLLABORATION BUTLER for SharePoint.
Contact our Support department for all COLLABORATION Butler setup documentation, we will respond immediately: support@pdfbutler.com
Here our API overview: COLLABORATION Butler API
For Unit Testing make sure to init the client as in the example in our Apex Docs. A Mock is required in a running test context: COLLABORATION Butler API - createMock
Use an Salesforce Lightning Flow to determine which MetaData Columns should be updated after uploading a file to SharePoint
Variables to use:
INPUT VARIABLES
- recordId: SFDC Id of the record you are working on
- docConfigId: If used, SFDC Id of the DocConfig that was used to generate the document
OUTPUT VARIABLES
- ColumnNames: semicolon (;) separated list of column names you want to update
- Variable per column: has the value of the column you want to update
Use an Salesforce Lightning Flow to determine which Content Type should be updated after uploading a file to SharePoint
Variables to use:
INPUT VARIABLES
- recordId: SFDC Id of the record you are working on
- docConfigId: If used, SFDC Id of the DocConfig that was used to generate the document
OUTPUT VARIABLES
- ContentTypeId: SharePoint ContentType Identifier
Select a file from SharePoint, through the COLLABORATION Butler component, and call a PDF Butler Pack with an Actionable.
This Actionable can be anything like mailing, sending to SIGN Butler, ...
If the selected document is a Word document, it will be converted into a PDF before the Actionable is called.
Create all datasources required for this FORM Butler Demo.
Datasources for the demo document DocConfigYou can control who receives the email from FORM Butler in 3 ways:
If you FORM Butler documents need signoff, that is perfectly possible.
Make sure to use the picture placeholder you can download below, this has a marker so we know where to put the signature.
FYI, this is not using SIGN Butler! This signature is not a digital signature but an electronic signature.
Generate a public link via a Flow so you can save the URL on a record.
It will use a Pack with a FORM Butler actionable that uses class: cadmus_form.Actionable_FormButlerNow
All settings of the Actionable can be used in the flow. Eg regenerate the PDF on every usage of the URL, remove the submit button, ...
The FORM Request record will only be created the first time the URL is opened in the browser. Not when the URL is generated.
Coming soon -
Setup and configuration of BULK BUTLER.
Use this if you want to run a batch for a set of documents. Eg for Opportunities related to an Account.
Using variables in a Screen Flow (Make sure to request the Lightning Convert Component from our Customer Success team)
Screen Flow introduced variables
List variable via Flow, this allows to pass on a list of, for instance, Ids to be processed by BULK Butler
List variables