# SharinPix

Welcome to your team’s developer platform

<h2 align="center">Welcome to the SharinPix Documentation!</h2>

<p align="center">SharinPix lets you create and configure optimized image workflows across Salesforce and extend them into the field. To work with images and visual components, start with <strong>Visual Toolkit</strong>. For advanced structured data capture with images &#x26; other visuals, <strong>explore Forms</strong>.</p>

<table data-card-size="large" data-view="cards"><thead><tr><th></th><th></th><th data-hidden data-card-target data-type="content-ref"></th></tr></thead><tbody><tr><td><h4><i class="fa-camera-retro">:camera-retro:</i> <strong>Visual Toolkit</strong></h4></td><td>Access ready-to-use visual components, templates, and examples to help you build faster with SharinPix.</td><td><a href="/spaces/5EvYRrLbUyvRh8o1jmMG/pages/vPvpCWg7HIejUODMTPWb">/spaces/5EvYRrLbUyvRh8o1jmMG/pages/vPvpCWg7HIejUODMTPWb</a></td></tr><tr><td><h4><i class="fa-ballot-check">:ballot-check:</i> <strong>Forms</strong></h4></td><td>Explore our Forms tools and components designed for efficient data collection in the field. Learn how to customize, validate, and deploy forms that fit seamlessly into your Salesforce workflows.</td><td><a href="/spaces/rRD1Xcn9HtKcyfQ9Ghyk/pages/Pt6rtbU76QpibLkyCBNn">/spaces/rRD1Xcn9HtKcyfQ9Ghyk/pages/Pt6rtbU76QpibLkyCBNn</a></td></tr></tbody></table>

<p align="center">If you’re looking to go further, this documentation gives you multiple ways to explore the platform: browse all articles for in-depth guides, check the FAQs for quick answers, or discover real-world examples in our samples and use cases.</p>

<table data-view="cards"><thead><tr><th></th><th></th><th data-hidden data-type="content-ref"></th><th data-hidden data-card-cover data-type="image">Cover image</th><th data-hidden data-card-target data-type="content-ref"></th></tr></thead><tbody><tr><td><i class="fa-folders">:folders:</i> <strong>All Articles</strong></td><td>Browse the complete knowledge base from SharinPix in one place. Explore detailed guides, tips, and deep dives to find exactly what you need, when you need it.</td><td><a href="/spaces/2putv2B9RAZpym8daOH2">/spaces/2putv2B9RAZpym8daOH2</a></td><td><a href="/files/KdwGltTHDsVKY2yBzkRp">/files/KdwGltTHDsVKY2yBzkRp</a></td><td><a href="/spaces/5EvYRrLbUyvRh8o1jmMG">/spaces/5EvYRrLbUyvRh8o1jmMG</a></td></tr><tr><td><i class="fa-question">:question:</i> <strong>FAQs</strong></td><td>Find quick answers to common questions about setup, usage, and troubleshooting. Use this section to resolve frequent issues and get guidance without slowing down your work.</td><td><a href="/spaces/i8tH1o5AHthxksYgF6ij">/spaces/i8tH1o5AHthxksYgF6ij</a></td><td><a href="/files/oQl8TEIWIXR7hTp4hvjx">/files/oQl8TEIWIXR7hTp4hvjx</a></td><td><a href="/spaces/i8tH1o5AHthxksYgF6ij">/spaces/i8tH1o5AHthxksYgF6ij</a></td></tr><tr><td><i class="fa-shapes">:shapes:</i> <strong>Samples</strong></td><td>Discover practical use cases that highlight SharinPix’s value across different scenarios. See how its capabilities can support your goals and fit seamlessly into your existing processes.</td><td><a href="/spaces/dhCgb93OIJaROCksbHJw">/spaces/dhCgb93OIJaROCksbHJw</a></td><td><a href="/files/PeJyWO9gVqU10a0JNxS0">/files/PeJyWO9gVqU10a0JNxS0</a></td><td><a href="/spaces/5EvYRrLbUyvRh8o1jmMG/pages/sLeF9kTMnuWc0EfYdb0n">/spaces/5EvYRrLbUyvRh8o1jmMG/pages/sLeF9kTMnuWc0EfYdb0n</a></td></tr></tbody></table>


# Overview

This section provides a simple, guided path to help you set everything up and start using SharinPix 📸 with ease. In just a few steps, you’ll have everything ready to go.

### <i class="fa-cube">:cube:</i> Basic Setup

* [Basic Setup Steps - Start with SharinPix in 3 Steps](/getting-started/basic-setup/basic-setup-steps-start-with-sharinpix-in-3-steps)
* [Basic Setup - Step 1 - Configure the Salesforce usage of SharinPix](/getting-started/basic-setup/basic-setup-step-1-configure-the-salesforce-usage-of-sharinpix)
* [Basic Setup - Step 2 - Register your Salesforce organization to SharinPix](/getting-started/basic-setup/basic-setup-step-2-register-your-salesforce-organization-to-sharinpix)
* [Basic Setup - Step 3a for Classic Users - Setup SharinPix for Salesforce Classic](/getting-started/basic-setup/basic-setup-step-3a-for-classic-users-setup-sharinpix-for-salesforce-classic)
* [Basic Setup - Step 3b for Lightning Users - Setup SharinPix for Lightning Experience](/getting-started/basic-setup/basic-setup-step-3b-for-lightning-users-setup-sharinpix-for-lightning-experience)
* [Basic Setup - Step 3c for new Salesforce Mobile App Users - Setup SharinPix for Mobile (Lightning Experience)](/getting-started/basic-setup/basic-setup-step-3c-for-new-salesforce-mobile-app-users-setup-sharinpix-for-mobile-lightning-experie)
* [Basic Setup - Step 3d for old Salesforce Mobile App Users - Setup SharinPix for Mobile (Classic Implementation)](/getting-started/basic-setup/basic-setup-step-3d-for-old-salesforce-mobile-app-users-setup-sharinpix-for-mobile-classic-implement)

***

### <i class="fa-cubes">:cubes:</i> Advanced Setup

* [Advanced Configuration - Customizing your SharinPix components with SharinPix Permissions](/getting-started/advanced-configuration-customizing-your-sharinpix-components-with-sharinpix-permissions)

***

* [Overview of the SharinPix Administration Dashboard](/getting-started/overview-of-the-sharinpix-administration-dashboard)
* [SharinPix App](/getting-started/sharinpix-app)
* [How to contact support?](/getting-started/how-to-contact-support)
* [SharinPix Status Page](/getting-started/sharinpix-status-page)


# Basic Setup Steps - Start with SharinPix in 3 Steps

SharinPix is available on the Saleforce [AppExchange](http://bit.ly/SharinPixAppExchange) and can be installed in both **Production** and **Sandbox** environments. This guide walks you through the way to get started in just a few steps, from installing the package to completing the initial configuration needed to connect SharinPix to your Salesforce org.

In this documentation, you will find:

* How to [**install SharinPix from the AppExchange in a Production org**](#install-sharinpix-from-the-app-exchange-in-a-production)
* How to [**install SharinPix from the AppExchange in a Sandbox org**](#install-sharinpix-from-the-app-exchange-in-a-sandbox-environment)
* The [**basic setup steps** ](#basic-setup-steps)to get SharinPix running quickly
* The [**extended setup**](#extended-setup) for additional configuration and advanced options

## Install SharinPix from the App Exchange in Production

Navigate to our AppExchange page by clicking [here.](http://bit.ly/SharinPixAppExchange)

* Log in with your production credentials
* Click the button **Get it Now**

![](/files/tksyLbKujcAWZm61rAGG)

<figure><img src="/files/uwtPqnhWHah1FFowkFrG" alt=""><figcaption></figcaption></figure>

* Choose which user can access SharinPix
* Click the button **Install**

![](/files/jAv7ghcEzfklh3kqQ2Id)

## Install SharinPix from the App Exchange in a Sandbox

Navigate to our AppExchange page by clicking [here.](http://bit.ly/SharinPixAppExchange)

* Click the button **Try it**

<figure><img src="/files/dr2uW2MHhCefpe2LkYlZ" alt=""><figcaption></figcaption></figure>

* For the trial type, select **Try in your Sandbox**

<figure><img src="/files/gEPSU3pb8WppqwksDok7" alt=""><figcaption></figcaption></figure>

* Fill in the **Contact Info Section** and click on **Continue to Installation**

<figure><img src="/files/jjxVEd6joClwGqKQSgdv" alt=""><figcaption></figcaption></figure>

* Click on **Log In & Install**

<figure><img src="/files/UaxlLy2rTLrK3DxxnsEL" alt=""><figcaption></figcaption></figure>

* Log in to your Sandbox

<figure><img src="/files/8EOt1vORtkBX2Kr618Cg" alt=""><figcaption></figcaption></figure>

* Choose which user can access SharinPix
* Click the button **Install**

<figure><img src="/files/JU4mSeGN4mJDVniewvZ5" alt=""><figcaption></figcaption></figure>

{% hint style="warning" %}
**Unable to log in to Sandbox**

If you're unable to log in to the Sandbox to install SharinPix, please refer to [this article](/faqs/cannot-log-in-on-sandbox-to-install-sharinpix-what-should-i-do), which explains the steps you should follow.
{% endhint %}

## Basic Setup Steps

You are a few steps away from your first usage of SharinPix.

Those steps are:

1. [Configure the Salesforce usage of SharinPix](/getting-started/basic-setup/basic-setup-step-1-configure-the-salesforce-usage-of-sharinpix)
2. [Register your Salesforce organisation to SharinPix](/getting-started/basic-setup/basic-setup-step-2-register-your-salesforce-organization-to-sharinpix)
3. Set up SharinPix for [Classic](/getting-started/basic-setup/basic-setup-step-3a-for-classic-users-setup-sharinpix-for-salesforce-classic) / [Lightning](/getting-started/basic-setup/basic-setup-step-3b-for-lightning-users-setup-sharinpix-for-lightning-experience) / [Salesforce Mobile App](/getting-started/basic-setup/basic-setup-step-3d-for-old-salesforce-mobile-app-users-setup-sharinpix-for-mobile-classic-implement)

## Extended Setup

Once you've finished the Basic setup, you can access the Global Settings to expand the features your users can work with:

* [Customizing your SharinPix Global Settings](/getting-started/advanced-configuration-customizing-your-sharinpix-components-with-sharinpix-permissions)


# Basic Setup - Step 1 - Configure the Salesforce usage of SharinPix

* Go to Salesforce Setup and type **Connected** in the Quick Find Box
  * Then click **Manage Connected Apps**

<figure><img src="/files/td4JOtMasgfkZcjjYdAb" alt=""><figcaption></figcaption></figure>

* From the list, click **Edit** next to the **Albums** Connected App.

<figure><img src="/files/YRBrskkkmHggtefKmT64" alt=""><figcaption></figcaption></figure>

* Change the value of **Permitted Users** from **All users may self-authorize** to **Admin approved users are pre-authorized**

<figure><img src="/files/olNLyt3i1IbUverJXLRw" alt=""><figcaption></figcaption></figure>

* Click on **Save** when done

## Alert ?

Just click on **OK**. You're about to give permission to the profiles that will be using this.

<figure><img src="/files/bidJ6cfCzHyUOo05gW8n" alt=""><figcaption></figcaption></figure>

## Manage Profiles

* Go back to **Manage Connected Apps**, then click on **Albums.**

<figure><img src="/files/uSZfNQ9AodVgPYfd12Xz" alt=""><figcaption></figcaption></figure>

* Next, scroll down to **Profiles** and click on **Manage Profiles**.

![](/files/rVzThdDmzlybbqUIVJJ6)

### Grant SharinPix Access to Profiles.

We will grant yourself access for now, therefore:

* Select **System Administration**

<figure><img src="/files/JC5pf9CLQq0qMJFQcErJ" alt=""><figcaption></figcaption></figure>

* Click **Save** when done

## Assign SharinPix Licenses to Salesforce Users

{% hint style="warning" %}
**Note**: This section does not apply to organisations using the SharinPix **Trial** version and on Sandboxes.
{% endhint %}

To assign SharinPix licenses to Salesforce users, follow the steps below:

* From **Setup**, enter **Installed Packages** in the **Quick Find** box, then select **Installed Packages**
* Click on **Manage Licenses** next to the package **ImageManagementBySharinPix**
* Add or remove the licenses corresponding to specific users

{% hint style="success" %}
**Tip:**

\
For more information about how to manage licenses for installed packages, you can refer to the following article:

[Managing Licenses for Installed Packages](https://help.salesforce.com/s/articleView?id=sf.distribution_managing_licenses.htm\&type=5)
{% endhint %}

{% hint style="info" %}
Now you just have to [Register Your Salesforce Organization to SharinPix](/getting-started/basic-setup/basic-setup-step-2-register-your-salesforce-organization-to-sharinpix) before you can set up SharinPix on [Classic](/getting-started/basic-setup/basic-setup-step-3a-for-classic-users-setup-sharinpix-for-salesforce-classic) / [Lightning](/getting-started/basic-setup/basic-setup-step-3b-for-lightning-users-setup-sharinpix-for-lightning-experience) / [Salesforce mobile App](/getting-started/basic-setup/basic-setup-step-3d-for-old-salesforce-mobile-app-users-setup-sharinpix-for-mobile-classic-implement)
{% endhint %}


# Basic Setup - Step 2 - Register your Salesforce organization to SharinPix

## First of all, go to the SharinPix Settings Tab

### If you are in Classic: Behind the + in the tab line (All Tabs) - SharinPix Settings

<figure><img src="/files/AFtXLkGpN9qoBNm0nRLV" alt=""><figcaption></figcaption></figure>

### If you are in Lightning: AppLauncher - SharinPix Settings

In Lightning, click the waffle (The App Launcher - 9 Dots button under the Salesforce logo - (1) in the picture).

You can type Settings in the Search Bar (2) or find SharinPix Settings in the All Items list (3) at the bottom of the page by scrolling down.

<figure><img src="/files/HLYyl68T4Bir2MQgy3tU" alt=""><figcaption></figcaption></figure>

## Connect to SharinPix for the first time / Grant API access / Go to Admin Dashboard.

This screen manages the connection between Salesforce and SharinPix.

The first line should be green; if not, click on the **Reset** button next to it. At this time, your Salesforce organization is registered with SharinPix.

SharinPix needs the second line to turn green to have the right to update your Salesforce data on your behalf. To grant access to Salesforce, click on the **Grant** button next to " **Sharinpix - > Salesforce full API access**".

{% hint style="warning" %}
**Please note the following before granting the API access:**

* This action should be performed by a **System Admin**.
* In case you're a third-party user having a temporary account, ensure that the grant access to Salesforce is performed by one of the client's active System Admin and not by a third-party user.
* If the user who previously granted access to Salesforce is deactivated, this second line will be automatically deactivated, and the API calls will not go through anymore. In this case, another active admin user should grant access to Salesforce by clicking the **Grant** button.
  {% endhint %}

<figure><img src="/files/irHbIVJE1JcoxF1rzZ07" alt=""><figcaption></figcaption></figure>

{% hint style="danger" %}
**Note:**

* If the SharinPix Setting Page keeps loading:
  * Verify on Session Settings if the **Visualforce Cross-Origin Security Headers** checkboxes are disabled. To do so:
  1. *Go to Setup - > Session Settings -> Tab **Visualforce Cross-Origin Security Headers** -> Uncheck both checkboxes.*
  2. Then reload the SharinPix Setting Page.
  3. The checkboxes can be re-checked after all configurations from the SharinPix Setting page are completed.
     {% endhint %}

<figure><img src="/files/msb8SXsFnSebQFGTOOSd" alt=""><figcaption></figcaption></figure>

{% hint style="success" %}
Tip:

The **Go to administration dashboard** button provides access to advanced SharinPix settings.

For more information about the SharinPix Administration Dashboard, refer to the following article: [Overview of the SharinPix Administration Dashboard](/getting-started/overview-of-the-sharinpix-administration-dashboard)
{% endhint %}

Now you are ready to set up SharinPix in:

* [Salesforce Classic](/getting-started/basic-setup/basic-setup-step-3a-for-classic-users-setup-sharinpix-for-salesforce-classic)
* [Salesforce Lightning Experience](/getting-started/basic-setup/basic-setup-step-3b-for-lightning-users-setup-sharinpix-for-lightning-experience)
* [Salesforce mobile App](/getting-started/basic-setup/basic-setup-step-3d-for-old-salesforce-mobile-app-users-setup-sharinpix-for-mobile-classic-implement)


# Basic Setup - Step 3a for Classic Users - Setup SharinPix for Salesforce Classic

Now you are ready to add the SharinPix album to your Page Layout.

The Canvas App is the easiest way to create a space there to add photos, so we'll use that.

{% hint style="warning" %}
**Note:**

* You should keep in mind, though, that these instructions are applicable to the Classic User Interface. Lightning and Mobile User Interfaces will show up with the Canvas App, but need the extra tweaking in the next two articles to work well.
* Since Canvas apps have some limitations such as limited number of calls within 24-hour, we strongly recommend the usage of the **SharinPix Visualforce Component** over the **SharinPix Canvas App** for implementations. However, the SharinPix Canvas App can still be used for testing purposes.\
  For more information about Canvas app limitations, please refer to the following link:

  <https://developer.salesforce.com/docs/atlas.en-us.platform_connect.meta/platform_connect/canvas_framework_limits.htm>

{% endhint %}

## Canvas App - Drag and Drop on the layout

Click EDIT next to the Layout(s) where you want to display photos

![](/files/LKdWZItImn0KePqxARAT)

## Find "Canvas Apps" at the bottom of the list at left in page layout

<figure><img src="/files/tMpz1asgBJWF6MuSC3Mj" alt=""><figcaption></figcaption></figure>

## Click on Canvas Apps and you'll see Albums in the field box.

Create Section on the page layout, then Save Layout. The Albums won't go into the Albums section until after it has been saved.

![](/files/BRjmc0YnAO7wa0EcDg2L)

## Click the wrench on the canvas app to adjust the settings.

* Set the Height to 500 pixels.
* Ok
* Save

![](/files/6yqfwq1vEShQjPWSp0hZ)

You can put the Canvas App anywhere on the page. But the best practice is to put all your photos in their own section. Here's how:

1. Add a new section on your layout
2. Use the wrench icon on the section to make it one column
3. Save the layout (not quick saving, use the save button) This step is necessary because if the section isn't saved first, the section won't accept Visual Force or the Canvas App.
4. Re-open the layout
5. Drag and drop the Canvas App into the new section.

## Test by adding a photo!

Drag & Drop or Choose from photo files.

<figure><img src="/files/wVn0v2H8LFsv01TSnBzn" alt=""><figcaption></figcaption></figure>

{% hint style="success" %}
The image above shows a photo in the **Thumbnail View**. For more information about the Thumbnail View and the options it provides, refer to the following article: [Thumbnail View](/documentation/features/user-interface/thumbnail-view)
{% endhint %}

Click to see one photo in full size

## Play with the icons at the top to learn what you can do!

![](/files/s8nScQ2T9LVwat3Ey76y)

## What's next?

The Canvas App works well for Classic. For the best user experience of SharinPix, you'll need to add the SharinPix component to Lightning and the Mobile app.

* Setup[ SharinPix for Lightning Experience](/getting-started/basic-setup/basic-setup-step-3b-for-lightning-users-setup-sharinpix-for-lightning-experience)
* Setup [SharinPix for Salesforce mobile App](/getting-started/basic-setup/basic-setup-step-3d-for-old-salesforce-mobile-app-users-setup-sharinpix-for-mobile-classic-implement)

If you need even more control over your users' experience, go with the [Visual Force page implementation.](broken://pages/RGusPjruaQUX3OFeLMVW) No need for a developer, either, to get this done!


# Basic Setup - Step 3b for Lightning Users - Setup SharinPix for Lightning Experience

What you have done for Classic will be available in Lightning and the mobile app on the detail tab.

BUT the way it works is not perfect; on any click on the Album, a new window will open.

To get the best implementation for Lightning, it's better to use our Lightning Component. Let's look at how to do that!

## 1. Get My Domain

{% hint style="warning" %}
**Note:**

To make any custom Lightning component, including SharinPix's components, visible to the user, you have to create a domain for your org. Use [this link to get step-by-step video instructions on how to set up My Domain.](http://salesforce.vidyard.com/watch/oFQ26FCXPVOA90xZaVDDjA)

When setting up the *My Domain* , please note the following:

1. Choose the name of your domain wisely. It's forever!
2. Don't add hard-coded URLS across your Salesforce system.
   {% endhint %}

## 2. Add a SharinPix component to a Lightning Page

To add a SharinPix component on your record page, proceed as follows:

* Go to a record page in Lightning.
* Edit the page as shown below.

![](/files/qdeUSBJMmidoEB0WWK95)

{% hint style="warning" %}
Some SharinPix Lightning components can display an error like: **"You do not have access to the Apex class named 'SharinPixLightningController'."**

This is due to the following Salesforce critical update: **Restrict Access to @AuraEnabled Apex Methods for Authenticated Users Based on User Profile**

To solve this, simply assign the permission set, **SharinPix Lightning Component**, to the user encountering this problem. The *SharinPix Lightning Component* permission set gives access to SharinPix's Apex classes.
{% endhint %}

* Next, scroll down to the "Managed Components" section.
* Choose the **SharinPix Album** component.

![](/files/GWvUO2Bfes8ZFkfdTYxD)

* Drag and drop the component onto your page layout.

![](/files/hsvq6kiYuoTOgfNJlxaX)

{% hint style="warning" %}
**Note:**

You can't put the component into the detail page because the detail page is itself a component.
{% endhint %}

* Save the page and activate it (if needed).

![](/files/aVcqxc31irAkcRWSwSMC)

{% hint style="success" %}
**Tip:**

On the Activation page, you can set this as the organization-wide default, meaning the component shows up on all the pages for this object.

Go to "Learn more..." to explore the other options.
{% endhint %}

![](/files/clEgSyErMbZzxgjx3qhG)

* Once saved and activated, go to the record page.
* Test the *SharinPix Album* component by uploading an image.

![](/files/bmjsInJYBArmkXSEr05S)

{% hint style="success" %}
**Tip:**

The above image depicts a photo in the **Thumbnail View**.

For more information about the Thumbnail View and the options it provides, refer to the following article: [Thumbnail View](/documentation/features/user-interface/thumbnail-view)
{% endhint %}

## 3. What's next?

Now you can:

* [Get SharinPix available for Salesforce Mobile App](/getting-started/basic-setup/basic-setup-step-3d-for-old-salesforce-mobile-app-users-setup-sharinpix-for-mobile-classic-implement)
* [Customize your SharinPix Album's permissions](/getting-started/advanced-configuration-customizing-your-sharinpix-components-with-sharinpix-permissions)


# Basic Setup - Step 3c for new Salesforce Mobile App Users - Setup SharinPix for Mobile (Lightning Experience)

This article demonstrates how to access the **SharinPix Album** component inside the Salesforce mobile app. To do so we will:

1. [Add the SharinPix Album component to an object's record page.](#addition-of-sharinpix-album-component-on-an-objects-record-page)
2. [Access the component inside the Salesforce mobile app.](#access-the-component-inside-the-salesforce-mobile-app)

{% hint style="danger" %}
**Prerequisites:**

The example presented in this article takes place within the new Lightning Experience. In order to proceed, you are therefore required to set up the new Lightning Experience for mobile.

If the new Lightning Experience is not enabled inside your Organisation, here are some useful articles that you can refer to:

* [Lightning Experience for Salesforce Mobile App](https://trailhead.salesforce.com/en/content/learn/modules/lightning-experience-for-salesforce-mobile-app) (introductory articles)
* [Set up the Lightning Experience for Salesforce Mobile App ](https://www.asagarwal.com/lightning-experience-for-salesforce-mobile-app/)(including detailed steps)
* [Set up the Lightning Experience for Salesforce Mobile App](https://admin.salesforce.com/blog/2019/set-up-lightning-experience-on-mobile) (including video)
  {% endhint %}

## Comparing Lightning Experience and Salesforce Classic

To determine if you are still using the Classic experience for mobile or if you are already using the new mobile Lightning Experience, you should check the following points:

* You are in the mobile Classic Experience if
  * You have rounded colored icons on the bottom when you open a record
  * You have Chatter/Details/Related tabs on the top such as Post, File, New Task, ...
* You are in the new mobile Lightning Experience if
  * You have rounded colored on the top such as Post, File, New Task, ...
  * You have greyed icons on the bottom such as Chatter, Today, Dashboard, and Menu

<figure><img src="/files/WEggaLyCjfFoLOTWD7vx" alt=""><figcaption></figcaption></figure>

{% hint style="success" %}
**Tip:**

One easy way to ensure that the Lightning Experience for mobile has been correctly configured in your organization is to take a look at the layout presented inside the Salesforce mobile app.
{% endhint %}

The following image depicts how the mobile layout looks like when using the Lightning Experience:

<figure><img src="/files/pFMUgU0ti6xnLikaKLKY" alt=""><figcaption></figcaption></figure>

If the layout presented is similar to the one shown in the above image, this is an indication that the Lightning Experience has been correctly configured.

## Addition of SharinPix Album component on an object's record page

In this section we will add the **SharinPix Album** on the page layout of an **Opportunity** object.

To do so, follow the steps below:

* Go to an Opportunity record and edit the page.
* Once inside the **Lightning App Builder**, to preview how the layout will appear inside the Salesforce mobile app, switch from the **Desktop** view to the **Phone** view as shown below:

![](/files/xKVf2HwWUzI0D21LwhB6)

* Open the **Details** tab, then drag and drop the **SharinPix Album** component (found under **Custom - Managed)** on the preview pane as shown below:

![](/files/pljJpgG5RwBn4dVV1lUK)

* Different settings can be applied onto the **SharinPix Album** component. The settings are available on the right panel as shown below:

<figure><img src="/files/5F02ubBgTjH98rncnJ1u" alt=""><figcaption></figcaption></figure>

{% hint style="success" %}
**Tip:**

For more information on the SharinPix Album's parameters, refer to this article: [SharinPix Album](/documentation/lightning-web-component/sharinpix-album)
{% endhint %}

* Click **Save**.
* Next, click on **Activate**. Here you can assign the Phone Form Factor as the org default, app default or as a combination of apps, record types and profiles.

![](/files/PHIL2C1oos3r2tI4QglE)

The example below, show a combination of apps, record types and profiles for the Phone Form Factor assignment:

![](/files/ARBz6HTbK4RlC9aOek0Q)

{% hint style="success" %}
**Tip:**

You should ensure that proper assignment is provided to your Phone Phone Factor.
{% endhint %}

You can now access the **SharinPix Album** component from the Salesforce mobile app.

## Access the component inside the Salesforce mobile app

To access the SharinPix Album component:

* Open the Salesforce mobile app.
* Go to an Opportunity record.
* The SharinPix Album component is available from there.

<figure><img src="/files/5Y1xNRIroQ9lzFWIOAgC" alt=""><figcaption></figcaption></figure>

{% hint style="success" %}
**Tip:**

If you are using the Classic experience on tablets and iPads, an additional configuration is required for your Organization. Here, you should also enable the **New Salesforce Mobile App for Tablet** on your Org. To do so, follow the steps below:

* From Setup, look for **New Salesforce Mobile App Quickstar**t using the Quick Find search box
* Then, in the **New Salesforce Mobile App for Tablet** section, activate the option **Give All Users Access** as follows:
  {% endhint %}

![](/files/JCbxqolkdnkBnpJX346J)

{% hint style="warning" %}
**Note:**

The option to enable the **New Salesforce Mobile App for Tablet** will be available on your Org only if you have **upgraded with the New Salesforce Mobile App QuickStart in Winter '20 Release**.

If you did not opt-in for this feature during Winter' 20 but, still want to access the Toggle for **New Salesforce Mobile App for Tablet** in the Setup section for **New Salesforce Mobile App Quickstart**, kindly create a case to request Salesforce Support to enable it on your Org.

Click on the following link for more details on the above:

<https://help.salesforce.com/articleView?id=000352373&language=en_US&mode=1&type=1>
{% endhint %}

## What's Next?

{% hint style="info" %}
Now it's time to check out the features you can enable from [SharinPix Global Settings](/getting-started/advanced-configuration-customizing-your-sharinpix-components-with-sharinpix-permissions)
{% endhint %}


# Basic Setup - Step 3d for old Salesforce Mobile App Users - Setup SharinPix for Mobile (Classic Implementation)

{% hint style="warning" %}
If you have been through the [Basic Classic implementation](/getting-started/basic-setup/basic-setup-step-3a-for-classic-users-setup-sharinpix-for-salesforce-classic), you should already see the SharinPix album on the details tab. But it's not perfect and should be optimized by adding an action for SharinPix.

If you have been through both the Basic Classic Implementation and the [Basic Lightning configuration](/getting-started/basic-setup/basic-setup-step-3b-for-lightning-users-setup-sharinpix-for-lightning-experience) you will still have to do the following steps to see a SharinPix Album on your mobile phone.
{% endhint %}

## Create a "SharinPix Album" Lightning Action

To create a 'SharinPix Album' lightning action:

* Go to **Setup** , then **Object Manager**.
* Select the object on which you intend to add the custom action. In this case, it is the **Account** object.
* On the left-hand-side menu, select **Button, Links and Actions**.
* Click on the **New Action** button.

![](/files/IjcWo4SDYxaxBpzjJ2or)

From the Action Type picklist, select **Lightning Component.**

![](/files/kRVm6q651GQDoXaBkuzv)

* For the field **Lightning Component**, select **\<sharinpix>:SharinPixAlbum**
* For the field **Height** , enter **525px**
* For the field **Standard Label Type** , select **None**
* For the field **Label** , enter **SharinPix Album**
* The field **Name** will be auto-populated with the value **SharinPix\_Album**

![](/files/Hd7y2tm7MJ8eZLD5RdQ1)

* Click on **Save**

You can now add the newly-created action to the object's Page Layout.

## Make the "SharinPix Album" Action available on the Layout

In this section, we will add the newly-created custom action onto the Account Page Layout.

To do so:

* Head over to the Account Page Layout most relevant to your case.
* Click on the **Mobile & Lightning Actions** option.
* Drag and drop the **SharinPix Album** action onto the **Salesforce Mobile and Lightning Experience Actions** section.

![](/files/Fg0zqUapUY66ShXsCTSZ)

* Click on **Save**.

## Test the "SharinPix Album" Lightning Action on your Desktop

If you access an Account record, the newly-created custom action should appear on the Page Layout as depicted below:

![](/files/noBwnOqROkLBXJ4WWYjj)

Upon selecting the action, the **SharinPix Album** is launched as shown below:

![](/files/QkS0xqgt1i5QxKvJmA4q)

## Test "SharinPix Album" Lightning Action on a Salesforce Mobile App

You'll also find the **SharinPix Album** custom action inside your Salesforce mobile application as depicted below:

![](/files/LtNvlBh7XetbNxgMjqd4)

{% hint style="success" %}
The image above shows a photo in the **Thumbnail View**. For more information about the Thumbnail View and the options it provides, refer to the following article: [Thumbnail View](/documentation/features/user-interface/thumbnail-view)
{% endhint %}

## What's Next?

{% hint style="info" %}
Now it's time to check out the features you can enable from [SharinPix Global Settings](/getting-started/advanced-configuration-customizing-your-sharinpix-components-with-sharinpix-permissions)
{% endhint %}


# Advanced Configuration - Customizing your SharinPix components with SharinPix Permissions

{% hint style="info" %}
SharinPix Permission records are used to enable or restrict [abilities](/documentation/access-and-security/sharinpix-abilities) on SharinPix components.

This article demonstrates how to:

1. [Create a SharinPix Permission record for an album component.](#id-1.-create-a-sharinpix-permission-record-for-an-album-component)
2. [Configure the component abilities on the SharinPix Permission record.](#id-2.-configure-the-component-abilities-on-the-sharinpix-permission-record)
3. [Assign the permission to an album component.](#id-3.-assign-the-permission-to-an-album-component)
4. [Overview of the main album abilities.](#id-4.-overview-of-the-main-album-abilities-and-how-to-configure-them-using-a-sharinpix-permission-recor)
   {% endhint %}

{% hint style="danger" %}
**Note:**

The SharinPix Album abilities available in the SharinPix Permission record are also available on the [SharinPix Global Settings](/documentation/access-and-security/customizing-your-sharinpix-global-settings).

When no SharinPix Permission is assigned, the abilities set in the SharinPix Global Settings will be applied to all album components by default.

**However, for security reasons, we strongly advise using a SharinPix Permission to control album abilities instead of the SharinPix Global Settings.**
{% endhint %}

## 1. Create a SharinPix Permission record for an album component

To create a new SharinPix Permission record, follow the steps below:

* From App Launcher, type **SharinPix Permission**
* Then click on the button **New**
* Next, in the **Information** section, enter the name of the permission. The SharinPix best practice is to name the permission **All** to indicate that this permission provides all basic album abilities.
* You can leave the description blank since it is optional.

![](/files/YG613JzWyuqqxkIwJIdY)

* Ensure that the **Album** option is selected as we are creating a permission record for an album component.

![](/files/hfXXVFlcNPkDmfdIczpG)

## 2. Configure the component abilities on the SharinPix Permission record

All basic album abilities are set to true by default when creating a new SharinPix Permission record. You can, therefore, save the permission right away if you want to keep the default parameters.

You can still review the abilities and modify them as desired as depicted below.

![](/files/45UvHdtVPmWZ4QXIzCZE)

Please note that each checkbox has 3 states:

* **True:** When a checkbox is selected, this will enable the ability on the component.
* **False:** When a checkbox is left blank, this will disable the ability on the component.
* **Default value:** When a dash is present in the checkbox. This means that the ability value will reflect the value set in **SharinPix Global Settings** by default.

## 3. Assign the permission to an album component

To assign the SharinPix Permission to an album component:

* Save the permission record.
* Copy the permission's name (**All** in our case).
* Go to the **Lightning App Builder** page on any record page containing the SharinPix Album component.
* On the album component, paste the permission's name in the **Custom Permission Id or Name** parameter.
* Save the changes when done.

![](/files/TzRFrp9SjN71WTw7rDVt)

## 4. Overview of the main album abilities and how to configure them using a SharinPix Permission record

### Standard Album Abilities

SharinPix Permission records can provide users access to the following album features:

1. Display images
2. Upload photos
3. View the album in fullscreen
4. Delete images
5. Access deleted images in the trash for 30 days after deletion

![](/files/jbEHtL91y4rXt3skFzLT)

### Standard Tag Abilities

SharinPix Permissions can also allow users to:

1. Tag Images
2. View tags on images

![](/files/5ukxYicaSd8PFgP5AmHU)

The tags abilities are also available when opening an image in fullscreen.

![](/files/LcNCbKPldpAq57npeNNT)

### The Image Fullscreen View in a Nutshell

To open an image in fullscreen, click on the image thumbnail on the album component.

The following tools can be made available in the image fullscreen view.

![](/files/1hLKN2GF0vF2mDA4B58Y)

1\. Tag the image

2\. Download the image

3\. Open the image in fullscreen on another tab

4\. & 5. Rotate the image

6\. & 7. Flip the image

8\. Duplicate the image

9\. Crop the image

10\. Hide/display the image annotations

11\. Annotate the image

12\. Set the image quality

13\. View image information

14\. Close the fullscreen view

15\. Image zoom slider

### The Image Annotation Menu

The annotation menu is available in the fullscreen view and provides the following options:

![](/files/S4241ThSYAZy3C3zbVlD)

1. Erase
2. Size of mark
3. Color of mark
4. Text box
5. Marker
6. Line
7. Save
8. Exit
9. Rectangle
10. Circle
11. Arrow
12. Double Arrow

### The Album Menu Command

Common album menu abilities are:

1. Copy images
2. Download selected images in a zipped file
3. Share pre-selected images outside of Salesforce

![](/files/RriaVBLK71xRQbT7eguE)

{% hint style="success" %}
Tip:

For more information about how to access the **Thumbnail Menu** , refer to the following article: [Thumbnail View - The menu](/documentation/features/user-interface/thumbnail-view-the-menu)
{% endhint %}

### Image Sorting Abilities

Using SharinPix Permission records, the images uploaded to albums can be sorted:

* By uploaded date
* Date taken
* Or can be sorted in a custom way by dragging and dropping the images

![](/files/cUnscBAPAml96F3kYCAd)

![](/files/ix101KrP5zrAwn7IBNEo)


# Overview of the SharinPix Administration Dashboard

The SharinPix Administration Dashboard provides access to advanced SharinPix settings.

To access the SharinPix Administration from your Organization:

* Click on the **App Launcher**
* Enter SharinPix Settings in the search bar and select **SharinPix Settings**
* On the SharinPix Settings page, click on the **Go to administration dashboard** button

<figure><img src="/files/exaFjc99StY9cvDEvfHg" alt=""><figcaption></figcaption></figure>

* Upon clicking on the button, the SharinPix Administration will open in a new tab.

![](/files/aRjgncTxI8TAbCzolPOZ)

The SharinPix Administration provides several options that can be found in the top-bar menu. These are:

* **Dashboard**: Simply takes the user to the Administration Dashboard.
* **User**: Lists the users present in the Organization.
* **Albums**: Lists the albums available in the Organization.
* **Images**: Displays the images uploaded in the Organization.
* **Publications**: Lists the SharinPix with Chatter publications added in the Organization.

{% hint style="info" %}
For more information about how to use **SharinPix with Salesforce Chatter** , refer to the following articles:

* [Using on Chatter](/documentation/features/main-integration/using-on-chatter)

* [Use the pre-build SharinPix with Chatter Feed](/documentation/chatter-feed/use-the-pre-build-sharinpix-album-with-chatter-feed)
  {% endhint %}

* **Imports**: Lists all imports performed in the Organization.

{% hint style="warning" %}
**Note:**

* Successful import logs are kept for a maximum of three months in our records.

* All other import logs are kept for a maximum of 1 year in our records.
  {% endhint %}

* **Webhooks**: Displays the Webhooks available in the Organization.

{% hint style="info" %}
For more information about **SharinPix Webhooks** , refer to the following article: [SharinPix Webhooks](/documentation/cookbook/sharinpix-webhooks)
{% endhint %}

* **Providers**: Displays information about the external providers that contributed to the Organization.
* **Tags**: Displays the tags available in the Organization.
* **Tag Sets**: Displays the tag sets created. Tag sets are used to store many tags at once.
* **Secrets**: Allows the user to add secret keys to the Organization. The Secrets tab also provides a list of predefined SharinPix URLs that users can use.

![](/files/v2WHEX7KumJHL0w7JgLV)

* **Code Generator**: Provides an interface that allows users to generate sample codes by manually applying settings to an album. It also previews the album based on the settings applied.
* **Search**: Allows the user to search for particular images in the Organization.
* **Settings**: Allows the user to apply various settings on the Organization's albums.

{% hint style="info" %}
For more information about the **Settings** tab, refer to the following article:

[Extended Setup - Customizing your SharinPix Global Settings](/getting-started/advanced-configuration-customizing-your-sharinpix-components-with-sharinpix-permissions)
{% endhint %}


# SharinPix App

The **SharinPix App** provides quick access to the following SharinPix features:

* [SharinPix Settings](#sharinpix-settings)
* [SharinPix Permissions](#sharinpix-permission)
* [SharinPix Image Search](#sharinpix-image-search)
* [SharinPix Documentation](#sharinpix-documentation)
* [SharinPix Support](#sharinpix-support)

![](/files/XE7qau7ym6WEUMwjgbtm)

{% hint style="danger" %}
It is advisable to restrict access to the SharinPix App to System Admins to limit end users from gaining access to undesirable personalizations.
{% endhint %}

## How to access the SharinPix App?

To access the SharinPix App features, follow the steps below:

* Open App Launcher

<figure><img src="/files/69niMvFSdHPj2tAPX1Bf" alt=""><figcaption></figcaption></figure>

* Search **SharinPix App**

<figure><img src="/files/0fcDe66x9QgQR8fRznmw" alt=""><figcaption></figcaption></figure>

* You will be directed to the SharinPix App as depicted below.

![](/files/XE7qau7ym6WEUMwjgbtm)

## SharinPix App features

### SharinPix Settings

![](/files/XE7qau7ym6WEUMwjgbtm)

The SharinPix Settings tab contains the following:

* Salesforce SharinPix API access status.
* SharinPix Salesforce full API access status.
* Google API Key for components such as SharinPix Map.
* Access to the SharinPix Administration Dashboard using the **Go to administration dashboard** button.

{% hint style="danger" %}
The **Einstein Ready** section has been deprecated.
{% endhint %}

### SharinPix Permission

<figure><img src="/files/DbmKQfMLkSzOpOtR22ck" alt=""><figcaption></figcaption></figure>

The SharinPix Permission object permits users to configure a set of SharinPix album abilities.

Once created, a SharinPix Permission record can be assigned to:

* SharinPix Album components
* SharinPix Single Image components
* SharinPix Search components
* SharinPix Mobile Launcher components

For more information, you can go to [SharinPix Permission Object](/documentation/access-and-security/sharinpix-permission-object-how-to-create-and-assign-custom-permission).

### SharinPix Image Search

<figure><img src="/files/ob7dFIAQiPAFxqzamomR" alt=""><figcaption></figcaption></figure>

The Search Image Tab can be used to search for any images uploaded to records listed in a Salesforce report. For more information on this feature, you can go to [Search Image Tab](/documentation/features/search-images/using-the-search-image-tab).

### SharinPix Documentation

![](/files/Qotp9KpmPYICFMI8boO0)

The SharinPix Documentation tab contains all SharinPix articles and FAQs.

### SharinPix Support

![](/files/QKEhOyUCGzkdwPJr9NVj)

The SharinPix Support tab enables users to create a support ticket.

![](/files/yAKxoiOTvSkPPHxOxgfY)

![](/files/p0lyRm8gMETRe59zDI4t)

Users can describe the issue, attach screenshots, and specify their timezone for better assistance before submitting the ticket.


# How to contact support?

{% hint style="danger" %}
Support is only for customers with engaged licenses. If you are a partner, you have to name your customer so we can double check the license engagement and confirm the orgID.
{% endhint %}

Two ways to contact the support team:

1. Via the SharinPix Support tab setting ( admin only )
2. Via Email ( <support@sharinpix.com> )

{% hint style="success" %}
The recommended way is to use the SharinPix Support tab.

If you don’t find the SharinPix support tab ([click here](#contact-support-through-sharinpix-support-admin-only)).

Also please check if you have [updated your SharinPix package from the AppExchange](/faqs/how-to-update-sharinpix-package-from-the-appexchange).
{% endhint %}

## Contact support through SharinPix Support (Admin only)

{% hint style="warning" %}
**Note:**

SharinPix Support custom tab should be put to 'Default on'.

How to do this?

Go to Profile --> System Administrator --> Edit -> Under Custom Tab Settings --> Change SharinPix Support to 'Default on'.
{% endhint %}

Search SharinPix Support on App Launcher.

<figure><img src="/files/2YtfmMRXI7K18Yf7wmcv" alt=""><figcaption></figcaption></figure>

Click on the button create SharinPix support ticket.

<figure><img src="/files/hJ0EkNt9ft7DZstXuEmQ" alt=""><figcaption></figcaption></figure>

Then fill in the form below and click on save.

{% hint style="warning" %}
**Note:**

If you think an investigation in your organization is needed for your problem, you can provide a [grant login](/faqs/how-to-grant-login-access) and tick the checkbox 'Login has been granted'.
{% endhint %}

<figure><img src="/files/VbjszHLub5xKQHcAqoqx" alt=""><figcaption></figcaption></figure>

## Contact support through Email.

You can send an email to <support@sharinpix.com> to report a bug.\
In order to process in the best timing, your email subject should contain :

* Your company Name
* A brief summary of your problem

as an example, if your company name is ACME and you have a problem with an image not displaying after you have uploaded it, your email title should be :

“ACME: Image not displaying after upload on desktop”

{% hint style="warning" %}
**Note:**

Information needed while sending the email:

* Name
* Organisation
* Email to contact
* OrgID
* TimeZone
  {% endhint %}


# SharinPix Status Page

[SharinPix Status](http://trust.sharinpix.com/) (🔗 [trust.sharinpix.com](http://trust.sharinpix.com/)) provides information about the availability and performance of SharinPix services. You can use it to check for current incidents, scheduled maintenance, and historical uptime data.

{% hint style="success" %}
Subscribe to receive notifications about incidents and resolutions.
{% endhint %}

If the status page indicates that all systems are operational and you're still experiencing issues, please get in touch with our support team at <support@sharinpix.com> or use the SharinPix Support tab (available to admins only). For more information, please refer to this [documentation](/getting-started/how-to-contact-support).


# Overview

* [View / Upload images on Salesforce Classic for Desktop](/best-practices/view-upload-images-on-salesforce-classic-for-desktop)
* [View / Upload Pictures on Lightning Experience](/best-practices/view-upload-pictures-on-lightning-experience)
* [View / Upload Pictures on Salesforce mobile App](/best-practices/view-upload-pictures-on-salesforce-mobile-app)
* [View / Upload Pictures on Salesforce Community](/best-practices/view-upload-pictures-on-salesforce-community)
* [Working with Images with Salesforce Field Service](/best-practices/working-with-images-with-salesforce-field-service)
* [Images on generated PDF document](/best-practices/images-on-generated-pdf-document)
* [Images on Salesforce Report and Views](/best-practices/images-on-salesforce-report-and-views)
* [Search for Images in Salesforce using SharinPix](/best-practices/search-for-images-in-salesforce-using-sharinpix)
* [Images features in your Salesforce Flow](/best-practices/images-features-in-your-salesforce-flow)
* [Display Images from another Salesforce record](/best-practices/display-images-from-another-salesforce-record)
* [Working with SharinPix Tokens](/best-practices/working-with-sharinpix-tokens)
* [Working with Sketches in Salesforce Field Service (Offline/ Online LWC)](/best-practices/working-with-sketches-in-salesforce-field-service-offline-online-lwc)
* [Working with Forms in SharinPix](/best-practices/working-with-forms-in-sharinpix)
* [How to Launch a SharinPix Form](/best-practices/how-to-launch-a-sharinpix-form)


# View / Upload images on Salesforce Classic for Desktop

SharinPix can be integrated into Salesforce Classic in different ways.

For instance, it is possible to integrate SharinPix into your own Visualforce development or add the same to your page layouts.

<figure><img src="/files/SyqzZCWyO0aLVjVdCCaj" alt=""><figcaption></figcaption></figure>

Here are the possibilities you have :

* [Using SharinPix "Album" Canvas App](/getting-started/basic-setup/basic-setup-step-3a-for-classic-users-setup-sharinpix-for-salesforce-classic)
* [Using Visualforce page Without A Controller (Admin Friendly)](/documentation/features/main-integration/using-on-classic-with-a-visualforce-page-without-an-apex-controller-admin-friendly-version)
* [Using Visualforce page With a Controller (Developer skills required)](/documentation/features/main-integration/using-on-classic-with-a-visualforce-page-with-an-apex-controller-developer-skills-required)

The above links point to detailed instructions on how to configure each experience.

**Best Practice is to use the Visualforce page integration.**

If you want more flexibility, you should use the version with a Controller, but this requires some developer skills.


# View / Upload Pictures on Lightning Experience

SharinPix uses Lightning components to integrate with Salesforce Lightning Experience.

![](/files/ht2LmuoEJm9OUTuskDAN)

{% hint style="warning" %}
To access the SharinPix Lightning components, **My Domain** should be configured for your organization.

Check [here](https://docs.sharinpix.com/best-practices/spaces/2putv2B9RAZpym8daOH2/pages/yV0NFwgzkPw6kbovjNyJ#id-1.-get-my-domain) for more details on how to make this configuration.
{% endhint %}

These Lightning components can be added:

* to a [record Page](/documentation/features/main-integration/using-on-a-lightning-record-page) or a [home Page](/documentation/features/main-integration/using-on-the-lightning-home-page)
* as a [Lightning Action](/documentation/features/main-integration/using-on-lightning-with-sharinpix-album-lightning-action) (so that you can use a button to open a SharinPix Album)
* in [Flows](/best-practices/images-features-in-your-salesforce-flow)

**The Best Practice is to check all the SharinPix Lightning components, which are all listed here:**

[Overview of the SharinPix Lightning Components](/documentation/lightning-web-component/overview-of-the-sharinpix-lightning-components)


# View / Upload Pictures on Salesforce mobile App

SharinPix integrates with all the Salesforce mobile Experience.

If you are using Salesforce Lightning Experience, you will get the same experience as configured on the desktop using the Phone form factor within the Page Builder.

If you are using Salesforce Classic Experience, you will have to setup actions (buttons) to access the SharinPix Album in a separate window.

![](/files/BclY6BorNP6cPLypLYEI)

Here are all the possibilities you have to integrate in Salesforce mobile:

* with a [Phone form factor on the Record Page](/getting-started/basic-setup/basic-setup-step-3c-for-new-salesforce-mobile-app-users-setup-sharinpix-for-mobile-lightning-experie) for the "Lightning Experience"
* with the [Mobile Launcher Lightning Component](/documentation/features/main-integration/using-on-lightning-with-sharinpix-mobile-launcher-lightning-component-admin-friendly) to use SharinPix Mobile App
* with a [Lightning Action for Salesforce mobile app](/getting-started/basic-setup/basic-setup-step-3d-for-old-salesforce-mobile-app-users-setup-sharinpix-for-mobile-classic-implement) for the "Classic experience"

**Best Practice is to use the** [**SharinPix Mobile App**](/documentation/mobile-app/sharinpix-mobile-app-how-it-works) **for any optimisation regarding people taking multiple pictures on the field and having connectivity concerns (as this can work even offline).**

![](/files/MjDeDUVNibn2FPi8xy2K)

You can also find here an overview of [all the different possible ways to integrate with Salesforce mobile Apps](/documentation/features/main-integration/using-on-salesforce-mobile-apps)


# View / Upload Pictures on Salesforce Community

Most of the SharinPix Lightning components are available on Salesforce Communities.

You can simply add them to the Community Page Builder just like to the Record Page Builder.

![](/files/hcTcAtEQJ3eBXKmIBOIW)

**Best Practice is to test the community experience with a non-admin profile as SharinPix usage on Community requires the assignment of SharinPix Licenses and specific** [**SharinPix Permission set**](/documentation/access-and-security/sharinpix-community-users-access-rights)**.**

Furthermore, do not hesitate to check the [Overview of the SharinPix Lightning Components](/documentation/lightning-web-component/overview-of-the-sharinpix-lightning-components) article, and visit the component description to check if a component is accessible in a Salesforce Community if you want to add the same in a Community.

![](/files/ffgr08tqUeRVjJXS5BPq)


# Working with Images with Salesforce Field Service

## Upload Images from Field Service mobile App

Salesforce Field Service has its own mobile app with very few capabilities to integrate with 3rd Party Apps.

SharinPix uses all the available possibilities at this time and will keep on integrating the new capacities as soon as they will be delivered by Salesforce.

To work with Salesforce Field Service mobile App, users will have to install the SharinPix mobile App on their mobile device and either use:

* an integration that includes the usage of an App Extension (this will appear as a menu item in the central bolt menu)
* or an integration including a clickable item in a flow (which appear as a clickable text in the flow screens)

![](/files/uF9m2Mrky7baSWKk2uLo)

In both cases, it will open the SharinPix mobile App and offer direct access to the camera to take pictures and have them uploaded in the background.

The SharinPix mobile App can fully work offline and give access to all the SharinPix features including annotation, tagging and addition of Title & Description on images.

This integration uses a deeplink URL which can be personalized with different parameters as described here: [SharinPix mobile App - Deeplink syntax](/documentation/mobile-app/sharinpix-mobile-app-deeplink-syntax).

**The Best Practice is to personalize the deeplink URL to prohibit access to the roll, to force tags to be automatically added to images or even to add a checklist to show areas or actions to fill with images.**

## Merge images in generated Service Report PDF

<figure><img src="/files/FnKYSSaKvu52oG2UQOT7" alt=""><figcaption></figcaption></figure>

If [SharinPix Image Sync is setup](/documentation/image-sync/setup-sharinpix-image-sync), each picture uploaded to SharinPix will have a corresponding [SharinPix image record](/documentation/image-sync/the-sharinpix-image-object) created accordingly.

A webhook is required by the Field Service implementation in order to make SharinPix Image Sync work for images uploaded from the SharinPix mobile App. This could be done by following the steps described in this article: [Image Sync for pictures uploaded via SharinPix Mobile App](/documentation/image-sync/image-sync-for-pictures-uploaded-via-sharinpix-mobile-app).

Once done, [those images could be used as a list in the Service Report template](/documentation/integrations/salesforce-field-service/display-images-in-service-report-salesforce-field-service-fsl). These images will then be available in the generated PDF.

![](/files/wFADBhuH4mMopm5F24b7)

You can also read the following articles to setup usage of SharinPix for Salesforce Field Service :

* [Using on Salesforce Field Service App (Field Service Lightning)](/documentation/features/main-integration/using-on-salesforce-field-service-app-field-service-lightning)
* [Integration of SharinPix App with SFS (FSL) App using App Extension](/documentation/integrations/salesforce-field-service/integration-of-sharinpix-app-with-sfs-fsl-app-using-app-extension)
* [Integration of SharinPix App with SFS (FSL) App using Flows](/documentation/integrations/salesforce-field-service/integration-of-sharinpix-app-with-sfs-fsl-app-using-flows)
* [Display Images in Service Report (Salesforce Field Service / FSL)](/documentation/integrations/salesforce-field-service/display-images-in-service-report-salesforce-field-service-fsl)

Please note that if you are using SharinPix in a flow on a newly created record, you may have to use a specific configuration as the token value (which is an important security configuration required to make SharinPix work on Field Service mobile App) is only available on existing records.

In that case you should follow those steps :

[Add Photos on a Newly-Created Record Using Field Service Mobile Flow and SFS (FSL) Mobile (Developer-Oriented)](broken://spaces/5EvYRrLbUyvRh8o1jmMG/pages/6B3e6nsTLDh8eD1cYMbq)


# Images on generated PDF document

SharinPix addresses a lot of hitches when it comes to the addition of images to a PDF document.

![](/files/ZuaO5ddnSkKyOrBZHQzk)

## Using SharinPix Image Sync to resize images for your PDF

To resize your images, you should always make use of [SharinPix Image Sync](/documentation/image-sync/setup-sharinpix-image-sync) so as to automatically create [SharinPix Image records](/documentation/image-sync/the-sharinpix-image-object) for each image uploaded using SharinPix.

Those records can be personalized to handle different versions of the uploaded images using [SharinPix Transformation](/documentation/image-sync/sharinpix-transformation-get-your-images-automatically-resized). It's important to choose the right image size depending on your scenario.

**Best Practice when merging image in documents is to use a personalized image resolution so as to avoid any PDF generation size limit in Salesforce.**

A smaller image resolution will use less memory and help break the 30 MB limit for the generated PDFs. Such limitations can be reached when using original image resolutions (6 to 10 images captured by modern smartphone cameras can be sufficient to reach these limits).

In a document you don't need a very high image resolution. Only 250 pixels per inch for a printed document is enough to have an acceptable image resolution.

## Use resized image versions in your Doc Generation app/tool

There are mainly 3 different ways to display merged images onto a generated PDF document :

* as an image Table, using the SharinPix Image related List and either Formula or Rich Text field available on those records
* merging a Rich Text Field which can be populated with images using the [SharinPix To Rich Text Area](/documentation/lightning-web-component/sharinpix-to-rich-text-area) component
* using the [SharinPix to PDF](/documentation/lightning-web-component/sharinpix-to-pdf) component which relies on an easy configuration to generate PDF document with an optimized table of images, personalized first and last pages and a comment/description before and/or after the image table

## What is the best option to merge images?

There are 2 parameters to consider when choosing between using SharinPix Image records or content of a Rich Text Area field.

**1) Automated vs Manual selection of images**

Automated: [SharinPix Image records](/documentation/image-sync/the-sharinpix-image-object) permit to rely on the existing records and doesn't require a user to select images

Manual Selection of images: Can either be done by a selection of images and the use of [SharinPix To PDF](/documentation/lightning-web-component/sharinpix-to-pdf) component to populate a Rich Text field OR use of SharinPix Image records filtered by a tag added by users on each image to merge in the document (such as ServiceReport tag). As the tags field in SharinPix Image record reflects the tags added to the image it's easy to filter SharinPix Image records containing specific values.

**2) PDF generation tool or implementation used**

Based on Salesforce Template: If you are relying on Salesforce templates (such as Quote/Service Report/...) then you can either, use the related list of SharinPix Image records (as described here [Display Images in Service Report (Salesforce Field Service / FSL)](/documentation/integrations/salesforce-field-service/display-images-in-service-report-salesforce-field-service-fsl)) or a Rich Text area field populated using the SharinPix To Rich Text component.

Using 3rd party tool such as Conga: You can implement a Conga Query to filter on SharinPix Image records in a similar way that you add a table in a template. Merging a Rich Text area populated using the SharinPix To Rich Text component will also work.\
(SharinPix works with many other PDF generation tools from the AppExchange, you can check this article with tips on how to integrate with any of those tools [How SharinPix can help with Images in PDF?](/faqs/how-sharinpix-can-help-with-images-in-pdf) )

Using SharinPix To PDF option: This allows you to simply implement a document generator in a click from a selection of images and requires very few steps of configuration. You can check how to make this happen here: [SharinPix To PDF](/documentation/lightning-web-component/sharinpix-to-pdf) (this option is only available with the [SharinPix Enterprise Plan](/faqs/what-is-the-pricing-for-salesforce-on-alibaba-cloud)).


# Images on Salesforce Report and Views

To access SharinPix images in Salesforce report and Salesforce views you can either:

* rely on [SharinPix Image records](/documentation/image-sync/the-sharinpix-image-object) (which are automatically generated once you [setup SharinPix Image Sync](/documentation/image-sync/setup-sharinpix-image-sync))
* automatically populate your standard or custom object fields with images

![](/files/p4ZdbEqZQVn9jYDpNuTH)

To populate fields with images the easiest way is to use the [SharinPix Tag Action](/documentation/features/working-with-tags/tag-action) feature.

When applying a tag, an URL field can be automatically updated with an URL specifying a version of the image. This URL value can be [rendered in a Formula field](/documentation/cookbook/display-an-image-in-a-salesforce-field-using-tag-action) which can then be used elsewhere in Salesforce, such as in Views, Reports, Emails or Documents.

**Best Practice: you can rely on SharinPix Single Image to simplify the UI and the automation you need after uploads, including saving the Image in a field.**

As an example 4 different Single Image Components can be used to upload different car views (such as front, back, right and left). Each Single Image can be associated with a specific tag value (respectfully front, back, right, left) and fields can be populated accordingly (example: front URL, back URL, right URL and left URL). For each view, those URLs can be rendered in Formula fields (front image, back image, right image and left image).

Then, you just have to use the formula fields in a view to get an overview of the image taken by line of report very easily. This of course requires the usage of Tag Action for each tag.


# Search for Images in Salesforce using SharinPix

Searching for images can be done in many different ways when using Salesforce with SharinPix.

1. [Views and Reports on SharinPix Image records](/best-practices/images-on-salesforce-report-and-views): SharinPix Image is a custom object which can easily be used to create reports or views to find/filter/display SharinPix Image records provided you have [setup SharinPix Image Sync](/documentation/image-sync/setup-sharinpix-image-sync)
2. [Salesforce Search on SharinPix Image records](/documentation/features/search-images/using-salesforce-search-on-sharinpix-image-objects): for the same reason, you can also search for those SharinPix records and get results as with any other Search in Salesforce
3. Using [SharinPix Image Search tab](/documentation/features/search-images/using-the-search-image-tab): this tab permits the usage of a report to search for SharinPix image records based on the records listed in that specific report.
4. Using your own filters and [SharinPix search component](/documentation/lightning-web-component/sharinpix-search): You can implement your own filters to query a Salesforce record list. Using this list you can get the images associated with the listed records and display the same in the SharinPix Search Component. For more details on how to implement your own SharinPix Search component, refer to this article : [Using your personalized Search](/documentation/features/search-images/using-your-personalized-search)

<figure><img src="/files/UoFdK1lxdg6WCJAK5dTJ" alt=""><figcaption></figcaption></figure>


# Images features in your Salesforce Flow

Most of the SharinPix components are available in Salesforce flow and can be added to Flow screens.

For each component, a description indicating its availability on Page Builder, Community, Flow and more is available in its corresponding article.

![](/files/qg84Ky9rk3GjeLFV7xPG)

The SharinPix components are listed here: [Overview of the SharinPix Lightning Components](/documentation/lightning-web-component/overview-of-the-sharinpix-lightning-components)

**Best Practice is to use the SharinPix Components in Flows:**

If you only need to upload one picture and apply a specific tag to it, you should use the [SharinPix Single Image](/documentation/lightning-web-component/sharinpix-single-image)

If you need to upload multiple pictures and apply the same tag to all of them, you can either use the [SharinPix Album](/documentation/lightning-web-component/sharinpix-album) or the smaller [SharinPix Upload Button](/documentation/lightning-web-component/sharinpix-upload-button). Both can be personalized using a [SharinPix Permission object](/documentation/access-and-security/sharinpix-permission-object-how-to-create-and-assign-custom-permission) on which you can set the required abilities/features and the tags which can be applied.

To enable the usage of a flow in Field Service, you should use a clickable text that will handle a deeplink URL. To implement this, refer to the following article: [Integration of SharinPix App with SFS (FSL) App using Flows](/documentation/integrations/salesforce-field-service/integration-of-sharinpix-app-with-sfs-fsl-app-using-flows)

Last but not least if you have mobile users using the Salesforce mobile App, you may want them to have a quick access to great features even without good connectivity. To make this happen, you can rely on the SharinPix mobile App, which can be launched from a specific record and with a specific behaviour using the [SharinPix Mobile Launcher](/documentation/lightning-web-component/sharinpix-mobile-launcher).


# Display Images from another Salesforce record

When you use a SharinPix component on a page record, it give you access to SharinPix image storage corresponding to this specific record.

But sometimes you may need to have access to images stored in other(s) record(s) from another specific record.

Let's take an example of a WorkOrder.

As a desktop user you may want to see from the WorkOrder record page :

\- Images stored in the Case from which the WorkOrder was created

\- Images from different WorkOrder Line Items related to this WorkOrder

## Showing images from another single record

To show images from another record, you can use the SharinPix Album component and set the AlbumID value to the recordID of the record you want to see.

To do so, you can either develop your own SharinPix Lightning Component and pass a specific value to the parameter, or more easily if you are not a developer, you can rely on a Flow implementation to do so.

This flow can then be added to the Page record.

In our example, the result will be to display the images stored in the cases on which we have a lookup field set directly on the WorkOrder page record.

Here are the full explanation steps by steps on how to implement this : [Display another record's album on a page record using a Flow (Admin-friendly)](/documentation/cookbook/display-another-record-s-album-on-a-page-record-using-a-flow-admin-friendly)

## Showing images from related records

To show images from related record you have 2 different SharinPix Lightning Components that you can use.

[**SharinPix Related Search**](/documentation/lightning-web-component/sharinpix-related-search)

This component permits to configure in few clicks a SharinPix search on related records.

It takes a related list as a parameter and show all the images in the same Search result. Those results can be filtered on tags selection to only display some images.

In our example it can show in a tab named After Images all the images tagged as After in the WorkOrder Line Items related to a WorkOrder.\
And in a tab named Before images all the images tagged as Before.

Here you can find a full description for this component : [SharinPix Related Search](/documentation/lightning-web-component/sharinpix-related-search)

[**SharinPix Related Record Albums**](/documentation/lightning-web-component/sharinpix-related-record-albums)

This component permits to display the related list on one side using the field that you want as a label and the SharinPix Album if ever on item in the list is clicked.

In our example it can show all the WorkOrder Line Item and in one click on any WOLI display the corresponding Album to show images from that specific Work Order Line Item.

Here you can find a full description of this component : [SharinPix Related Record Albums](/documentation/lightning-web-component/sharinpix-related-record-albums)

![](/files/WgPpTQxkJt8BP2ILSga2)


# Working with SharinPix Tokens

SharinPix makes use of [JSON Web Tokens](/best-practices/working-with-sharinpix-tokens#json-web-tokens-jwt) to securely transmit information from its components and mobile app to Salesforce.

SharinPix tokens are categorized as follows:

1. [SharinPix Online Tokens](/best-practices/working-with-sharinpix-tokens#sharinpix-online-token) - Used to display SharinPix components online in your Salesforce organization or on the SharinPix mobile app.
2. [SharinPix Mobile Upload Token](/best-practices/working-with-sharinpix-tokens#sharinpix-mobile-upload-token) - Used to upload photos using the SharinPix mobile app.

SharinPix tokens can be generated in different ways depending on the use case.

The following sections further define the two types of SharinPix tokens, provides the common SharinPix token use cases and methods to generate SharinPix tokens.

## JSON Web Tokens (JWT)

SharinPix makes use of JSON Web Token to securely transmit information from its components and mobile app to Salesforce. The transmitted information is authenticated and digitally signed using a secret key referred to as the SharinPix Secret.

JSON Web Tokens:

* Allow secure transmission of information between parties.
* Ensure safer data transmission using encrypted tokens.
* Include the following elements separated by dots (.):
  1. **Header :** Consists of the token type and the algorithm used.
  2. **Payload :** Includes data and user rights.
  3. **Secret :** Used to authenticate the request.

The token consists of the following parameters:

* **Issuer** **:** A key used in the token payload to determine who is the owner and to which organization the album and images belong.
* **Secret** **:** A key used to verify the authenticity of the requests.

{% hint style="warning" %}
**Note:**

* The secret key (i.e., SharinPix Secret) should be generated before the token generation.
* SharinPix Secrets can be generated and retrieved from the [SharinPix Administration Dashboard](/getting-started/overview-of-the-sharinpix-administration-dashboard) using the **Secret** tab as depicted below.
* Deleting a secret key invalidates all tokens generated with the same. In such cases, the tokens should be regenerated.
  {% endhint %}

![](/files/aFCrvbI0QT7vEq3MabEd)

The example below depicts the encoded and decoded version of a SharinPix token:

![](/files/ieCrhTMPcJxPQlBjgZH5)

{% hint style="success" %}
**Tip:**

* To view the abilities of a SharinPix token, copy and paste the encoded token value on the following JWT website: [jwt.io](https://jwt.io/)
* For more information about JWT, refer to the following JWT article: [Introduction to JSON Web Tokens](https://jwt.io/introduction)
  {% endhint %}

## SharinPix Online Token

SharinPix online tokens are used to display SharinPix components **online** within your organization or on the SharinPix mobile app.

Such tokens are commonly used within your Salesforce organization. It can also be used to bring the same experience in the SharinPix mobile app, *provided that the device is online*.

### Online Token Example

A typical online token consists of the following parameters:

* **iss** : Defines the token issuer, that is, who created and signed the token. This parameter is mandatory as it links the token to the user's organization.
* **iat** : Defines the time at which the token was issued. *Note: The time corresponds to seconds since Unix epoch.*
* **Id** : Points to the album ID or record ID on which the photos are made available.
* **path** : The address on which SharinPix should open.
* **abilities** : Contains the permissions/abilities given to manipulate the SharinPix images and data.

The code snippet below shows the parameters of a decoded online token:

```json
    {
      "iss": "1d8ea6d4-9bbf-48b7-8774-e6d079812cdf",
      "iat": 1668096852,
      "Id": "0WO1I000002APkxWAG",
      "path": "/pagelayout/0WO1I000002APkxWAG",
      "abilities": {
        "0WO1I000002APkxWAG": {
          "Access": {
            "image_upload": true,
            "image_list": true,
            "see": true
          }
        }
      }
    }
```

### Online token generation methods

SharinPix provides the following methods to generate online tokens:

* [Using the SharinPix Share Selection Lightning component.](/documentation/lightning-web-component/sharinpix-share-selection)
* [Using Apex methods.](https://docs.sharinpix.com/best-practices/spaces/5EvYRrLbUyvRh8o1jmMG/pages/IsaSDHZt7JwoRTcffkCA#id-2.-using-custom-apex-methods)
* [Using Apex Triggers.](/documentation/access-and-security/sharinpix-automatic-token-generation-developer-oriented)

{% hint style="success" %}
**Tip:**

* For more information about online token methods and how to select the appropriate method for your use case, refer to the following article: [Online token generation methods](/documentation/access-and-security/online-token-generation-methods)
* The SharinPx package includes the [SharinPix Permission object](/documentation/access-and-security/sharinpix-permission-object-how-to-create-and-assign-custom-permission) which is an easy and maintainable alternative to token generation by code. It is preferred to use SharinPix Permission records for SharinPix Lightning components that enable the use of custom SharinPix permission.
  {% endhint %}

## SharinPix Mobile Upload Token

SharinPix mobile upload tokens are used to securely upload photos and PDF forms from the SharinPix mobile app to Salesforce. Such tokens can be used by users to perform the upload without being connected to Salesforce.

### Mobile Upload Token Use Cases

Mobile upload tokens are commonly used to:

* Upload photos using the SharinPix mobile app.
* Edit, manipulate and upload PDF forms using the SharinPix mobile app. Click [here](/documentation/features/main-integration/using-sharinpix-deeplink-to-launch-a-pdf-from-salesforce-mobile) for more information on how to configure the PDF form feature.
* Enable other SharinPix mobile features such as the **checklist** option which provides a list of tags ready to be filled with pictures. Click [here](/documentation/mobile-app/sharinpix-mobile-app-deeplink-syntax) for more information on the SharinPix mobile features.

### Mobile Upload Token Example

A typical mobile upload token consists of the following parameters:

* **iss** : Defines the token issuer, that is, who created and signed the token. This parameter is mandatory as it links the token to the user's organization.
* **iat** : Defines the time at which the token was issued. *Note: The time corresponds to seconds since Unix epoch.*
* **exp** : Refers to the token expiration time in UNIX timestamp format measured in milliseconds. Note:
  * It is strongly recommended to set sufficient time for the token expiration to allow complete photo upload and synchronization.
  * No exp parameter in the token decoded value means that no expiration has been set up.
  * Expired tokens are no more valid and cannot be used to upload photos.
* **album\_id** : Points to the album ID or record ID on which the photos should be uploaded. *Note: A mobile upload token should **always** have an album\_id parameter.*
* **name :** Contains the reference name of the token. This parameter is typically set to the record name or record number.

The code snippet below shows the parameters of a decoded mobile upload token:

```json
    {
      "iss": "0000000a-bc00-0a11-b1aa-000xxxxx00xx",
      "iat": 1578555613,
      "exp" : 1528281766,
      "album_id": "0WO1I000000mabcXYZ",
      "name": "WO 5560"
    }
```

{% hint style="danger" %}
**Note:**

Deletion of the secret key on the SharinPix admin dashboard will automatically invalidate all tokens generated in the Salesforce organization.
{% endhint %}

### Mobile upload token generation methods

SharinPix provides the following methods to generate mobile upload tokens:

1. [Using Salesforce Flows.](/documentation/mobile-app/sharinpix-automatic-mobile-upload-token-generation-admin-friendly)
2. [Using Apex methods.](/documentation/cookbook/utils-methods#generatemobileappurl)
3. [Using Apex Triggers.](https://docs.sharinpix.com/best-practices/spaces/5EvYRrLbUyvRh8o1jmMG/pages/DEZkUCDBgYzI8DcyuBc0#id-3.-token-generation-using-apex-triggers-developer-oriented)

{% hint style="success" %}
**Tip:**

For more information about mobile token methods and how to select the appropriate method for your use case, refer to the following article: [Mobile token generation methods](/documentation/mobile-app/mobile-token-generation-methods)
{% endhint %}

## How to easily differentiate between online and mobile upload tokens?

SharinPix online and mobile uploads tokens can be easily differentiated by their payload contents.

For instance, mobile upload tokens will include:

* An **album\_id** parameter.
* A **name** parameter.

![](/files/IlRIwUJqbtjV9Q3N5eYC)

Online tokens, on the other hand, usually have more parameters in the token payload and typically consist of:

* A **path** parameter.
* An **Id** parameter.
* An **abilities** parameter.

![](/files/GaD5v6DTTtWmeXWAYSOx)


# Working with Sketches in Salesforce Field Service (Offline/ Online LWC)

SharinPix makes it easy for field service workers to sketch directly in their Salesforce Field Service app, even when they're offline

SharinPix provides two components for sketching, as listed below:

* [SharinPix Sketcher](/best-practices/working-with-sketches-in-salesforce-field-service-offline-online-lwc#setting-up-sharinpix-sketcher)
* [SharinPix Sketch Plan](/best-practices/working-with-sketches-in-salesforce-field-service-offline-online-lwc#setting-up-sharinpix-sketch-plan)

## Setting Up SharinPix Sketcher

The SharinPix Sketcher component is designed to annotate sketches within Salesforce Field Service (SFS). It offers features such as polygons, lines, shapes, and text. This component is also functional offline, enhancing its usability in various field scenarios.

Follow the [SharinPix Sketcher](/documentation/lightning-web-component/sharinpix-sketcher) guidelines to use the SharinPix Sketcher on Salesforce (Desktop and Mobile) and follow [Setting Up SharinPix Sketcher for Salesforce Field Service Usage](/documentation/lightning-web-component/sharinpix-sketch-components-for-salesforce-field-service-usage) to use it on SFS (online or offline). The following diagram illustrates the SharinPix Skectcher component.

![](/files/Us0Bteg5owiUnRE0HeFz)

## Setting Up SharinPix Sketch Plan

The SharinPix Sketch Plan provides a robust feature for adding and annotating markers on sketches. This tool is also optimized for offline use within Salesforce Field Service (SFS), ensuring continuous productivity without the need of a constant internet connection.

Follow the [SharinPix Sketch Plan](/documentation/lightning-web-component/sharinpix-sketch-plan) guidelines to use the SharinPix Sketch Plan on Salesforce (Desktop and Mobile) and follow [Setting Up SharinPix Sketch Plan for Salesforce Field Service Usage](/documentation/lightning-web-component/sharinpix-sketch-components-for-salesforce-field-service-usage) to use on it on SFS (online or offline). The following diagram illustrates the SharinPix Sketch Plan component.

<figure><img src="/files/ujM1vp2R12wL8RgnsrSG" alt=""><figcaption></figcaption></figure>


# Working with Forms in SharinPix

SharinPix offers different level of Form integration :

* You can build forms using **Salesforce native capabilities** (Flow Screen) and use SharinPix Components on top of this experience
* You can build forms using **SharinPix PDF Form** to fill out an existing PDF with values, photos, sketches and signature
* You can also build form with the **SharinPix Offline mobile Form**, which offers offline form capabilities with dynamic questions and all the power of SharinPix as Elements for this form

## SharinPix Form in Flow Screen or other Salesforce native capabilities

As part of any flow screens you can use the SharinPix component to view visual, upload or capture visual or even trigger action (such as the one supported by the SharinPix mobile app).

Please check in the list of components here the ones available in flow screens : [SharinPix Components](/documentation/lightning-web-component/overview-of-the-sharinpix-lightning-components).

## SharinPix PDF Form

As part of the features available with SharinPix, you can start with a specific PDF and build a form on top of it.

This will require you to upload the PDF in the [SharinPix PDF Form Builder](/best-practices/working-with-forms-in-sharinpix), draw areas that will be actionable to enter data, and make it uploaded as a new PDF file in Salesforce.

## SharinPix Offline mobile Forms

Using [SharinPix offline mobile forms](/forms/overview-and-getting-started/welcome-to-sharinpix-forms), you can build a form by drag-and-drop using informative elements, inputs or actions.

SharinPix offline mobile forms support default values from Salesforce, conditional visibility, formulas to calculate values from input, repeated sections to input multiple rooms, assets, or even deficiencies, sections to group information when your form is too long, and more!

In that way, you will be able to provide your field users with a way to document their jobs by answering questions, capturing photos or videos (and more), and gathering signatures.

As a result of this, you will get the form submission in your Salesforce, offering quick access to the data as a read-only version, as a PDF generated with your branding, or even as Answers records in Salesforce representing all the submitted values.


# How to Launch a SharinPix Form

[**SharinPix Forms**](/forms/overview-and-getting-started/welcome-to-sharinpix-forms) allow users to capture structured data and images directly within Salesforce. They are designed for both online and offline usage, making them ideal for inspections, audits, field operations, and any scenario requiring seamless data collection.

Users can capture images on the spot as they fill out forms and benefit from a wide range of integrated **tools,** including sketching capabilities, advanced formulas, spacers, image capture, repeated sections, and many other features. This combination allows teams to streamline data collection, improve accuracy, and provide a smoother experience for both field users and administrators managing the information within Salesforce.

{% hint style="info" %}
You can launch a SharinPix Form in different ways:

* [From Salesforce on a Web Browser](/best-practices/how-to-launch-a-sharinpix-form#launching-a-form-from-salesforce-on-a-web-browser)
* [From the Salesforce Mobile App to the SharinPix Mobile App](/best-practices/how-to-launch-a-sharinpix-form#launching-a-form-from-the-salesforce-mobile-app-to-the-sharinpix-mobile-app)
* [From the Salesforce Field Service App (SFS)](#launching-a-form-from-the-salesforce-field-service-sfs-app)
* [Through a Universal Link](#launching-a-form-using-a-universal-link)
* [Through the SharinPix Form Lightning Web Component (LWC)](#launching-a-form-from-the-sharinpix-form-lwc)
  {% endhint %}

{% hint style="warning" %}
**Prerequisites:**

Before using **SharinPix Forms** , ensure that each user has the appropriate [permission set](/documentation/access-and-security/sharinpix-permission-sets) assigned:

* **SharinPix Forms Admin** is required for creating and managing form templates.
* **SharinPix Forms User** is required for filling out forms and capturing data.

Make sure you have the **latest** **SharinPix Package Version** Installed. Refer to [*this documentation*](/faqs/how-to-update-sharinpix-package-from-the-appexchange) to update your package.
{% endhint %}

## Launching a Form from Salesforce on a Web Browser

To open a SharinPix Form in a web browser, the form URL must include:

<mark style="color:red;">`form_online_mode=true`</mark>

There are two recommended ways to do this:

### Option A — Use the Form Launcher LWC

* Add the [**SharinPix Form Launcher LWC**](/documentation/lightning-web-component/sharinpix-form-launcher) to the desired Salesforce record page.
* Enable the **“Open in Online Mode”** property within the component settings.
* The form will then launch directly in the browser when the user opens it as shown below.

<figure><img src="/files/FKEtkSQM8KpA1Z7M3V7G" alt=""><figcaption></figcaption></figure>

![](/files/kD7ZiYFPQdcIhQcRCiPK)

### Option B — Generate a Share Link

Create a [share Link](/forms/salesforce-integration/generate-sharinpix-shareable-form-links-automatically) that allows users to automatically generate a link that launches a SharinPix Form.

## Launching a Form from the Salesforce Mobile App to the SharinPix Mobile App

To automatically open forms inside the SharinPix Mobile App when starting from Salesforce Mobile:

There are two recommended ways to do this:

### Option A — Generate a universal link

The format for **universal links** (URL) to open a form in the SharinPix app is as follows:

<mark style="color:red;">`https://app.sharinpix.com/native_app/form?token=`</mark>*<mark style="color:red;">**`<sharinpix-form-token>`**</mark>*

### Option B — Use the Form Launcher LWC

* Add the Form Launcher to the record page.
* **Uncheck** the “Open in Online Mode” property.

Once configured, tapping the Form Launcher button from Salesforce Mobile automatically opens the selected form in the SharinPix Mobile App, allowing users to complete and submit it natively.

For detailed setup instructions, refer to the [Form Launcher](/documentation/lightning-web-component/sharinpix-form-launcher) documentation.

![](/files/8m2sHbQrbCs7t1AnnzZX)

## Launching a Form from the Salesforce Field Service (SFS) App

Another way to launch a **SharinPix Form** is through the **Salesforce Field Service (SFS) App** by creating an **App Extension**.

The **App Extension** can embed a URL that directly opens to a **SharinPix Form** within the **SharinPix Mobile App**, allowing the user to fill and submit the form from within the SFS workflow.

For detailed setup instructions, refer to the documentation on [**Integration of SharinPix Form with SFS App using App Extension**](/forms/form-mobile-integration/integration-of-sharinpix-form-with-sfs-app-using-app-extension).

![](/files/LVFiFphVv8g85Sodeo9q)

## Launching a Form Using a Universal Link

A universal link is the most flexible way to trigger a SharinPix Form. The format for **universal links** (URL) to open a form in the SharinPix app is as follows:

<mark style="color:red;">`https://app.sharinpix.com/native_app/form?token=`</mark>*<mark style="color:red;">**`<sharinpix-form-token>`**</mark>*

It can be generated in a Salesforce Flow using one of three invocable Apex actions:

### Option A — GenerateFormUrlAutomation

* Produces the **full universal link** , ready to use in flows, buttons, or external systems.
* Recommended for most use cases.\
  For detailed configuration steps, refer to the documentation on [Automatic Form URL Generation using Flow](/forms/salesforce-integration/automatic-form-url-generation-using-flow-admin-oriented).

### Option B — GenerateFormTokenAutomation (Token for a Specific Form)

* Generates **only the secure token**.
* You manually construct the universal link using formulas or external logic.
* Useful when the link must be constructed outside Salesforce for security or integration reasons.\
  For detailed configuration steps, refer to the documentation on [Automatic Form Token Generation using Flow](/forms/salesforce-integration/automatic-form-token-generation-using-flow-admin-oriented).

### Option C — TokenGeneration (Token for Multiple Forms)

You can generate a single token and reuse it across multiple form templates. In this approach, the token remains the same, and the specific form to open is defined using the parameter <mark style="color:red;">`form=<SharinPix Form Template URL>`</mark> in the universal link.

For example:

<mark style="color:red;">`https://app.sharinpix.com/form?token=<Token>&form=<Form Template URL 1>`</mark>\ <mark style="color:red;">`https://app.sharinpix.com/form?token=<Token>&form=<Form Template URL 2>`</mark>

This method is especially useful when you need to launch several forms from the same record. For instance, on an Inspection object, you may have multiple related forms such as Health & Safety, Compliance Review, Equipment Check, and more—all accessible using a single token.

For detailed configuration steps, refer to the documentation on [Automatic Token Generation using Flow](/documentation/mobile-app/sharinpix-automatic-mobile-upload-token-generation-admin-friendly).

## Launching a Form from the SharinPix Form LWC

You can also fill a **SharinPix Form** directly within Salesforce by using the ***SharinPix Form LWC***.

To use it:

1. Add the **SharinPix Form LWC** to the desired Salesforce record page.
2. In the component’s property **“SharinPix Form Template ID or Name”**, specify the name or ID of the SharinPix Form Template you want to load.

Once configured, the selected form automatically loads inside the record page. Users can complete and submit the form directly within Salesforce.

![](/files/EYLnbsElvTFWqc2lNxWi)


# Overview

### Overview & Getting Started

* [Welcome to SharinPix Forms](/forms/overview-and-getting-started/welcome-to-sharinpix-forms)
* [SharinPix Forms](/forms/overview-and-getting-started/sharinpix-forms)
* [SharinPix Form Offline Usage](/forms/overview-and-getting-started/sharinpix-form-offline-usage)
* [Generate Forms with AI](/forms/overview-and-getting-started/generate-forms-with-ai)
* [Sample Forms](/forms/overview-and-getting-started/sample-forms)
* [Form Response](/forms/salesforce-integration/sharinpix-form-response)

### Form Elements

* [SharinPix Form Template Editor](/forms/form-elements/sharinpix-form-template-editor)
* [Form Features - Default or Prefill Values](/forms/form-elements/form-features-default-or-prefill-values)
* [Form Features - Magic Fill](/forms/form-elements/form-features-magic-fill)
* [Form Features - Conditional Visibility](/forms/form-elements/form-features-conditional-visibility)
* [Form Features - Disable Form Question](/forms/form-elements/form-features-disable-form-question)
* [Form Features - Validations](/forms/form-elements/form-features-validations)
* [Form Features - IFrame](/forms/form-elements/sharinpix-form-sections-and-repeated-sections)
* [Form Features - Table](/forms/form-elements/form-features-table)
* [Form Features - Sketch Component with Dynamic Background](/forms/form-elements/form-features-sketch-component-with-dynamic-background)
* [Form Features - Use Dynamic Salesforce Data with Record Datasets](/forms/form-elements/form-features-use-dynamic-salesforce-data-with-record-datasets)
* [Form Features - Capture Additional Details for Radio Answers using the Further Info Feature](/forms/form-elements/form-features-capture-additional-details-for-radio-answers-using-the-further-info-feature)
* [Form Features - Theme Customization](/forms/form-elements/form-features-theme-customization)
* [Form Features - Rich Text Area](/forms/form-elements/sharinpix-form-sections-and-repeated-sections-1)
* [SharinPix Form Formula Functions and Operators](/forms/form-elements/sharinpix-form-formula-functions-and-operators)
* [SharinPix Form Formula: Fields and Attributes](/forms/form-elements/sharinpix-form-formula-fields-and-attributes)
* [Mobile App Configuration In Form Template Editor](/forms/form-elements/mobile-app-configuration-in-form-template-editor)

### Form Sections & Repeated Sections

* [SharinPix Form - Sections](/forms/form-sections-and-repeated-sections/sharinpix-form-sections-and-repeated-sections)
* [SharinPix Form - Repeated Sections](/forms/form-sections-and-repeated-sections/sharinpix-form-sections-and-repeated-sections-1)
* [SharinPix Form Formula: Referencing Repeated Section Fields](/forms/form-sections-and-repeated-sections/sharinpix-form-formula-referencing-repeated-section-fields)
* [Create Child Records With Form Sections](/forms/form-sections-and-repeated-sections/create-child-records-with-form-sections)

### Salesforce Integration

* [SharinPix Form Response](/forms/salesforce-integration/sharinpix-form-response)
* [Setup Custom Lookup For SharinPix Form Response](/forms/salesforce-integration/sharinpix-form-response/setup-custom-lookup-for-sharinpix-form-response)
* [Setup Custom Lookup For SharinPix Form In Progress](/forms/salesforce-integration/sharinpix-form-in-progress/setup-custom-lookup-for-sharinpix-form-in-progress)
* [SharinPix Form In Progress](/forms/salesforce-integration/sharinpix-form-in-progress)
* [Form Features - Sync Form values to Salesforce](/forms/salesforce-integration/form-features-sync-form-values-to-salesforce)
* [Create and Update Related Salesforce Records with SharinPix Forms](/forms/salesforce-integration/create-and-update-related-salesforce-records-with-sharinpix-form)
* [Reopen A Previously Submitted SharinPix Form](/forms/salesforce-integration/reopen-a-previously-submitted-sharinpix-form)
* [Automatic Form Token Generation using Flow (Admin-Oriented)](/forms/salesforce-integration/automatic-form-token-generation-using-flow-admin-oriented)
* [Automatic Form URL Generation using Flow (Admin-Oriented)](/forms/salesforce-integration/automatic-form-url-generation-using-flow-admin-oriented)
* [Generate SharinPix Shareable Form Links Automatically](/forms/salesforce-integration/generate-sharinpix-shareable-form-links-automatically)
* [Import Images from Form Response to Parent Object (Admin-Oriented)](/forms/salesforce-integration/import-images-from-form-response-to-parent-object-admin-oriented)
* [Form Utils Methods](/forms/salesforce-integration/form-utils-methods)
* [Record Datasets](/forms/salesforce-integration/record-datasets)

### Advanced Form Configuration

* [Form Features - Initial/Follow-up Form Responses (Comparative Form)](/forms/advanced-form-configuration/form-features-initial-follow-up-form-responses-comparative-form)
* [SharinPix Forms - Context Parameters](/forms/advanced-form-configuration/sharinpix-forms-context-parameters)

### Form PDF Configuration

* [SharinPix Forms - PDF Configuration](/forms/form-pdf-configuration/sharinpix-forms-pdf-configuration)
* [Import Form PDF to Album using Flow (Admin-Oriented)](/forms/form-pdf-configuration/import-form-pdf-to-album-using-flow-admin-oriented)
* [Import Form PDF as Content Document using Flow (Admin-Oriented)](/forms/form-pdf-configuration/import-form-pdf-as-content-document-using-flow-admin-oriented)

### Form Mobile Integration

* [Integration of SharinPix Form with SFS App using App Extension](/forms/form-mobile-integration/integration-of-sharinpix-form-with-sfs-app-using-app-extension)
* [Launching a Form on the mobile app (link syntax)](/forms/form-mobile-integration/sharinpix-form-universal-link-syntax-and-parameters)


# Welcome to SharinPix Form

SharinPix Form offers the capability of asking users questions in a structured way on the field, including asking them to capture or fill out information in a visual way.

For example, you can ask a technician in the field to fill out a name, a phone number, or a serial number, but also to document any questions with notes, photos, Videos, scanned documents, and personalised sketches (supporting all the visual features for which SharinPix has been known for years).

All that working fully offline!

You can learn more [here](/forms/overview-and-getting-started/sharinpix-forms), or you can just read further below for a quick overview.

{% hint style="success" %}
Currently we offer a **free form implementation as part of the SharinPix Form 14-Day trial**. Just reach out to us here to ask for this: [Ask SharinPix For a FREE Form Implementation](mailto:sales@sharinpix.com?subject=FREE%20Form%20Implementation%20as%20part%20of%20FREE%20TRIAL)
{% endhint %}

## How it works?

<figure><img src="/files/77nsRBVvJ5jvv99polii" alt=""><figcaption></figcaption></figure>

Everything starts with a [Form template,](/forms/form-elements/sharinpix-form-template-editor) which can be edited to build and optimize the form as it will be used by field users (learn more about the [SharinPix Form Template Builder here](/forms/form-elements/sharinpix-form-template-editor)).

This Form template is then saved under a specific name. It can be associated with an action triggered by a Salesforce user or even provided as a link to external users without Salesforce access.

This action or link, once clicked, opens the SharinPix mobile app to run the form in an offline mode (read more about [SharinPix Form Launcher](/documentation/lightning-web-component/sharinpix-form-launcher) and SharinPix Form Links here).

Once filled, this form can be submitted by the field user and will be uploaded in the background or instantaneously (provided you have a mobile data connection at the time of submission).

Once the upload is finalized (depending on the length of the form and/or the number of media associated with it, it can take seconds or minutes to load), it will appear in Salesforce as a SharinPix Form Response.

A configuration can be added to associate a Form Response to the parent from which it must be started, so you can have, for example, multiple Inspection forms associated with a specific property (the name of this configuration is the [SharinPix Form Response Sync Setting](/forms/salesforce-integration/sharinpix-form-response/setup-custom-lookup-for-sharinpix-form-response)).

The Form Response gives access to the Form Data either visually (so the desktop user can see the form in the same way it has been filled by the field user), in PDF format (a PDF can be automatically generated to reflect the form data so it can be shared with external users), or as an Answers record and field in Salesforce (so as an admin, you can apply any Salesforce logic, automation, query, report, or view it).

## SharinPix Form Template

From the [SharinPix Form Templates](/forms/form-elements/sharinpix-form-template-editor) tab, you can create a Form template by adding any desired elements to it. The elements can be either a decoration (Title, description, visual guidance), a question (asking for some values to be picked or filled out) or even a visual action (capture photos, videos, sketching, and more).

The Form template can be previewed and tested (but for the photo/video capture) directly from there.

<figure><img src="/files/JsaLIX93WAmWkwxPFM7w" alt=""><figcaption></figcaption></figure>

## SharinPix Form Launcher or Link

A component (name [SharinPix Form Launcher](/documentation/lightning-web-component/sharinpix-form-launcher)) can be used on Salesforce mobile app to trigger the associated SharinPix Form from the mobile. This component can be added to any Record Page or Flow Screen on that purpose.

The SharinPix Form can also be exposed as a link, which can be used either on Salesforce Field Service (as a flow action or an app extension) or provided through any means (WhatsApp, text, email, agenda entries, and more) so that any external users can open the SharinPix form associated with it, fill it out, and update the right record in Salesforce.

If the [SharinPix mobile App](/documentation/mobile-app/where-to-find-the-sharinpix-mobile-app) is not installed prior to trigger any of those actions, the user will be prompted to install it from AppStore or GooglePlay (no extra fees needed there).

## SharinPix Form Response

The SharinPix Form Response is the container of all the submitted form data.

It gets a summary of the response as provided by the user, which can be quickly accessed to view the answer to any questions.

It is also available as a view-only version and can be printed out as a personalised PDF by the provided SharinPix automation.

Answers also exist as SharinPix Answers records related to the Form Response, to parse with Salesforce logic and are available for any Salesforce implementation.

If you have implemented the SharinPix Form Response Sync Setting, the SharinPix Form Response will be associated automatically as a related list of the parent record from which it has been triggered.


# SharinPix Form

## Overview

{% hint style="info" %}
SharinPix Form is a powerful way to capture, organize, and manage data within Salesforce, even when offline. By leveraging intuitive, customizable forms, organizations can streamline data collection processes, improve record management, and enhance visual documentation. These forms are designed to work seamlessly with any Salesforce objects and can also integrate media such as images, videos, scanned documents, 3D Twin, personalised sketches, signatures and much more to enrich the captured data.
{% endhint %}

## SharinPix Forms Salesforce Data Model

![](/files/7WfVyyAmdNngN0GQx2Nr)

The key objects that make up the form structure include:

* **Parent Object/Record:**\
  This is the Salesforce Record where the [SharinPix Form Launcher](/documentation/lightning-web-component/sharinpix-form-launcher) is configured, for example, an Account Record where the Form will be launched from.
* **Form Template:**\
  This is the primary step to define the overall layout and metadata for a form. It is created using the [SharinPix Form Template Editor](/forms/form-elements/sharinpix-form-template-editor) and contains essential information like the form's name, description, list of questions and actions as well as configuration settings.\
  A Form Template is compound by a list of [Form Elements](/forms/form-elements/sharinpix-form-template-editor). This Elements can be either a decoration (Title, Description, guidance), a question (with a specific UI to enter values) or an action (which open a camera to take pictures, permits to sketch a specific context, to scan documents, ...).
* **Form Response:**\
  Once a form is deployed and filled out, each submission is captured as a form response. This object not only stores the respondent's answers but also the questions presented, ensuring that both questions and answers are retained for future reference and reporting. It offers as well a quick access to the global form information through either a visual representation, a generated PDF or a list of related Answers records.
* **Form In Progress:**\
  When a form is saved, it will create a [SharinPix Form In Progress](/forms/salesforce-integration/sharinpix-form-in-progress) object on Salesforce. This object does not create Form Answer records because it is not a form that has been submitted. The Form In Progress Record contains the SharinPix Form In Progress LWC that allows the user to continue filling, saving and submitting the form. Once the form is submitted, the Form In Progress Record is converted into a Form Response Record.
* **Form Answer:**\
  When a form is submitted, a SharinPix Form Answer record is created for each Form Question and it is associated with the appropriate SharinPix Form Response object. It contains the answer metadata and value which can be used in any custom implementation afterwards.

## Key Benefits

* **Built for Salesforce:** SharinPix Form is designed to work natively within Salesforce.
* **External Access:** SharinPix Forms can also be accessed outside Salesforce using a link.
* **Admin Friendly:** Enables Salesforce admins to create and manage forms easily using standard Salesforce features.
* **Seamless Media Integration:** Combines images and other media directly within forms for richer data capture.
* **Native Data Handling:** Forms, responses, and media are stored as native Salesforce objects.
* **Enhanced workflows:** Supports standard Salesforce automation, reporting, and workflows.
* **Visual And Data Synergy:** Allows visual documentation to complement traditional form data collection.


# SharinPix Form Offline Usage

## Overview

{% hint style="info" %}
SharinPix Form Offline Usage allows field users to complete forms without an internet connection. To make this possible, each form template must be opened once while online so it is saved (primed) to the device. After this one-time step, the form can be opened, filled out, and submitted completely offline. When the device reconnects to the internet, the completed form is automatically synced back to Salesforce and attached to the correct Salesforce Object.

**Assumption:** This guide assumes that the integration of SharinPix Form with the Salesforce Field Service (SFS/FSL) mobile app **is already set up** in your org (App Extension, token field, etc.). If you still need to do that setup, follow this guide first: [*Integration of SharinPix Form with SFS (FSL) App using App Extension*](/forms/form-mobile-integration/integration-of-sharinpix-form-with-sfs-app-using-app-extension)
{% endhint %}

## Prerequisites

{% hint style="warning" %}
Before using SharinPix Form Offline Usage, ensure the following:

* The **SFS (FSL) integration with SharinPix Form is already in place** (see link in Overview).
* The **Salesforce Field Service Mobile App** is installed on the device.
* The **SharinPix Mobile App** is installed.
* At least one **form template** has been saved on your Salesforce Org.
* The device has an **internet connection for the very first opening** of each form (to save it to the device).
  {% endhint %}

## Getting Started

### Priming a Form for Offline Use (one-time per device & per Form template)

1. Connect the device to the **internet**.
2. Open the relevant **Work Order** (or any other record) in the Field Service Mobile App.
3. Tap the action that opens the **SharinPix Form** (from the App Extension).
4. When the form loads, you can close it. The form is now **saved** (primed) on the device.
5. From now on, this form can be used **offline** on this device.

{% hint style="warning" %}
**When to re‑prime?**

If the form template is updated later on, open it **once online** again to refresh the saved version on the device.
{% endhint %}

## Error Message

The screenshot below illustrates the error message that appears when attempting to open a SharinPix Form in the mobile app without having completed the priming step beforehand.

![](/files/qXfxWIzNQ4MDTxa3ixVC)


# Generate Forms with AI

This document explains how to use the built-in AI feature in the SharinPix Form Template Builder to generate forms. You can use the AI chat interface to describe the form you want with a prompt, or upload a sample file, such as an image or PDF, from which the form can be generated.

You can generate a form by entering a prompt in the AI chat interface and optionally uploading sample files such as images or PDFs. The AI then uses that input to generate an initial draft of the form.

<figure><img src="/files/bgLmCwJLnkEHP279jyjA" alt=""><figcaption></figcaption></figure>

### How it works

1. Click on "Work with AI".
2. Enter a short description of the form you want.
3. Attach images or PDF files if you have them.
4. Generate the form.
5. Review and update the result if needed.

### Example prompt

> Create a vendor registration form based on the attached PDF.\
> Keep the same sections and fields, use clear labels, and include the checkboxes and text areas as form fields.\
> Mark the required fields as mandatory.

### Example PDF

<figure><img src="/files/UcGB3fxp0EW1EFtZ3ji9" alt=""><figcaption></figcaption></figure>

### Example output

<figure><img src="/files/DN8V8novPHm1oCQbutFS" alt=""><figcaption></figcaption></figure>

{% hint style="warning" %}
**Note:**

* The generated form is a draft.
* Review the form before using it.
* Clear prompts and clear files usually give better results.
  {% endhint %}

{% hint style="info" %}
This feature uses **OpenAI**. If you would like to use another service or model, please contact **<support@sharinpix.com>**.
{% endhint %}


# Sample Forms

**Visual Data. Seamless Workflow. Offline Ready.**

SharinPix Form combines the structure of a standard form with the power of visual documentation, allowing users to snap photos, sketch on them, and fill in technical data even when offline. Once a form is submitted, SharinPix transforms raw inspection data and images into a comprehensive report upon submission.

**Experience it yourself:** Select a real-world use case below to fill out a live form.

### Tractor Delivery Form <a href="#tractor" id="tractor"></a>

<figure><img src="/files/8z3ChFWYiZpNbMRNuVH8" alt=""><figcaption></figcaption></figure>

As an inspector using the **Tractor Delivery Form**, you will input vehicle specifications, perform a status check on individual tractor parts, and validate that all mechanical systems are functioning correctly before dispatching tractors for delivery.

[Open the Tractor Delivery Form on **browser**](https://app.sharinpix.com/open#token=eyJhbGciOiJIUzI1NiJ9.eyJwYXRoIjoiL2Zvcm1zIiwiZm9ybV90ZW1wbGF0ZV9yZWNvcmRfaWQiOiJhMERhbTAwMDAxWXNxSE5FQVoiLCJmb3JtX3RlbXBsYXRlX3VybCI6Imh0dHBzOi8vYXBwLnNoYXJpbnBpeC5jb20vby9mMjU1Ni9mb3JtL3RlbXBsYXRlcy9jZmE0ZjY4Mi1jMDNjLTQwMDktYTg3Yi0yMzMwNjE0ZWM3N2QiLCJhbGJ1bV9pZCI6ImEwRGFtMDAwMDFZc3FITkVBWiIsImltYWdlX3VwbG9hZCI6dHJ1ZSwiaXNzIjoiODFjNTA4M2EtOWUyYy00NzgxLTk3YmUtOTM4YjFiMmE5MWM1In0.D2Mw9KCJ9m3N6FHSp-g-NbgXbLui-hsv30c4nLezYlw)

[Open the Tractor Delivery Form on **mobile app**](https://app.sharinpix.com/native_app/form?token=eyJhbGciOiJIUzI1NiJ9.eyJhbGJ1bV9pZCI6ImEwRGFtMDAwMDFZc3FITkVBWiIsInRlbXBsYXRlX3VybCI6Imh0dHBzOi8vYXBwLnNoYXJpbnBpeC5jb20vby9mMjU1Ni9mb3JtL3RlbXBsYXRlcy9jZmE0ZjY4Mi1jMDNjLTQwMDktYTg3Yi0yMzMwNjE0ZWM3N2QiLCJ0ZW1wbGF0ZV9pZCI6ImEwRGFtMDAwMDFZc3FITkVBWiIsImlzcyI6IjgxYzUwODNhLTllMmMtNDc4MS05N2JlLTkzOGIxYjJhOTFjNSJ9.bB7yWJPZ1RZJZ6UlD4ylcIbtJRMoQcWlw9luqVxP2nE\&form=https%3A%2F%2Fapp.sharinpix.com%2Fo%2Ff2556%2Fform%2Ftemplates%2Fcfa4f682-c03c-4009-a87b-2330614ec77d.json)

#### Report <a href="#reports" id="reports"></a>

Here is the generated PDF report showing the complete audit trail of the tractor inspection that was performed, containing the inspection data and photos.

[Tractor Delivery Form Report](https://p.sharinpix.com/3/e8bf854/YXBwLnNoYXJpbnBpeC5jb20vby9mMjU1Ni9mb3JtL3Jlc3BvbnNlcy80MWIwNmNhMy05NzI4LTRhY2UtYWI3Zi01NzlhN2MxNjZmMDIvcGRmP3M9NDM0ZTllYTc2ZjE/Tractor%20Delivery.pdf?dl=0)

#### Form Response <a href="#reports" id="reports"></a>

View the completed inspection form in read-only mode, including the answers provided, related photos, and a link to the generated PDF report.

{% embed url="<https://files.gitbook.com/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FrRD1Xcn9HtKcyfQ9Ghyk%2Fuploads%2FoxExkzqW0WhzC1cU9Iyp%2FEast%20Coast%20Tractor.mp4?alt=media&token=86ad4d0f-0476-48dd-90d3-e5ccce508dc2>" %}

### Property Rental (Move-In/Move-Out) <a href="#property-rental-move-in-move-out" id="property-rental-move-in-move-out"></a>

<figure><img src="/files/NOeZjjEHu1lswJdBgv5u" alt=""><figcaption></figcaption></figure>

A Move-In inspection has already been completed for a property, recording the property details and the original condition of the rooms and equipment.

Perform the **Move-Out inspection**.

As you open the form, notice how the original Move-In details appear automatically. This allows you to instantly compare the current state against the original condition. If you find a damaged equipment, you are requested to add a photo and watch the total damage cost being calculated automatically.

[Open the Property Rental Form on **browser**](https://app.sharinpix.com/open#token=eyJhbGciOiJIUzI1NiJ9.eyJwYXRoIjoiL2Zvcm1zIiwiZm9ybV90ZW1wbGF0ZV9yZWNvcmRfaWQiOiJhMERhbTAwMDAxWjJGN3pFQUYiLCJmb3JtX3RlbXBsYXRlX3VybCI6Imh0dHBzOi8vYXBwLnNoYXJpbnBpeC5jb20vby9mMjU1Ni9mb3JtL3RlbXBsYXRlcy9iMmI4MmNjOC1lMWM0LTQyZWItYjJhNi1jM2UyYWIzODdkNTQiLCJhbGJ1bV9pZCI6ImEwRGFtMDAwMDFaMkY3ekVBRiIsImltYWdlX3VwbG9hZCI6dHJ1ZSwiaXNzIjoiODFjNTA4M2EtOWUyYy00NzgxLTk3YmUtOTM4YjFiMmE5MWM1In0.Rp3Pw_XguqdgIuBQv4F2kuDU1GcCUTYQOZclabV36Ps\&ref_response_url=https://app.sharinpix.com/o/f2556/form/responses/1d9de2ec-94b6-468f-a0d8-c458f1a07c50?s=0a653e06020)

[Open the Property Rental Form on **mobile app**](https://app.sharinpix.com/native_app/form?token=eyJhbGciOiJIUzI1NiJ9.eyJhbGJ1bV9pZCI6ImEwRGFtMDAwMDFaMkY3ekVBRiIsInRlbXBsYXRlX3VybCI6Imh0dHBzOi8vYXBwLnNoYXJpbnBpeC5jb20vby9mMjU1Ni9mb3JtL3RlbXBsYXRlcy9iMmI4MmNjOC1lMWM0LTQyZWItYjJhNi1jM2UyYWIzODdkNTQiLCJ0ZW1wbGF0ZV9pZCI6ImEwRGFtMDAwMDFaMkY3ekVBRiIsImlzcyI6IjgxYzUwODNhLTllMmMtNDc4MS05N2JlLTkzOGIxYjJhOTFjNSJ9.5m7WXiSWRuLE9uoWhP3sAoF8sgjo_fMuclN2fyMwCzg\&form=https%3A%2F%2Fapp.sharinpix.com%2Fo%2Ff2556%2Fform%2Ftemplates%2Fb2b82cc8-e1c4-42eb-b2a6-c3e2ab387d54.json\&form_online_mode=true\&ref_response_url=https://app.sharinpix.com/o/f2556/form/responses/1d9de2ec-94b6-468f-a0d8-c458f1a07c50?s=0a653e06020)

#### Reports <a href="#reports_1" id="reports_1"></a>

View your inspection data, annotated photos, and signatures into professional Move-In and Move-Out reports. Our Comparative Report automatically highlights the differences between the start and end of a tenancy.

[East Coast Rental Move In Report](https://p.sharinpix.com/3/ee5e7eb/YXBwLnNoYXJpbnBpeC5jb20vby9mMjU1Ni9mb3JtL3Jlc3BvbnNlcy8xZDlkZTJlYy05NGI2LTQ2OGYtYTBkOC1jNDU4ZjFhMDdjNTAvcGRmP3M9MGE2NTNlMDYwMjA/East%20Coast%20Rental.pdf?dl=0)

[East Coast Rental Move Out Report](https://p.sharinpix.com/3/cb1202d/YXBwLnNoYXJpbnBpeC5jb20vaW1hZ2VzLzNmMWYzZmJhLWRjMDItNDY5ZS05ODA5LWVkMjFkZmEzZDg4NC90aHVtYm5haWxzL29yaWdpbmFsLTFjN2IzZjgxODkwLmpwZw/east-coast-rental-move-out.pdf?dl=0)

[East Coast Rental Comparative Report](https://p.sharinpix.com/3/b5ca7db/YXBwLnNoYXJpbnBpeC5jb20vaW1hZ2VzL2JjYWI4ZTljLWU3ZTMtNGZiOC1hMjY4LTI2NDk2ODYwNjQ0Yy90aHVtYm5haWxzL29yaWdpbmFsLWEyZTVkM2I3OGJmLmpwZw/east-coast-rental.pdf?dl=0)

#### Form Response <a href="#east-coast-property-inspection" id="east-coast-property-inspection"></a>

View the submitted move-out form in read-only mode, including the answers provided, related photos, a link to the generated PDF report, and a link to the comparative PDF to review the move-in and move-out forms side by side.

{% embed url="<https://files.gitbook.com/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FrRD1Xcn9HtKcyfQ9Ghyk%2Fuploads%2Fqh1fKni9C9IyKWo8bGXg%2FEast%20Coast%20Property%20Rental%20Moving%20Out.mp4?alt=media&token=eb1b0211-340d-40ec-8462-1c7206951c09>" %}

### East Coast Property Inspection <a href="#east-coast-property-inspection" id="east-coast-property-inspection"></a>

<figure><img src="/files/0urAJ7nU3XKwoBETHmWf" alt=""><figcaption></figcaption></figure>

Conduct the inspection as a property manager. Rooms can be added from a predefined list with the flexibility to add new ones while rating conditions, attaching photos, and adding comments. You will also populate room fixtures and rate their status (Good, Fair, Poor).

[Open the Property Inspection Form on **browser**](https://app.sharinpix.com/open#token=eyJhbGciOiJIUzI1NiJ9.eyJwYXRoIjoiL2Zvcm1zIiwiZm9ybV90ZW1wbGF0ZV9yZWNvcmRfaWQiOiJhMERhbTAwMDAxWkFuSmNFQUwiLCJmb3JtX3RlbXBsYXRlX3VybCI6Imh0dHBzOi8vYXBwLnNoYXJpbnBpeC5jb20vby9mMjU1Ni9mb3JtL3RlbXBsYXRlcy80NDYwZTFhYi05MDQ2LTQ2MmYtODdkNS02YjE0NTJjMjQ1NTgiLCJhbGJ1bV9pZCI6ImEwRGFtMDAwMDFaQW5KY0VBTCIsImltYWdlX3VwbG9hZCI6dHJ1ZSwiaXNzIjoiODFjNTA4M2EtOWUyYy00NzgxLTk3YmUtOTM4YjFiMmE5MWM1In0.k-8qmxl9GgAijCl-7HfTI_ez6LDj3IPFWvWdy5nUI2o)

[Open the Property Inspection Form on **mobile app**](https://app.sharinpix.com/native_app/form?token=eyJhbGciOiJIUzI1NiJ9.eyJhbGJ1bV9pZCI6ImEwRGFtMDAwMDFaQW5KY0VBTCIsInRlbXBsYXRlX3VybCI6Imh0dHBzOi8vYXBwLnNoYXJpbnBpeC5jb20vby9mMjU1Ni9mb3JtL3RlbXBsYXRlcy84NDMwY2UzMi0wNTAwLTQxODQtYjRlZS02NWE4ZmZmOGQ1NzMiLCJ0ZW1wbGF0ZV9pZCI6ImEwRGFtMDAwMDFaQW5KY0VBTCIsImlzcyI6IjgxYzUwODNhLTllMmMtNDc4MS05N2JlLTkzOGIxYjJhOTFjNSJ9.hMdV85wHq3wd4kCzUuYjWYWt1C9_wzq71rGrfnwQY4I\&form=https%3A%2F%2Fapp.sharinpix.com%2Fo%2Ff2556%2Fform%2Ftemplates%2F8430ce32-0500-4184-b4ee-65a8fff8d573.json\&form_online_mode=true)

#### Report <a href="#reports_2" id="reports_2"></a>

Review the consolidated inspection data, organized by room. This report details all fixture statuses, condition ratings, and photographic evidence collected during the inspection.

[East Coast Property Inspection Report](https://p.sharinpix.com/3/3ec6bb0/YXBwLnNoYXJpbnBpeC5jb20vby9mMjU1Ni9mb3JtL3Jlc3BvbnNlcy9hYWI2NmUzMi0wMmNmLTRiYjktYWNmOS1iZDcxZWQwMGVjYmIvcGRmP3M9ODVjZmE4ZjMzYzQ/East%20Coast%20Property%20Inspection.pdf?dl=0)

#### Form Response <a href="#reports_2" id="reports_2"></a>

Review the completed inspection form in read-only mode, including the answers provided, related photos, and the link to the generated PDF report.

{% embed url="<https://files.gitbook.com/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FrRD1Xcn9HtKcyfQ9Ghyk%2Fuploads%2F4oImJ7WbF0vyDyMSZmdn%2FEast%20Coast%20Property%20Inspection.mp4?alt=media&token=cd67a18d-1026-4784-8367-524d084429f6>" %}

### Roof Guard Property Roofing Inspection <a href="#damage-inspection" id="damage-inspection"></a>

<figure><img src="/files/nnlRLZeK2dk1xAONas9h" alt=""><figcaption></figcaption></figure>

Conduct the inspection with a form enriched with features such as tables and repeated sections to log each damage. You can also review photos from previous inspections and use a plan to sketch the exact location of damages.

[Open the Roofing Inspection Form on the browser](https://app.sharinpix.com/open#token=eyJhbGciOiJIUzI1NiJ9.eyJwYXRoIjoiL2Zvcm1zIiwiZm9ybV90ZW1wbGF0ZV9yZWNvcmRfaWQiOiJhMERhbTAwMDAxYzBsRFJFQVkiLCJmb3JtX3RlbXBsYXRlX3VybCI6Imh0dHBzOi8vYXBwLnNoYXJpbnBpeC5jb20vby9mMjU1Ni9mb3JtL3RlbXBsYXRlcy9lMTNkY2ZhNi05NDA3LTQ5NmItYTVjMS1kNzU2NDUyZjhkZjMiLCJhbGJ1bV9pZCI6ImEwRGFtMDAwMDFjMGxEUkVBWSIsImltYWdlX3VwbG9hZCI6dHJ1ZSwiaXNzIjoiODFjNTA4M2EtOWUyYy00NzgxLTk3YmUtOTM4YjFiMmE5MWM1In0.KqBfCNe68YWOvr2YrNoEtN0mqzCJck3Yvlcoo-kVuo8)

[Open the Roofing Inspection Form on mobile app](https://app.sharinpix.com/native_app/form?token=eyJhbGciOiJIUzI1NiJ9.eyJhbGJ1bV9pZCI6ImEwRGFtMDAwMDFjMGxEUkVBWSIsInRlbXBsYXRlX3VybCI6Imh0dHBzOi8vYXBwLnNoYXJpbnBpeC5jb20vby9mMjU1Ni9mb3JtL3RlbXBsYXRlcy9lMTNkY2ZhNi05NDA3LTQ5NmItYTVjMS1kNzU2NDUyZjhkZjMiLCJ0ZW1wbGF0ZV9pZCI6ImEwRGFtMDAwMDFjMGxEUkVBWSIsImlzcyI6IjgxYzUwODNhLTllMmMtNDc4MS05N2JlLTkzOGIxYjJhOTFjNSJ9.HdE37ChOjSxVQM5qPHsMzbBD8NFBcicg3K9fvxWGiMU\&form=https%3A%2F%2Fapp.sharinpix.com%2Fo%2Ff2556%2Fform%2Ftemplates%2Fe13dcfa6-9407-496b-a5c1-d756452f8df3.json)

#### Report <a href="#reports_3" id="reports_3"></a>

Review the inspection data, including the logged damages, attached photos, and the sketch showing the exact location of each issue.

[Roof Guard Roofing Inspection Report](https://p.sharinpix.com/3/6ec392c/YXBwLnNoYXJpbnBpeC5jb20vby9mMjU1Ni9mb3JtL3Jlc3BvbnNlcy8xMzg0YmI2Yy1iZjUxLTRhNDQtYjRkNi0xZmVhMjI4Mjg2MTQvcGRmP3M9MjJkNmRmODg5OGI/Roof-Inspection-Form.pdf?dl=0)

#### Form Response

Review the completed roofing inspection in read-only mode, including roof details, logged damages, related photos, the roof plan sketch, and the link to the generated PDF report.

{% embed url="<https://files.gitbook.com/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FrRD1Xcn9HtKcyfQ9Ghyk%2Fuploads%2FOuFaK7jabPtJvHobeqJ1%2FRoofGuard%20Roofing%20FR.mp4?alt=media&token=14128e65-93a2-4587-a21b-c5f5c7c5331b>" %}

### Learn how to build a SharinPix Form <a href="#learn-more-about-sharinpix" id="learn-more-about-sharinpix"></a>

<figure><img src="/files/QJzQFwvOApCVOvTTfTnu" alt=""><figcaption></figcaption></figure>

Watch this short video to discover how easily you can design a form using the SharinPix Form Builder's intuitive drag-and-drop template editor.

{% embed url="<https://files.gitbook.com/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FrRD1Xcn9HtKcyfQ9Ghyk%2Fuploads%2FdeUxen7X1jV5a2UarjGU%2FForm%20Builder.mp4?alt=media&token=bb704178-9c91-4122-a21b-7660898fd61f>" %}

Open the [generated registration form](https://app.sharinpix.com/open#token=eyJhbGciOiJIUzI1NiJ9.eyJwYXRoIjoiL2Zvcm1zIiwiZm9ybV90ZW1wbGF0ZV9yZWNvcmRfaWQiOiJhMERhbTAwMDAxY0xlNWhFQUMiLCJmb3JtX3RlbXBsYXRlX3VybCI6Imh0dHBzOi8vYXBwLnNoYXJpbnBpeC5jb20vby9mMjU1Ni9mb3JtL3RlbXBsYXRlcy9hMDM3MDJmYi1mNjViLTQ5NWEtOWJmOS02NDFkYWFhNzhlZGYiLCJhbGJ1bV9pZCI6ImEwRGFtMDAwMDFjTGU1aEVBQyIsImltYWdlX3VwbG9hZCI6dHJ1ZSwiaXNzIjoiODFjNTA4M2EtOWUyYy00NzgxLTk3YmUtOTM4YjFiMmE5MWM1In0.i0kpuk7QjIdTsZ8QYTQM8XU3QU5-Lixh2FpzIhhgqsk) to see how the finished result looks.

#### SharinPix form features

Try [this form](https://app.sharinpix.com/open#token=eyJhbGciOiJIUzI1NiJ9.eyJwYXRoIjoiL2Zvcm1zIiwiZm9ybV90ZW1wbGF0ZV9yZWNvcmRfaWQiOiJhMERhbTAwMDAxY0g3OXhFQUMiLCJmb3JtX3RlbXBsYXRlX3VybCI6Imh0dHBzOi8vYXBwLnNoYXJpbnBpeC5jb20vby9mMjU1Ni9mb3JtL3RlbXBsYXRlcy8wMzc5ZDQwNi03YWQzLTQxMmEtODFkOS1hMDkyMmQ5MjAxMGMiLCJhbGJ1bV9pZCI6ImEwRGFtMDAwMDFjSDc5eEVBQyIsImltYWdlX3VwbG9hZCI6dHJ1ZSwiaXNzIjoiODFjNTA4M2EtOWUyYy00NzgxLTk3YmUtOTM4YjFiMmE5MWM1In0.EcNDl0L_s7glhrItwJwHnQEFQmQVVHJn7Mdv4FvAnZU) to experience the versatile capabilities of SharinPix Smart Forms, where you can test everything from standard text and date fields to advanced AI-powered "Magic Fill" for automatic data extraction from images. See how the form utilizes formulas and conditional visibility to react to your input in real-time, while testing how prefilled data from Salesforce and default values instantly populate your fields to accelerate the workflow. Interact with the sketch and signature components to see exactly how high-quality data is captured.

### Learn more about SharinPix <a href="#learn-more-about-sharinpix" id="learn-more-about-sharinpix"></a>

{% hint style="success" %}
To schedule a demo, please reach out to Jean-Michel via email: [Schedule my Demo](mailto:jmmougeolle@sharinpix.com)

To dive deeper, check out more of our documentation: [Welcome to SharinPix Form](/forms/overview-and-getting-started/welcome-to-sharinpix-forms)

Watch videos, try out our Learn SharinPix org, or chat live with one of our Visual Experts on the AppExchange: [SharinPix on the AppExchange](https://sforce.co/3Y8jplI)
{% endhint %}

<figure><img src="/files/mYV4L0FhNy4cLqskDCTl" alt=""><figcaption></figcaption></figure>


# SharinPix Form Template Editor

## Overview

{% hint style="info" %}
The SharinPix Form Template Editor is a dedicated tool within Salesforce that empowers users to create, edit, and manage form templates. With an intuitive drag-and-drop interface, the editor simplifies the form-building process by allowing users to add various field types, integrate media capture capabilities, preview their forms in real-time, and manage form template versions as each form evolves.

This documentation covers:

* [Form Elements](#form-elements)
* [Form Features](#form-features)
* [Work with Form Template Versions](#work-with-form-template-versions)
* [Demo - Constructing an Air Conditioning Inspection Form](#demo-constructing-an-air-conditioning-inspection-form)
* [Integration with SharinPix Mobile Form Launcher](#integration-with-sharinpix-mobile-form-launcher)
* [Integration with Salesforce Field Service](#integration-with-salesforce-field-service)
  {% endhint %}

![](/files/G2m4UXQfWKlyHCNfXeMN)

{% hint style="warning" %}
**Prerequisites:**

Before using the **SharinPix Form Template Editor**, ensure the following:

* Users must have the **SharinPix Forms Admin** permission set assigned.
* You have the **latest** **SharinPix Package Version** Installed. Refer to [*this documentation*](/faqs/how-to-update-sharinpix-package-from-the-appexchange) to update your package.
  {% endhint %}

## Getting Started

## Form Elements

Users can add the following types of elements to their forms:

![](/files/mkp5xbgHicRxNVnWeVAp)

### Basic Elements

| Element                                                                                                            | Description                                                                                                                                                                               |
| ------------------------------------------------------------------------------------------------------------------ | ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| **Title**                                                                                                          | Adds a section title to the form.                                                                                                                                                         |
| **Paragraph**                                                                                                      | Inserts descriptive text or instructions in the form.                                                                                                                                     |
| **Rich Text**                                                                                                      | Adds formatted text, including bold, italics, lists, and links.                                                                                                                           |
| [**Section**](/forms/form-sections-and-repeated-sections/sharinpix-form-sections-and-repeated-sections)            | Inserts a section divider to group related form elements.                                                                                                                                 |
| [**Repeated Section**](/forms/form-sections-and-repeated-sections/sharinpix-form-sections-and-repeated-sections-1) | Similar to a Section, but allows users to dynamically add multiple instances of the same group of elements by pressing a **“+” button**. Useful when repeating details for multiple items |
| [**Table**](/forms/form-elements/form-features-table)                                                              | Displays repeated-section questions as columns in a table.                                                                                                                                |
| [**IFrame**](/forms/form-elements/sharinpix-form-sections-and-repeated-sections)                                   | Embeds a web page in the form.                                                                                                                                                            |
| **Spacer**                                                                                                         | Adds layout spacing and can insert a page break in PDFs.                                                                                                                                  |

### Input Elements

| Element                                                                            | Description                                                                                                                                                                                                                                                                                                                                                                                                                             |
| ---------------------------------------------------------------------------------- | --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| **Text**                                                                           | Single-line text input for short entries like names or email addresses                                                                                                                                                                                                                                                                                                                                                                  |
| **Number**                                                                         | <p>Input field that only accepts numerical values, with optional min/max limits</p><p><strong>Constraint</strong>: Number entries support a maximum of 15 total digits. This precision includes all numerical digits across both integers and decimals.</p>                                                                                                                                                                             |
| **Date**                                                                           | Date picker for selecting calendar dates.                                                                                                                                                                                                                                                                                                                                                                                               |
| **Radio**                                                                          | Group of buttons that allow selecting one option from a group of choices                                                                                                                                                                                                                                                                                                                                                                |
| **Textarea**                                                                       | Multi-line text input field for longer content like comments or descriptions                                                                                                                                                                                                                                                                                                                                                            |
| **Checkbox**                                                                       | Toggle input for making yes/no or true/false selections                                                                                                                                                                                                                                                                                                                                                                                 |
| **Select**                                                                         | Dropdown menu for choosing a single option from a list.                                                                                                                                                                                                                                                                                                                                                                                 |
| **Multi-Select**                                                                   | <p>Dropdown menu for choosing multiple options from a list.</p><p><strong>Note</strong>: Selected values are concatenated into a single string. Due to Salesforce platform limits, any characters beyond the 255-character limit are automatically trimmed.</p>                                                                                                                                                                         |
| [**Formula**](/forms/form-elements/sharinpix-form-formula-functions-and-operators) | <p>Displays calculated values or dynamic text based on formulas. Supports conditional logic, field references, and operations (e.g., IF statements, math, and logical operators). Useful for read-only fields, dynamic feedback, and advanced form logic.<br><br><strong>Constraint</strong>: For numerical calculations, the same 15-digit precision applies as with Number fields. Results exceeding this limit may be truncated.</p> |
| Rich Text Area                                                                     | Multi-line text input field for entering longer text with basic formatting options, such as font size, text color, bold, italic, underline, alignment, numbered lists, and bullet lists. Useful for formatted comments, descriptions, notes, instructions, or any content that needs more structure than plain text.                                                                                                                    |
| Signature                                                                          | <p>Use this field to sign the form.<br><br>Configure its alignment in the <a href="/pages/hRgakLDLpAFt3S58jL59#signature-alignment">PDF Signature Alignment</a> settings.</p>                                                                                                                                                                                                                                                           |
| Sketch                                                                             | <p>Use this sketch field to annotate an image.<br><br>This component can be configured to take the full width in a PDF.</p>                                                                                                                                                                                                                                                                                                             |

### Advanced Tab

| Feature                                  | Description                                                                                                                                                                  |
| ---------------------------------------- | ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| Value when reopening the form            | Controls data priority when the form is reopened. You can choose to retain the previous answer, reset it, or allow a new prefill from Salesforce or the URL to overwrite it. |
| Allow blank to clear field on Salesforce | When this setting is enabled, submitting an empty value in the input field will clear the existing data in the mapped Salesforce field.                                      |

### Global Setting

| Feature                           | Description                                                                                                                                                                                                                                                                                                                                                |
| --------------------------------- | ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| Form Header                       | Configure a customizable header for the form, which can include titles, logos, or instructions. This header will appear on all rendered forms and PDFs.                                                                                                                                                                                                    |
| Form Footer                       | Configure a footer to display at the bottom of the form or exported PDF. Useful for disclaimers, signatures, or company information.                                                                                                                                                                                                                       |
| Language Support                  | Forms can now be configured in multiple languages. Currently supported: **English** and **French**. This allows end-users to interact with the same form in their preferred language.                                                                                                                                                                      |
| Edit Theme                        | Configure the primary color used across the form. This updates key UI elements such as buttons, links, and sections. For setup steps, see [Form Features - Theme Customisation](/forms/form-elements/form-features-theme-customization).                                                                                                                   |
| Include hidden fields in Response | This setting determines whether the **SharinPix Form Answer records** are created in **Salesforce** for [**hidden**](/forms/form-elements/form-features-conditional-visibility) **Form Elements**. When enabled, Form Answer records are created for hidden elements and when disabled, they are ignored during the Form Answer record creation.           |
| Geolocation Capture               | <p>Configures the form to automatically record the user's GPS coordinates at specific stages. You can enable two distinct triggers</p><p>• <strong>On Form Start:</strong> Captures the location the moment the user opens the form.</p><p>• <strong>On Form Submit:</strong> Captures the location the moment the user successfully submits the form.</p> |

## Form Features

SharinPix Form Templates offer a range of features that enhance form behavior, data integrity, and user experience. These features can be configured for individual form elements as needed:

| **Feature**                                                                                        | Description                                                                                                                                                                                                                                                                                                                                                                                                                                                                                   |
| -------------------------------------------------------------------------------------------------- | --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| Required                                                                                           | Ensures that certain questions or input fields must be completed before the form can be submitted. When enabled, users will see a visual indicator (such as an asterisk) and receive a prompt if they attempt to submit the form without providing a value for these required fields. This feature helps enforce data completeness and ensures all necessary information is collected.                                                                                                        |
| [Prefilled](/forms/form-elements/form-features-default-or-prefill-values)                          | Allows specific form elements to be automatically populated with data pulled directly from Salesforce records. Prefilled fields can streamline the user experience, reduce manual data entry, and ensure consistency with existing Salesforce data. For example, a user's name, email, or other record details can be prefilled based on context.                                                                                                                                             |
| [Visibility (Conditional Display)](/forms/form-elements/form-features-conditional-visibility)      | Enables dynamic control over when a form element is shown or hidden based on the value of other fields or logical conditions (using formulas). This feature allows for more personalized and context-aware forms, showing users only the questions relevant to their responses or profile. For example, an additional comments field may appear only if a user selects "Other" as an option.                                                                                                  |
| [Magic Fill](/forms/form-elements/form-features-magic-fill)                                        | Leverages AI to automatically extract and fill in information from an uploaded image. When Magic Fill is enabled for a field, users can upload a photo (such as an ID card, invoice, or document) and the system will use image recognition to populate the relevant form fields. This reduces manual entry, minimizes errors, and speeds up the form-filling process.                                                                                                                        |
| Validation - [using Formulas](/forms/form-elements/sharinpix-form-formula-functions-and-operators) | Lets you define custom rules and logic to validate user input before form submission. Validation can be configured using [formulas](/forms/form-elements/sharinpix-form-formula-functions-and-operators) to check for specific criteria—such as number ranges, string patterns, or business rules. If a field does not meet the validation requirements, a custom error message can be shown, guiding the user to correct their input. This feature ensures higher data quality and accuracy. |

## Work with Form Template Versions

After building your form, use form template versions to manage future changes without creating a separate template.

A **Main Form Template** groups all versions of the same form and includes a dropdown for switching between them. When you click Save New Version for the first time, **Version 1** is created automatically.

Before a version is activated, any changes you make are saved to that version. Once the version is activated, saving further changes automatically creates a new version.

You can then review, test, and activate the new version when it is ready.

{% hint style="info" %}
Each version is stored as its own SharinPix Form Template record. Version records use the same name as the main template. Their `sharinpix__RecordType__c` value is `version`, and `sharinpix__VersionNumber__c` identifies the version number.
{% endhint %}

<figure><img src="/files/Nr0ENyth4qxEdNBJFqnA" alt=""><figcaption></figcaption></figure>

### Typical workflow

* Create a **Main Form Template**.
* Build the form and save it to create **Version 1**.
* Save any changes to update Version 1 before activation.
* Activate Version 1 when it is ready for use.
* Make and save a new change to create another version.
* Review and activate the new version when it is ready.

<figure><img src="/files/4eg6UEk7TBQLFmcu0LWC" alt=""><figcaption></figcaption></figure>

{% hint style="info" %}
Only the active version can be launched and submitted. Each Form Response stays linked to the version used for submission.
{% endhint %}

## Demo - Constructing an Air Conditioning Inspection Form

To use the **SharinPix Form Template Editor**, follow these steps:

Step 1: **Access the Form Template Editor**

* Open the Salesforce App Launcher.
* Search for **SharinPix Form Templates**.
* Click on the **SharinPix Form Templates** object.

Step 2: **Create a Main Form Template**

* Click the **New** button to create a new record.
* Fill in the **Form Template Name** and **Description** fields.
* Click **Save** to create the Main Form Template record.

![](/files/eqZM0tMKVOOqB0rzJDfN)

Step 3: **Using the Form Builder**

* Use the [**available components**](/forms/form-elements/sharinpix-form-template-editor#form-elements) to insert form elements such as text fields, checkboxes, and dropdowns.
* Arrange sections by dragging and dropping elements.

Step 4: **Saving, Activating, and Previewing the Form**

* When your form is ready, click **Save New Version** to create **Version 1**.
* Click **Activate** to make the form available for users to complete.
* Switch the **Use-Read** toggle to preview the PDF version of the form.

![](/files/oJEfgTAHuwwpZg4kZ617)

![](/files/fPSggCXm5MG5LhNWLxiz)

Step 5: **Managing Form Details**

* The **Details Tab** contains form metadata such as the template name and description.
* The **Related** tab includes:
  * For a **Main Form Template**, the Related tab shows its version templates, including each version number and activation status. It also shows Forms In Progress and Form Responses across all versions.
  * For a **Version Template**, the Related tab shows Forms In Progress, Form Responses, and Form Questions for that version. Form Questions are the components added to the version.

<figure><img src="/files/m8xxMp5AnJ4WzgQiBjmV" alt=""><figcaption></figcaption></figure>

{% hint style="success" %}
**Tips:**

* Frequently use the **Test** feature to verify the user experience.
* Keep forms concise to improve completion rates - using the [Section and Repeated Section elements](/forms/form-sections-and-repeated-sections/sharinpix-form-sections-and-repeated-sections) can help here!
  {% endhint %}

## Show SharinPix Form PDF Download Button On Submit

![](/files/XEd6DMOa2rIZCVBtBK4H)

Enable the "**Show PDF link on web form submission**" checkbox to display the button to download the submitted form response PDF as shown above.

{% hint style="warning" %}
**Note** :

This feature will only work in online mode.
{% endhint %}

## Integration with SharinPix Mobile Form Launcher

Form templates created with the **SharinPix Form Template Editor** can be linked with the [**SharinPix Mobile Form Launcher**](/documentation/lightning-web-component/sharinpix-form-launcher) component. This will allow forms to be filled in through the SharinPix Mobile App.

## Integration with Salesforce Field Service

Form templates created with **SharinPix Form Template Editor** can be launched on Salesforce Field Service via App Extension, where the form can be filled. Please follow the article below for more information on [**integrating SharinPix Form with SFS**](/forms/form-mobile-integration/integration-of-sharinpix-form-with-sfs-app-using-app-extension).

{% hint style="warning" %}
**Warning:**

You **cannot** create form templates using the SharinPix Form Template Editor **on mobile**.
{% endhint %}

{% hint style="success" %}
**Tips for working with Beta Features**

\
When using beta features, you may see the following error message in the SharinPix Mobile App: **Please refresh or update your application and verify that a valid form template is used.**

This typically occurs because the beta feature included in the form is not yet supported in your current mobile app version. In the template builder, these features are marked with: **This requires the latest version of the mobile app. Deployment in progress.**

Please keep the following in mind regarding deployment:

* **App Propagation**\
  The mentioned two-week window is the estimated time required for the new version to propagate globally across the App Store and Google Play Store.
* **Manual Updates**\
  Users do not have to wait for the automatic rollout. They can still go to the App Store or Play Store to update the app manually to gain immediate access to the new features.
* **Regional Delays**\
  If you do not see a new version available for download, it may be due to a distribution delay for your specific region. In these cases, the update should appear shortly as the stores finish their rollout.

Use caution when deploying new tools; ensure all users are up to date with the latest app version before activating these features in your templates to prevent service interruptions.
{% endhint %}


# Form Features - Default or Prefill Values

## Overview

{% hint style="info" %}
SharinPix Form Elements can be configured to automatically retrieve and display values from related Salesforce records. This prefill functionality allows dynamic population of form fields using data linked to the record from which the form is launched. The configuration is done directly within the [SharinPix Form Builder](/forms/form-elements/sharinpix-form-template-editor) and supports traversing up to five levels of related (lookup) records.

This document covers:

* [How to Configure Prefill in a Form Element](#how-to-configure-prefill-in-a-form-element)
* [Prefill Syntax and Examples](#prefill-syntax-and-examples)
* [Demo: Pre-Filling Values in a Fire Safety Inspection Form](#demo-pre-filling-values-in-a-fire-safety-inspection-form)
  {% endhint %}

{% hint style="warning" %}
**Prerequisite**

Before using this feature, ensure:

* Ensure that you are using the most recent SharinPix Package Version. Follow this document to [upgrade the SharinPix package](/faqs/how-to-update-sharinpix-package-from-the-appexchange)
* Users have the [SharinPix Forms Admin permission set](/documentation/access-and-security/sharinpix-permission-sets) assigned.
  {% endhint %}

## Getting Started

### How to Configure Prefill in a Form Element

To configure prefilling for a question in a SharinPix Form:

1. Open the **SharinPix Form Builder** from the relevant Form Template.
2. Select a **Question** element in the form.
3. Navigate to the **Advanced** tab of the question configuration.
4. Enter the appropriate **Salesforce Field API Name** into the *Field API name* field.

![](/files/IVQXlZdp1gGn4HDdqTr8)

### Prefill Syntax and Examples

The prefill logic uses dot notation to access related Salesforce fields. The general format is:

* <mark style="color:$danger;">**`FieldApiName`**</mark>
* <mark style="color:$danger;">**`LookupApiName.FieldApiName`**</mark>
* <mark style="color:$danger;">**`LookupApiName.LookupApiName.FieldApiName`**</mark>

{% hint style="warning" %}
**Note**: SharinPix supports up to **5 levels of nested lookup relationships**.
{% endhint %}

**Syntax Components**

* <mark style="color:$danger;">**`LookupApiName`**</mark>: The API name of a lookup field on the current object (e.g., <mark style="color:$danger;">`AccountId`</mark> on the `Contact` object).
* <mark style="color:$danger;">**`FieldApiName`**</mark>: The API name of the target field from which to pull the value (e.g., <mark style="color:$danger;">`Description`</mark> on the <mark style="color:$danger;">`Account`</mark> object).

#### Example

If the form is launched from a **Contact** record and you want to prefill a field with the related **Account’s description,** use the following configuration:

<mark style="color:$danger;">`AccountId.Description`</mark>

This will fetch the description value of the account, which is related to the contact through the AccountId field.

<figure><img src="/files/llCfHdpOMmf7ZJTn4CfZ" alt=""><figcaption></figcaption></figure>

#### Advanced Example (Up to 5 Levels)

Example: <mark style="color:$danger;">`AssetId.ContactId.ReportsToId.AccountId.CreatedById.Name`</mark>

This fetches the name of the user who created the Account that is related through a multi-level chain from the current Asset record.

{% hint style="warning" %}
**Note:** This is subject to Salesforce’s current maximum of 5 lookup relationship levels per query.
{% endhint %}

## Demo: Pre-Filling Values in a Fire Safety Inspection Form

In this example, you have a **Form Template** designed for fire safety inspections. The form is launched from a custom **Inspection** object. Your goal is to dynamically pre-fill:

* The **inspection date** using a field on the **Inspection** record itself.
* The **address** using a field on the related **Account** record (the parent of the Inspection).

### Step 1 : Build a SharinPix Form

If you do not already have a Form Template available, go on [***SharinPix Form Template***](/forms/form-elements/sharinpix-form-template-editor) and create a new Form Template record. Use the Form Builder to create a SharinPix Form.

Once you have configured your form, you can select the element you want to have a value pre-filled from its parent record or related parent records.

<figure><img src="/files/SD5RogSV8kBcFuekSQUq" alt=""><figcaption></figcaption></figure>

### Step 2: Prefill the Inspection Date

Begin by selecting the Date element, which opens the configuration panel to configure pre-fill for it.

<figure><img src="/files/expuIP8TXIzlIeWuj3s9" alt=""><figcaption></figcaption></figure>

To pull the inspection date directly from the <mark style="color:$danger;">`Inspection`</mark> record:

* Field API Name: <mark style="color:$danger;">`Inspection_Date__c`</mark>

This retrieves the value from the <mark style="color:$danger;">`Inspection_Date__c`</mark> field on the record used to launch the form.

<figure><img src="/files/7I0tVwRbnji5YbBR4tzl" alt=""><figcaption></figcaption></figure>

### Step 3: Prefill the Address from the Account

To pre-fill the **address** from the related Account record, we use:

<mark style="color:$danger;">`Account__c.Address__c`</mark>

Configuring the pre-fill value to **Account\_\_c.Address\_\_c** will do the following steps:

1. **Account\_\_c** is the Lookup Field API name on Inspection object. This will look for the parent Account record.
2. **Address\_\_c** is a field in the Account parent record. It will then fetch the Address value of this Account.

<figure><img src="/files/e80Srf4ZX2KpMulLJqJM" alt=""><figcaption></figcaption></figure>

### Step 4: Test the form

Once the prefill values are set:

* Launch the form from a Salesforce record (e.g., an <mark style="color:$danger;">`Inspection`</mark>).
* The prefill logic will automatically populate the specified fields as shown in the diagram below.
* If a referenced field is empty (null), the form field will remain empty.

<figure><img src="/files/WjpOpS1YCPs9zflx2rc8" alt=""><figcaption></figcaption></figure>


# Form Features - Magic Fill

## Overview

{% hint style="info" %}
SharinPix **Magic Fill** allows you to automatically populate a **text field** with dynamic content generated from an image.\
Using an AI model, Magic Fill analyzes the image and produces text based on a **user-defined prompt**.

This configuration is available directly in the [**SharinPix Form Template Editor**](/forms/form-elements/sharinpix-form-template-editor).

This article covers the following:

* [How to configure Magic Fill on Text and Text Area Fields](#configure-magic-fill-on-text-and-text-area)
* [Demo of the Magic Fill feature with an Address Extraction Example](#demo-address-extraction-example)
  {% endhint %}

## Getting Started

### Configure Magic Fill on Text and Text Area

Magic Fill can be enabled for any Text or Text Area component inside a SharinPix Form.

1. In the **SharinPix Form Template Editor**, open the **Magic Fill** tab of the element.
2. Check the option **“Magic Fill”**.
3. Provide a **prompt** that instructs the AI on what information to extract or how to interpret the image.

The prompt is essential: it tells the AI what kind of text you expect from the uploaded image.

![](/files/OZjHph0yZ7TWFfLvKGue)

#### Examples of What Magic Fill Can Do

You can use Magic Fill to:

* Ask the AI to **describe** the image
* Extract **specific details** , such as a serial number, condition, or text written on a label
* Read information from **documents, tags, labels, or packaging**
* Parse structured content such as addresses, dates, or reference numbers

Magic Fill can be configured on a question element of type **Text Area** the same way as shown in the image below

![](/files/hgnoi5nw64WpOI1XlIwD)

### Demo: Address Extraction Example

This example demonstrates the Magic Fill feature within an **Address Extraction** scenario. When a user uploads an image of an address label or document, the **Address** field is automatically filled with the extracted address information.

![](/files/ihPADUjA76AMr4vc5GNk)

The example below shows a **Proof of Address** photo which has been taken and is going to be used by the **Address** text field that is not yet populated.

![](/files/pFxCY2ou7WTwYexMleOJ)

The diagram below shows the form after the **Proof of Address** has been captured. The **Address** field is automatically filled with the AI-extracted address based on the image and the configured Magic Fill prompt.

![](/files/X9X2anw3cHnQgHrh79nV)


# Form Features - Conditional Visibility

## Overview

{% hint style="info" %}
SharinPix Form Elements can be configured to be visible only when a particular condition is met. This configuration is available in the [SharinPix Form Builder](/forms/form-elements/sharinpix-form-template-editor).

This article covers the following:

* [How to configure a Visibility Condition](#configure-visibility-conditions)
* [Demo of the Conditional Visibility feature with an Air Conditioning Inspection Example](#demo-air-conditioning-inspection-example)
  {% endhint %}

## Getting Started

### Configure Visibility Conditions

The visibility condition of a SharinPix Form Element can be configured using the "**visible when**" field in the SharinPix Form Builder.

This field can be found in the advanced tab for Question elements and takes as input an expression that evaluates to True or False (boolean).

![](/files/TrzD9ZFwBx6jxFDuHKqz)

{% hint style="success" %}
Tips:

For more information on the Functions and Expressions of the Visibility Feature, please follow the article below: [Form Formulas](/forms/form-elements/sharinpix-form-formula-functions-and-operators)
{% endhint %}

### Demo: Air Conditioning Inspection Example

This example demonstrates the Conditional Visibility feature within an Air Conditioning Inspection example. If damage is detected, additional fields will be visible to provide more information on the damage.

The example below shows a *textarea* element - *'Describe the damage'* , configured with a visibility condition. This element will only be visible when the value of the previous question, *'Are there any signs of damage?'* , is equal to *'Yes'*.

![](/files/cT6OVsPsIyH29tfWlXsU)

The diagram below shows the form with only the first question, *'Are there any signs of damage?'*.

![](/files/YrSVuf7JWyBDA0SwHwTS)

The diagram below shows the form with the two additional questions that became visible when the *'Are there any signs of damage?'* question was set to *'Yes'*.

![](/files/SIS6RqbTOQPiGFS5zaF3)


# Form Features - Disable Form Question

## Overview

{% hint style="info" %}
You can control the interactivity of a SharinPix Form Element by disabling it based on user input. This helps guide user behavior and prevent invalid data entry.\
This article covers the following:

* [How to configure a Disable Condition](#configure-disable-conditions)
  {% endhint %}

## Getting Started

### Configure Disable Conditions

The Disable condition of a SharinPix Form Element can be configured using the "Disable when (formula)" field in the [SharinPix Form Template Editor](/forms/form-elements/sharinpix-form-template-editor).

This field can be found in the advanced tab for Question elements and takes as input an expression that evaluates to True or False (boolean).

![](/files/1A9RAioE0CC0EvebOthj)

{% hint style="success" %}
Tips:

For more information on the Functions and Expressions of the Disable Feature, please follow the article: [SharinPix Form Formula Functions and Operators.](/forms/form-elements/sharinpix-form-formula-functions-and-operators)
{% endhint %}


# Form Features - Validations

## Overview

{% hint style="info" %}
SharinPix Form Questions can be configured to be valid only when certain conditions are met. Validations can be used to ensure that form answers are in the correct format and valid. This configuration is available in the [SharinPix Form Builder](/forms/form-elements/sharinpix-form-template-editor).

This article covers the following:

* [Basic validations using required option](#adding-validations-using-required-option)
* [How to configure a Validation Rule](#configuring-a-validation-rule)
* [Demo of the Validation Rule feature with an Air Conditioning Inspection Example](#demo-serial-number-field-with-validation-rule)
  {% endhint %}

## Getting Started

### Adding Validations using Required option

The simplest way to add validations to a Form Question is to use the **required** option. It makes a question mandatory and prevents form submission unless that question has an answer. This feature is available for most questions and can be enabled by ticking the *required* checkbox as shown below.

![](/files/voCXRvQqpwaPjma3ctLG)

The picture below demonstrates the required feature configured on the Date question:

1. The required Date field contains an asterisk \* in its label.
2. It is highlighted with a message if it has not been filled when trying to submit the form.
3. There are no error messages once the question has been answered.

![](/files/SwqyTxu7Bx0eL2qhxWZf)

### Configuring a Validation Rule

A validation condition can be configured for a SharinPix Form Question using the "**validation rule**" field in the SharinPix Form Builder.

This field can be found in the advanced tab for Question elements and takes as input an expression that evaluates to True or False (boolean).

![](/files/PYemXCcZziYiDDhs65uB)

The example below shows:

1. A validation rule that ensures the value of an input is exactly 10 characters in length.
2. A custom message is configured for that validation rule using the "Message when invalid" field. This field is a SharinPix Formula Field and takes as input an expression that evaluates to a string.

![](/files/lSscmdRP7wpdJxHaIR0o)

{% hint style="success" %}
Tips:

For more information on the Functions and Expressions of the SharinPix Formula Field, please follow the article below: [Form Formulas](/forms/form-elements/sharinpix-form-formula-functions-and-operators)
{% endhint %}

### Demo: Serial Number field with Validation Rule

This example demonstrates the Validation Rule feature within an Air Conditioning Inspection example. It ensures that the correct serial number is entered for an air conditioning unit.

The validation rule for the *text* element - '*Air conditioning unit serial number*' is configured as shown below.

![](/files/Z9CPlaJkhn8GEWhP5eio)

The diagram below shows:

1. No error messages are shown when the serial number question is empty and the form has not yet been submitted.
2. The serial number question is highlighted and a custom error message is shown when it is incorrectly filled.
3. There are no error messages when the correct serial number is entered.

![](/files/jTrUqgqRxXrHOFfUHONj)


# Form Features - IFrame

## Overview

The **IFrame** element embeds a web page inside a SharinPix Form. Use it for procedures, maps, or dashboards. You can also embed content exposed through [**SharinPix Share**](/documentation/lightning-web-component/sharinpix-share). Set the URL with a formula. This makes it dynamic per record.

This article covers:

* [How to configure the IFrame (URL and aspect ratio)](#iframe-element-configuration-in-the-form-template-editor)
* [Fire Inspection Demo: Configure a dynamic IFrame using a prefilled URL](#fire-inspection-demo-configure-a-dynamic-iframe-using-a-prefilled-url)

{% hint style="warning" %}
**Prerequisites:**

Before using the IFrame element:

* Ensure the [**SharinPix Forms Admin**](/documentation/access-and-security/sharinpix-permission-sets) permission set is assigned.
* The **latest version of the SharinPix Package** must be installed. Refer to [*this documentation*](/faqs/how-to-update-sharinpix-package-from-the-appexchange) to update your package.
* Ensure end users can access the embedded URL (network access and authentication).
  {% endhint %}

{% hint style="info" %}
**Use Case Example: Show SharinPix Albums in a form**

The iFrame element can be used to embed a [SharinPix Album component](/documentation/lightning-web-component/sharinpix-album-lwc) in a form. To generate shareable SharinPix album URLs, you can either:

1. Use the [SharinPix Share component](/documentation/lightning-web-component/sharinpix-share) to manually generate a URL
2. Or automatically generate URLs as documented [here](/documentation/cookbook/generate-sharinpix-shareable-album-links-automatically).
   {% endhint %}

## IFrame element configuration in the Form Template Editor

Configure IFrames in the [SharinPix Form Template Editor](/forms/form-elements/sharinpix-form-template-editor).

### Configure IFrame element with a static URL

#### Add the IFrame element

Open your form template in the Form Template Editor. Find **IFrame** in the element palette. Drag it into your form.

#### Configure the IFrame settings

Select the IFrame element. Configure these parameters:

* **URL**: a [formula](/forms/form-elements/sharinpix-form-formula-functions-and-operators) that resolves to a URL string
* **Aspect Ratio**: controls the IFrame height relative to its width

<figure><img src="/files/B6KQN4y0lHJLMkWamU18" alt=""><figcaption></figcaption></figure>

#### Set the URL (example)

Use a quoted string as a static URL:

* URL: `"https://example.com"`
* URL: `"<your-sharinpix-share-url>"`

{% hint style="info" %}
**Dynamic URLs**

You can build the URL dynamically per record. Jump to [Dynamic IFrame element with a dynamic URL](#fire-inspection-demo-configure-a-dynamic-iframe-using-a-prefilled-url).
{% endhint %}

<figure><img src="/files/n1EcAHb4BIZwgIlh1MlX" alt=""><figcaption></figcaption></figure>

### Fire Inspection Demo: Configure a dynamic IFrame using a prefilled URL

#### Step 1: Generate URL

Generate a [dynamic Share URL](/forms/salesforce-integration/generate-sharinpix-shareable-form-links-automatically) for the record where the form is launched.

#### Step 2: Prefill URL

* Add a **Text** question.
* Set an API name for the question (example: `album_share_url`).
* [Prefill](/forms/form-elements/form-features-default-or-prefill-values) it with the field name storing the Share URL (example: `Share_URL__c`).
* Hide or disable the question.

<figure><img src="/files/AQKQJOesCsHanDJsbJis" alt=""><figcaption></figcaption></figure>

Make sure to set the api name of the text question to use it in a formula.

<figure><img src="/files/uNmi7J9zMjofJvC8woTb" alt=""><figcaption></figcaption></figure>

#### Step 3: Use the dynamic share URL

* Set the IFrame **URL** to your prefilled Text value.
* Use `<PrefilledTextApiName>.value` to reference the field value.

<figure><img src="/files/QeFxyY3Kwb6oVEMmlAqJ" alt=""><figcaption></figcaption></figure>

#### Step 4: Test in preview

Preview the form to test the embedded content. Share access follows the Share settings.

<figure><img src="/files/lGngnuqFVGYTVTPetb1t" alt=""><figcaption></figcaption></figure>

{% hint style="warning" %}
**Note:**

* If you embed a SharinPix Share link, review its access level. Avoid edit access in read-only use cases.
* The IFrame element does not render in the PDF output.
* The IFrame is not limited to SharinPix Share: you can use any SalesForce public links
  {% endhint %}


# Form Features - Rich Text Area

## Overview

The **Rich Text Area** element lets users enter longer text with text formatting options inside a SharinPix Form. It can be used for formatted notes, comments, instructions, descriptions, reports, or any field where plain text is not enough.

The Rich Text Area can be added to a form in the [SharinPix Form Template Editor](/forms/form-elements/sharinpix-form-template-editor).

This article covers:

* [Element preview](#element-preview)
* [Rich Text Area toolbar options](#toolbar)

## Element preview

The image below shows the Rich Text Area element in the [SharinPix Form Template Editor](/forms/form-elements/sharinpix-form-template-editor).

<figure><img src="/files/OiZLCJ2fxAqqwZZw7AOJ" alt=""><figcaption></figcaption></figure>

{% hint style="warning" %}
**Note:**

The submitted value for this element is stored in the `RichTextArea__c` field on the `FormAnswer__c` object. This field supports up to `131,072` characters. Values that exceed this limit are not stored. In this case, the error is surfaced in the `FormResponse__c` 's `ErrorMessages__c` field.
{% endhint %}

{% hint style="success" %}
**Tip:**

You can also map this value to a custom Salesforce field. Follow [this documentation](/forms/salesforce-integration/form-features-sync-form-values-to-salesforce) to sync form values to Salesforce.

To preserve formatting, map the value to a compatible rich text field.
{% endhint %}

### Toolbar Options

The toolbar appears at the top of the Rich Text Area and provides formatting options for the text entered by the user.

| Tool                         | Description                                                         |
| ---------------------------- | ------------------------------------------------------------------- |
| Font Size                    | Changes the size of the selected text.                              |
| Text Color                   | Changes the color of the selected text.                             |
| Background / Highlight Color | Applies a background or highlight color to the selected text.       |
| Bold                         | Makes the selected text bold.                                       |
| Italic                       | Makes the selected text italic.                                     |
| Underline                    | Underlines the selected text.                                       |
| Align Left                   | Aligns the selected text or paragraph to the left.                  |
| Align Center                 | Centers the selected text or paragraph.                             |
| Align Right                  | Aligns the selected text or paragraph to the right.                 |
| Numbered List                | Creates an ordered list with numbers.                               |
| Bulleted List                | Creates an unordered list with bullet points.                       |
| Merge Field                  | Inserts dynamic values from form fields into the Rich Text content. |

### Merge Field Tool

The **Merge Field** tool allows you to insert dynamic values from your form into Rich Text content. When the form is submitted and processed, each merge field is replaced with the corresponding value from the selected form field.

<figure><img src="/files/d3vP5HurUdA3N0Z1f6Dv" alt=""><figcaption></figcaption></figure>

#### Demo: Inserting a merge field

1. Click the **Merge Field** button in the Rich Text toolbar.
2. Select the desired **Form Field**.

<figure><img src="/files/4kWng8qzjG6HLQs5PRik" alt=""><figcaption></figcaption></figure>

3. Select the **Attribute** you want to display.
4. Click **Add**.

<figure><img src="/files/XnmhqAcmBBIswmzj7WG5" alt=""><figcaption></figcaption></figure>

{% hint style="success" %}
Tip:

The available Fields and Attributes are based on the form elements in your form. Different field types expose different attributes (for example, value, label, or other field-specific properties).

For more information about supported form fields and their available attributes, see the [Form Fields & Attributes](/forms/form-elements/sharinpix-form-formula-fields-and-attributes) documentation.
{% endhint %}

A merge field is inserted into the Rich Text editor using the syntax shown in the picture below.

<figure><img src="/files/EpWeuH3bd3VM2LyvowCG" alt=""><figcaption></figcaption></figure>

The image below shows the rendered output when "Passed" is selected on the **Status** radio question.

<figure><img src="/files/4MXPWrKF1z4x0Y0B44fb" alt=""><figcaption></figcaption></figure>


# Form Features - Table

## Overview

The **Table** element is a display style of the [Repeated Sections](/forms/form-sections-and-repeated-sections/sharinpix-form-sections-and-repeated-sections-1) element. It presents a set of predefined questions in a tabular format, where each row represents a separate entry and can contain its own values.

You can add a Table element to a form by selecting **Table** from the left sidebar in the SharinPix Form Builder.

<figure><img src="/files/JknqmJS56XJBvjWOeqPy" alt=""><figcaption></figcaption></figure>

You can also create one by adding a **Repeated Sections** element and then changing its **Style** setting to **Table**, as shown below.

<figure><img src="/files/TL1o8XMclOYajVUgeVl7" alt=""><figcaption></figcaption></figure>

### Configure the questions for each column

You can define which questions appear in each column of the table.

To configure questions:

1. In the **Repeated Sections** element settings, click **Edit Section**.

<figure><img src="/files/IXiRFKoX5sQc3hk1iizE" alt=""><figcaption></figcaption></figure>

2. In the section editor, use the left sidebar to add the elements you want to appear in each column. Each added element becomes a column in the table. In the example below, two questions have been added, so the table displays two question columns.

<figure><img src="/files/jPIjRsHphKUmUGcI1nVT" alt=""><figcaption></figcaption></figure>

The image below shows the resulting **Table** element with those row questions applied.

<figure><img src="/files/o3qpan1euLS7CyJdRvAQ" alt=""><figcaption></figcaption></figure>

### Configuration Options

| Option         | Description                                                                             |
| -------------- | --------------------------------------------------------------------------------------- |
| Use full width | This option removes the width constraint when displaying the table element on the form. |

The image below demonstrates the **Use full width** option enabled for the **Table** element.

<figure><img src="/files/2WXS9GJ7TeUOLewYqNK4" alt=""><figcaption></figcaption></figure>

{% hint style="success" %}
Tip:

All other configuration options for a [Repeated Sections](/forms/form-sections-and-repeated-sections/sharinpix-form-sections-and-repeated-sections-1#configuration-options) element are also available for the "Table" display style.
{% endhint %}

### Configure the default number of rows

A **Repeated Sections** element can be configured with a default number of initial sections. For a **Table** element, this setting determines how many rows are shown by default.

To configure the default number of rows, open the **Default** tab in the **Repeated Sections** element configuration, then click the **+** button to add rows, as shown below.

<figure><img src="/files/uUu70BtafH4PC82QTIHR" alt=""><figcaption></figcaption></figure>


# Form Features - Sketch Component with Dynamic Background

## Overview

This article explains how to configure the **SharinPix Sketch Component** with a customizable background.

This article explains:

* [How to configure a **background image**](#sketch-with-static-url)
* [Demo of a **dynamic background image using a URL with a Car Inspection Example**](#sketch-with-dynamic-url)

## Getting Started

### How to configure a background image

Follow these steps to add a static background URL to your form sketch.

* On the Form Editor Page, select a sketch component and find "Background Image URL" under the "General" tab.
* Configure the formula to accept the URL of an image.

<figure><img src="/files/eguffqhTd7eGVp8lQtVu" alt=""><figcaption></figcaption></figure>

{% hint style="info" %}
**Info:**

For more information on the Functions and Expressions of the Background Image URL, please follow the article:  [Form Formulas](/forms/form-elements/sharinpix-form-formula-functions-and-operators)
{% endhint %}

### Demo: Car Inspection Example

This section will demonstrate how to configure the sketch element with a dynamic background in the context of a car inspection. The use case here is a car inspection after a lease, and one of the steps required is to highlight areas of damage on the vehicle.

Follow these steps to configure a dynamic background URL on your sketch:

* Configure a text component on the SharinPix Form so that it [pulls data from Salesforce](/forms/form-elements/form-features-default-or-prefill-values) and makes it disabled. We need the text component in order to have a field that contains the value of `Car_Model__c` which will be used as the background for the sketch.

<figure><img src="/files/rIyq9zkCEY9UIt7RyCO7" alt=""><figcaption></figcaption></figure>

* Configure the API name of the text component.

<figure><img src="/files/cZp16ET8TEuPOLpg3tRW" alt=""><figcaption></figcaption></figure>

* On the SharinPix Sketch component, go to the "Background Image URL" configuration and set it to use the value of the text element 'Car Model URL' that was just configured.

<figure><img src="/files/KXyp9ebKXjbP4PjAEBCc" alt=""><figcaption></figcaption></figure>

### Results:

#### Example 1 - Sedan Record

<figure><img src="/files/hDn80mLVsmVSOPNAL2uY" alt=""><figcaption></figcaption></figure>

* When opening a Car Inspection record for a Sedan, the form will load the Sedan background image.

<figure><img src="/files/u9YkITZJwAz5O96vrCzE" alt=""><figcaption></figcaption></figure>

#### Example 2 – Hatchback Record

<figure><img src="/files/YKtWxSzI5AYECbfGTbX4" alt=""><figcaption></figcaption></figure>

* If the same form is opened on a Hatchback record, the Sketch component will display the Hatchback background image.

<figure><img src="/files/6FHe7nd6pDFYUtdkMBzM" alt=""><figcaption></figcaption></figure>


# Form Features - Plotted Sections

## Overview

This article explains how to configure the **Plotted Sections** element.

This article explains:

* [How **Plotted Sections** work](#how-plotted-sections-work)
* [How to configure **Plotted Sections**](#how-to-configure-plotted-sections)
* [Demo of **Plotted Sections** with a Building Inspection Example](#demo-building-inspection-example)

## Getting Started

### How Plotted Sections work

The **Plotted Sections** element uses a sketch as the entry point for a [**Repeated Section**](/forms/form-sections-and-repeated-sections/sharinpix-form-sections-and-repeated-sections-1).

Each time a user places a marker on the sketch:

* A new repeated section item is created.
* That item stores the details related to that marker.
* The form can capture structured data for every marked location.

This creates a direct link between the marker location and the data entered for it.

This pattern works well when users need to mark a visual position first, then describe what was found.

{% hint style="info" %}
Use the repeated section template to define which fields are created for each marker, such as **Area Inspected**, **Condition**, **Issues Present**, or **Description of Issues**.
{% endhint %}

### How to configure Plotted Sections

Follow these steps to configure **Plotted Sections** on your form.

* On the Form Editor page, add the **Plotted Sections** element to your form.
* Open the **Plotted Sections** configuration.
* Click **Edit section** to define the repeated section template that will be created for each marker.
* Add the background image and configure the markers that users will work on.

<figure><img src="/files/JX9JAbflWubVuYysY8Qb" alt=""><figcaption></figcaption></figure>

* Add the fields that users must complete for each marked point, such as **Area Inspected**, **Condition**, **Are there any issues?**, and **Description of Issues**.

<figure><img src="/files/s9od3uWiyRwfLIrWeGNh" alt=""><figcaption></figcaption></figure>

Each time a user places a marker on the sketch, the form creates one repeated section item linked to that marker.

{% hint style="info" %}
**Info:**

For more information on configuring repeated section items, please follow the article: [SharinPix Form - Repeated Section](/forms/form-sections-and-repeated-sections/sharinpix-form-sections-and-repeated-sections-1)
{% endhint %}

### Demo: Building Inspection Example

This section demonstrates how to use **Plotted Sections** in the context of a building inspection. The inspector marks locations on a building sketch, then captures the condition and any issues found for each marked area.

Follow these steps to configure **Plotted Sections** on your form:

* Add the **Plotted Sections** element to the form.
* Open **Edit section** and add the fields that should be completed for each marker:
  * **Area Inspected (Interior/Exterior)**
  * **Condition**
  * **Are there any issues?**
  * **Description of Issues**
* When filling out the form, place a marker on each inspected area of the sketch.
* Complete the repeated section item created for each marker.

### Results:

#### Example 1 - Single Inspection Point

* When the inspector places one marker on the building sketch, the form creates one repeated section item for that location.
* The inspector can then record whether the area is **Interior** or **Exterior**, describe the condition, and note any issues.

<figure><img src="/files/p2gr3kaXEg2R2Mg7VZfU" alt=""><figcaption></figcaption></figure>

#### Example 2 – Multiple Inspection Points

* If the inspector places several markers on the sketch, the form creates one repeated section item for each marker.
* This allows every inspection point to keep its own details while staying linked to its location on the sketch.

<figure><img src="/files/p0f1w1TnryroWFeCTRYI" alt=""><figcaption></figcaption></figure>


# Form Features - Use Dynamic Salesforce Data with Record Datasets

## Overview

[**Record Datasets**](/forms/salesforce-integration/record-datasets) let you use Salesforce data inside SharinPix Forms.

This feature is currently available for **Select** and **Multi-Select** questions. It lets you populate options from a **Record Dataset** generated from Salesforce records.

Use it when the available options should reflect Salesforce data instead of a fixed list entered in the form builder.

{% hint style="info" %}
Refresh your Record Datasets regularly to keep options in sync with Salesforce.
{% endhint %}

This article covers:

* [Configure dynamic Select or Multi-Select options with a Record Dataset](#configure-dynamic-select-or-multi-select-options-with-a-record-dataset)
  * [Choose the label and value fields](#choose-the-label-and-value-fields)
  * [Filter available rows](#filter-available-rows)
* [Prefill Repeated Sections with a Record Dataset](#prefill-repeated-sections-with-a-record-dataset)
  * [Set up dataset mapping](#set-up-dataset-mapping)
* [Demo: Select Employees based on their Company](#demo-select-employees-based-on-their-company)

### Configure dynamic Select or Multi-Select options with a Record Dataset

Add a **Select** or **Multi-Select** question.

<figure><img src="/files/Rjz1AkAGNfsOPLRd5jsN" alt=""><figcaption></figcaption></figure>

In the **Options** tab, click **Select a dataset** and choose one of the available **Record Datasets**.

{% hint style="info" %}
Create the Record Dataset from Salesforce data before configuring the question in the Form Builder.

Refer to [How to Create a Record Dataset](/forms/salesforce-integration/record-datasets#how-to-create-a-record-dataset).
{% endhint %}

<figure><img src="/files/xuB17lk9GNEzOLUf7tq9" alt=""><figcaption></figcaption></figure>

The available fields depend entirely on the columns exported into the Record Dataset.

In this example, the dataset includes:

* `Id`
* `Name`
* `SiteAddress__c`
* `SiteArea__c`
* `SiteType__c`
* `Inspection__c`

If a field is not present in the dataset, you cannot use it in the question configuration or the filter formula.

<figure><img src="/files/7u6qcQ5ZU7KtI8e8gjV4" alt=""><figcaption></figcaption></figure>

### Choose the label and value fields

After selecting the dataset, choose which column should be used as:

* the **label**, which is shown to the user
* the **value**, which is stored in the form response

In most cases, use a readable field for the label and a stable field for the value.

For example, you might display `Name` while storing `Id`.

You can keep static options or remove them, depending on whether the question should rely entirely on the selected dataset.

<figure><img src="/files/tvlFpQVcHvqGUoPofumC" alt=""><figcaption></figcaption></figure>

#### Filter available rows

In the **CSV Filter (formula)** field, reference dataset columns with `row.<column_name>`.

You can use any column exported in the dataset inside the filter.

With the example dataset above, valid references include:

* `row.Id`
* `row.Name`
* `row.SiteAddress__c`
* `row.SiteArea__c`
* `row.SiteType__c`
* `row.Inspection__c`

Use this filter to show only rows that match specific values.

In this example, the filter keeps only Site records where `SiteArea__c > 500`.

<figure><img src="/files/38g9D7EykzOqjRO9yBrj" alt=""><figcaption></figcaption></figure>

For example:

* `row.SiteArea__c > 500` keeps only large sites
* `row.SiteType__c == "Industrial"` keeps only industrial sites
* `row.Inspection__c == inspection_id` keeps only sites linked to the current Inspection

The available options now include only records where `SiteArea__c` is greater than `500`.

<figure><img src="/files/0yIkdRgnVsMgfJyM7Ije" alt=""><figcaption></figcaption></figure>

#### Remove duplicate values

If the dataset contains repeated values in the same column, the question can show duplicate options.

Enable `Remove duplicate values from CSV` to keep only one option for each repeated value.

<figure><img src="/files/DVh2isoZNL2KSQPUEcRR" alt=""><figcaption></figcaption></figure>

### Prefill Repeated Sections with a Record Dataset

You can use **Pull data from a Salesforce record** in the **Default** tab of a **Repeated Section** to prefill repeated items when the form opens.

This method is not recommended when you need to prefill a large number of items.

It appends the prefill values to the URL, which can make the URL too long.

For larger record sets, use a dataset instead. For the Salesforce-based approach, see [Create and Update Related Salesforce Records with SharinPix Form](/forms/salesforce-integration/create-and-update-related-salesforce-records-with-sharinpix-form#configuring-form-repeated-sections-to-pull-child-records).

#### Set up dataset mapping

{% hint style="info" %}
Create the Record Dataset from Salesforce data before configuring the mapping in the Form Builder.

Refer to [How to Create a Record Dataset](/forms/salesforce-integration/record-datasets#how-to-create-a-record-dataset).
{% endhint %}

Enable **Prefill repeated sections from a dataset**.

<figure><img src="/files/a29IXHDWm1FkDJr1I4ge" alt=""><figcaption></figcaption></figure>

Select one of the available datasets, then configure the mapping and [filtering](#filter-available-rows).

Use the mapping to match repeated section questions to dataset columns. For example, map `Site Address` to `SiteAddress__c`.

<figure><img src="/files/sI3bdZZZR2l99z7FN0tN" alt=""><figcaption></figcaption></figure>

### Demo: Select Employees based on their Company

{% hint style="warning" %}
**Prerequisite for this example:**

* Create a **Companies** dataset.
* Create an **Employees** dataset with a `Company__c` lookup field.
  {% endhint %}

#### Step 1: Set up the company Select question

* Add a **Select** question with the API name `company`.
* Select the **Companies** dataset.
* Use `Name`, or another readable field, as the label.
* Use `Id` as the value. This value will be used to filter the **Employees** dataset.

<figure><img src="/files/RUc5KucdFuA5SBHJSvSK" alt=""><figcaption></figcaption></figure>

#### Step 2: Set up the employees' Multi-Select question

* Add a **Multi-Select** question.
* Select the **Employees** dataset.
* Use [Filter available rows](#filter-available-rows) to keep only employees linked to the selected company.

  In this example, use:

  `row.Company__c == company.value`

<figure><img src="/files/9LsJBxwSuKgqG7y9VJ5d" alt=""><figcaption></figcaption></figure>

{% hint style="success" %}
**Tip:**\
\
If you want to get the company ID from the form launch URL, or from a Salesforce field on the record where the form is launched, configure a hidden text question with [Prefill](/forms/form-elements/form-features-default-or-prefill-values). You can then reference that hidden field in the filter instead.
{% endhint %}


# Form Features - Capture Additional Details for Radio Answers using the Further Info Feature

## Overview

**Further Info** is a feature available for **Radio** form questions. It lets you add follow-up questions to a radio option when you need extra details.

The answers to these follow-up questions do **not** create separate **SharinPix Form Answer** records in Salesforce. Instead, they are stored directly on fields mapped to the main **Radio Form Answer** record which allows for better reporting.

This feature is useful when you want to capture related details while keeping the data linked to a single radio answer.\
\
This article covers:

* [Air Conditioning Demo: Configure Further Info for a radio question](#air-conditioning-demo-configure-further-info-for-a-radio-question)

## Air Conditioning Demo: Configure Further Info for a radio question

#### Step 1: Add the additional fields required

* Go to **Object Manager** and open the **SharinPix Form Answer** object.

<figure><img src="/files/JyWRPueXaoyTaEi1Sflk" alt=""><figcaption></figcaption></figure>

* Add one or more fields for the additional information you want to store on the answer record.

<figure><img src="/files/3JDuN45wbsfrHQx7JC5e" alt=""><figcaption></figcaption></figure>

<figure><img src="/files/2PYh7rNWw537IdyCMr49" alt=""><figcaption></figcaption></figure>

#### Step 2: Configure Further Info on the Radio Form Element

* Add a radio question and ensure that you enter its API name.

<figure><img src="/files/7rDPrdbWSGho4vanCLMA" alt=""><figcaption></figcaption></figure>

* Go to the **Further Info** tab and click on **Edit questions**.

<figure><img src="/files/04pZpTNAyzg0q9YaSv9c" alt=""><figcaption></figcaption></figure>

* Add a follow-up question and enter its API name.

<figure><img src="/files/zfvFpmIGQGFTI2ZqaIVK" alt=""><figcaption></figcaption></figure>

* You can also configure these questions with [Visibility](/forms/form-elements/form-features-conditional-visibility) or [Validations](/forms/form-elements/form-features-validations) to fit the use case.

<figure><img src="/files/uiPcUlrzK1oy1M7ZihtR" alt=""><figcaption></figcaption></figure>

* Go back to the **Further Info** tab of the radio element.
* Add one or more mappings.
* In each mapping, the [formula](/forms/form-elements/sharinpix-form-formula-fields-and-attributes) entry should reference the API name of a **Further Info** question that you defined earlier in **Edit questions**.
* Each mapping writes that value to a Salesforce field on the radio **SharinPix Form Answer** record.

<figure><img src="/files/pgLLHQmI9facdyjgYObd" alt=""><figcaption></figcaption></figure>

#### Step 3: Test the form

<figure><img src="/files/gq3j4q3rgzWVSI4uI6FM" alt=""><figcaption></figcaption></figure>

* Submit the form and open the related radio **SharinPix Form Answer** record.
* Check if each field used in the mapping has the value from the corresponding *Further Info* form field.
* Make sure the fields have been added to the layout.

<figure><img src="/files/mXeE8hqt8hYcM7EhBADE" alt=""><figcaption></figcaption></figure>


# Form Features - Theme Customization

## Overview

The **Theme Customization** feature allows you to customize the colors used across your form.\
You can configure both the main color and the dark mode appearance to match your branding.

These colors are applied to key UI elements such as buttons, links, and sections.

This article explains:

* [How to configure the **primary color**](#how-to-configure-the-primary-color)
* [How to configure **dark mode**](#how-to-configure-dark-mode)
* [Demo of **a Theme Customization with a Car Inspection Form**](#demo-car-inspection-form-example)

## Getting Started

### How to configure the primary color

Follow these steps to configure the primary color on your form.

1. In the **Form Editor**, open the [**Advanced** tab](/forms/form-elements/sharinpix-form-template-editor#advanced-tab).
2. Click **Edit Theme**.
3. Select a color with the color picker.

Once selected, the color will be applied immediately to the form preview.

<figure><img src="/files/XCNx2MZ5tYdr5FtfFS5v" alt="Theme editor with color picker"><figcaption><p>Use the color picker to choose the primary color for your form.</p></figcaption></figure>

### How to configure dark mode

Follow these steps to configure dark mode on your form.

1. In the **Form Editor**, open the [**Advanced** tab](/forms/form-elements/sharinpix-form-template-editor#advanced-tab).
2. Click **Edit Theme**.
3. Toggle the **Theme Mode** to **Dark**.
4. Select the colors you want to use in dark mode.

Once configured, the dark mode colors will be used when the form is displayed in dark mode.

<figure><img src="/files/A8MgpxifEVDwf84mlF7X" alt="Car Inspection form in dark mode"><figcaption><p>Use the theme mode toggle to choose the dark theme for your form.</p></figcaption></figure>

### Demo: Car Inspection Form Example

This example demonstrates the Theme Customization feature within a **Car Inspection** form.

<figure><img src="/files/Nuv7dxqPlo4sA9Pth6W7" alt="Car Inspection form using theme customisation"><figcaption><p>Example of theme customization applied to a Car Inspection form.</p></figcaption></figure>

<figure><img src="/files/nJ3jSj0t2XPjxViFZanD" alt=""><figcaption><p>End result of theme customization applied in dark mode.</p></figcaption></figure>

{% hint style="success" %}
**Best Practices**

* Choose a color that provides good contrast with text and backgrounds
* Use dark mode colors that remain easy to read
* Ensure accessibility by avoiding overly light colors
* Use your brand’s primary color for consistency across your applications
  {% endhint %}

{% hint style="warning" %}
**Notes**

* Only valid HEX color values are supported (e.g. `#FF5733`)
* The system automatically converts the color into the required format for styling
* Check both light mode and dark mode after updating the theme
* Changes are applied dynamically without requiring a page reload
  {% endhint %}


# SharinPix Form Formula Functions and Operators

## Overview

{% hint style="info" %}
SharinPix Form Elements can be configured using Formulas. Formulas are critical for creating **dynamic, data-driven SharinPix Forms**. By using a combination of functions and operators, you can:

* [**Control Visibility**](/forms/form-elements/form-features-conditional-visibility)**:** Show or hide form fields based on other user inputs or external data.
* [**Validate Input**](/forms/form-elements/form-features-validations)**:** Ensure data meets specific criteria before submission.
* **Generate Content:** Calculate or display dynamic text based on the form's context.

This article covers the following:

* [SharinPix Form Formulas - Functions and Operators Overview](#functions-and-operators-overview)
  * [Operators](#operators)
  * [Logical functions](#logical-functions)
    * [BLANKVALUE](#blankvalue)
    * [ISBLANK](#isblank)
    * [NOT](#not)
    * [IF](#if)
    * [CASE](#case)
  * [Text functions](#text-functions)
    * [REGEX](#regex)
  * [List functions](#list-functions)
    * [JOIN](#join)
    * [REMOVEBLANKS](#removeblanks)
    * [LEN](#len)
    * [INCLUDES](#includes)
    * [COUNTMATCHES](#countmatches)
  * [Number List functions](#number-list-functions)
    * [SUM](#sum)
  * [Date functions](#date-functions)
    * [DATEVALUE](#datevalue)
    * [ADDDAYS](#adddays)
    * [DAYSBETWEEN](#daysbetween)
      {% endhint %}

## Getting started

## Functions and Operators overview

<figure><img src="/files/XDmqjvO8yWQh55ZC1eG9" alt=""><figcaption></figcaption></figure>

## Operators

<table><thead><tr><th width="67.328125">Operator</th><th width="128.12109375">Type</th><th width="172.94921875">Description</th><th width="305.53515625">Example</th><th>Result</th></tr></thead><tbody><tr><td><strong>-</strong></td><td>Arithmetic</td><td>Subtraction </td><td><mark style="color:red;"><code>Amount_Due - Discount</code></mark></td><td>Numerical Difference</td></tr><tr><td><strong>*</strong></td><td>Arithmetic</td><td>Multiplication </td><td><mark style="color:red;"><code>Quantity * Unit_Price</code></mark></td><td>Numerical Product</td></tr><tr><td><strong>/</strong></td><td>Arithmetic</td><td>Division </td><td><mark style="color:red;"><code>Total_Sales / Number_of_Reps</code></mark></td><td>Numerical Quotient</td></tr><tr><td><strong>+</strong></td><td>Arithmetic</td><td>Addition (also used for concatenating text strings)</td><td><p><mark style="color:red;"><code>Hours_Worked + 24</code></mark> (Numerical sum)  </p><p><mark style="color:red;"><code>First_Name + " " + Last_Name</code></mark>(Text Concatenation)</p></td><td>Numerical Sum / Combined Text String</td></tr><tr><td><strong>></strong></td><td>Comparison</td><td>Greater than </td><td><mark style="color:red;"><code>Service_Years > 5</code></mark></td><td><mark style="color:red;"><code>true</code></mark> or <mark style="color:red;"><code>false</code></mark></td></tr><tr><td><strong>>=</strong></td><td>Comparison</td><td>Greater than or equal to</td><td><mark style="color:red;"><code>Hours_Worked >= 40</code></mark></td><td><mark style="color:red;"><code>true</code></mark> or <mark style="color:red;"><code>false</code></mark></td></tr><tr><td><strong>&#x3C;</strong></td><td>Comparison</td><td>Less than</td><td><mark style="color:red;"><code>Age &#x3C; 25</code></mark></td><td><mark style="color:red;"><code>true</code></mark> or <mark style="color:red;"><code>false</code></mark></td></tr><tr><td><strong>&#x3C;=</strong></td><td>Comparison</td><td>Less than or equal to</td><td><mark style="color:red;"><code>Issues_Count &#x3C;= 250</code></mark></td><td><mark style="color:red;"><code>true</code></mark> or <mark style="color:red;"><code>false</code></mark></td></tr><tr><td><strong>AND</strong></td><td>Logical</td><td>Returns <mark style="color:red;"><code>true</code></mark> if ALL expressions are true.</td><td><mark style="color:red;"><code>Tier = "Gold" AND Annual_Spend > 50000</code></mark></td><td><mark style="color:red;"><code>true</code></mark> or <mark style="color:red;"><code>false</code></mark></td></tr><tr><td><strong>OR</strong></td><td>Logical</td><td>Returns <mark style="color:red;"><code>false</code></mark> if ANY expression is true.</td><td><mark style="color:red;"><code>Region = "West" OR Region = "East"</code></mark></td><td><mark style="color:red;"><code>true</code></mark> or <mark style="color:red;"><code>false</code></mark></td></tr></tbody></table>

## Logical functions

## BLANKVALUE

Determines if an expression has a value and returns a substitute expression if it does not. If the expression has a value, it returns the value of the expression.

### Use

<mark style="color:red;">`BLANKVALUE(expression, substitute_expression)`</mark>

* **expression** - expression to be evaluated
* **substitute\_expression** - value to return when **expression** is blank

{% hint style="info" %}
**Info:**

A field is not empty if it contains a character, a blank space, or a zero. For example, a field that contains a space inserted with the spacebar is not empty.
{% endhint %}

### Formula Example

<mark style="color:red;">`BLANKVALUE(Department, "Undesignated")`</mark>

This formula returns the value of the **Department** field if it contains a value. If the Department field is empty, this formula returns the word *"Undesignated"*.

## ISBLANK

Determines if an expression has a value and returns <mark style="color:red;">`true`</mark> if it does not. If it contains a value, this function returns <mark style="color:red;">`false`</mark>.

### Use

<mark style="color:red;">`ISBLANK(expression)`</mark>

**expression** - expression to be evaluated.

### Formula Example

<mark style="color:red;">`ISBLANK(Department)`</mark>

This formula returns <mark style="color:red;">`true`</mark> if the **Department** field is empty. If the **Department** field contains a value, the formula returns <mark style="color:red;">`false`</mark>.

## NOT

Reverses the logical value of an expression. Returns <mark style="color:red;">`true`</mark> if the expression is <mark style="color:red;">`false`</mark>, and <mark style="color:red;">`false`</mark> if the expression is <mark style="color:red;">`true`</mark>.

### Use

<mark style="color:red;">`NOT(logical_expression)`</mark>

**logical\_expression** - condition to be evaluated.

### Formula Use

<mark style="color:red;">`NOT(ISBLANK(Department))`</mark>

This formula returns <mark style="color:red;">`true`</mark> if the **Department** field contains a value, and <mark style="color:red;">`false`</mark> if the **Department** field is empty.

## IF

Determines if expressions are <mark style="color:red;">`true`</mark> or <mark style="color:red;">`false`</mark>. Returns a given value if <mark style="color:red;">`true`</mark> and another value if <mark style="color:red;">`false`</mark>.

### Use

<mark style="color:red;">`IF(logical_test, value_if_true, value_if_false)`</mark>

* **logical\_test** - expression to be evaluated
* **value\_if\_true** - value to return if **logical\_test** is <mark style="color:red;">`true`</mark>
* **value\_if\_false** - value to return if **logical\_test** is <mark style="color:red;">`false`</mark>.

### Formula Example

<mark style="color:red;">`IF(Total > 500, "Eligible for Discount", "No Discount")`</mark>

This formula returns ***“Eligible for Discount”*** if the **Total** field is greater than <mark style="color:red;">`500`</mark>. If **Total** is <mark style="color:red;">`500`</mark> or less, it returns ***“No Discount”***.

## CASE

Checks a given expression against a series of values. If the expression is equal to a value, it returns the corresponding result. If it isn't equal to any of the values, it returns a default result.

### Use

<mark style="color:red;">`CASE(expression, value1, result1, value2, result2,..., else_result)`</mark>

* **expression** - field or value you want compared to each specified value.
* **value1, result1, value2, result2, ....*****-*** result and value pairs.
* **else\_result** - the value to return when the expression does not equal any values.

### Formula Example

<mark style="color:red;">`CASE(User.Department, "IT", 0.25, "Field", 0.15, 0)`</mark>

This formula returns a different discount rate based on the department entered.

* 25% on any person in the IT department.
* 15% for someone in the Field department.
* 0 is applied if the person doesn't belong to either department.

## **Text Functions**

The following list functions can also be used for text values:

* [LEN](#len)
* [INCLUDES](#includes)
* [COUNTMATCHES](#countmatches)

## REGEX

Compares a text field to a regular expression and returns TRUE if there is a match. Otherwise, returns FALSE.

A regular expression is a string used to describe a format of a string according to certain syntax rules.

{% hint style="success" %}
**Tips:**

* It matches the **entire string**, not a substring. If you want to match text *inside* a longer string, wrap it with `.*` on both sides. Use `.*Order*.`  to find a match in a string like the following: `New Order Created`
* Capture groups and substitutions are ignored.
  {% endhint %}

### Use

<mark style="color:red;">`REGEX(text, regex_text)`</mark>  and replace **text** with the text field, and **regex\_text** with the regular expression you want to match.

Example regular expressions:

* <mark style="color:red;">`^[a-zA-Z0-9._%+-]+@[a-zA-Z0-9.-]+\.[a-zA-Z]{2,}$`</mark> matches email addresses.
* <mark style="color:red;">`^\+?[1-9]\d{1,14}$`</mark> matches phone numbers that may start with an optional ‘+' and are followed by 7 to 15 digits. The first digit cannot be a '0’.

### Formula Example

<mark style="color:red;">`REGEX(SSN, "[0-9]{3}-[0-9]{2}-[0-9]{4}")`</mark>

This formula test whether a custom field called ***SSN*** matches a regular expression representing a valid social security number format of the form 999-99-9999.

* If **SNN** = "987-65-4321", the formula returns <mark style="color:red;">`true`</mark>
* if **SNN** = "abc123-45-6789xyz", the formula returns <mark style="color:red;">`false`</mark>

## List Functions

## JOIN

Combines the values of a **list field** into a single text string using a specified **separator** between each element

### Use

<mark style="color:red;">`JOIN(list, separator)`</mark>

* **list** – The list field you want to join
* **separator** – The text used to separate each value in the resulting string

### Formula Example

<mark style="color:red;">`JOIN(Rooms, ", ")`</mark>

This formula joins all values from the list returned by **Rooms**, separating each value with a comma and a space.

* If **Rooms** = <mark style="color:red;">`["Living room", "Bedroom", "Kitchen"]`</mark>, the formula returns <mark style="color:red;">`"Living room, Bedroom, Kitchen"`</mark>

## REMOVEBLANKS

Removes <mark style="color:red;">`undefined`</mark> and <mark style="color:red;">`""`</mark> from a list

### Use

<mark style="color:red;">`REMOVEBLANKS(list)`</mark>

**list** - The list field from which you want to remove <mark style="color:red;">`undefined`</mark> and <mark style="color:red;">`""`</mark>

### Formula Example

<mark style="color:red;">`REMOVEBLANKS(Room.Names)`</mark>

This formula removes <mark style="color:red;">`undefined`</mark> and <mark style="color:red;">`""`</mark> from the list returned by <mark style="color:red;">`Room.Names`</mark>

* If **Room.Names** = <mark style="color:red;">`["", "Bedroom", undefined]`</mark>, the formula returns <mark style="color:red;">`["Bedroom"]`</mark>

## LEN

Returns the number of characters in a text string or the number of items in a list field.

### Use

<mark style="color:red;">`LEN(text_or_list)`</mark>

**text\_or\_list** - field or expression whose length you want returned.

### Formula Examples

<mark style="color:red;">`LEN(PartNumber)`</mark>

This formula returns the number of characters in a **PartNumber** text field.

<mark style="color:red;">`LEN(SelectedProducts)`</mark>

This formula returns the number of selected items in the **SelectedProducts** list field.

* If **SelectedProducts =**<mark style="color:red;">`[“Laptop", "Monitor", "Keyboard"]`</mark> the formula returns <mark style="color:red;">`3`</mark>.

## INCLUDES

Determines whether a multi-select picklist, list field, or text string contains a specific value. Returns <mark style="color:red;">`true`</mark> if the value is found, and <mark style="color:red;">`false`</mark> if it is not.

{% hint style="warning" %}
**Note:**

This function is **case-sensitive** when checking for text values
{% endhint %}

### Use

<mark style="color:red;">`INCLUDES(list_or_text, value)`</mark>

* **list\_or\_text** - The multi-select picklist, list field, or text value you want to search.
* **value** - The value or substring you want to check for in the list or text.

### Formula Example

<mark style="color:red;">`INCLUDES(Regions, "North")`</mark>

* If **Regions** **=**<mark style="color:red;">`["North", "South"]`</mark>, it returns <mark style="color:red;">`true`</mark>**.**
* If **Regions =**<mark style="color:red;">`["South", "East"]`</mark>, it returns <mark style="color:red;">`false`</mark>**.**
* If **Regions =**<mark style="color:red;">`["north"]`</mark>, it returns <mark style="color:red;">`false`</mark> because the function is case-sensitiv&#x65;**.**

## COUNTMATCHES

Determines how many times a specified value appears in a list, or how many times a substring occurs in a text.

{% hint style="warning" %}
**Note:**

This function is **case-sensitive** when checking for text values.
{% endhint %}

### Use

<mark style="color:red;">`COUNTMATCHES(list_or_text, value)`</mark>

* **list\_or\_text** - The list or text field to search within.
* **value** - The exact value or substring to count.

### Formula examples

<mark style="color:red;">`COUNTMATCHES(Inspections.Status, "Passed")`</mark>

* This formula returns the number of times *“Passed”* appears in the list returned by <mark style="color:red;">`Inspections.Status`</mark>.
* If <mark style="color:red;">`Inspections.Status`</mark> = <mark style="color:red;">`["Passed", "Passed", "Failed"]`</mark>, the formula returns <mark style="color:red;">`2`</mark>.

<mark style="color:red;">`COUNTMATCHES(Description, "error")`</mark>

* This formula returns how many times the substring **"error"** appears in the **Description** text.

## Number list functions

## SUM

Returns the total of all numbers in a list. Only numeric values are allowed; non-numeric values in the list will raise an error.

### Use

<mark style="color:red;">`SUM(number_list)`</mark>

**number\_list** - list containing only number values you want to add.

### Formula Example

<mark style="color:red;">`SUM(SalesAmounts)`</mark>

This formula returns the total of all numbers in the **SalesAmounts** list.

* If **SalesAmounts =**<mark style="color:red;">`[100, 200, 50]`</mark>, the formula returns **350**.

To do the sum of several fields value, use the following.

<mark style="color:red;">`SUM([apiName.value, apiName2.value, ..., apiNameN.value])`</mark>

## Date functions

## DATEVALUE

Constructs a Date from a String. The format of the String depends on the local date format. Invalid strings or non-string characters will raise an error.

Read more on the date format on: <https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Date/parse>

### Use

<mark style="color:red;">`DATEVALUE(date_string)`</mark>

**date\_string** - text that represents a specific calendar date and/or time.

### Formula Example

<mark style="color:red;">`DATEVALUE(SubmittedDate)`</mark>

This formula returns the Date object of the string provided.

* If **SubmittedDate** = "2025-12-12", the formula returns the Date object, Fri Dec 12 2025 04:00:00 GMT-0800 (Pacific Standard Time).

![](/files/PyAlx8eDAvZT95aYTUCF)

## ADDDAYS

Adds the specified number of additional days to a Date.

### Use

<mark style="color:red;">`ADDDAYS(date_object, number_of_days)`</mark>

**date\_object** - Date object.

**number\_of\_days** - Integer that represents the number of days to be added.

### Formula Example

<mark style="color:red;">`ADDDAYS(CreatedAt, 14)`</mark>

This formula returns the new date, which is 14 days from the given date.

* If **CreatedAt** = "2025-12-12", the formula returns the Date object, Fri Dec 26 2025 04:00:00 GMT-0800 (Pacific Standard Time).

![](/files/0och80ldUYeGsLhKTccV)

## DAYSBETWEEN

Returns the number of days between the first and second date parameters.

**This method counts whole days only.**

If the first parameter occurs before or after the second parameter, the return value is negative.

### Formula Example

<mark style="color:red;">`DAYSBETWEEN(SubmittedAt, StartedAt)`</mark>

This formula returns the number of days between the date started and the date submitted.

* If **SubmittedAt** = "Sat Dec 20 2025 04:00:00 GMT-0800 (Pacific Standard Time)" and **StartedAt** = "Fri Dec 12 2025 04:00:00 GMT-0800 (Pacific Standard Time)" then the return value is 8.

### Use

<mark style="color:red;">`DAYSBETWEEN(date_object_1, date_object_2)`</mark>

**date\_object\_1** - Date object.

**date\_object\_2** - Date object.

![](/files/jQfBt1OBrEl0VrcAZpyk)


# SharinPix Form Formula: Fields and Attributes

### Overview <a href="#overview" id="overview"></a>

{% hint style="info" %}
The **SharinPix Form Formula Field** allows you to dynamically reference and manipulate data. Using formulas, you can combine static values with live data coming from form inputs and other sources to create flexible, data-driven form templates.

This article covers the following:

* [Accessing Form Fields](#overview)
* [Accessing Attributes of Form Fields](#accessing-attributes-of-form-fields)
  {% endhint %}

{% hint style="success" %}
**Tips:**&#x20;

[Follow this documentation](/forms/form-elements/sharinpix-form-formula-functions-and-operators) to learn more about the Functions and Operators available in a SharinPix Form Formula Field
{% endhint %}

### Getting Started <a href="#getting-started" id="getting-started"></a>

Formulas can reference data from the following sources:

1. **Current Form Fields:** Values entered by the end-user (e.g., <mark style="color:red;">`elementAPIName`</mark>).
2. **URL Parameters:** Data passed when launching the form via the <mark style="color:red;">`form.params.`</mark> prefix (e.g., <mark style="color:red;">`form.params.approval_threshold`</mark>).

### Accessing Form Fields <a href="#configure-visibility-conditions-1" id="configure-visibility-conditions-1"></a>

Any question with an API name can be used in a formula field. An API name can be added to a question using the *API Name field* on the form builder, as shown below.

<figure><img src="/files/EtSfrT6wqfOpOTTGcXad" alt=""><figcaption></figcaption></figure>

<figure><img src="/files/hptQvu5TtXb3mVWkPufY" alt=""><figcaption></figcaption></figure>

The SerialNumber field can then be used in formula fields as shown above

{% hint style="danger" %}
A section or page cannot contain fields with the same API name.
{% endhint %}

#### Accessing nested fields <a href="#accessing-nested-fields" id="accessing-nested-fields"></a>

To access a nested field, i.e a field found inside a section, make sure to add an API name to the Section element as well. In the picture below the API name "Bedroom" is added to a Section element.

<figure><img src="/files/a3jeMmRyrf54kV5FMi58" alt=""><figcaption></figcaption></figure>

The "Bedroom" Section element contains a Radio question with the "ACWorking" API name as shown below.

<figure><img src="/files/IWjqIv71NfsKS0nc0YrF" alt=""><figcaption></figcaption></figure>

To reference the "ACWorking" Radio question in a formula field found **outside** the "Bedroom" Section, it should be *prefixed* with the Section's API name as shown in the example below.

<figure><img src="/files/VjX33hWoNE3ckYByCtsu" alt=""><figcaption></figcaption></figure>

{% hint style="success" %}
**Tips:**&#x20;

A field can be referenced without any prefix if it is being used in the same level (i.e, the section where it is found)
{% endhint %}

#### Accessing parent fields

The <mark style="color:red;">`parent`</mark> attribute is available for any question found in a section.

<figure><img src="/files/85i1KhNEPLTvGTNp2tb0" alt=""><figcaption></figcaption></figure>

By using the <mark style="color:red;">`parent`</mark> attribute, we can access the attributes of the section as shown below.&#x20;

<figure><img src="/files/ctsGvwWV3rgLc0Ewb4dv" alt=""><figcaption></figcaption></figure>

{% hint style="success" %}
**Tips:**

You can use <mark style="color:red;">`.parent`</mark> to move up the elements tree and reference questions in other sections. For example:

<mark style="color:red;">`parent.parent.SiblingSection.ACWorking`</mark>
{% endhint %}

if you need to reference a **root-level (main page)** question inside a formula field for a question **nested** in a section, you can reference it by using the [**form**](#global-form-attributes) global field.

In the example below, the form includes a radio question with the API name <mark style="color:red;">`VisitType`</mark> on the main page, and a capture question inside the **Bedroom** section.

<figure><img src="/files/7xctdvjq481ydHpvXS3G" alt=""><figcaption></figcaption></figure>

<figure><img src="/files/tdnAC6gBiVc9JTRWTV22" alt=""><figcaption></figcaption></figure>

To reference <mark style="color:red;">`VisitType`</mark> from a formula on a question in the **Bedroom** section, use <mark style="color:red;">`form.VisitType`</mark>, as shown below.

<figure><img src="/files/vpwC39afCDmKw8Xte48j" alt=""><figcaption></figcaption></figure>

### Accessing Attributes of Form Fields <a href="#accessing-attributes-of-form-fields" id="accessing-attributes-of-form-fields"></a>

A field can contain several attributes based on its type and they can be accessed by adding a "." following a field API name.

#### Generic Questions attributes <a href="#generic-questions-attributes" id="generic-questions-attributes"></a>

These attributes are available on almost all questions.

<figure><img src="/files/GSLUFxKk7pazL0I6kawz" alt=""><figcaption></figcaption></figure>

| Attribute    | Purpose                                                                                                                                                                            |
| ------------ | ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| value        | Returns the current value of the field                                                                                                                                             |
| displayValue | Returns the current value of the field as displayed on the UI                                                                                                                      |
| label        | Returns the label of the question                                                                                                                                                  |
| mediaCount   | Returns the number of media associated with the question                                                                                                                           |
| note         | Returns the current note added to the question if any                                                                                                                              |
| reference    | Return the previous value of the question in the context of a [follow-up form](/forms/advanced-form-configuration/form-features-initial-follow-up-form-responses-comparative-form) |
| visible      | Returns whether the question is currently visible or not (This is available to use only if the question has a visibility formula configured)                                       |

**displayValue attribute**

This attribute returns the current value of the field as shown on the UI.

For example, if a question has a label configured for a particular value, then that label will be returned in the formula as shown below.

<figure><img src="/files/4stIVs9mCShDeGJGYDcq" alt=""><figcaption></figcaption></figure>

<figure><img src="/files/LX2qbOtYLOazrO8f3KUp" alt=""><figcaption></figcaption></figure>

For date questions it returns the date value as a formatted string, using the date format configured on the question.

<figure><img src="/files/d60uvNLioEqvpjXN9Pbv" alt=""><figcaption></figcaption></figure>

<figure><img src="/files/pYxzeyIvFJFRMDJtiF3O" alt=""><figcaption></figcaption></figure>

#### Section Attributes <a href="#section-attributes" id="section-attributes"></a>

These attributes are only available to sections.

<figure><img src="/files/j6lJY9UMp0rQGbuLl5R8" alt=""><figcaption></figcaption></figure>

| Attribute              | Purpose                                                                     |
| ---------------------- | --------------------------------------------------------------------------- |
| \_questionsCount       | Returns the number of visible questions that are inside the section         |
| \_questionsFilledCount | Returns the number of visible questions that have filled inside the section |
| index                  | Returns the index of the section if it a repeated section                   |

The API names of the questions inside the Section are also attributes of the Section.

If a Section is a Repeated Section, it will also have the <mark style="color:red;">`index`</mark> attribute, which returns its position in the Repeated element as shown below.

<figure><img src="/files/xa4lNMAOPNY5XIgMCFdv" alt=""><figcaption></figcaption></figure>

### Repeated Sections attributes

These attributes are only available to the Repeated Sections element.

<figure><img src="/files/FlF4djJX77JZ0m32kHN3" alt=""><figcaption></figcaption></figure>

| Attribute | Purpose                                          |
| --------- | ------------------------------------------------ |
| size      | Returns the number of sections added by the user |

The nested fields of the repeated sections can also be referenced. Follow [this documentation](/forms/form-sections-and-repeated-sections/sharinpix-form-formula-referencing-repeated-section-fields) to learn more.

#### Global form attributes <a href="#global-form-attributes" id="global-form-attributes"></a>

There are several global attributes that can be accessed by using the <mark style="color:red;">`form`</mark> keyword

<figure><img src="/files/d2Nd47l2bXv6pWR4CPcV" alt=""><figcaption></figcaption></figure>

| Attribute | Purpose                                                                                                                                                                                                                      |
| --------- | ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| compare   | Returns <mark style="color:red;">`true`</mark> when the form being filled is a follow-up form.                                                                                                                               |
| params    | Allows accessing the url params found in the url that was used to load the form. Follow [this documentation](/forms/advanced-form-configuration/sharinpix-forms-context-parameters) to learn more about this attribute.      |
| response  | Returns details of the SharinPix Form Response record. This can be used to show additional details on the [SharinPix Form PDF](/forms/form-pdf-configuration/sharinpix-forms-pdf-configuration).                             |
| template  | Returns details of the SharinPix Form Template record.                                                                                                                                                                       |
| view      | Returns <mark style="color:$danger;">`"print"`</mark> in the context of pdf. This is useful for hiding or show specific fields on the [SharinPix Form PDF](/forms/form-pdf-configuration/sharinpix-forms-pdf-configuration). |

**response attribute**

This attribute of the <mark style="color:red;">`form`</mark> global field contains nested attributes about a SharinPix Form Response record created by the form.

<figure><img src="/files/mPmBcnTA9KS3V0O6UeHw" alt=""><figcaption></figcaption></figure>

| Attribute | Purpose                                                |
| --------- | ------------------------------------------------------ |
| sfid      | The Salesforce Record ID linked to the form response   |
| sfname    | The Salesforce Record Name linked to the form response |

**template attribute**

This attribute of the <mark style="color:red;">`form`</mark> global field contains nested attributes about the SharinPix Form Template record.

<figure><img src="/files/ClRCGfNO9UQU6Px6DsIZ" alt=""><figcaption></figcaption></figure>

| Attribute | Purpose                |
| --------- | ---------------------- |
| sfid      | The Form Template ID   |
| sfname    | The Form Template Name |

**Root-level fields**

The questions found on the main page can also be referenced directly by using the <mark style="color:red;">`form`</mark> field as shown below.

<figure><img src="/files/f8Rh2hyQ6LrKIxWrzFKo" alt=""><figcaption></figcaption></figure>

{% hint style="success" %}
**Tips:**

This can be used to reference a root-level question from a nested formula field.
{% endhint %}


# Mobile App Configuration In Form Template Editor

In the [SharinPix Form Template Editor](/forms/form-elements/sharinpix-form-template-editor), the Capture element is more than just a capture media button. It serves as a fully configurable gateway to the SharinPix Mobile App’s camera features.

By configuring the Mobile App Settings, administrators can dictate exactly how the camera behaves when a user taps the capture button in a form. You can preset the camera mode (e.g., Scan, Video, RoomPlan), control hardware settings (Flash, Front/Back camera), and enforce tagging structures to organise images automatically as they are captured.

This documentation covers:

* [A guide on how to locate, add, and configure the Capture element within the Form Builder.](#accessing-mobile-app-configuration-how-to-locate-and-open-the-settings-within-the-form-builder)
* [Configure Mobile App for Other Media-Enabled Input Elements (Radio, Text, TextArea)](#configure-mobile-app-for-media-enabled-input-elements-radio-text-textarea)
* [A detailed breakdown of Configuration Parameters for the Mobile App.](#configuration-parameters)
* [Configure Capture element within Form Builder to fill PDF with Form Values.](#configure-capture-element-within-form-builder-to-fill-pdf-with-form-values)

### Accessing Mobile App Configuration: How to locate and open the settings within the Form Builder.

Follow these steps to configure the capture behaviour for a specific form element capture:

1. Create and open a new Form Template, this is better explained in [SharinPix Form template](/forms/form-elements/sharinpix-form-template-editor).&#x20;

* Open the Salesforce App Launcher.
* Search for **SharinPix Form Templates**.
* Click on the **SharinPix Form Templates** object.
* Create a new form template.

<figure><img src="/files/k51acvtE9JwX2UNejATO" alt=""><figcaption></figcaption></figure>

2. Add a Capture Element: From the elements sections, drag and drop the Capture element into your form layout.

<figure><img src="/files/AQ8LOOzBeDgrUjs391rE" alt=""><figcaption></figcaption></figure>

3. Access Configuration: Click on the Capture element you just added to select it. Look for the "Configure Mobile App" button (on the right) in the element properties panel.&#x20;

<figure><img src="/files/LU8JxlSVGYvwnwYcZfeF" alt=""><figcaption></figcaption></figure>

4. Define Settings: A configuration section will appear. Adjust the settings for Mode, Direction, Flash, Tags and others. More on the configuration is explained [below](#configuration-parameters).

<figure><img src="/files/iOhib8afwh5hXaLRFn5l" alt=""><figcaption></figcaption></figure>

5. Open the form on a mobile device (via universal link or deeplink), the different modes and configuration will be available upon opening the capture button.&#x20;

<figure><img src="/files/ICfTmeeWlxlzLBCB7i4j" alt=""><figcaption></figcaption></figure>

### Configure Mobile App for Media-Enabled Input Elements (Radio, Text, TextArea)

You can enable media capture directly on standard input fields to associate photos with specific data entries. These are the steps below:

1. Select an Input Element: Click on a Radio, Text, or TextArea element.

<figure><img src="/files/3Oa8KetcOomfy6quQY2t" alt=""><figcaption></figcaption></figure>

2. Enable Media: In the element properties panel, toggle "Enable media capture" to ON.

<figure><img src="/files/sUsXcDEj7BSEhry3XP69" alt=""><figcaption></figcaption></figure>

3. Configure: A "Configure Mobile App" button will appear immediately below the toggle. Click it to define the camera behavior for that specific field.

<figure><img src="/files/W8vCulMOsZMqxnq0KjH3" alt=""><figcaption></figcaption></figure>

{% hint style="warning" %}
**Note**:\
The configurations above will only work in the **SharinPix Mobile App** and **not in online mode**.
{% endhint %}

### Configuration Parameters

#### **1. Launch Behaviour**

These settings determine the camera's initial state when the user opens it.

<table data-header-hidden><thead><tr><th width="223.41796875">Paramters</th><th></th></tr></thead><tbody><tr><td><strong>Setting</strong></td><td><strong>Description</strong></td></tr><tr><td><a href="/spaces/5EvYRrLbUyvRh8o1jmMG/pages/r0iMoUAujh7YG1BDnP8c#mode">Mode</a></td><td><p>Defines which camera interface opens by default. </p><p>Options include:</p><p></p><p>• <strong>Camera:</strong> Standard photo capture.</p><p>• <strong>Roll:</strong> Opens the device gallery directly.</p><p>• <strong>System Cam:</strong> Uses the device's native OS camera.</p><p>• <strong>Scan:</strong> Opens the document scanning interface.</p><p>• <strong>Snap &#x26; Say:</strong> Captures an image while recording audio simultaneously.</p><p>• <strong>Room Plan:</strong> Opens the room scanning tool (iOS only).</p><p>• <strong>Video:</strong> Opens video recording mode.</p></td></tr><tr><td>Direction</td><td><p>Sets which camera lens is active upon launch:</p><p></p><p>• <strong>Back:</strong> The rear-facing main camera (default).</p><p>• <strong>Front:</strong> The selfie camera.</p></td></tr><tr><td>Flash</td><td><p>Controls the flash behaviour:</p><p></p><p>• <strong>Off:</strong> Flash disabled.</p><p>• <strong>On:</strong> Flash fires on every capture.</p><p>• <strong>Torch:</strong> The light remains on continuously (useful for dark environments).</p></td></tr><tr><td>Tags</td><td>Enter a list of tags separated by semicolons (e.g., <mark style="color:red;"><code>Kitchen;Bathroom;Bedroom</code></mark>). This creates a menu in the camera interface, allowing the user to select which "bucket" the photo belongs to before taking it.</td></tr><tr><td>Auto Tags</td><td>A list of tags that are permanently applied to every image captured in this session. These act as hidden system tags and cannot be removed by the user.</td></tr><tr><td>Default Tags</td><td>A specific tag from your <em>Tags</em> list that is pre-selected when the camera opens. Unlike <em>Auto Tags</em>, the user can remove or change this tag if it doesn't apply to the specific photo they are taking.</td></tr><tr><td>Aspect Ratio</td><td><p>Sets the camera's aspect ratio upon launch:<br><br>• <strong>3:4:</strong> Launches the camera in a 3:4 aspect ratio.</p><p>• <strong>9:16:</strong> Launches the camera in a 9:16 aspect ratio.</p></td></tr></tbody></table>

#### **2. Other Features**

<table data-header-hidden><thead><tr><th width="226.21875"></th><th></th></tr></thead><tbody><tr><td><strong>Permission</strong></td><td><strong>Description</strong></td></tr><tr><td>Show Compass</td><td>Adds a Compass Button to the camera interface. When clicked by the user, it toggles a directional compass overlay.</td></tr><tr><td>Allow different Mode Checkboxes</td><td><p>Checking these boxes adds the corresponding mode to the Mode Selection List on the mobile app. This allows users to manually switch between different capture types (e.g., switching from Camera to Scan) while using the app.</p><p></p><p>Available modes to allow/restrict include:</p><p></p><p>• <strong>Allow roll mode:</strong> Access to device gallery.</p><p>• <strong>Allow systemcam mode:</strong> Access to native OS camera.</p><p>• <strong>Allow scan mode:</strong> Access to document scanning.</p><p>• <strong>Allow snap and say mode:</strong> Access to audio-photo capture.</p><p>• <strong>Allow roomplan mode:</strong> Access to 3D room scanning.</p><p>• <strong>Allow video mode:</strong> Access to video recording.</p></td></tr><tr><td>Enable upload confirmation</td><td>Adds a verification step requiring the user to explicitly confirm medias before they are uploaded.</td></tr><tr><td>Enable image review</td><td>Displays each image immediately after it is captured. This allows the user to verify the quality and content of the photo on the spot; if the image is unsatisfactory, they can delete it and take another one before moving on.</td></tr><tr><td>Configure tools for annotation</td><td>Activates the annotation toolbar. Users can draw, sketch, or add text overlays to images immediately after capturing them.</td></tr></tbody></table>

{% hint style="warning" %}
**Note:**

More information about the different modes is explained in [Deeplink Syntax](/documentation/mobile-app/sharinpix-mobile-app-deeplink-syntax#mode).
{% endhint %}

### Configure Capture element within Form Builder to fill PDF with Form Values.

The following configuration allows prefilling a pdf with form values using the PDF Field Mapping configuration

#### **Creation of PDF**

1. To configure new or existing PDF, refer to [SharinPix PDF Form Builder](/documentation/lightning-web-component/sharinpix-pdf-form-builder)

#### **Creation of Form**

1. Create a form template, this is better explained in [SharinPix Form template](/forms/form-elements/sharinpix-form-template-editor)
2. Drag and drop a Capture Element from the elements section into your layout.
3. Add an **API Name** to the fields that you want your PDF to take values from.

<figure><img src="/files/d5gfLx6pArrLbhUA7tMR" alt=""><figcaption></figcaption></figure>

4. To create the **“Fill PDF”** button. Add a capture element and click on **Configure mobile app**

<figure><img src="/files/BJfoYZVad4XLufwof1X8" alt=""><figcaption></figcaption></figure>

5. Select **Fill in PDF** in the **Mobile App Action** section.
6. Paste the link you obtained from the PDF or use your existing PDF URL into the PDF URL section.

<figure><img src="/files/a7mlLOuBxSLWVyi1Vpq1" alt=""><figcaption></figcaption></figure>

In the **PDF Field Mapping** section, there are two fields : **PDF Field Name** and **Fill Value**.

1. The Field Name in the PDF Field Name section **should contain the Field Name configured in your PDF**.
2. Fill Value should be configured as follows:

* Fill Value should be configured with **api\_name.value**
* Date fields should be configured with **api\_name.displayValue**
* In cases where your form fields are in a section, the Fill Value should be configured as the API Name of the section followed by the API Name of the field.

<figure><img src="/files/c7eXT27rPtw4LNK5N7HP" alt=""><figcaption></figcaption></figure>

<figure><img src="/files/d5gfLx6pArrLbhUA7tMR" alt=""><figcaption></figcaption></figure>

<figure><img src="/files/67Mg3LNTH5G6VGbWccyZ" alt=""><figcaption></figcaption></figure>

After configuring, click on the back button and save your Form.

<figure><img src="/files/fvQoK5T9FKnNbTOvuQpa" alt="" width="518"><figcaption></figcaption></figure>

{% hint style="warning" %}
**Note:**

1. The Fill PDF feature is currently only supported for Text fields and checkboxes.
2. Number, Date fields on the form will be filled into a Text field in the PDF.
3. Form values will overwrite any value present in the field being prefilled in the PDF.
   {% endhint %}


# SharinPix Form - Section

## Overview

{% hint style="info" %}
Sections are powerful layout elements that help administrators organize forms into clear, logical groups of related fields. A section can be added to a form through the [SharinPix Form Template Editor](/forms/form-elements/sharinpix-form-template-editor).

This documentation covers :

1. [The configuration options of the Section Element](#configuration-options)
2. [How to add questions in Sections](#adding-questions-to-a-section)
3. [The different display styles of Sections](#section-styles)

{% endhint %}

<figure><img src="/files/xd6cLyUGU6lC8zoj18ov" alt=""><figcaption></figcaption></figure>

{% hint style="success" %}
Tips:

* Use Sections to break a form into clear, logical parts, such as **Personal Information** and **Inspection Details**.
* In longer forms, Sections make the layout easier to understand by grouping related fields and elements.
* **Sections** can be used to create Child Records on Salesforce. Refer to the documentation on [**Creation of Child Records With Form Sections**](/forms/form-sections-and-repeated-sections/create-child-records-with-form-sections) for more informatio&#x6E;**.**
  {% endhint %}

## Configuration Options

<figure><img src="/files/IuvCgTtDtc9PZn8EVWqn" alt=""><figcaption></figcaption></figure>

<figure><img src="/files/38cU7FsQKedSGNinxaS8" alt=""><figcaption></figcaption></figure>

### General Options

| Option                                                 | Description                                                                                          |
| ------------------------------------------------------ | ---------------------------------------------------------------------------------------------------- |
| Label                                                  | Name of the section displayed to users.                                                              |
| Label Formula                                          | Dynamically generate section titles based on values or conditions.                                   |
| API Name                                               | Unique identifier for referencing in logic or formulas.                                              |
| Edit Section                                           | Click to enter the section presented as a blank form template. Customize it by adding your elements. |
| Style                                                  | Choose a display style (e.g., Full Page/Collapsible/inline).                                         |
| PDF Answer Column Labels                               | Option to display column labels when rendering the form in PDF.                                      |
| Configure background color of the section title on PDF | Option to configure the background color of the section title in PDF.                                |

### Advanced Options

| Option                             | Description                                                                                                                                                                                               |
| ---------------------------------- | --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| Visible When                       | [Conditional visibility](/forms/form-elements/form-features-conditional-visibility) rule (show/hide based on formulas).                                                                                   |
| Pull data from a Salesforce record | Configuration for defining a mapping that will be used for prefilling the questions found inside the section using data from a Salesforce record.                                                         |
| Create a Salesforce record         | Configuration for creating a Salesforce record using data from the section. Refer to [this doc](/forms/form-sections-and-repeated-sections/create-child-records-with-form-sections) for more information. |
| External field mapping             | Option for specifying a question found in the section that will be used to store an external ID. This is useful for updating Salesforce records.                                                          |

## Adding questions to a section

To add questions to a section:

1. Click on the **Edit section** button on the Section element settings.

<figure><img src="/files/JY64ITgNm9e9yjOg3hsb" alt=""><figcaption></figcaption></figure>

2. In the section editor, use the left sidebar to add the elements you want to appear in that section.

<figure><img src="/files/CMBUL5HByBXaDhFsVBQz" alt=""><figcaption></figcaption></figure>

## Section Styles

A Section can be displayed in different styles. To configure the style of a Section element, use the **Style** option in the element’s settings.

<figure><img src="/files/CW7pyBsblcTzyjYJE1ji" alt=""><figcaption></figcaption></figure>

### Full Page&#x20;

The **Full Page** style is the default Section style. It displays the Section as a button. When the button is clicked, a new page opens and displays the elements contained within that Section. This is demonstrated below.

<figure><img src="/files/I8RinucEO9yA1DORdUV3" alt=""><figcaption></figcaption></figure>

The image below shows all navigation options available in a **Full Page** section.

<figure><img src="/files/2dqzHS3amY5qynb63rn8" alt=""><figcaption></figcaption></figure>

1. The **Exit Section** button closes the current section and returns the user to the parent **Full Page** section. If there is no parent section, the user is returned to the main form page.
2. The **Previous Section** button navigates to the previous **Full Page** section. If there is no previous section, it changes to a button that returns the user to the main form page.
3. The **Next Section** button navigates to the next **Full Page** section. If there is no next section, it changes to a button that allows the user to submit the form.
4. The **Navigation Menu** button opens the navigation menu.

The image below shows the navigation menu when opened.

<figure><img src="/files/j2FVkPVbRP27VAWcOJyw" alt=""><figcaption></figcaption></figure>

It displays a list of all **Full Page** sections in the form and highlights the current section. Click any section in the list to navigate to it.

{% hint style="warning" icon="triangle-exclamation" %}
The navigation buttons in the bottom bar and the navigation menu are available only when the form contains **Full Page** sections.
{% endhint %}

### Inline

The **Inline** style displays the Section directly within the current form page. Instead of opening on a new page, the Section appears as a grouped container with its fields shown inside it.

<figure><img src="/files/v3EgPVyeQ53qODVRZbPi" alt=""><figcaption></figcaption></figure>

{% hint style="success" %}
Tip:

This style is useful when you want to group related fields together while keeping them visible in the main form layout.
{% endhint %}

### Collapsible

The **Collapsible** style works like the **Inline** style by displaying the Section directly within the current form page. The difference is that a **Collapsible** Section can be expanded or collapsed, allowing users to show or hide the fields inside as needed.

<figure><img src="/files/KYjui9JxWTFa3au3zdWB" alt=""><figcaption></figcaption></figure>

## Demo: Building Inspection Form

The image below illustrates a form with an **Inline** section for general information and three **Full Page** sections for the building inspection. It also shows how users can use the navigation menu to open other page sections.

<figure><img src="/files/ZiN4aXVqQefy0BPqbvdL" alt=""><figcaption></figcaption></figure>


# SharinPix Form - Repeated Section

## Overview

{% hint style="info" %}
**Repeated Sections** allow administrators to define a section that users can add multiple times while filling out a form. This is useful when the same group of fields may need to be completed more than once, such as when recording deficiencies, assets, rooms, or inspection items.

Repeated Sections are configured in the [SharinPix Form Template Editor](/forms/form-elements/sharinpix-form-template-editor) and share the same core configuration options as standard **Sections**, including display styles and related behavior. For information about shared settings, refer to the [Section documentation.](/forms/form-sections-and-repeated-sections/sharinpix-form-sections-and-repeated-sections)

This documentation covers:

1. [Configuration options for the **Repeated Section** element](#configuration-options)
2. [How to set up a **Repeated Section** element](#configure-the-repeated-section)
3. [How to add default items](#default-repeated-sections)
4. [How to configure preset items](#preset-sections)
5. [Available actions for repeated section items](#repeated-section-item-actions)
6. [Demo: Air Conditioning Unit Inspection Form](#demo-air-conditioning-unit-inspection-form)
   {% endhint %}

<figure><img src="/files/FHcKFE8zTpZCYTzHAbC9" alt=""><figcaption></figcaption></figure>

<figure><img src="/files/JzlJ1hkYVCIR6VWS64cL" alt=""><figcaption></figcaption></figure>

{% hint style="success" %}
Tips:

* **Repeated Sections** are ideal for capturing multiple items of the same type, such as deficiencies, equipment, observations, or rooms.
* Use **Repeated Sections** to handle unknown quantities of input instead of pre-creating a fixed number of sections.
* **Repeated Sections** can be used to create child records in Salesforce. See [**Creation of Child Records With Form Sections**](/forms/form-sections-and-repeated-sections/create-child-records-with-form-sections).
* **Repeated Sections** can also pull, create, and update related Salesforce records. See [**Create and Update Related Salesforce Records with SharinPix Form**](/forms/salesforce-integration/create-and-update-related-salesforce-records-with-sharinpix-form).
  {% endhint %}

## Configuration Options

<figure><img src="/files/NkCLjdGAgsLk4rVMI6uA" alt=""><figcaption></figcaption></figure>

<figure><img src="/files/ETrFYCrxB7NPWTtqewnl" alt=""><figcaption></figcaption></figure>

### General Options

| Option                                              | Description                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                     |
| --------------------------------------------------- | --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| Label                                               | Defines the display name of the **Repeated Section** element in the form.                                                                                                                                                                                                                                                                                                                                                                                                                                       |
| Label Formula                                       | Dynamically generates the label of the **Repeated Section** element based on field values or defined conditions.                                                                                                                                                                                                                                                                                                                                                                                                |
| API Name                                            | Unique identifier for referencing the **Repeated Section** Element in logic or formulas.                                                                                                                                                                                                                                                                                                                                                                                                                        |
| Edit Section                                        | Opens the section template for the **Repeated Section** element, where you can add and configure the elements that make up each item.                                                                                                                                                                                                                                                                                                                                                                           |
| Style                                               | Defines how items in the **Repeated Section** element are displayed in the form, such as [**Full Page**](/forms/form-sections-and-repeated-sections/sharinpix-form-sections-and-repeated-sections#full-page), [**Collapsible**](/forms/form-sections-and-repeated-sections/sharinpix-form-sections-and-repeated-sections#collapsible), [**Inline**](/forms/form-sections-and-repeated-sections/sharinpix-form-sections-and-repeated-sections#inline), or [**Table**](/forms/form-elements/form-features-table). |
| Label for each item                                 | Defines the display label for each item within the **Repeated Section** element. This label is shown for every added item unless overridden by an item label formula.                                                                                                                                                                                                                                                                                                                                           |
| Label formula for each item                         | Uses a formula to dynamically generate the label for each item in the **Repeated Section** element. For example, <mark style="color:$danger;">`"Room " + TEXT(index)`</mark> will display labels such as **Room 1**, **Room 2**, and so on.                                                                                                                                                                                                                                                                     |
| Configure background color of repeated title on PDF | Allows you to define a custom background color for the **Repeated Section** title in the generated PDF.                                                                                                                                                                                                                                                                                                                                                                                                         |
| Configure background color of sections title on PDF | Allows you to define a custom background color for the title of every item in the **Repeated Section** element in the generated PDF.                                                                                                                                                                                                                                                                                                                                                                            |

### Advanced Options

| Option                                                  | Description                                                                                                                                                                                                                                                                                                                   |
| ------------------------------------------------------- | ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| item apiName                                            | Sets a unique identifier for the repeated item. It is used for referencing in logic or formulas.                                                                                                                                                                                                                              |
| Use full width                                          | This option removes the width constraint when displaying the **Repeated Section** element on the form.                                                                                                                                                                                                                        |
| Sortable                                                | Allows item reordering with drag and drop                                                                                                                                                                                                                                                                                     |
| Allow add sections when (formula)                       | Uses a formula to control whether users can add new items to the **Repeated Section** element. By default, adding items is allowed. If a formula is provided, it must return a Boolean value. Users can add items only when the formula evaluates to **true**.                                                                |
| Allow delete sections when (formula)                    | Uses a formula to control whether users can delete items from the **Repeated Section** element. By default, deleting items is allowed. If a formula is provided, it must return a Boolean value. Users can delete items only when the formula evaluates to **true**.                                                          |
| Enable duplication of sections                          | Allows you to configure when users can duplicate items in the **Repeated Section** element. This option uses a formula, and duplication is enabled only when the formula returns **true**.                                                                                                                                    |
| Visible When                                            | [Conditional visibility](/documentation/sharinpix-form/form-features-conditional-visibility) rule (show or hide the **Repeated Section** element and any item added based on a formula)                                                                                                                                       |
| Validation rule                                         | Defines the [validation criteria](/forms/form-elements/form-features-validations) that the **Repeated Section** element must satisfy. This can be used to enforce conditions on the collection of items. For example, <mark style="color:$danger;">`rooms.size > 3`</mark> ensures that more than three room items are added. |
| Preserve value from previous submissions when (formula) | Uses a formula to determine whether previously entered item values are kept when the form is relaunched. By default, values from previous submissions are preserved. If a formula is provided, it must return a Boolean value, and previous values are preserved only when the formula evaluates to **true**.                 |
| Pull data from a Salesforce record                      | Configuration for defining a mapping that will be used for prefilling the questions found inside the section using data from a Salesforce record.                                                                                                                                                                             |
| Create a Salesforce record                              | Configuration for creating Salesforce child records using data from each of section items. Refer to [this documentation](/forms/form-sections-and-repeated-sections/create-child-records-with-form-sections) for more information.                                                                                            |
| External field mapping                                  | Option for specifying a question found in the template section that will be used to store an external ID. This is useful for updating Salesforce records.                                                                                                                                                                     |

## Configure the Repeated Section

Each item in **Repeated Section** is based on a **Section Element** template.

To configure the **Section Element:**

1. Click on the **Edit section** button on the **Repeated Section** element settings.

<figure><img src="/files/DsapKa9Hs8zHpCuUljIA" alt=""><figcaption></figcaption></figure>

2. In the section editor, use the left sidebar to add the elements you want to appear in every section item.

<figure><img src="/files/eNsJvvtmsUm39yfkgkvV" alt=""><figcaption></figcaption></figure>

The image below shows a **Repeated Section** element configured using the section template above.

<figure><img src="/files/dO1EIHbsOwV87HfC7Y39" alt=""><figcaption></figcaption></figure>

## Default Repeated Sections

You can configure **default repeated items** for a **Repeated Section** element so that one or more items are already available when the form opens.

To configure default items, open the **Default** tab in the **Repeated Section** element settings and click the **+** button to add a default item.

<figure><img src="/files/f6d6jfXoLtIixwDl16a7" alt=""><figcaption></figcaption></figure>

<figure><img src="/files/WO5TVIyZM6Jl8YlnRnwx" alt=""><figcaption></figcaption></figure>

The image above shows a **Repeated Section** element with two default room items added.

## Preset Sections

**Preset Sections** allow you to define pre-configured sections or items that users can choose from when adding a new item to a **Repeated Section** element. Instead of adding a blank item, users select from a list of preset options, and the new item is added with the predefined values and structure.

You can configure preset items from the **Presets** tab in the **Repeated Section** element settings. Click the **+** button to add a preset item, then define its label and default values.

<figure><img src="/files/XlC4yAqDJFFXjvlMoTje" alt=""><figcaption></figcaption></figure>

The images below illustrate two preset items configured for the **Repeated Section** element, labeled "Kitche&#x6E;**"** and "Bedroo&#x6D;**"** each having a different having for the **Name** field.

<figure><img src="/files/V304t1mcqvXozfGq7zF3" alt=""><figcaption></figcaption></figure>

When preset items are configured, the **+** button becomes a picklist showing the available presets. Selecting a preset adds the corresponding pre-configured item to the **Repeated Section** element.

<figure><img src="/files/TTWJugqBDX9ags4LO7B3" alt=""><figcaption></figcaption></figure>

### Preset Configuration Options

| Option       | Description                                                                             |
| ------------ | --------------------------------------------------------------------------------------- |
| Label        | Sets the label of the preset item as it appears in the **Add** button picklist.         |
| Visible when | Uses a formula to control when the preset item is shown in the **Add** button picklist. |

## Repeated Section Item Actions

The image below illustrates the available actions for individual items in a **Repeated Section** element.

<figure><img src="/files/zRECYbuSSvky3iW1Rrmt" alt=""><figcaption></figcaption></figure>

1. The **Delete item** action removes the selected item from the **Repeated Section** element. Deleting items is enabled by default, but it can be controlled using the **Allow delete sections when (formula)** setting.<br>
2. The **Reorder item** action allows users to change the order of items in the **Repeated Section** element. Users can click and drag the reorder handle next to an item to move it to a new position. This action is available when the **Sortable** option is enabled.<br>
3. The **Duplicate item** action creates a copy of the selected item, including its current values. This action can be controlled using the **Enable duplication of sections** setting.

{% hint style="warning" %}
The **Duplicate item** action does not duplicate images.
{% endhint %}

## Demo – Air Conditioning Unit Inspection Form

The image below shows a form configured with a **Repeated Section** element for recording multiple air conditioning units inspected within a building. The section or item template includes fields such as **Unit Number**, **Location of Unit**, **Any Leaks Detected**, and **Maintenance Performed If Any**, and is displayed using the **Inline** style. Two preset items have also been configured, **Small Unit** and **Big Unit**, each with its own predefined values.

<figure><img src="/files/Zg5w8ykn8GrE0oRhEZJn" alt=""><figcaption></figcaption></figure>

The image below shows how air conditioning unit items can be added on the **Repeated Section** element using the **+** button.

<figure><img src="/files/QwFvEeRhfiM4oYX2hRyb" alt=""><figcaption></figcaption></figure>


# SharinPix Form Formula: Referencing Repeated Section Fields

## Overview

{% hint style="info" %}
The Repeated Section question can be used to add any number of pre-defined sections when filling out a form. Each added section can contain its own set values which can be referenced inside formula fields.

This article covers the following:

* [Referencing Repeated Section Fields](#referencing-repeated-section-fields)
* [Demo: Displaying Comments Field Based on Broken Item Count](#demo-displaying-comments-field-based-on-broken-item-count)
  {% endhint %}

## Getting Started

### Referencing Repeated Section Fields

To reference a nested question from a repeated section in a formula field, use:

<mark style="color:$danger;">`<RepeatedQuestionApiName>.<NestedQuestionApiName>`</mark>

The above expression returns a **list** of all <mark style="color:$danger;">`<NestedQuestionApiName>`</mark> values.

#### Example:

Consider a repeated section with API name <mark style="color:$danger;">`RoomItems`</mark> with a nested question having API name <mark style="color:$danger;">`Status`</mark>

![](/files/Vi7u4IzupbBNfA4M11EL)

![](/files/EpQz7wSeuKElXgWDYd7k)

In a formula field, you can reference the nested <mark style="color:$danger;">`Status`</mark> field as shown below:

![](/files/7vvtKVi2NfW7H3nOY2sO)

Because <mark style="color:$danger;">`Status`</mark> is inside the <mark style="color:$danger;">`RoomItems`</mark> repeated section, <mark style="color:$danger;">`RoomItems.Status`</mark> returns a **list of values** – one value for each added *Room Item*

<mark style="color:$danger;">`RoomItems.Status`</mark> will return <mark style="color:$danger;">`['Dirty', 'Clean', 'Broken']`</mark> for the *Room Items* below:

![](/files/uXDIZxmtoCDL04mkKBEd)

## Demo: Displaying Comments Field Based on Broken Item Count

This example demonstrates referencing a repeated section field in a formula field within a Room Inspection example. If two or more items are broken, an additional required question will be visible to provide more information on the damage and follow-up actions required.

The diagram below shows a *text area* question configured with a visibility formula. This question is configured to be visible when two or more *Room Items* have *Status* "Broken"

The formula uses the <mark style="color:$danger;">`COUNTMATCHES`</mark> function to count the number of times the value <mark style="color:$danger;">`"Broken"`</mark> is found in the list returned by <mark style="color:$danger;">`RoomItems.Status`</mark>.

![](/files/yCBJQncvQ3xch6V1KIak)

The diagram below shows the form filled with only one broken *Room Item.*

![](/files/VT6QJj32dbVTgBI9dWU6)

The diagram below shows the form with the *text area* question visible once a second broken *Room Item* is added.

![](/files/mdO9lIM2ZaZrSQ2PnSnh)


# Create Child Records With Form Repeated Section & Section

## Overview

{% hint style="info" %}
In SharinPix Forms, every form response is directly linked to a **parent record**, which represents the object from which the form was initially launched. Beyond capturing information for the parent, the platform also provides the flexibility to create **child records** associated with it.

For example, if the parent record is an **Account**, the form can generate multiple **Contact** records linked to that account. This is achieved through form sections: each section can be mapped to a single child record. In cases where repeated sections are used, each repetition creates a new record—so if a user completes 10 repeated sections, 10 corresponding child records (e.g., Contacts) will be created.

This feature ensures that SharinPix Forms not only capture structured data but also seamlessly extend Salesforce’s relational model, making it easier to manage and organize information.

This article covers the following:

* [Configure sections on your Form Template to create child records for Template parent object.](#how-to-configure-sections-on-your-form-template-to-create-child-records-for-template-parent-object)
* [Creating multi-level records with nested repeated sections](#creating-multi-level-records-with-nested-repeated-sections)
  {% endhint %}

{% hint style="warning" %}
**Prerequisite:**

Before using this feature, ensure:

* You are using the most recent version of the SharinPix Package. Follow this document to [*upgrade the SharinPix package*](/faqs/how-to-update-sharinpix-package-from-the-appexchange)
* Users must have the **SharinPix Forms** **Admin** or **SharinPix Forms User** permission set assigned. For more information on these two permission sets, check [SharinPix Permission Sets](/documentation/access-and-security/sharinpix-permission-sets).
  {% endhint %}

## Getting Started

### How to configure sections on your Form Template to create child records for Template parent object

The first step is to **create and configure a section** that will serve as the basis for generating the child record — or multiple records if it is set up as a repeated section.

![](/files/70eKzQs6ByknJKDkY1kg)

Each section of the form includes an **Advanced** tab configuration in which you will find **Salesforce Record Mapping**.\
This configuration is divided into three key parts:

1. **Child Object API Name** – specifies the Salesforce object to be created.
2. **Lookup API Name** – defines the lookup field on the child object that links it to the form’s parent record.
3. **Formula Condition** – determines the criteria under which the child record(s) should be created.

<figure><img src="/files/aH4oODWuCuAQY1xbGhQG" alt=""><figcaption></figcaption></figure>

Once the child object details have been configured, you can define how data from the form will populate Salesforce fields. Click the **“+”** icon to add new mappings, each representing a link between a **form field** and its corresponding **Salesforce field**. This ensures that when a form response is submitted, the captured data is accurately updated in the appropriate fields within the newly created child record.

![](/files/aVrmZEDfxzQhE49hXfVs)

A dropdown list containing all **Form Question API Names** from the current section will be available for selection. After choosing a question, enter the corresponding **Salesforce Field API Name** of the child record to which the selected question should be mapped.

<figure><img src="/files/6Ds2Ig5bP5uZaMKOV7Sg" alt=""><figcaption></figcaption></figure>

As shown in the picture above, the "Inspection Checklist" section has been configured to create Fire Inspection records with 2 fields to input:

1. [Fire extinguishers present ?](https://documentation-dev-ed.develop.lightning.force.com/lightning/setup/ObjectManager/01IfJ000001bh2D/FieldsAndRelationships/00NfJ00000Ill2j/view)
2. [Last date fire extinguisher serviced](https://documentation-dev-ed.develop.lightning.force.com/lightning/setup/ObjectManager/01IfJ000001bh2D/FieldsAndRelationships/00NfJ00000IliGA/view)

On the **Inspection** record page, when a SharinPix Form is launched, completed, and submitted, a corresponding **Form Response** is created in Salesforce. If the *Create Records* condition evaluates to **true**, a new child record is automatically generated and linked to the **Inspection** record. This relationship can then be viewed under the **Fire Inspection** related list.

<figure><img src="/files/9JAEAtLIDKjkY4J3GpS9" alt=""><figcaption></figcaption></figure>

The corresponding values are then automatically populated in the newly created child record — **Fire Inspection** in this example as illustrated below.

<figure><img src="/files/G8CHA0NkFpW8wWRdEv6J" alt=""><figcaption></figcaption></figure>

### Creating multi-level records with nested repeated sections

You can create child records in a nested tree structure. By configuring your Form Repeated Sections in a nested tree structure, for example, Contact -> Case

To build a form with nested repeated sections representing each object, follow these steps:

1. **Define the Parent and Child Objects**:

   * Start by defining the primary object, such as **Contact**, as the parent record.
   * Next, introduce the **Case** as a child record under the Account.
   * This can go on and continue for child objects of Case, etc.

   By following these steps, you can efficiently set up a form that handles multi-level data structures in a coherent manner.

<figure><img src="/files/Ce6KSbjk4YVuXmQkCHKq" alt=""><figcaption></figcaption></figure>

The picture above showcases how a simple form containing 2 repeated sections is built.

At the root, we have 2 Form Questions:

* Inspector name: Text question
* Contacts: Repeated Section configured to create contacts from the parent object (Account in this example)

Inside the Repeated Section Contacts, we have 3 questions:

* Last name: Text question representing the LastName of the contact child record being created
* First name: Text question representing the FirstName of the contact child record being created
* Cases: Repeated Section configured to create cases from its corresponding contact parent object&#x20;

<figure><img src="/files/cvnD9cOTxdiboeJaQkUL" alt=""><figcaption></figcaption></figure>

The picture above illustrates the completed form. It shows two contact sections: one for Thorne, which includes two Case child records for Contact Thorne, and another for Vance, which contains one Case child record.

Once the form is submitted (from an Account record in our scenario) it will create 2 contacts **Julian Thorne** and **Elena Vance.**

Contact Julian Thorne will have two Case records, and Elena Vance will have one Case record, as shown in the picture below.

<figure><img src="/files/mcNi74pfFHfKWGiAwxYO" alt=""><figcaption></figcaption></figure>

{% hint style="info" %}
In summary, the above example demonstrates how to efficiently create multiple levels of related records within a form. By utilizing nested Repeated Sections, you can streamline the process of associating child records with parent records, enhancing data organization. You can create child records nested deeper than 2 levels (Contacts -> Cases) as needed to suit your data hierarchy requirements.
{% endhint %}

{% hint style="warning" %}
**Warning:**

There is no limit on the number of nested Repeated Sections creating records. But beware that this will increase your organization's [governor limit for DML operations](https://developer.salesforce.com/docs/atlas.en-us.salesforce_app_limits_cheatsheet.meta/salesforce_app_limits_cheatsheet/salesforce_app_limits_platform_apexgov.htm#:~:text=Total%20number%20of%20DML%20statements%20issued2) for each nested level
{% endhint %}


# Record Datasets

## Overview

A **record dataset** is a set of Salesforce records made available to SharinPix.

It is stored on the SharinPix Amazon S3 bucket or on your own S3 bucket, if configured.

Record datasets can be used in integrations with SharinPix features. For example, they can be used in [SharinPix Forms to populate a dynamic picklist](/forms/form-elements/form-features-use-dynamic-salesforce-data-with-record-datasets).

To keep the data up to date, datasets can be refreshed periodically to reflect changes in Salesforce, such as record updates or deletions. This is typically done through automation, such as a scheduled Flow or a record-triggered Flow.

This article explains how to create a record dataset.

It covers:

1. [How to Create a Record Dataset](#how-to-create-a-record-dataset)
   1. [Flow Input Parameters](#flow-input-parameters)
   2. [Flow Configuration Guide](#flow-configuration-guide)
      1. [Step 1: Configure a Schedule-Triggered Flow](#step-1-configure-a-schedule-triggered-flow)
      2. [Step 2: Retrieve the list of Site records](#step-2-retrieve-the-list-of-site-records)
      3. [Step 3: Add a Wait Element](#step-3-add-a-wait-element)
      4. [Step 4: Add the Action to Export the Dataset](#step-4-add-the-action-to-export-the-dataset)

{% hint style="warning" %}
**Prerequisites**

Before configuring this automation, ensure the following:

* You have the latest **SharinPix Package** installed. This feature requires version **1.394** or later. You can follow [this guide](https://docs.sharinpix.com/faqs/how-to-update-sharinpix-package-from-the-appexchange) to upgrade your SharinPix Managed Package.
* Users must have the **SharinPix Forms Admin** permission set. For more information, see [SharinPix Permission Sets](https://docs.sharinpix.com/documentation/access-and-security/sharinpix-permission-sets).
  {% endhint %}

## How to Create a Record Dataset

In Salesforce, a record dataset can be created and updated automatically using the `CsvExportAutomation` Apex action.

This action accepts three inputs:

* a list of Salesforce records
* a dataset name
* whether to enable offline access

It uses the provided records to generate the dataset, creates or updates the corresponding dataset in SharinPix, and uploads it automatically.

It is intended for use in Flows that collect Salesforce records and send them to SharinPix as a record dataset.

### Flow Input Parameters

Below are the inputs required when using the `CsvExportAutomation` invocable action in a Salesforce Flow. These values are required to export the dataset successfully.

<table data-header-hidden><thead><tr><th width="176.8125"></th><th width="389.7109375"></th><th></th></tr></thead><tbody><tr><td><strong>Parameter</strong></td><td><strong>Description</strong></td><td><strong>Required/Optional</strong></td></tr><tr><td>records</td><td>List of Salesforce records to export.</td><td>Required</td></tr><tr><td>datasetName</td><td>Name of the dataset to create or update. Must be 3 to 20 characters long and may contain letters, numbers, and underscores only. Spaces are not allowed.</td><td>Required</td></tr><tr><td>prime</td><td>Make this records dataset available offline on the SharinPix Mobile App.</td><td>Required</td></tr></tbody></table>

### Flow Configuration Guide

This example uses the `CsvExportAutomation` Apex action in a scheduled Flow. The Flow retrieves a list of `Site__c` records with selected fields every week and updates the corresponding dataset in SharinPix. If the dataset does not exist yet, it is created the first time the Flow runs.

#### Step 1: Configure a Schedule-Triggered Flow

1. Go to **Setup** > **Flows** > Click **New Flow**
2. Choose **Scheduled Automations** > **Scheduled-Triggered Flow**

<figure><img src="/files/wmrsXuT2s9XKhTGhcBG5" alt=""><figcaption></figcaption></figure>

Set the start date, time, and frequency at which you want the Flow to run. For this example, the Flow is scheduled to run on a **weekly** basis.

<figure><img src="/files/B9lERWis3LItzuNWeA60" alt=""><figcaption></figcaption></figure>

#### Step 2: Retrieve the list of Site records

Add a **Get Records** element to retrieve the records from the custom `Site__c` object that you want to include in the dataset. You can filter the records in any way that fits your use case.

For our example, we will configure it as follows:

| Setting                   | Example Value                                                            |
| ------------------------- | ------------------------------------------------------------------------ |
| Label                     | Get Site Records                                                         |
| API Name                  | Get\_Site\_Records                                                       |
| Object                    | Site\_\_c                                                                |
| Filter Conditions         | None — retrieve all records, or define conditions based on your use case |
| How Many Records to Store | All records                                                              |
| How to Store Record Data  | Choose fields and let Salesforce do the rest                             |
| Fields to Store           | `Name`, `SiteAddress__c`, `SiteArea__c`, `SiteType__c`                   |

<figure><img src="/files/2p6uzfM5tY8KBzJvtovE" alt=""><figcaption></figcaption></figure>

{% hint style="danger" %}
**Warning**

It is also subject to Salesforce limits. The maximum number of records that can be exported in a single execution depends on how many fields are retrieved and how much data is included in each record.

As a reference, exporting up to **3,000** records is supported when using all fields. In some cases, more records can be exported if fewer fields are selected.

To optimize performance, we strongly recommend selecting only the fields required for the export rather than all available fields.
{% endhint %}

{% hint style="warning" %}
**Offline storage**

Setting **Enable Offline Access** to `True` stores the dataset on users' devices. Ensure each device has sufficient free storage before enabling offline access.

Users must open the form while online at least once. The app downloads the dataset during this first load. They can then use the form offline.
{% endhint %}

#### Step 3: Add a Wait Element

Add a **Wait for Amount of Time** element before the Apex action when required, as schedule-triggered Flows may not support callouts directly without it.

Configure the element as follows:

| Parameter                            | Example Value   |
| ------------------------------------ | --------------- |
| **Label**                            | Wait 1 Minute   |
| **API Name**                         | wait            |
| **Amount of Time**                   | Set to 1 Minute |
| **Resume at a specific time of day** | Leave unchecked |

This ensures the Flow pauses briefly before executing the `CsvExportAutomation` Apex action, allowing callouts to be performed successfully.

For more details, refer to the Salesforce documentation on [Schedule-Triggered Flow Considerations](https://help.salesforce.com/s/articleView?id=platform.flow_considerations_trigger_schedule.htm\&type=5).

<figure><img src="/files/LkLI7XWFJqpFaAMhrzyi" alt=""><figcaption></figcaption></figure>

#### Step 4: Add the Action to Export the Dataset

1. Add an **Action** element
2. Search for `Sharinpix__CsvExportAutomation`
3. In the action modal for `Sharinpix__CsvExportAutomation`, populate the fields as shown below:

| Field                          | Example Value                 |
| ------------------------------ | ----------------------------- |
| Enable Offline Access          | False                         |
| Object for "Records" (input)\* | `Site__c`                     |
| Records                        | Sites from `Get Site records` |
| Records Dataset Name           | Sites                         |

\*The object selected for **Object for "Records"** must match the object used in the **Get Records** element.

<figure><img src="/files/GPBw4dssqNOoJ5imkqnQ" alt=""><figcaption></figcaption></figure>

Click **Save** and **Activate** the Flow.

<figure><img src="/files/8BZ88RxrP1d0zAET9BwG" alt=""><figcaption></figcaption></figure>

{% hint style="warning" %}
**Important**

If you receive an error indicating that the remote endpoint is not authorized, it means the required **Remote Site Setting** for the dataset upload endpoint has not yet been created in your Salesforce organization.

You may receive an error message such as:

` An Apex error occurred: sharinpix.SharinPixException: Unauthorized endpoint, please check Setup->Security->Remote site settings. endpoint =`` `` `**`<url>`**

To resolve this, create a **Remote Site Setting** in Salesforce for the endpoint URL returned in the error message, then execute the Flow again. This configuration is only required once per organization.
{% endhint %}


# SharinPix Form Response

Understand what the Form Response object stores and what each core field is used for.

## Overview

**SharinPix Form Response** stores each SharinPix Form submission in Salesforce.

You can use this object to review submitted data, access generated files such as PDFs, associate the response with a Salesforce record, and use the response in Salesforce automation.

Typical use cases include:

* [Reopening a previously submitted form to review or modify it.](/forms/salesforce-integration/reopen-a-previously-submitted-sharinpix-form)
* [Comparing a new submission with a previous one.](/forms/advanced-form-configuration/form-features-initial-follow-up-form-responses-comparative-form)
* [Exporting the response as a PDF](/forms/form-pdf-configuration/import-form-pdf-to-album-using-flow-admin-oriented).

{% hint style="warning" %}
**Prerequisites**

* Make sure you have the **latest** **SharinPix Package Version** Installed. Refer to [*this documentation*](/faqs/how-to-update-sharinpix-package-from-the-appexchange) to update your package.
* To access **SharinPix Form Response**, users must have the **SharinPix Forms Admin** or **SharinPix Forms User** permission set assigned. For more information, see [SharinPix Permission Sets](https://docs.sharinpix.com/documentation/access-and-security/sharinpix-permission-sets).
  {% endhint %}

## Fields & Relationships

The following fields and relationships are the main ones used on **SharinPix Form Response**.

<table><thead><tr><th width="186.78515625">Field Name</th><th>Details</th></tr></thead><tbody><tr><td>Form Response Number</td><td><ul><li><strong>API Name:</strong> <code>Name</code></li><li><strong>Type:</strong> Auto Number</li><li><strong>Description:</strong> The Form Response number assigned to this particular SharinPix Form Response. (System-generated ID assigned during creation).</li></ul></td></tr><tr><td>Public ID</td><td><ul><li><strong>API Name:</strong> <code>sharinpix__PublicId__c</code></li><li><strong>Type:</strong> Text(255) (External ID) (Unique Case Sensitive)</li><li><strong>Description:</strong> Unique external identifier used to reference a SharinPix Form Response.</li></ul></td></tr><tr><td>Parent Record ID</td><td><ul><li><strong>API Name:</strong> <code>sharinpix__ParentRecordId__c</code></li><li><strong>Type:</strong> Text</li><li><strong>Description:</strong> Stores the Salesforce record ID from which the SharinPix Form was launched.</li></ul></td></tr><tr><td>Parent Record</td><td><ul><li><strong>API Name:</strong> <code>sharinpix__ParentRecord__c</code></li><li><strong>Type:</strong> Formula (Text)</li><li><strong>Description:</strong> Links to the Salesforce record associated with the SharinPix Form Response.</li></ul></td></tr><tr><td>Form Response Data URL</td><td><ul><li><strong>API Name:</strong> <code>sharinpix__FormResponseDataURL__c</code></li><li><strong>Type:</strong> URL(255)</li><li><strong>Description:</strong> Stores the submitted form response data, including images.</li></ul></td></tr><tr><td>PDF URL</td><td><ul><li><strong>API Name:</strong> <code>sharinpix__PdfUrl__c</code></li><li><strong>Type:</strong> URL(255)</li><li><strong>Description:</strong> URL of the generated PDF version of the submitted form.</li></ul></td></tr><tr><td>Comparative PDF URL</td><td><ul><li><strong>API Name:</strong> <code>sharinpix__ComparativePdfUrl__c</code></li><li><strong>Type:</strong> URL(255)</li><li><strong>Description:</strong> Stores the URL of the comparative PDF generated to compare the current Form Response with the previously submitted response.</li></ul></td></tr><tr><td>Records Created At</td><td><ul><li><strong>API Name:</strong> <code>sharinpix__RecordsCreatedAt__c</code></li><li><strong>Type:</strong> Date/Time</li><li><strong>Description:</strong> Stores the date and time when all child records associated with the form response were created.</li></ul></td></tr><tr><td>Fields Synced At</td><td><p></p><ul><li><strong>API Name:</strong> <code>sharinpix__FieldsSyncedAt__c</code></li><li><strong>Type:</strong> Date/Time</li><li><strong>Description:</strong> Stores the date and time when the fields configured for Salesforce synchronization were synced.<br>This helps confirm that the form data has been fully synced to Salesforce.</li></ul></td></tr><tr><td>Started At</td><td><ul><li><strong>API Name:</strong> <code>sharinpix__StartedAt__c</code></li><li><strong>Type:</strong> Date/Time</li><li><strong>Description:</strong> Stores the date and time when the user started filling out the SharinPix Form.</li></ul></td></tr><tr><td>Submitted At</td><td><ul><li><strong>API Name:</strong> <code>sharinpix__SubmittedAt__c</code></li><li><strong>Type:</strong> Date/Time</li><li><strong>Description:</strong> Stores the date and time when the user submitted the SharinPix Form.</li></ul></td></tr><tr><td>Image Synced At</td><td><ul><li><strong>API Name:</strong> <code>sharinpix__ImageSyncedAt__c</code></li><li><strong>Type:</strong> Date/Time</li><li><strong>Description:</strong> Stores the date and time when all images attached to the form response were uploaded to SharinPix and synced to Salesforce.</li></ul></td></tr><tr><td>ProcessedAt</td><td><ul><li><strong>API Name:</strong> <code>sharinpix__ProcessedAt__c</code></li><li><strong>Type:</strong> Date/Time</li><li><strong>Description:</strong> Stores the date and time when all answers for the SharinPix Form Response were created.</li></ul></td></tr><tr><td>User</td><td><ul><li><strong>API Name:</strong> <code>sharinpix__User__c</code></li><li><strong>Type:</strong> Lookup(User)</li><li><strong>Description:</strong> The ID of the Salesforce user who created the SharinPix Form template from which this response was submitted.</li></ul></td></tr><tr><td>Submitted By</td><td><ul><li><strong>API Name:</strong> <code>sharinpix__SubmittedBy__c</code></li><li><strong>Type:</strong> Lookup(User)</li><li><strong>Description:</strong> The ID of the Salesforce user who submitted the SharinPix Form Response, based on the user ID included in the SharinPix Form URL.</li></ul></td></tr><tr><td>SharinPix Form Template</td><td><ul><li><strong>API Name:</strong> <code>sharinpix__FormTemplate__c</code></li><li><strong>Type:</strong> Lookup(SharinPix Form Template)</li><li><strong>Description:</strong> The SharinPix Form Template linked to the current Forrm Response.</li></ul></td></tr><tr><td>Previous Form Response</td><td><ul><li><strong>API Name:</strong> <code>sharinpix__PreviousFormResponse__c</code></li><li><strong>Type:</strong> Lookup(SharinPix Form Response)</li><li><strong>Description:</strong> ID of the previously submitted SharinPix Form Response that was reopened or reused to create the current response.</li></ul></td></tr><tr><td>Error Messages</td><td><ul><li><strong>API Name:</strong> <code>sharinpix__ErrorMessages__c</code></li><li><strong>Type:</strong> Long Text Area(32768)</li><li><strong>Description:</strong> Stores errors that occurred while processing the SharinPix Form Response.</li></ul></td></tr></tbody></table>

## Custom fields and relationships

You can add your own lookup fields on **SharinPix Form Response** to link responses to a parent object such as an Account, Case, or a custom object. This setup is useful when you want to show related responses on a parent record.

See [Setup Custom Lookup For SharinPix Form Response](/forms/salesforce-integration/sharinpix-form-response/setup-custom-lookup-for-sharinpix-form-response) for setup steps.

## Related documentation

* [Reopen A Previously Submitted SharinPix Form](/forms/salesforce-integration/reopen-a-previously-submitted-sharinpix-form)
* [Form Features - Initial/Follow-up Form Responses (Comparative Form)](/forms/advanced-form-configuration/form-features-initial-follow-up-form-responses-comparative-form)
* [Import Images from Form Response to Parent Object (Admin-Oriented)](/forms/salesforce-integration/import-images-from-form-response-to-parent-object-admin-oriented)
* [Import Form PDF as Content Document using Flow (Admin-Oriented)](/forms/form-pdf-configuration/import-form-pdf-as-content-document-using-flow-admin-oriented)
* [Import Form PDF to Album using Flow (Admin-Oriented)](/forms/form-pdf-configuration/import-form-pdf-to-album-using-flow-admin-oriented)


# Setup Custom Lookup For SharinPix Form Response

## Overview

{% hint style="info" %}
In this article, we will demonstrate how to setup the SharinPix Form Response Sync. To do so we will:

1. [Create a lookup relationship field on the SharinPix Form Response object](#creation-of-a-lookup-relationship-field)
2. [Configure the SharinPix Form Response Setting custom metadata](#configure-the-custom-metadata)
   {% endhint %}

{% hint style="warning" %}
**Prerequisite:**

* The **SharinPix Form Response Sync Setting** component works alongside the **SharinPix Form** feature. Therefore, before configuring this Sync Settin&#x67;**,** ensure that the **SharinPix Form** feature has been configured properly. For more information on how to configure the SharinPix Form, please refer to the following article: [SharinPix Form](/documentation/sharinpix-form/sharinpix-forms)
* The SharinPix Package with version **1.340** (or later) should be installed; refer to the article below to upgrade your current package:  [How to upgrade SharinPix package](/faqs/how-to-update-sharinpix-package-from-the-appexchange)
* The **SharinPix Forms Admin** or **SharinPix Forms User** permission set should be assigned to all users to ensure they have the right to create, edit, and delete the SharinPix Form Response record through the SharinPix Form Response Sync Setting. For more information on these two permission sets, check [SharinPix Permission Sets](/documentation/access-and-security/sharinpix-permission-sets).
  {% endhint %}

## Creation of a Lookup Relationship Field

Depending on the Object you want to use SharinPix Form Response Sync on, you must create a lookup relationship field on the SharinPix Form Response Object which links to the parent object. This demo will make use of the **SharinPix Visit** object.&#x20;

Follow the steps below:

* Go to **Setup,** then access **Object Manager**
* Type form in the search bar, press Enter, and click **SharinPix Form Response**&#x20;
* On the left menu, click on **Fields and Relationships** and then click on **New**

For the new field:

* Select **Lookup Relationship** as **Data Type** then click **Next**
* For the field **Related To**, select **SharinPix Visit** then click **Next**

<figure><img src="/files/F6Rd2RW0LFkshYOEO0Np" alt=""><figcaption></figcaption></figure>

* On the next page, the field **Field Label** will be auto-populated
* Enter a **Field Name;** as an example **Visit\_Lookup\_\_c**
* Leave the other fields as default

<figure><img src="/files/AmRxELnPZxNOj3twDgZL" alt=""><figcaption></figcaption></figure>

* Proceed to the next steps and finally save the new relationship.

When you take a look back at the **Fields & Relationships** section, you should see the new relationship displayed as shown in the figure below.

<figure><img src="/files/ue5wKw1hiFDJHfjdiOf5" alt=""><figcaption></figcaption></figure>

* Copy the field name: **Visit\_Lookup\_\_c** as we will need this in our next step.

{% hint style="warning" %}
**Warning:**&#x20;

Ensure that you provide at least read access to the lookup field (**Visit\_Lookup\_\_c** in this case) for all users viewing/creating SharinPix Form Response records.
{% endhint %}

## Configure the Custom Metadata

This section demonstrates how to configure the SharinPix Form Response Setting custom metadata.

To do so, follow the steps below:

* Go to **Setup** and type metadata, then click on **Custom Metadata Types**
* Select the **Manage Records** action next to the label **SharinPix Form Response Setting**

<figure><img src="/files/bwdaOl87klZ0xCvuNrSJ" alt=""><figcaption></figcaption></figure>

* Create a new record.
* For the field **Label**, as an example, enter **Form Sync on Visit**
* The field **SharinPix Form Response Setting Name** is auto-populated when clicking anywhere outside the text box.
* For the field **Parent Object Name**, enter the **object API name;** in our case it is **sharinpix\_\_Visit\_\_c**
* For the field **Parent Field Name**, enter the field name of the lookup relationship field created in the previous section, that is **Visit\_Lookup\_\_c** (Remember the field name we asked you to copy? You can now paste it here)
* Click **Save** when done.

<figure><img src="/files/AOGhtbSyjdLkiL1grCS5" alt=""><figcaption></figcaption></figure>

{% hint style="warning" %}
**Warning:**

You should be careful when entering values for the fields **Parent Object Name** and **Parent Field Name**.

* The field **Parent Object Name** refers to the object's API Name. In case you are using a custom object, you should ensure that the API name is correctly entered. For example, if you are using a custom object named **My Custom Object**, the value to be entered for the field **Parent Object Name** will be **My\_Custom\_Object\_\_c**.
* The field **Parent Field Name** on the other hand refers to the field name of the lookup relationship. You should ensure that the value entered for the field **Parent Field Name** matches the corresponding field name value in the lookup relationship.&#x20;
  {% endhint %}


# SharinPix Form In Progress

## Overview

**SharinPix Form In Progress** allows users to start filling a form in web mode and save the current state of the form. After saving the form, a Form In Progress Record is created on Salesforce where the user can either complete the form and submit or continue filling the form and save. Upon submission, the Form In Progress Record is converted into a Form Response Record.

{% hint style="warning" %}
**Prerequisites**

Before using the **SharinPix Form In Progress** , ensure the following:

* The SharinPix team needs to activate the **Create Form In Progress On Salesforce** flag in your Organization Settings. Please [contact SharinPix Support](/documentation/getting-started-with-sharinpix/how-to-contact-support) to have this done.
* Users must have the **SharinPix Forms** **Admin** or **SharinPix Forms User** permission set assigned. For more information on these two permission sets, check [SharinPix Permission Sets](/documentation/access-and-security/sharinpix-permission-sets).
* The lookup relationship is set up, as detailed in [the next article](/forms/salesforce-integration/sharinpix-form-in-progress/setup-custom-lookup-for-sharinpix-form-in-progress). This enables users to view related Form In Progress records in Salesforce.
* You have the **latest** **SharinPix Package Version** Installed. Refer to [*this documentation*](/faqs/how-to-update-sharinpix-package-from-the-appexchange) to update your package.
  {% endhint %}

## Getting Started

Once a form is opened in Web mode, users can either save their current progress or submit it as shown below:

<figure><img src="/files/cw6nNxbfOuE3PSesSrSI" alt=""><figcaption></figcaption></figure>

{% hint style="info" %}
To see a record's related Form in Progress records in Salesforce, make sure the lookup relationship is configured, as explained on [Setup Custom Lookup For SharinPix Form In Progress](/forms/salesforce-integration/sharinpix-form-in-progress/setup-custom-lookup-for-sharinpix-form-in-progress).
{% endhint %}

Upon Save, a Form In Progress Record is created on Salesforce and can be accessed as follows:

<figure><img src="/files/Kh4fn9Dy27u6ZYnAqeRg" alt=""><figcaption></figcaption></figure>

{% hint style="warning" %}
**Warning**

If the tab is closed without pressing the Save button, all progress will be lost. The SharinPix Form should be saved or submitted.
{% endhint %}

The Form In Progress Record can be accessed from the Form Template Related List or from the Record Page where a custom lookup has been set up. From here, the form can be completed, saved, and submitted. Upon submitting the Form, the Form In Progress Record is deleted, and its corresponding Form Response Record is created. The PDF URL of the partially filled form is also available from here.

<figure><img src="/files/e6e6tliK6nvao5SC1Mlt" alt=""><figcaption></figcaption></figure>

{% hint style="danger" %}
**Alert**

The SharinPix Form In Progress LWC shown in the above screenshot is only available on the SharinPix Form In Progress lightning\_\_RecordPage. To use it on a Digital Experience Page, the LWC should be added manually on the Site Page.
{% endhint %}


# Setup Custom Lookup For SharinPix Form In Progress

## Overview

In this article, we will demonstrate how to setup the SharinPix Form In Progress Sync. To do so we will:

1. [Create a lookup relationship field on the SharinPix Form In Progress object](/forms/salesforce-integration/sharinpix-form-in-progress/setup-custom-lookup-for-sharinpix-form-in-progress#step-1-creation-of-a-lookup-relationship-field-on-sharinpix-form-in-progress)
2. [Configure the SharinPix Form In Progress Setting custom metadata](/forms/salesforce-integration/sharinpix-form-in-progress/setup-custom-lookup-for-sharinpix-form-in-progress#step-2-configure-the-custom-metadata)

{% hint style="warning" %}
**Prerequisite:**

* The **SharinPix Form In Progress Sync Setting** works alongside the **SharinPix Form** featur&#x65;**.** Therefore, ensure that the **SharinPix Form** feature has been configured properly before configuring this Sync Setting. For more information on how to configure **SharinPix Form** , please refer to the following article: [SharinPix Form](/forms/overview-and-getting-started/sharinpix-forms)
* The latest SharinPix Package version: [*How to upgrade SharinPix package*](/faqs/how-to-update-sharinpix-package-from-the-appexchange)
* The **SharinPix Forms Admin** or **SharinPix Forms User** permission set should be assigned to all users to ensure they have the right to create, edit, and delete the **SharinPix Form In Progress** record through the SharinPix Form In Progress Sync Setting. For more information on these two permission sets, check [SharinPix Permission Set](/documentation/access-and-security/sharinpix-permission-sets)
  {% endhint %}

## Step 1: Creation of a Lookup Relationship Field on SharinPix Form In Progress

Depending on the Object you want to use SharinPix Form In Progress Sync on, you must create a lookup relationship field on the SharinPix Form In Progress Object that links to the parent object. This demo will use the **SharinPix Visit** object.

Follow the steps below:

* Go to **Setup, then access Object Manager**
* Type form in the search bar, press Enter, and click **SharinPix Form In Progress**
* On the left menu, click on **Fields and Relationships,** and then click on **New**

For the new field:

* Select **Lookup Relationship** as **Data Type** then click **Next**
* For the field **Related To**, select **SharinPix Visit** then click **Next**

![](/files/RDepVH9AIzX1niSOy4qa)

* On the next page, the field **Field Label** will be auto-populated
* Enter a **Field Name;** as an example **Visit\_Lookup\_\_c**
* Leave the other fields as default

<figure><img src="/files/mxNObCQ9dYZIbeqmAEa5" alt=""><figcaption></figcaption></figure>

* Proceed to the next steps and finally save the new relationship.

When you take a look back at the **Fields & Relationships** section, you should see the new relationship displayed as shown in the figure below.

<figure><img src="/files/Lq5PzJQ5ytKx9h14pCwJ" alt=""><figcaption></figcaption></figure>

* Copy the field name: **Visit\_Lookup\_\_c** as we will need this in our next step.

{% hint style="warning" %}
**Warning:**&#x20;

Ensure that you provide at least read access to the lookup field (**Visit\_Lookup\_\_c** in this case) for all users viewing/creating SharinPix Form Response records.
{% endhint %}

## Step 2: Configure the Custom Metadata

This section demonstrates how to configure the SharinPix Form In Progress Setting custom metadata.

To do so, follow the steps below:

* Go to **Setup** and type metadata, then click on **Custom Metadata Types**
* Select the **Manage Records** action next to the label **SharinPix Form In Progress Setting**

<figure><img src="/files/q4V5Uj1pkYh5Y6LQtrLa" alt=""><figcaption></figcaption></figure>

* Create a new record.
* For the field **Label**, as an example, enter **Form Sync on Visit**
* The field **SharinPix Form In Progress Setting Name** is auto-populated when clicking anywhere outside the text box.
* For the field **Parent Object Name**, enter the **object API name;** in our case it is **sharinpix\_\_Visit\_\_c**
* For the field **Parent Field Name**, enter the field name of the lookup relationship field created in the previous section, that is **Visit\_Lookup\_\_c** ( Remember the field name we asked you to copy? You can now paste it here )
* Click **Save** when done.

![](/files/N2S0mMlVHPkO7gsPDjZU)

{% hint style="warning" %}
**Warning:**

You should be careful when entering values for the fields **Parent Object Name** and **Parent Field Name**.

* The field **Parent Object Name** refers to the object's API Name. In case you are using a custom object, you should ensure that the API name is correctly entered. For example, if you are using a custom object named **My Custom Object**, the value to be entered for the field **Parent Object Name** will be **My\_Custom\_Object\_\_c**.
* The field **Parent Field Name** on the other hand refers to the field name of the lookup relationship. You should ensure that the value entered for the field **Parent Field Name** matches the corresponding field name value in the lookup relationship.&#x20;
  {% endhint %}


# Form Features - Sync Form values to Salesforce

{% hint style="info" %}
SharinPix Form Elements can be configured and mapped to Salesforce record fields, enabling the automatic updating of those fields with the responses provided in your form. This functionality allows for the update of the parent record from which the form was initiated. The configuration process is carried out directly within the [*SharinPix Form Template Editor*](/forms/form-elements/sharinpix-form-template-editor).

This documentation covers:

* [How to Configure your Form to Sync with Salesforce Record Fields](/forms/salesforce-integration/form-features-sync-form-values-to-salesforce#how-to-configure-your-form-template-to-synchronize-with-your-salesforce-parent-object-record)
* [Demo: Synchronizing SharinPix Form values to an Account record](#demo-synchronizing-sharinpix-form-values-to-a-parent-account-record)
* [Demo: Synchronizing SharinPix Form values to the Response record](#demo-synchronizing-sharinpix-form-values-to-the-response-record)
  {% endhint %}

{% hint style="warning" %}
**Prerequisite:**

Before using this feature, ensure:

* Ensure that you are using the most recent version of the SharinPix Package. Follow this document to [upgrade the SharinPix package](/faqs/how-to-update-sharinpix-package-from-the-appexchange)
* Users have the [**SharinPix Forms Admin permission set**](/documentation/access-and-security/sharinpix-permission-sets) assigned.
  {% endhint %}

## Getting Started

### How to configure your Form Template to synchronize with your Salesforce parent object record.

To configure your Form Template for the Sync feature, please follow these steps:

1. Open the [**SharinPix Form Template Editor**](/forms/form-elements/sharinpix-form-template-editor) for the relevant Form Template.
2. Select the desired **Question** element within the form.
3. Navigate to the **"Advanced" tab** in the question configuration settings.
4. In the **"Push this value to update a Salesforce field"** section, enter the appropriate Salesforce Field API Name of the parent object in the Field API Name field.

{% hint style="danger" %}
**Alert**\
\
The synchronization of Form Responses with parent record fields will only function if the response contains a ParentRecordId. For instance, when a response is submitted through a [**Form Launcher LWC**](/documentation/lightning-web-component/sharinpix-form-launcher) on an Account record, the ParentRecordId will be set to the Account's record ID.
{% endhint %}

Once the configuration is completed, submitting a Form Response will automatically update the corresponding fields of the parent record with the answers provided in the form. This update will align with the field data type and access rights, ensuring that the data is correctly mapped and reflected in the parent record.

## Demo: Synchronizing SharinPix Form values to a Parent Account record

### Step 1: Build and configure a SharinPix Form with the Sync Feature

<figure><img src="/files/D4ETLQxOkMe9DqoOyB48" alt=""><figcaption></figcaption></figure>

The above image illustrates the configuration process:

1. Identify the field on your parent record that you wish to update upon submission of the form response.
2. Copy the Salesforce Field API Name of the identified field and paste it into the **Push** section of the form question's configuration.

Once the configuration is complete, the specified field will be updated every time a form response is submitted with the corresponding parent record. The update will be performed based on the field's data type and the user's edit access rights.

### Step 2: Launch your Form from your parent record

The screenshot below shows a form being launched from an *Inspection* record, and we want to sync the following fields:

* Inspector
* Fire doors open and close correctly
* Number of Fire Extinguishers
* Fire Extinguisher Visible

<figure><img src="/files/C30UeCfZDFT35LRWQQIh" alt=""><figcaption></figcaption></figure>

Our SharinPix Form Template has already been configured with the above field API names to synchronize back to the parent record and update the corresponding fields.

### Step 3: Fill and submit the SharinPix Form

Once the form has been submitted, the Inspection record fields will be updated.

<figure><img src="/files/BZVtUIydWc6ZUPJpd7IG" alt=""><figcaption></figcaption></figure>

## Demo: Synchronizing SharinPix Form values to the Response record

<figure><img src="/files/kRs3PsetQOleCIK1NmGY" alt=""><figcaption></figcaption></figure>

To automatically map form answers to specific fields on your Form Response Object, follow these steps:

1. Identify the Target Field: Choose the field on your Form Response record that you want to update.
2. Copy the API Name: Locate the Salesforce Field API Name for that field.
3. Configure the Sync: In the form question’s settings, paste the API name into the **Push** section using this syntax: `$response.<FIELD_API_NAME>`.

Upon submission, the field will update automatically on the Response record that was created.

<figure><img src="/files/Rd2fTnj35Qkqhk59kMbQ" alt=""><figcaption></figcaption></figure>

{% hint style="warning" %}
**Note:**

If an error occurs while updating one of the fields (e.g., the Salesforce field's datatype trying to update is incompatible, or the user does not have access to the field), it will stop the sync process and the other configured fields will not be synced.&#x20;
{% endhint %}


# Create and Update Related Salesforce Records with SharinPix Form

### Overview

A SharinPix Form can be configured to synchronize Salesforce related (child) records with the parent record linked to the Form Response. In other words, SharinPix Forms can be used to display, create, and update related (child) records.

For example, when a form is launched from an Account, that Account is automatically set as the parent record of the Form Response. By using [Repeated Sections](/forms/form-sections-and-repeated-sections/sharinpix-form-sections-and-repeated-sections-1), multiple related Contact records can be created or updated directly within the form. When the form is reopened, those Contacts can be retrieved and their existing field values can be prefilled for review or updates.

**This article consists of:**

* [Configuring Form Repeated Section To Pull Child Records From Salesforce](#configuring-form-repeated-sections-to-pull-child-records)
* [Configuring Form Repeated Section To Push Child Records To Salesforce](#configuring-form-section-or-repeated-sections-to-push-child-records)

{% hint style="warning" %}
**Prerequisite**

Before using this feature, ensure:

* Ensure that you are using the most recent SharinPix Package Version. Follow this document to [*upgrade the SharinPix package*](/faqs/how-to-update-sharinpix-package-from-the-appexchange)
* Admins or power users who need to configure or set up form features should be assigned the permission set **SharinPix Forms Admin Permission**.\
  End users who only need to use the forms should be assigned the permission set **SharinPix Forms Users Permission**.
  {% endhint %}

#### Configuring Form Repeated sections to pull child records

{% hint style="info" %}
If you need to prefill many repeated items, use a dataset instead. See [Prefill Repeated Sections with a Record Dataset](/forms/form-elements/form-features-use-dynamic-salesforce-data-with-record-datasets#prefill-repeated-sections-with-a-record-dataset).
{% endhint %}

To pull Salesforce related records into a SharinPix Form, the **Pull data from a Salesforce record** section of the Repeated Section element must be configured in the **Default** tab.

1. ***Object API Name*** - \[Mandatory] The API name of the child object.
2. ***Lookup API Name*** - \[Mandatory] The API name of the lookup field on the child object that links to the Form Response parent record.
3. ***Lookup value field API Name -** \[Required only if you want to create child records, **not parent to the Form Response]** The API name of the field where the Form Response parent record ID is stored.* This is used when child records are created for a different object, rather than directly for the Form Response parent record.

For the third option ***Lookup value field API Name,*** this option can be used for example:\
SharinPix Form is launched from an opportunity object; here, the Form Response Parent object is Opportunity. On the opportunity record, you can store a salesforce record Id for any object (a field on the opportunity record with API name ***MyObjectRecordId\_\_c***).

The Lookup value field API Name should be set to ***MyObjectRecordId\_\_c.*** Let's say we still want to create Contacts for an Account; then the Account's record ID should be stored in the MyObjectRecordId\_\_c field. This configuration will allow you to create child records for a specific parent object not directly related to the Form Response.

<figure><img src="/files/BPiWW11kueVUXENUQ4uq" alt=""><figcaption></figcaption></figure>

After the setup for retrieving the child records to be filled in the form is completed, the fields to be pulled must be configured. Each question within the repeated section can be used to represent a specific Salesforce field from the child object.

<figure><img src="/files/k82RmTOmHMknch0u5TMa" alt=""><figcaption></figcaption></figure>

**Question** - A dropdown of all form questions API names in this specific section

**Salesforce Field API Name** - The Field API Name of the child object of which to pull the value

Each question in the section will represent one Salesforce field in the child record being pulled. Example if the Form Section contains:

**Batch Number:**

* Form Field API Name - *batch\_number*
* Salesforce Field API Name - *Batch\_Number\_\_c*

**Compliance Status:**

* Form Field API Name - *compliance\_status*
* Salesforce Field API Name - *Compliance\_Status\_\_c*

**Emergency Exists Functional:**

* Form Field API Name - *emergency\_exits\_functional*
* Salesforce Field API Name - *Emergency\_Exits\_Functional\_\_c*

**External Id:**

* Form Field API Name - *external\_id*
* Salesforce Field API Name - *External\_Id\_\_c*

{% hint style="warning" %}
**Note**

Two steps are required:

1. Create a Salesforce custom **External Id text field** for the child object that you want to retrieve and upsert.
2. Create a **Question of type text** to hold the External Id value of the child record (you can disable the text input to prevent editing).

This is because the external ID field API name is needed to update the records that will be pulled into the form and represented as sections.

If you have no child records to be pulled but want to create them directly from the form, when a response is submitted, a UUID will be auto-generated and will populate the external id field on salesforce. **You do not need to provide an external ID value within the form; leave the question as disabled and empty.**
{% endhint %}

{% hint style="danger" %}
**Alert**\
\
Beware that if the Form Question that holds the External Id value is set to hidden and the form configuration has the checkbox "**Include hidden fields in response** " set to false, this will not send the external id value to Salesforce when the form is submitted hence existing child records will not be updated and a new child record will be created everytime the form is submitted.
{% endhint %}

<figure><img src="/files/YeZiU4wdHF0SIF34pAFA" alt=""><figcaption></figcaption></figure>

All Inspection child records for the selected Account are pulled by this configuration. For example, if the Account contains 10 related Inspection records, the SharinPix Form is opened with 10 repeated sections, each one representing a single child record.

To synchronize Salesforce records with SharinPix Form repeated sections, the following must be done:

* A question must be created inside the repeated section to store the record’s external ID (as shown in the previous image above).
* The Salesforce API name of the external ID field must be specified in the record pull mappings.

<figure><img src="/files/DRNYQrZIXSWnFh3Gjiir" alt=""><figcaption></figcaption></figure>

In the External field mapping section, the field that represents the external ID (from the mapped fields) must be selected. This is then used to upsert the child records.

#### Configuring Form Section or Repeated sections to push child records

Once we have configured the form to pull related child records to represent in repeated sections in our form, we need to specify which fields we want to populate in the record. [You can follow the documentation for creation of child records from SharinPix Forms.](/forms/form-sections-and-repeated-sections/create-child-records-with-form-sections)

{% hint style="warning" %}
**Note**

It is important to specify the External ID field in the push configuration for the existing child records to be able to update. If not specified, new child records will be created.
{% endhint %}

Once the form configuration is complete, each time a Form Response is submitted, it will check the related child Inspection records. For each Inspection record (represented as a section), it will first check whether a corresponding record already exists by comparing the defined **External ID** field. If no matching record is found, a new Inspection record will be created. If a matching record already exists, the existing Inspection record will be updated with the data from the submitted Form Response.

<figure><img src="/files/wofnC5wNWED9eg7zHFzU" alt=""><figcaption></figcaption></figure>

<figure><img src="/files/VwlU0fn6HZh1aMU0oK6h" alt=""><figcaption></figcaption></figure>

{% hint style="info" %}
Please note that there is no limitation on the number of child records that can be retrieved in a form. However, retrieving a large number of records may result in the form URL becoming too long. This is not only influenced by the number of records retrieved, but also by the number of Salesforce fields pulled for each record.
{% endhint %}


# Reopen A Previously Submitted SharinPix Form

To reopen a submitted SharinPix Form Response using the SharinPix Form Relauncher LWC, it should be dragged and dropped on the submitted [SharinPix Form Response](/forms/overview-and-getting-started/sharinpix-forms) Record Page.

This article consists of:

* [Reopen A Previously Submitted Form Using LWC](#reopen-a-previously-submitted-sharinpix-form-using-lwc)
* [Reopen A Previously Submitted SharinPix Form Using LWC In Digital Experience](#reopen-a-previously-submitted-sharinpix-form-using-lwc-in-digital-experience)
* [Reopen A Previously Submitted SharinPix Form Using URL Parameters](#reopen-a-previously-submitted-sharinpix-form-using-url-parameters)
* [Configuring URL Parameter Using A Flow](#configuring-url-parameter-using-a-flow)
* [Configuring URL Parameter Using A Universal Link](#configuring-url-parameter-using-a-universal-link)
* [Prefill Behavior When Reopening A Form](#prefill-behavior-when-reopening-a-form)

{% hint style="warning" %}
**Prerequisites:**

Before configuring this automation, ensure the following:

* You have the latest **SharinPix Package** installed. This feature requires version **1.385** or higher. You can follow [this guide](/faqs/how-to-update-sharinpix-package-from-the-appexchange) to upgrade your SharinPix Managed Package to the newest version.
* Users must have the **SharinPix Forms** **Admin** or **SharinPix Forms User** permission set assigned. For more information on these two permission sets, check [SharinPix Permission Sets](/documentation/access-and-security/sharinpix-permission-sets).
* A form template has been created using the [SharinPix Form Template Editor](/forms/form-elements/sharinpix-form-template-editor).
  {% endhint %}

{% hint style="info" %}
**Information:**

The SharinPix Form Relauncher component is available in **Lightning**. It can be used:

* On the Experience Builder
* On Desktop
* On Mobile
* In Flows (But not in Field Service Mobile Flow)
* In your own Lightning Component Development
  {% endhint %}

## Reopen A Previously Submitted SharinPix Form Using LWC

Submitting a SharinPix Form creates a SharinPix Form Response Page on Salesforce.

![](/files/KLTZw8T2uKd8UZtLEpvx)

From the SharinPix Form Response Record Page App Builder, drag and drop the SharinPix Form Relauncher LWC on the page as shown below. The configuration parameters are similar to the SharinPix Form Launcher. It can launch the form in a new tab on the web browser if the Open in Online Mode is checked, else it will launch the SharinPix Mobile App.

![](/files/kcb0nRLkAbcHP8Ha46XF)

Once the changes are applied, the form can be reopened with all the data from the FR-0080.

<figure><img src="/files/xt7Bkx2HYELTuq8rg0nR" alt=""><figcaption></figcaption></figure>

## Reopen A Previously Submitted SharinPix Form Using LWC In Digital Experience

In the Experience Builder, navigate to the SharinPix Form Response or Form In Progress record page. Drag and drop the SharinPix Form Relauncher component onto the layout and configure the parameters. Once configured, the form can be reopened with its existing data.

<figure><img src="/files/ZYhQXfZW8i2QVdYdIzAU" alt=""><figcaption></figcaption></figure>

When the SharinPix Form Relauncher is used in a Salesforce Flow, use the same parameters listed below.

SharinPix Form Relauncher parameters in Digital Experience Builder and Salesforce Flow:

<table><thead><tr><th width="197.76953125">Parameter</th><th width="280.828125">Description</th><th width="271.8203125">Default/Notes</th></tr></thead><tbody><tr><td>Record Id</td><td>The Salesforce record Id of the form response or form in progress.</td><td><p>In Digital Experience, use <mark style="color:$danger;"><code>{!recordId}</code></mark> to dynamically retrieve the record Id.</p><p></p><p>In Flow, create a resource such as <mark style="color:$danger;"><code>recordId</code></mark> and pass the record Id as an input variable from the record page.</p></td></tr><tr><td>Object API Name</td><td>The object API name from where the SharinPix Form Relauncher is being used.</td><td>This component is intended to be used on <mark style="color:$danger;"><code>sharinpix__FormResponse__c</code></mark> and <mark style="color:$danger;"><code>sharinpix__FormInProgress__c</code></mark> only.</td></tr><tr><td>Button Label</td><td>The text displayed on the button.</td><td></td></tr><tr><td>Name Field API Name</td><td>The field API name to be used as job name.</td><td>If set to None, value will default to either the record's name (if available) or the record ID.</td></tr><tr><td>Custom Parameters</td><td>Additional user-defined parameters to append to the SharinPix Form launcher URL.</td><td></td></tr><tr><td>Open in Online Mode</td><td>Open the form in online mode.</td><td></td></tr><tr><td>Use Deeplink format</td><td>Generate a deeplink when enabled instead of a universal link.</td><td></td></tr></tbody></table>

## Reopen A Previously Submitted SharinPix Form Using URL Parameters

To reopen a submitted SharinPix Form Response, the **form\_response\_url** and **form\_response\_id** have to be added to the form URL. The **form\_response\_url** is the **FormResponseDataURL\_\_c,** which stores all the data, including images, of the submitted [SharinPix Form Response](/forms/overview-and-getting-started/sharinpix-forms). The **form\_response\_id** is the **PublicId\_\_c,** which contains the SharinPix ID of the Form Response.

{% hint style="warning" %}
Submitting this form will create a new SharinPix Form Response record on Salesforce.
{% endhint %}

## Configuring URL Parameter Using A Flow

An example can be to use a flow, such as a record-triggered flow, when a SharinPix Form Response record is created. The existing [Generate Form URL Automation](/forms/salesforce-integration/automatic-form-url-generation-using-flow-admin-oriented) can be used to generate a new Form URL with the Form Response Data URL and Form Response Public ID of the triggering record as custom parameters:

```
form_response_url={!$Record.sharinpix__FormResponseDataURL__c}&form_response_id={!$Record.sharinpix__PublicId__c}
```

![](/files/f0OGRJs7ptS5ZMLoMshJ)

This will allow a user to reopen the submitted SharinPix Form Response (including all data such as input values, images, etc.) and submit a new one.

The following example shows how a flow has been used to generate and update the Description field of the parent Account Record with the URL to reopen the last submitted SharinPix Form Response.

![](/files/y64EQXJbVRqDEFmUIBs1)

## Configuring URL Parameter Using A Universal Link

To configure this using a Universal Link, simply append the **form\_response\_url** and the **form\_response\_id** to the URL as follows:

```
https://app.sharinpix.com/native_app/form?token=<sharinpix-form-token>&form_response_url=<FormResponseDataURL__c>&form_response_id=<PublicId__c>
```

## Prefill Behavior When Reopening A Form

This setting controls what happens to each question when a submitted form is reopened.

Open the question you want to configure, then go to the **Advanced** tab.

<figure><img src="/files/MMorcWKEBS9rnvkFmVVj" alt=""><figcaption></figcaption></figure>

In **Value when reopening the form**, select the behavior you want to use.

<figure><img src="/files/wbdSJiaNF7PdnqkJhmtR" alt=""><figcaption></figcaption></figure>

Each question can use one of these options:

* Keep previous form answer
* Update via Salesforce/URL
* Clear previous form answer

### Keep previous form answer

* This is the default behavior.
* The previously submitted value takes priority for that question.
* If no previous value exists for that question, it follows the normal starting behavior.
* That can include a [prefill value from Salesforce fields](/forms/form-elements/form-features-default-or-prefill-values), a value passed through `pv` parameters in the form URL, a default value, or a blank state.

### Update via Salesforce/URL

* Use this option when the question should reflect the latest available prefill value.
* This includes [prefill values from Salesforce fields](/forms/form-elements/form-features-default-or-prefill-values) pulled through **Pull data from a Salesforce field to pre-fill this value**.
* This also includes values passed through the form URL by using `pv` parameters such as `pvName=John`.
* If a new prefill value is available when the form is reopened, it replaces the previously submitted answer for that question.
* If no prefill value is available, the previous answer is kept.

### Clear previous form answer

* Use this option when the question should be reviewed again.
* The previous answer is discarded when the form is reopened.
* The question can still receive a [prefill value from Salesforce fields](/forms/form-elements/form-features-default-or-prefill-values) or a value passed through `pv` parameters in the form URL.
* If no prefill value is available, the question falls back to its default value or stays blank.

{% hint style="info" %}
Use **Keep previous form answer** to persist previously submitted answers, **Update via Salesforce/URL** for values that should stay in sync with current Salesforce field values, and **Clear previous form answer** for questions that should be reviewed again when a form is reopened.
{% endhint %}


# Automatic Form Token Generation using Flow (Admin-Oriented)

## Overview

Salesforce Admins can streamline their SharinPix Form workflows by automatically generating secure **SharinPix Form Tokens** directly from **Flows**. Once the token is generated, it can be used to dynamically build a [URL](/documentation/sharinpix-form/automatic-form-token-generation-using-flow-admin-oriented) that opens the SharinPix Form for users to fill out. This is especially useful in Field Service scenarios, where the [link can launch the SharinPix mobile app directly](/documentation/integrations/salesforce-field-service/integration-of-sharinpix-app-with-sfs-fsl-app-using-app-extension).

SharinPix provides **two Apex invocable methods** for generating these tokens:

* <mark style="color:$danger;">`GenerateFormTokenAutomation`</mark> – Ideal for generating a token for **a specific SharinPix Form Template**.
* <mark style="color:$danger;">`TokenGeneration`</mark> – A more generic method that allows generating tokens for **multiple** different **SharinPix Form Templates** using a single action.

This documentation explains both methods and how to configure your Flow accordingly. It covers the following:

1. [GenerateFormTokenAutomation's Input Parameters](/forms/salesforce-integration/automatic-form-token-generation-using-flow-admin-oriented#generateformtokenautomation)
2. Flow Configuration Guide
   * [Step 1: Prepare Custom Field To Store Token](/documentation/sharinpix-form/automatic-form-url-generation-using-flow-admin-oriented#step-1-prepare-custom-field-to-store-url)
   * [Step 2: Configure a Record-Triggered Flow](/documentation/sharinpix-form/automatic-form-token-generation-using-flow-admin-oriented#step-2-configure-a-record-triggered-flow)
   * [Step 3: Add the Action to Generate the Form Token](/documentation/sharinpix-form/automatic-form-token-generation-using-flow-admin-oriented#step-3-add-the-action-to-generate-the-form-token)
   * [Step 4: Add Update Element](/forms/salesforce-integration/automatic-form-token-generation-using-flow-admin-oriented#step-4-add-update-element)
   * [Step 5: Save and Activate the Flow](/documentation/sharinpix-form/automatic-form-token-generation-using-flow-admin-oriented#step-5-save-and-activate-the-flow)
   * [Step 6: Find the SharinPix Token](/documentation/sharinpix-form/automatic-form-token-generation-using-flow-admin-oriented#step-6-find-the-sharinpix-token)
3. [Form Token Use Case Example: Using a Field Service App Extension to Open a SharinPix Form](/documentation/sharinpix-form/automatic-form-token-generation-using-flow-admin-oriented#form-token-use-case-example-using-a-field-service-app-extension-to-open-a-sharinpix-form)

{% hint style="warning" %}
**Prerequisites**

Before configuring this automation, ensure the following:

* You have the latest **SharinPix Package** installed. This feature requires version **1.346** or higher. You can follow [this guide](/faqs/how-to-update-sharinpix-package-from-the-appexchange) to upgrade your SharinPix Managed Package to the newest version.
* Users must have the **SharinPix Forms** **Admin** or **SharinPix Forms User** permission set assigned. For more information on these two permission sets, check [SharinPix Permission Sets](/documentation/access-and-security/sharinpix-permission-sets).
* A form template has been created using the [SharinPix Form Template Editor](/documentation/sharinpix-form/sharinpix-form-template-editor).
  {% endhint %}

## Input Parameters

### GenerateFormTokenAutomation

Below are the inputs required when using the <mark style="color:$danger;">`GenerateFormTokenAutomation`</mark> invocable method in a Salesforce Flow. These parameters must be provided to successfully generate a SharinPix Form token.

| Parameter        | Description                                                                                                                                      |
| ---------------- | ------------------------------------------------------------------------------------------------------------------------------------------------ |
| recordId         | The Salesforce Record ID (e.g. Work Order ID) to which the form token will be associated. *(Required)*                                           |
| formTemplateId   | The ID or Name of the SharinPix Form Template for which you want to generate the token. *(Required)*                                             |
| nameFieldApiName | API name of a field on the record (e.g. <mark style="color:$danger;">`WorkOrderNumber`</mark>) to be used as the job name in the SharinPix Form. |
| expiry           | Number of days after which the token will expire.                                                                                                |

### TokenAutomation

| Parameter     | Description                                                                                                                           |
| ------------- | ------------------------------------------------------------------------------------------------------------------------------------- |
| recordId      | The Salesforce Record ID (e.g. Work Order ID) to which the form token will be associated. *(Required)*                                |
| fieldname     | API name(s) of field(s) to store the token. If more than one field then should separate using (;) *(Required)*                        |
| name          | Name of the current record.                                                                                                           |
| numberOfHours | Number of hours after which the token will expire.                                                                                    |
| permissionId  | ID or Name of the SharinPix Permission object to be used for opening the SharinPix Mobile App. ( in form context, we don't need this) |

## Flow Configuration Guide

The following flow setup uses a **Record-Triggered Flow** to automatically generate a SharinPix Form Token when a **Work Order** is created or updated.

### **Step 1: Prepare Custom Field To Store Token**

A field is needed on the Work Order object to store the generated token. To do so, create a **Text Area (Long)** field to store the entire token.

1. Go to **Setup** > **Object Manager** > **Work Order**.
2. Click on **Fields & Relationships** > **New**.
3. Select **Text Area (Long)** as the field type.
4. Name the field (e.g., <mark style="color:$danger;">`Form Token`</mark>) and set the **length** to the maximum value (<mark style="color:$danger;">`131,072`</mark> characters).
5. **Save** the field.

This field will store the full token returned by the flow.

<figure><img src="/files/v9omDxttUfHS3g6apisE" alt=""><figcaption></figcaption></figure>

### **Step 2: Configure a Record-Triggered Flow**

1. Go to **Setup** > **Flows** > Click **New Flow**&#x20;
2. Choose **Start From Scratch** and click **Next**
3. Choose **Record-Triggered Flow** and click **Create**
4. Set the following values:

| Setting               | Value                          |
| --------------------- | ------------------------------ |
| Object                | Work Order                     |
| Trigger               | A record is created or updated |
| Set Entry Conditions  | None                           |
| Optimize the Flow for | Actions and Related Records    |

<figure><img src="/files/m2Vo5zD45ZKfPTKsZ3dU" alt=""><figcaption></figcaption></figure>

<figure><img src="/files/IvUvZtpcsGCnwJ6je6V0" alt=""><figcaption></figcaption></figure>

### **Step 3: Add the Action to Generate the Form Token**

**GenerateFormTokenAutomation**

1. Add an **Action** element
2. Search for <mark style="color:$danger;">`Sharinpix__GenerateFormTokenAutomation`</mark>
3. On the **Action** modal for <mark style="color:$danger;">`Sharinpix__GenerateFormTokenAutomation`</mark>, populate the fields as indicated below:

| Field               | Example Value                        |
| ------------------- | ------------------------------------ |
| Form Template ID    | Fire Safety Inspection               |
| Record ID           | Triggering WorkOrder > Work Order ID |
| Expiry in Days      | 10                                   |
| Name Field API Name | WorkOrderNumber                      |

{% hint style="warning" %}
**Warning:**

* If the expiry value is not specified, the token will default to 30 days. If the token should not expire, the expiry value should be set to zero (<mark style="color:$danger;">`0`</mark>). This field only accepts whole numbers; decimal values are not supported and will result in an error.
* Ensure the specified template exists in your Salesforce org and that you have entered the correct name or ID.
  {% endhint %}

<figure><img src="/files/QJ8uTtJAvHa2bI9baRMW" alt=""><figcaption></figcaption></figure>

#### TokenAutomation

1. Add an **Action** element
2. Search for <mark style="color:$danger;">`Sharinpix__TokenGeneration`</mark>
3. On the **Action** modal for <mark style="color:$danger;">`Sharinpix__TokenGeneration`</mark>, populate the fields as indicated below:

| Field                        | Example Value                         |
| ---------------------------- | ------------------------------------- |
| Field API Name(s)            | FormToken\_\_c                        |
| Record NameRecord ID         | Triggering WorkOrder > Work Order ID  |
| Record Name                  | job name for the form                 |
| Hours Before Token Expires   | 10                                    |
| Custom Permission ID or Name | Does **not** apply for SharinPix Form |

### Step 4: Add Update Element

This step is used to store the token generated by the Apex action into the custom field <mark style="color:$danger;">`FormToken__c`</mark> you created on the Work Order.

1. Add an **Update** element
2. Select **Use the Work Order record that triggered the flow**
3. Do not add any filter conditions.
4. In the **Set Field Values for the Work Order Record** section, populate it as indicated below:

| Field          | Value                                                       |
| -------------- | ----------------------------------------------------------- |
| FormToken\_\_c | Outputs from sharinpix\_\_GenerateFormTokenAutomation.token |

<figure><img src="/files/JTgccrljg6y2Cv3FXKh2" alt=""><figcaption></figcaption></figure>

### Step 5: Save and Activate the Flow

**Save** the Flow and click **Activate**.

![](/files/Iq0A462SsdBouQqiTAiK)

### Step 6: Find the SharinPix Token

To test the flow, create or update a **Work Order** record.

After the flow runs, the generated **SharinPix Form Token** will be stored in the <mark style="color:$danger;">`FormToken__c`</mark> field of the Work Order. You can view it directly from the record detail page to confirm that the token was generated successfully.

<figure><img src="/files/4qtLMaMzH7iomU3DeXhW" alt=""><figcaption></figcaption></figure>

## Form Token Use Case Example: Using a Field Service App Extension to Open a SharinPix Form

You can set up a Field Service App Extension to launch the forms from the Field Service mobile app and directly access them in the **SharinPix Mobile App** by embedding the form token in a SharinPix deeplink or URL.

The format for **deeplinks** to open a form in the SharinPix app is as follows:

<mark style="color:$danger;">`sharinpix://form?token=<sharinpix-token>&host=app.sharinpix.com`</mark>

The format for **universal links** (URL) to open a form in the SharinPix app is as follows:

<mark style="color:$danger;">`https://app.sharinpix.com/native_app/form?token=<sharinpix-token>&host=app.sharinpix.com`</mark>

{% hint style="info" %}
**Info**<br>

* The section, <mark style="color:$danger;">`<sharinpix-token>`</mark> , in the above deeplink and universal link formats, should be replaced by the form token.
* For more information on how to configure Field Service App Extensions with SharinPix deeplinks/URLs, please refer to [this documentation](/documentation/sharinpix-form/integration-of-sharinpix-form-with-sfs-app-using-app-extension).
  {% endhint %}


# Automatic Form URL Generation using Flow (Admin-Oriented)

## Overview

The <mark style="color:$danger;">`GenerateFormUrlAutomation`</mark> class is an **Invocable Apex** utility that allows Salesforce Admins to automatically generate secure **SharinPix Form URLs** directly from **Flows**.

The generated URL opens a SharinPix Form on the SharinPix Mobile App or on a Web Browser for users to fill out.

This article covers the following:

1. [GenerateFormUrlAutomation's Input Parameters](/documentation/sharinpix-form/automatic-form-url-generation-using-flow-admin-oriented)
2. Flow Configuration Guide
   * [Step 1: Prepare Custom Field To Store URL](/documentation/sharinpix-form/automatic-form-url-generation-using-flow-admin-oriented#step-1-prepare-custom-field-to-store-url)
   * [Step 2: Configure a Record-Triggered Flow](/documentation/sharinpix-form/automatic-form-url-generation-using-flow-admin-oriented#step-2-configure-a-record-triggered-flow)
   * [Step 3: Add the Action to Generate the Form Url](/documentation/sharinpix-form/automatic-form-url-generation-using-flow-admin-oriented#step-3-add-the-action-to-generate-the-form-url)
   * [Step 4: Add Update Element](/documentation/sharinpix-form/automatic-form-url-generation-using-flow-admin-oriented#step-4-add-update-element)
   * [Step 5: Save and Activate the Flow](/documentation/sharinpix-form/automatic-form-url-generation-using-flow-admin-oriented#step-5-save-and-activate-the-flow)
   * [Step 6: Find the SharinPix Form URL](/documentation/sharinpix-form/automatic-form-url-generation-using-flow-admin-oriented#step-6-find-the-sharinpix-form-url)
3. [Demo](/forms/salesforce-integration/automatic-form-url-generation-using-flow-admin-oriented#demo)

{% hint style="warning" %}
**Prerequisites**

Before configuring this automation, ensure the following:

* You have the latest **SharinPix Package** installed. This feature requires version **1.376** or higher. You can follow [this guide](/faqs/how-to-update-sharinpix-package-from-the-appexchange) to upgrade your SharinPix Managed Package to the newest version.
* Users must have the **SharinPix Forms** **Admin** or **SharinPix Forms User** permission set assigned. For more information on these two permission sets, check [SharinPix Permission Sets](/documentation/access-and-security/sharinpix-permission-sets).
* A form template has been created using the [SharinPix Form Template Editor](/documentation/sharinpix-form/sharinpix-form-template-editor).
  {% endhint %}

## Input Parameters

Below are the inputs required when using the <mark style="color:$danger;">`GenerateFormUrlAutomation`</mark> invocable method in a Salesforce Flow. These parameters must be provided to successfully generate a SharinPix Form URL.

| Parameter        | Description                                                                                                                                                                                                                                                                                                                                                      |
| ---------------- | ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| recordId         | The Salesforce Record ID (e.g. Work Order ID) to which the form url will be associated. *(Required)*                                                                                                                                                                                                                                                             |
| formTemplateId   | The ID, Name or Url of the SharinPix Form Template for which you want to generate the SharinPix Form Url. *(Required)*                                                                                                                                                                                                                                           |
| nameFieldApiName | API name of a field on the record (e.g. <mark style="color:$danger;">`WorkOrderNumber`</mark>) to be used as the job name in the SharinPix Form.                                                                                                                                                                                                                 |
| expiry           | Number of days after which the url will expire.                                                                                                                                                                                                                                                                                                                  |
| anonymousUser    | Specifies whether the SharinPix Form should be generated for anonymous access or for an authenticated Salesforce user.                                                                                                                                                                                                                                           |
| formOnline       | Specifies whether to generate a url that opens a SharinPix Form in Online Mode (On the Web Browser).                                                                                                                                                                                                                                                             |
| customParameters | <p>Additional user-defined parameters appended to the SharinPix Form launcher URL. <br>Can add <a href="/spaces/5EvYRrLbUyvRh8o1jmMG/pages/r0iMoUAujh7YG1BDnP8c#ret_url">ret\_url</a>, prefill values parameters and so on.<br>(e.g. <mark style="color:$danger;"><code>nameFieldApiName=Name\&pvInspectionName=Room\&ret\_url=salesforce1://</code></mark>)</p> |

## Flow Configuration Guide

The following flow setup uses a **Record-Triggered Flow** to automatically generate a SharinPix Form Url when a **Work Order** is created or updated.

### Step 1: Prepare Custom Field To Store URL

A field is needed on the Work Order object to store the generated URL. To do so, create a **Text Area (Long)** field to store the entire URL.

1. Go to **Setup** > **Object Manager** > **Work Order**.
2. Click on **Fields & Relationships** > **New**.
3. Select **Text Area (Long)** as the field type.
4. Name the field (e.g., <mark style="color:$danger;">`Form Url`</mark>) and set the length to the default value (<mark style="color:$danger;">`32,768`</mark> characters).
5. **Save** the field.

This field will store the full Form URL returned by the flow.

<figure><img src="/files/r8HCXwlN4ZYTaz1rjbts" alt=""><figcaption></figcaption></figure>

### Step 2: Configure a Record-Triggered Flow

1. Go to **Setup** > **Flows** > Click **New Flow**
2. Choose **Start From Scratch** and click **Next**
3. Choose **Record-Triggered Flow** and click **Create**
4. Set the following values:

| Setting               | Value                          |
| --------------------- | ------------------------------ |
| Object                | Work Order                     |
| Trigger               | A record is created or updated |
| Set Entry Conditions  | None                           |
| Optimize the Flow for | Actions and Related Records    |

<figure><img src="/files/Id0VNBaNWxTKXcSKJac2" alt=""><figcaption></figcaption></figure>

<figure><img src="/files/EcVgsNO7pCtZSpNyrfLg" alt=""><figcaption></figcaption></figure>

### Step 3: Add the Action to Generate the Form Url

{% hint style="danger" %}
**Warning:**

Starting with the Salesforce **Winter’26 release**, Apex Actions can no longer be executed directly in the **Run Immediately** path of a record-triggered flow. Instead, they must be placed in an **asynchronous path** , as the synchronous execution option is no longer supported.

For more details, please refer to the documentation here:\
[*Unable to save a flow with an Apex Action after the Salesforce Winter ’26 release – What should I do?*](/faqs/i-am-unable-to-save-a-flow-with-an-apex-action-after-the-salesforce-winter-26-release-what-should-i)
{% endhint %}

1. Add an **Action** element
2. Search for <mark style="color:$danger;">`Sharinpix__GenerateFormUrlAutomation`</mark>
3. On the **Action** modal for <mark style="color:$danger;">`Sharinpix__GenerateFormUrlAutomation`</mark>, populate the fields as indicated below:

| Field               | Example Value                        |
| ------------------- | ------------------------------------ |
| Form Template ID    | Fire Safety Inspection               |
| Parent Record ID    | Triggering WorkOrder > Work Order ID |
| Expiry in Days      | 15                                   |
| Name Field API Name | WorkOrderNumber                      |
| Anonymous User      | False                                |
| Custom Parameters   | pvdate=09/05/2025                    |
| Form Online         | False                                |

<figure><img src="/files/8254gmvRZaEiitOdrkVv" alt=""><figcaption></figcaption></figure>

{% hint style="warning" %}
**Warning:**

* If the expiry value is not specified, the token will default to 30 days. If the token should not expire, the expiry value should be set to zero (<mark style="color:$danger;">`0`</mark>). This field only accepts whole numbers; decimal values are not supported and will result in an error.
* Ensure the specified template exists in your Salesforce org and that you have entered the correct name or ID.
  {% endhint %}

**Output Resources** from <mark style="color:$danger;">`Sharinpix__GenerateFormUrlAutomation`</mark>

| Resources                  | Description                                                                                            |
| -------------------------- | ------------------------------------------------------------------------------------------------------ |
| Form Url                   | An automatically generated URL to the form.                                                            |
| Form Token                 | An automatically generated token for the form.                                                         |
| Form Additional Parameters | Set of parameters that are appended to the URL of the form such as prefill values, context parameters. |

### Step 4: Add Update Element

This step is used to store the URL generated by the Apex action into the custom field <mark style="color:$danger;">`FormUrl__c`</mark> you created on the Work Order.

1. Add an **Update** element
2. Select **Use the Work Order record that triggered the flow**
3. Do not add any filter conditions.
4. In the **Set Field Values for the Work Order Record** section, populate it as indicated below:

| Field        | Value                                                         |
| ------------ | ------------------------------------------------------------- |
| FormUrl\_\_c | Outputs from sharinpix\_\_GenerateFormTokenAutomation.formUrl |

Optionally, you can also extract the **Form Token** and **Form Additional Parameters** and store them in their respective fields.

<figure><img src="/files/EN0QYOJWNFkHh2R0D9S2" alt=""><figcaption></figcaption></figure>

### Step 5: Save and Activate the Flow

**Save** the Flow and click **Activate**.

<figure><img src="/files/5T5Km2FRy1nWCWJYyzRO" alt=""><figcaption></figcaption></figure>

### Step 6: Find the SharinPix Form URL

To test the flow, create or update a **Work Order** record.

After the flow runs, the generated **SharinPix Form URL** will be stored in the <mark style="color:$danger;">`FormUrl__c`</mark> field of the Work Order. You can view it directly from the record detail page to confirm that the token was generated successfully.

<figure><img src="/files/VsdPD1z5em6xcUKHteGB" alt=""><figcaption></figcaption></figure>

## Demo

The diagram below illustrates the interaction flow when a user clicks the form URL from a Work Order record, launching the SharinPix Form directly in the SharinPix Mobile App.

![](/files/1QvPTrvhO7kclBfa0aLu)


# Generate SharinPix Shareable Form Links Automatically

## Overview

This article explains how <mark style="color:$danger;">`FormShareAutomation`</mark> allows users to automatically generate a shareable link that launches a SharinPix Form directly from a Salesforce Flow.

Instead of using long-form URLs, a share link provides a shortened URL that can be easily distributed, for example, via email or SMS, to external or internal users. When opened, the link takes the user directly to the form, where they can fill it out and submit it.

This documentation covers the following:

1. [FormShareAutomation's Input Parameters](#input-parameters)
2. Flow Configuration Guide
   * Step 1: [Prepare Custom Field To Store Share URL](#step-1-prepare-custom-field-to-store-share-url)
   * Step 2: [Configure a Record-Triggered Flow](#step-2-configure-a-record-triggered-flow)
   * Step 3: [Add the Action to Generate the Share Link](#step-3-add-the-action-to-generate-the-share-link)
   * Step 4: [Add Update Element](#step-4-add-update-element)
   * Step 5: [Save and Activate the Flow](#step-5-save-and-activate-the-flow)
   * Step 6: [Find the SharinPix Share URL](#step-6-find-the-sharinpix-share-url)

{% hint style="warning" %}
**Prerequisites:**

Before configuring this automation, ensure the following:

* You have the latest **SharinPix Package** installed. This feature requires version **1.384** or higher. You can follow [this guide](/faqs/how-to-update-sharinpix-package-from-the-appexchange) to upgrade your SharinPix Managed Package to the newest version.
* Users must have the **SharinPix Forms** **Admin** or **SharinPix Forms User** permission set assigned. For more information on these two permission sets, check [SharinPix Permission Sets](/documentation/access-and-security/sharinpix-permission-sets).
* A form template has been created using the [SharinPix Form Template Editor](/forms/form-elements/sharinpix-form-template-editor).
  {% endhint %}

## Input Parameters

Below are the inputs required when using the <mark style="color:$danger;">`FormShareAutomation`</mark> invocable method in a Salesforce Flow. These parameters must be provided to successfully generate a SharinPix Share URL.

| Parameter         | Description                                                                                                                                                                                                                                                                                                                                                     |
| ----------------- | --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| recordId          | The Salesforce Record ID (e.g. Work Order ID) to which the form url will be associated. *(Required)*                                                                                                                                                                                                                                                            |
| templateReference | The Name of the Main Form Template for which you want to generate the SharinPix Form URL. *(Required)*                                                                                                                                                                                                                                                          |
| nameFieldApiName  | API name of a field on the record (e.g. <mark style="color:$danger;">`WorkOrderNumber`</mark>) to be used as the job name in the SharinPix Form.                                                                                                                                                                                                                |
| expiry            | Number of days after which the url will expire.                                                                                                                                                                                                                                                                                                                 |
| customParameters  | <p>Additional user-defined parameters appended to the SharinPix Form launcher URL.<br>Can add <a href="/spaces/5EvYRrLbUyvRh8o1jmMG/pages/r0iMoUAujh7YG1BDnP8c#ret_url">ret\_url</a>, prefill values parameters and so on.<br>(e.g. <mark style="color:$danger;"><code>nameFieldApiName=Name\&pvInspectionName=Room\&ret\_url=salesforce1://</code></mark>)</p> |
| Anonymous User    | When set to **true**, the URL becomes anonymous, and the form submission is not associated with any user.                                                                                                                                                                                                                                                       |
| Universal Link    | When this is set to **true**, the share creates a **universal link** that opens the form in the **SharinPix Mobile App**.                                                                                                                                                                                                                                       |

## Flow Configuration Guide

The following flow setup uses a **Record-Triggered Flow** to automatically generate a SharinPix Share URL when a **Work Order** is created or updated.

## Step 1: Prepare Custom Field To Store Share URL

A field is needed on the Work Order object to store the generated URL. To do so, create a **URL** field to store the share URL.

1. Go to **Setup** > **Object Manager** > **Work Order**.
2. Click on **Fields & Relationships** > **New**.
3. Select **URL** as the field type.
4. Name the field (e.g., <mark style="color:$danger;">`Share Link`</mark>).
5. **Save** the field.

This field will store the Form Share URL returned by the flow.

![](/files/FrNvHpljX9baMT1KsiBz)

## Step 2: Configure a Record-Triggered Flow

1. Go to **Setup** > **Flows** > Click **New Flow**
2. Choose **Record-Triggered Flow** and click **Create**
3. Set the following values:

| Setting               | Value                       |
| --------------------- | --------------------------- |
| Object                | Work Order                  |
| Trigger               | A record is created         |
| Set Entry Conditions  | None                        |
| Optimize the Flow for | Actions and Related Records |
| Add Asynchronous Path | Enabled                     |

![](/files/oin9ru2imNCD98WaCdBt)

![](/files/6ws049Z6yvkkay2YlDhc)

## Step 3: Add the Action to Generate the Share Link

1. Add an **Action** element
2. Search for <mark style="color:$danger;">`Sharinpix__FormShareAutomation`</mark>
3. On the **Action** modal for <mark style="color:$danger;">`Sharinpix__FormShareAutomation`</mark>, populate the fields as indicated below:

| Field               | Example Value                        |
| ------------------- | ------------------------------------ |
| Template Reference  | Fire Safety Inspection               |
| Record ID           | Triggering WorkOrder > Work Order ID |
| Expiry in Days      | 10                                   |
| Name Field API Name | WorkOrderNumber                      |
| Custom Parameters   | pvdate=09/05/2025                    |
| Anonymous User      | false                                |
| Universal Link      | false                                |

<figure><img src="/files/nfZUv7SCHv6uI6KmqCbb" alt=""><figcaption></figcaption></figure>

{% hint style="warning" %}
**Warning:**

* If the expiry value is not specified, the token will default to **30 days**. If the token should not expire, the expiry value should be set to zero (<mark style="color:$danger;">`0`</mark>). This field only accepts whole numbers; decimal values are not supported and will result in an error.
* Ensure the specified template exists in your Salesforce org and that you have entered the correct name or ID.
  {% endhint %}

## Step 4: Add Update Element

This step is used to store the URL generated by the Apex action into the custom field <mark style="color:$danger;">`ShareLink__c`</mark> you created on the Work Order.

1. Add an **Update** element
2. Select **Use the Work Order record that triggered the flow**
3. Do not add any filter conditions.
4. In the **Set Field Values for the Work Order Record** section, populate it as indicated below:

| Field          | Value                                                     |
| -------------- | --------------------------------------------------------- |
| ShareLink\_\_c | Outputs from sharinpix\_\_GenerateFormTokenAutomation.url |

![](/files/OVqdhP8YmetwoZ2P0Yrb)

## Step 5: Save and Activate the Flow

**Save** the Flow and click **Activate**.

![](/files/TW45uBMZT7XywpqqEOwQ)

## Step 6: Find the SharinPix Share URL

To test your flow, create a **Work Order** record (or the object used in your automation).

After the flow runs, the generated **SharinPix Share Link** will be stored in the <mark style="color:$danger;">`ShareLink__c`</mark> field of the Work Order. You can view it directly from the record detail page to confirm that the link was generated successfully.

Clicking the link will immediately launch the corresponding **SharinPix Form**, allowing the user to fill it out and submit it.

![](/files/7DldZU3FRV1hDyDneUNX)

![](/files/22n4E41jIi39bQAhd5Qh)

You can also verify that a corresponding SharinPix Share record has been created, containing all details related to the generated share link.

<figure><img src="/files/HmjIUK3pPUiPP0EvyirK" alt=""><figcaption></figcaption></figure>


# Import Images from Form Response to Parent Object (Admin-Oriented)

## Overview

The [`DuplicateImagesAutomation`](/documentation/cookbook/duplicate-sharinpix-images-using-a-flow-admin-oriented) Invocable Apex method allows users to automatically **import or duplicate images uploaded in a SharinPix Form Response (via Form Answers)** to the corresponding **Parent record’s album (Salesforce Object from which the SharinPix Form was launched)**.

This automation ensures that all images captured through SharinPix Forms are automatically propagated to the related Parent Object (e.g., *Case, Site, or Inspection*), maintaining centralized visibility and data consistency.

This article covers the following:

* Prerequisites
* [DuplicateImagesAutomation’s Input Parameters](#input-parameters)
* Flow Setup
  * Step 1: [Configure a Record-Triggered Flow](#step-1-configure-a-record-triggered-flow)
  * Step 2: [Assign Variables for the Action](#step-2-assign-variables-for-the-action)
  * Step 3: [Get Parent Record](#step-3-get-parent-record)
  * Step 4: [Add the Duplicate Image Action](#step-4-add-the-duplicate-image-action)
  * Step 5: Save and Activate the Flow
* [Demo: Form Response to Parent Duplication Example](#demo-importing-images-from-form-response-to-parent-inspection-example)

{% hint style="warning" %}
**Prerequisites:**

Before configuring this automation, ensure the following:

1. You have the latest **SharinPix Managed Package** installed.
   * Refer to the [*Upgrade SharinPix Package* article](/faqs/how-to-update-sharinpix-package-from-the-appexchange) to confirm installation and version.
2. Users must have one of the following permission sets assigned:
   * **SharinPix Admin** or **SharinPix User**
3. **Image Sync** is configured on the **Form Answer** object.
4. The **Parent record** (e.g., *Case, Site, or Inspection*) is linked through a **Form Response** lookup relationship.
   {% endhint %}

## Input Parameters

Below are the inputs required when using the **DuplicateImagesAutomation** invocable method in a Salesforce Flow.

These parameters must be provided for the duplication to execute successfully.

| Parameter            | Description                                                                                                                                                     |
| -------------------- | --------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| Destination Album ID | The ID of the parent record (album) where the image will be duplicated. Typically retrieved through the Form Response lookup to the Parent record. *(Required)* |
| List of Image IDs    | The list of SharinPix Image Public IDs that will be duplicated. *(Required)*                                                                                    |
| Duplicate Tags       | Optional boolean value indicating whether image tags should also be duplicated. *(Default: false)*                                                              |

## Flow Setup

This flow configuration demonstrates how to **import or duplicate images from a Form Response** to its related **Parent record** using the SharinPix DuplicateImagesAutomation Apex Action.

### Step 1: Configure a Record-Triggered Flow

* Go to **Setup → Flows → New Flow**
* Choose **Record-Triggered Flow** and click **Create**
* Set the following values:

| Setting                | Value                                                       |
| ---------------------- | ----------------------------------------------------------- |
| Object                 | <mark style="color:$danger;">`SharinPix Image`</mark>       |
| Trigger                | A record is created                                         |
| Condition Requirements | All Conditions Are Met (AND)                                |
| Field                  | <mark style="color:$danger;">`SharinPix Form Answer`</mark> |
| Operator               | Is Null                                                     |
| Value                  | <mark style="color:$danger;">`False`</mark>                 |
| Optimize Flow For      | Actions and Related Records                                 |
| Asynchronous Path      | Enabled (since an external Apex call is made)               |

<figure><img src="/files/kxOV1sb1a4U7QeArUO5E" alt=""><figcaption></figcaption></figure>

This ensures that the Flow runs **only when a new image linked to a Form Answer** is created.

### Step 2: Assign Variables for the Action

Before creating the Assignment element, you must first create a **new resource** that will hold the image IDs to be duplicated.

#### 2.1 Create the Resource

* In Flow Builder, click **New Resource**.
* Set the following values:

| Setting                                | Value                                                  |
| -------------------------------------- | ------------------------------------------------------ |
| **Resource Type**                      | Variable                                               |
| **API Name**                           | <mark style="color:$danger;">`SharinPixImageID`</mark> |
| **Data Type**                          | Text                                                   |
| **Allow multiple values (Collection)** | ✅ Checked                                              |
| **Available for input**                | leave unchecked                                        |
| **Available for output**               | leave unchecked                                        |

<figure><img src="/files/wO3N3gu8a7UmTEWe2qwl" alt=""><figcaption></figcaption></figure>

This variable acts as a **Text Collection Variable** to store one or more SharinPix Image Public IDs.\
The collection type is required because the *DuplicateImagesAutomation* Apex Action expects a list of image IDs, even if there is only one image.

#### 2.2 Add the Assignment Element

Next, add an **Assignment** element to populate the variable you just created.

| Setting         | Value                                                                                   |
| --------------- | --------------------------------------------------------------------------------------- |
| **Label**       | Store Image ID                                                                          |
| **API Name**    | <mark style="color:$danger;">`Store_Image_ID`</mark>                                    |
| **Description** | Store the Public Image ID of the SharinPix Image to be duplicated on the Parent record. |

**Variable Values**

<table><thead><tr><th width="187.59765625">Variable</th><th width="111.0625">Operator</th><th>Value</th></tr></thead><tbody><tr><td><code>SharinPixImageID</code></td><td>Add</td><td><mark style="color:$danger;"><code>{!$Record.sharinpix__ImagePublicId__c}</code></mark>( Triggering SharinPix Image Record > Image Public ID )</td></tr></tbody></table>

<figure><img src="/files/QRG6xo8vVdGCRaDnxypr" alt=""><figcaption></figcaption></figure>

### Step 3: Get Parent Record

Use a **Get Records** element to fetch the **Parent Record ID** through the **Form Response**.

<table><thead><tr><th width="263.2890625">Setting</th><th>Value</th></tr></thead><tbody><tr><td><strong>Label</strong></td><td>Get Parent Record</td></tr><tr><td><strong>API Name</strong></td><td><mark style="color:$danger;"><code>Get_Parent_Record</code></mark></td></tr><tr><td><strong>Object</strong></td><td><mark style="color:$danger;"><code>SharinPix Form Response</code></mark></td></tr><tr><td><strong>Condition Requirements</strong></td><td>All Conditions Are Met (AND)</td></tr><tr><td><strong>Field</strong></td><td>Record ID</td></tr><tr><td><strong>Operator</strong></td><td>Equals</td></tr><tr><td><strong>Value</strong></td><td><mark style="color:$danger;"><code>{!$Record.sharinpix__FormAnswer__r.sharinpix__FormResponse__r.Id}</code></mark>( Triggering SharinPix Image > Form Answer > Form Response > Record ID )</td></tr><tr><td><strong>How Many Records to Store</strong></td><td>Only the first record</td></tr></tbody></table>

![](/files/5cFQqiIGJpDMupeX8QQ3)

### Step 4: Add the Duplicate Image Action

Add an **Action** element that calls the **SharinPix DuplicateImagesAutomation**.

{% hint style="danger" %}
**Important:**

Starting with the **Salesforce Winter ’26 release**, Apex Actions must be executed in the **Asynchronous Path**.\
They can no longer be placed in the “Run Immediately” section of Record-Triggered Flows.

For more information, see:\
[*Unable to save a flow with an Apex Action after the Salesforce Winter ’26 release – What should I do?*](/faqs/i-am-unable-to-save-a-flow-with-an-apex-action-after-the-salesforce-winter-26-release-what-should-i)
{% endhint %}

Set the following parameters:

<table><thead><tr><th width="326.296875">Field</th><th>Value</th></tr></thead><tbody><tr><td><strong>Destination Album ID</strong></td><td><mark style="color:$danger;"><code>Get Parent Record → Parent Record Id</code></mark></td></tr><tr><td><strong>List of Image IDs</strong></td><td><mark style="color:$danger;"><code>SharinPixImageID</code></mark></td></tr><tr><td><strong>Duplicate Tags</strong></td><td>Not Included</td></tr></tbody></table>

![](/files/68SNRIAck32yQYP2rbQL)

### Step 5: Save and Activate

* Click **Save**
* Name the flow clearly (e.g., *Import Images from Form Response to Parent Object*)
* Click **Activate**

<figure><img src="/files/N8aYE4j4jd0FHjonqEeP" alt=""><figcaption></figcaption></figure>

The flow is now ready to automatically replicate uploaded images from Form Responses (via Form Answers) to the associated Parent record album.

## Demo: Importing Images from Form Response to Parent (Inspection Example)

This example demonstrates how the flow automatically **imports images submitted through a SharinPix Form** into the related **Inspection record’s SharinPix album** in Salesforce.

**Scenario**

A field technician launches a **“Site Safety Inspection” form** from an existing **Inspection record** in Salesforce.\
During the inspection, the technician captures several photos (e.g., of fire extinguishers, emergency exits, and signage) directly in the form.

**When the form is submitted:**

1. SharinPix automatically creates **Form Answer** and **Form Response** records in Salesforce.
2. Each photo uploaded becomes a **SharinPix Image** record linked to the corresponding Form Answer.
3. The Record-Triggered Flow detects the creation of these SharinPix Image records.
4. The flow retrieves the related **Form Response** , obtains the **Parent record ID** (the Inspection record), and calls the **DuplicateImagesAutomation** Apex Action.
5. The Apex Action duplicates each image from the Form Answer level to the **Inspection record’s SharinPix Album**.

### Result in Salesforce

Once the flow completes:

* The images appear automatically under the **Inspection record’s album** in SharinPix.
* The same images remain visible within each corresponding Form Answer for traceability.
* No manual upload or linking is required.

*Form launched from Inspection record:*

<figure><img src="/files/sQxHAA2th2L2ilu3Hlrk" alt=""><figcaption></figcaption></figure>

<figure><img src="/files/4shuudDdHLUAgoZDDmVS" alt=""><figcaption></figcaption></figure>

*Images automatically displayed in the Inspection’s SharinPix album:*

![](/files/VzDSiU0SmXOpt8UGQHdc)


# Form Utils Methods

## Overview

The SharinPix package provides the Apex class, **FormUtils**, which contains utility methods for the [Form Feature](/forms/overview-and-getting-started/sharinpix-forms).

**The Form Utils methods include:**

* [generateToken: Generate form token](#generatetoken)
* [generateUrl / generateOnlineUrl: Generate form URL](#generateurl-generateonlineurl)
* [exportFormResponseAsContentDocument](#exportformresponseascontentdocument)
* [exportFormResponseAsContentDocument (with options)](#exportformresponseascontentdocument-with-options)

{% hint style="warning" %}
**Prerequisites:**

Before using any of the above methods, ensure the following:

* You have the latest **SharinPix Package** installed. This feature requires version **1.375** or higher. You can follow [this guide](https://docs-uat.sharinpix.com/faqs/how-to-update-sharinpix-package-from-the-appexchange) to upgrade your SharinPix Managed Package to the newest version.
* Users must have the **SharinPix Forms** **Admin** or **SharinPix Forms User** permission set assigned. For more information on these two permission sets, check [SharinPix Permission Sets](https://docs-uat.sharinpix.com/documentation/access-and-security/sharinpix-permission-sets).
  {% endhint %}

## Form Utils Methods Example

### generateToken

*global static String **generateToken**(String **recordId** , String **templateName** , Map\<String, Object> **options**)*

* This method generates a SharinPix Form Token with specific abilities. Below is a detailed description of each parameter:
  * **recordId (String)**\
    The unique identifier of the record associated with the form. This parameter specifies which record the generated token will be linked to. For example, if the form pertains to a specific account or case, you would pass that record's ID here.
  * **templateName (String)**\
    The Name of the Main Form Template to use for token generation. Do not use the ID of an individual version template.
  * **options (Map \<String, Object>)**\
    A key-value map that provides additional configuration options to customize the form's behavior. This parameter is optional and allows flexibility in defining extra settings. Common examples include:
    * **nameFieldApiName**: Specifies the API name of the field used to display a recognizable name for the form (e.g., a contact’s name or an opportunity title).
    * **formExpiry**: Defines the expiration date or duration for the form's validity. The formExpiry takes a number as value indicating the number of days after which the form will expire.

```apex
Map<string, object> options = new Map<string, object> {
    'nameFieldApiName' => 'WorkOrderNumber',
    'formExpiry' => 8
};

String token = sharinpix.FormUtils.generateToken('0018a00001rL2scAAC', 'MAIN_FORM_TEMPLATE_NAME', options);
```

### generateUrl / generateOnlineUrl

*global static String **generateUrl**(String **recordId** , String **templateName** , Map\<String, Object> **options**)*

*global static String **generateOnlineUrl**(String **recordId** , String **templateName** , Map\<String, Object> **options**)*

These methods generate a SharinPix Form URL (Universal Link) for a Main Form Template (Active Form Template). Both methods work the same way, with only one difference:

| ***generateUrl***       | Opens the form in the **SharinPix Mobile App** |
| ----------------------- | ---------------------------------------------- |
| ***generateOnlineUrl*** | Opens the form in a **Web Browser**            |

Below is a detailed description of each parameter:

* **recordId (String)**\
  The unique identifier of the record associated with the form. This parameter specifies the record associated with the generated form URL. For example, if the form pertains to a specific account or case, pass that record's ID here.
* **templateName (String)**\
  The Name of the Main Form Template to use for URL generation. Do not use the ID of an individual version template.
* **options (Map \<String, Object>)**\
  A key-value map that provides additional configuration options to customize the form's behavior. This parameter is optional and allows flexibility in defining extra settings. Common examples include:
  * **nameFieldApiName**: Specifies the API name of the field used to display a recognizable name for the form (e.g., a contact’s name or an opportunity title).
  * **formExpiry**: Defines the expiration date or duration for the form's validity. The formExpiry takes a number as value indicating the number of days after which the form will expire.

```apex
Map<String, Object> options = new Map<String, Object>{
    'nameFieldApiName' => 'WorkOrderNumber',
    'formExpiry' => 8
};

String mobileUrl = sharinpix.FormUtils.generateUrl('0018a00001rL2scAAC', 'MAIN_FORM_TEMPLATE_NAME', options);
String browserUrl = sharinpix.FormUtils.generateOnlineUrl('0018a00001rL2scAAC', 'MAIN_FORM_TEMPLATE_NAME', options);
```

### exportFormResponseAsContentDocument

*global static void **exportFormResponseAsContentDocument**(String **formResponsePublicId** , String **recordId**)*

This method exports a SharinPix Form Response PDF as a Salesforce **ContentDocument**, attaching it to a specified record.

Parameters:

* **formResponsePublicId (String)**\
  The public identifier of the SharinPix Form Response to export.
* **recordId (String)**\
  The Salesforce record ID to which the generated ContentDocument will be linked. This is typically the record (e.g., an Account, Case, or Work Order) that the form response pertains to.

```apex
sharinpix.FormUtils.exportFormResponseAsContentDocument(
    '01995896-6708-74dd-9d0d-cd962ba16a8df',
    '0018a00001rL2scAAC'
);
```

### exportFormResponseAsContentDocument (with options)

*global static void **exportFormResponseAsContentDocument**(String **formResponsePublicId** , String **recordId,** Map\<String, Object> **options**)*

This method works like the [previous one](#exportformresponseascontentdocument), but allows additional **export configuration options** , such as specifying a filename for the exported PDF. It still exports the SharinPix Form Response as a Salesforce **ContentDocument** and links it to the specified record.

**Parameters**

* **formResponsePublicId (String)**\
  The public identifier of the SharinPix Form Response to export.
* **recordId (String)**\
  The Salesforce record ID to which the generated ContentDocument will be linked.
* **options (Map \<String, Object>)**\
  A key-value map allowing you to customize the export behavior.

```apex
Map<String, Object> options = new Map<String, Object>{
    'filename' => 'FR0001'
};

sharinpix.FormUtils.exportFormResponseAsContentDocument(
    '01995896-6708-74dd-9d0d-cd962ba16a8df',
    '0018a00001rL2scAAC',
     options
);
```


# Form Features - Initial/Follow-up Form Responses (Comparative Form)

## Overview

{% hint style="info" %}
SharinPix Form can be configured to **compare current form responses with previous submissions**. This comparative view is particularly useful for follow-up forms, recurring inspections, or progress tracking, where users need to refer to their past inputs to provide updated or more accurate information.

This configuration is made directly from the **SharinPix Form Launcher**.

This article covers the following:

* [How to configure the comparative feature on the SharinPix Form Launcher](#configure-comparative-feature-on-the-sharinpix-form-launcher)
* [How to enable comparative mode on a Universal Link](#enable-comparative-mode-on-a-universal-link)
* [Demo of the Conditional Visibility feature with an Air Conditioning Inspection Example](#demo-air-conditioning-inspection-example)
* [Disable deletion of comparative Repeated Sections](#disable-deletion-of-comparative-repeated-sections)
  {% endhint %}

## Getting Started

{% hint style="success" %}
Every submitted form automatically generates a [**Form Response**](/documentation/lightning-web-component/sharinpix-form-response-lwc), which includes a unique **Form Response Data URL**.
{% endhint %}

### Configure Comparative Feature on the SharinPix Form Launcher

The comparative feature for the SharinPix Form can be configured from the **SharinPix Form Launcher** via the parameter **Initial Form Response** and takes as input <mark style="color:$danger;">`Use the latest form response`</mark> as shown in the diagram below.

After specifying to use the latest form response on the form launcher, the SharinPix Form Template will be opened in comparative mode by using the latest Form Response answers as previous values to compare from.

![](/files/7HhHokalZwANNf9vUNXi)

### Enable comparative mode on a Universal Link

{% hint style="info" %}
The user can also enable comparative mode by directly modifying the [SharinPix Form Universal Link URL](/forms/form-mobile-integration/integration-of-sharinpix-form-with-sfs-app-using-app-extension)
{% endhint %}

* To load a new form that displays answers from a previous submission, add the following custom parameter when opening the form:\ <mark style="color:$danger;">`ref_response_url=<Form Response Data URL>`</mark>\
  The value for **ref\_response\_url** is the **FormResponseDataURL\_\_c** Field value, which stores all the data, including images, of a submitted [*SharinPix Form Response*](/forms/overview-and-getting-started/sharinpix-forms).
* If the referenced response is based on the **same template** , the form will automatically switch to **Comparative Mode**.

### Demo: Air Conditioning Inspection Example

After the user submits the form:

* The form is opened with **Initial Form Response** configured on the [SharinPix Form Launcher](/documentation/lightning-web-component/sharinpix-form-launcher) or with a <mark style="color:$danger;">`Form Response Data URL`</mark> directly appended to the **SharinPix Form Universal Link.**
* The diagram below shows a form in **Comparative Mode** on the right after the submission on the left.
* This layout helps users quickly identify changes or ensure consistency.

![](/files/7EmdDy4zyfzdxLRItR1e)

When Comparative Mode is activated:

* The form loads your current editable fields **just above** the answers from the referenced submission.
* This makes it easy to **compare** , **verify** , or **update** information based on past responses.

### Disable deletion of comparative Repeated Sections

In Comparative Mode, repeated sections can include values from the referenced submission.

In some cases, you may want to prevent users from deleting those sections to preserve the comparison context.

If a user deletes a repeated section that came from the referenced response, the comparative data for that section is lost. Adding a new section does not restore that link. It creates a new section with no previous values.

To prevent that, configure an **Allow delete** formula on the repeated section. Use the `reference` attribute to access the previous answer linked to the current answer. In the example below, `reference.unit_number` is used to keep delete disabled when the previous answer already had a unit number.

For more on repeated sections, see [SharinPix Form - Repeated Section](/forms/form-sections-and-repeated-sections/sharinpix-form-sections-and-repeated-sections-1). For details on the `reference` attribute, see [SharinPix Form Formula: Fields and Attributes](/forms/form-elements/sharinpix-form-formula-fields-and-attributes).

<figure><img src="/files/MQsaCTWDPe2xrqa9p52o" alt=""><figcaption></figcaption></figure>

Now when launching the form, the delete button appears only on repeated sections that did not have a unit number in the previous submission.

<figure><img src="/files/1ttgpwX6uQMZ1OTWeCQh" alt=""><figcaption></figcaption></figure>


# SharinPix Form - Context Parameters

## Overview

**Context Parameters** allow you to pass custom values to a SharinPix Form when it is launched. These parameters become available throughout the form and can be used in formulas to control behavior, customize content, and adapt the form to different use cases.

This documentation covers:

* [What are Context Parameters](#what-are-context-parameters)
* [Passing Context Parameters](#passing-context-parameters)
* [Using Context Parameters in Formulas](#using-context-parameters-in-formulas)

{% hint style="warning" %}
**Prerequisites:**

* A SharinPix Form Template should already be created. Refer to the [SharinPix Form Template Editor documentation](/forms/form-elements/sharinpix-form-template-editor).
* Basic understanding of [SharinPix Form Formulas](/forms/form-elements/sharinpix-form-formula-functions-and-operators).
  {% endhint %}

## What are Context Parameters

Context parameters are key-value pairs passed to the form via the URL when launching it. Once passed, these values become available throughout the form and can be accessed using the <mark style="color:red;">`form.params object`</mark>.

Example: If you launch a form with <mark style="color:red;">`&context=inspection`</mark> in the URL, you can access this value anywhere in the form using <mark style="color:red;">`form.params.context`</mark>. This returns "inspection".

## Passing Context Parameters

Context parameters are passed as URL query parameters when launching the form.

### URL Format

**Universal Link:**

```
https://app.sharinpix.com/native_app/form?token=<your_form_token>&<param_name>=<value>
```

**Deeplink:**

```
sharinpix://form?token=<your_form_token>&<param_name>=<value>
```

## Using Context Parameters in Formulas

Below are usage examples of **Context Parameters** in **Formulas** for a dynamic **SharinPix Form**.

### Conditional Visibility

Show different form sections based on the context

#### Visibility Formula:

```
form.params.context = "inspection"
```

This makes the element visible only when context=inspection is passed in the URL.

![](/files/7KfIjkfYQ5N3MKKa2Pm7)

#### Example URL:

```
https://app.sharinpix.com/native_app/form?token=<your_form_token>&context=inspection
```

The form launches with the inspection section. The section was not visible on the editor since the **Context Parameter** was not present there.

![](/files/s0BsgpkA4JP8Vi8zQSN2)

**Use Case**

Create a single form template that adapts to different scenarios:

* context=inspection → Shows inspector-related fields
* context=customer → Shows customer-related fields

### Dynamic Default Values

#### Pre-populate fields with values from the URL:

```
form.params.stage
```

When launched with \&stage=Initial, the field defaults to "Initial".

![](/files/WucTjr16ZqKB5Qy7WMAV)

**Example URL:**

```
https://app.sharinpix.com/native_app/form?token=<your_form_token>&stage=Initial
```

The image below shows the form launched with the **Context Parameter** <mark style="color:red;">`stage=Initial`</mark>.

![](/files/72aBNnxsv9m6kXryVKYr)


# SharinPix Form - PDF Configuration

## Overview

The **PDF Configurations** feature in SharinPix Forms allows you to customize the appearance and layout of the generated PDF when a form is submitted. These settings help you create professional, branded PDF documents that meet your organization's needs.

This documentation covers:

* [Header & Footer Configuration](#configuring-header-and-footer-on-sharinpix-form-pdf)
* [Add Page Breaks on Form PDF](#add-page-breaks-on-sharinpix-form-pdf)
* [Customize Colors on PDF](#color-customization-on-sharinpix-form-pdf)
* [Full Page element](#full-page-element)
  * [Configuring the Full Page element](#configuring-the-full-page-element)
* [Signature Alignment](#signature-alignment)

## Configuring Header and Footer on SharinPix Form PDF

The **Header** and **Footer** allow you to add branded content that appears on every page of the generated PDF

Use them to display your company logo, form title, disclaimers, contact information, or any other branding elements.

### How to Configure

* In the Form Template Editor, click the **Settings** button in the top bar

![](/files/tX4ycoltrkL6rlxk78uW)

* In the settings panel, locate the **Header** and **Footer** fields

![](/files/tUXFW3r2wBszhfXiYCF8)

* Use the **Rich Text** editor to add your content
* Click **Save** to apply your changes

### Supported Content

Both Header and Footer fields support the same content types:

| Content Type          | Description                                                                     |
| --------------------- | ------------------------------------------------------------------------------- |
| **Text**              | Add formatted text including bold, italics, and different font sizes            |
| **Images**            | Insert logos or other images by clicking the image icon in the rich text editor |
| **Links**             | Add hyperlinks to external resources                                            |
| **Dynamic Variables** | Insert form values that update automatically (see below)                        |

{% hint style="success" %}
**Tip:** Keep headers and footers concise to maximize space for form content on each page.
{% endhint %}

Here is an example demonstrating how to a configure a header with company logo and a footer with contact information in a **Fire Inspection Form** :

![](/files/DJjfofnWbgDLDdwP2TII)

PDF generated after Form submission:

![](/files/xH0bqNOiYmGhmjWsjhjl)

### Using Dynamic Variables

You can insert dynamic values into your header and footer using the [Merge Field tool](/forms/form-elements/sharinpix-form-sections-and-repeated-sections-1#merge-field-tool) on the Rich Text Editor. These variables are automatically replaced with actual form data when the PDF is generated.

#### Example Variables

| Variable                                                      | Description                                                                                                   |
| ------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------- |
| <mark style="color:red;">`{!form.response.sfid}`</mark>       | The Salesforce Record ID linked to the form response                                                          |
| <mark style="color:red;">`{!form.response.sfname}`</mark>     | The Salesforce Record Name linked to the form response                                                        |
| <mark style="color:red;">`{!form.template.sfid}`</mark>       | The Form Template ID                                                                                          |
| <mark style="color:red;">`{!form.template.sfname}`</mark>     | The Form Template Name                                                                                        |
| <mark style="color:red;">`{!form.params.<form_param>}`</mark> | Any [SharinPix Form Context Parameter](/forms/advanced-form-configuration/sharinpix-forms-context-parameters) |
| <mark style="color:red;">`{!<formula>}`</mark>                | Any [SharinPix Form Formula](/forms/form-elements/sharinpix-form-formula-functions-and-operators) result      |

The image below illustrates how to use dynamic variables in a footer, for example:\ <mark style="color:red;">`{!address.value}`</mark>

![](/files/RRQSOWE82P0fFf36YCEQ)

## Add Page Breaks on SharinPix Form PDF

Page breaks allow you to control where content splits across pages in the generated PDF. This is useful for keeping related information together or starting new sections on fresh pages.

Page breaks can be added to the PDF by using the "Insert page break on PDF" option on a **Spacer** element as shown below.

![](/files/YNctyCGguJubjxzoICxF)

PDF generated after Form submission:

![](/files/9Q17A2IcL0zuRzixMGXY)

## Color Customization on SharinPix Form PDF

### Customize Titles on the PDF

The user can configure the **Background Color** of individual titles on the **Form PDF:**

| Element Type         | Configuration                                                                                                                                               |
| -------------------- | ----------------------------------------------------------------------------------------------------------------------------------------------------------- |
| **Title**            | Configure background color of the title on **PDF**                                                                                                          |
| **Repeated Section** | <p>Configure background color of the repeated title on <strong>PDF</strong><br>Configure background color of the sections title on <strong>PDF</strong></p> |
| **Section**          | Configure background color of the section title on **PDF**                                                                                                  |

Here is an example demonstrating how to apply a red color to a title in a **Fire Inspection Form** :

![](/files/V3MuHkIdY7OfYJVbKYFE)

![](/files/RZBgcDuJRltP2mhWT1CF)

PDF generated after Form submission:

![](/files/M28RbDWoN5mRQkGHBlNL)

## Full Page element

The **Full Page** element lets you add a full page to a PDF using richtext content and dynamic fields.

The example below shows a **Full Page** element used as a cover page in a PDF.

<figure><img src="/files/AUJKtA9T5a8LgjfPrr36" alt=""><figcaption></figcaption></figure>

To add it to a form, select the **Full Page** element from the left sidebar in the Form Editor.

<figure><img src="/files/DLPpYwWTFMkl1ql5bPET" alt=""><figcaption></figcaption></figure>

### Configuring the Full Page element

To configure the content of a **Full Page** element, click **Edit Richtext** in the element settings.

<figure><img src="/files/n3JbmeXeR6Fvkhlw0gMa" alt=""><figcaption></figcaption></figure>

This opens the editor in full-screen mode as shown below.

<figure><img src="/files/Cs97O78G8K68t3UjhbCL" alt=""><figcaption></figcaption></figure>

1. Click on an empty area of the page to add a new item. You can then move and resize it anywhere on the page
2. Use the richtext editor to update the content of the selected item.
3. Delete the selected item using the **Delete** button.
4. Set the page background color using the color picker.
5. Add a background image to the page by entering an image URL.
6. Exit the **Full Page** editor.

[Dynamic variables](#using-dynamic-variables) can be added and configured in the richtext editor, as shown below.

<figure><img src="/files/6VO7JtiMe9quWcDhe8CF" alt=""><figcaption></figcaption></figure>

### Signature Alignment

Configure the **Signature** element’s alignment in the generated PDF.

<figure><img src="/files/1eTMPqZwUFn63JOSwTOq" alt=""><figcaption></figcaption></figure>

Different alignments on PDF:

<figure><img src="/files/QT115yZYkOFtZ7ou55hj" alt=""><figcaption></figcaption></figure>


# Import Form PDF to Album using Flow (Admin-Oriented)

## Overview

{% hint style="info" %}
The <mark style="color:$danger;">`ImportFormPdfAutomation`</mark> Invocable Apex method allows users to automatically import a PDF generated from a SharinPix Form Response into a designated [SharinPix Album Component](/documentation/lightning-web-component/sharinpix-album-lwc). This can be used across various business scenarios where form submissions must be archived and associated with a record (e.g., sites, cases, inspections).

This invocable method is designed for use in Salesforce Flows and is compatible with automation for different types of form workflows.

This article covers the following :

1. [ImportFormPdfAutomation's Input Parameters](#input-parameters)
2. [Form Setup](#flow-setup)
   * [Step 1: Configure a Record-Triggered Flow](#step-1-configure-a-record-triggered-flow)
   * [Step 2: Assign Variables for the Action](#step-2-assign-variables-for-the-action)
   * [Step 3: Add the Import Action](#step-3-add-the-import-action)
   * [Step 4: Save and Activate the flow](#step-4-save-and-activate)
3. [Demo: Fire Safety Inspection Example](#demo-fire-safety-inspection-example)
   {% endhint %}

{% hint style="warning" %}
**Prerequisites**

Before configuring this automation, ensure the following:

* You have the latest **SharinPix Package** installed. You can follow [this guide](/faqs/how-to-update-sharinpix-package-from-the-appexchange) to upgrade your SharinPix Managed Package to the newest version.
* Users must have the **SharinPix Forms** **Admin** or **SharinPix Forms User** permission set assigned. For more information on these two permission sets, check [SharinPix Permission Sets](/documentation/access-and-security/sharinpix-permission-sets).
* A form template has been created using the [SharinPix Form Template Editor](/forms/form-elements/sharinpix-form-template-editor) and has been set up using the [SharinPix Form Launcher](/documentation/lightning-web-component/sharinpix-form-launcher).
  {% endhint %}

## Input Parameters

Below are the inputs required when using the <mark style="color:$danger;">`ImportFormPdfAutomation`</mark> invocable method in a Salesforce Flow. These parameters must be provided to successfully import the PDF into a SharinPix album.

| Parameter      | Description                                                                                                                                                                                                         |
| -------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| formResponseId | The ID of the <mark style="color:$danger;">`Form_Response__c`</mark> record from which the PDF will be imported. *(Required)*                                                                                       |
| albumId        | The ID of the SharinPix album where the PDF will be stored. This corresponds to the **destination record ID** , typically the record (e.g., Site, Inspection, or Case) to which the album is attached. *(Required)* |

## Flow Setup

This flow is setup using a **fire safety inspection** scenario as example.

### Step 1: Configure a Record-Triggered Flow

1. Go to **Setup** > **Flows** > Click **New Flow**
2. Choose **Record-Triggered Flow** and click **Create**
3. Set the following values:

| Setting               | Value                                                            |
| --------------------- | ---------------------------------------------------------------- |
| Object                | SharinPix Form Response                                          |
| Trigger               | A record is created or updated                                   |
| When to Run           | Only when a record is updated to meet the condition requirements |
| Optimize Flow For     | Actions and Related Records                                      |
| Add Asynchronous Path | On                                                               |

{% hint style="danger" %}
**Warning:**

Starting with the Salesforce **Winter’26 release**, Apex Actions can no longer be executed directly in the **Run Immediately** path of a record-triggered flow. Instead, they must be placed in an **asynchronous path**, as the synchronous execution option is no longer supported.

For more details, please refer to the documentation here:\
[*Unable to save a flow with an Apex Action after the Salesforce Winter ’26 release – What should I do?*](/faqs/i-am-unable-to-save-a-flow-with-an-apex-action-after-the-salesforce-winter-26-release-what-should-i)
{% endhint %}

**Set Entry Condition**

| Field       | Operator | Value |
| ----------- | -------- | ----- |
| ProcessedAt | Is Null  | False |

![](/files/SoBBWEGvM8XAJljjZtBT)

This configuration ensures the Flow runs only when the `ProcessedAt` field on the [SharinPix Form Response](/forms/salesforce-integration/sharinpix-form-response) has a value.

### Step 2: Assign Variables for the Action

Use an **Assignment** element to set the values to be passed to the invocable method.

In this fire safety inspection scenario, assume the album is stored, for example, on a related <mark style="color:$danger;">`Inspection__c`</mark> record.

| Variable           | Value                                             |
| ------------------ | ------------------------------------------------- |
| Album\_Id          | Triggering Form\_Response\_\_c > Parent Record ID |
| Form\_Response\_Id | Triggering Form\_Response\_\_c > Record ID        |

![](/files/iW319tJciHgbf3A4oDcq)

### Step 3: Add the Import Action

1. Add an **Action** element
2. Search for <mark style="color:$danger;">`sharinpix__ImportFormPdfAutomation`</mark>
3. Set the input values:

| Field            | Value              |
| ---------------- | ------------------ |
| Album ID         | Album\_Id          |
| Form Response ID | Form\_Response\_Id |

![](/files/RIvHVaaWtFrZgwsi9pkr)

This step ensures the inspection report PDF is imported directly into the correct album for the site or building.

### Step 4: Save and Activate

* Save the Flow
* Click **Activate** to begin automating PDF imports

![](/files/5kUlTmAtzLrEB0fEQHWG)

## Demo: Fire Safety Inspection Example

This example demonstrates importing the **fire safety inspection PDF** into the related site’s SharinPix album when a form is submitted.

* The diagram below demonstrates the PDF version of the form on the <mark style="color:$danger;">`Inspection__c`</mark> record's album.

![](/files/dchrZOI9Ck658Wk4pjKI)

![](/files/KkdDoqRt86s8BliWQ1EO)


# Import Form PDF as Content Document using Flow (Admin-Oriented)

## Overview

{% hint style="info" %}
The <mark style="color:red;">`FormResponseContentDocAutomation`</mark> Invocable Apex method allows users to automatically import a PDF generated from a SharinPix Form Response into Salesforce as a Content Document.

This invocable method is designed for use in Salesforce Flows and is compatible with automation for different types of form workflows.

This article covers the following :

1. [FormResponseContentDocAutomation's Input Parameters](#input-parameters)
2. [Flow Setup](#flow-setup)
   * [Step 1: Configure a Record-Triggered Flow](#step-1-configure-a-record-triggered-flow)
   * [Step 2: Add the Import Action](#step-2-add-the-import-action)
   * [Step 3: Save and Activate the flow](#step-3-save-and-activate)
   * [Step 4: Fill and Submit Form](#step-4-fill-and-submit-the-form)
     {% endhint %}

{% hint style="warning" %}
**Prerequisites**

Before configuring this automation, ensure the following:

* You have the latest **SharinPix Package** installed. You can follow [this guide](/faqs/how-to-update-sharinpix-package-from-the-appexchange) to upgrade your SharinPix Managed Package to the newest version.
* Users must have the **SharinPix Forms** **Admin** or **SharinPix Forms User** permission set assigned. For more information on these two permission sets, check [SharinPix Permission Sets](/documentation/access-and-security/sharinpix-permission-sets).
* A form template has been created using the [SharinPix Form Template Editor](/forms/form-elements/sharinpix-form-template-editor) and has been set up using the [SharinPix Form Launcher](/documentation/lightning-web-component/sharinpix-form-launcher).
  {% endhint %}

## Input Parameters

Below are the inputs required when using the <mark style="color:red;">`FormResponseContentDocAutomation`</mark> invocable method in a Salesforce Flow. These parameters must be provided to successfully import the PDF as a Content Document on Salesforce.

| Parameter            | Description                                                                                                               |
| -------------------- | ------------------------------------------------------------------------------------------------------------------------- |
| formResponsePublicId | The ID of the <mark style="color:red;">`Form_Response__c`</mark> record from which the PDF will be imported. *(Required)* |
| recordId             | The ID of the Salesforce Record the Content Document will be linked to. (*Required)*                                      |
| filename             | The Filename to be assigned to the Content Document.                                                                      |

## Flow Setup

This flow is setup to be triggered when a SharinPix Form Response record is created or updated with a value set for `ProcessedAt__c` and does the following:

* Generates a Content Document of the response
* Imports the Content Document on Salesforce
* Links it to the Form Response's parent record

### Step 1: Configure a Record-Triggered Flow

1. Go to **Setup** > **Flows** > Click **New Flow**
2. Choose **Record-Triggered Flow** and click **Create**
3. Set the following values:

| Setting                | Value                                                            |
| ---------------------- | ---------------------------------------------------------------- |
| Object                 | SharinPix Form Response                                          |
| Trigger                | A record is created or updated                                   |
| Condition Requirements | All Conditions Are Met (AND)                                     |
| Field                  | ProcessedAt                                                      |
| Operator               | Is Null                                                          |
| Value                  | False                                                            |
| When to Run            | Only when a record is updated to meet the condition requirements |
| Optimize Flow For      | Actions and Related Records                                      |
| Add Asynchronous Path  | On                                                               |

{% hint style="danger" %}
**Alert:**

Starting with the Salesforce **Winter’26 release**, Apex Actions can no longer be executed directly in the **Run Immediately** path of a record-triggered flow. Instead, they must be placed in an **asynchronous path**, as the synchronous execution option is no longer supported.

For more details, please refer to the documentation here:\
[*Unable to save a flow with an Apex Action after the Salesforce Winter ’26 release – What should I do?*](/faqs/i-am-unable-to-save-a-flow-with-an-apex-action-after-the-salesforce-winter-26-release-what-should-i)
{% endhint %}

![](/files/SoBBWEGvM8XAJljjZtBT)

This configuration ensures the Flow runs only when the `ProcessedAt` field on the [SharinPix Form Response](/forms/salesforce-integration/sharinpix-form-response) has a value.

### Step 2: Add the Import Action

1. Add an **Action** element
2. Search for <mark style="color:red;">`Sharinpix__FormResponseContentDocAutomation`</mark>
3. Set the input values:

| Field                                                             | Value                                                                     |
| ----------------------------------------------------------------- | ------------------------------------------------------------------------- |
| Salesforce record ID to which the Content Document will be linked | <mark style="color:red;">`{!$Record.sharinpix__ParentRecordId__c}`</mark> |
| SharinPix Form Response Public ID                                 | <mark style="color:red;">`{!$Record.sharinpix__PublicId__c}`</mark>       |
| Filename of the Content Document                                  | <mark style="color:red;">`{!$Record.Name}`</mark>                         |

![](/files/ImvLSLqTxA4XFmkC0alu)

This step ensures the inspection report PDF is imported directly into the Salesforce Record where the form was launched.

### Step 3: Save and Activate

* Save the Flow
* Click **Activate** to begin automating PDF imports as Content Documents.

![](/files/UtbOLpuLNGMQDOdQrQLj)

### Step 4: Fill and Submit the Form

Once the form has been submitted with the value set for `ProcessedAt__c`. The Content Document is generated and linked to the parent Salesforce record (where the form was launched) in the Notes & Attachments section.

![](/files/2B72xp2AlBryeCMdYZI1)

![](/files/kYJC2NyMSXc4C4qInih1)


# Integration of SharinPix Form with SFS App using App Extension

## Overview

{% hint style="info" %}
SharinPix Form can be integrated with the SFS (FSL) App using App Extension.

This article covers the following:

* [Creation of the App Extension with SharinPix Form universal Link or deeplink](#creation-of-the-app-extension)
* SharinPix Form - Additional Parameters
  * [Prefill Functionality](#prefill-functionality-in-sharinpix-form)
  * [Pre-Populate Select/Multi-Select Options](#pre-populate-select-multi-select-options)
  * [Comparative View](#comparative-view)
* [Creation of an App Extension embedding a Field Service Mobile Flow](#creation-of-an-app-extension-embedding-a-field-service-mobile-flow)
  {% endhint %}

{% hint style="warning" %}
**Assumptions:**

* The **Work Order** object will be used throughout this article.
* The **Work Order** object has a custom field named **SharinPix\_Form\_Token\_\_c** that holds a form token. If you haven't implemented this yet, refer to the article [SharinPix automatic form token generation](/forms/salesforce-integration/automatic-form-token-generation-using-flow-admin-oriented) to generate the form token.
  {% endhint %}

## Getting Started

One way to launch the SharinPix App from the SFS App using the SharinPix Form is to create an **App Extension**. The latter can embed a URL referring to the SharinPix Form on the SharinPix App, where the form can be filled out.

In this article, you will learn how the SharinPix Form URL is integrated into the SFS mobile App using the SFS App Extension.

## SharinPix Form URLs

### SharinPix Form Universal Link

The format for **universal links** (URL) to open a form in the SharinPix app is as follows:

<mark style="color:$danger;">`https://app.sharinpix.com/native_app/form?token=<sharinpix-form-token>`</mark>

### SharinPix Form Deeplink

The format for **deeplinks** to open a form in the SharinPix app is as follows:

<mark style="color:$danger;">`sharinpix://form?token=`</mark><mark style="color:$danger;">**`<sharinpix-form-token>`**</mark>

## Creation of the App Extension

An App Extension lets users quickly access the SharinPix Form in the SharinPix Mobile App. In this section, we will create an App Extension that launches the SharinPix app from the SFS app.

* Go to Setup, then type Field Service Mobile Settings in the Quick Find box. Click on **Field Service Mobile Settings**.
* Click on the **Field Service Mobile Settings** item (Or any settings relevant to your Organization).

<figure><img src="/files/Teg7maxH5P2louNbv8f0" alt=""><figcaption></figcaption></figure>

* Scroll down towards App Extensions Section.
* Click on **Add**. You will be prompted with the screen below:

<figure><img src="/files/fTSyJKOpuVw8NvfbHqNr" alt=""><figcaption></figcaption></figure>

* For the **Field Service Mobile Settings**, select the relevant record for your Organization. In our case, it is **Field Service Mobile Settings**.
* For the **Type**, select **Android** if you intend to use the App Extension on Android platforms or select **iOS** if you want to use it on iOS platforms.
* For the **Launch Value**, enter the following SharinPix Deeplink URL for **Android platforms**:

```
    https://app.sharinpix.com/native_app/form?token={!SharinPix_Form_Token__c}
```

Or use the following SharinPix Deeplink URL if you intend to use the App Extension on **iOS platforms**:

```
    https://app.sharinpix.com/native_app/form?token={!$SharinPix_Form_Token__c}
```

{% hint style="warning" %}
**Warning:**

When referencing a Salesforce field name on iOS, you must prefix it with an additional <mark style="color:red;">`$`</mark> (dollar sign). This is required by the iOS App Extension to interpret the field reference correctly.
{% endhint %}

{% hint style="success" %}
**Tips:**

**<https://app.sharinpix.com/native\\_app/form>** refers to the URL that will launch the SharinPix Form through the SharinPix Mobile App. **SharinPix\_Form\_Token\_\_c** refers to the custom field containing the SharinPix form token value defined in the previous sections.
{% endhint %}

* For the field **Label** , enter **Fill Fire Safety Form**
* For the field **Name** , enter **Fire\_Safety\_Form**
* For the field **Scoped To Object Types** , enter **WorkOrder**
* Click on **Save**

{% hint style="warning" %}
**Warning:**

* An App Extension is only visible on the record page of its associated object. You should always ensure that you enter the correct object API name when creating the App Extension.\
  \
  For example, suppose you are creating an App Extension for the Work Order object, the API name entered in the field **Scoped To Object Types** should be **WorkOrder**.\
  \
  If you are using a custom object named MyVisitObject, with MyVisitObject\_\_c as the API name, you should enter **MyVisitObject\_\_c** in the **Scoped To Object Types** field.&#x20;

* For the following test, ensure that you have installed the SharinPix mobile app on your device.

  You will find more information on where to find the SharinPix app in the article below:\
  \
  [Where to find the SharinPix mobile app](/documentation/mobile-app/where-to-find-the-sharinpix-mobile-app)
  {% endhint %}

## SharinPix Form - Additional Parameters

Additional parameters can be used to access **additional features** when using the SharinPix Form. The features that can be used are:

* [Prefilled values](/forms/form-mobile-integration/integration-of-sharinpix-form-with-sfs-app-using-app-extension#prefill-functionality-in-sharinpix-form)
* [Comparative](/forms/form-mobile-integration/integration-of-sharinpix-form-with-sfs-app-using-app-extension#comparative-view)
* [Context Parameters](/forms/advanced-form-configuration/sharinpix-forms-context-parameters)

{% hint style="info" %}
**Working around Salesforce App Extension limitations**<br>

Since there is a restriction on the number of characters an App Extension can have, a custom field can be added with the value containing all other mobile app parameters. The Universal URL will then be as follows:

<mark style="color:$danger;">`https://app.sharinpix.com/native_app/form?token={!SharinPix_Form_Token__c}&{!Your__Custom_Field__c}`</mark>

On **iOS,** since the Universal Link is encoded by Salesforce Field Service (SFS), the Universal Link URL should then be written as follows:

<mark style="color:$danger;">`https://app.sharinpix.com/native_app/form?token={!$SharinPix_Form_Token__c}&sp_params={!$Your_Custom_Field__c}`</mark>

For example **Your\_Custom\_Field\_\_c** can have the following value:

<mark style="color:$danger;">`pvName=John%20Doe&pvCount=23`</mark>
{% endhint %}

## Prefill Functionality in SharinPix Form

SharinPix Form can automatically **retrieve and display values** from related Salesforce records. This feature, known as *prefill functionality* , allows form fields to be dynamically populated with data from the record where the form is launched.

### Configuration Steps

1. **Set up in Form Builder**\
   The [prefill configuration must first be defined within the **SharinPix Form Builder**](/forms/form-elements/form-features-default-or-prefill-values).
2. **Construct the Deeplink**\
   Once configured, you must construct the deeplink (SharinPix Form URL) with the values to prefill.

### Prefill Parameter

To enable the prefill option, you must use the <mark style="color:$danger;">`pv`</mark> **parameter** followed by the API name of the form element.

* **Syntax:** <mark style="color:$danger;">`pv<ElementApiName>=<Encoded Prefill Value>`</mark>

The value must be **URL-encoded** before being passed.

### Example Universal Link with Prefill

The following example shows a universal link that pre-fills the **Name** field with *John Doe* :

<mark style="color:$danger;">`https://app.sharinpix.com/native_app/form?token=<Your Form Token>&pvName=John%20Doe`</mark>

In this case:

* <mark style="color:$danger;">`pvName`</mark> = API name of the form element
* <mark style="color:$danger;">`John%20Doe`</mark> = URL-encoded value for “John Doe”

### Multiple Prefills Using Formula Fields

If you need to prefill **multiple fields** in the same form, you can **concatenate the parameters in a Salesforce Formula field**.

* **Formula Example:** <mark style="color:$danger;">`"pvName=" & TEXT(Name) & "&pvAddress=" & TEXT(Address)`</mark>

{% hint style="warning" %}
**Note:**

When constructing deeplinks, **ensure that all values are properly URL-encoded before being passed**. This prevents unexpected behavior and guarantees that special characters are interpreted correctly.

To encode a field value in Salesforce, you can use the following formula:\ <mark style="color:$danger;">`SUBSTITUTE(SUBSTITUTE(SUBSTITUTE(SUBSTITUTE(SUBSTITUTE(SUBSTITUTE(SUBSTITUTE(SUBSTITUTE(SUBSTITUTE(FieldName__c, '%', '%25'), '+', '%2B'), '&', '%26'), '#', '%23'), '?', '%3F'), ' ', '%20'), '_', '%5F'), '-', '%2D'))`</mark>
{% endhint %}

* Universal Link Example with Formula Field:\ <mark style="color:$danger;">`https://app.sharinpix.com/native_app/form?token=<Your Form Token>&sp_params={!Formula_Field__c}`</mark>

This way, you can dynamically pass several prefill values at once using a single formula field.

{% hint style="info" %}
**Info:**\
\
For more information on the Prefill Feature, please follow the article below: [**Default or Prefill Values**](/forms/form-elements/form-features-default-or-prefill-values)
{% endhint %}

## Pre-Populate Select/Multi-Select Options

Select/Multi-Select field values can be prefilled by appending the form URL with the po, the API name of the Select/Multi-Select input field, followed either by the **label;value pair** or by only providing the **value**.

The following shows the **two** options:

| Method                                                                     | Description                                                                                                                                                                        |
| -------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| <mark style="color:$danger;">`pomulti_select=value1;value2`</mark>         | Passing only the value will result in the form using the value as label also.                                                                                                      |
| <mark style="color:$danger;">`poselect=label1:value1;label2;value2`</mark> | Passing the label and value will result in the form using the label as label and value as value. This can be used for specific cases where the label is not the same as the value. |

{% hint style="warning" %}
**Note:**&#x20;

* The value has been URL encoded.
* This will populate the list of options available in the Select/Multi-Select input field and not actually select a value.
* To prefill the Select/Multi-Select input field, use **pv, the apiName of the Select/Multi-Select input field,** followed by the **value, e.g pvselect=value** (value should be in the list of options for that field).
* More details can be found in the [Prefill Functionality in SharinPix Form section](/forms/form-mobile-integration/integration-of-sharinpix-form-with-sfs-app-using-app-extension#prefill-functionality-in-sharinpix-form).
  {% endhint %}

## Comparative View

The **Comparative View** feature allows users to compare current form responses with previous submissions. This is especially valuable for follow-up forms, recurring inspections, or progress tracking, where referencing past inputs helps provide updated or more accurate information.

### Comparative Parameter

To enable the comparative option, you must include the <mark style="color:$danger;">`ref_response_url`</mark> parameter in the universal link.

* Syntax: <mark style="color:$danger;">`ref_response_url=latestFormResponse`</mark>

### Example Universal Link with Comparative View

The following universal link demonstrates how to add the comparative parameter to a deeplink:

<mark style="color:$danger;">`https://app.sharinpix.com/native_app/form?token=<Your Form Token>&ref_response_url=latestFormResponse`</mark>

{% hint style="info" %}
**Info:**

For more information on the Comparative Feature, please follow the article below: [**Initial/Follow-up Form Responses (Comparative)**](/forms/advanced-form-configuration/form-features-initial-follow-up-form-responses-comparative-form)
{% endhint %}

## Creation of an App Extension embedding a Field Service Mobile Flow

You can also use App Extensions to launch **Field Service Mobile Flows** from the SFS app.

To do so, you simply need to select **Flow** as the **Type and use the Flow's API name as the Launch Value** in the App Extension detail page, as demonstrated below:

<figure><img src="/files/ZKpIA7yMi6N4YIJYbzFV" alt=""><figcaption></figcaption></figure>

{% hint style="success" %}
**Tip:**

To learn how to integrate the SharinPix App with SFS using Flows, refer to the following article:

[Integration of SharinPix App with SFS (FSL) App using Flows](/documentation/integrations/salesforce-field-service/integration-of-sharinpix-app-with-sfs-fsl-app-using-flows)
{% endhint %}

## Launching the SharinPix app

{% hint style="warning" %}
**Warning:**

1. Please make sure **each form is prime** before using it offline. For more information, follow this article.
2. App Extensions are cached on the Salesforce Field Service mobile app. Therefore, it may happen that changes made to App Extensions are not applied instantly on devices. To ensure that the changes are applied, you can clear the cache on the SFS app as follows:\
   \
   On the SFS app, go to **Profile** → **Settings** → **Advanced Settings** → **Clear Cached Metadata**

If the changes made to the App Extension are still unavailable after clearing the cache, try logging out and back in to the SFS app to force a refresh.
{% endhint %}

You can now launch the SharinPix app from SFS.

* Open the SFS app.
* Choose the Service Appointment record of a WorkOrder record.
* Select **Actions.**
* Then select **Inspection Form**. This option refers to the newly-created App Extension.
* You will then be directed to the SharinPix Form via the SharinPix app.

<figure><img src="/files/DnjCujOSXQRr4kDVru2r" alt=""><figcaption></figcaption></figure>


# Launching a Form on the mobile app (link syntax)

### Overview

{% hint style="info" %}
The SharinPix Form supports **universal links** that allow you to launch a form directly inside the **SharinPix Mobile App** from any external application—such as the Salesforce Mobile App, Field Service Lightning App, or any custom mobile or web application.

Universal links provide a simple, URL-based way to:

* Open a specific SharinPix Form using a secure form token
* Pass additional parameters such as
  * [Prefilled values](#id-1.-prefilled-values)
  * [Enable comparative mode to make a comparative analysis](#id-2.-comparative-mode)
  * [Relaunch an existing form / Open a form with the values of a previously submitted form](#id-3.-relaunch-refill)

This document explains how the universal link works, its syntax, and all the optional parameters supported.
{% endhint %}

### Universal Link Syntax

All SharinPix Forms opened in the mobile app use the following base URL:

**<https://app.sharinpix.com/native\\_app/form?token=\\><sharinpix-form-token>&\<parameter1>=\<value1>&\<parameter2>=\<value2>&....**

#### Components

| Component                                                                       | Description                                                                                           |
| ------------------------------------------------------------------------------- | ----------------------------------------------------------------------------------------------------- |
| <mark style="color:$danger;">`https://app.sharinpix.com/native_app/form`</mark> | Entry point used by the SharinPix Mobile App to recognize and open a form                             |
| <mark style="color:$danger;">`token=<sharinpix-form-token>`</mark>              | **Required**. A [secure token](#understanding-the-sharinpix-form-token) to identify the form instance |
| <mark style="color:$danger;">`&form=<formURL>`</mark>                           | Only required when using **generic tokens**                                                           |
| <mark style="color:$danger;">`&<parameter>=<value>`</mark>                      | Optional [additional parameters](#parameters)                                                         |

### Understanding the SharinPix Form Token

A **token** is a secure identifier used by SharinPix to authenticate and open forms through a universal link.\
Without a valid token, the universal link cannot launch a form in the SharinPix Mobile App.

You can generate a token that is **linked to one specific form**.

* This type of token is intended for **one-to-one usage**
* The universal link will always open **the exact form**

You can generate this token using the link below: [Generate Token for a Form](/forms/salesforce-integration/automatic-form-token-generation-using-flow-admin-oriented)

**Example of universal Link:**

**<https://app.sharinpix.com/native\\_app/form?token=\\><sharinpix-form-token>**

{% hint style="warning" %}
**Note: Generic Token (Advanced / Flexible Use Case)**

In addition to single-form tokens, SharinPix also supports **generic tokens**.

What is a Generic Token?

A **generic token** is a reusable token that can open **multiple different forms**.

Instead of being tied to a specific form, the form is defined dynamically using an additional URL parameter:

<mark style="color:$danger;">`&form=<formTemplateURL>`</mark>

Example: One Token, Multiple Forms

<mark style="color:red;">`https://app.sharinpix.com/native_app/form?token=<sharinpix-form-token>&form=formTemplateURL1`</mark>\ <mark style="color:red;">`https://app.sharinpix.com/native_app/form?token=<sharinpix-form-token>&form=formTemplateURL2`</mark>

Each link opens a different form, even though the **same token** is used.
{% endhint %}

### Parameters

Additional parameters can be used to access **additional features** when using the SharinPix Form. The features that can be used are:

1. [*Prefilled values*](#id-1.-prefilled-values)
2. [*Comparative*](#id-2.-comparative-mode)
3. [*Re-launch (Refill)*](#id-3.-relaunch-refill)
4. [*Await Upload*](#id-3.-await-upload)

### 1. Prefilled Values

SharinPix Form can automatically **retrieve and display values** from related Salesforce records. This feature, known as *prefill functionality* , allows form fields to be dynamically populated with data from the record where the form is launched.

#### Configuration Steps

1. **Set up in Form Builder**\
   The [*prefill configuration must first be defined within the **SharinPix Form Builder***](/forms/form-elements/form-features-default-or-prefill-values).
2. **Construct the Deeplink**\
   Once configured, you must construct the deeplink (SharinPix Form URL) with the values to prefill.

#### Prefill Parameter

To enable the prefill option, you must use the <mark style="color:$danger;">`pv`</mark> **parameter** followed by the API name of the form element.\
**Syntax:** <mark style="color:$danger;">`pv<ElementApiName>=<Encoded Prefill Value>`</mark>

The value must be **URL-encoded** before being passed.

#### Example Universal Link with Prefill

The following example shows a universal link that pre-fills the **Name** field with *John Doe* :\ <mark style="color:$danger;">`https://app.sharinpix.com/native_app/form?token=<Your Form Token>&pvName=John%20Doe`</mark>

In this case:

* <mark style="color:$danger;">`pvName`</mark> = API name of the form element
* <mark style="color:$danger;">`John%20Doe`</mark> = URL-encoded value for “John Doe”

#### Multiple Prefills Using Formula Fields

If you need to prefill **multiple fields** in the same form, you can **concatenate the parameters in a Salesforce Formula field**.\
**Formula Example:** <mark style="color:$danger;">`"pvName=" & TEXT(Name) & "&pvAddress=" & TEXT(Address)`</mark>

{% hint style="warning" %}
**Note:**

When constructing deeplinks, **ensure that all values are properly URL-encoded before being passed**. This prevents unexpected behavior and guarantees that special characters are interpreted correctly.

To encode a field value in Salesforce, you can use the following formula:\ <mark style="color:$danger;">`SUBSTITUTE(SUBSTITUTE(SUBSTITUTE(SUBSTITUTE(SUBSTITUTE(SUBSTITUTE(SUBSTITUTE(SUBSTITUTE(SUBSTITUTE(FieldName__c, '%', '%25'), '+', '%2B'), '&', '%26'), '#', '%23'), '?', '%3F'), ' ', '%20'), '_', '%5F'), '-', '%2D'))`</mark>
{% endhint %}

**Universal Link Example with Formula Field:**\ <mark style="color:$danger;">`https://app.sharinpix.com/native_app/form?token=<Your Form Token>&sp_params={!Formula_Field__c}`</mark>

This way, you can dynamically pass several prefill values at once using a single formula field.

{% hint style="info" %}
**Info:**\
For more information on the Prefill Feature, please follow the article below: [***Default or Prefill Values***](/forms/form-elements/form-features-default-or-prefill-values)
{% endhint %}

### 2. Comparative Mode

The comparative mode enables comparison of previous and current form states. This is especially valuable for follow-up forms, recurring inspections, or progress tracking, where referencing past inputs helps provide updated or more accurate information.

#### Comparative Parameter

To enable the comparative option, you must include the <mark style="color:red;">`ref_response_url`</mark> parameter in the universal link.\
**Syntax:** <mark style="color:$danger;">`ref_response_url=latestFormResponse`</mark>

#### Example Universal Link with Comparative View

The following universal link demonstrates how to add the comparative parameter to a universal link:\ <mark style="color:$danger;">`https://app.sharinpix.com/native_app/form?token=<Your Form Token > &ref_response_url=latestFormResponse`</mark>

{% hint style="info" %}
**Info:**\
For more information on the Comparative Feature, please follow the article below: [***Initial/Follow-up Form Responses (Comparative)***](/forms/advanced-form-configuration/form-features-initial-follow-up-form-responses-comparative-form)
{% endhint %}

### 3. Relaunch (Refill)

Reopens an existing submitted form with previous answers preloaded.

#### Relaunch Parameter

To enable the relaunch option, you must include the <mark style="color:$danger;">`form_response_url`</mark> parameter in the universal link.\
**Syntax:** <mark style="color:$danger;">`form_response_url=latestFormResponse`</mark>

#### Example Universal Link with Relaunch Parameter

The following universal link demonstrates how to add the relaunch parameter to a universal link:\ <mark style="color:$danger;">`https://app.sharinpix.com/native_app/form?token=<Your Form Token > &form_response_url=latestFormResponse`</mark>

{% hint style="info" %}
**Info:**\
For more information on the Relaunch Feature, please follow the article below: [***Reopen A Previously Submitted SharinPix Form Using URL Parameters***](/forms/salesforce-integration/reopen-a-previously-submitted-sharinpix-form#reopen-a-previously-submitted-sharinpix-form-using-url-parameters)
{% endhint %}

### 4. Await Upload

A parameter used to show the upload progress of medias from different batches captured using the SharinPix mobile app after submitting a form.

<figure><img src="/files/waQWOQqHVtj3rGqKg0sB" alt=""><figcaption></figcaption></figure>

To enable form await upload, you must include the <mark style="color:$danger;">`await_upload=form`</mark>  in the universal link.

The following demonstrates how to add await upload parameter to a universal link:

<mark style="color:$danger;">`https://app.sharinpix.com/native_app/form?token=<Your Form Token>&`</mark><mark style="color:$danger;">**`await_upload=form`**</mark>&#x20;

{% hint style="info" %}
**Info:**\
The await\_upload parameter can also be configured at the organization level. For more information on how to perform this configuration, refer to the following article:\
​[Await upload in Mobile App Global Configuration](/documentation/mobile-app/sharinpix-mobile-app-global-configuration#configure-the-await_upload-parameter)
{% endhint %}

{% hint style="success" %}
**Best Practices**

* Always **URL-encode** parameter values
* Use generic tokens when managing multiple forms
  {% endhint %}


# Overview

### <i class="fa-leaf">:leaf:</i> Features

#### <i class="fa-cubes">:cubes:</i> Main Integration

* [Using on a Lightning Record Page](/documentation/features/main-integration/using-on-a-lightning-record-page)
* [Using on the Lightning Home Page](/documentation/features/main-integration/using-on-the-lightning-home-page)
* [Using on Lightning with "SharinPix Album" Lightning Action](/documentation/features/main-integration/using-on-lightning-with-sharinpix-album-lightning-action)
* [Using on Lightning with "SharinPix Search" Lightning Component (Dev Skills Required)](/documentation/features/main-integration/using-on-lightning-with-sharinpix-search-lightning-component-dev-skills-required)
* [Using on Lightning with "SharinPix Album with Chatter" Lightning Component](/documentation/features/main-integration/using-on-lightning-with-sharinpix-album-with-chatter-lightning-component)
* [Using on Lightning with "SharinPix Mobile Launcher" Lightning Component (Admin Friendly)](/documentation/features/main-integration/using-on-lightning-with-sharinpix-mobile-launcher-lightning-component-admin-friendly)
* [Classic Look on a Lightning Page](/documentation/features/main-integration/classic-look-on-a-lightning-page)
* [Using on Lighting with your own personalized Lightning Component (Dev Skills)](/documentation/features/main-integration/using-on-lighting-with-your-own-personalized-lightning-component-dev-skills)
* [Using on Lightning with your own personalized Visualforce Component (Dev Skills)](/documentation/features/main-integration/using-on-lightning-with-your-own-personalized-visualforce-component-dev-skills)
* [Using on Classic with SharinPix Canvas App](/documentation/features/main-integration/using-on-classic-with-sharinpix-canvas-app)
* [Using on Classic with a Visualforce Page WITHOUT an Apex Controller (Admin Friendly version)](/documentation/features/main-integration/using-on-classic-with-a-visualforce-page-without-an-apex-controller-admin-friendly-version)
* [Using on Classic with a Visualforce Page WITH an Apex Controller (Developer skills required)](/documentation/features/main-integration/using-on-classic-with-a-visualforce-page-with-an-apex-controller-developer-skills-required)
* [Using on Salesforce flow (Developer skills required)](/documentation/features/main-integration/using-on-salesforce-flow-developer-skills-required)
* [Using on Salesforce Mobile Apps](/documentation/features/main-integration/using-on-salesforce-mobile-apps)
* [Using on Salesforce Field Service App (Field Service Lightning)](/documentation/features/main-integration/using-on-salesforce-field-service-app-field-service-lightning)
* [Using on Chatter](/documentation/features/main-integration/using-on-chatter)
* [Using SharinPix in Salesforce Community](/documentation/features/main-integration/using-sharinpix-in-salesforce-community)
* [Using SharinPix to PDF Component in Salesforce Community](/documentation/features/main-integration/using-sharinpix-to-pdf-component-in-salesforce-community)
* [Using on a Web Form](/documentation/features/main-integration/using-on-a-web-form)
* [Using in your own mobile app](/documentation/features/main-integration/using-in-your-own-mobile-app)
* [Using the Mobile Launcher Visualforce Component](/documentation/features/main-integration/using-the-mobile-launcher-visualforce-component)
* [Using a SharinPix component in an Iframe (Developer-oriented)](/documentation/features/main-integration/using-a-sharinpix-component-in-an-iframe-developer-oriented)
* [Integrate SharinPix Album on Your Website (Developer-oriented)](/documentation/features/main-integration/integrate-sharinpix-album-on-your-website-developer-oriented)
* [SharinPix Language Translation](/documentation/features/main-integration/sharinpix-language-translation)
* [Using the SharinPix to PDF Visualforce Component (Developer-Oriented)](/documentation/features/main-integration/using-the-sharinpix-to-pdf-visualforce-component-developer-oriented)
* [Using SharinPix deeplink to launch a PDF from Salesforce mobile](/documentation/features/main-integration/using-sharinpix-deeplink-to-launch-a-pdf-from-salesforce-mobile)
* [SharinPix Custom Translation](/documentation/features/main-integration/sharinpix-custom-translation)

#### <i class="fa-sidebar">:sidebar:</i> User Interface

* [Thumbnail View](/documentation/features/user-interface/thumbnail-view)
* [Thumbnail View - The Menu](/documentation/features/user-interface/thumbnail-view-the-menu)
* [Thumbnail View - Pagination](/documentation/features/user-interface/thumbnail-view-pagination)
* [Thumbnail View – Delete](/documentation/features/user-interface/thumbnail-view-delete)
* [Thumbnail View – Trash Bin](/documentation/features/user-interface/thumbnail-view-trash-bin)
* [Thumbnail View – Image Selection](/documentation/features/user-interface/thumbnail-view-image-selection)
* [Thumbnail View – Full Screen](/documentation/features/user-interface/thumbnail-view-full-screen)
* [Thumbnail View – Automatic Full Screen in Lightning](/documentation/features/user-interface/thumbnail-view-automatic-full-screen-in-lightning)
* [Thumbnail View - Tags](/documentation/features/user-interface/thumbnail-view-tags)
* [Thumbnail View - Sort](/documentation/features/user-interface/thumbnail-view-sort)
* [Thumbnail View – Open an Image in Large View](/documentation/features/user-interface/thumbnail-view-open-an-image-in-large-view)
* [Thumbnail View - Group PDF](/documentation/features/user-interface/thumbnail-view-group-pdf)
* [Thumbnail View - Display infos](/documentation/features/user-interface/thumbnail-view-display-infos)
* [Large View](/documentation/features/user-interface/large-view)
* [Large View: Caption/Title and Description](/documentation/features/user-interface/large-view-caption-title-and-description)
* [Large View: Toolbar](/documentation/features/user-interface/large-view-toolbar)
* [Large View: Toolbar – Tags](/documentation/features/user-interface/large-view-toolbar-tags)
* [Large View: Toolbar – Show/Hide Annotation](/documentation/features/user-interface/large-view-toolbar-show-hide-annotation)
* [Large View: Toolbar – Download](/documentation/features/user-interface/large-view-toolbar-download)
* [Large View: Toolbar – New Annotation Toolbar](/documentation/features/user-interface/large-view-toolbar-new-annotation-toolbar)
* [Large View: Toolbar – Annotate](/documentation/features/user-interface/large-view-toolbar-annotate)
* [Large View: Toolbar – Rotate](/documentation/features/user-interface/large-view-toolbar-rotate)
* [Large View: Toolbar – Crop](/documentation/features/user-interface/large-view-toolbar-crop)
* [Large View: Toolbar - Crop with Aspect Ratios](/documentation/features/user-interface/large-view-toolbar-crop-with-aspect-ratios)
* [Large View: Toolbar – Information](/documentation/features/user-interface/large-view-toolbar-information)
* [Large View: Annotation – Stickers](/documentation/features/user-interface/large-view-annotation-stickers)
* [Large View: Annotation – Text](/documentation/features/user-interface/large-view-annotation-text)
* [Large View: Annotation – Color Selection](/documentation/features/user-interface/large-view-annotation-color-selection)
* [Large View: Annotation – Edit](/documentation/features/user-interface/large-view-annotation-edit)
* [Large View: Annotation – Move](/documentation/features/user-interface/large-view-annotation-move)
* [Large View: Annotation – Tools](/documentation/features/user-interface/large-view-annotation-tools)
* [Large View: Annotation – Comment with Chatter](/documentation/features/user-interface/large-view-annotation-comment-with-chatter)
* [Large View: Viewer infos](/documentation/features/user-interface/large-view-viewer-infos)
* [Large View - Image Color Adjustments](/documentation/features/user-interface/large-view-image-color-adjustments)
* [Image and PDF Quality Settings](/documentation/features/user-interface/image-and-pdf-quality-settings)
* [Search Thumbnail View - Sort](/documentation/features/user-interface/search-thumbnail-view-sort)
* [Thumbnail View - Album Gallery Navigation](/documentation/features/user-interface/thumbnail-view-album-gallery-navigation)
* [Thumbnail View - Album Gallery Sections](/documentation/features/user-interface/thumbnail-view-album-gallery-sections)
* [Annotations Configurator](/documentation/features/user-interface/annotations-configurator)
* [Single Image Caption](/documentation/features/user-interface/single-image-caption)
* [SharinPix Add Licenses](/documentation/features/user-interface/sharinpix-add-licenses)

#### <i class="fa-cloud-arrow-up">:cloud-arrow-up:</i> Upload Images

* [Supported format - Rendered images](/documentation/features/upload-images/supported-format-rendered-images)
* [Supported format - Multipage format](/documentation/features/upload-images/supported-format-multipage-format)
* [Supported format - other files](/documentation/features/upload-images/supported-format-other-files)
* [Drag and Drop](/documentation/features/upload-images/drag-and-drop)
* [Using the Add button on a desktop](/documentation/features/upload-images/using-the-add-button-on-a-desktop)
* [Using the Add button on a mobile](/documentation/features/upload-images/using-the-add-button-on-a-mobile)
* [Upload from Webcam](/documentation/features/upload-images/upload-from-webcam)
* [Upload using WebForms](/documentation/features/upload-images/upload-using-webforms)
* [Restrict Uploads Using File Extensions](/documentation/features/upload-images/restrict-uploads-using-file-extensions)
* [Allowing Camera only image uploads (Mobile only)](/documentation/features/upload-images/allowing-camera-only-image-uploads-mobile-only)
* [SharinPix Video Capabilities](/documentation/features/upload-images/sharinpix-video-capabilities)
* [Upload Max File Size](/documentation/features/upload-images/upload-max-file-size)
* [Upload Large Files To SharinPix](/documentation/features/upload-images/upload-large-files-to-sharinpix)

#### <i class="fa-download">:download:</i> Download Images

* [Single Image download](/documentation/features/download-images/single-image-download)
* [Browser Download – right click menu](/documentation/features/download-images/browser-download-right-click-menu)
* [Download icon from the toolbar](/documentation/features/download-images/download-icon-from-the-toolbar)
* [Known limitation on iOS – Download a PDF](/documentation/features/download-images/known-limitation-on-ios-download-a-pdf)
* [Personalized image download - footer integration](/documentation/features/download-images/personalized-image-download-footer-integration)
* [Personalized image download with annotations (Admin-Oriented)](/documentation/features/download-images/personalized-image-download-with-annotations-admin-oriented)
* [Personalized image download with annotations (Developer-Oriented)](/documentation/features/download-images/personalized-image-download-with-annotations-developer-oriented)
* [Personalized image download without annotations](/documentation/features/download-images/personalized-image-download-without-annotations)
* [Personalized image download for a specific size/format](/documentation/features/download-images/personalized-image-download-for-a-specific-size-format)
* [Multiple Image download (ZIP) - how to add download:true to a VisualForce page](/documentation/features/download-images/multiple-image-download-zip-how-to-add-download-true-to-a-visualforce-page)
* [Multiple Image download (ZIP) - How to personalize the download filenames](/documentation/features/download-images/multiple-image-download-zip-how-to-personalize-the-download-filenames)
* [Multiple Image download (ZIP) - make it available for your Search Results](/documentation/features/download-images/multiple-image-download-zip-make-it-available-for-your-search-results)
* [Multiple Images download (ZIP) - Out of the box](/documentation/features/download-images/multiple-images-download-zip-out-of-the-box)
* [SharinPix Album: Multiple Image ZIP Download](/documentation/features/download-images/sharinpix-album-multiple-image-zip-download)
* [Download Image with Custom Filename directly from the SharinPix Image record URL](/documentation/features/download-images/download-image-with-custom-filename-directly-from-the-sharinpix-image-record-url)

#### <i class="fa-square-ellipsis-vertical">:square-ellipsis-vertical:</i> Menu Commands

* [Copy/Paste](/documentation/features/menu-commands/copy-paste)
* [How to copy an image from SharinPix](/documentation/features/menu-commands/how-to-copy-an-image-from-sharinpix)
* [Share Link](/documentation/features/menu-commands/share-link)
* [Your personalized command](/documentation/features/menu-commands/your-personalized-command)
* [Custom Sort Action in Thumbnail Menu](/documentation/features/menu-commands/custom-sort-action-in-thumbnail-menu)

#### <i class="fa-tags">:tags:</i> Working With Tags

* [Tags Command in SharinPix menu](/documentation/features/working-with-tags/tags-command-in-sharinpix-menu)
* [Create Tag](/documentation/features/working-with-tags/create-tag)
* [Fixed Tags from the menu](/documentation/features/working-with-tags/fixed-tags-from-the-menu)
* [Predefine tags for your users](/documentation/features/working-with-tags/predefine-tags-for-your-users)
* [Tags globally listed in the menu of all your albums](/documentation/features/working-with-tags/tags-globally-listed-in-the-menu-of-all-your-albums)
* [Tags available for a specific album](/documentation/features/working-with-tags/tags-available-for-a-specific-album)
* [Tag Action](/documentation/features/working-with-tags/tag-action)
* [Server Side notification – new\_tag\_image (Webhook)](/documentation/features/working-with-tags/server-side-notification-new-tag-image-webhook)
* [Client Side notification – tag-image-new (Footer)](/documentation/features/working-with-tags/client-side-notification-tag-image-new-footer)
* [Remove Tag](/documentation/features/working-with-tags/remove-tag)
* [Auto Tags](/documentation/features/working-with-tags/auto-tags)
* [Multi-Selection of Tags from Filtering Menu](/documentation/features/working-with-tags/multi-selection-of-tags-from-filtering-menu)
* [Tag Sets](/documentation/features/working-with-tags/tag-sets)
* [Filter albums by Tags (Tag Filter)](/documentation/features/working-with-tags/filter-albums-by-tags-tag-filter)

#### <i class="fa-magnifying-glass">:magnifying-glass:</i> Search Images

* [Using Salesforce Search on SharinPix Image objects](/documentation/features/search-images/using-salesforce-search-on-sharinpix-image-objects)
* [Using the Search Image tab](/documentation/features/search-images/using-the-search-image-tab)
* [Why do we need a report ?](/documentation/features/search-images/why-do-we-need-a-report)
* [How to create a report for Image Search](/documentation/features/search-images/how-to-create-a-report-for-image-search)
* [How to open the Image Search page with a Report Id and Filters dynamically](/documentation/features/search-images/how-to-open-the-image-search-page-with-a-report-id-and-filters-dynamically)
* [Using your personalized Search](/documentation/features/search-images/using-your-personalized-search)
* [Your Salesforce Filters](/documentation/features/search-images/your-salesforce-filters)
* [The Tag Filters](/documentation/features/search-images/the-tag-filters)
* [How to show the result](/documentation/features/search-images/how-to-show-the-result)
* [How to personalize the image large view and interaction (footer)](/documentation/features/search-images/how-to-personalize-the-image-large-view-and-interaction-footer)
* [Display Thumbnail Infos](/documentation/features/search-images/display-thumbnail-infos)
* [Using Sort inside query parameters](/documentation/features/search-images/using-sort-inside-query-parameters)
* [Using tag filters inside query parameters](/documentation/features/search-images/using-tag-filters-inside-query-parameters)
* [SharinPix Aggregate Search (Developer-Oriented)](/documentation/features/search-images/sharinpix-aggregate-search-developer-oriented)
* [Using your personalized Search in a Salesforce Flow (Admin-Oriented)](/documentation/features/search-images/using-your-personalized-search-in-a-salesforce-flow-admin-oriented)
* [Using Collage on Search Component](/documentation/features/search-images/using-collage-on-search-component)

***

### <i class="fa-bolt-lightning">:bolt-lightning:</i> Lightning Web Component

* [SharinPix Album (LWC)](/documentation/lightning-web-component/sharinpix-album-lwc)
* [SharinPix Album with Chatter](/documentation/lightning-web-component/sharinpix-album-with-chatter)
* [SharinPix Chatter](/documentation/lightning-web-component/sharinpix-chatter)
* [SharinPix Copy To Clipboard](/documentation/lightning-web-component/sharinpix-copy-to-clipboard)
* [SharinPix Map](/documentation/lightning-web-component/sharinpix-map)
* [SharinPix Mobile Launcher](/documentation/lightning-web-component/sharinpix-mobile-launcher)
* [SharinPix Form Launcher](/documentation/lightning-web-component/sharinpix-form-launcher)
* [SharinPix Related Record Albums (LWC)](/documentation/lightning-web-component/sharinpix-related-record-albums-lwc)
* [SharinPix Related Search](/documentation/lightning-web-component/sharinpix-related-search)
* [SharinPix Rich Text To PDF](/documentation/lightning-web-component/sharinpix-rich-text-to-pdf)
* [SharinPix Search](/documentation/lightning-web-component/sharinpix-search)
* [SharinPix Single Image](/documentation/lightning-web-component/sharinpix-single-image)
* [SharinPix Single Image Grid](/documentation/lightning-web-component/sharinpix-single-image-grid)
* [SharinPix To Album](/documentation/lightning-web-component/sharinpix-to-album)
* [SharinPix To PDF](/documentation/lightning-web-component/sharinpix-to-pdf)
* [SharinPix To Rich Text Area](/documentation/lightning-web-component/sharinpix-to-rich-text-area)
* [SharinPix Upload Button](/documentation/lightning-web-component/sharinpix-upload-button)
* [SharinPix Custom Upload Button](/documentation/lightning-web-component/sharinpix-custom-upload-button)
* [SharinPix Plan](/documentation/lightning-web-component/sharinpix-plan)
* [SharinPix Map To Album](/documentation/lightning-web-component/sharinpix-map-to-album)
* [SharinPix Plan Items Related List](/documentation/lightning-web-component/sharinpix-plan-items-related-list)
* [SharinPix Merge Album](/documentation/lightning-web-component/sharinpix-merge-album)
* [SharinPix Album Resync](/documentation/lightning-web-component/sharinpix-album-resync)
* [SharinPix Import Files](/documentation/lightning-web-component/sharinpix-import-files)
* [SharinPix Collage (before/after photo layout)](/documentation/lightning-web-component/sharinpix-collage)
* [SharinPix Share Selection](/documentation/lightning-web-component/sharinpix-share-selection)
* [SharinPix PDF Form Builder](/documentation/lightning-web-component/sharinpix-pdf-form-builder)
* [SharinPix Mobile PDF Form Launcher](/documentation/lightning-web-component/sharinpix-mobile-pdf-form-launcher)
* [SharinPix Token Viewer](/documentation/lightning-web-component/sharinpix-token-viewer)
* [SharinPix Plan Share Link](/documentation/lightning-web-component/sharinpix-plan-share-link)
* [SharinPix Plan to Album](/documentation/lightning-web-component/sharinpix-plan-to-album)
* [SharinPix PDF Merge](/documentation/lightning-web-component/sharinpix-pdf-merge)
* [SharinPix Share](/documentation/lightning-web-component/sharinpix-share)
* [SharinPix Sketch Plan](/documentation/lightning-web-component/sharinpix-sketch-plan)
* [SharinPix Sketcher](/documentation/lightning-web-component/sharinpix-sketcher)
* [SharinPix Sketch Components for Salesforce Field Service Usage](/documentation/lightning-web-component/sharinpix-sketch-components-for-salesforce-field-service-usage)
* [SharinPix LWC Custom Upload Button (Developer-Oriented)](/documentation/lightning-web-component/sharinpix-lwc-custom-upload-button-developer-oriented)
* [SharinPix Generate Form Response PDF](/documentation/lightning-web-component/sharinpix-generate-form-response-pdf)
* [SharinPix Generate PDF on Form Response](/documentation/lightning-web-component/sharinpix-generate-pdf-on-form-response)
* [SharinPix Search Display](/documentation/lightning-web-component/sharinpix-search-display)
* [SharinPix Form Response LWC](/documentation/lightning-web-component/sharinpix-form-response-lwc)
* [SharinPix Album](/documentation/lightning-web-component/sharinpix-album)
* [Broken mention](broken://pages/SYMU6s4oYERHwdzeUJ6n)
* [Broken mention](broken://pages/j2va906fxVUpZVUzUgNm)
* [Broken mention](broken://pages/1p90pvkS6OUj6BSjOqV4)

***

### <i class="fa-mobile-notch">:mobile-notch:</i> Mobile App

* [Where to find the SharinPix mobile app](/documentation/mobile-app/where-to-find-the-sharinpix-mobile-app)
* [SharinPix Mobile App: How it works](/documentation/mobile-app/sharinpix-mobile-app-how-it-works)
* [SharinPix mobile app: Minimal Requirements](/documentation/mobile-app/sharinpix-mobile-app-minimal-requirements)
* [SharinPix Mobile App: Settings Screen](/documentation/mobile-app/sharinpix-mobile-app-settings-screen)
* [How to install the SharinPix mobile app Beta version](/documentation/mobile-app/how-to-install-the-sharinpix-mobile-app-beta-version)
* [SharinPix Mobile App: Take Pictures](/documentation/mobile-app/sharinpix-mobile-app-take-pictures)
* [SharinPix Mobile App: Tag Pictures](/documentation/mobile-app/sharinpix-mobile-app-tag-pictures)
* [SharinPix Mobile App: Add Title and Description to photos](/documentation/mobile-app/sharinpix-mobile-app-add-title-and-description-to-photos)
* [SharinPix Mobile App: Upload Pictures](/documentation/mobile-app/sharinpix-mobile-app-upload-pictures)
* [SharinPix Mobile App : Deeplink syntax](/documentation/mobile-app/sharinpix-mobile-app-deeplink-syntax)
* [Navigation with SharinPix Deep Link and Universal Link](/documentation/mobile-app/navigation-with-sharinpix-deep-link-and-universal-link)
* [Mobile token generation methods](/documentation/mobile-app/mobile-token-generation-methods)
* [SharinPix automatic mobile upload token generation (Admin Friendly)](/documentation/mobile-app/sharinpix-automatic-mobile-upload-token-generation-admin-friendly)
* [SharinPix Mobile App: Checklist](/documentation/mobile-app/sharinpix-mobile-app-checklist)
* [SharinPix Mobile App: Global Configuration](/documentation/mobile-app/sharinpix-mobile-app-global-configuration)
* [SharinPix Mobile App: Online mode](/documentation/mobile-app/sharinpix-mobile-app-online-mode)
* [SharinPix Mobile App: Smart Document Scanning](/documentation/mobile-app/sharinpix-mobile-app-smart-document-scanning)
* [SharinPix Mobile App: Snap & Say](/documentation/mobile-app/sharinpix-mobile-app-snap-say)
* [SharinPix Mobile App: Create a Shooting Job for later upload](/documentation/mobile-app/sharinpix-mobile-app-create-a-shooting-job-for-later-upload)
* [SharinPix Mobile App: Access to Shooting Job](/documentation/mobile-app/sharinpix-mobile-app-access-to-shooting-job)
* [SharinPix PDF Photo Field](/documentation/mobile-app/sharinpix-pdf-photo-field)
* [Troubleshoot SharinPix Mobile App Common Issues](/documentation/mobile-app/troubleshoot-sharinpix-mobile-app-common-issues)
* [SharinPix Mobile App: Team Checklist](/documentation/mobile-app/sharinpix-mobile-app-team-checklist)
* [SharinPix Mobile App: Template Image](/documentation/mobile-app/sharinpix-mobile-app-template-image)
* [Export media to internal storage](/documentation/mobile-app/export-media-to-internal-storage)
* [SharinPix Mobile App: Checklist with Form Features](/documentation/mobile-app/sharinpix-mobile-app-checklist-with-form-features)
* [SharinPix Mobile App: Text Recognition on Scan (OCR)](/documentation/mobile-app/sharinpix-mobile-app-text-recognition-on-scan-ocr)
* [SharinPix Mobile App: Roomplan](/documentation/mobile-app/sharinpix-mobile-app-roomplan)
* [Sharinpix Mobile App: Change Language](/documentation/mobile-app/sharinpix-mobile-app-change-language)
* [SharinPix Mobile App: Why Background Uploads May Pause or Stop](/documentation/mobile-app/sharinpix-mobile-app-why-background-uploads-may-pause-or-stop)

***

### <i class="fa-lock-keyhole">:lock-keyhole:</i> Access & Security

* [SharinPix Abilities](/documentation/access-and-security/sharinpix-abilities)
* [SharinPix Permission object - How to create and assign custom permission?](/documentation/access-and-security/sharinpix-permission-object-how-to-create-and-assign-custom-permission)
* [SharinPix Permission for SharinPix Mobile Launcher Component](/documentation/access-and-security/sharinpix-permission-for-sharinpix-mobile-launcher-component)
* [How to dynamically assign SharinPix Permission records to albums using Flows? (Admin-Friendly)](/documentation/access-and-security/how-to-dynamically-assign-sharinpix-permission-records-to-albums-using-flows-admin-friendly)
* [SharinPix permission](/documentation/access-and-security/sharinpix-permission)
* [Customizing your SharinPix Global Settings](/documentation/access-and-security/customizing-your-sharinpix-global-settings)
* [SharinPix Webcam Permissions](/documentation/access-and-security/sharinpix-webcam-permissions)
* [SharinPix automatic token generation (Developer-oriented)](/documentation/access-and-security/sharinpix-automatic-token-generation-developer-oriented)
* [Online token generation methods](/documentation/access-and-security/online-token-generation-methods)
* [SharinPix security token](/documentation/access-and-security/sharinpix-security-token)
* [How to pull the SharinPix Token onto my object? (Developer-oriented)](/documentation/access-and-security/how-to-pull-the-sharinpix-token-onto-my-object-developer-oriented)
* [Token validation or invalidation using Session ID](/documentation/access-and-security/token-validation-or-invalidation-using-session-id)
* [SharinPix Endpoint URLs to authorize or whitelist](/documentation/access-and-security/sharinpix-endpoint-urls-to-authorize-or-whitelist)
* [Integration in a WebForm (Admin Friendly)](/documentation/access-and-security/integration-in-a-webform-admin-friendly)
* [Integration in a WebForm (Developer-oriented)](/documentation/access-and-security/integration-in-a-webform-developer-oriented)
* [How to display one image or a group of images using the SharinPix Album component? (Developer-Orient](/documentation/access-and-security/how-to-display-one-image-or-a-group-of-images-using-the-sharinpix-album-component-developer-oriented)
* [SharinPix User and Profiles access rights](/documentation/access-and-security/sharinpix-user-and-profiles-access-rights)
* [SharinPix Community users access rights](/documentation/access-and-security/sharinpix-community-users-access-rights)
* [SharinPix Permission Sets](/documentation/access-and-security/sharinpix-permission-sets)
* [SharinPix Imports Requirements](/documentation/access-and-security/sharinpix-imports-requirements)
* [SharinPix Token Verification](/documentation/access-and-security/sharinpix-token-verification)

***

### <i class="fa-arrows-rotate-reverse">:arrows-rotate-reverse:</i> Image Sync

* [What is SharinPix Image Sync?](/documentation/image-sync/what-is-sharinpix-image-sync)
* [What are the uses of Image Sync ?](/documentation/image-sync/what-are-the-uses-of-image-sync)
* [The SharinPix Image Object](/documentation/image-sync/the-sharinpix-image-object)
* [Setup SharinPix Image Sync](/documentation/image-sync/setup-sharinpix-image-sync)
* [Enable Image Sync for Classic](/documentation/image-sync/enable-image-sync-for-classic)
* [Enable Image Sync for Lightning](/documentation/image-sync/enable-image-sync-for-lightning)
* [SharinPix Transformation - get your images automatically resized!](/documentation/image-sync/sharinpix-transformation-get-your-images-automatically-resized)
* [SharinPix Transformations Examples](/documentation/image-sync/sharinpix-transformations-examples)
* [SharinPix Transformation - Get your images watermarked](/documentation/image-sync/sharinpix-transformation-get-your-images-watermarked)
* [Image Sync for pictures uploaded via SharinPix Mobile App](/documentation/image-sync/image-sync-for-pictures-uploaded-via-sharinpix-mobile-app)
* [Force Image Sync using Apex Code or Developer console](/documentation/image-sync/force-image-sync-using-apex-code-or-developer-console)
* [How to use image sync on multiple albums (batch)?](/documentation/image-sync/how-to-use-image-sync-on-multiple-albums-batch)
* [Troubleshoot Common Image Sync Issues](/documentation/image-sync/troubleshoot-common-image-sync-issues)
* [SharinPix Image Transformation using a Flow (Admin-Oriented)](/documentation/image-sync/sharinpix-transformation-flow)

***

### <i class="fa-circles-overlap">:circles-overlap:</i> Integrations

#### <i class="fa-paper-plane">:paper-plane:</i> Events

* [Types of SharinPix Events](/documentation/integrations/events/types-of-sharinpix-events)
* [Configure Server-side Events](/documentation/integrations/events/configure-server-side-events)
* [Client-side Events List](/documentation/integrations/events/client-side-events-list)
* [Capturing SharinPix Selection Event](/documentation/integrations/events/capturing-sharinpix-selection-event)
* [SharinPix Display Events](/documentation/integrations/events/sharinpix-display-events)
* [Capturing Client-side events](/documentation/integrations/events/capturing-client-side-events)

#### <i class="fa-clone">:clone:</i> Other Apps

* [SharinPix integration with TaskRay](/documentation/integrations/other-apps/sharinpix-integration-with-taskray)
* [SharinPix Search Display component integration with Avonni Dynamic Components](/documentation/integrations/other-apps/sharinpix-search-display-component-integration-with-avonni-dynamic-components)
* [SharinPix WebView on a Native Android Mobile Application](/documentation/integrations/other-apps/sharinpix-webview-on-a-native-android-mobile-application)
* [SharinPix WebView on a Native iOS Mobile Application](/documentation/integrations/other-apps/sharinpix-webview-on-a-native-ios-mobile-application)

#### <i class="fa-location-dot">:location-dot:</i> Salesforce Field Service

* [Integration of SharinPix App with SFS (FSL) App using App Extension](/documentation/integrations/salesforce-field-service/integration-of-sharinpix-app-with-sfs-fsl-app-using-app-extension)
* [Integration of SharinPix App with SFS (FSL) App using Flows](/documentation/integrations/salesforce-field-service/integration-of-sharinpix-app-with-sfs-fsl-app-using-flows)
* [Add Photos on a Newly-Created Record Using Field Service Mobile Flow and SFS Mobile (Developer-Oriented)](/documentation/integrations/salesforce-field-service/add-photos-on-a-newly-created-record-using-field-service-mobile-flow-and-sfs-fsl-mobile-developer-or)
* [View a SharinPix album from the SFS (FSL) app](/documentation/integrations/salesforce-field-service/view-a-sharinpix-album-from-the-sfs-fsl-app)
* [Using deeplink to return to SFS (FSL) Flow with additional image information](/documentation/integrations/salesforce-field-service/using-deeplink-to-return-to-sfs-fsl-flow-with-additional-image-information)
* [Display Images in Service Report (Salesforce Field Service / FSL)](/documentation/integrations/salesforce-field-service/display-images-in-service-report-salesforce-field-service-fsl)
* [SharinPix Image Gallery (Document Builder)](/documentation/integrations/salesforce-field-service/sharinpix-image-gallery-document-builder)
* [SharinPix for Field Service - our customers are talking for us](/documentation/integrations/salesforce-field-service/sharinpix-for-field-service-our-customers-are-talking-for-us)

### <i class="fa-comments">:comments:</i> Chatter Feed

* [SharinPix Chatter Feed for Image and Annotation - how it works? what to expect?](/documentation/chatter-feed/sharinpix-chatter-feed-for-image-and-annotation-how-it-works-what-to-expect)
* [Use the pre-build SharinPix Album with Chatter Feed](/documentation/chatter-feed/use-the-pre-build-sharinpix-album-with-chatter-feed)
* [Personnalise your Page with SharinPix Chatter Feed](/documentation/chatter-feed/personnalise-your-page-with-sharinpix-chatter-feed)

***

### <i class="fa-shapes">:shapes:</i> Cookbook

* [SharinPix Code Generator](/documentation/cookbook/sharinpix-code-generator)
* [Generate SharinPix PDFs Automatically](/documentation/cookbook/generate-sharinpix-pdfs-automatically)
* [Display an image in a Salesforce field using Tag Action](/documentation/cookbook/display-an-image-in-a-salesforce-field-using-tag-action)
* [Display an image in Salesforce fields using Salesforce Flows](/documentation/cookbook/display-an-image-in-salesforce-fields-using-salesforce-flows)
* [Display another record's album on a page record using a Flow (Admin-friendly)](/documentation/cookbook/display-another-record-s-album-on-a-page-record-using-a-flow-admin-friendly)
* [Rename a SharinPix album using a Flow (Admin-Oriented)](/documentation/cookbook/rename-a-sharinpix-album-using-a-flow-admin-oriented)
* [Create Contacts from an Account using VisualFlow](/documentation/cookbook/create-contacts-from-an-account-using-visualflow)
* [Display a list of records with corresponding SharinPix albums (Developer-oriented)](/documentation/cookbook/display-a-list-of-records-with-corresponding-sharinpix-albums-developer-oriented)
* [Integrating SharinPix with Salesforce Mobile App using Lightning Action and Visualforce](/documentation/cookbook/integrating-sharinpix-with-salesforce-mobile-app-using-lightning-action-and-visualforce)
* [Extract Parameters from URL to display Album](/documentation/cookbook/extract-parameters-from-url-to-display-album)
* [Fullscreen Image Viewer](/documentation/cookbook/fullscreen-image-viewer)
* [Open a specific image in Full View](/documentation/cookbook/open-a-specific-image-in-full-view)
* [Generate SharinPix Mobile URL](/documentation/cookbook/generate-sharinpix-mobile-url)
* [Automatic token generation on a WorkOrder using Trigger (Developer-oriented)](/documentation/cookbook/automatic-token-generation-on-a-workorder-using-trigger-developer-oriented)
* [SharinPix Webhooks](/documentation/cookbook/sharinpix-webhooks)
* [SharinPix Webhook Payload](/documentation/cookbook/sharinpix-webhook-payload)
* [Duplicate a SharinPix album using a Flow (Admin-Oriented)](/documentation/cookbook/duplicate-a-sharinpix-album-using-a-flow-admin-oriented)
* [Append images to a Rich Text field using a Flow (Admin-Oriented)](/documentation/cookbook/append-images-to-a-rich-text-field-using-a-flow-admin-oriented)
* [SharinPix Map Use Cases](/documentation/cookbook/sharinpix-map-use-cases)
* [SharinPix Plan Use Cases](/documentation/cookbook/sharinpix-plan-use-cases)
* [Implement a SharinPix upload button in a Visualforce page](/documentation/cookbook/implement-a-sharinpix-upload-button-in-a-visualforce-page)
* [List of SharinPix LWC and Aura components in the SharinPix package](/documentation/cookbook/list-of-sharinpix-lwc-and-aura-components-in-the-sharinpix-package)
* [Embed SharinPix Aura components in LWC using Screen Flows](/documentation/cookbook/embed-sharinpix-aura-components-in-lwc-using-screen-flows)
* [Salesforce Files Import and Export using SharinPix Features](/documentation/cookbook/salesforce-files-import-and-export-using-sharinpix-features)
* [Append images to a Rich Text field using a Batch (Developer-Oriented)](/documentation/cookbook/append-images-to-a-rich-text-field-using-a-batch-developer-oriented)
* [SharinPix Mobile App: Retrieve User Information When Uploading Photos (Developer-Oriented)](/documentation/cookbook/sharinpix-mobile-app-retrieve-user-information-when-uploading-photos-developer-oriented)
* [Implement a SharinPix Token Decoder in Salesforce (Developer-Oriented)](/documentation/cookbook/implement-a-sharinpix-token-decoder-in-salesforce-developer-oriented)
* [Generate token from SharinPix Permission with Apex](/documentation/cookbook/generate-token-from-sharinpix-permission-with-apex)
* [Display an Album in a Lightning Web Component](/documentation/cookbook/display-an-album-in-a-lightning-web-component)
* [Display an upload button in a Lightning Web Component](/documentation/cookbook/display-an-upload-button-in-a-lightning-web-component)
* [Share Utils Methods](/documentation/cookbook/share-utils-methods)
* [Download Zip - Using Customized Download Filenames to Build a Folder Structure](/documentation/cookbook/download-zip-using-customized-download-filenames-to-build-a-folder-structure)
* [SharinPix Mobile App: Track Mobile Users Uploading Photos From the SharinPix Mobile App](/documentation/cookbook/sharinpix-mobile-app-track-mobile-users-uploading-photos-from-the-sharinpix-mobile-app)
* [SharinPix Generative AI Analysis/Extract Image Capabilities](/documentation/cookbook/sharinpix-generative-ai-analysis-extract-image-capabilities)
* [SharinPix Media Import Feature](/documentation/cookbook/sharinpix-media-import-feature)
* [SharinPix Sketch to Album](/documentation/cookbook/sharinpix-sketch-to-album)
* [SharinPix Bulk PDF Generation Feature (Developer-oriented)](/documentation/cookbook/sharinpix-bulk-pdf-generation-feature-developer-oriented)
* [Generate SharinPix Shareable Album Links Automatically](/documentation/cookbook/generate-sharinpix-shareable-album-links-automatically)
* [Upload Images with Custom Metadata (Developer-Oriented)](/documentation/cookbook/upload-images-with-custom-metadata-developer-oriented)
* [Refreshing SharinPix Mobile Launcher and Handling OnClick Events](/documentation/cookbook/refreshing-sharinpix-mobile-launcher-and-handling-onclick-events)
* [SFS Components Configuration (Roomplan, Document Scanner, Barcode Scanner, and Image and Annotate)](/documentation/cookbook/sfs-components-configuration-roomplan-document-scanner-barcode-scanner-and-image-and-annotate)
* [Delete or Purge SharinPix Images](/documentation/cookbook/delete-or-purge-sharinpix-images)
* [Automatically move images from Lead record to Opportunity on Lead Conversion](/documentation/cookbook/automatically-move-images-from-lead-record-to-opportunity-on-lead-conversion)
* [Organization Utils Methods](/documentation/cookbook/organization-utils-methods)
* [SharinPix AI Extractor Integration in Salesforce Flow (Admin-Oriented)](/documentation/cookbook/sharinpix-ai-extractor-integration-in-salesforce-flow-admin-oriented)
* [Duplicate SharinPix Images Using a Flow (Admin-Oriented)](/documentation/cookbook/duplicate-sharinpix-images-using-a-flow-admin-oriented)
* [SharinPix Flow JSON Parser Integration in Salesforce Flow (Admin-Oriented)](/documentation/cookbook/sharinpix-flow-json-parser-integration-in-salesforce-flow-admin-oriented)
* [Utils methods](/documentation/cookbook/utils-methods)
* [Image methods](/documentation/cookbook/image-methods)
* [Automatic Album Token Generation using a Flow (Admin-Oriented)](/documentation/cookbook/rename-a-sharinpix-album-using-a-flow-admin-oriented-1)

***

### <i class="fa-backward">:backward:</i> Legacy

* [2017 - Documentation](/documentation/legacy/2017-documentation)
* [Test Drive information](/documentation/legacy/test-drive-information)


# Main Integration


# Using on a Lightning Record Page

In this section, we will dive deeper into adding the SharinPix Album component on a record page.

To do so:

1. [Drag and drop SharinPix Album onto the record page](#id-1.-drag-and-drop-the-sharinpix-album-on-the-record-page)
2. [Configure the SharinPix Album's parameters](#id-2.-configure-the-sharinpix-albums-parameters)
3. [Tip: Add a custom tab to access the component quickly](#id-3.-tip-add-a-custom-tab-to-access-the-component-quickly)

## 1. Drag and drop the SharinPix Album on the record page

To add the SharinPix Album component to your record page, open the Lightning App Builder from the record page as indicated below.

1. Click on the **Setup Icon**.
2. Select **Edit Page**.

![](/files/BGdoaCyyotdhyh7oWv9N)

3\. From the **Lightning Components** list under the **Custom-Managed** section, select the **SharinPix Album** component.

4\. Drag and drop it onto the page.

{% hint style="warning" %}
**Note:**

If you can't see the SharinPix Album or any SharinPix components in the list of components, please ensure that you enable the My Domain on your organization.

For more information on how to enable My Domain, refer to this video: <https://salesforce.vidyard.com/watch/oFQ26FCXPVOA90xZaVDDjA>
{% endhint %}

![](/files/8KNdsOEAUVfrf30M22gX)

## 2. Configure the SharinPix Album's parameters

After dropping the **SharinPix Album** component on the desired region, configure its parameters as desired in the Ligning Component Parameters section on the right.

![](/files/CjP8UUWaHIx5g1HRlLsm)

You will find the description of each parameter below.

* **AlbumId:** Used to specify the album Id. If you want to use the record Id as the album Id, leave this field blank.
* **Height:** Used to specify the album's height. The default album height is **500** (px).
* **Use Fullscreen Image Viewer:** Used to enable/disable the option to view images in full screen.
* **Fullscreen Viewer Padding:** Used to add padding. The default value is **90px 0 0 0**.
* **Enable Action:** Used to enable/disable Tag Action. **Note:** The Tag Action is enabled by default on the SharinPix Album component. For more information on this feature and how to complete the Tag Action setup, refer to this article: [*Tag Action*](/documentation/features/working-with-tags/tag-action)
* **Enable Image Sync:** Used to enable/disable Image Sync. **Note:** Image Sync is checked by default on the SharinPix Album component. Additional steps are required to get this feature fully working on your Salesforce object. Please refer to this article to complete the Image Sync setup: *Setup* [*SharinPix Image Sync*](/documentation/image-sync/setup-sharinpix-image-sync)
* **Enable Toast:** Used to enable/disable toast message upon successful image upload.
* **Auto Refresh View:** Used to enable/disable the option to reload the view. **Note:** *This option is not supported in the Salesforce Community. When configured within a Community, it is advised to disable this option on the component.*
* **Custom Permission Id or Name:** Used to specify the Id or Name of a custom permission.
* **Available Tags:** Used to specify a list of tag names delimited by a semi-colon. Example: TagA;TagB;TagC;
* **Auto Tags:** Used to specify a list of tags delimited by a semi-colon to apply to every image uploaded. Example: TagA;TagB;TagC;
* **Component ID:** Used to specify the component Id's to be matched by add-on components on a page.

## 3. Tip: Add a custom tab to access the component quickly

Create a custom tab on the Lightning App Builder to easily access the **SharinPix Album** component.

1. Click on **Add Tab.**
2. Then click on the newly created tab to rename it.
3. Open the **Tab Label** dropdown and select **Custom** from the list.
4. In the **Custom Tab Label** text box, enter the desired tab label, for example, *Photos*.

![](/files/IpZxSLsxlasn5LW9d9V0)

5\. Click on the newly created custom Tab, in this case, the **Photos** tab.

7\. Drag and drop the **SharinPix Album** in the *Photos* tab.

![](/files/29phjb8mrQLahJUavnAk)

8\. The **SharinPix Album** component is now available within the custom tab.

9\. Click **Save when done.**

10\. You can now start uploading photos!


# Using on the Lightning Home Page

In this section, we will learn about the different steps for adding the **SharinPix Album** Component onto the Home page, as shown in the screenshot below.

![](/files/tJG8GLM49PfAEDDzYLMK)

**Information:**

The **SharinPix Album** component was previously named **SharinPix**.

* [Difference between the Record page and the Home Page](#difference-between-the-record-page-and-the-home-page)
* [Choosing an album Id](#choosing-an-album-id)
* [Finding the Album Id](#finding-the-album-id)
* [Drag and drop the SharinPix Album onto the Home Page](#drag-and-drop-the-sharinpix-album-onto-the-home-page)
* [Configure the SharinPix Album's parameters](#configure-sharinpix-albums-parameters)

## Difference between the Record Page and the Home Page

{% hint style="success" %}
In the chapter [Using SharinPix on Lightning From a Record Page](/documentation/features/main-integration/using-on-a-lightning-record-page), we've seen that it is possible to add the SharinPix Album component to a record page without specifying the album Id. This is because the component's default album id corresponds to the id of the current record.

However when adding the SharinPix Album component to the **Home Page** , it is mandatory to specify an album id, as the **Home Page** does not possess a default record Id.

Each album needs to be associated with a Record Page.
{% endhint %}

## Choosing an album Id

In order to determine which album Id to use, you need to choose which images you want to display on the **Home Page**. If these images are already present on a record page, you can use its corresponding record id as the album Id. (see the next section, *Finding the Album Id*, to learn how to retrieve a record page's record id).

However, if you don't have a ready-made record page that uses the SharinPix Album component in a ready-made object, you'll need to create a custom object to house the records and images for your home page.

Here's how this can be done:

* Create a new custom object, named for example, Photo Files.
* Create at least one record for your object. (Say, Home Page Photos.)
* Add a SharinPix Album component to the new record ([Using SharinPix on Lightning From a Record Page](/documentation/features/main-integration/using-on-a-lightning-record-page) for more info.)
* Upload your home page images into the SharinPix Album component.

Next, we'll get the Album Id to use on our Home Page's SharinPix Album.

## Finding the Album Id

Here's how to find the **record Id (album Id)** of a record of your choice:

* Navigate to the desired record containing the images you wish to display on the **Home Page.**
* Copy the highlighted value as shown below from the address bar of the browser. ( 18 numbers after the "object name/")
* Paste the copied value inside the **album id** field (see [Configure SharinPix Parameters](#configure-sharinpix-albums-parameters)).

![](/files/NoAEpyMv5eD0f0oHgogi)

## Drag and drop the SharinPix Album onto the Home Page

To add SharinPix Album component on the Home Page:

1. Click on the **Setup Icon**.
2. Select **Edit Page**.
3. From the **Lightning Components** list under the **Custom - Managed** section, select the **SharinPix Album** component.
4. Drag and drop the component into the page.

![](/files/HOlsB7JFqsioLb3yQ262)

## Configure SharinPix Album's parameters

After dropping the **SharinPix Album** component on the desired region, you will be able to configure its parameters from the right side panel.

The parameters are:

* **Album Id** - Specify an album id from which to display the images. **IMPORTANT:** The value for the album is **required** in the **Home Page** layout context. (see [Extracting the album Id](#finding-the-album-id))
* **Height** - Specify the height of the SharinPix component. The Minimum size allowed is 300.
* **Use Fullscreen Image Viewer** - Enable/disable option to view image in full screen.
* **Fullscreen Viewer Padding** - To add padding.
* **Enable Action** - Enable/disable Tag Action.
* **Enable Image Sync** - Enable/disable Image Sync.
* **Enable Toast** - Enable/disable toast on successful image upload.
* **Auto Refresh View** - Enable/disable option to reload view.
* **Custom Permission Id or Name** - Specify the id for a custom permission.
* **Component ID** - Used to specify the component Id's to be matched by add-on components on a page.

![](/files/1E6uRFS1SCp8Dhh5AMpR)

5\. Click on **Save** when done.


# Using on Lightning with "SharinPix Album" Lightning Action

The present article shows the different ways to use a Lightning Action within the Salesforce Lightning Experience. You'll be able to launch SharinPix from an Action on any Page Layout, and you can access it from your mobile phone as well.

## Open SharinPix Album with Lightning Action

* Go to Setup -> Object Manager. Select the Object Type on which you intend to add the custom action. In the present case, it will be added on the Account Object.
* On the left-hand-side of the screen, select the Button, Links and Actions item.

![](/files/YspACs5cIuc1GSJG90sx)

* For the Action Type picklist, select Lightning Component.
* For the Lightning Component field, select \<sharinpix>:SharinPixAlbum. (as shown in the figure below).

![](/files/TaTbRUwpS6E094tHcEDm)

1. Adjust the Height to a minimum of 525px.
2. Select a Standard Label Type.
3. Label: SharinPix Album
4. Name: SharinPix\_Album
5. Click on save.
6. The next step is now to add the Custom Action to the Account Page Layout.
7. Head over to the Account Page Layout most relevant to your case.
8. From Mobile & Lightning Actions, drag and drop the SharinPix Album action inside the Salesforce Mobile and Lightning Experience Actions section. Click on save.

* Access an account record. The newly-created custom action should appear on the page-layout.

![](/files/ZojxrDmnWlCryqpx4XKE)

* When the action is selected, the SharinPix Album is launched as shown in the image below.

![](/files/DgRkSxxTkrt4VXydHNZC)

{% hint style="success" %}
Don't hesitate to name your Lightning Action with something more relevant than SharinPix Album corresponding to your business.

Something such as "Camera" / "Photos" ....

Please note than those actions could be available on mobile under Salesforce mobile App. Refer to articles on the Mobile App for more information.

If you want your action to use a camera icon, you can find some while searching for SharinPix or Camera when adding the icon to the action.
{% endhint %}


# Using on Lightning with "SharinPix Search" Lightning Component (Dev Skills Required)

The present article will show how to use the SharinPix Search Lightning Component in Salesforce.

The Lightning Component **SharinPix Search** is already installed with the SharinPix package. In the present context, we will use this component on the record page of the Account object.

* Access the **Lightning App Builder:**
  * The attribute **Report ID** corresponds to the **Report** record that references one or more records from which to display the relevant images.
  * The attribute **Tag Operator** possesses two values: **OR** and **AND.** Those values are logical operators that ensure that the tags are either both present or one of them is at-least present on the image search result.
  * The attribute **Tag Names** correspond to the set of tags in JSON format that will be used as a search filter by the attribute **Tag Operator**. Example: \["Paris", "London"]
  * The attribute **Affixes** are prefixes and suffixes to add to the object IDs returned by the report. Value should be an array in JSON format. Leave blank for none. Example: \["london\_+", "+\_paris"]
  * The **Height** attribute defines the search result area measured in pixels(px).

![](/files/3aEizjsxiYSGTfCTER4o)

* The screenshot demonstrates how the SharinPix Search Lightning Component appears on a record Page of an Account Object.

![](/files/WS9t7hjDt1wL6AseABvW)


# Using on Lightning with "SharinPix Album with Chatter" Lightning Component

The present article will demonstrate how it is possible to use the **SharinPix Album with Chatter** component.

{% hint style="info" %}
**Information:**

The **SharinPix Album with Chatter** component was previously named **SharinPix with Chatter**.
{% endhint %}

* Access the record page of any Salesforce Object. In this case, it is **Account**.
* The "SharinPix with Chatter" component can be found in the **Lightning App Builder** under the **Custom - Managed** section  as shown in the screenshot below.&#x20;

![](/files/AgdHDkIYWOKzQEvNIGwH)

The **SharinPix Album with Chatter** component consists of two elements:

* The **SharinPix Album**
* The **Preview Pane**

![](/files/3dd2OfE3cKSBcB0kbXWW)

* Access the **Large View** of an image by clicking on its thumbnail.

![](/files/1lpbCZv8NKz0crtXDn6C)

* It can be witnessed that when the **Large View** mode is activated, the Preview Pane reacts accordingly and indicates that the current image has no Chatter Posts.

## Create Chatter Post for an annotation

* It is possible to create a **Chatter Post** which is related to a specific annotation.
* Activate **annotation** mode as shown belo&#x77;**.**

![](/files/tk7jOtf9wsSBS3ATaeCC)

* Create a new annotation.

![](/files/6wQvC6eqnTVjUxdkWfRV)

* Select the newly-created annotation by clicking on it.
* As illustrated in the screenshot below, upon selecting the annotation, the preview pane indicates that this annotation has no **Chatter Posts**.

![](/files/dGerRgMEXClXxuTkQN1F)

* Click on the **Start a discussion** button to create a Chatter Post which is directly related to the currently-selected annotation.&#x20;

![](/files/Ge4YWEBIAisAVrJI6R8l)

* It is now possible to share an update or create a post about the selected annotation.

![](/files/YSHfpTuXfrojYFmD0qQv)

![](/files/k8GkIzdLKhzzXVcO6XvZ)

## Chatter Feed

* It should also be mentioned that new post about the newly-created annotation is displayed as well on the Chatter Feed.

![](/files/dHQKtc7gJGdUVqWQhC1S)


# Using on Lightning with "SharinPix Mobile Launcher" Lightning Component (Admin Friendly)

SharinPix uses the **SharinPix Mobile Launcher** component to launch the SharinPix mobile app from the Salesforce mobile app.

In this article, you will learn how to use the SharinPix Mobile Launcher.

## How to access the SharinPix Mobile Launcher component?

* Access the record page of any Salesforce object and open the **Lightning App Builder**. In this case, it is the **Account** object.
* To preview the behavior on a mobile device, switch from the **Desktop** view to the **Phone** view as shown below:

![](/files/i2O9bJ0anpNnQw5L37Kg)

* The **SharinPix Mobile Launcher** component is accessible in the **Lightning App Builder** under the **Custom Managed** section as depicted in the screenshot below:

![](/files/34ycWvn9mogN5lyNO9b5)

* Drag and drop the component onto the preview pane.

![](/files/aEtJPr9251fIHbAy1z5i)

SharinPix also provides the possibility of applying different settings on the Mobile Launcher component. These settings can be used to modify the behavior of the SharinPix mobile app when launched.

The Mobile Launcher settings are available in the right pane of the Lightning App Builder. The picture below shows how the settings are displayed:

![](/files/y8IOFhwcaLSi2kYp8kCw)

The SharinPix Mobile Launcher settings are:

* **Button label:** Allows you to set the component's label. By default it is set as "**Launch Mobile App**".
* **Album ID:** refers to the ID of the album in which images will be uploaded. You can leave this field blank if you intent to upload images for the current record.
* **Mode:** Using this option in **camera** mode will directly open the camera upon launching the SharinPix app. Using it in **roll** mode will force the SharinPix app to open the roll/gallery.
* **Allow images from roll/gallery:** To allow image upload from roll/gallery.
* **Confirm image taken:** Enables the option to confirm an image captured before the upload.
* **Camera flash:** To enable/disable the camera flash.
* **Tags:** allows the setting up of a tag list that will be made available when capturing photos.
* **Auto tags:** allows you to set an auto tag.
* **Default tags:** allows you to set a default tag.
* **Checklist:** allows you to set a checklist.
* **Skip job association screen:** To enable/disable the job association screen.
* **Show overlay:** Use selected image from a SharinPix Album as overlay. The component will be disabled if no image is selected.
* **Custom parameters:** allows addition of user-defined parameters to the SharinPix app launcher URL.
* **Component Id:** Component ID to be matched by SharinPix components on the page. This is any text which will be common between this component and the SharinPix album component. It allows for matching components to communicate in case some components need to be repeated on the same record page. Example: Set 'sharinpix-1' as Component Id here and also on SharinPix Album component's Component ID field.

{% hint style="warning" %}
**Note:**

For the **Tags** , **Auto tags** , **Default tags,** and **Checklist** settings, the semi-colon symbol ";" is to be used to separate the tag values.
{% endhint %}

{% hint style="info" %}
More information about some of the setting options are available in the following article:

[SharinPix mobile App : Deeplink syntax](/documentation/mobile-app/sharinpix-mobile-app-deeplink-syntax)
{% endhint %}

When finished, click **Save** and **Activation** buttons.

## Launch the SharinPix mobile app using SharinPix Mobile Launcher

You can now access the SharinPix Mobile Launcher from the Salesforce mobile app. To do so, follow the steps below:

* Open the Salesforce app
* Go to an Account and select the Mobile Launcher component labelled as (**Launch Mobile App**).

![](/files/UftvrkXcFbh4jxZheJgJ)

* This action will launch the SharinPix mobile app.

![](/files/cke2hD3Z391lt9GzaC7a)

{% hint style="success" %}
For more information about the **SharinPix Mobile Launcher** syntax, refer to the following article:

[Using the Mobile Launcher Visualforce Component](/documentation/features/main-integration/using-the-mobile-launcher-visualforce-component)
{% endhint %}


# Classic Look on a Lightning Page

There are quite a few steps for this workaround, when you have both Classic and Lightning Users, or when you are transitioning from Classic to Lightning and want to retain the look and feel of your familiar SharinPix.

We will walk through the steps for inserting SharinPix on a Lightning record's page-layout via either a Canvas app or a Visualforce component. The image below shows the expected final result when SharinPix has been added to the page-layout of the Contact object.

{% hint style="warning" %}
**Note:**

Since Canvas apps have some limitations such as limited number of calls within 24-hour, we strongly recommend the usage of the **SharinPix Visualforce Component** over the **SharinPix Canvas App** for implementations. The SharinPix Canvas App can still be used for testing purposes however.

For more information about Canvas app limitations, please refer to the following link:

<https://developer.salesforce.com/docs/atlas.en-us.platform_connect.meta/platform_connect/canvas_framework_limits.htm>
{% endhint %}

![](/files/QBoNlbfU5Xtgk1HlYASH)

* [Edit page-layout of record](#id-1.-edit-page-layout-of-record)
* [Drag and Drop Record Detail on the page of the record](#id-2.-drag-and-drop-record-detail-on-the-page-of-the-record)
* [Access the SharinPix Album features](#id-3.-access-the-sharinpix-album-features)

## 1. Edit page layout of record

From **Setup**,

3\. Click on **Object Manager.**

4\. Select the Object you wish to modify. In this context, we are going to use the **Contact** object as an example.

![](/files/BlQ9dXomtJz4HWU8NRbq)

5\. Select **Page Layouts.**

![](/files/zobYJruEVV8wt8AqH58x)

Select the relevant page-layout on which you intend to add SharinPix:

6\. For this example, we've picked the **Contact Layout.**

![](/files/eBhDBefIK4xQ19vbugy0)

You will be redirected to the **Page Layout Editor.**

7\. From the **Component Types List,** select the type of component, containing SharinPix, that you wish to add to the page-layout.

![](/files/hYNvtwogGb2fgjAlClbY)

The component can be either:

8\. A canvas app.

![](/files/n9wVLLMYLn4ZnyJAOWAv)

9\. Or a Visualforce component. Instructions for configuring the VF component can be found [here.](broken://spaces/2putv2B9RAZpym8daOH2/pages/RGusPjruaQUX3OFeLMVW)

![](/files/IfuvpW1stLe2KgIsuiET)

In the present context, we used the **SharinPix Canvas** App named **Albums.** You can learn to set this up in the Getting Started Chapter.

![](/files/xQpRrh8RakrqeUOx61t9)

Drag and drop the selected component into the desired region. In this case:

10\. The section **SharinPix Album** has been created on the page-layout with the following properties:

![](/files/I0ptKaJrCw77qrodRJEW)

11\. The **Albums** canvas app has been dragged and dropped inside the **SharinPix Album section.**

![](/files/O2YBjgmZihD6m7c3242W)

12\. Edit the properties of the canvas app as shown below. (**Note:** Apply the same properties in the case of a Visualforce component)

![](/files/8F0w2Lb04ovAg7oCUhd5)

13\. Click on **Save**, when you are done.

![](/files/CE4nb9CwsqvEFQq5pU4S)

## 2. Drag and Drop Record Detail on the page of the record

Navigate to the Lightning App Builder on the **Contact** record (or in your case, the relevant object).

Start by opening a Contact Record. Then:

14\. Click on the **Setup** icon.

15\. Select **Edit Page.**

![](/files/GkNzm2IQIRrFDYKW5OlO)

Drag and Drop the **Record Detail** component onto the desired region.(In this case, the dropping zone will be the **DETAILS** tab)

16\. Click and drag the **Record Detail** component from the **Lightning Components** list found on the right sidebar of the **Lightning App** **Builder.**

![](/files/wS7gvjl7oFJRIr0Yzw7X)

17\. Drop the **Record Detail component** onto the desired region.

![](/files/UJJXycC1jhkgfZYpXgQa)

![](/files/8NykmgYZsqAnF8DuP3Yo)

From the previous image, it can be seen that the contents of the record detail reflects the contents of the Object's page-layout. Hence, the SharinPix **Albums** canvas app is indeed displayed inside the **SharinPix Albums** section.

Click on **Save** when you are done.

The SharinPix canvas app now appears on the record page of the **Contact** object.

![](/files/vbtzN2crznlFhoOUafjw)

## 3. Access the SharinPix Album features

In order to be able to access the features of the SharinPix Album embedded within the **Record Detail** component, you need to click upon the album which will open another view.

* Click on SharinPix Album.

![](/files/DnzLpuXRTAWOqhDAtLBe)

* A new view loads.

![](/files/hzLamj4Bo0fUgSPEo6pR)

* The SharinPix Album features are now accessible inside this view.

![](/files/qJQVSvhOB903QHRTy33K)

{% hint style="warning" %} <mark style="color:red;">**Reminder**</mark>: This method has the ability to ensure consistent behavior across both the Classic and Lightning/Mobile Experience, for organizations that have users in both camps, or who have been in Classic and are now moving to Lightning.

However, the method as presented in this article is only truly optimized for the Classic Experience and does not represent the best way to add SharinPix for Lightning . A more adequate solution that fits the Lightning Experience can be found in the article [Using SharinPix on Lightning From a Record Page](/documentation/features/main-integration/using-on-a-lightning-record-page).
{% endhint %}


# Using on Lighting with your own personalized Lightning Component (Dev Skills)

In this article, we will be able to understand the degree of flexibility gained through the use of the SharinPix Lightning Component and how it is possible to personalize its implementation in order to fit a particular use case scenario.

**Note:** The use case scenario as presented in this article is only meant to procure an intuitive sense on what the SharinPix Lightning Component is capable of and offer you the tools to fit this component into your own context.

* [View SharinPix Lightning Component](#view-sharinpix-lightning-component)
* [Use Case Scenarios](#use-case-scenario-1)
* [Scenario 1: Change the Album Id and Height of the SharinPix Album dynamically](#scenario-1-change-the-album-id-and-height-of-the-sharinpix-album-dynamically)
* [Implementation of the Wrapper Component](#implementation-of-the-wrapper-component)
* [Implementation of SharinPix Lightning Component](#implementation-of-sharinpix-lightning-component)
* [Implementation of the Wrapper Component](#implementation-of-the-wrapper-component)
* [Scenario 2: Allow or Deny SharinPix Abilities based on Profile Type](#scenario-2-allow-or-deny-sharinpix-abilities-based-on-profile-type)
* [Implement the Lightning Wrapper Component](#implement-the-lightning-wrapper-component)

## View SharinPix Lightning Component

The **SharinPix Package** that you installed from the AppExchange comes with a wide-range of components. However, in our present context we will be using the **SharinPix Lightning Component** that can be viewed by following the subsequent steps.

Go to the **Home Page** of your organization.

1\. Click on the **Setup** icon.

2\. Select **Setup.**

![](/files/Hzb9oT6wYTH3QnT1VOCD)

Once you are on the **Setup Home**:

3\. Enter **Installed Packages in the Quick Find Box.**

4\. Under **Apps**, select **Installed Packages.**

![](/files/o5SwZRKzLKI4Kj3Op8B9)

5\. The **Installed Packages** view will open.

6\. Find the **SharinPix Package** with the name **ImagesManagementBySharinPix**. (Note: the Version Number and other properties might differ for your package.)

![](/files/ClIJHRs5jXnLnVFeCOfK)

Click on the **ImagesManagementBySharinPix** package name.

7\. The **Package Details** view will open.

8\. Click on the **View Components** button.

![](/files/BRBCQ6SY6ILzqguAsCqa)

The list of components for the package will appear.

9\. In the **Package Components** section, look for:

10\. **SharinPix** of Type **Lightning Component Bundle**.

![](/files/VeuApE8ftiCOcBl1zuUZ)

### Use Case Scenarios <a href="#use-case-scenario-1" id="use-case-scenario-1"></a>

The following use case scenario will present **2** possibilities on how to personalize the SharinPix Lightning Component:

* [Scenario 1: Personalize the SharinPix Lightning Component so as to change its Album Id and Height dynamically.](#scenario-1-change-the-album-id-and-height-of-the-sharinpix-album-dynamically)
* [Scenario 2: Personalize the SharinPix Lightning Component so as to enable or disable its abilities based on the Profile of the current user.](#scenario-2-allow-or-deny-sharinpix-abilities-based-on-profile-type)

## Scenario 1: Change the Album Id and Height of the SharinPix Album dynamically

In the present scenario, we will see how it is possible to change the values for the parameters:

* **Album Id**&#x20;
* **Height,**

of a SharinPix Lightning Component. This will allow you to personalize:

1. What images are displayed on the SharinPix Album
2. How the SharinPix Album appears

This scenario will be implemented through the use of a **Wrapper Component** within which the **SharinPix Lightning Component** will be referenced along with the corresponding input fields for modifying both **Album Id** and **Height**.

The diagram below provides a high-level view on how this will be achieved.

![](/files/YVykcAeeLuaa57EwoWbZ)

## Implementation of SharinPix Lightning Component

The code snippet below shows how the \*\*SharinPix Lightning Component \*\*can be referenced.

The parameters:

* **AlbumId** : identify the album/record from which the images are to be displayed.
* **height:** specify the height of the SharinPix Album.

Note: **<\<album-id>>** and **<\<height>>** are both placeholder values and should be replaced with appropriate ones.

```html
<sharinpix:SharinPix AlbumId="<<album-id>>" height="<<height>>"/>
```

## Implementation of the Wrapper Component

The **Wrapper Component** designates the Lightning Component  which will reference the **SharinPix Lightning Component** and which will also contain the fields that will modify the **album id** as well as the **height** of the SharinPix album. The code snippet below shows the implementation of this **Wrapper Component.**&#x20;

{% hint style="info" %}
The **aura:id** attribute is important as it is used as an identifier in the event there are multiple SharinPix Lightning Components on the same record page.
{% endhint %}

**SharinPixLightningWrapper.cmp**

{% code lineNumbers="true" %}

```html
<aura:component access="GLOBAL"
                implements="force:hasRecordId,force:appHostable,
                            flexipage:availableForAllPageTypes,
                            forceCommunity:availableForAllPageTypes" >
    <aura:attribute name="albumId" type="String"/>
    <aura:attribute name="recordId" type="String"/>
    <aura:attribute name="height" type="Integer" default="500"/>
    <aura:handler name="init" value="{! this }" action="{! c.doInit }"/>

    <sharinpix:SharinPix aura:id="sharinpix-cmp" AlbumId="{! v.albumId }" height="{! v.height }"/>

    <ui:inputText aura:id="album-id" placeholder="AlbumId"/>
    <ui:inputText aura:id="record-id" placeholder="recordId"/>
    <ui:button label="Set AlbumId or recordId" press="{! c.changeId }"></ui:button>

    <ui:inputText aura:id="height" placeholder="height" value="500"/>
    <ui:button label="Set height" press="{! c.changeHeight }"></ui:button>
</aura:component>
```

{% endcode %}

**SharinPixLightningWrapperController.js**

```javascript
({
    doInit : function(component) {
        var id = component.find('album-id').get('v.value') || component.find('record-id').get('v.value');
        component.set('v.albumId', (id != null) ? id : component.get('v.recordId'));
    },
    changeId : function(component) {
        var id = component.find('album-id').get('v.value') || component.find('record-id').get('v.value');
        component.set('v.albumId', id);
    },
    changeHeight : function(component) {
        var height = component.find('height').get('v.value');
        component.set('v.height', height);
    }
})
```

The code snippet shown above  (found in the client-side controller **SharinPixLightningWrapperController** ) serves the following functions respectively:

* **doInit:** This function is called when the component is loaded.
* **changeId:** This function is meant to change the album id of the SharinPix Lightning Component
* **changeHeight:** This function is meant to change the parameter value of the height of the SharinPix Lightning Component

The following screen-grab shows how the **Component Wrapper**  appears.

![](/files/NEqPMhgqAIkBGNk1SwSJ)

The following steps demonstrate how to set up the component.

Create a custom tab to access the **Wrapper Component** more easily.

Go to **Setup:**

1. Enter **tabs** in the **Quick Find Box**.
2. Select **Tabs**.
3. On the **Custom Tabs** Page, go to section **Lightning Component Tabs**.
4. Click on **New**.
5. In the **Lightning Component** picklist, click on the name of the **Wrapper Component**.
   * It should be in the format: **<\<namespace>>:SharinPixLightningWrapper,** where **<\<namespace>>** corresponds to the namespace of your current organization.
6. Enter a name of your choice inside the field **Tag Label.**
7. Select a **Tab Style.**
8. Click on **Save** when you are done.

1\. In this context, the custom component is accessed via a custom tab. Access the record which contains the images you wish to display on the **SharinPix Lightning Component** and obtain its record Id which coincidentally corresponds to its album Id. Use this value to fill into the field as designated below.

![](/files/FBLn6jQ1zoPBjG0O1xSF)

2\. After filling in the **AlbumId** field with the adequate album Id, you will need to click on the **Set AlbumId or RecordId** button so that the SharinPix Album displays the images found on the record which corresponds to the **Album Id** obtained in the precedent step.

![](/files/HBNVwghHHrVXfsg6HNgf)

3\. It can be observed, from the previous screen-grab that after clicking on the **Set AlbumId or recordId** button, the SharinPix album appears with the images that match those found on the record the **album id** belonged to.

4\. In order to change the height of the **SharinPix Lightning Component,** you will need to to fill in the **Set height** as shown in the screen-grab below.

![](/files/8jqkihvJ02dlfwgmjwG6)

5\. Fill in the **height** field with an appropriate height value.&#x20;

**Note: The height value is evaluated in pixels.**

![](/files/cbYwpeRtMLf5uHtOYYr6)

6\. Click on the **Set Height** button so as for the change in height to take effect.

![](/files/6a9UWkRpiabE7OA5cH1E)

7\. It can be observed from the screen-grab below that the size of the SharinPix album has indeed changed and registered an increase from 500 pixels (which represents the default album height) to 1000 pixels. This can be useful when you are trying to display many images without the use of pagination.

![](/files/jc6v5hgYqj1WAEfECpsI)

## Scenario 2: Allow or Deny SharinPix Abilities based on Profile Type

In this scenario, we will see how it is possible to modify the permissions on the SharinPix Album on a **SharinPix Lightning Component** so as to personalize what behavior is allowed or denied by the user.

The table below shows some of the names of these abilities and the features they control respectively.

| Ability Name   | Feature                                              |
| -------------- | ---------------------------------------------------- |
| image\_list    | The ability to display images on an album            |
| image\_upload  | The ability to add an image to an album.             |
| image\_delete  | The ability to delete an image from an album.        |
| fullscreen     | The ability to view an album in **fullscreen** mode. |
| image\_caption | The ability to add a caption to a specific image.    |

In the present case scenario, the SharinPix ability we want to allow/deny based on the profile type of the current user is the ability to delete(**image\_delete**) an image from an album.

1\. From the **App Launcher,**  click on **SharinPix Permissions**

![](/files/wFSLKKG32zpYvC41xPYQ)

2\. Click on **New**.

![](/files/EpaP4yJe1OVVrmEi5XCA)

3\. In the **Name** field, enter **DisableDelete**.

4\. Make sure the input fields correspond to those shown in the screenshot below:

* Display images: **checked**
* Add images: **checked**
* Delete image: **unchecked**

Leave all other fields as they are.

![](/files/bNra8qElUtC8gPQxXvBm)

5\. Click on **Save** when you are done.

![](/files/bKRJARrHdT0E1BX1m1rP)

Once saved, make sure that the field **Json** contains the following value:

```json
{"Access":{"see":true,"image_list":true,"image_upload":true,"image_delete":false}}
```

6\. Copy the value from the **ID** field, as it will be used in the next sections.

![](/files/FRjtccoOSdZup1kDoGsB)

### Implement the Lightning Wrapper Component

In this section, we will implement a Lightning Wrapper Component which serves the purpose of granting or denying the **ability to delete** an image based on whether the **Profile Type** of the current user is that of a **System Administrator** or not.&#x20;

The code snippet below shows the markup of the **Lightning Wrapper Component**, containing the required attributes as well as referencing the SharinPix Lightning Component.

```html
<aura:component access="global" implements="force:hasRecordId,force:appHostable,flexipage:availableForAllPageTypes,forceCommunity:availableForAllPageTypes" 	controller="SharinPixProfileController">
	<aura:handler name="init" value="{! this }" action="{! c.doInit }"/>
	<aura:attribute type="string" name="recordId"/>
	<aura:attribute type="string" name="albumId"/>
	<aura:attribute type="string" name="PermissionRecordId" access="global"/>
	<sharinpix:SharinPix aura:id="sharinpix-cmp" permissionId="{! v.PermissionRecordId }" AlbumId="{! v.albumId}" height="500px"/>
</aura:component>
```

The code snippet below shows the client-side controller of the **Wrapper Lightning Component**.

{% code lineNumbers="true" %}

```javascript
({
	doInit : function(component, event, helper) {
		var action = component.get('c.PermissionId');
		action.setParams({albumId: component.get('v.recordId')});
		action.setCallback(this, function(response){
			if(response.getState() === 'SUCCESS') {
				component.set('v.PermissionRecordId', response.getReturnValue());
				component.set('v.albumId', component.get('v.recordId'));
			}else {}
		});
		$A.enqueueAction(action);
	}
})
```

{% endcode %}

The code snippet below shows the server-side controller of the **Wrapper Lightning Component**.

{% code lineNumbers="true" %}

```apex
public with sharing class SharinPixProfileController {

public SharinPixProfileController() {}

@AuraEnabled
public static String PermissionId(String albumId) {
String permissionId = '';
Profile userProfile =  [SELECT Name FROM Profile WHERE Id = :UserInfo.getProfileId()];
if(!userProfile.Name.equals('System Administrator')) {
sharinpix__SharinPixPermission__c permission = [SELECT Id FROM sharinpix__SharinPixPermission__c WHERE Name = 'DenyDelete'];
permissionId = permission.Id;
}
return permissionId;
}
```

{% endcode %}

The screenshot below illustrates the **Wrapper Component** that have been added to the page of an Account Record.

![](/files/XclhvDtrDI0BfgFL0CYP)

When the **Profile Type** of the current user is not that of a **System Administrator**, the SharinPix Ability of image deletion (**image\_delete**) is not available.

![](/files/wxXqEHa7VpUzNO1L10K7)

On the other hand, when the **Profile Type** of the current user is that of a **System Administrator**, the ability to delete an image is available on the **SharinPix Album**.

![](/files/jbrTVH3Ex65r6Hh0RfTV)


# Using on Lightning with your own personalized Visualforce Component (Dev Skills)

In this article, we will gain an understanding on the degree of flexibility acquired through the use of the SharinPix Visualforce Component and we will see how it is possible to personalize its implementation so as to make it fit a particular use case scenario.

{% hint style="success" %}
**Note:** The use case scenario as presented in this article is only meant to procure an intuitive sense on what the **SharinPix Visualforce Component** is capable of and to offer you the tools to fit this component into your own context.
{% endhint %}

* [Access the SharinPix Visualforce Component](#access-the-sharinpix-visualforce-component)
* [Use Case Scenarios](#use-case-scenarios)
* [Configuration for Visualforce Component](#configuration-for-visualforce-component)
* [Scenario 1: Change height and album Id dynamically](#scenario-1-change-height-and-album-id-dynamically)
* [Scenario 2: Assign SharinPix Ability based on Profile Type](#scenario-2-assign-sharinpix-ability-based-on-profile-type)

## Access the SharinPix Visualforce Component

1\. Go to **Setup.** In the **Quick Find Box,** type **Installed Packages.**

2\. Select **Installed Packages.**

![](/files/mELu1n09oTzbTEzXMpCi)

3\. Click on **ImagesManagementBySharinPix** which corresponds to the **SharinPix Package**.

![](/files/1LfOBhn0Wtx4Q4qyJTJv)

4\. Click on **View Components**.

![](/files/C9hw5Q2W1WFkfMiVgZ9I)

5\. The Visualforce component **SharinPix** can be accessed.

The **SharinPix Package** that you installed from the AppExchange comes with a wide-range of components.

However, in our present context we will be using the **SharinPix Visualforce Component** that can be viewed by following the subsequent steps.

![](/files/Zfn6egALnkAvC1gRSGOQ)

## Configuration for Visualforce Component

The subsequent steps are meant to enable an adequate communication and transmission of information between your **Salesforce Organization** and **SharinPix** and vice-versa.

6\. Go to **App Launcher.** And select **SharinPix Settings.**

![](/files/kbtE0yyMG7S34y9VuxuL)

Once the page is loaded, make sure the **Salesforce -> SharinPix API access** and the **SharinPix -> Salesforce API access** are highlighted in green as shown in the screenshot below.

![](/files/H33TqNMR07AOiuX0xWsp)

## Use Case Scenarios

In the following use cases, we will get a glimpse on the flexibility that the Visualforce Component provides, and it will hopefully provide you with an intuitive sense on how to tailor the **SharinPix Visualforce Component** so as to fit your needs.

The next use case scenarios will present  **2** possibilities on how to personalize the **SharinPix Visualforce**

**Component:**

* [Scenario 1: Change height and album Id dynamically](#scenario-1-change-height-and-album-id-dynamically)
* [Scenario 2 : Assign SharinPix Ability based on Profile Type](#scenario-2-assign-sharinpix-ability-based-on-profile-type)

## Scenario 1: Change height and album Id dynamically

In this scenario, we will wrap the **SharinPix Visualforce Component** found  in the SharinPix Package within a **Visualforce Page**, and implement a solution that will allow the user to dynamically set the **Height** and **Album Id** of the SharinPix Album.

The code referencing the **SharinPix Visualforce Component** is shown below.

```html
<sharinpix:SharinPix parameters="{! parameters }" height="{! height }px" componentId="component1" />
```

In this context, the **SharinPix Visualforce Component** is referenced inside a **Visualforce Page** as demonstrated in the code snippet below.

```html
<apex:page showHeader="true" controller="SharinPixDynamicCtrl" sidebar="true">
	<apex:form>
		<apex:outputPanel id="frame">
			<sharinpix:SharinPix parameters="{! parameters }" height="{! height }px"/>
		</apex:outputPanel>
		<label>Album Id:</label><apex:inputText value="{! albumId }"/>
		<label>Height:</label><apex:inputText value="{! height }"/>	
		<apex:commandButton value="Execute changes" reRender="frame"></apex:commandButton>
	</apex:form>
</apex:page>
```

The code for the Apex Controller, referenced within the above Visualforce Page, is presented below.

```apex
public with sharing class SharinPixDynamicCtrl {
    public String height {get;set;}
    public Id albumId {get;set;}

    public SharinPixDynamicCtrl() {
        albumId = ApexPages.CurrentPage().getparameters().get('id');
    }

    public String getParameters() {
         Map<String, Object> claims = new Map<String, Object> {
            'Id' => albumId,
            'abilities' => new Map<String, Object> {
                albumId => new Map<String, Object> {
                      'Access' => new Map<String, Object> {
                      'see' => true,
                      'image_list' => true,
                      'image_upload' => true,
                      'image_delete' => true
                    }
                }
            }
        };
        String parameters = JSON.serialize(claims);
        return parameters;
    }
}
```

The Visualforce Page, referencing the **SharinPix Visualforce Component** , is added to the page of an Object. (In this context, the Object is an **Account**)**.**

![](/files/DqC0uhLkgbYtDk8gK0ix)

The fields **Album Id** and **Height** as shown in the screenshot, are meant to modify the values of the corresponding parameters for the **SharinPix Visualforce Component.**

7\. The **Album Id** field modifies the Album Id passed through the parameters named **parameters** for the SharinPix Visualforce Component.

8\. The **Height** field modifies the height of the SharinPix Album by accepting the relevant values in pixels.

9\. Once the new values are entered, you are required to click on the button **Execute Changes** to make the changes reflect on the **SharinPix Album**.

### Changing the Album Id

If you enter a new value in the **Album Id** field, click on the button **Execute changes**. The changes on how the Album appears should be effective immediately.

![](/files/C3v5j9n11pP5ro0oosW6)

As it can be seen in the screenshot above, when the new album Id is used, the images displayed on the album are no longer those displayed before. These new images that are displayed correspond to the images found on the record as referenced by the new **Id** value used.

### Changing the Height

If you enter a new value for the **Height** field, you will need to click on the button **Execute Changes** to make the changes reflected on the SharinPix Album immediately.

![](/files/HinCyk5H1Gjg83ix11jb)

Once you click on the button **Execute Changes**, you will see the SharinPix Album with a new **height** as shown in the screenshot below.

![](/files/knpDSM4NqwQcYl4ob8M3)

## Scenario 2 : Assign SharinPix Ability based on Profile Type

In this scenario, we will wrap the SharinPix Visualforce Component inside a Visualforce Page and implement a solution that will detect whether the current user is of a particular **Profile Type** and modify the SharinPix Abilities based on that result.

In this particular case, the current implementation will check if the **Profile Type** of the current user is of type **System Administrator**.

The code referencing the **SharinPix Visualforce Component** is shown below.

```html
<sharinpix:SharinPix parameters="{! parameters }" />
```

In this context, the **SharinPix Visualforce Component** is referenced inside a **Visualforce Page** as demonstrated in the code snippet below.

```html
<apex:page showHeader="true" sidebar="true" controller="SharinPixDynamicProfile">
	<sharinpix:SharinPix parameters="{! parameters }" />
</apex:page>
```

The code for the Apex Controller, referenced within the above Visualforce Page, is presented below.

```apex
public with sharing class SharinPixDynamicProfile {
	public String parameters {get;set;}

	public SharinPixDynamicProfile() {
		Id albumId = ApexPages.CurrentPage().getParameters().get('id');
		Boolean isAdmin = true;
		Profile userProfile = [SELECT Name FROM Profile WHERE Id = :UserInfo.getProfileId()];
		
		if(!userProfile.Name.equals('System Administrator')) {
			isAdmin = false;
		}

		Map<String, Object> claims = new Map<String, Object>{
			'Id' => albumId,
			'abilities' => new Map<String, Object> {
				albumId => new Map<String, Object> {
					'Access' => new Map<String, Object> {
						'see' => true,
						'image_list' => true,
						'image_upload' => true,
						'image_delete' => isAdmin
					}
				}
			}
		};
		parameters = JSON.serialize(claims);
	}
}
```

The Visualforce Page can be added to any Object's page (in this case, it is on the **Contact** object page). As it can be seen below: since the **Profile Type** of the current user is not of type **System Administrator**, the ability to delete an image(**image\_delete**) is not available as indicated in the screenshot below.

![](/files/n3uM7NWSalXqNGDbRm7e)

The screenshot below shows that the ability to delete an image is available when the **Profile Type** of the current user is **System Administrator.**

![](/files/RghDRxfGqVrdsnRS1NXJ)


# Using on Classic with SharinPix Canvas App

This article demonstrates how to add the SharinPix Canvas app onto an object's page-layout by:

1. Firstly, setting up SharinPix on your Org
2. Secondly, adding the Canvas app onto the page-layout

{% hint style="warning" %}
**Note:**

Canvas apps have some limitations. For example, they only allow 5,000 calls per day per user within 24-hour.

Therefore the usage of the SharinPix Canvas App is not recommended for implementations. In such cases, we recommend the usage of the **SharinPix Visualforce Component** instead. The SharinPix Canvas App, however, can still be used for testing purposes.

For more information about Canvas app limitations, please refer to the following link:

<https://developer.salesforce.com/docs/atlas.en-us.platform_connect.meta/platform_connect/canvas_framework_limits.htm>

For more information about the SharinPix Visualforce Component and how it is used, kindly refer to the following [link](/documentation/features/main-integration/using-on-classic-with-a-visualforce-page-without-an-apex-controller-admin-friendly-version#sharinpix-visualforce-component).
{% endhint %}

## 1. Set up SharinPix in your Org <a href="#add-the-canvas-app-to-the-page-layout-of-an-object" id="add-the-canvas-app-to-the-page-layout-of-an-object"></a>

1\. Go to Setup.

2\. In the **Quick Find Box**, type **Installed Packages.**

3\. Under the **Build** section, select **Installed Packages**.

<figure><img src="/files/d1bIVICI1pFgacIwvATD" alt=""><figcaption></figcaption></figure>

4\. Select the **SharinPix Package** known as **ImagesManagementBySharinPix.**

![](/files/5S3bX1pnPc3fKxHipmxr)

5\. Click on **View components**.

![](/files/XLuimj1LesmKdOTWh7gL)

6\. Click on **Albums**.

![](/files/EN0R6yKttc2XISvSpt97)

7\. Click on **Edit Policies.**

![](/files/zuZgcVRk0aPSa9TXmota)

Next to the field **Permitted Users,** select **All users may self-authorize** from the picklist.

![](/files/06f8jUkveSy46yrR4DHO)

Click on **Save** when you are done.

## 2. Add Canvas App to a Page Layout

Access the object upon which you intend to add the canvas app on the page-layout. In this case, it is the object Account. Select a record of type Account.

9\. Click on **Edit Layout**.

![](/files/DJXXx59t4WI5TRsILNmh)

10\. Select the **Canvas App** category from the types of components list as shown below.

![](/files/YvHSm98f9qksIfFdCDTp)

11\. Drag and drop the **Albums** canvas app on the page-layout on the area you desire.

![](/files/3BQFbK9BrQK2E2vDZGzp)

12\. Adjust the **Height** of the **SharinPix Album** to **500px**.

![](/files/luv5Rd08Czev4pl8a9wS)

Click on **Save** when you are done.

The **SharinPix Canvas App** should now appear on the page-layout of the record as presented in the screenshot below.

![](/files/jmk2wm3kXHDS72RCoW21)


# Using on Classic with a Visualforce Page WITHOUT an Apex Controller (Admin Friendly version)

This article demonstrates how to make use of:

1. The [SharinPix Visualforce Component](#sharinpix-visualforce-component)
2. The [SharinPix Canvas App](#sharinpix-canvas-app)

to display a SharinPix album within the Salesforce Classic Experience without the use of an Apex Controller.

{% hint style="warning" %}
**Note:**

Since Canvas apps have some limitations such as limited number of calls within 24-hour, we strongly recommend the usage of the **SharinPix Visualforce Component** over the **SharinPix Canvas App** for implementations. The SharinPix Canvas App can still be used for testing purposes however.

For more information about Canvas app limitations, please refer to the following link:

<https://developer.salesforce.com/docs/atlas.en-us.platform_connect.meta/platform_connect/canvas_framework_limits.htm>
{% endhint %}

## SharinPix Visualforce Component

Here's how to reference the **SharinPix Visualforce Component** inside a Visualforce Page as well as defining the **SharinPix Abilities** inline without the use of an Apex Controller. Rather than using an Apex class controller, the values will be referenced inline.

* **In Classic: Setup**
* **Type Visualforce Pages into the QuickFind in the left column.**
* **Click on Visualforce Pages**
* **Click New**

![](/files/cT7rOhxHPeJUkDcEJdmn)

* Enter a **name** for your Visualforce Page. In this example, we called it **SharinPixVisualforceComponent.**
* **Check the box to specify where you want this VF Page to be seen.**

![](/files/gvL0ACpdnIf1jZVb8Upi)

{% hint style="info" %}

* The Visualforce Page implemented in the current example is intended to be displayed on the page-layout of the Account object, however if you want to display it on another object, you will need, to assign the right object to the Standard Controller of the Visualforce Page.
  {% endhint %}

```html
<apex:page StandardController="Account">
</apex:page>
```

To reference the SharinPix Visualforce Component inside the Visualforce Page, we will use the code snippet below.

* Paste it into the Visualforce Markup window on your new Visualforce Page.
* Click Save.

```html
<apex:page StandardController="Account">
    <sharinpix:SharinPix height="600px" parameters="{'Id': '{!CASESAFEID($CurrentPage.parameters.Id)}', 'abilities':{'{!CASESAFEID($CurrentPage.parameters.Id)}':{'Access': {'image_upload':true,'image_list':true,'see':true,'image_delete':true}}}}"></sharinpix:SharinPix>
</apex:page>
```

The SharinPix Visualforce Component possesses the following attributes:

* **height:** refers to the Height of the **SharinPix Album** in pixel units. In the present example, the height used is **600px.**
* **parameters:** refers to the set of SharinPix Abilities enabled or disabled upon the SharinPix Album.

The following code refers to a merge-field that retrieves the current Id of the record to which the Visualforce Page is added.

```apex
{!$CurrentPage.parameters.Id}
```

{% hint style="info" %}
The next remaining step is to add the Visualforce Page to the page-layout of the Account object:
{% endhint %}

* Go to any record of Type **Account.** Click on **Edit Layout.**

Inside the **Page Layout Editor,** click on the **Visualforce Pages item.**

![](/files/lKM9ZxKvC5CicQxeEKFX)

Drag and Drop the **SharinPixVisualforceComponent** page onto the desired area of the page-layout. Optionally, you can create a section where you can drop the visualforce page.

As it can be seen in the screenshot below, the **SharinPixVisualforceComponent** page has been added to the section **SharinPix** of the Page-Layout.

![](/files/8KEFuStCIkpJHB5WUExR)

{% hint style="success" %}
**Tip:**

The SharinPix Visualforce component can be modified in such a way to only display an upload button.

For such implementation, refer to the article that follows:

[Implement a SharinPix upload button in a Visualforce page](/documentation/cookbook/implement-a-sharinpix-upload-button-in-a-visualforce-page)
{% endhint %}

## SharinPix Canvas App

The present section will lay out the steps on how to reference the **SharinPix Canvas App** inside a Visualforce Page as well as defining the **SharinPix Abilities** inline without the use of an Apex Controller.

{% hint style="info" %}
To know more about **SharinPix Abilities** , refer to the following article: [SharinPix abilities](/documentation/access-and-security/sharinpix-abilities)
{% endhint %}

* **In Classic: Setup**
* **Type Visualforce Pages into the QuickFind in the left column.**
* **Click on Visualforce Pages**
* **Click New**

## Create the Visualforce Page

![](/files/3MyZksa1X7AuFXqPpy9C)

* Enter a **name** for your Visualforce Page. In this example, we called it **SharinPixVisualforceComponent.**
* **Check the box to specify where you want this VF Page to be seen.**
* **Save**

![](/files/lBaaYcBjgcHTYPTNFf6S)

* Paste the code below inside the Visualforce Page.

```html
<apex:page standardController="Account">
    <apex:canvasApp developerName="Albums" namespacePrefix="sharinpix" height="500px" 
        parameters="{
           	'Id': '{!$CurrentPage.parameters.Id}',
            abilities:{
            '{!CASESAFEID($CurrentPage.Parameters.Id)}':
                { 
                    Access: {
                        image_upload:true,
                        image_list:true,
                        see:true,
                        image_delete:false
                    }
                }
            }
        }" 
    width="100%"/>
</apex:page>
```

The following parameters are used inside the **SharinPix Canvas App**:

* developerName (value: **Albums**)
* namespacePrefix (value: **sharinpix**)
* height (recommended value: **500px**)
* parameters
* width (value: **100%**)

The value for the **parameters** parameter contains:

* The **Album Id**
* The list of **abilities** allowed on the SharinPix Album.

### Album Id

The **Album Id** corresponds to the record Id of the record within which the Visualforce Page is present. This value is passed through the formula function **CASESAFEID()** which makes sure than the value corresponds to a 18-character record Id.

```apex
'{!CASESAFEID($CurrentPage.Parameters.Id)}'
```

{% hint style="info" %}
***CASESAFEID*****() is a formula function that replaces the 15 character ID (case sensitive) with a 18 character ID (case insensitive).**
{% endhint %}

### SharinPix Abilities

The **abilities** allowed on the SharinPix can be defined as shown in the code snippet below.

```json
Access: {
    image_upload:true,
    image_list:true,
    see:true,
    image_delete:false
}
```

The **parameters** variable is then referenced inside the Visualforce Page through the parameter **parameters** as shown in the code snippet below.

```html
<apex:page>
    <apex:canvasApp developerName="Albums" namespacePrefix="SharinPix" parameters="{! parameters }"/>
</apex:page>
```

Once you complete the necessary steps above, you will be able to add the Visualforce Page to the page-layout of a corresponding record.

### Adding Canvas App to Page-Layout

* Go to any record of Type **Account.** Click on the **Quick Access Menu**

![](/files/dyIADytAXwJrZNKz4Lck)

* Click on **Edit Layout.**
* Inside the **Page Layout Editor,** click on the **Visualforce Pages item.**

![](/files/gIo0hdYU2WLzXNs87u1u)

* Drag and Drop the Visualforce page created in the steps above onto the desired area of the page-layout. Optionally, you can create a section where you can drop the Visualforce Page.
* **Save.**

In the screenshot below, the SharinPix Album is displayed where the Visualforce Page has been added.

![](/files/k92fRlEq8OJPn9ELk2zq)

### Inline Visualforce page example with almost all parameters

Find below a quick example of almost all parameters included:

```html
<apex:page StandardController="Account">
<sharinpix:SharinPix height="500px" parameters="{'abilities':{'{! CASESAFEID($currentPage.parameters.Id) }':{'Access':{'see':true,'image_list':true,'image_upload':true,'image_delete':true,'fullscreen':true,'image_caption':true,'image_tag':true,'image_copy':true,'paste':true,'share':true,'image_duplicate':true,'image_annotate':true,'image_rotate':true,'image_crop':true,'image_download':true},'Tags':{'Before':{'en':'Before'},'After':{'en':'After'}},'Display':{'filename':true,'tags':true,'group_pdf':true,'confirm_delete':true,'annotation_toggle':true,'add_tag_first':true}},'tags':{'read':true,'create':true,'filter_any_of':true}},'Id':'{! CASESAFEID($currentPage.parameters.Id) }'}"></sharinpix:SharinPix>
</apex:page>
```

{% hint style="success" %}
Please note that you can rely on the SharinPix Permission object to generate most of this code by just point and click. Then use the place/name/value generated to insert into your Visualforce code page or even your apex code.

Check it out here: [SharinPix Permission Object](/documentation/access-and-security/sharinpix-permission-object-how-to-create-and-assign-custom-permission)
{% endhint %}


# Using on Classic with a Visualforce Page WITH an Apex Controller (Developer skills required)

In this article we will see how it is possible to reference the **SharinPix Visualforce Component** and **SharinPix Canvas App** inside a **Visualforce Page** while using an Apex Controller to define the abilities enabled inside the SharinPix Album.

* [1. SharinPix Visualforce Component](#id-1.-sharinpix-visualforce-component)
* [2. SharinPix Canvas App](#id-2.-sharinpix-canvas-app)

## 1. SharinPix Visualforce Component

In this section, we will see how it is possible to reference the **SharinPix Visualforce Component** inside a Visualforce Page while using an Apex Controller to define the SharinPix Abilities enabled or disabled on a SharinPix Album.

### Create Apex Controller

1. Click on ![Setup gear icon](https://resources.help.salesforce.com/images/02e863126fef084a82dc1f96dea047ff.png) . Select **Developer Console**.
2. In the Developer Console, click on **File**.
3. Under **New**, select **Apex Class**.

![](/files/LlwGWWbzeDphLCuIiodw)

3\. For the name of the Apex Controller Class, enter **SharinPixVFComponentCtrl.**

4\. Then paste the following code inside the newly-created **Apex Controller Class**.

```apex
global with sharing class SharinPixVFComponentCtrl {

    global String parameters {get;set;}

    global SharinPixVFComponentCtrl(ApexPages.StandardController stdCtrl) {
        Id albumId = stdCtrl.getId();

        Map<String, Object> params = new Map<String, Object> {
            'abilities' => new Map<String, Object> {
                albumId => new Map<String, Object> {
                    'Access' => new Map<String, Object> {
                        'see' => true,
                        'image_list' => true,
                        'image_upload' => true,
                        'image_delete' => true
                    }
                }
            },
            'Id' => albumId
        };
        parameters = JSON.serialize(params);
    }
}
```

5\. **Save** the file when you're done.

### SharinPix Visualforce Component

It is possible to reference the **SharinPix Visualforce Component** within a **Visualforce Page** by following the steps below.

1\. Click on ![Setup gear icon](https://resources.help.salesforce.com/images/02e863126fef084a82dc1f96dea047ff.png) . Select **Developer Console**.

Once inside the **Developer Console:**

2\. Under **File**, select **New,** then select **Visualforce Page**.

![](/files/qP48WiGuatVL22ffXCxM)

3\. For the name of the Visualforce Page, enter **SharinPixVisualforceComponentPage.**

4\. Paste the following code inside the **Visualforce Page.**

```html
<apex:page StandardController="Account" extensions="SharinPixVFComponentCtrl">
    <sharinpix:SharinPix height="100%" parameters="{! parameters }" enableCustomData="true" componentId="component1"></sharinpix:SharinPix>
</apex:page>
```

5. **Save** the changes when you're done.

As demonstrated in the above code snippet, the Standard Controller used is the **Account** object while the Apex extension class used is the **SharinPixVFComponentCtrl**.

The merge field **{! parameters }** is used to reference the **parameters** variable found in the Apex Class **SharinPixVFComponentCtrl**. This variable is used to define the SharinPix Abilities which are enabled or disabled on the SharinPix album.

The **enableCustomData="true"** field is utilized to allow the display of a custom label on the image within an album. For more information on custom labels, please refer to this documentation: [Thumbnail View - Display infos](/documentation/features/user-interface/thumbnail-view-display-infos)

{% hint style="info" %}
The following section will show the steps on how to add the Visualforce Page to the page-layout of the Account Object.
{% endhint %}

* Go to a record of any **Account** Object.
* Select **Edit Object**.
* Go to **Page Layout** then select **Visualforce Pages** as shown in the screenshot below.

![](/files/cffGVqf33NwO8cH3AVA5)

* Drag and Drop the Visualforce Page implemented in the previous steps (in this case **SharinPixVisualforceComponentPage**) onto the desired region of the record page-layout.

The screenshot below demonstrates how the SharinPix Album is displayed on the record page after adding the **Visualforce Page** to the page layout of the Account Object.

![](/files/v73GA5z68xuJAvetTWfF)

{% hint style="success" %}
**Tip:**

The SharinPix Visualforce component can be modified in such a way to only display an upload button.

For such implementation, refer to the article that follows:

[Implement a SharinPix upload button in a Visualforce page](/documentation/cookbook/implement-a-sharinpix-upload-button-in-a-visualforce-page)
{% endhint %}

## 2. SharinPix Canvas App

In this section, we will be shown how it is possible to reference the SharinPix Canvas App inside a Visualforce Page while using an Apex Controller to define the SharinPix Abilities enabled or disabled on a SharinPix Album.

* Click on ![Setup gear icon](https://resources.help.salesforce.com/images/02e863126fef084a82dc1f96dea047ff.png) . Select **Developer Console**.
* In the **File** menu, select **New** then **Visualforce Page.**
* Give a name to the Visualforce Page (in this case, it is called **SharinPixCanvasPage**)

![](/files/JqkjEJ0R2q7cmf7zEQaG)

* Paste the following code snippet inside the Visualforce Page:

```html
<apex:page StandardController="Account" extensions="SharinPixCanvasCtrl">
    <apex:canvasApp developerName="Albums" namespacePrefix="SharinPix" parameters="{! parameters }"/>
</apex:page>
```

* **Save** the changes when you're done.
* The **Standard Controller** for the Visualforce Page is **Account** since the Visualforce Page is intended to be added to the page-layout of the Account Object.
* The **extensions** attributes take as value the name of the Apex Controller **SharinPixCanvasCtrl**, from which we can reference a variable defining the SharinPix Abilities allowed on the SharinPix Album.
* The **developerName** of the **canvasApp** element is **Albums,** which comes along when you installed the SharinPix Package.
* The **namespacePrefix** is **SharinPix.**
* The attribute **parameters** take as value a merge-field, **{! parameters }**, which references the variable **parameters** which defines the SharinPix Abilities allowed or denied on a SharinPix Album.

The code snippet below shows the implementation of the Apex Controller for the Visualforce Page:

* In the Developer Console, select **New** from the **File** menu, then click on **Apex Class.**

![](/files/GbFl91zPwACu6AKI70Lo)

* Enter a name for the Apex class. In this case, it is **SharinPixCanvasCtrl**.
* Paste the code snippet below into the newly-created Apex class with the corresponding class name and constructor signature.

```apex
global with sharing class SharinPixCanvasCtrl {

    global String parameters {get;set;}

    global SharinPixCanvasCtrl(ApexPages.StandardController stdCtrl) {
        Id albumId = stdCtrl.getId();

        Map<String, Object> params = new Map<String, Object> {
            'abilities' => new Map<String, Object> {
                albumId => new Map<String, Object> {
                    'Access' => new Map<String, Object> {
                        'see' => true,
                        'image_list' => true,
                        'image_upload' => true,
                        'image_delete' => true
                    }
                }
            }
        };
        parameters = JSON.serialize(params);
    }
}
```

* **Save** the changes when you're done.

The following code snippet shows how the SharinPix abilities are defined.

```apex
Map<String, Object> params = new Map<String, Object> {
            'abilities' => new Map<String, Object> {
                albumId => new Map<String, Object> {
                    'Access' => new Map<String, Object> {
                        'see' => true,
                        'image_list' => true,
                        'image_upload' => true,
                        'image_delete' => true
                    }
                }
            }
        };
```

The SharinPix abilities are defined by a Map data structure containing the name of the abilities as keys. These keys have values either true or false corresponding to whether they are enabled or disabled respectively.

The remaining steps demonstrate how to add the newly-created Visualfroce page onto the Page Layout of the Account Object.

* Access any record of type **Account.**
* Click on **Edit Layout.**
* Once on the page-layout editor, select **Visualforce Pages.**

![](/files/RLYIRe3UnxdwfyGkO9WG)

* Drag and Drop the Visualforce page implemented onto the desired area on the page-layout of the Account object.
* Click **Save** when done.

The screenshot below demonstrates how the SharinPix Album is displayed on the record page after adding the **Visualforce Page** to the page layout of the Account Object.

![](/files/j0pgyrnLRzgZ4zCWhp0Z)


# Using on Salesforce flow (Developer skills required)

{% hint style="info" %}
This demo only serves as a broad example on how **SharinPix** be used in Salesforce Flow. You are not restricted to using **Contacts** or **Accounts** objects. To get a technical grasp on how the VisualFlow was implemented, please head over to the Cookbook section: [Create Contacts from an Account using VisualFlow](/documentation/cookbook/create-contacts-from-an-account-using-visualflow)
{% endhint %}

In this demo, we will see how it possible to create one or more **Contacts** starting from a particular **Account** record and upload a profile picture corresponding to the **SharinPix Album** for each newly-created **Contact** record.

## Overview

To implement the present demo, we will reference a **Visual Flow** inside a **Visualforce Page**. The following steps provide a high-level overview of the objective we want to achieve in this demo:

**Visual Flow:**

1. Look up the **Id** of Account Record from which the Screen Flow was launched.
2. Display the input fields to so as to create the **Contact** record(s) while using the **Account Id** (collected in the previous step) in order to create a **LookUp relationship** between the **Account** and the recently-created **Contact** record(s).
3. Display the **SharinPix Album** for the user to upload the profile picture of the newly-created **Contact(s).**

**Visualforce Page:**

4\. Reference the newly-created **Flow** inside a **Visualforce Page.**

**Account Page-Layout:**

5\. Create a **custom action** to launch the **Visualforce Page** created in the previous step.

6\. Add the custom action to the Account's **page-layout.**

## Integrating SharinPix with the VisualFlow

In order to be able to use the SharinPix Album alongside a VisualFlow, we references both the SharinPix Album and the VisualFlow inside a custom Visualforce Page.

The code snippet below shows how both the VisualFlow and SharinPix Album is referenced inside a Visualforce Page.

```html
<apex:page StandardController="Account" extensions="FlowController">
<flow:interview name="SharinPix_Account_Contacts" interview="{! sp_flow }" finishLocation="/{!$CurrentPage.parameters.Id}"></flow:interview>
<sharinpix:SharinPix height="400px" rendered="{! sp_flow.RenderAlbum == true }" parameters="{'Id': '{! sp_flow.ContactId }', 'abilities':{'{! sp_flow.ContactId }':{'Access': {'image_upload':true,'image_list':true,'see':true,'image_delete':true}}}}" />	
</apex:page>
```

* The code snippet below references a **VisualFlow**.

```html
<flow:interview name="SharinPix_Account_Contacts" interview="{! sp_flow }" finishLocation="/{!$CurrentPage.parameters.Id}"></flow:interview>
```

* As it can bee seen above, the flow element has the following properties:
  * **Name:** the name of the flow created.
  * **Interview:** a reference to the flow interview as declared in the Apex Controller of the current Visualforce Page. This reference will allow us to access the variables found in the flow.
* The code snippet below references the **SharinPix Visualforce Component**.

```html
<sharinpix:SharinPix height="400px" rendered="{! sp_flow.RenderAlbum == true }" parameters="{'Id': '{! sp_flow.ContactId }', 'abilities':{'{! sp_flow.ContactId }':{'Access': {'image_upload':true,'image_list':true,'see':true,'image_delete':true}}}}" />	
```

As it can be seen in the above code snippet, the SharinPix Visualforce Component has the properties:

* **height:** corresponds to the height of the SharinPix Album as rendered inside the SharinPix Visualforce Component.
* **rendered:** corresponds to the Boolean flag that dictates whether the SharinPix Visualforce Component is to be rendered, hence displayed on the Visualforce Page.
* **parameters:** corresponds to the set of SharinPix Abilities enabled/disabled on the SharinPix Album.

The code snippet below shows the implementation of the Apex Class used as the controller for the Visualforce Page implemented above.

```apex
public class FlowController {
    public Flow.Interview.SharinPix_Account_Contacts sp_flow { get; set; }
    public FlowController (ApexPages.StandardController controller) {}
}
```

The declared variable **sp\_flow** represents the reference for the Flow. It will allow us to access the variables present within the flow.

For example, within the **SharinPix Visualforce Component** referenced inside the Visualforce Page, shown above, uses the Flow reference to access the following variables:

* **sp\_flow\.RenderAlbum:** The **RenderAlbum** variable is used to dictate whether the SharinPix Visualforce Component is to be displayed or not on the Visualforce Page.
* **sp\_flow\.ContactId:** The **ContactId** variable is used to associate the SharinPix Album to the relevant Contact Record.


# Using on Salesforce Mobile Apps

The following article demonstrates how to:

1. [Integrate the SharinPix Album component in the Salesaforce mobile app.](#integration-of-the-sharinpix-album-component-in-the-salesforce-mobile-app)
2. [Launch the SharinPix mobile app from the Salesforce mobile app.](#launching-the-sharinpix-mobile-app-from-the-salesforce-mobile-app)
3. [Launch the SharinPix mobile app from the Salesforce Field Service mobile app.](#launching-the-sharinpix-mobile-app-from-the-salesforce-field-service-mobile-app)

{% hint style="danger" %}
**Note:**

This article also outlines [old-fashioned methods](#old-fashioned-methods) used by SharinPix to perform the above actions .

Kindly note that these methods are deprecated and are only for your reference if you are still using old SharinPix implementations.

***For new implementations, we strongly advise to stick with the above methods (highlighted in the blue section).***
{% endhint %}

## Integration of the SharinPix Album component in the Salesforce mobile app

Integrating a [SharinPix Album](/documentation/lightning-web-component/sharinpix-album) component in the SF mobile app allows mobile users to view, upload and manipulate images available on records.

To configure the above, follow the steps below:

1. From the desired record page, open the the Lightning App Builder.
2. From the top menu, click on the dropdown button labeled as *Desktop* and select *Phone* to preview how that record page on the SF app:

![](/files/6npmt10B0DtSCj8fIK4H)

3. Next, drag and drop the SharinPix Album component onto your page layout. For more information on how to configure the component's parameter, kindly refer to this link: [Lightning Component Parameters](/documentation/lightning-web-component/sharinpix-album#lightning-component-parameters)

![](/files/IKwSaSiF3TsA07mKptBV)

**Note:** *You can also embed the component in a Tab as demonstrated below:*

![](/files/5mFTwzNGznYaZeTLFQge)

![](/files/7gD7ysAbTt61b67awffe)

4. Click on the *Activation* *button* located on the top right corner of the screen:

![](/files/Lr8fWjx5Rbv4f5rKUeOd)

5. Click on the *Assign* as Org Default *button*:

![](/files/KXjpGOYEUyOEKnAedrcA)

6. Ensure that either the *Phone* or *Desktop and phone* option is activated to apply the changes to the SF mobile app:

![](/files/dDIYbbTK1eB3iE2T8gh9)

7. Then, click on *Next* -> *Save*.
8. To complete, click on the *Save* button located on the top-right corner.

## Launching the SharinPix mobile app from the Salesforce mobile app

The SharinPix mobile app can be used to capture photos. The [SharinPix Mobile Launcher](/documentation/lightning-web-component/sharinpix-mobile-launcher) component can be used to launch the SharinPix mobile app from the Salesforce mobile app.

{% hint style="success" %}
**Tip:**\
For more infomation about the SharinPix mobile app features, refer to the following documentation: [SharinPix Mobile App](/documentation#mobile-app)
{% endhint %}

To configure the SharinPix Mobile Launcher component, follow the steps below:

1. From the desired record page, open the the Lightning App Builder.
2. From the top menu, click on the dropdown button labeled as *Desktop* and select *Phone* to preview how that record page on the SF app:

![](/files/OYeDqKDaiir7yXr3XhtR)

3. Next, drag and drop the SharinPix Mobile Launcher component onto your page layout. For more information on how to configure the component's parameter, kindly refer to this link: [Lightning Component Parameters](/documentation/lightning-web-component/sharinpix-mobile-launcher#lightning-component-parameters).
4. Click on the *Activation button* located on the top right corner of the screen:

![](/files/kvwI1Q27oz5LK0bxc358)

5. Click on the *Assign* as Org Default *button*:

![](/files/zblockduQ90vbNTnLBck)

6. Ensure that the either the *Phone* or *Desktop and phone* option is activated to apply the changes to the SF mobile app:

![](/files/qgP3Y8iAGVFyodfv4TOt)

7. Then, click on *Next* -> *Save*.
8. To complete, click on the *Save* button located on the top-right corner.

## Launching the SharinPix mobile app from the Salesforce Field Service mobile app

The SharinPix mobile app can be launched from the SFS either using **App Extensions** or **Field Service Mobile Flows**.

To configure an App Extension to launch the SharinPix mobile app, refer to the following article: [Integration of SharinPix App with SFS (FSL) App using App Extension](/documentation/integrations/salesforce-field-service/integration-of-sharinpix-app-with-sfs-fsl-app-using-app-extension)

To configure a Field Service Mobile Flow to launch the SharinPix mobile app, refer to the following article: [Integration of SharinPix App with SFS (FSL) App using Flows](/documentation/integrations/salesforce-field-service/integration-of-sharinpix-app-with-sfs-fsl-app-using-flows)

## Old-Fashioned Methods

This section highlights the old-fashioned ways of:

{% hint style="info" %}
This section highlights the old-fashioned ways of:

1. [Integrating of the SharinPix Album component in the Salesforce mobile app using](https://docs.sharinpix.com/m/documentation/l/890535-using-on-salesforce-mobile-apps#integration-of-the-sharinpix-album-component-in-the-salesforce-mobile-app_1)
   * Canvas App on a detail page
   * Lightning action
   * VisualFlow
2. [Launch the SharinPix mobile app from the Salesforce mobile app using](https://docs.sharinpix.com/m/documentation/l/890535-using-on-salesforce-mobile-apps#launching-sharinpix-mobile-app-from-salesforce-mobile-app-using-visualforce-page)
   * Using a Visualforce page&#x20;
   * Formula fields
   * Lightning Action and Visualforce page
     {% endhint %}

### Integration of the SharinPix Album component in the Salesforce mobile app

1\. Addition of the SharinPix Canvas App

The SharinPix package includes the **SharinPix Canvas App** that can be added to a record page. The screenshot below depicts the SharinPix Canvas App.

![](/files/mu9Fe3vTtGjyODJTz2Pd)

{% hint style="success" %}
**Tip:**

For more information on how to add the **SharinPix Canvas App** to a record page, refer to the following article: [Basic Setup - Step 3a](/getting-started/basic-setup/basic-setup-step-3a-for-classic-users-setup-sharinpix-for-salesforce-classic)
{% endhint %}

2\. Opening SharinPix Album with Lightning action

SharinPix Album components can be embedded in a Lightning Actions within the Salesforce mobile app as demonstrated below:

![](/files/l88NpYR8a2UKqgVvUOnu)

![](/files/qTnrWs7lqWL7ZSIbhtGR)

{% hint style="success" %}
**Tip:**

For more information on how to embed a SharinPix Album in Lightning Actions, refer to the following article: [Integrating SharinPix Album with Lightning Action](/documentation/features/main-integration/using-on-lightning-with-sharinpix-album-lightning-action)
{% endhint %}

### Launch the SharinPix mobile app from the Salesforce mobile app

1\. Launching SharinPix Mobile App from Salesforce Mobile App using Visualforce page

It is possible to construct a Visualforce page that opens open the SharinPix mobile app using the **Mobile Launcher Visualforce component**. Such configuration is explained in the following article: [Using the Mobile Launcher Visualforce Component](/documentation/features/main-integration/using-the-mobile-launcher-visualforce-component).

The Mobile Launcher Visualforce component is depicted in the screenshot below:

![](/files/mxFLORlzKktjmi7Xpg01)

2\. Launching SharinPix Mobile App from Salesforce Mobile App using Formula Fields

The SharinPix mobile app can be launced from the SF app using formula fields. Such configuration includes a formula field of type text embedding the **HYPERLINK** function. The formula field should point to a SharinPix mobile app URL as demonstrated below:

```
HYPERLINK('sharinpix://upload?token=' & SharinPix_Token_Part_1__c & SharinPix_Token_Part_2__c & SharinPix_Token_Part_3__c , 'Click to Open Camera', '_blank')
```

{% hint style="success" %}
**Tip:**

SharinPix native mobile app integrates with Salesforce mobile using deeplink (URL starting with Sharinpix://). For more information on SharinPix deeplinks, refer to the following article:

[SharinPix deeplink syntax here](/documentation/mobile-app/sharinpix-mobile-app-deeplink-syntax).
{% endhint %}

The screenshot below depicts a formula field, **Launch SharinPix Mobile App** , embedding a SharinPix mobile app URL:

![](/files/qKilxQ3va587ddJBUqBL)

Upon clicking on this **Open Camera App** field, the SharinPix mobile app is launched.

3\. Launching SharinPix Mobile App from Salesforce Mobile App with Lightning Action and Visualforce Page

The SharinPix Mobile app can aslo be launched from the Salesforce mobile application using Lightning Actions as depicted below:

![](/files/QgUWHI2AOixSKm6xX9Sw)

The above Lightning Action embeds a custom Visualforce page which contains **SharinPix URLs** used to launch the SharinPix app:

![](/files/UaIY02JfMpMzQmQ6Ri8X)

Each **SharinPix URL** contains a different set of parameters which will launch the **SharinPix Mobile Application** into different modes.

For instance, clicking on **Take Pictures with Camera** automatically launches the **SharinPix Mobile Application** in Camera Mode.

{% hint style="success" %}
**Tip:**

For more information on how to constructs such Visualforce page, refer to the following article: [Integrating SharinPix with Salesforce Mobile App using Lightning Action and Visualforce](/documentation/cookbook/integrating-sharinpix-with-salesforce-mobile-app-using-lightning-action-and-visualforce)
{% endhint %}


# Using on Salesforce Field Service App (Field Service Lightning)

{% hint style="info" %}
**Information:**

Salesforce Field Service (SFS) was formerly known as Field Service Lightning (FSL).
{% endhint %}

When it comes to image management, the SFS mobile App provides limited integration, especially when used offline.

SharinPix has a mobile application that can address such limitations. Using SharinPix alongside the SFS Mobile App enables a frictionless experience for the mobile workforce facing situations where they are required to perform their field service duties even without access to the internet.

The SharinPix mobile App can be integrated with the SFS mobile App through two possibilities:

1. **AppExtension** using a deeplink
2. A **Flow** that embeds a deeplink

![](/files/pv1W5JFszAUO08RcqUeO)

## Integration of SharinPix with SFS

### How is it done?

To launch the SharinPix mobile App from the SFS App, SharinPix uses deeplink.

Deeplink is simply an URL that indicates the location where the images captured by the user will be uploaded. This URL includes a token relating to the record on which the images will be uploaded.

The example below demonstrates the deeplink syntax used to upload images:

```
sharinpix://upload?token=token_value
```

The SharinPix deeplink URL above can be integrated with a Flow or an App Extension. Upon selecting the same URL in the SFS App, the SharinPix mobile App will be launched.

{% hint style="success" %}
**Tips:**

For more information about the deeplink syntax, refer to the following article:

[SharinPix mobile App: deeplink syntax](/documentation/mobile-app/sharinpix-mobile-app-deeplink-syntax)

In this article, you will learn about all the options you can add to the deeplink to change the behavior of the SharinPix mobile app and have different options to offer to your users. One behavior would be to return automatically to the field service app after submission; please follow [this article](/documentation/mobile-app/sharinpix-mobile-app-deeplink-syntax#ret_url) to configure this functionality.
{% endhint %}

### Implementation

For your first implementation, we suggest creating an App Extension embedding a deeplink URL, but before that, a token needs to be generated at the record level in advance. One easy way to generate mobile upload tokens is by using a **Flow**.

{% hint style="info" %}
**Set-Up:**

To generate mobile upload tokens automatically using a Flow, refer to the following article:

[SharinPix automatic mobile upload token generation (Admin Friendly)](/documentation/mobile-app/sharinpix-automatic-mobile-upload-token-generation-admin-friendly)
{% endhint %}

In short, to integrate the SharinPix App with the SFS App using an App Extension, you need to:

1. Generate the token
2. Integrate the token generated in a deeplink
3. Use the deeplink in an App Extension

{% hint style="info" %}
For more information about how to use a deeplink URL in an App Extension, refer to the following article: [Integration of SharinPix App with SFS (FSL) App using App Extension](/documentation/integrations/salesforce-field-service/integration-of-sharinpix-app-with-sfs-fsl-app-using-app-extension)
{% endhint %}

{% hint style="success" %}
**Tip**:

* As mentioned earlier, the SharinPix App can also be integrated with the SFS App using a **Flow**. For more information about how this is performed, refer to the following article:\
  [Integration of SharinPix App with SFS (FSL) App using Flows](/documentation/integrations/salesforce-field-service/integration-of-sharinpix-app-with-sfs-fsl-app-using-flows)
* SharinPix Images can also be added to SFS Service Reports. How more information about how this is done, please refer to the following article:

  [Display Images in Service Report (Salesforce Field Service / FSL)](/documentation/integrations/salesforce-field-service/display-images-in-service-report-salesforce-field-service-fsl)
  {% endhint %}


# Using on Chatter

## Overview

In this article, we will see the steps to integrate the SharinPix Album with the Salesforce Chatter Feed.

## Add SharinPix Chatter Publisher Action

* Go to **Setup.** Enter "**Global Actions**" in the **Quick Find Box.**
* Under **Global Actions** , select **Publisher Layouts**.
* Click on the **Edit** as shown in the screenshot below.

![](/files/DsgXu3fK5ySwTjscR8Ua)

* Drag and Drop the action **Share an Album** onto the **Quick Actions in the Salesforce Classic Publisher.** The **Share an Album** action is already included in the SharinPix Package.

![](/files/pFyA1O2UEnyOCXEj7otK)

* Click on **save** when you are done.
* Navigate to **Salesforce Chatter.** As it can be seen on the Chatter Publisher, the action **Share an Album** is present.

![](/files/4Hn6d10WCGZUEMMjvQRl)

{% hint style="warning" %}
**Note:** If publisher action is not showing in chatter publisher on Salesforce, ensure Actions are enabled in Publisher:

* Navigate to: App Setup > Customize > Chatter > Settings
* Check “Enable Actions in the Publisher”
  {% endhint %}


# Using SharinPix in Salesforce Community

This article demonstrates how to:

* [Enable the usage of SharinPix in Salesforce Community](#enable-the-usage-of-sharinpix-in-salesforce-community)
* [Add the SharinPix Album component to Community home page](#add-the-sharinpix-album-component-to-a-community-home-page)
* [Add a SharinPix album to Community record page](#add-the-sharinpix-album-to-a-community-record-page)

{% hint style="warning" %}
**Prerequisites:**

Salesforce Communities should be enabled on your organisation.
{% endhint %}

## Enable the usage of SharinPix in Salesforce Community

To enable the usage of SharinPix in Salesforce Community, a **CSP Trusted Site** entry has to be added for SharinPix. To do so, follow the steps below:

1\. Go to **Setup**. Enter **CSP** in the **Quick Find Box**.

2\. Under **Security**, select **CSP Trusted Sites**.

3\. Then, click on **New Trusted Site** as shown below:

![](/files/gQDViRkyv9DTChim4jW8)

You will be directed to the page below:

![](/files/6C1fHEoGMguSAk5szFOu)

4\. For the field **Trusted Site Name** , enter **SharinPix**

5\. For the field **Trusted Site URL** , enter **<https://app.sharinpix.com>**

![](/files/RWOMVBzRm24fYOSHwc3K)

6\. Then, click on **Save**

7\. Next, repeat steps 3 to 6 to create new trusted sites using the following SharinPix endpoint URL as the **Trusted Site URL**: **<https://p.sharinpix.com>**

## Add the SharinPix Album component to a Community home page

To add a SharinPix Album component to a Community Home Page, follow the steps below:

* Go to **Setup** , then enter **Communities** in the **Quick Find Box**
* Under **Communities**, select **All Communities**
* Click on **Builder** next to the **Community** you intend to modify

![](/files/vyezU8plOQG65UqW4f2B)

* Once inside the **Builder,** select the **Components** menu from the home page. Then, scroll down to the **Custom Components** section
* Drag and Drop the **SharinPix Album** component onto the desired region

![](/files/a65dSPpABhPFuL64oUvn)

* To display images on the SharinPix Album, you will need to supply a record Id in the **AlbumId** field available in the component's property editor. The SharinPix Album will then display all the images corresponding to that record

![](/files/cVfxcL2q9zzoY9ki9a1j)

![](/files/324zfUzcV7GdxyYLfktY)

Make sure to publish the community in order to make the changes visible to your given audience.

## Add the SharinPix Album to a Community record page

There are two ways of adding a SharinPix album to a Community record page:

1. By either adding the SharinPix Album lightning component to the record page
2. Or by adding a Visualforce page embedding a SharinPix album component to the record page

{% hint style="warning" %}
**Note:**

If you intend to use a Salesforce object on a Community, you should ensure that proper access rights has been given to the object so as to view the records.
{% endhint %}

### Add the SharinPix Album component to a Community record page

To add the SharinPix Album to the Community record page:

* Edit the record page in **Builder** mode
* From **Components**, find the **SharinPix Album** component under the **Custom Components**
* Drag and drop the **SharinPix Album** component onto the desired region on the record page

The result should be as follows:

![](/files/JYxLa9p3Is95r22OJaoe)

### Add a Visualforce page embedding a SharinPix album to the record page

It is possible to add a Visualforce page containing a SharinPix album on a Community record page. To do so:

* Implement a Visualforce page embedding the SharinPix album. You can use the code snippet below for this implementation:

```html
<apex:page standardController="Account">   
    <sharinpix:SharinPix height="500px" 
		parameters="{
        	'Id': '{!CASESAFEID($CurrentPage.parameters.Id)}', 
            'abilities':{
            	'{!CASESAFEID($CurrentPage.parameters.Id)}':{
                'Access': {
                	'image_upload':true,
                    'image_list':true,
                    'see':true,
                    'image_delete':true
                    }
				}
			}
		}"
	/> 
</apex:page>
```

* Once your Visualforce page is ready, go ahead and edit the desired record page in **Builder** mode
* From **Components** , drag and drop the **Visualforce Page** found under the **Content** section onto the desired region on the record page
* In the component's property editor, make sure that the field **Record ID** has **{!recordId}** as value

![](/files/TWXRn6fwIFgjYd7hzyng)

The result should be as follows:

![](/files/SccHGVEsJGj9BDkJtEf9)

{% hint style="info" %}
**Information:**

If a Visualforce page embedding a SharinPix album is already present on an object's page layout, the Visualforce page will also be visible in the **Details** section of the corresponding records inside a Salesforce Community.

The screenshot below depicts an Account record's **Details** section with a Visualforce page embedding the SharinPix Album component:
{% endhint %}

![](/files/8Bewlg0v7dBCnOwMhFCS)

![](/files/a21wbb7IW1O1XPOY9z15)

{% hint style="success" %}
**Tip:**

Community users do not have all access rights to SharinPix by default.

If you encounter issues regarding Community users not having proper access to the SharinPix Image Sync or SharinPix components, please refer to the following article:

[SharinPix Community users access rights](/documentation/access-and-security/sharinpix-community-users-access-rights)
{% endhint %}


# Using SharinPix to PDF Component in Salesforce Community

{% hint style="warning" %}
This component is only available in the Enterprise license plan of SharinPix. For more info, please contact <support@sharinpix.com>
{% endhint %}

The **SharinPix To PDF** component allows users to generate a PDF using preselected images from a SharinPix Album.

This is a great way for you to generate reports and send them as attachments in email. In addition, the PDF generated will be saved on the record as Content Document.

This article demonstrates how to use this component in **Salesforce Communities**.

## Getting Started

{% hint style="warning" %}
**Note:**

In order to use this component, you should ensure:

* That Image Sync is enabled for the **SharinPix Album** component. To do so, check the **Enable Image Sync** checkbox in the SharinPix Album's parameters. This step is required to enable the creation of **SharinPix Image Objects** upon image uploads.

  You can click [here](/documentation/image-sync/setup-sharinpix-image-sync) for more information about how to set up the SharinPix Image Sync.
* Enabled the usage of SharinPix in Salesforce Community

  You can click [here](/documentation/features/main-integration/using-sharinpix-in-salesforce-community) for more information on how to enable the usage of SharinPix in Communities.
  {% endhint %}

To use the SharinPix To PDF component, you simply need to drag and drop the component from the **Components** section onto your community page layout.

![](/files/EIs6EDtc14JUn8u5wgbO)

## Lightning Component Parameters

![](/files/0lFiZ6mxo4DKOGyX0DUV)

{% hint style="danger" %}
**Note:**

* All Salesforce fields used as parameters in the SharinPix to PDF component are available on the SharinPix Image object.

* All custom fields used on the component should be added to the SharinPix Image object.
  {% endhint %}

* **Generate PDF Button Label:** Used to set the custom button's label. The default value is **Generate PDF**.

* **Image URL field:** The API name of the Image URL field to be used for the type of image. Image sizes will depend on the field chosen. The default value is **sharinpix\_\_ImageURLFull\_\_c**
  * Some values already included in the SharinPix Package are:
    * sharinpix\_\_ImageURLFull\_\_c
    * sharinpix\_\_ImageURLOriginal\_\_c
    * sharinpix\_\_ImageURLThumbnail\_\_c
    * sharinpix\_\_ImageURLMini\_\_c

* **Image Caption Text:** The API name of the field storing the text to be displayed alongside the image. The default value is **None**.

* **Number Of Columns:** The maximum number of images to be displayed per row.

* **First Page Content:** The API name of the rich-text field to be used as first page content. The default value is **None**.

* **Last Page Content:** The API name of the rich-text field to be used as last page content. The default value is **None**.

* **Images' Pre-description:** The API name of the rich-text field to be used for the pre-description of images. The default value is **None**.

* **Images' Post-description:** The API name of the rich-text field to be used for the post-description of images. The default value is **None**.

* **Page Orientation:** Orientation of the generated PDF. The default value is **portrait**.

* **Single Image Per Page:** Used to display only one image per page.

* **Footer format:** An HTML format to display in the footer section of each page. Merge fields such as {pagenumber} and {pagecount} can be used to include page number and total pages of the PDF.

## Demo

To generated the PDF, select some images from the SharinPix Album and click on **Generate PDF** button as shown below:

![](/files/gKTc8P9SugYa64qn1PrF)

The PDF generated can be found under the **Notes & Attachments** section in the **Related** tab:

![](/files/gEGZ1onaqzKAdY6cHEqz)

Below is an instance of the PDF generated:

![](/files/zvrLCVRsALGY1IWe7Gxx)

{% hint style="success" %}
**Tip:**

For best results, use the SharinPix Transformations to have custom image size.

More information on transformation can be found here: [SharinPix Transformation - get your images automatically resized!](/documentation/image-sync/sharinpix-transformation-get-your-images-automatically-resized)
{% endhint %}

Below are some references for optimal image transformations for you to have a visually appealing PDF:

| Layout                                 | Columns | Transformation type    | Value     |
| -------------------------------------- | ------- | ---------------------- | --------- |
| Portrait 4 images per page             | 2       | Pad to size            | 1000x1500 |
| <p>Portrait 6 images per page<br></p>  | 2       | <p>Pad to size<br></p> | 1000x1000 |
| <p>Portrait 8 images per page<br></p>  | 2       | <p>Pad to size<br></p> | 1000x650  |
| <p>Portrait 10 images per page<br></p> | 2       | <p>Pad to size<br></p> | 1000x580  |
| Landscape 3 images per page            | 1       | Pad to size            | 1000x1500 |

{% hint style="info" %}
The SharinPix to PDF component is also available in Salesforce Lightning. For more information about how to use this component in Lightning, refer to the following article:

[SharinPix To PDF](/documentation/lightning-web-component/sharinpix-to-pdf)
{% endhint %}


# Using on a Web Form

## Use SharinPix in your own webform

The present demo intends to demonstrate the flexibility of the SharinPix Album and how it can be easily added to any Visualforce Page and fulfill your relevant use case.

{% hint style="info" %}
Resources:

For a sample case scenario, please refer to the Apex Class and Visualforce Page used by following this link:

<https://github.com/SharinPix/demo-apex/tree/case_webform>
{% endhint %}

## Structure of the Webform

The **webform** will be present inside a **Visualforce Page** and it will make use of an **iframe** element to display the SharinPix Album. An **Apex Controller** will also be used to generate a **SharinPix URL** which in turn will be fed to the **src** attribute of the iframe **element**.

### Visualforce Page

The specific code line shown below, indicates the **iframe** element and the value passed to the **src** attribute. This value is represented as a merge-field which is found on the Apex Controller as implemented in the next section: [Apex Controller](#apex-controller). Within this iframe, the SharinPix Album is displayed.

```html
<iframe src="{! url }" height="400px" width="100%" style="border: 0"/>
```

### Apex Controller

The piece of code below shows how the **SharinPix URL** is generated using **SharinPix Abilities**. The **SharinPix URL** is then assigned to the **src** attribute of the iframe as mentioned above.

{% hint style="info" %}
To know more about **SharinPix Abilities**, refer to the following article: [SharinPix abilities](/documentation/access-and-security/sharinpix-abilities)
{% endhint %}

```apex
Map<String, Object> claims = new Map<String, Object> {
            'abilities' => new Map<String, Object> {
                albumId => new Map<String, Object> {
                    'Access'  => new Map<String, Object> {
                        'see' => true,
                        'image_list' => true,
                        'image_upload' => true,
                        'image_delete' => true,
                        'image_crop' => true,
                        'image_rotate' => true,
                        'image_annotate' => true
                    }
                }
            }
        };
        url = 'https://app.sharinpix.com/pagelayout/' + albumId + '?token=' + sharinpix.Client.getInstance().token(claims);
    }
```

The iframe is rendered and displayed as shown below.

![](/files/juwNyRRoeBlkHPpbG4DF)


# Using in your own mobile app

It is possible to use SharinPix both in the **online** and **offline** experience.

* [Online usage](#online-usage)
* [Offline usage](#offline-usage)

## Online usage

Throughout the online experience, which evidently requires a constant and consistent internet connectivity, one approach arise:

* [SharinPix inside Webform](#sharinpix-inside-webform)

### SharinPix inside Webform

* It is possible to use an **Iframe** html element that displays the SharinPix Album within an web form Page.
* The SharinPix URL fed to the **src** attribute of the Iframe element should have the following structure:

```
https://app.sharinpix.com/pagelayout/album_id?token=token_value
```

where,

* **album\_id** corresponds to the album you intend to display
* **token\_value** corresponds to the abilities of the SharinPix Album

The screenshot below shows how the album should appear:

![](/files/NrFZ9dMHEainDUhlFIvk)

## Offline usage

{% hint style="warning" %}
**Note:** To use SharinPix in an offline context, it is mandatory to use the **SharinPix mobile application.**
{% endhint %}

Throughout the offline experience, which in this case presents an absence of internet connectivity, one main main approach to use SharinPix arise:

* Use a custom deeplink to launch the SharinPix Mobile Application from your own Mobile Application.
* For example, the custom deeplink for upoading images should be in the follow form:

```
sharinpix://upload?token=token_value
```

where,

* **token\_value** corresponds to the abilities of the SharinPix Album where the images are to be uploaded to.


# Using the Mobile Launcher Visualforce Component

## What is it used for?

The **Mobile Launcher** helps you to automatically generate a **Deeplink URL** which can then be used to launch the SharinPix Mobile App.

{% hint style="info" %}
For more information about Deeplink and its syntax, refer to the following article:

[SharinPix mobile App : Deeplink syntax](/documentation/mobile-app/sharinpix-mobile-app-deeplink-syntax)
{% endhint %}

## How to use it:

Since it is a Visualforce Component, it can be easily inserted into a Visualforce Page. The code snippet below shows a sample implementation of the component within a Visualforce Page on the Account object.

```html
<apex:page standardController="Account">
	<sharinpix:MobileLauncher albumId="{! Account.Id }"></sharinpix:MobileLauncher>
</apex:page>
```

## How does it look ?

The screenshot below shows how the component looks when it is inserted into a page layout in the SalesforceApp, inside a Visualforce Page within the Salesforce App.

![](/files/KHQpvHosl7KRWvR4zXQS)

When you click on the **Take Pictures** button, the component will automatically launch the SharinPix mobile App.

However, if the latter is not already installed, the component will display the corresponding links to the SharinPix mobile App on the Google Play as well as on the App Store.

On an Android device:

![](/files/HOJd7Ev0taFRLS8gjOAE)

On an IOS device:

![](/files/7UvZptFobyxBtuvOn8i6)

## What parameters does the Mobile Launcher take ?

The Mobile Launcher can take several parameters. Each parameter applied affects the behavior inside the SharinPix mobile App when launched.

### albumId

The **albumId** attribute takes the ID of a record to which the photos taken by the SharinPix Mobile app will be uploaded.

```html
<sharinpix:MobileLauncher albumId="<<id of record>>"></sharinpix:MobileLauncher>
```

### urlParameters

The **urlParameters** attribute takes a set of parameters that will affect how the SharinPix Mobile App will behave when its launched.

```html
<sharinpix:MobileLauncher albumId="{! Account.Id }" urlParameters="confirmation=true&mode=camera"></sharinpix:MobileLauncher>
```

In the code snippet above, the urlParameters applied are:

* confirmation=true
* mode=camera

The **confimation** and **mode** parameters are used in the Deeplink URL. In this case, they will cause the SharinPix mobile App to open directly on camera mode and will preview each photo captured before uploading them.

The image depicts how the photo captured is previewed before being uploaded:

![](/files/S6qnYPzPEkKQhpqHkzRa)

Let's use two more urlParameters example to get you acquainted:

1\. Using the parameter **tags** :

```
urlParameters="tags=Red;Blue"
```

The results obtained when launching the SharinPix mobile App is as follows:

![](/files/S75rUwvk4zN6hQHrbs8Q)

2\. Using the **checklist** parameter.

```
urlParameters="checklist=North;South;East;West"
```

The results obtained when launching the SharinPix mobile App is as follows:

![](/files/ZQmQdUAA11tkSzJKa4td)

{% hint style="success" %}
You can find more information about the **confirmation**, **mode**, **tags** and **checklist** parameters and many more in the following article:

[SharinPix mobile App : Deeplink syntax](/documentation/mobile-app/sharinpix-mobile-app-deeplink-syntax)
{% endhint %}

### label

The **label** parameter takes the value of the text that will appear on the component button.

```html
<sharinpix:MobileLauncher albumId="{! Account.Id }" urlParameters="confirmation&mode=camera" label="Shoot Pictures"></sharinpix:MobileLauncher>
```

![](/files/cgI9zLt9hitpRuCePyKj)

{% hint style="success" %}
How to use the Mobile Launcher in the Salesforce mobile App:

* Create a Visualforce Page containing the Mobile Launcher component.
* Add the VF Page created on a page layout in the Salesforce App.

You can also add the **SharinPix Mobile Launcher** component on a Lightning page. To do so, refer to the following article:

[Using on Lightning with "SharinPix Mobile Launcher" Lightning Component (Admin Friendly)](/documentation/features/main-integration/using-on-lightning-with-sharinpix-mobile-launcher-lightning-component-admin-friendly)
{% endhint %}


# Using a SharinPix component in an Iframe (Developer-oriented)

In this article, you will learn:

* [The Iframe syntax used by SharinPix](#iframe-syntax-used-by-sharinpix)
* [How to create a Visualforce page that contains an Iframe embedding the SharinPix component](#creating-the-visualforce-page)

## Iframe syntax used by SharinPix

SharinPix is flexible enough to be used in an Iframe. Traditionally, the Iframe syntax used to embed a SharinPix component was as follows:

```html
<apex:page standardController="Account" extensions="GetToken">    
    <iframe id="iframeId" class="sharinpix-iframe" src="https://app.sharinpix.com/?token={! SharinPixToken }"></iframe>
</apex:page>
```

However, some iOS devices encountered a cookie issue when using this syntax as depicted in the image below:

![](/files/l3AVlUevM1tEDvzFDRyy)

To bypass this issue, SharinPix made use of the **postMessage** method (a method that ensures cross-document messaging between two domains) to send the token to the SharinPix URL.

The postMessage method takes two arguments:

1. The data to be sent.
2. The domain to which you want to send the data. This domain is commonly referred to as the **target origin**.

In the following section, you will learn how a SharinPix component can be embedded in an Iframe using the **postMessage** method. To demonstrate this, we will:

* Create an Apex method that generates the token.
* Create a Visualforce page that:
  1. Embeds an Iframe containing the SharinPix URL and a reference to the postMessage method.
  2. Invokes the Apex method to retrieve the token.

## Creating the Visualforce page

{% hint style="warning" %}
**Note:** For this demo, we will use the Account object.
{% endhint %}

This section shows how to create the Visualforce page that will:

* Embed an Iframe.
* Invoke the newly-created method that returns a token.
* Use the postMessage method to send the retrieved token to the target origin.

Firstly, create an Apex Class containing a method that generates a token and returns same using the code snippet below:

```apex
global with sharing class GetToken {
	public String currentRecordId {get;set;}
 
    public GetToken(ApexPages.StandardController controller) {
        currentRecordId  = ApexPages.CurrentPage().getparameters().get('id');
    }    
    
    @RemoteAction
    global static String generateToken(String recordId){
        String token;
        
        token = sharinpix.Client.getInstance().token(
                new Map<String, Object> {
                    'Id' => recordId,
                    'exp' => 0,
                    'path' => '/pagelayout/' + recordId,
                    'abilities' => new Map<String, Object> {
                        recordId => new Map<String, Object> {
                            'Access' => new Map<String, Boolean> {
                                'see' => true,
                                'image_list' => true,
                                'image_upload' => true,
                                'image_delete' => true
                            }
                        }
                    }
                }
            );
        return token;
    }
}
```

Now create the Visualforce page using the code snippet below:

```html
<apex:page standardController="Account" extensions="GetToken">
    
    <iframe id="iframeId" class="sharinpix-iframe" src="https://app.sharinpix.com/post_message" width="100%" height="100%"></iframe>
    
    <script>
    var iframe = document.getElementById('iframeId')
        iframe.onload = function() {
            Visualforce.remoting.Manager.invokeAction(
            "{! $RemoteAction.GetToken.generateToken }",
            "{!currentRecordId}",
             function(result, event) {
                if (event.status) {
                    iframe.contentWindow.postMessage({ token: result}, 'https://app.sharinpix.com');
                } else {
                    alert('Error. See console log.');
                    console.log('Result: ', result);
                    console.log('Event: ', event);
                }
             }
            );    
        }      
    </script>
</apex:page>
```

The newly-created Visualforce page consists of an Iframe embedding the SharinPix URL and a reference to the postMessage method.

Upon loading the Iframe, the Visualforce page will invoke the method **generateToken** from the class **GetToken** to retrieve the token.

```javascript
<script>
    var iframe = document.getElementById('iframeId')
        iframe.onload = function() {
            Visualforce.remoting.Manager.invokeAction(
            "{! $RemoteAction.GetToken.generateToken }",
            "{!currentRecordId}",
             function(result, event) {
                if (event.status) {
                    iframe.contentWindow.postMessage({ token: result}, 'https://app.sharinpix.com');
                } else {
                    alert('Error. See console log.');
                    console.log('Result: ', result);
                    console.log('Event: ', event);
                }
             }
            );    
        }      
</script>
```

The retrieved token will be then sent to the target origin using the postMessage method as shown in the code snippet below:

```javascript
iframe.contentWindow.postMessage({ token: result}, 'https://app.sharinpix.com');
```

### See the Iframe in Action

To access the SharinPix component from the Iframe, add the newly-created Visualforce page to an **Account** object.

![](/files/8Qr5jfC5SZJGkkzsDRt9)




---

[Next Page](/llms-full.txt/1)

