> ## Documentation Index
> Fetch the complete documentation index at: https://domoinc-openapi-sync-dataflows.mintlify.site/llms.txt
> Use this file to discover all available pages before exploring further.

# PDP Automation

export const InlineImage = ({src, alt = '', height = '1.6em'}) => {
  return <img noZoom src={src} alt={alt} style={{
    display: 'inline',
    verticalAlign: 'start',
    height: height,
    margin: '0'
  }} />;
};

### Intro

PDP Automation allows a user to configure a DataSet that outlines what PDP should look like for DataSet(s). Each job can run on a schedule and when the configuration DataSet updates.

***

### Access the Toolkit

To access the Governance Toolkit, do the following:

1. In the navigation header, select
   **More** > **Admin.**
2. In the
   **Governance** menu, select **Toolkit.**

   <Note>
     **Note:**
     If the
     **Toolkit**
     option does not display in the
     **Governance**
     menu, make sure your user role has the required grants. You may need to enable the Toolkit by reaching out to your Account Executive.
   </Note>

### Required Grants

To access the Governance Toolkit a user will need 1 of 2 grants enabled for a user. Grants can be added to a custom user role. By default, the Administer Custom Pipeline Process grant is enabled for Admin users.

* Create Custom Pipeline Processes
  * This grant will allow a user to create, update, share, and delete jobs.
  * This grant will only allow a user to see jobs that they created or jobs that have been shared with them.
* Administer Custom Pipeline Processes
  * This Grant will allow a user to create, update, share, and delete jobs.
  * this grant will allow a user to see all jobs

To learn more about custom roles and grants see [Managing Custom Roles](/s/article/360043438973).

### Configuration DataSet

<Warning>
  **Important:**
  For the Configuration DataSet, "On-Demand" DataSet Views are not supported. Only Views that update on a schedule or via DataSet update are allowed.
</Warning>

<Note>
  **Note:**
  The max limit for input rows with the PDP tool is one million rows. If you need a larger allowance, split any jobs larger than one million rows into smaller jobs.
</Note>

* target\_ds
  * This is the DataSet id that the PDP policy should be applied to
  * In a configuration DataSet you can have multiple DataSet ids
* policy\_name
  * The name of what the policy is called on the target\_ds
  * If a policy with that name does not exist a new policy will be created with this name
* policy\_column
  * The column name that contains the values you wish to filter by
* user\_group
  * User ID or emails
  * Group ID or name
  * These are the users or groups you wish to have access to the PDP policy
  * This supports multiple values. Different values should be separated by a pipe ‘|’
* value
  * Values to filter the policy by
  * This supports multiple values. Different values should be separated by a pipe ‘|’
* custom\_filter
  * The custom filter type to be applied
  * The filter options include:
    **greater\_than, greater\_than\_equal, less\_than, less\_than\_equal, between,** and **begins\_with.**
  * Multiple values can be set using the same filter with |
  * When using between, the two values must be separated by '&'. For example: 04012020 & 04022020 | 04032020 & 04042020

    <Frame>
      <img alt="Screenshot 2023-05-24 at 5.27.13 PM.png" src="https://mintcdn.com/domoinc-openapi-sync-dataflows/zKZ3HwsBqhLsvFuw/images/kb/ka0Vq00000044g9-00N5w00000Ri7BU-0EM5w000006uq7Q.jpg?fit=max&auto=format&n=zKZ3HwsBqhLsvFuw&q=85&s=ecc7b3d59387207eaf1afa444f5abdc3" style={{width: 739, height: 253}} width="2622" height="898" data-path="images/kb/ka0Vq00000044g9-00N5w00000Ri7BU-0EM5w000006uq7Q.jpg" />
    </Frame>

    <Frame>
      <img alt="Screenshot 2024-02-08 at 2.03.04 PM[8].jpg" src="https://mintcdn.com/domoinc-openapi-sync-dataflows/zKZ3HwsBqhLsvFuw/images/kb/ka0Vq00000044g9-00N5w00000Ri7BU-0EMVq000000OOXR.jpg?fit=max&auto=format&n=zKZ3HwsBqhLsvFuw&q=85&s=dda4e00c63390c5c0731f56ee2795a10" style={{width: 738, height: 256}} width="859" height="298" data-path="images/kb/ka0Vq00000044g9-00N5w00000Ri7BU-0EMVq000000OOXR.jpg" />
    </Frame>

    ##

