> ## Documentation Index
> Fetch the complete documentation index at: https://docs.sync.cdata.com/llms.txt
> Use this file to discover all available pages before exploring further.

# Microsoft Dynamics 365

export const CommonDatasourceMoreInformation = ({datasource = "the data source", advancedurl = "", siteName = "CData Sync", driverVersion = ""}) => {
  return <>
      <p>
        For more information about interactions between {siteName} and {datasource}, see{' '}
        <a href={`https://cdn.cdata.com/help/${advancedurl}${driverVersion}/synch/default.htm`}>
          {datasource} Connector for {siteName}
        </a>.
      </p>
    </>;
};

export const CommonAuthSchemeAzureserviceprincipalcert = () => {
  return <>
      <p>To connect with an Azure service principal and client certificate, set the following properties:</p>
      <ul>
        <li><strong>Auth Scheme:</strong> Select <strong>AzureServicePrincipalCert</strong>.</li>
        <li><strong>Azure Tenant:</strong> Enter the Microsoft Online tenant to which you want to connect.</li>
        <li><strong>OAuth Client Id:</strong> Enter the client Id that you were assigned when you registered your application with an OAuth authorization server.</li>
        <li><strong>OAuth JWT Cert:</strong> Enter your Java web tokens (JWT) certificate store.</li>
        <li><strong>OAuth JWT Cert Type:</strong> Enter the type of key store that contains your JWT Certificate. The default type is <strong>PEMKEY_BLOB</strong>.</li>
        <li>(Optional) <strong>OAuth JWT Cert Password:</strong> Enter the password for your OAuth JWT certificate.</li>
        <li>(Optional) <strong>OAuth JWT Cert Subject:</strong> Enter the subject of your OAuth JWT certificate.</li>
      </ul>
      <p>To obtain the OAuth certificate for your application:</p>
      <ol>
        <li>Log in to the <a href="https://portal.azure.com" target="_blank" rel="noopener noreferrer">Azure portal</a>.</li>
        <li>In the left navigation pane, select <strong>All services</strong>. Then, search for and select <strong>App registrations</strong>.</li>
        <li>Click <strong>New registrations</strong>.</li>
        <li>Enter an application name and select <strong>Any Azure AD Directory - Multi Tenant</strong>.</li>
        <li>After you create the application, copy the application (client) Id value that is displayed in the <strong>Overview</strong> section. Use this value as the OAuth client Id.</li>
        <li>Navigate to the <strong>Certificates & Secrets</strong> section and select <strong>Upload certificate</strong>. Then, select the certificate to upload from your local machine.</li>
        <li>Specify the duration and save the client secret. After you save it, the key value is displayed.</li>
        <li>Copy this value because it is displayed only once. You will use this value as the OAuth client secret.</li>
        <li>On the <strong>Authentication</strong> tab, make sure to select <strong>Access tokens (used for implicit flows)</strong>.</li>
      </ol>
    </>;
};

export const CommonAuthSchemeAzureserviceprincipal = () => {
  return <>
      <p>To connect with an Azure service principal and client secret, set the following properties:</p>
      <ul>
        <li><strong>Auth Scheme:</strong> Select <strong>AzureServicePrincipal</strong>.</li>
        <li><strong>Azure Tenant:</strong> Enter the Microsoft Online tenant to which you want to connect.</li>
        <li><strong>OAuth Client Id:</strong> Enter the client Id that you were assigned when you registered your application with an OAuth authorization server.</li>
        <li><strong>OAuth Client Secret:</strong> Enter the client secret that you were assigned when you registered your application with an OAuth authorization server.</li>
      </ul>
      <p>To obtain the OAuth client Id and client secret for your application:</p>
      <ol>
        <li>Log in to the <a href="https://portal.azure.com" target="_blank" rel="noopener noreferrer">Azure portal</a>.</li>
        <li>In the left navigation pane, select <strong>All services</strong>. Then, search for and select <strong>App registrations</strong>.</li>
        <li>Click <strong>New registrations</strong>.</li>
        <li>Enter an application name and select <strong>Any Azure AD Directory - Multi Tenant</strong>.</li>
        <li>After you create the application, copy the application (client) Id value that is displayed in the <strong>Overview</strong> section. Use this value as the OAuth client Id.</li>
        <li>Navigate to the <strong>Certificates & Secrets</strong> section and select <strong>New Client Secret</strong> for the application.</li>
        <li>Specify the duration and save the client secret. After you save it, the key value is displayed.</li>
        <li>Copy this value because it is displayed only once. You will use this value as the OAuth client secret.</li>
        <li>On the <strong>Authentication</strong> tab, make sure to select <strong>Access tokens (used for implicit flows)</strong>.</li>
      </ol>
    </>;
};

export const CommonAuthSchemeAzuremsi = ({siteName = "CData Sync"}) => {
  return <>
      <p>
        To leverage Azure Managed Service Identity (MSI) when {siteName} is running on an Azure
        virtual machine, select <strong>Azure MSI</strong> for <strong>Auth Scheme</strong>. No
        additional properties are required.
      </p>
    </>;
};

export const CommonAuthSchemeAzuread = ({siteName = "CData Sync"}) => {
  return <>
      <p>
        To connect with an Azure Active Directory (AD) user account, select <strong>AzureAD</strong>{' '}
        for <strong>Auth Scheme</strong>. {siteName} provides an embedded OAuth application with
        which to connect, so no additional properties are required.
      </p>
    </>;
};

