# Salesforce Integration Discovered Resources

## Overview

The Salesforce integration discovers the following resources:

* Salesforce Organization
* User (when **Observe users & groups** is enabled)
* User Group (when **Observe users & groups** is enabled)
* Salesforce Folder
* Salesforce Object
* Salesforce Field
* Salesforce Report
* Salesforce Dashboard
* Salesforce Flow (when **Include flows** is enabled)

## Salesforce Organization

A single resource of type `salesforce_org` is observed for each configured Salesforce integration, representing the top-level Salesforce organization.

### Properties

| Property         | Description                                                                                                                |
| ---------------- | -------------------------------------------------------------------------------------------------------------------------- |
| `name`           | The name of the Salesforce organization                                                                                    |
| `type`           | Always `salesforce_org`                                                                                                    |
| `subtype`        | Always `salesforce_org`                                                                                                    |
| `external_links` | Link to open the Salesforce organization                                                                                   |
| `used`           | After user observation runs, lists **`user`** URIs observed for this org (same crawl), using the graph **`used`** property |

## User

Users are discovered when **Observe users & groups** is enabled. Euno observes active Salesforce users (with an email on the record) and links them from reports, dashboards, and flows via **`native_owners`** when Salesforce exposes **CreatedBy** and that user was observed.

### Properties

| Property        | Description                                   |
| --------------- | --------------------------------------------- |
| `name`          | The user's email address                      |
| `type`          | Always `user`                                 |
| `email_address` | The user's email address                      |
| `label`         | The user's display name                       |
| `native_id`     | The Salesforce user ID                        |
| `created_at`    | The timestamp when the user was created       |
| `updated_at`    | The timestamp when the user was last modified |

## User Group

User groups are discovered when **Observe users & groups** is enabled. Groups include public groups, role-based groups, and organization groups.

### Properties

| Property      | Description                                                                                       |
| ------------- | ------------------------------------------------------------------------------------------------- |
| `name`        | The group name                                                                                    |
| `type`        | Always `user_group`                                                                               |
| `subtype`     | Always `salesforce`                                                                               |
| `native_id`   | The Salesforce group ID                                                                           |
| `description` | Short description derived from the Salesforce group type (for example `Regular group`)            |
| `created_at`  | The timestamp when the group was created                                                          |
| `updated_at`  | The timestamp when the group was last modified                                                    |
| `members`     | Member **`user`** URIs (via **`has member`** / `members` toward users observed in the same crawl) |

## Salesforce Folder

Folders are organizational containers for reports and dashboards in Salesforce. The integration discovers shared folders (not personal folders).

### Properties

| Property           | Description                                                         |
| ------------------ | ------------------------------------------------------------------- |
| `name`             | The folder name                                                     |
| `type`             | Always `salesforce_folder`                                          |
| `subtype`          | Always `salesforce_folder`                                          |
| `native_id`        | The unique folder ID in Salesforce                                  |
| `description`      | The folder type (for example "Report folder" or "Dashboard folder") |
| `container_type`   | Always `pure_container` — folders only contain other resources      |
| `parent_container` | Parent **`salesforce_org`** URI                                     |

## Salesforce Object

Objects represent the data structures in Salesforce, including both standard objects (Account, Contact, Opportunity, etc.) and custom objects.

### Properties

| Property           | Description                                                                              |
| ------------------ | ---------------------------------------------------------------------------------------- |
| `name`             | The display label of the object (for example "Account", "My Custom Object")              |
| `type`             | Always `salesforce_object`                                                               |
| `subtype`          | Always `salesforce_object`                                                               |
| `native_id`        | The API name of the object (for example `Account`, `My_Custom_Object__c`)                |
| `description`      | The plural label of the object                                                           |
| `is_calculated`    | `true` if this is a custom object (API name ends in `__c`), `false` for standard objects |
| `external_links`   | Link to open the object in Salesforce Setup                                              |
| `parent_container` | Parent **`salesforce_org`** URI                                                          |

Global processing may add Flow- or report-derived **`table_dependencies`** / **`upstream_fields`** when lineage is resolved against observed objects and fields.

## Salesforce Field

Fields represent the individual data elements within Salesforce objects.

### Properties

| Property           | Description                                                                                   |
| ------------------ | --------------------------------------------------------------------------------------------- |
| `name`             | The display label of the field                                                                |
| `type`             | Always `salesforce_field`                                                                     |
| `subtype`          | Always `salesforce_field`                                                                     |
| `native_id`        | The API name of the field (for example `Name`, `Custom_Field__c`)                             |
| `native_data_type` | The Salesforce field type (for example `string`, `picklist`, `reference`, `currency`, `date`) |
| `is_calculated`    | `true` if this is a custom field, `false` for standard fields                                 |
| `raw_code`         | For formula fields, contains the formula expression                                           |
| `parent_container` | Parent **`salesforce_object`** URI                                                            |