### Create a Job

Follow these steps to create a job:

1. Navigate to the Governance Toolkit and select PDP Automation.
   * [https://example.domo.com/admin/governance-toolkit/pdp-automation](https://example.domo.com/admin/governance-toolkit/pdp-automation)
2. Click
   **+ New Job** at the top right.
3. Fill out the following information:
   * Job Name (required)
   * Job Description (optional)
   * Configuration DataSet (required)
     * This is the DataSet that defines what policies you wish to update or create.
   * Orphaned policy management (required)
     * Orphaned policies refer to existing PDP policies on your DataSet defined in your configuration DataSet, but policies that are not being updated in your configuration DataSet.
     * Keep
       * Will leave those existing policies in place with no changes.
     * Delete
       * Will delete those policies that exist on the DataSet but not in the configuration file.
   * Run Logs (required)
     * Each job will keep track of executions of the job and information surrounding that.
     * New DataSet
       * Will create a new DataSet in your Domo instance and all runs of the job will write logging to the new DataSet.
     * Existing DataSet
       * Existing DataSet will allow you to combine multiple PDP Automation jobs into a single logging DataSet.
       * The DataSet must be a DataSet created by the PDP Automation tool.
         * DataSet must also already contain rows of data.
     * Email notifications (optional)
       * You can add user emails to this field.
       * Each email will receive an email notification from Domo each time the job runs.
       * The notification will outline what the job did during the run and any failures that occurred.

<Frame>
  <img alt="PDP_Automation_Notification.png" src="https://mintcdn.com/domoinc-openapi-sync-dataflows/zKZ3HwsBqhLsvFuw/images/kb/ka0Vq00000044g9-00N5w00000Ri7BU-0EM5w000005vNox.png?fit=max&auto=format&n=zKZ3HwsBqhLsvFuw&q=85&s=854fbb44d22a5863f95d074eafdc9e9d" style={{width: 549, height: 494}} width="1476" height="1328" data-path="images/kb/ka0Vq00000044g9-00N5w00000Ri7BU-0EM5w000005vNox.png" />
</Frame>

<Frame>
  <img alt="PDP_Automation_5.png" src="https://mintcdn.com/domoinc-openapi-sync-dataflows/zKZ3HwsBqhLsvFuw/images/kb/ka0Vq00000044g9-00N5w00000Ri7BU-0EM5w000005vNor.png?fit=max&auto=format&n=zKZ3HwsBqhLsvFuw&q=85&s=659a192254a39ef39b3faa384f38c78d" style={{width: 900, height: 268}} width="5104" height="1520" data-path="images/kb/ka0Vq00000044g9-00N5w00000Ri7BU-0EM5w000005vNor.png" />
</Frame>

### Run a Job

Each job has an Enabled Toggle. This will control how a job is run.

* Preview Only
  * The job will only execute when the job is manually run.
  * When the job is run it will not update the actual target DataSet(s) from your configuration file. It will update the log DataSet with all the changes it would have made to the DataSet.
    * This allows you to validate the job before it updates your DataSets.
* Active
  * This will update the PDP policies on your DataSet(s).
  * The job will execute every six hours.
  * The job will execute every time the configuration DataSet is updated.

<Frame>
  <img alt="PDP_Automation_3.png" src="https://mintcdn.com/domoinc-openapi-sync-dataflows/zKZ3HwsBqhLsvFuw/images/kb/ka0Vq00000044g9-00N5w00000Ri7BU-0EM5w000005vNoz.png?fit=max&auto=format&n=zKZ3HwsBqhLsvFuw&q=85&s=cd8908ed27dae567c53db4d3557a1ddb" style={{width: 900, height: 300}} width="5112" height="1704" data-path="images/kb/ka0Vq00000044g9-00N5w00000Ri7BU-0EM5w000005vNoz.png" />
</Frame>

### Example Job Run

* PDP Before run:

  <Frame>
    <img alt="PDP_Automation_1.png" src="https://mintcdn.com/domoinc-openapi-sync-dataflows/zKZ3HwsBqhLsvFuw/images/kb/ka0Vq00000044g9-00N5w00000Ri7BU-0EM5w000005vNop.png?fit=max&auto=format&n=zKZ3HwsBqhLsvFuw&q=85&s=02dec76490e0c1c7d248017d2bf2f2e9" style={{width: 901, height: 241}} width="5106" height="1366" data-path="images/kb/ka0Vq00000044g9-00N5w00000Ri7BU-0EM5w000005vNop.png" />
  </Frame>
* Configuration DataSet:

  <Frame>
    <img alt="PDP_Automation_Config.png" src="https://mintcdn.com/domoinc-openapi-sync-dataflows/zKZ3HwsBqhLsvFuw/images/kb/ka0Vq00000044g9-00N5w00000Ri7BU-0EM5w000005vNon.png?fit=max&auto=format&n=zKZ3HwsBqhLsvFuw&q=85&s=0bdd553a63d80dd197b9f4c37a71480d" style={{width: 896, height: 159}} width="5118" height="908" data-path="images/kb/ka0Vq00000044g9-00N5w00000Ri7BU-0EM5w000005vNon.png" />
  </Frame>
* PDP after run:

  <Frame>
    <img alt="PDP_Automation_2.png" src="https://mintcdn.com/domoinc-openapi-sync-dataflows/zKZ3HwsBqhLsvFuw/images/kb/ka0Vq00000044g9-00N5w00000Ri7BU-0EM5w000005vNos.png?fit=max&auto=format&n=zKZ3HwsBqhLsvFuw&q=85&s=bd203412b78bf9780bb403ea0c42ef1c" style={{width: 901, height: 289}} width="5110" height="1640" data-path="images/kb/ka0Vq00000044g9-00N5w00000Ri7BU-0EM5w000005vNos.png" />
  </Frame>
* Logging DataSet:

  <Frame>
    <img alt="PDP_Automation_Metrics.png" src="https://mintcdn.com/domoinc-openapi-sync-dataflows/zKZ3HwsBqhLsvFuw/images/kb/ka0Vq00000044g9-00N5w00000Ri7BU-0EM5w000005vNoq.png?fit=max&auto=format&n=zKZ3HwsBqhLsvFuw&q=85&s=137656b6965053dfb97a1ee26dbb586d" style={{width: 903, height: 138}} width="5106" height="780" data-path="images/kb/ka0Vq00000044g9-00N5w00000Ri7BU-0EM5w000005vNoq.png" />
  </Frame>

### Use All Rows Policy

You can give the All Rows policy to users and groups using PDP Automation. Follow the steps below.

1. In the Details view for the DataSet for which you want to extend the All Rows policy, select **Edit Webform**.

   **The webform for the DataSet displays.**
2. In the
   **user\_group** field of the All Rows policy row, add the email addresses for your user(s) or group(s), using a pipe | as a delimiter.
3. Select
   **Save and Continue**.

   The user or group is now added to the All Rows policy.

You can also remove users/groups from the All Rows policy in this same area by deleting them from the **user\_group** field.

### Use Dynamic Policies

Dynamic policies can be configured in your configuration file.

To add a dynamic policy, set the ‘policy\_column’ & set the ‘value’ column to the appropriate trusted attribute.

# List of Trusted Attributes

<table border="1" data-aura-rendered-by="33:200;a"><tbody><tr><th colspan="1" rowspan="1"> Trusted Attribute </th><th colspan="1" rowspan="1"> Value </th></tr><tr><td colspan="1" rowspan="1"> Name </td><td colspan="1" rowspan="1"><p> domo.policy.managed\_display\_name </p></td></tr><tr><td colspan="1" rowspan="1"> Email </td><td colspan="1" rowspan="1"><p> domo.policy.managed\_email\_address </p></td></tr><tr><td colspan="1" rowspan="1"> Secondary email </td><td colspan="1" rowspan="1"><p> domo.policy.managed\_alternate\_email\_address </p></td></tr><tr><td colspan="1" rowspan="1"> Employee number </td><td colspan="1" rowspan="1"><p> domo.policy.managed\_employee\_number </p></td></tr><tr><td colspan="1" rowspan="1"> Hire date </td><td colspan="1" rowspan="1"><p> domo.policy.managed\_hire\_date </p></td></tr><tr><td colspan="1" rowspan="1"> Title </td><td colspan="1" rowspan="1"><p> domo.policy.managed\_user\_title </p></td></tr><tr><td colspan="1" rowspan="1"> Department </td><td colspan="1" rowspan="1"><p> domo.policy.managed\_user\_department </p></td></tr><tr><td colspan="1" rowspan="1"> Location </td><td colspan="1" rowspan="1"><p> domo.policy.managed\_employee\_location </p></td></tr><tr><td colspan="1" rowspan="1"> Phone </td><td colspan="1" rowspan="1"><p> domo.policy.managed\_phone\_number </p></td></tr><tr><td colspan="1" rowspan="1"> Desk phone </td><td colspan="1" rowspan="1"><p> domo.policy.managed\_desk\_phone\_number </p></td></tr><tr><td colspan="1" rowspan="1"> Locale </td><td colspan="1" rowspan="1"><p> domo.policy.managed\_user\_locale </p></td></tr><tr><td colspan="1" rowspan="1"> Time zone </td><td colspan="1" rowspan="1"><p> domo.policy.managed\_user\_time\_zone </p></td></tr><tr><td colspan="1" rowspan="1"> Employee ID </td><td colspan="1" rowspan="1"><p> domo.policy.managed\_employee\_id </p></td></tr></tbody></table>

If you would like to ignore the case on a dynamic policy you can add “:ignore\_case” to the end of the trusted attribute in your value column.

<Frame>
  <img alt="Dynamic_Policies.png" src="https://mintcdn.com/domoinc-openapi-sync-dataflows/zKZ3HwsBqhLsvFuw/images/kb/ka0Vq00000044g9-00N5w00000Ri7BU-0EM5w000005vNot.png?fit=max&auto=format&n=zKZ3HwsBqhLsvFuw&q=85&s=3e4fedab5ddbe059826732106523cdb0" style={{width: 902, height: 65}} width="1430" height="103" data-path="images/kb/ka0Vq00000044g9-00N5w00000Ri7BU-0EM5w000005vNot.png" />
</Frame>

### Use Dynamic PDP with Custom Attributes

To use custom attributes in Dynamic PDP policies, the following must be true:

* The attribute must be set to "managed." Learn about
  [attribute management](https://domo-support.domo.com/s/article/000005164?language=en_US#attribute_management).
* In the configuration file, the content in the `Value` column must be the attribute key.

In this example, the custom attribute key is "store" and displays in the `Value` column.

<Frame>
  <img alt="store in value.jpg" src="https://mintcdn.com/domoinc-openapi-sync-dataflows/zKZ3HwsBqhLsvFuw/images/kb/ka0Vq00000044g9-00N5w00000Ri7BU-0EMVq000003WBhl.jpg?fit=max&auto=format&n=zKZ3HwsBqhLsvFuw&q=85&s=e9c6e9500d84c88a7e48900b1b3fbd4a" style={{width: 893, height: 120}} width="2810" height="378" data-path="images/kb/ka0Vq00000044g9-00N5w00000Ri7BU-0EMVq000003WBhl.jpg" />
</Frame>

Finally, add a new column to the configuration file called `is\_dynamic.` The value must be set to "true".

**Note:** For non-custom attribute dynamic policies or non-dynamic policies, the `is\_dynamic` column can be left empty.

### Use Multiple Filters on a Single Policy

To add multiple filters, set the ‘policy\_name’ & ‘user\_group’ to the same values.

<Warning>
  **Important:**
  You need to order this DataSet by the `target\_ds` column and then the `policy\_name` column. This ensures that all the actions happen on the same DataSet and the same policy.
</Warning>

<Frame>
  <img alt="MultipleFilters.png" src="https://mintcdn.com/domoinc-openapi-sync-dataflows/zKZ3HwsBqhLsvFuw/images/kb/ka0Vq00000044g9-00N5w00000Ri7BU-0EM5w000005vNoo.png?fit=max&auto=format&n=zKZ3HwsBqhLsvFuw&q=85&s=7dd85dd104848c1cdfcecfe4d85410a4" width="1430" height="140" data-path="images/kb/ka0Vq00000044g9-00N5w00000Ri7BU-0EM5w000005vNoo.png" />
</Frame>

### Remote Instance Configuration

Remote instance configuration allows you to be in one Domo instance and configure PDP for other instances to which you have access. To configure PDP remotely, you need a [configuration DataSet](#config_dataset), which is described previously in this article. You also need a [Domo Access Token account](#configure_domo_access_token) configured with either a [Domo Access token](#generate_access_token) or with a username and password for the remote instance.

# Configure PDP Automation for Remote Instance

1. While creating or editing a job for PDP Automation, in the
   **Configuration** section, select a configuration DataSet populated with valid values for the remote instance according to PDP Automation guidelines given in this article. See [Configuration DataSet](#config_dataset).

2. Still in the
   **Configuration** section, choose **Remote Instance** for where to run the job.

   The **Instance Settings** display.

3. In the
   **Instance:** field, enter the domain for the remote instance you want to manage PDP for.

4. From the
   **Select the account for your instance:** list, select a valid [Domo Access Token account](#configure_domo_access_token). To learn how to configure a Domo Access Token account, see the next section.

5. Fill in the details for the
   **Reporting** section.

   <Note>
     **Note:**
     The notification emails and metric logs are written to the instance the policy is running from, not to the remote instance.
   </Note>

6. Select
   **Submit** to save your changes to the job.

# Configure Domo Access Token Account

Follow these steps to configure a Domo Access Token account:

1. In the Domo navigation header, select
   **Data**.

   The **Data Center** opens.
2. In the sidebar, select
   <InlineImage src="/images/kb/ka05w00000129aT-00N5w00000Ri7BU-0EM5w000006uFA5.jpg" /> **Accounts**.
3. Select
   **Add New** > **Account**.

   The **Add Account** modal displays.

   <Frame>
     <img alt="domo access token.png" src="https://mintcdn.com/domoinc-openapi-sync-dataflows/y73kYVYT02nhoBL7/images/kb/ka05w00000129aT-00N5w00000Ri7BU-0EM5w000006uF9v.jpg?fit=max&auto=format&n=y73kYVYT02nhoBL7&q=85&s=83af8d79dff5c4f1336d08620f5a3aab" style={{width: 450, height: 487}} width="936" height="1014" data-path="images/kb/ka05w00000129aT-00N5w00000Ri7BU-0EM5w000006uF9v.jpg" />
   </Frame>
4. In the modal, complete one of the following options:
   * **Access Token —**
     Enter an access token in the **Remote Instance Access Token** field. To learn how to generate a token, see [Generate Access Token](#generate_access_token).
   * **Username and password —**
     Enter your credentials in the **Remote Instance Username** and **Remote Instance Password** fields.
5. Select
   **Connect**.

#### Generate Access Token

Follow these steps to generate an access token:

1. In the Domo navigation header, select
   **More** > **Admin**.

   The Admin Settings display.
2. In the
   **Authentication** menu of the Admin Settings, select **Access tokens**.
3. On the
   **Access tokens** page, select **+ Generate access token**.

   <Frame>
     <img alt="generate token.jpeg" src="https://mintcdn.com/domoinc-openapi-sync-dataflows/enfTkpqxhZnichpt/images/kb/ka05w00000128xR-00N5w00000Ri7BU-0EM5w000006uFA0.jpg?fit=max&auto=format&n=enfTkpqxhZnichpt&q=85&s=d66be05545cc2be432d7a34000bdfc0c" style={{width: 670, height: 66}} width="1456" height="144" data-path="images/kb/ka05w00000128xR-00N5w00000Ri7BU-0EM5w000006uFA0.jpg" />
   </Frame>
4. Enter a description in the
   **Access token description** field.
5. Search for and select a user for whom you are generating the access token.
6. Select an expiration interval in the
   **Expire after** list.
7. Select
   **Generate**.
8. Copy the code to use.
