# Create Your First PPTX Template

## What You'll Learn

* Create a PPTX template record for S-Docs
* Generate Microsoft template syntax from the template editor
* Place bracketed merge fields into a PowerPoint presentation
* Add conditional logic and related list syntax to a PPTX file
* Upload the finished PPTX file and test generation

## What You'll Build

In this tutorial, you will build a simple PowerPoint-based quote template for `Opportunity`.

By the end, you will have:

* A PPTX template record tied to `Opportunity`
* A PowerPoint presentation with bracketed S-Docs merge fields
* A conditional note that appears only for one stage
* A related list pattern you can paste into a PowerPoint table
* A finished PPTX file uploaded back to S-Docs

**Estimated time:** 20 minutes

## Prerequisites

Before you start, make sure you have:

* Access to **S-Docs Templates** in Salesforce
* Permission to create or edit templates
* Microsoft PowerPoint or another editor that saves valid `.pptx` files
* One test `Opportunity` with an Account, Stage, and Amount
* Basic familiarity with merge fields such as `{{!Opportunity.Name}}`

{% hint style="info" %}
PPTX syntax follows the same Microsoft template pattern used by DOCX and XLSX templates.
{% endhint %}

{% stepper %}
{% step %}

### Step 1: Create the PPTX template record

Start by creating the Salesforce template record before you build the PowerPoint file.

1. Open the App Launcher.
2. Search for `S-Docs`.
3. Open **S-Docs Templates**.
4. Click **New**.
5. Set **Related To Type** to `Opportunity`.
6. Set **Template Format** to `PPTX`.
7. Enable **Enable New Microsoft Template Upload**.
8. Click **Save**.

This record gives you a place to configure settings and generate the syntax you will paste into PowerPoint.
{% endstep %}

{% step %}

### Step 2: Open the template editor and generate syntax

The template editor is your syntax builder for Microsoft templates.

1. Open the new template record.
2. Click **Template Editor**.
3. Use **Insert Field** to choose the fields you want in the presentation.
4. Copy each generated value from the output box.

For PPTX templates, merge fields, related lists, and conditional blocks must be enclosed in square brackets.

If you need literal bracket characters in the presentation, use `BRACKETOPEN` and `BRACKETCLOSE`.
{% endstep %}

{% step %}

### Step 3: Build the presentation body in Microsoft PowerPoint

Now create the visible presentation in PowerPoint.

Start with a simple quote title and summary slide.

Paste this pattern into your PPTX file:

{% code title="quote-summary.pptx.txt" %}

```plaintext
Quote for [{{!Opportunity.Account.Name}}]

Opportunity: [{{!Opportunity.Name}}]
Stage: [{{!Opportunity.StageName}}]
Close Date: [{{!Opportunity.CloseDate}}]
Amount: [{{!Opportunity.Amount}}]
```

{% endcode %}

What you just did:

* Added basic merge fields for the base record
* Used the bracketed Microsoft template syntax
* Created a working first version before adding logic
  {% endstep %}

{% step %}

### Step 4: Add one conditional block

Use conditional logic when part of the presentation should appear only for some records.

Add this block below the summary:

{% code title="conditional-note.pptx.txt" %}

```plaintext
[<!--RENDER={{!Opportunity.StageName}}=="Proposal/Price Quote"-->]
This quote is in active review.
[<!--ENDRENDER-->]
```

{% endcode %}

What you just did:

* Added a stage-based rule to the PPTX file
* Kept the full conditional block inside bracketed Microsoft syntax
* Created one safe pattern you can reuse with other fields later
  {% endstep %}

{% step %}

### Step 5: Save the PPTX file

Save the file locally before you upload it.

Use a clear file name such as `opportunity-quote-template.pptx`.

After saving, reopen the file once to confirm the content and formatting still look correct.
{% endstep %}

{% step %}

### Step 6: Upload the PPTX file to the template

Upload the finished PowerPoint file back to the S-Docs template record.

If you are using S-Docs Summer 2025 (`v10.0`) or later:

1. Return to the template record.
2. Click **Upload Files**.
3. Select the `.pptx` file.

If you are using an earlier version, upload the file from the template editor.

Once the upload completes, the template is ready for generation.

{% hint style="warning" %}
PPTX templates with **Enable New Microsoft Template Upload** checked are not compatible with legacy custom button generation.

They can only be generated through S-Docs LWCs or the SDK.
{% endhint %}
{% endstep %}

{% step %}

### Step 7: Generate a test document

Test the template with a real `Opportunity` record.

1. Open a test opportunity.
2. Generate the PPTX template.
3. Download or preview the generated file.
4. Verify the output.

Check these results:

* The account and opportunity names resolve correctly
* The stage and amount display real record values
* The conditional note appears only when the stage is `Proposal/Price Quote`
* No raw S-Docs syntax appears in the presentation
  {% endstep %}
  {% endstepper %}

## Common PPTX syntax patterns

Use the patterns below when you expand the template.

### Merge field syntax

PPTX templates require brackets around merge fields.

Use **Insert Field** in the template editor to generate the syntax.

Then:

1. Select the field.
2. Apply any formatting.
3. Copy the generated syntax.
4. Paste it into Microsoft PowerPoint.

### Related list syntax

To insert a related list into a PPTX template, generate the related list syntax and paste it into a prebuilt PowerPoint table.

Use **Insert Related List** at the top of the template editor to build the related list.

When the related list is ready:

1. Open the **Get Related List** tab in the related list menu.
2. Copy the generated source.
3. In PowerPoint, create a styling table with:
   * a header row with your intended header text
   * an odd row
   * an even row