export const CommonDatasourceAddConnector = ({datasource = "the data source", title = "the connector", destination = false, siteNameShort = "Sync"}) => {
  return <>
      <p>
        To enable {siteNameShort} to use data from {datasource}, you first must add the
        connector, as follows:
      </p>
      <ol>
        <li>Open the <strong>Connections</strong> page of the {siteNameShort} dashboard.</li>
        <li>Click <strong>Add Connection</strong> to open the <strong>Select Connectors</strong> page.</li>
        <li>
          Click the <strong>{destination ? "Destinations" : "Sources"}</strong> tab and locate
          the <strong>{title}</strong> row.
        </li>
        <li>
          Click the <strong>Configure Connection</strong> icon at the end of that row to open
          the <strong>New Connection</strong> page. This action opens the{' '}
          <strong>Add Connection</strong> dialog box.
          <br />
          <strong>Note:</strong> If the <strong>Configure Connection</strong> icon is not
          available, click the <strong>Download Connector</strong> icon to install
          the {title} connector.
        </li>
        <li>Enter a name for your connection in the <strong>Add Connection</strong> dialog box.</li>
        <li>Click <strong>Add</strong> to open the <strong>Settings</strong> tab for your connector.</li>
      </ol>
      <p>
        For more information about installing new connectors, see{' '}
        <a href="../connections">Connections</a>.
      </p>
    </>;
};

export const CommonDatasourceIntroDestination = ({datasource = "the data source", siteName = "CData Sync"}) => {
  return <p>
      You can use the {datasource} connector from the {siteName} application to move data
      from any supported source to the {datasource} destination. To do so, you need to add
      the connector, authenticate to the connector, and complete your connection.
    </p>;
};

export const driverVersion = "M";

export const siteNameShort = "Sync";

export const siteName = "CData Sync";

<CommonDatasourceIntroDestination datasource="Microsoft Dynamics 365" siteName={siteName} />

## Add the Microsoft Dynamics 365 Connector

<CommonDatasourceAddConnector datasource="Microsoft Dynamics 365" title="Microsoft Dynamics 365" destination={true} siteNameShort={siteNameShort} />

## Authenticate to Microsoft Dynamics 365

After you add the connector, you need to set the required properties.

**Organizational URL:** Enter the URL to your Microsoft Dynamics 365 organization (for example, [https://abc123.cloudax.dynamics.com](https://abc123.cloudax.dynamics.com)).

{siteName} supports authenticating to Microsoft Dynamics 365 in several ways. Select your authentication method below to proceed to the relevant section that contains the authentication details.

* [**AzureAD**](#azure-active-directory) (default)
* [**AzureMSI**](#azure-managed-service-identity)
* [**AzureServicePrincipal**](#azure-service-principal)
* [**AzureServicePrincipalCert**](#azure-service-principal-certificate)

### Azure Active Directory

<CommonAuthSchemeAzuread siteName={siteName} />

### Azure Managed Service Identity

<CommonAuthSchemeAzuremsi siteName={siteName} />

### Azure Service Principal

<CommonAuthSchemeAzureserviceprincipal siteName={siteName} />

### Azure Service Principal Certificate

<CommonAuthSchemeAzureserviceprincipalcert siteName={siteName} />

## Complete Your Connection

To complete your connection:

1. For **Edition**, select the edition for your version of Microsoft Dynamics 365.

   * **CustomerService**
   * **FieldService**
   * **Marketing**
   * **ProjectOperations**
   * **Sales**
   * **Commerce**

   **Note:** The FinOpsOnline, FinOpsOnPremise, and HumanResources editions do not support the Microsoft Dynamics 365 destination.

2. Define advanced connection settings on the **Advanced** tab. (In most cases, though, you should not need these settings.)

3. If you authenticate with AzureAd, click **Connect to Microsoft Dynamics 365** to connect to your Microsoft Dynamics 365 account.

4. Click **Create & Test** to create your connection.

## Create Alternate Keys

Using alternate keys is a key component in a {siteName} reverse ETL workflow, enabling simplification of data integration. Because Microsoft Dynamics 365 stores data in Microsoft Dataverse tables, alternate keys play a crucial role in facilitating data movement between {siteNameShort} and Microsoft Dynamics 365. These keys provide a reliable way to match records when Dataverse globally unique identifiers (GUIDs) are unavailable. Similar to how Salesforce uses an external Id for record identification, alternate keys ensure seamless synchronization and data updates without relying on primary identifiers (Ids).

When you create an alternate key for a Dataverse table, that key is displayed as a column on the **Column Mapping** tab for your reverse ETL job in {siteNameShort}.

To create an alternate key:

1. Sign in to Microsoft Power Apps and navigate to the Dataverse tables.
2. Select the table that you (for example, the **Account** table).This selection opens the table view.
3. In the table view, select **Keys** to open the alternate-keys view.
4. On the **Keys** page, follow these steps:
   1. Click **New Key**, which opens a pop-up dialog box on the right.

   2. In the **Key** dialog box, specify the following information:
      * **Display Name:** Enter a name for this key. This name will be displayed in label is the label that will be displayed in the {siteNameShort} application's ID mapping section.
      * **Columns:** Select a column that you want to use as an alternate key. Note that alternate keys must be unique and they must meet the requirements that are described in the Microsoft Dynamics 365 documentation. If you do not have a column that meets the requirements, you can add a column manually to use.

        **Note:** If you add a new column to use as an external identifier (Id), make sure to backfill it with unique values before you use it to prevent accidental duplicates.

   3. Click **Save** to create your alternate key and to display it on the **Column Mapping** tab for your {siteNameShort} job.
5. Select the name of your alternate key on the **Column Mapping** tab and map it to the appropriate column for your source in {siteNameShort}.

## More Information

<CommonDatasourceMoreInformation datasource="Microsoft Dynamics 365" advancedurl="LJ" siteName={siteName} driverVersion={driverVersion} />