### Field Types

The `native_data_type` property reflects the Salesforce field type, which can include:

* `string` — Text fields
* `picklist` — Single-select picklist
* `multipicklist` — Multi-select picklist
* `reference` — Lookup/Master-Detail relationship
* `boolean` — Checkbox
* `currency` — Currency
* `date` — Date
* `datetime` — Date/Time
* `double` — Number (decimal)
* `int` — Number (integer)
* `percent` — Percent
* `phone` — Phone
* `email` — Email
* `url` — URL
* `textarea` — Long text area
* `id` — Salesforce ID

## Salesforce Report

Reports are analytical views of Salesforce data that can be configured to display, filter, and summarize records.

### Properties

| Property           | Description                                                                                                         |
| ------------------ | ------------------------------------------------------------------------------------------------------------------- |
| `name`             | The report name                                                                                                     |
| `type`             | Always `salesforce_report`                                                                                          |
| `subtype`          | Always `salesforce_report`                                                                                          |
| `description`      | The report description, if provided                                                                                 |
| `created_at`       | The timestamp when the report was created                                                                           |
| `updated_at`       | The timestamp when the report was last modified                                                                     |
| `parent_container` | Parent **`salesforce_org`** or **`salesforce_folder`** URI (shared folder vs personal/unfiled fall back to the org) |
| `native_owners`    | Native creator (**CreatedBy**) as a structured reference when that user was observed in the crawl                   |
| `external_links`   | Link to open the report in Salesforce                                                                               |

Euno may also compute a string **`owner`** (first native owner) for display. **Derived lineage** (global processing after the crawl): when Analytics **describe** metadata is available under `native_raw_object`, Euno derives **`table_dependencies`** (upstream **`salesforce_object`**) and **`upstream_fields`** (upstream **`salesforce_field`**) from report columns **only where** those objects and fields already exist as discovered resources.

## Salesforce Dashboard

Dashboards are visual displays of key metrics and data from Salesforce reports.

### Properties

| Property           | Description                                                                                       |
| ------------------ | ------------------------------------------------------------------------------------------------- |
| `name`             | The dashboard title                                                                               |
| `type`             | Always `salesforce_dashboard`                                                                     |
| `subtype`          | Always `salesforce_dashboard`                                                                     |
| `description`      | The dashboard description, if provided                                                            |
| `created_at`       | The timestamp when the dashboard was created                                                      |
| `updated_at`       | The timestamp when the dashboard was last modified                                                |
| `parent_container` | Parent **`salesforce_org`** or **`salesforce_folder`** URI                                        |
| `native_owners`    | Native creator (**CreatedBy**) as a structured reference when that user was observed in the crawl |
| `external_links`   | Link to open the dashboard in Salesforce                                                          |

Euno may also compute a string **`owner`** (first native owner) for display. **`table_dependencies`** toward **`salesforce_report`** URIs is typically filled **during the crawl** when dashboard describe metadata exposes component report IDs (and may be refined by later processing).

## Salesforce Flow

Flows are Salesforce automation definitions (`salesforce_flow`). They are observed when **Include flows (Tooling API)** is enabled in Euno.

Euno reads **FlowDefinition** and selected **Flow** version rows via Salesforce’s **Tooling API**. The crawler stores tooling payloads under **`native_raw_object`** for auditability. Subsequent processing derives:

* **`salesforce_flow_lineage`** — structured field-level lineage (targets and sources) parsed from Flow definition metadata **where resolvable**
* **`defines`** — links toward **`salesforce_object`** resources the flow materially updates

and can propagate lineage onto **objects** and **fields** (for example **`table_dependencies`** / **`upstream_fields`** on **`salesforce_object`** / **`salesforce_field`** from Flow-derived assignments). Lineage completeness depends on which objects and fields were discovered by the crawler and pattern filters.

### Properties

| Property            | Description                                                                                                        |
| ------------------- | ------------------------------------------------------------------------------------------------------------------ |
| `name`              | Flow master label when available from the tooling version row, otherwise developer name                            |
| `type`              | Always `salesforce_flow`                                                                                           |
| `subtype`           | Always `salesforce_flow`                                                                                           |
| `description`       | From Flow definition metadata when Salesforce returns it                                                           |
| `native_id`         | Flow definition (tooling) id                                                                                       |
| `parent_container`  | Parent **`salesforce_org`** URI                                                                                    |
| `native_raw_object` | Normalized tooling payload (definition metadata, identifiers, parsed JSON definition when Salesforce returns JSON) |
| `native_owners`     | Optional creator from tooling **CreatedById** when that user was observed in the crawl                             |
| `external_links`    | Shortcut to Salesforce Flow setup                                                                                  |