4. Paste the related list code into the cell in the first column under the header.

{% hint style="info" %}
The same related list placement pattern used in Microsoft Word templates also applies to PPTX.
{% endhint %}

### Conditional logic syntax

Use **Insert Conditional Logic** at the top of the template editor to open the logic builder.

Build the condition, then copy the generated output into PowerPoint.

If the rendered content contains merge fields, those merge fields must also be enclosed in brackets.

{% code title="pptx-conditional-logic.txt" %}

```plaintext
[<!--RENDER={{!Opportunity.Amount}} > 10000-->]
High-value quote
[<!--ENDRENDER-->]
```

{% endcode %}

{% hint style="warning" %}
Do not place `RENDER` tags on the same line as the `LINEITEMS` block.
{% endhint %}

### Additional syntax

#### Rich text images

To display images stored in rich text fields, use three curly braces instead of two.

{% code title="pptx-rich-text-image.txt" %}

```plaintext
[{{{!Object.FieldName}}}]
```

{% endcode %}

To adjust image dimensions:

1. Open the **Document Options** tab in the template editor.
2. Scroll to **Other Options**.
3. Enter the size in **Rich Text Image Dimensions**.

{% hint style="info" %}
This setting controls the size of all images merged into the PPTX template from rich text fields.
{% endhint %}

#### Named queries

If you use named queries in a PPTX template, convert them to the bracketed Microsoft template syntax.

If the named query looks like this:

{% code title="named-query-standard.txt" %}

```plaintext
<!--{{!<LineItemsSOQL>
...
</LineItemsSOQL>}}-->
{{!myQuery1.fieldname}}
```

{% endcode %}

Update it to this:

{% code title="named-query-pptx.txt" %}

```plaintext
[{{!<LineItemsSOQL>
...
</LineItemsSOQL>}}]
[{{!myQuery1.fieldname}}]
```

{% endcode %}

PPTX templates support named query `filter` and `offset`.

## Common Issues and Solutions

<details>

<summary>"The presentation shows raw merge field syntax"</summary>

Check these items:

* Confirm each merge field is wrapped in square brackets
* Confirm the merge field itself still uses `{{! ... }}`
* Reupload the PPTX file after fixing the syntax

</details>

<details>

<summary>"The presentation generates, but values are blank"</summary>

Check these items:

* Confirm the template uses **Related To Type** `Opportunity`
* Confirm the test record has values in the fields you used
* Recopy the field syntax from **Insert Field** if needed

</details>

<details>

<summary>"The conditional note never appears"</summary>

Check these items:

* Confirm both `RENDER` tags are wrapped in square brackets
* Confirm the compared value matches the record value exactly
* Test the same record value directly in the presentation first

</details>

<details>

<summary>"My related list formatting looks wrong"</summary>

Check these items:

* Confirm the related list code was pasted into the first cell under the header
* Confirm the PowerPoint table includes header, odd, and even rows
* Regenerate the related list syntax after query changes

</details>

<details>

<summary>"My latest PPTX changes do not show up"</summary>

Check these items:

* Save the PowerPoint file before uploading it
* Upload the newest version of the `.pptx` file
* Generate a new document after each upload

</details>

<details>

<summary>"PPTX generation is not available"</summary>

Check these items:

* Enable **Enable New Microsoft Template Upload** on the template
* Confirm the template was uploaded as a `.pptx` file
* Generate through an S-Docs LWC or the SDK when the new Microsoft upload flow is enabled

</details>

## What You've Learned

✅ Created a PPTX template record for `Opportunity`\
✅ Used the template editor to generate Microsoft template syntax\
✅ Added bracketed merge fields to a PowerPoint presentation\
✅ Added conditional logic and related list patterns\
✅ Uploaded and tested a PPTX template in S-Docs

## Next Steps

* Use [Template Attributes Tutorial](/quick-start/template-building/how-to-format-text-dates-and-currency.md) to format values inside the presentation.
* Use [Getting Started with Conditional Logic](/quick-start/template-building/conditional-logic-tutorial.md) to add more conditions.
* Use [Creating Your First Named Query](/quick-start/template-building/creating-your-first-named-query-tutorial.md) to reuse query results in Microsoft templates.
* Use [Build and Upload a DOCX Template](/quick-start/template-building/create-your-first-docx-template.md) if you also build Word templates.
* Use [Add S-Docs Lightning Components to a Record Page](/quick-start/document-generation/add-s-docs-lightning-components-to-a-record-page.md) to expose the template for record-page generation.

## Practice Exercise

Build a second PPTX template for `Opportunity` that includes:

1. A title with `Opportunity.Name`
2. A customer line with `Opportunity.Account.Name`
3. A stage-based conditional note
4. A related list placeholder in a PowerPoint table
5. One test generation from a real record

Bonus challenges:

* Add one more merge field from a related record
* Add a named query to the PPTX file
* Rebuild the same pattern for `Account`


---

# Agent Instructions: Querying This Documentation

If you need additional information that is not directly available in this page, you can query the documentation dynamically by asking a question.

Perform an HTTP GET request on the current page URL with the `ask` query parameter:

```
GET https://help.sdocs.com/quick-start/template-building/build-and-upload-a-pptx-template.md?ask=<question>
```

The question should be specific, self-contained, and written in natural language.
The response will contain a direct answer to the question and relevant excerpts and sources from the documentation.

Use this mechanism when the answer is not explicitly present in the current page, you need clarification or additional context, or you want to retrieve related documentation sections.
