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

# Microsoft Dynamics Finance and Operations as a data source

> Bring data from Microsoft Dynamics Finance and Operations to Nekt.

Microsoft Dynamics 365 Finance and Operations — Finance, Supply Chain Management, Commerce, and the other finance and operations apps — is Microsoft's ERP. This connector reads its **data entities** (customers, vendors, products, sales and purchase orders, financial data, and any other public entity, including custom ones) through the environment's OData endpoint, `<environment URL>/data`.

## Before you start

The connector signs in as an application (Microsoft Entra ID client credentials), and Finance and Operations must know that application. Your administrators need to complete these steps once:

<Steps>
  <Step title="Register an application in Microsoft Entra ID">
    In the Azure portal, open **Microsoft Entra ID → App registrations → New registration** and create an application. Under **Certificates & secrets**, create a **client secret** and copy its **value** (not its ID). Note the **Directory (tenant) ID** and the **Application (client) ID** from the app's overview page. Client secrets expire; note the expiry date and update the connection before it.
  </Step>

  <Step title="Register the application in Finance and Operations">
    In Finance and Operations, go to **System administration → Setup → Microsoft Entra applications** and select **New**. Enter the **Client ID** from step 1, a name, and a **User ID** — an enabled user whose security roles can read the data entities you want to sync, in every company you want to sync. A dedicated service account with read-only roles is recommended.
  </Step>

  <Step title="Copy your environment URL">
    Copy the address of your environment from the browser, for example `https://contoso.operations.dynamics.com`.
  </Step>
</Steps>

<Warning>Without step 2, Microsoft Entra ID issues a token but Finance and Operations refuses every request. The connector reads only what the linked user is allowed to see.</Warning>

## Configuring Microsoft Dynamics Finance and Operations as a source