**Derived lineage** properties (`salesforce_flow_lineage`, **`defines`**, and dependent graph edges onto objects and fields) are produced by asynchronous global processing as well as crawl-time wiring where applicable.

## Relationships

### Hierarchy and containers

| Source type(s)         | Relationship | Target type(s)                        | Notes                                                                                                                                                                                                                                               |
| ---------------------- | ------------ | ------------------------------------- | --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| `salesforce_folder`    | has parent   | `salesforce_org`                      | `parent_container` on the folder                                                                                                                                                                                                                    |
| `salesforce_object`    | has parent   | `salesforce_org`                      | `parent_container` on the object                                                                                                                                                                                                                    |
| `salesforce_field`     | has parent   | `salesforce_object`                   | `parent_container` on the field                                                                                                                                                                                                                     |
| `salesforce_report`    | has parent   | `salesforce_org`, `salesforce_folder` | Shared-folder reports use a folder parent; personal/unfiled reports use the org                                                                                                                                                                     |
| `salesforce_dashboard` | has parent   | `salesforce_org`, `salesforce_folder` | Same pattern as reports                                                                                                                                                                                                                             |
| `salesforce_flow`      | has parent   | `salesforce_org`                      | When Flow observation is enabled                                                                                                                                                                                                                    |
| `salesforce_org`       | `used`       | `user`                                | After user observation, the org carries **`used`** references to observed users (see [Usage relationships](https://github.com/delphiio/delphi_backend/blob/dev/user_documentation/sources/developer-reference/technical-concepts/relationships.md)) |
| `user_group`           | has member   | `user`                                | `members` on the group lists observed users                                                                                                                                                                                                         |

### Lineage

| Source type(s)         | Relationship | Target type(s)                                             | Notes                                                                                                                |
| ---------------------- | ------------ | ---------------------------------------------------------- | -------------------------------------------------------------------------------------------------------------------- |
| `salesforce_dashboard` | has upstream | `salesforce_report`                                        | **`table_dependencies`** from dashboard describe components when present                                             |
| `salesforce_report`    | has upstream | `salesforce_object`, `salesforce_field`                    | From Analytics describe via global processing (`table_dependencies` / `upstream_fields`) where resolvable            |
| `salesforce_flow`      | defines      | `salesforce_object`                                        | **`defines`** toward objects the flow updates                                                                        |
| `salesforce_flow`      | has upstream | `salesforce_object`, `salesforce_field`, `salesforce_flow` | From tooling metadata and global processing (`table_dependencies`, `upstream_fields`, lineage maps) where resolvable |

### Creator metadata (users)

Reports, dashboards, and flows emit **`native_owners`** from Salesforce **CreatedBy** when the creator user was observed in the same crawl. Euno may compute a display **`owner`** string from that list. For how user linkage appears in the graph alongside other products, see **Usage relationships** in the [relationships developer reference](https://github.com/delphiio/delphi_backend/blob/dev/user_documentation/sources/developer-reference/technical-concepts/relationships.md).

## Hierarchy Diagram

```
salesforce_org
├── user (active Salesforce users; linked from org via used)
├── user_group
│   └── has member → user
├── salesforce_folder (report or dashboard folders)
│   ├── salesforce_report (native_owners → user when observed)
│   └── salesforce_dashboard → salesforce_report (table_dependencies)
├── salesforce_flow (optional)
├── salesforce_object
│   └── salesforce_field
└── salesforce_object (custom __c)
    └── salesforce_field
```

## Known Limitations

### Personal Folders

Personal folders in Salesforce are not actual folder records that can be queried via the API. Reports and dashboards in personal folders will appear directly under the Salesforce Organization rather than within a folder container.

### Formula field lineage

While formula expressions are captured in the `raw_code` property, **formula cross-field lineage** strictly from **`raw_code`** is not modeled the same way as Flow- or Report-derived lineage. Flow-derived lineage handles automations separately.

### Filtering (objects, reports, dashboards)

**Object filters** hide entire objects (and usually their fields) from discovery. Reports and dashboards that depend on unseen objects/columns may show **fewer or no upstream** lineage edges until those entities are crawled.

**Report** and **dashboard** regex filters remove matching reports/dashboards entirely; they leave no stub resource to attach lineage to.

### Flow tooling access

Flows require **Tooling API** readable Flow metadata. Missing permissions, partial describe surfaces, or **Include flows** turned off yields **no** `salesforce_flow` assets and therefore **no** Flow-derived lineage for that crawl.


---

# Agent Instructions: 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:

```
GET https://docs.euno.ai/sources/business-intelligence/salesforce-integration/salesforce-integration-discovered-resources.md?ask=<question>
```

The question should be specific, self-contained, and written in natural language.
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.
