> For the complete documentation index, see [llms.txt](https://docs.ovaledge.com/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://docs.ovaledge.com/release8.1/connectors/connector-repositories/application/microsoft-dynamics-365.md).

# Microsoft Dynamics 365

This article outlines the integration with the **Microsoft Dynamics 365** connector, enabling streamlined metadata management through features such as crawling, sample profiling, data preview, and manual lineage.

This connector connects to Microsoft Dynamics 365 using **REST APIs** and authenticates through Microsoft Entra ID (Azure AD) using OAuth 2.0 with an Azure AD application (Client ID, Client Secret, and Tenant ID). It obtains a valid OAuth access token to access Microsoft Dynamics 365 metadata and entity information, enabling metadata discovery, data preview, and sample profiling.

<img src="/files/CjbHHj9HwKThjtgxCyyI" alt="" height="343" width="624">

## Overview

### Connector Details

<table data-header-hidden><thead><tr><th width="443"></th><th></th></tr></thead><tbody><tr><td>Connector Category</td><td>Application</td></tr><tr><td>OvalEdge Release Supported</td><td>Release8.0 and later</td></tr><tr><td><p>Connectivity</p><p>[How the connection is established with Microsoft Dynamics 365]</p></td><td>REST APIs</td></tr></tbody></table>

### Connector Features

<table data-search="false"><thead><tr><th>Feature</th><th align="center">Availability</th></tr></thead><tbody><tr><td>Crawling</td><td align="center">✅</td></tr><tr><td>Delta Crawling</td><td align="center">❌</td></tr><tr><td>Profiling</td><td align="center">❌</td></tr><tr><td>Sample Profiling</td><td align="center">✅</td></tr><tr><td>Query Sheet</td><td align="center">❌</td></tr><tr><td>Data Preview</td><td align="center">✅</td></tr><tr><td>Auto Lineage</td><td align="center">❌</td></tr><tr><td>Manual Lineage</td><td align="center">✅</td></tr><tr><td>Secure Authentication via Credential Manager</td><td align="center">✅</td></tr><tr><td>Data Quality</td><td align="center">❌</td></tr><tr><td>DAM (Data Access Management)</td><td align="center">❌</td></tr><tr><td>Bridge</td><td align="center">✅</td></tr></tbody></table>

### Metadata Mapping

The following objects are crawled from Microsoft Dynamics 365 and mapped to the corresponding UI assets.

<table data-search="false"><thead><tr><th>MS Dynamics 365 Object</th><th width="180">MS Dynamics 365 Attribute</th><th>OvalEdge Attribute</th><th>OvalEdge Category</th><th>OvalEdge Type</th></tr></thead><tbody><tr><td>Schema</td><td>dynamics365</td><td>Schema</td><td>Databases</td><td>Schema</td></tr><tr><td>Schema</td><td>Schema comment</td><td>Source Description</td><td>Databases</td><td>Schema</td></tr><tr><td>Table</td><td>logicalname</td><td>Table</td><td>Tables</td><td>table</td></tr><tr><td>Table</td><td>Table Type</td><td>Type</td><td>Tables</td><td>table</td></tr><tr><td>Table</td><td>Table Comments</td><td>Source Description</td><td>Descriptions</td><td>table</td></tr><tr><td>Columns</td><td>Field keys from sampled entity row</td><td>Column</td><td>Table Columns</td><td>Columns</td></tr><tr><td>Columns</td><td>AttributeType</td><td>Column Type</td><td>Table Columns</td><td>Columns</td></tr><tr><td>Columns</td><td>Description.UserLocalizedLabel.Label</td><td>Source Description</td><td>Table Columns</td><td>Columns</td></tr><tr><td>Columns</td><td>ColumnNumber</td><td>Column Position</td><td>Table Columns</td><td>Columns</td></tr><tr><td>Columns</td><td>Length</td><td>Data Type Size</td><td>Table Columns</td><td>Columns</td></tr><tr><td>Columns</td><td>IsPrimaryId</td><td>Primary Key</td><td>Table Columns</td><td>Columns</td></tr><tr><td>Columns</td><td>RequiredLevel</td><td>Nullable</td><td>Table Columns</td><td>Columns</td></tr><tr><td>Column Relations</td><td>ReferencedEntity</td><td>Left Table</td><td>Relationships</td><td>-</td></tr><tr><td>Column Relations</td><td>ReferencedAttribute</td><td>Left Column</td><td>Relationships</td><td>-</td></tr><tr><td>Column Relations</td><td>ReferencingEntity</td><td>Right Table</td><td>Relationships</td><td>-</td></tr><tr><td>Column Relations</td><td>ReferencingAttribute</td><td>Right Column</td><td>Relationships</td><td>-</td></tr><tr><td>Views</td><td>View Name</td><td>View</td><td>Tables</td><td>view</td></tr><tr><td>Procedures</td><td>ROUTINE_NAME</td><td>Name</td><td>Procedures</td><td>-</td></tr><tr><td>Functions</td><td>ROUTINE_NAME</td><td>Name</td><td>Functions</td><td>-</td></tr><tr><td>Triggers</td><td>Trigger Name</td><td>Name</td><td>Triggers</td><td>-</td></tr><tr><td>Indexes</td><td>Index name</td><td>Index</td><td>Indexes</td><td>Index</td></tr></tbody></table>

## Set up a Connection

### Prerequisites

The following are the prerequisites to establish a connection:

**Service Account User Permissions**

{% hint style="warning" %}
It is recommended to use a dedicated service account to establish the connection to the data source, configured with the following minimum set of permissions.
{% endhint %}

{% hint style="info" %}
**👨‍💻 Who can provide these permissions?** These permissions are typically granted by the Microsoft Dynamics 365 administrator, as users may not have the required access to assign them independently.
{% endhint %}

<table data-search="false"><thead><tr><th width="158">Operations</th><th width="149">Objects</th><th width="202">API Details</th><th width="257">Access Permissions</th></tr></thead><tbody><tr><td>Connection Validation</td><td>-</td><td>POST /oauth2/v2.0/token</td><td>Valid Azure AD Application (Tenant ID, Client ID, Client Secret)</td></tr><tr><td>Crawling</td><td>Tables</td><td>GET /entities?$select=logicalname</td><td>Read</td></tr><tr><td>Crawling</td><td>Table Columns</td><td>GET /EntityDefinitions(LogicalName='{table}')?$select=EntitySetName</td><td>Read</td></tr><tr><td>Crawling</td><td>Table Columns</td><td>GET /{entitySetName}?$top=1</td><td>Read</td></tr><tr><td>Crawling</td><td>Table Columns</td><td>GET /EntityDefinitions(LogicalName='{table}')/Attributes(LogicalName='{column}')</td><td>Read</td></tr><tr><td>Crawling</td><td>Relationships</td><td>GET /RelationshipDefinitions</td><td>Read</td></tr><tr><td>Data Preview</td><td>Tables</td><td>GET /{entitySetName}?$top={limit}</td><td>Read</td></tr><tr><td>Sample Profiling</td><td>Tables / Table Columns</td><td>GET /{entitySetName}?$top={sampleSize}</td><td>Read</td></tr><tr><td>Profiling</td><td>Tables</td><td>GET /RetrieveTotalRecordCount(EntityNames=['{tableName}'])</td><td>Read / Execute Dataverse Action</td></tr></tbody></table>

{% hint style="info" %}

* A valid OAuth 2.0 access token must be obtained before performing metadata crawling, data preview, or sample profiling operations.
* The Azure AD application (service principal) requires Read access to Microsoft Dataverse metadata and entities, along with permission to execute the RetrieveTotalRecordCount Dataverse action.
  {% endhint %}

### Connection Configuration Steps

{% hint style="warning" %}
Users are required to have the Connector Creator role in order to configure a new connection.
{% endhint %}

1. Log into **OvalEdge**, go to **Administration** > **Connectors**, click **+ (New Connector)**, search for **Microsoft Dynamics 365**, and complete the required parameters.

{% hint style="info" %}
Fields marked with an asterisk (\*) are mandatory for establishing a connection.
{% endhint %}

<table data-search="false"><thead><tr><th width="220">Field Name</th><th>Description</th></tr></thead><tbody><tr><td>Connector Type</td><td>By default, "Microsoft Dynamics 365" is displayed as the selected connector type.</td></tr><tr><td>Credential Manager*</td><td><p>Select the desired credentials manager from the drop-down list. Relevant parameters will be displayed based on your selection.</p><p>Supported Credential Managers:</p><ul><li>OE Credential Manager</li><li>AWS Secrets Manager</li><li>HashiCorp Vault</li><li>Azure Key Vault</li></ul><p>For more details, click<a href="https://docs.ovaledge.com/connectors/additional-requirements/credential-manager-configuration"> here</a>. </p></td></tr><tr><td>Connector Name*</td><td><p>Enter a unique name for the Microsoft Dynamics 365 connection              </p><p>(Example: "Microsoft Dynamics 365_Prod").</p></td></tr><tr><td>Connector Environment</td><td><p>Select the environment (Example: PROD, STG) configured for the connector.</p><p>For more details, click<a href="https://docs.ovaledge.com/connectors/introduction-to-connectors/setup-and-connectivity/prerequisites#connector-environment"> here</a>. </p></td></tr><tr><td>Connector description</td><td>Enter a brief description of the connector.</td></tr><tr><td>Server*</td><td>Enter the Microsoft Dynamics 365 environment hostname (for example, orgname.xxxxxx.dynamics.com). The connector uses this hostname to construct the Microsoft Dataverse API endpoint and OAuth scope.</td></tr><tr><td>Client Id*</td><td>Enter the Azure AD Application (Client) ID of the registered application used to authenticate the connector with Microsoft Dynamics 365.</td></tr><tr><td>Client Secret*</td><td>Enter the client secret associated with the Azure AD application. This value is used together with the Client ID and Tenant ID to obtain the OAuth access token.</td></tr><tr><td>Tenant Id*</td><td>Enter the Azure AD Directory (Tenant) ID that identifies the Microsoft Entra tenant containing the registered application. The connector uses this value to authenticate through the Microsoft OAuth token endpoint.</td></tr><tr><td>Connection String</td><td><p>Configure the connection string for Microsoft Dynamics 365:</p><ul><li>Automatic Mode: The system generates a connection string based on the provided credentials.</li><li>Manual Mode: Enter a valid connection string manually.</li></ul></td></tr><tr><td>Proxy Enabled*</td><td>Select Yes to route API calls through a proxy server. Select No to bypass the proxy and connect directly.</td></tr><tr><td>Plugin Server</td><td>Enter the server’s name when running as a plugin server.</td></tr><tr><td>Plugin Port</td><td>Enter the port number on which the plugin is running.</td></tr></tbody></table>

<table data-header-hidden data-search="false"><thead><tr><th width="220"></th><th></th></tr></thead><tbody><tr><td><strong>Default Governance Roles</strong></td><td></td></tr><tr><td>Default Governance Roles*</td><td>Select the appropriate users or teams for each governance role from the drop-down list. All users and teams configured in OvalEdge Security are displayed for selection.</td></tr><tr><td><strong>Admin Roles</strong></td><td></td></tr><tr><td>Admin Roles*</td><td>Select one or more users from the dropdown list for Integration Admin and Security &#x26; Governance Admin. All users configured in OvalEdge Security are available for selection.</td></tr><tr><td><strong>No of Archive Objects</strong></td><td></td></tr><tr><td>No Of Archive Objects*</td><td><p>This shows the number of recent metadata changes to a dataset at the source. By default, it is off. To enable it, toggle the Archive button and specify the number of objects to archive.</p><p>Example: Setting it to 4 retrieves the last four changes, displayed in the 'Version' column of the 'Metadata Changes' module.</p></td></tr><tr><td><strong>Bridge</strong></td><td></td></tr><tr><td>Select Bridge*</td><td><p>If applicable, select the bridge from the drop-down list.</p><p>The drop-down list displays all active bridges configured in OvalEdge. These bridges enable communication between data sources and OvalEdge without altering firewall rules.</p></td></tr></tbody></table>

2. After entering all connection details, the following actions can be performed:
   1. Click **Validate** to verify the connection.
   2. Click **Save** to store the connection for future use.
   3. Click **Save & Configure** to apply additional settings before saving.
3. The saved connection will appear on the **Connectors** home page.

## Manage Connector Operations

### Crawl/Profile

{% hint style="warning" %}
To perform crawl and profile operations, users must be assigned the Integration Admin role.
{% endhint %}

The **Crawl/Profile** button allows users to select one or more schemas for crawling and profiling.&#x20;

1. Navigate to the **Connectors** page and click **Crawl/Profile**.
2. Select the schemas to **crawl**.
3. The **Crawl** option is selected by default. Click the **Crawl** & **Profile** radio button to perform both crawling and profiling operations.
4. Click **Run** to collect metadata from the connected source and load it into the **Data Catalog.**
5. After a successful crawl, the information appears in the **Data Catalog** > **Databases** tab.

The **Schedule** checkbox allows automated crawling and profiling at defined intervals, from a minute to a year.

1. Click the **Schedule** checkbox to enable the **Select** Period drop-down.
2. Select a time period for the operation from the drop-down menu.
3. Click **Schedule** to initiate metadata collection from the connected source.
4. The system will automatically execute the selected operation (**Crawl** or **Crawl & Profile**) at the scheduled time.

#### Other Operations

The **Connectors** page in OvalEdge provides a centralized view of all configured connectors, including their health status.

**Managing connectors includes:**

* **Connectors Health**: Displays the current status of each connector using a **green** icon for active connections and a **red** icon for inactive connections, helping to monitor the connectivity with data sources.
* **Viewing**: Click the **Eye** icon next to the connector name to view connector details, including schema, tables, and columns.

**Nine Dots Menu Options:**

To view, edit, validate, configure, or delete connectors, click on the **Nine Dots** menu.

* **Edit Connector**: Update and revalidate the data source.
* **Validate Connector:** Check the connection's integrity.
* **Settings**: Modify connector settings.
  * **Crawler**: Configure data extraction.
  * **Profiler**: Customize data profiling rules and methods.
  * **Access Instructions:** Add notes on how data can be accessed.
  * **Business Glossary Settings**: Manage term associations at the connector level.
  * **Lineage**: Select the parsing method and configure the AI confidence score threshold for automatic lineage merging.
  * **Others**: Configure notification recipients for metadata changes.
* **Delete Connector**: Remove a connector with confirmation.

For more details on connector settings, click [here](https://docs.ovaledge.com/connectors/introduction-to-connectors/setup-and-connectivity/connector-settings).

## Connectivity Troubleshooting

If incorrect parameters are entered, error messages may appear. Ensure all inputs are accurate to resolve these issues. If issues persist, contact the assigned support team.

<table><thead><tr><th width="89">Sl. No</th><th width="194">Error Message</th><th>Error Description &#x26; Resolution</th></tr></thead><tbody><tr><td>1</td><td>Failed to authenticate with Dynamics 365 / Failed to login</td><td><p>The connector could not authenticate with Microsoft Dynamics 365 using the configured credentials.</p><p><strong>Resolution</strong>:</p><ul><li>Verify the Server, Client Id, Client Secret, and Tenant Id values.</li><li>Ensure the Azure AD application exists in the specified tenant.</li><li>Verify that the configured client secret is the Secret Value and has not expired.</li></ul></td></tr><tr><td>2</td><td>AADSTS7000215: Invalid client secret provided</td><td><p>The configured client secret is invalid, expired, or the Secret ID was entered instead of the Secret Value.</p><p><strong>Resolution</strong>:</p><ul><li>Generate a new client secret in the Azure AD App Registration.</li><li>Copy the Secret Value, not the Secret ID.</li><li>Update the connector configuration and validate the connection again.</li></ul></td></tr><tr><td>3</td><td>AADSTS700016: Application with identifier was not found in the directory</td><td><p>The specified Client Id does not exist in the configured Azure AD tenant.</p><p><strong>Resolution</strong>:</p><ul><li>Verify that the Client Id and Tenant Id belong to the same Azure AD application.</li><li>Correct any typographical errors in the configured values.</li><li>Revalidate the connection after updating the configuration.</li></ul></td></tr><tr><td>4</td><td>AADSTS70011 / invalid_scope</td><td><p>The OAuth scope could not be generated because the Server value is invalid.</p><p><strong>Resolution</strong>:</p><ul><li>Enter only the Dataverse hostname (for example, orgname.xxxx.dynamics.com).</li><li>Do not include https://, URL paths, or trailing slashes.</li><li>Validate the connection after updating the Server value.</li></ul></td></tr><tr><td>5</td><td>Failed to get access token for Dynamics 365</td><td><p>The connector could not obtain an OAuth access token from Microsoft Entra ID.</p><p><strong>Resolution</strong>:</p><ul><li>Verify the Tenant Id, Client Id, and Client Secret.</li><li>Confirm that the token endpoint URL references the correct tenant.</li><li>Review the connector logs for the Azure AD authentication error.</li></ul></td></tr><tr><td>6</td><td>Test Connection succeeds, crawl fails with 401 Unauthorized</td><td><p>Authentication succeeded, but the Dataverse API rejected the access token during crawling.</p><p><strong>Resolution:</strong></p><ul><li>Add the Azure AD application as an Application User in the Dataverse environment.</li><li>Assign an appropriate Dataverse security role.</li><li>Retry the crawl after updating permissions.</li></ul></td></tr><tr><td>7</td><td>HTTP 403 Forbidden during crawl or profiling</td><td><p>The authenticated application does not have sufficient privileges to access Dataverse metadata or entities.</p><p><strong>Resolution</strong>:</p><ul><li>Assign a Dataverse security role with the required Read permissions.</li><li>Verify that metadata access is permitted.</li><li>Retry the operation after updating permissions.</li></ul></td></tr><tr><td>8</td><td>Exception occurred while getting the remote tables for the schema: dynamics365</td><td><p>The connector could not retrieve entity metadata from Microsoft Dataverse.</p><p><strong>Resolution</strong>:</p><ul><li>Verify the configured Server value and API endpoint.</li><li>Check proxy or network connectivity settings.</li><li>Ensure the application has permission to read Dataverse metadata.</li></ul></td></tr><tr><td>9</td><td>EntitySet not found for the entity {name}</td><td><p>The connector could not resolve the EntitySet name for the specified entity.</p><p><strong>Resolution</strong>:</p><ul><li>Verify that the entity exists in the Dataverse environment.</li><li>Ensure the application has access to the entity metadata.</li><li>Confirm that the entity has not been renamed or removed.</li></ul></td></tr><tr><td>10</td><td>Exception occurred while getting the remote columns for the table: {table}</td><td><p>The connector could not retrieve column metadata or sample records for the specified table.</p><p><strong>Resolution</strong>:</p><ul><li>Verify that the table contains at least one readable record.</li><li>Ensure the application has permission to read entity attributes.</li><li>Validate that the EntitySet name is resolved successfully.</li></ul></td></tr><tr><td>11</td><td>Exception occurred while getting the first N rows of the table: {table}</td><td><p>Sample profiling or Data Preview could not retrieve records from the entity.</p><p><strong>Resolution</strong>:</p><ul><li>Verify that the application has read access to the entity.</li><li>Confirm that the table contains accessible records.</li><li>Check proxy and network connectivity if the issue persists.</li></ul></td></tr><tr><td>12</td><td>Exception occurred while getting the number of rows of the table: {table}</td><td><p>The connector could not retrieve the table row count using the Dataverse action.</p><p><strong>Resolution</strong>:</p><ul><li>Ensure the application user can execute the RetrieveTotalRecordCount action.</li><li>Verify that the required Dataverse permissions are assigned.</li><li>Retry the profiling operation after updating permissions.</li></ul></td></tr><tr><td>13</td><td>Exception occurred while getting the remote column relations</td><td><p>The connector could not retrieve relationship metadata from Dataverse.</p><p><strong>Resolution</strong>:</p><ul><li>Verify that the application has permission to read relationship metadata.</li><li>Confirm that metadata access is enabled for the application.</li><li>Retry the crawl after updating permissions.</li></ul></td></tr><tr><td>14</td><td>Connection timeout or proxy errors</td><td><p>The connector could not communicate with Microsoft Entra ID or the Dataverse endpoint due to network or proxy issues.</p><p><strong>Resolution</strong>:</p><ul><li>Verify the configured proxy settings if proxy is enabled.</li><li>Ensure outbound HTTPS access to login.microsoftonline.com and the Dataverse environment.</li><li>Retry the connection after resolving network connectivity issues.</li></ul></td></tr><tr><td>15</td><td>Unauthorized token in getRemoteColumns / getEntitySetByEntityName / getIndividualColumns</td><td><p>The access token became invalid or unauthorized while retrieving metadata.</p><p><strong>Resolution</strong>:</p><ul><li>Verify that the configured Client Secret is valid and has not expired.</li><li>Confirm that the Dataverse Application User exists and is enabled.</li><li>Revalidate the connection and rerun the operation.</li></ul></td></tr></tbody></table>

***

&#x20;Copyright © 2026, OvalEdge LLC, Peachtree Corners GA USA


---

# Agent Instructions
This documentation is published with GitBook. GitBook is the documentation platform designed so that both humans and AI agents can read, navigate, and reason over technical content effectively. Learn more at gitbook.com.

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

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

```
GET https://docs.ovaledge.com/release8.1/connectors/connector-repositories/application/microsoft-dynamics-365.md?ask=<question>&goal=<endgoal>
```

`ask` is the immediate question: it should be specific, self-contained, and written in natural language.
`goal` is optional and describes the broader end goal you are ultimately trying to accomplish on behalf of the user. GitBook uses it to tailor the answer towards what is most useful for that goal.

The response will contain a direct answer to the question and relevant excerpts and sources from the documentation.

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