In the [Sources](https://app.nekt.ai/sources) tab, click the "Add source" button on the top right, then select Microsoft Dynamics Finance and Operations from the list of connectors.

Click **Next** and you'll be prompted to add your access.

### 1. Add account access

* **Environment URL**: The address of your environment, for example `https://contoso.operations.dynamics.com`. Pasting the full address from the browser also works.
* **Tenant ID**: The Directory (tenant) ID of your Microsoft Entra ID tenant.
* **Client ID**: The Application (client) ID of the app registration.
* **Client secret**: The client secret value of the app registration.
* **Entities**: The data entities to sync, by their collection name (the name in the OData URL), for example `CustomersV3` or `SalesOrderHeadersV2`. Each becomes a stream. For each entity you can optionally set an **Incremental field**, a **Filter** (an OData `$filter` expression) and the **Fields** to read. Leave it empty to sync the standard set listed below.
* **Companies**: The company (legal entity) codes to sync, for example `usmf`. Leave empty to sync every company the linked user can access. The codes are checked when the sync starts; an unknown code stops the sync with the list of available companies.

Advanced settings:

* **Initial sync date**: For incremental entities, only records changed after this date are read on the first run.
* **All companies**: On by default. When off, Finance and Operations returns only the default company of the linked user (it must stay on when **Companies** is set).
* **Default incremental fields**: Field names used as the incremental field of any entity that has them. Defaults to `SysModifiedDateTime`.
* **Page size**: Records per request when an entity is read by key ranges (default 5000).
* **Pagination**: **Automatic** (default) reads entities with a single numeric key by key ranges — fast and correct while data changes — and the others by following the pages Finance and Operations returns.
* **Incremental lookback (minutes)**: Each incremental sync re-reads records changed this many minutes before the previous position (default 60), so postings that are saved late are not missed.
* **Request timeout**: How long to wait for each page before retrying (default 300 seconds).

Once you're done, click **Next**.

### 2. Select streams

Choose which data streams you want to sync. Each stream corresponds to one entity. For faster extractions, select only the streams relevant to your analysis.

> Tip: The stream can be found more easily by typing its name.

Select the streams and click **Next**.

### 3. Configure data streams

Customize how you want your data to appear in your catalog. Select the desired Layer where the data will be placed, a Folder to organize it, a name for each table, and the type of sync.

* **Layer**: choose between the existing Layers on your catalog. This is where your extracted tables appear once the extraction runs successfully.
* **Folder**: a Folder can be created inside the selected Layer to group all tables created from this source.
* **Table name**: a name is suggested, but you can customize it. You can also add a **prefix** to all tables at once.
* **Sync Type**: choose between INCREMENTAL and FULL\_TABLE.
  * Incremental: available for entities with an incremental field; each extraction fetches only records changed since the last run.
  * Full table: each extraction fetches the whole entity.

Once you are done configuring, click **Next**.

### 4. Configure data source

Describe your data source for easy identification within your organization, not exceeding 140 characters.

To define your [Trigger](https://docs.nekt.com/runs/scheduling-and-triggers), consider how often you want data to be extracted from this source.

Optionally, you can define additional settings such as Delta Log Retention and an additional [Full Sync](https://docs.nekt.com/get-started/core-concepts/types-of-sync#additional-full-sync) to complement the incremental extractions.

Once you are ready, click **Next** to finalize the setup.

### 5. Check your new source

You can view your new source on the [Sources](https://app.nekt.ai/sources) page. If needed, manually trigger the source extraction by clicking the arrow button. Once executed, your data appears in your Catalog.

<Warning>For you to be able to see it on your [Catalog](https://app.nekt.ai/catalog), you need at least one successful source run.</Warning>

# Streams and Fields

Streams are built from your environment's metadata: one stream per entity, named in snake\_case (`CustomersV3` becomes `customers_v3`). Columns keep the entity's field names, and the entity key — which includes `dataAreaId` (the company) for company-specific entities — becomes the table's primary key. Custom entities and custom fields are included as long as the entity is public (exposed through OData).

When **Entities** is empty, these standard entities are offered (an entity that does not exist in your version is skipped, and the run log lists which ones):

<AccordionGroup>
  <Accordion title="Legal entities and main accounts">
    `LegalEntities` (companies) and `MainAccounts` (chart of accounts).
  </Accordion>

  <Accordion title="General ledger">
    General journal entries and account entries (`GeneralJournalEntryBiEntities`, `GeneralJournalAccountEntryBiEntities`). Synced incrementally on `SysModifiedDateTime`.
  </Accordion>

  <Accordion title="Customer and vendor transactions">
    `CustTransBiEntities` and `VendTransBiEntities`. Synced incrementally on `SysModifiedDateTime`.
  </Accordion>

  <Accordion title="Customers, vendors and products">
    `CustomersV3`, `VendorsV2` and `ReleasedProductsV2`, per company.
  </Accordion>

  <Accordion title="Sales">
    `SalesOrderHeadersV2`, `SalesOrderLines` and posted sales invoice headers (`SalesInvoiceHeadersV4`, or `SalesInvoiceHeadersV2` on versions before 10.0.40).
  </Accordion>

  <Accordion title="Purchasing">
    `PurchaseOrderHeadersV2` and `PurchaseOrderLinesV2`. By design these entities do not include purchase return orders.
  </Accordion>
</AccordionGroup>

In step 2 you choose which of these streams to sync.

You can sync any other public entity by adding its collection name to **Entities**. To find names, open **System administration → Workspaces → Data management → Data entities** in Finance and Operations (the **Public collection name** column), or open `<environment URL>/data` in the browser while signed in.

## How columns are represented

* **Enumerations** (such as `NoYes` or `SalesStatus`) are stored as their name, for example `Yes` or `Invoiced`.
* **Dates** are stored as UTC timestamps. Finance and Operations represents an empty date as `1900-01-01`; those values are stored as empty (null).
* **Amounts** are numbers in the transaction currency of the record.

## Incremental sync

Most entities do not expose a date that changes when a record is updated, so they are read in full on every run. Entities that do — typically the `*BiEntities`, with `SysModifiedDateTime` — are synced incrementally by default, re-reading the last 60 minutes on each run (**Incremental lookback**). `SysModifiedDateTime` tracks changes to the entity's main table only; changes that affect only related tables, and deleted records, are not detected. Use FULL\_TABLE (or an additional Full Sync) where that matters.

If you change an entity's **Filter**, **Incremental field** or the **Companies**, its next sync starts again from the **Initial sync date**, so the history of the new scope is loaded too.

## Limits

Finance and Operations protects its service with request limits. When a limit is reached, the connector waits the time Finance and Operations asks for and continues automatically; no data is lost, but the run takes longer. You can give this integration a lower throttling priority in Finance and Operations (**System administration → Setup → Throttling priority mapping**) so it yields to interactive users.

Large entities (for example general ledger entries) can take a long time on the first sync. Microsoft recommends its bulk export options (such as Azure Synapse Link) for tables of many millions of rows; with this connector, prefer an incremental field, **Filters**, or **Fields** to limit what is read.

<Note>The connector supports Finance and Operations in the Microsoft public cloud. Sovereign clouds (for example US Government) and on-premises deployments (AD FS) are not supported.</Note>
