diff --git a/docs/reference/extension/commands.md b/docs/reference/extension/commands.md index 33441bd..a26c3b9 100644 --- a/docs/reference/extension/commands.md +++ b/docs/reference/extension/commands.md @@ -5,7 +5,7 @@ | Command ID | Title | Category | Default Keybinding | When Clause | |---|---|---|---|---| | `ppds.configureEnvironment` | Configure Environment | PPDS | | | -| `ppds.copyEnvironmentUrl` | Copy URL | | | | +| `ppds.copyEnvironmentUrl` | Copy URL | PPDS | | | | `ppds.createProfile` | Create Profile | PPDS | | | | `ppds.dataExplorer` | Open Data Explorer | PPDS | | | | `ppds.debug.daemonStatus` | Daemon Status | PPDS Debug | | | @@ -18,44 +18,44 @@ | `ppds.exportCellResultsJson` | Export Cell Results to JSON | PPDS | | | | `ppds.invalidateProfile` | Invalidate Tokens | PPDS | | | | `ppds.listProfiles` | List Profiles | PPDS | | | -| `ppds.moveProfileDown` | Move Down | | | | -| `ppds.moveProfileUp` | Move Up | | | | +| `ppds.moveProfileDown` | Move Down | PPDS | | | +| `ppds.moveProfileUp` | Move Up | PPDS | | | | `ppds.newNotebook` | New Notebook | PPDS | | | | `ppds.openCellInDataExplorer` | Open in Data Explorer | PPDS | | | | `ppds.openConnectionReferences` | Open Connection References | PPDS | | | -| `ppds.openConnectionReferencesForEnv` | Open Connection References | | | | -| `ppds.openDataExplorerForEnv` | Open Data Explorer | | | | +| `ppds.openConnectionReferencesForEnv` | Open Connection References | PPDS | | | +| `ppds.openDataExplorerForEnv` | Open Data Explorer | PPDS | | | | `ppds.openDocumentation` | Open Documentation | PPDS | | | | `ppds.openEnvironmentVariables` | Open Environment Variables | PPDS | | | -| `ppds.openEnvironmentVariablesForEnv` | Open Environment Variables | | | | +| `ppds.openEnvironmentVariablesForEnv` | Open Environment Variables | PPDS | | | | `ppds.openImportJobs` | Open Import Jobs | PPDS | | | -| `ppds.openImportJobsForEnv` | Open Import Jobs | | | | -| `ppds.openInDynamics` | Open in Dynamics 365 | | | | -| `ppds.openInMaker` | Open in Maker Portal | | | | +| `ppds.openImportJobsForEnv` | Open Import Jobs | PPDS | | | +| `ppds.openInDynamics` | Open in Dynamics 365 | PPDS | | | +| `ppds.openInMaker` | Open in Maker Portal | PPDS | | | | `ppds.openMetadataBrowser` | Open Metadata Browser | PPDS | | | | `ppds.openMetadataBrowserForEnv` | Open Metadata Browser | PPDS | | | | `ppds.openNotebooks` | Open Notebooks | PPDS | | | | `ppds.openPlugins` | Open Plugin Registration | PPDS | | | -| `ppds.openPluginsForEnv` | Open Plugin Registration | | | | +| `ppds.openPluginsForEnv` | Open Plugin Registration | PPDS | | | | `ppds.openPluginTraces` | Open Plugin Traces | PPDS | | | -| `ppds.openPluginTracesForEnv` | Open Plugin Traces | | | | +| `ppds.openPluginTracesForEnv` | Open Plugin Traces | PPDS | | | | `ppds.openQueryInNotebook` | Open Query in Notebook | PPDS | | | | `ppds.openSolutions` | Open Solutions | PPDS | | | -| `ppds.openSolutionsForEnv` | Open Solutions | | | | +| `ppds.openSolutionsForEnv` | Open Solutions | PPDS | | | | `ppds.openWebResources` | Open Web Resources | PPDS | | | -| `ppds.openWebResourcesForEnv` | Open Web Resources | | | | +| `ppds.openWebResourcesForEnv` | Open Web Resources | PPDS | | | | `ppds.pluginTreeDisableStep` | Disable Step | PPDS | | | | `ppds.pluginTreeDownload` | Download Binary | PPDS | | | | `ppds.pluginTreeEnableStep` | Enable Step | PPDS | | | | `ppds.pluginTreeUnregister` | Unregister | PPDS | | | | `ppds.profileDetails` | Profile Details | PPDS | | | -| `ppds.refreshProfiles` | Refresh | | | | -| `ppds.removeEnvironment` | Remove Environment | | | | +| `ppds.refreshProfiles` | Refresh | PPDS | | | +| `ppds.removeEnvironment` | Remove Environment | PPDS | | | | `ppds.renameProfile` | Rename Profile | PPDS | | | | `ppds.restartDaemon` | Restart Daemon | PPDS | | | | `ppds.selectNotebookEnvironment` | Select Notebook Environment | PPDS | | | | `ppds.selectProfile` | Select Profile | PPDS | | | -| `ppds.setDefaultEnvironment` | Set as Default | | | | +| `ppds.setDefaultEnvironment` | Set as Default | PPDS | | | | `ppds.showLogs` | Show Logs | PPDS | | | -| `ppds.testConnection` | Test Connection | | | | +| `ppds.testConnection` | Test Connection | PPDS | | | | `ppds.toggleNotebookCellLanguage` | Toggle SQL/FetchXML | PPDS | | | diff --git a/docs/reference/libraries/Auth/AuthErrorCodes.md b/docs/reference/libraries/Auth/AuthErrorCodes.md new file mode 100644 index 0000000..43734ff --- /dev/null +++ b/docs/reference/libraries/Auth/AuthErrorCodes.md @@ -0,0 +1,47 @@ + + +# AuthErrorCodes + +- Namespace: `PPDS.Auth` +- Assembly: `PPDS.Auth` +- Kind: Class + +## Summary + +Hierarchical error codes used by PPDS.Auth's `PPDS.Auth.Credentials.AuthenticationException`. +Values are stable strings consumers (CLI, MCP, RPC) can match programmatically. + +## Members + +### Fields + +#### BapApiError + +`string BapApiError` + +BAP API returned 429/5xx or another unexpected status. + +#### BapApiForbidden + +`string BapApiForbidden` + +BAP API returned 403 — SPN is not registered as a Power Platform management application. + +#### BapApiTimeout + +`string BapApiTimeout` + +BAP API call timed out. + +#### BapApiUnauthorized + +`string BapApiUnauthorized` + +BAP API returned 401 — token is invalid or expired. + +#### EnvironmentNotFound + +`string EnvironmentNotFound` + +Environment name was not found in BAP discovery results. + diff --git a/docs/reference/libraries/Auth/Cloud/CloudEndpoints.md b/docs/reference/libraries/Auth/Cloud/CloudEndpoints.md index 9be38ae..8bf1797 100644 --- a/docs/reference/libraries/Auth/Cloud/CloudEndpoints.md +++ b/docs/reference/libraries/Auth/Cloud/CloudEndpoints.md @@ -56,6 +56,17 @@ Gets the MSAL Azure cloud instance for the specified cloud environment. - Returns: The Azure cloud instance. +#### GetBapApiUrl + +`string GetBapApiUrl(CloudEnvironment cloud)` + +Gets the BAP (Business Application Platform) API base URL for the specified cloud environment. +Used for environment discovery via the admin API when Global Discovery is not available. + +- Param `cloud`: The cloud environment. + +- Returns: The BAP API base URL. + #### GetFlowPortalUrl `string GetFlowPortalUrl(CloudEnvironment cloud)` diff --git a/docs/reference/libraries/Auth/Discovery/BapEnvironmentService.md b/docs/reference/libraries/Auth/Discovery/BapEnvironmentService.md new file mode 100644 index 0000000..1958ebf --- /dev/null +++ b/docs/reference/libraries/Auth/Discovery/BapEnvironmentService.md @@ -0,0 +1,69 @@ + + +# BapEnvironmentService + +- Namespace: `PPDS.Auth.Discovery` +- Assembly: `PPDS.Auth` +- Kind: Class +- Implements: `IEnvironmentDiscoveryService`, `IDisposable` + +## Summary + +Discovers Dataverse environments via the BAP (Business Application Platform) admin API. +Suitable for service principal authentication where Global Discovery is not available. + +## Members + +### Constructors + +#### BapEnvironmentService(HttpClient httpClient, string bapApiUrl, Func<CancellationToken, Task<string>> tokenProvider) + +`BapEnvironmentService(HttpClient httpClient, string bapApiUrl, Func> tokenProvider)` + +Creates a new BapEnvironmentService. + +- Param `httpClient`: The HTTP client to use for API calls. + +- Param `bapApiUrl`: The BAP API base URL (e.g., https://api.bap.microsoft.com). + +- Param `tokenProvider`: A function that acquires a bearer token for the BAP API. + + +### Methods + +#### DiscoverEnvironmentsAsync + +`Task> DiscoverEnvironmentsAsync(CancellationToken cancellationToken)` + +Discovers all environments accessible to the authenticated principal. + +- Param `cancellationToken`: Cancellation token. + +- Returns: Collection of discovered environments. + +#### Dispose + +`void Dispose()` + +*(inherited from `System.IDisposable.Dispose`)* + +#### FromProfileAsync + +`Task FromProfileAsync(AuthProfile profile, ISecureCredentialStore credentialStore, CancellationToken cancellationToken)` + +Creates a BapEnvironmentService from an auth profile using MSAL confidential client. + +- Param `profile`: The auth profile (must use ClientSecret, CertificateFile, or CertificateStore). + +- Param `credentialStore`: Optional credential store for retrieving stored secrets. + +- Param `cancellationToken`: Cancellation token for the credential store lookup. + +- Returns: A new BapEnvironmentService instance. Caller must dispose. + +#### SupportsAuthMethod + +`bool SupportsAuthMethod(AuthMethod authMethod)` + +Returns whether the given auth method is supported by BAP discovery. + diff --git a/docs/reference/libraries/Auth/Discovery/DiscoveredEnvironment.md b/docs/reference/libraries/Auth/Discovery/DiscoveredEnvironment.md index d60836e..e794218 100644 --- a/docs/reference/libraries/Auth/Discovery/DiscoveredEnvironment.md +++ b/docs/reference/libraries/Auth/Discovery/DiscoveredEnvironment.md @@ -41,6 +41,8 @@ Gets or sets the Power Platform environment ID. Gets the environment type as a string. Maps from Microsoft.Xrm.Sdk.Organization.OrganizationType enum values. +Sentinels -1 / -2 are produced by BAP discovery (see BapEnvironmentService.MapEnvironmentSku) +to distinguish a "Default" environment and an unrecognized SKU from a real Production org. #### FriendlyName diff --git a/docs/reference/libraries/Auth/Discovery/EnvironmentResolutionResult.md b/docs/reference/libraries/Auth/Discovery/EnvironmentResolutionResult.md index 5faf4a6..17adc27 100644 --- a/docs/reference/libraries/Auth/Discovery/EnvironmentResolutionResult.md +++ b/docs/reference/libraries/Auth/Discovery/EnvironmentResolutionResult.md @@ -16,7 +16,7 @@ Result of an environment resolution attempt. #### Failed -`EnvironmentResolutionResult Failed(string errorMessage)` +`EnvironmentResolutionResult Failed(string errorMessage, string errorCode)` Creates a failed result. @@ -35,6 +35,13 @@ Creates a successful result. Gets the resolved environment info (null if failed). +#### ErrorCode + +`string ErrorCode { get; set; }` + +Gets the structured error code carried from the underlying failure (null if successful or unknown). +Values come from `PPDS.Auth.AuthErrorCodes`. + #### ErrorMessage `string ErrorMessage { get; set; }` diff --git a/docs/reference/libraries/Auth/Discovery/GlobalDiscoveryService.md b/docs/reference/libraries/Auth/Discovery/GlobalDiscoveryService.md index eb53bf4..7945958 100644 --- a/docs/reference/libraries/Auth/Discovery/GlobalDiscoveryService.md +++ b/docs/reference/libraries/Auth/Discovery/GlobalDiscoveryService.md @@ -5,7 +5,7 @@ - Namespace: `PPDS.Auth.Discovery` - Assembly: `PPDS.Auth` - Kind: Class -- Implements: `IGlobalDiscoveryService`, `IDisposable` +- Implements: `IEnvironmentDiscoveryService`, `IGlobalDiscoveryService`, `IDisposable` ## Summary diff --git a/docs/reference/libraries/Auth/Discovery/IEnvironmentDiscoveryService.md b/docs/reference/libraries/Auth/Discovery/IEnvironmentDiscoveryService.md new file mode 100644 index 0000000..72d27d0 --- /dev/null +++ b/docs/reference/libraries/Auth/Discovery/IEnvironmentDiscoveryService.md @@ -0,0 +1,27 @@ + + +# IEnvironmentDiscoveryService + +- Namespace: `PPDS.Auth.Discovery` +- Assembly: `PPDS.Auth` +- Kind: Interface + +## Summary + +Common interface for services that discover Dataverse environments. +Implemented by both Global Discovery Service (delegated user auth) and BAP API (service principal auth). + +## Members + +### Methods + +#### DiscoverEnvironmentsAsync + +`Task> DiscoverEnvironmentsAsync(CancellationToken cancellationToken)` + +Discovers all environments accessible to the authenticated principal. + +- Param `cancellationToken`: Cancellation token. + +- Returns: Collection of discovered environments. + diff --git a/docs/reference/libraries/Auth/Discovery/IGlobalDiscoveryService.md b/docs/reference/libraries/Auth/Discovery/IGlobalDiscoveryService.md index d82cd58..c8f7394 100644 --- a/docs/reference/libraries/Auth/Discovery/IGlobalDiscoveryService.md +++ b/docs/reference/libraries/Auth/Discovery/IGlobalDiscoveryService.md @@ -5,6 +5,7 @@ - Namespace: `PPDS.Auth.Discovery` - Assembly: `PPDS.Auth` - Kind: Interface +- Implements: `IEnvironmentDiscoveryService` ## Summary diff --git a/docs/reference/libraries/Auth/Discovery/ResolutionMethod.md b/docs/reference/libraries/Auth/Discovery/ResolutionMethod.md index f24486e..1007e9c 100644 --- a/docs/reference/libraries/Auth/Discovery/ResolutionMethod.md +++ b/docs/reference/libraries/Auth/Discovery/ResolutionMethod.md @@ -15,6 +15,12 @@ Method used to resolve an environment. ### Fields +#### BapDiscovery + +`ResolutionMethod BapDiscovery` + +Resolved via BAP Environment Discovery (service principal). + #### DirectConnection `ResolutionMethod DirectConnection` diff --git a/docs/reference/libraries/Auth/_index.md b/docs/reference/libraries/Auth/_index.md new file mode 100644 index 0000000..3031d31 --- /dev/null +++ b/docs/reference/libraries/Auth/_index.md @@ -0,0 +1,87 @@ + + +# Auth reference + +## Interfaces + +| Type | Summary | +|------|---------| +| [ICredentialProvider](./Credentials/ICredentialProvider.md) | Provides authenticated ServiceClient instances for a specific auth method. | +| [IEnvironmentDiscoveryService](./Discovery/IEnvironmentDiscoveryService.md) | Common interface for services that discover Dataverse environments. | +| [IGlobalDiscoveryService](./Discovery/IGlobalDiscoveryService.md) | Service for discovering Dataverse environments via the Global Discovery Service. | +| [IPowerPlatformTokenProvider](./Credentials/IPowerPlatformTokenProvider.md) | Provides access tokens for Power Platform REST APIs (Power Apps, Power Automate, etc.). | +| [ISecureCredentialStore](./Credentials/ISecureCredentialStore.md) | Provides secure, platform-native credential storage for service principal secrets. | + +## Classes + +| Type | Summary | +|------|---------| +| [AmbiguousMatchException](./Discovery/AmbiguousMatchException.md) | Exception thrown when multiple environments match a given identifier. | +| [AuthDebugLog](./AuthDebugLog.md) | Controls debug logging output for the auth library. | +| [AuthErrorCodes](./AuthErrorCodes.md) | Hierarchical error codes used by PPDS.Auth's `PPDS.Auth.Credentials.AuthenticationException`. | +| [AuthProfile](./Profiles/AuthProfile.md) | An authentication profile containing credentials and environment binding. | +| [AuthenticationException](./Credentials/AuthenticationException.md) | Exception thrown when authentication fails. | +| [AuthenticationOutput](./AuthenticationOutput.md) | Controls authentication status output for the auth library. | +| [AzureDevOpsFederatedCredentialProvider](./Credentials/AzureDevOpsFederatedCredentialProvider.md) | Provides authentication using Azure DevOps OIDC (workload identity federation). | +| [BapEnvironmentService](./Discovery/BapEnvironmentService.md) | Discovers Dataverse environments via the BAP (Business Application Platform) admin API. | +| [CertificateFileCredentialProvider](./Credentials/CertificateFileCredentialProvider.md) | Provides authentication using a certificate file (PFX/P12). | +| [CertificateStoreCredentialProvider](./Credentials/CertificateStoreCredentialProvider.md) | Provides authentication using a certificate from the Windows certificate store. | +| [ClientSecretCredentialProvider](./Credentials/ClientSecretCredentialProvider.md) | Provides authentication using client ID and client secret (Service Principal). | +| [CloudEndpoints](./Cloud/CloudEndpoints.md) | Provides endpoint URLs for different Azure cloud environments. | +| [ConnectionResolver](./Pooling/ConnectionResolver.md) | Resolves profile names to authenticated connections. | +| [CredentialProviderFactory](./Credentials/CredentialProviderFactory.md) | Factory for creating credential providers from auth profiles. | +| [CredentialResult](./Credentials/CredentialResult.md) | Result of creating a credential provider. | +| [DeviceCodeCredentialProvider](./Credentials/DeviceCodeCredentialProvider.md) | Provides authentication using device code flow. | +| [DeviceCodeInfo](./Credentials/DeviceCodeInfo.md) | Information about a device code for authentication. | +| [DiscoveredEnvironment](./Discovery/DiscoveredEnvironment.md) | Represents an environment discovered via the Global Discovery Service. | +| [EnvironmentConfig](./Profiles/EnvironmentConfig.md) | User configuration for a specific Dataverse environment. | +| [EnvironmentConfigCollection](./Profiles/EnvironmentConfigCollection.md) | Root object for environments.json — holds per-environment configs and custom type defaults. | +| [EnvironmentConfigStore](./Profiles/EnvironmentConfigStore.md) | Manages persistent storage of environment configurations. | +| [EnvironmentInfo](./Profiles/EnvironmentInfo.md) | Information about a Dataverse environment bound to a profile. | +| [EnvironmentResolutionResult](./Discovery/EnvironmentResolutionResult.md) | Result of an environment resolution attempt. | +| [EnvironmentResolutionService](./Discovery/EnvironmentResolutionService.md) | Service for resolving environments using a multi-layer strategy. | +| [EnvironmentResolver](./Discovery/EnvironmentResolver.md) | Resolves an environment from a collection by various criteria. | +| [EnvironmentVariableAuth](./EnvironmentVariableAuth.md) | Reads authentication configuration from environment variables for CI/CD scenarios. | +| [GitHubFederatedCredentialProvider](./Credentials/GitHubFederatedCredentialProvider.md) | Provides authentication using GitHub Actions OIDC (workload identity federation). | +| [GlobalDiscoveryService](./Discovery/GlobalDiscoveryService.md) | Service for discovering Dataverse environments via the Global Discovery Service. | +| [InteractiveBrowserCredentialProvider](./Credentials/InteractiveBrowserCredentialProvider.md) | Provides authentication using interactive browser flow. | +| [ManagedIdentityCredentialProvider](./Credentials/ManagedIdentityCredentialProvider.md) | Provides authentication using Azure Managed Identity. | +| [NativeCredentialStore](./Credentials/NativeCredentialStore.md) | Provides secure, platform-native credential storage using OS credential managers. | +| [PowerPlatformToken](./Credentials/PowerPlatformToken.md) | Represents an access token for Power Platform APIs. | +| [PowerPlatformTokenProvider](./Credentials/PowerPlatformTokenProvider.md) | Provides access tokens for Power Platform REST APIs using MSAL. | +| [ProfileCollection](./Profiles/ProfileCollection.md) | Collection of authentication profiles with active profile tracking. | +| [ProfileConnectionSource](./Pooling/ProfileConnectionSource.md) | Connection source that creates ServiceClients from an authentication profile. | +| [ProfileEncryption](./Profiles/ProfileEncryption.md) | Provides platform-specific encryption for sensitive profile data. | +| [ProfilePaths](./Profiles/ProfilePaths.md) | Provides platform-specific paths for profile storage. | +| [ProfileResolver](./Profiles/ProfileResolver.md) | Resolves which profile to use based on the priority order: | +| [ProfileStore](./Profiles/ProfileStore.md) | Manages persistent storage of authentication profiles. | +| [QuerySafetySettings](./Profiles/QuerySafetySettings.md) | Per-environment query safety settings. Stored in environment config JSON. | +| [ServiceClientFactory](./ServiceClientFactory.md) | Factory for creating authenticated ServiceClient instances from profiles. | +| [ServiceCollectionExtensions](./DependencyInjection/ServiceCollectionExtensions.md) | Extension methods for registering PPDS Auth services with dependency injection. | +| [StoredCredential](./Credentials/StoredCredential.md) | Represents a credential stored in secure platform storage. | +| [TokenCacheDetector](./Profiles/TokenCacheDetector.md) | Utility to detect the token cache type for the current platform. | +| [TokenCacheManager](./Credentials/TokenCacheManager.md) | Manages token cache operations including clearing cached credentials. | +| [UsernamePasswordCredentialProvider](./Credentials/UsernamePasswordCredentialProvider.md) | Provides authentication using username and password (ROPC flow). | + +## Records + +| Type | Summary | +|------|---------| +| [CachedTokenInfo](./Credentials/CachedTokenInfo.md) | Information about a cached token, retrieved without triggering authentication. | + +## Enums + +| Type | Summary | +|------|---------| +| [AuthMethod](./Profiles/AuthMethod.md) | Authentication method for a profile. | +| [BypassPluginMode](./Profiles/BypassPluginMode.md) | Which plugin types to bypass during DML operations. | +| [CloudEnvironment](./Cloud/CloudEnvironment.md) | Azure cloud environments for Dataverse authentication. | +| [CrossEnvironmentDmlPolicy](./Profiles/CrossEnvironmentDmlPolicy.md) | Cross-environment DML policy. | +| [DateTimeMode](./Profiles/DateTimeMode.md) | DateTime display mode for query results. | +| [EnvironmentColor](./Profiles/EnvironmentColor.md) | Named colors for environment theming. | +| [EnvironmentType](./Profiles/EnvironmentType.md) | Classification of Dataverse environment types. | +| [PreAuthDialogResult](./Credentials/PreAuthDialogResult.md) | Result of the pre-authentication dialog shown before browser auth. | +| [ProtectionLevel](./Profiles/ProtectionLevel.md) | Environment protection level determining DML behavior. | +| [ResolutionMethod](./Discovery/ResolutionMethod.md) | Method used to resolve an environment. | +| [TokenCacheType](./Profiles/TokenCacheType.md) | Token cache storage type. | + diff --git a/docs/reference/libraries/Dataverse/Client/DataverseClient.md b/docs/reference/libraries/Dataverse/Client/DataverseClient.md index 7f8e15d..babe4be 100644 --- a/docs/reference/libraries/Dataverse/Client/DataverseClient.md +++ b/docs/reference/libraries/Dataverse/Client/DataverseClient.md @@ -146,6 +146,14 @@ Disposes of the client and releases resources. *(inherited from `Microsoft.PowerPlatform.Dataverse.Client.IOrganizationServiceAsync2.ExecuteAsync(Microsoft.Xrm.Sdk.OrganizationRequest,System.Threading.CancellationToken)`)* +#### GetRawWebApiAsync + +`Task GetRawWebApiAsync(string queryString, CancellationToken ct)` + +GETs a raw WebAPI query string and returns the response body as JSON. +Used to traverse OData navigation properties not exposed as SDK attributes. +Returns null on 404 or if the response is empty. + #### Retrieve `Entity Retrieve(string entityName, Guid id, ColumnSet columnSet)` diff --git a/docs/reference/libraries/Dataverse/Client/IDataverseClient.md b/docs/reference/libraries/Dataverse/Client/IDataverseClient.md index 26a9211..1ff3d4f 100644 --- a/docs/reference/libraries/Dataverse/Client/IDataverseClient.md +++ b/docs/reference/libraries/Dataverse/Client/IDataverseClient.md @@ -25,6 +25,14 @@ Cloning is significantly faster than creating a new connection. - Returns: A cloned client instance. +#### GetRawWebApiAsync + +`Task GetRawWebApiAsync(string queryString, CancellationToken ct)` + +GETs a raw WebAPI query string and returns the response body as JSON. +Used to traverse OData navigation properties not exposed as SDK attributes. +Returns null on 404 or if the response is empty. + ### Properties diff --git a/docs/reference/libraries/Dataverse/Metadata/Authoring/AddColumnOptionRequest.md b/docs/reference/libraries/Dataverse/Metadata/Authoring/AddColumnOptionRequest.md new file mode 100644 index 0000000..1ebdbb4 --- /dev/null +++ b/docs/reference/libraries/Dataverse/Metadata/Authoring/AddColumnOptionRequest.md @@ -0,0 +1,64 @@ + + +# AddColumnOptionRequest + +- Namespace: `PPDS.Dataverse.Metadata.Authoring` +- Assembly: `PPDS.Dataverse` +- Kind: Class + +## Summary + +Request to add an option to a column-scoped (local) option set (#1161). + +## Members + +### Properties + +#### Color + +`string Color { get; set; }` + +Gets or sets the option color (hex string, e.g. #FF0000). + +#### ColumnLogicalName + +`string ColumnLogicalName { get; set; }` + +Gets or sets the logical name of the Choice/Choices column. + +#### DryRun + +`bool DryRun { get; set; }` + +Gets or sets whether to validate only, without persisting changes. + +#### EntityLogicalName + +`string EntityLogicalName { get; set; }` + +Gets or sets the entity logical name owning the column. + +#### Label + +`string Label { get; set; }` + +Gets or sets the label for the new option. + +#### Publish + +`bool Publish { get; set; }` + +Gets or sets whether to publish the entity after the change. + +#### SolutionUniqueName + +`string SolutionUniqueName { get; set; }` + +Gets or sets the solution unique name used for publisher-prefix value derivation when `PPDS.Dataverse.Metadata.Authoring.AddColumnOptionRequest.Value` is null. + +#### Value + +`Nullable Value { get; set; }` + +Gets or sets the explicit option value. When null, derived from `PPDS.Dataverse.Metadata.Authoring.AddColumnOptionRequest.SolutionUniqueName`. + diff --git a/docs/reference/libraries/Dataverse/Metadata/Authoring/AddOptionValueRequest.md b/docs/reference/libraries/Dataverse/Metadata/Authoring/AddOptionValueRequest.md index 143fa2d..b899dde 100644 --- a/docs/reference/libraries/Dataverse/Metadata/Authoring/AddOptionValueRequest.md +++ b/docs/reference/libraries/Dataverse/Metadata/Authoring/AddOptionValueRequest.md @@ -32,6 +32,12 @@ Gets or sets the color associated with the option (hex string). Gets or sets the description for the new option. +#### DryRun + +`bool DryRun { get; set; }` + +Gets or sets whether this is a dry-run (validation only, no changes persisted) (#1172). + #### EntityLogicalName `string EntityLogicalName { get; set; }` diff --git a/docs/reference/libraries/Dataverse/Metadata/Authoring/AddStatusReasonRequest.md b/docs/reference/libraries/Dataverse/Metadata/Authoring/AddStatusReasonRequest.md new file mode 100644 index 0000000..2ea774f --- /dev/null +++ b/docs/reference/libraries/Dataverse/Metadata/Authoring/AddStatusReasonRequest.md @@ -0,0 +1,64 @@ + + +# AddStatusReasonRequest + +- Namespace: `PPDS.Dataverse.Metadata.Authoring` +- Assembly: `PPDS.Dataverse` +- Kind: Class + +## Summary + +Request to add a status reason (statuscode option value) to an entity. + +## Members + +### Properties + +#### Color + +`string Color { get; set; }` + +Optional hex color. + +#### DryRun + +`bool DryRun { get; set; }` + +Validate without executing SDK call. + +#### EntityLogicalName + +`string EntityLogicalName { get; set; }` + +Logical name of the entity. + +#### Label + +`string Label { get; set; }` + +Display label for the new status reason. + +#### Publish + +`bool Publish { get; set; }` + +Publish the entity after the change. + +#### SolutionUniqueName + +`string SolutionUniqueName { get; set; }` + +Solution unique name — required for value derivation when Value is null. + +#### StateCode + +`int StateCode { get; set; }` + +State code the reason belongs to: 0 (Active) or 1 (Inactive). + +#### Value + +`Nullable Value { get; set; }` + +Explicit option value; when null, derived via OptionValueDeriver. + diff --git a/docs/reference/libraries/Dataverse/Metadata/Authoring/ColumnOptionInfo.md b/docs/reference/libraries/Dataverse/Metadata/Authoring/ColumnOptionInfo.md new file mode 100644 index 0000000..f34f296 --- /dev/null +++ b/docs/reference/libraries/Dataverse/Metadata/Authoring/ColumnOptionInfo.md @@ -0,0 +1,34 @@ + + +# ColumnOptionInfo + +- Namespace: `PPDS.Dataverse.Metadata.Authoring` +- Assembly: `PPDS.Dataverse` +- Kind: Class + +## Summary + +Projection of a single option on a column-scoped (local) option set (#1161). + +## Members + +### Properties + +#### Color + +`string Color { get; set; }` + +Gets or sets the option color (hex string), if set. + +#### Label + +`string Label { get; set; }` + +Gets or sets the option label. + +#### Value + +`int Value { get; set; }` + +Gets or sets the option value. + diff --git a/docs/reference/libraries/Dataverse/Metadata/Authoring/CreateColumnRequest.md b/docs/reference/libraries/Dataverse/Metadata/Authoring/CreateColumnRequest.md index 2cd0114..e0c43e0 100644 --- a/docs/reference/libraries/Dataverse/Metadata/Authoring/CreateColumnRequest.md +++ b/docs/reference/libraries/Dataverse/Metadata/Authoring/CreateColumnRequest.md @@ -146,6 +146,12 @@ Gets or sets the local option definitions for new Choice/Choices columns. Gets or sets the precision for Decimal, Double, and Money columns. +#### Publish + +`bool Publish { get; set; }` + +Gets or sets whether to publish the entity after the column is created (#1161). + #### RequiredLevel `string RequiredLevel { get; set; }` diff --git a/docs/reference/libraries/Dataverse/Metadata/Authoring/CreateManyToManyRequest.md b/docs/reference/libraries/Dataverse/Metadata/Authoring/CreateManyToManyRequest.md index 5b797b5..67dfae8 100644 --- a/docs/reference/libraries/Dataverse/Metadata/Authoring/CreateManyToManyRequest.md +++ b/docs/reference/libraries/Dataverse/Metadata/Authoring/CreateManyToManyRequest.md @@ -48,7 +48,9 @@ Gets or sets the navigation property name on Entity2. `string IntersectEntitySchemaName { get; set; }` -Gets or sets the schema name of the intersect entity. +Gets or sets the schema name for the intersect entity that Dataverse will auto-create +to store many-to-many associations. If null or empty, defaults to `PPDS.Dataverse.Metadata.Authoring.CreateManyToManyRequest.SchemaName` +(matches Power Apps Maker convention; see Microsoft Learn CreateManyToManyRequest sample). #### SchemaName diff --git a/docs/reference/libraries/Dataverse/Metadata/Authoring/CreateTableRequest.md b/docs/reference/libraries/Dataverse/Metadata/Authoring/CreateTableRequest.md index 812e926..84e23ca 100644 --- a/docs/reference/libraries/Dataverse/Metadata/Authoring/CreateTableRequest.md +++ b/docs/reference/libraries/Dataverse/Metadata/Authoring/CreateTableRequest.md @@ -116,6 +116,12 @@ Gets or sets the max length for the primary attribute. Gets or sets the schema name for the primary attribute. +#### Publish + +`bool Publish { get; set; }` + +Gets or sets whether to publish the entity after it is created (#1171). + #### SchemaName `string SchemaName { get; set; }` diff --git a/docs/reference/libraries/Dataverse/Metadata/Authoring/DeleteOptionValueRequest.md b/docs/reference/libraries/Dataverse/Metadata/Authoring/DeleteOptionValueRequest.md index 804ac65..38f0d34 100644 --- a/docs/reference/libraries/Dataverse/Metadata/Authoring/DeleteOptionValueRequest.md +++ b/docs/reference/libraries/Dataverse/Metadata/Authoring/DeleteOptionValueRequest.md @@ -9,6 +9,7 @@ ## Summary Request to delete an option value from an option set. +Target the option by `PPDS.Dataverse.Metadata.Authoring.DeleteOptionValueRequest.Value` or `PPDS.Dataverse.Metadata.Authoring.DeleteOptionValueRequest.Label` (exactly one). ## Members @@ -20,12 +21,24 @@ Request to delete an option value from an option set. Gets or sets the attribute logical name (for local option sets). +#### DryRun + +`bool DryRun { get; set; }` + +Gets or sets whether this is a dry-run (validate the target exists, no changes persisted) (#1172). + #### EntityLogicalName `string EntityLogicalName { get; set; }` Gets or sets the entity logical name (for local option sets). +#### Label + +`string Label { get; set; }` + +Gets or sets the target option label (mutually exclusive with `PPDS.Dataverse.Metadata.Authoring.DeleteOptionValueRequest.Value`) (#1169). + #### OptionSetName `string OptionSetName { get; set; }` @@ -40,7 +53,7 @@ Gets or sets the unique name of the solution containing the option set. #### Value -`int Value { get; set; }` +`Nullable Value { get; set; }` -Gets or sets the numeric value of the option to delete. +Gets or sets the target option value (mutually exclusive with `PPDS.Dataverse.Metadata.Authoring.DeleteOptionValueRequest.Label`). diff --git a/docs/reference/libraries/Dataverse/Metadata/Authoring/MetadataErrorCodes.md b/docs/reference/libraries/Dataverse/Metadata/Authoring/MetadataErrorCodes.md index 9e73639..c87d4db 100644 --- a/docs/reference/libraries/Dataverse/Metadata/Authoring/MetadataErrorCodes.md +++ b/docs/reference/libraries/Dataverse/Metadata/Authoring/MetadataErrorCodes.md @@ -86,6 +86,18 @@ The maximum number of alternate keys per entity has been reached. A required field is missing or empty. +#### OptionNotFound + +`string OptionNotFound` + +The targeted status reason or local option was not found by value or label. + +#### SdkOperationFailed + +`string SdkOperationFailed` + +The Dataverse SDK call failed with an unexpected error. + #### UseRelationshipForLookup `string UseRelationshipForLookup` diff --git a/docs/reference/libraries/Dataverse/Metadata/Authoring/OptionValueDeriver.md b/docs/reference/libraries/Dataverse/Metadata/Authoring/OptionValueDeriver.md new file mode 100644 index 0000000..63f5a05 --- /dev/null +++ b/docs/reference/libraries/Dataverse/Metadata/Authoring/OptionValueDeriver.md @@ -0,0 +1,31 @@ + + +# OptionValueDeriver + +- Namespace: `PPDS.Dataverse.Metadata.Authoring` +- Assembly: `PPDS.Dataverse` +- Kind: Class + +## Summary + +Pure helper that picks a numeric option value for status-reason add and local-column option-add. +Single source of truth for both surfaces — identical collision/prefix semantics. + +## Members + +### Methods + +#### Derive + +`int Derive(Nullable explicitValue, Nullable publisherOptionPrefix, IReadOnlyCollection existingValues)` + +Chooses an option value. Throws `PPDS.Dataverse.Metadata.Authoring.MetadataValidationException` on collision or missing inputs. + +- Param `explicitValue`: --value if supplied (wins over derivation). + +- Param `publisherOptionPrefix`: Publisher customizationoptionvalueprefix, if --solution was given. + +- Param `existingValues`: Values already on the target option set. + +- Returns: The chosen option value. + diff --git a/docs/reference/libraries/Dataverse/Metadata/Authoring/RemoveColumnOptionRequest.md b/docs/reference/libraries/Dataverse/Metadata/Authoring/RemoveColumnOptionRequest.md new file mode 100644 index 0000000..99c0bd8 --- /dev/null +++ b/docs/reference/libraries/Dataverse/Metadata/Authoring/RemoveColumnOptionRequest.md @@ -0,0 +1,59 @@ + + +# RemoveColumnOptionRequest + +- Namespace: `PPDS.Dataverse.Metadata.Authoring` +- Assembly: `PPDS.Dataverse` +- Kind: Class + +## Summary + +Request to remove an option from a column-scoped (local) option set (#1161). +Target the option by `PPDS.Dataverse.Metadata.Authoring.RemoveColumnOptionRequest.Value` or `PPDS.Dataverse.Metadata.Authoring.RemoveColumnOptionRequest.Label` (exactly one). + +## Members + +### Properties + +#### ColumnLogicalName + +`string ColumnLogicalName { get; set; }` + +Gets or sets the logical name of the Choice/Choices column. + +#### DryRun + +`bool DryRun { get; set; }` + +Gets or sets whether to validate only, without persisting changes. + +#### EntityLogicalName + +`string EntityLogicalName { get; set; }` + +Gets or sets the entity logical name owning the column. + +#### Label + +`string Label { get; set; }` + +Gets or sets the target option label (mutually exclusive with `PPDS.Dataverse.Metadata.Authoring.RemoveColumnOptionRequest.Value`). + +#### Publish + +`bool Publish { get; set; }` + +Gets or sets whether to publish the entity after the change. + +#### SolutionUniqueName + +`string SolutionUniqueName { get; set; }` + +Gets or sets the solution unique name. + +#### Value + +`Nullable Value { get; set; }` + +Gets or sets the target option value (mutually exclusive with `PPDS.Dataverse.Metadata.Authoring.RemoveColumnOptionRequest.Label`). + diff --git a/docs/reference/libraries/Dataverse/Metadata/Authoring/RemoveStatusReasonRequest.md b/docs/reference/libraries/Dataverse/Metadata/Authoring/RemoveStatusReasonRequest.md new file mode 100644 index 0000000..bb9a15e --- /dev/null +++ b/docs/reference/libraries/Dataverse/Metadata/Authoring/RemoveStatusReasonRequest.md @@ -0,0 +1,46 @@ + + +# RemoveStatusReasonRequest + +- Namespace: `PPDS.Dataverse.Metadata.Authoring` +- Assembly: `PPDS.Dataverse` +- Kind: Class + +## Summary + +Request to remove a status reason from an entity. + +## Members + +### Properties + +#### EntityLogicalName + +`string EntityLogicalName { get; set; }` + +Logical name of the entity. + +#### Label + +`string Label { get; set; }` + +Target by label (exactly one of Value/Label required). + +#### Publish + +`bool Publish { get; set; }` + +Publish the entity after the change. + +#### SolutionUniqueName + +`string SolutionUniqueName { get; set; }` + +Solution unique name. + +#### Value + +`Nullable Value { get; set; }` + +Target by value (exactly one of Value/Label required). + diff --git a/docs/reference/libraries/Dataverse/Metadata/Authoring/SchemaValidator.md b/docs/reference/libraries/Dataverse/Metadata/Authoring/SchemaValidator.md index 2ccf262..3eecfd6 100644 --- a/docs/reference/libraries/Dataverse/Metadata/Authoring/SchemaValidator.md +++ b/docs/reference/libraries/Dataverse/Metadata/Authoring/SchemaValidator.md @@ -35,10 +35,18 @@ Validates a `PPDS.Dataverse.Metadata.Authoring.CreateKeyRequest`. Key attributes #### ValidateCreateManyToManyRequest -`void ValidateCreateManyToManyRequest(CreateManyToManyRequest request, string publisherPrefix)` +`void ValidateCreateManyToManyRequest(CreateManyToManyRequest request, string publisherPrefix, string resolvedIntersectSchemaName)` Validates a `PPDS.Dataverse.Metadata.Authoring.CreateManyToManyRequest`. +- Param `request`: The request to validate. + +- Param `publisherPrefix`: The publisher prefix resolved from the target solution. + +- Param `resolvedIntersectSchemaName`: The intersect-entity schema name after caller-supplied defaulting (typically +`PPDS.Dataverse.Metadata.Authoring.CreateManyToManyRequest.IntersectEntitySchemaName` falling back to +`PPDS.Dataverse.Metadata.Authoring.CreateManyToManyRequest.SchemaName`). Required by the Dataverse SDK. + #### ValidateCreateOneToManyRequest `void ValidateCreateOneToManyRequest(CreateOneToManyRequest request, string publisherPrefix)` diff --git a/docs/reference/libraries/Dataverse/Metadata/Authoring/StatusReasonInfo.md b/docs/reference/libraries/Dataverse/Metadata/Authoring/StatusReasonInfo.md new file mode 100644 index 0000000..b501d23 --- /dev/null +++ b/docs/reference/libraries/Dataverse/Metadata/Authoring/StatusReasonInfo.md @@ -0,0 +1,46 @@ + + +# StatusReasonInfo + +- Namespace: `PPDS.Dataverse.Metadata.Authoring` +- Assembly: `PPDS.Dataverse` +- Kind: Class + +## Summary + +Projection of a statuscode option value for list output. + +## Members + +### Properties + +#### Color + +`string Color { get; set; }` + +Hex color string, or null. + +#### Label + +`string Label { get; set; }` + +Display label. + +#### StateCode + +`int StateCode { get; set; }` + +State code: 0 (Active) or 1 (Inactive). + +#### StateLabel + +`string StateLabel { get; set; }` + +Human-readable state label ("Active" or "Inactive"). + +#### Value + +`int Value { get; set; }` + +Numeric option value. + diff --git a/docs/reference/libraries/Dataverse/Metadata/Authoring/UpdateColumnOptionRequest.md b/docs/reference/libraries/Dataverse/Metadata/Authoring/UpdateColumnOptionRequest.md new file mode 100644 index 0000000..d7cc327 --- /dev/null +++ b/docs/reference/libraries/Dataverse/Metadata/Authoring/UpdateColumnOptionRequest.md @@ -0,0 +1,71 @@ + + +# UpdateColumnOptionRequest + +- Namespace: `PPDS.Dataverse.Metadata.Authoring` +- Assembly: `PPDS.Dataverse` +- Kind: Class + +## Summary + +Request to update an option on a column-scoped (local) option set (#1161). +Target the option by `PPDS.Dataverse.Metadata.Authoring.UpdateColumnOptionRequest.Value` or `PPDS.Dataverse.Metadata.Authoring.UpdateColumnOptionRequest.Label` (exactly one). + +## Members + +### Properties + +#### Color + +`string Color { get; set; }` + +Gets or sets the new color (hex string, optional). + +#### ColumnLogicalName + +`string ColumnLogicalName { get; set; }` + +Gets or sets the logical name of the Choice/Choices column. + +#### DryRun + +`bool DryRun { get; set; }` + +Gets or sets whether to validate only, without persisting changes. + +#### EntityLogicalName + +`string EntityLogicalName { get; set; }` + +Gets or sets the entity logical name owning the column. + +#### Label + +`string Label { get; set; }` + +Gets or sets the target option current label (mutually exclusive with `PPDS.Dataverse.Metadata.Authoring.UpdateColumnOptionRequest.Value`). + +#### NewLabel + +`string NewLabel { get; set; }` + +Gets or sets the new label to apply (optional). + +#### Publish + +`bool Publish { get; set; }` + +Gets or sets whether to publish the entity after the change. + +#### SolutionUniqueName + +`string SolutionUniqueName { get; set; }` + +Gets or sets the solution unique name. + +#### Value + +`Nullable Value { get; set; }` + +Gets or sets the target option value (mutually exclusive with `PPDS.Dataverse.Metadata.Authoring.UpdateColumnOptionRequest.Label`). + diff --git a/docs/reference/libraries/Dataverse/Metadata/Authoring/UpdateColumnRequest.md b/docs/reference/libraries/Dataverse/Metadata/Authoring/UpdateColumnRequest.md index 9bdf174..3d98354 100644 --- a/docs/reference/libraries/Dataverse/Metadata/Authoring/UpdateColumnRequest.md +++ b/docs/reference/libraries/Dataverse/Metadata/Authoring/UpdateColumnRequest.md @@ -98,6 +98,12 @@ Gets or sets the updated minimum value. Gets or sets the updated precision. +#### Publish + +`bool Publish { get; set; }` + +Gets or sets whether to publish the entity after the column is updated (#1171). + #### RequiredLevel `string RequiredLevel { get; set; }` diff --git a/docs/reference/libraries/Dataverse/Metadata/Authoring/UpdateOptionValueRequest.md b/docs/reference/libraries/Dataverse/Metadata/Authoring/UpdateOptionValueRequest.md index 32e64d3..97792d3 100644 --- a/docs/reference/libraries/Dataverse/Metadata/Authoring/UpdateOptionValueRequest.md +++ b/docs/reference/libraries/Dataverse/Metadata/Authoring/UpdateOptionValueRequest.md @@ -9,6 +9,8 @@ ## Summary Request to update an existing option value in an option set. +Target the option by `PPDS.Dataverse.Metadata.Authoring.UpdateOptionValueRequest.Value` or `PPDS.Dataverse.Metadata.Authoring.UpdateOptionValueRequest.Label` (exactly one); +`PPDS.Dataverse.Metadata.Authoring.UpdateOptionValueRequest.NewLabel` carries the updated label (#1170). ## Members @@ -32,6 +34,12 @@ Gets or sets the updated color for the option (hex string). Gets or sets the updated description for the option. +#### DryRun + +`bool DryRun { get; set; }` + +Gets or sets whether this is a dry-run (validation only, no changes persisted) (#1172). + #### EntityLogicalName `string EntityLogicalName { get; set; }` @@ -42,7 +50,13 @@ Gets or sets the entity logical name (for local option sets). `string Label { get; set; }` -Gets or sets the updated label for the option. +Gets or sets the target option current label (mutually exclusive with `PPDS.Dataverse.Metadata.Authoring.UpdateOptionValueRequest.Value`). + +#### NewLabel + +`string NewLabel { get; set; }` + +Gets or sets the new label to apply (optional; the current label is preserved when omitted). #### OptionSetName @@ -58,7 +72,7 @@ Gets or sets the unique name of the solution containing the option set. #### Value -`int Value { get; set; }` +`Nullable Value { get; set; }` -Gets or sets the numeric value of the option to update. +Gets or sets the target option value (mutually exclusive with `PPDS.Dataverse.Metadata.Authoring.UpdateOptionValueRequest.Label`). diff --git a/docs/reference/libraries/Dataverse/Metadata/Authoring/UpdateStatusReasonRequest.md b/docs/reference/libraries/Dataverse/Metadata/Authoring/UpdateStatusReasonRequest.md new file mode 100644 index 0000000..f405402 --- /dev/null +++ b/docs/reference/libraries/Dataverse/Metadata/Authoring/UpdateStatusReasonRequest.md @@ -0,0 +1,58 @@ + + +# UpdateStatusReasonRequest + +- Namespace: `PPDS.Dataverse.Metadata.Authoring` +- Assembly: `PPDS.Dataverse` +- Kind: Class + +## Summary + +Request to update an existing status reason on an entity. + +## Members + +### Properties + +#### Color + +`string Color { get; set; }` + +New color to apply. + +#### EntityLogicalName + +`string EntityLogicalName { get; set; }` + +Logical name of the entity. + +#### Label + +`string Label { get; set; }` + +Target by label (exactly one of Value/Label required). + +#### NewLabel + +`string NewLabel { get; set; }` + +New label to apply. + +#### Publish + +`bool Publish { get; set; }` + +Publish the entity after the change. + +#### SolutionUniqueName + +`string SolutionUniqueName { get; set; }` + +Solution unique name. + +#### Value + +`Nullable Value { get; set; }` + +Target by value (exactly one of Value/Label required). + diff --git a/docs/reference/libraries/Dataverse/Metadata/Authoring/UpdateTableRequest.md b/docs/reference/libraries/Dataverse/Metadata/Authoring/UpdateTableRequest.md index 2b259bf..6c7c6ae 100644 --- a/docs/reference/libraries/Dataverse/Metadata/Authoring/UpdateTableRequest.md +++ b/docs/reference/libraries/Dataverse/Metadata/Authoring/UpdateTableRequest.md @@ -62,6 +62,24 @@ Gets or sets whether the table supports activities. Gets or sets whether the table supports notes (annotations). +#### IconMediumName + +`string IconMediumName { get; set; }` + +Gets or sets the 32×32 icon web resource logical name. + +#### IconSmallName + +`string IconSmallName { get; set; }` + +Gets or sets the 16×16 icon web resource logical name. + +#### IconVectorName + +`string IconVectorName { get; set; }` + +Gets or sets the SVG vector icon web resource logical name (used as primary icon in modern Dataverse). + #### IsAuditEnabled `Nullable IsAuditEnabled { get; set; }` @@ -92,6 +110,12 @@ Gets or sets whether the table is valid for queues. Gets or sets the updated plural display name. +#### Publish + +`bool Publish { get; set; }` + +Gets or sets whether to publish the entity after it is updated (#1171). + #### SolutionUniqueName `string SolutionUniqueName { get; set; }` diff --git a/docs/reference/libraries/Dataverse/Metadata/Models/AttributeMetadataDto.md b/docs/reference/libraries/Dataverse/Metadata/Models/AttributeMetadataDto.md index 4f63928..b83eea9 100644 --- a/docs/reference/libraries/Dataverse/Metadata/Models/AttributeMetadataDto.md +++ b/docs/reference/libraries/Dataverse/Metadata/Models/AttributeMetadataDto.md @@ -56,12 +56,30 @@ Gets whether the attribute can be secured for read operations. Gets whether the attribute can be secured for update operations. +#### ColumnNumber + +`Nullable ColumnNumber { get; set; }` + +Gets the physical column number of the attribute. + +#### CreatedOn + +`Nullable CreatedOn { get; set; }` + +Gets when the attribute was created. + #### DateTimeBehavior `string DateTimeBehavior { get; set; }` Gets the date time behavior for datetime attributes. +#### DeprecatedVersion + +`string DeprecatedVersion { get; set; }` + +Gets the version when this attribute was deprecated. + #### Description `string Description { get; set; }` @@ -74,6 +92,12 @@ Gets the description of the attribute. Gets the attribute display name. +#### ExternalName + +`string ExternalName { get; set; }` + +Gets the external name for virtual entity providers. + #### Format `string Format { get; set; }` @@ -92,12 +116,24 @@ Gets the formula definition for calculated fields. Gets the version when this attribute was introduced. +#### IsAuditEnabled + +`bool IsAuditEnabled { get; set; }` + +Gets whether auditing is enabled for this attribute. + #### IsCustomAttribute `bool IsCustomAttribute { get; set; }` Gets whether this is a custom attribute. +#### IsCustomizable + +`bool IsCustomizable { get; set; }` + +Gets whether the attribute is customizable. + #### IsFilterable `bool IsFilterable { get; set; }` @@ -134,6 +170,12 @@ Gets whether this attribute is the primary ID. Gets whether this attribute is the primary name. +#### IsRenameable + +`bool IsRenameable { get; set; }` + +Gets whether the attribute can be renamed. + #### IsRetrievable `bool IsRetrievable { get; set; }` @@ -158,6 +200,12 @@ Gets whether field-level security is enabled for this attribute. Gets whether the attribute is sortable. +#### IsValidForAdvancedFind + +`bool IsValidForAdvancedFind { get; set; }` + +Gets whether the attribute appears in Advanced Find. + #### IsValidForCreate `bool IsValidForCreate { get; set; }` @@ -218,6 +266,12 @@ Gets the unique metadata identifier. Gets the minimum value for numeric attributes. +#### ModifiedOn + +`Nullable ModifiedOn { get; set; }` + +Gets when the attribute was last modified. + #### OptionSetName `string OptionSetName { get; set; }` diff --git a/docs/reference/libraries/Dataverse/_index.md b/docs/reference/libraries/Dataverse/_index.md new file mode 100644 index 0000000..b2aeea5 --- /dev/null +++ b/docs/reference/libraries/Dataverse/_index.md @@ -0,0 +1,329 @@ + + +# Dataverse reference + +## Interfaces + +| Type | Summary | +|------|---------| +| [IBulkOperationExecutor](./BulkOperations/IBulkOperationExecutor.md) | Executes bulk operations using modern Dataverse APIs. | +| [ICachedMetadataProvider](./Metadata/ICachedMetadataProvider.md) | Provides cached access to Dataverse metadata for IntelliSense and entity browsing. | +| [IConnectionSelectionStrategy](./Pooling/Strategies/IConnectionSelectionStrategy.md) | Strategy for selecting which connection to use from the pool. | +| [IConnectionSource](./Pooling/IConnectionSource.md) | Provides a seed ServiceClient for the connection pool to clone. | +| [IDataverseClient](./Client/IDataverseClient.md) | Abstraction over ServiceClient providing core Dataverse operations. | +| [IDataverseConnectionPool](./Pooling/IDataverseConnectionPool.md) | Manages a pool of Dataverse connections with intelligent selection and lifecycle management. | +| [IMetadataAuthoringProgressReporter](./Metadata/Authoring/IMetadataAuthoringProgressReporter.md) | Lightweight progress reporter for metadata authoring operations. | +| [IMetadataQueryExecutor](./Metadata/IMetadataQueryExecutor.md) | Executes metadata queries against Dataverse, returning results as QueryRow format. | +| [IMetadataQueryService](./Metadata/IMetadataQueryService.md) | Provides access to Dataverse metadata for entity browsing and discovery. | +| [IPooledClient](./Pooling/IPooledClient.md) | A client obtained from the connection pool. | +| [IQueryExecutor](./Query/IQueryExecutor.md) | Executes FetchXML queries against Dataverse and returns structured results. | +| [IQueryPlanNode](./Query/Planning/IQueryPlanNode.md) | A node in the query execution plan tree (Volcano/iterator model). | +| [IQueryProgressReporter](./Query/Planning/IQueryProgressReporter.md) | Lightweight progress reporter for query plan execution. | +| [IScalarFunction](./Query/Execution/Functions/IScalarFunction.md) | A scalar function that accepts arguments and returns a single value. | +| [ISourceTokenizer](./Sql/Intellisense/ISourceTokenizer.md) | Produces source tokens for syntax highlighting. | +| [ITdsQueryExecutor](./Query/ITdsQueryExecutor.md) | Executes SQL queries against Dataverse's TDS Endpoint (read-only replica) | +| [IThrottleTracker](./Resilience/IThrottleTracker.md) | Tracks throttle state across connections. | + +## Classes + +| Type | Summary | +|------|---------| +| [AdaptiveAggregateScanNode](./Query/Planning/Nodes/AdaptiveAggregateScanNode.md) | Wraps a FetchXML aggregate scan with adaptive retry. When the Dataverse | +| [AdaptiveBatchSizer](./BulkOperations/AdaptiveBatchSizer.md) | Dynamically adjusts DML batch size based on observed execution times. | +| [AdaptiveThrottleManager](./BulkOperations/AdaptiveThrottleManager.md) | Dynamically adjusts the degree of parallelism (DOP) for bulk DML operations | +| [AddColumnOptionRequest](./Metadata/Authoring/AddColumnOptionRequest.md) | Request to add an option to a column-scoped (local) option set (#1161). | +| [AddOptionValueRequest](./Metadata/Authoring/AddOptionValueRequest.md) | Request to add a new option value to an existing option set. | +| [AddStatusReasonRequest](./Metadata/Authoring/AddStatusReasonRequest.md) | Request to add a status reason (statuscode option value) to an entity. | +| [AsyncOperation](./Generated/AsyncOperation.md) | Process whose execution can proceed independently or in the background. | +| [AttributeMetadataDto](./Metadata/Models/AttributeMetadataDto.md) | Detailed attribute metadata for entity browsing. | +| [AuthenticationErrorDetector](./Resilience/AuthenticationErrorDetector.md) | Detects authentication and authorization failures from Dataverse operations. | +| [BatchCoordinatorExhaustedException](./BulkOperations/BatchCoordinatorExhaustedException.md) | Thrown when batch coordinator cannot acquire a slot within timeout. | +| [BatchFailureDiagnostic](./BulkOperations/BatchFailureDiagnostic.md) | Diagnostic information for identifying the cause of a batch failure. | +| [BatchParallelismCoordinator](./BulkOperations/BatchParallelismCoordinator.md) | Coordinates batch parallelism across all concurrent bulk operations. | +| [BulkOperationError](./BulkOperations/BulkOperationError.md) | Error details for a failed record in a bulk operation. | +| [BulkOperationErrorCode](./BulkOperations/BulkOperationErrorCode.md) | Structured error codes for bulk operation validation failures. | +| [BulkOperationExecutor](./BulkOperations/BulkOperationExecutor.md) | Executes bulk operations using modern Dataverse APIs. | +| [BulkOperationOptions](./BulkOperations/BulkOperationOptions.md) | Configuration options for bulk operations. | +| [BulkOperationValidationException](./BulkOperations/BulkOperationValidationException.md) | Exception thrown when bulk operation configuration fails validation. | +| [CachedMetadataProvider](./Metadata/CachedMetadataProvider.md) | Provides cached access to Dataverse metadata, wrapping `PPDS.Dataverse.Metadata.IMetadataQueryService` | +| [CascadeConfigurationDto](./Metadata/Authoring/CascadeConfigurationDto.md) | Defines the cascade behavior configuration for a relationship. | +| [CastConverter](./Query/Execution/Functions/CastConverter.md) | Implements T-SQL CAST/CONVERT type conversion semantics. | +| [ClientAggregateColumn](./Query/Planning/Nodes/ClientAggregateColumn.md) | Describes an aggregate column for client-side computation. | +| [ClientAggregateNode](./Query/Planning/Nodes/ClientAggregateNode.md) | Computes aggregate functions client-side from raw (non-aggregated) input rows. | +| [ClientFilterNode](./Query/Planning/Nodes/ClientFilterNode.md) | Filters rows by evaluating a condition client-side. | +| [ClientWindowNode](./Query/Planning/Nodes/ClientWindowNode.md) | Computes window functions (ROW_NUMBER, RANK, DENSE_RANK, aggregate OVER) client-side. | +| [ColumnOptionInfo](./Metadata/Authoring/ColumnOptionInfo.md) | Projection of a single option on a column-scoped (local) option set (#1161). | +| [CompiledPredicate](./Query/Execution/CompiledPredicate.md) | Compiled predicate: evaluates against a row and returns true/false. | +| [CompiledScalarExpression](./Query/Execution/CompiledScalarExpression.md) | Compiled scalar expression: evaluates against a row and returns a value. | +| [ConcatenateNode](./Query/Planning/Nodes/ConcatenateNode.md) | Concatenates rows from multiple child nodes sequentially. | +| [ConfigurationException](./Configuration/ConfigurationException.md) | Exception thrown when Dataverse configuration is invalid. | +| [ConnectionPoolOptions](./Pooling/ConnectionPoolOptions.md) | Configuration options for the Dataverse connection pool. | +| [ConnectionStatistics](./Pooling/ConnectionStatistics.md) | Statistics for a specific connection configuration. | +| [ConnectionStringBuilder](./Configuration/ConnectionStringBuilder.md) | Builds Dataverse connection strings from typed configuration. | +| [ConnectionStringRedactor](./Security/ConnectionStringRedactor.md) | Provides utilities for redacting sensitive information from connection strings | +| [ConnectionStringSource](./Pooling/ConnectionStringSource.md) | Connection source that creates a ServiceClient from connection string configuration. | +| [CorrelationIdScope](./Diagnostics/CorrelationIdScope.md) | Ambient correlation-ID scope shared by the CLI, the RPC daemon, and every | +| [CreateChoiceResult](./Metadata/Authoring/CreateChoiceResult.md) | Result of a create global choice operation. | +| [CreateColumnRequest](./Metadata/Authoring/CreateColumnRequest.md) | Request to create a new column (attribute) on a Dataverse table. | +| [CreateColumnResult](./Metadata/Authoring/CreateColumnResult.md) | Result of a create column operation. | +| [CreateGlobalChoiceRequest](./Metadata/Authoring/CreateGlobalChoiceRequest.md) | Request to create a new global choice (option set) in Dataverse. | +| [CreateKeyRequest](./Metadata/Authoring/CreateKeyRequest.md) | Request to create an alternate key on a Dataverse table. | +| [CreateKeyResult](./Metadata/Authoring/CreateKeyResult.md) | Result of a create alternate key operation. | +| [CreateManyToManyRequest](./Metadata/Authoring/CreateManyToManyRequest.md) | Request to create a many-to-many (N:N) relationship between two Dataverse tables. | +| [CreateOneToManyRequest](./Metadata/Authoring/CreateOneToManyRequest.md) | Request to create a one-to-many (1:N) relationship between two Dataverse tables. | +| [CreateRelationshipResult](./Metadata/Authoring/CreateRelationshipResult.md) | Result of a create relationship operation. | +| [CreateTableRequest](./Metadata/Authoring/CreateTableRequest.md) | Request to create a new Dataverse table (entity). | +| [CreateTableResult](./Metadata/Authoring/CreateTableResult.md) | Result of a create table operation. | +| [CustomAPI](./Generated/CustomAPI.md) | Entity that defines a custom API | +| [CustomAPIRequestParameter](./Generated/CustomAPIRequestParameter.md) | Entity that defines a request parameter for a custom API | +| [CustomAPIResponseProperty](./Generated/CustomAPIResponseProperty.md) | Entity that defines a response property for a custom API | +| [DataverseAuthenticationException](./Resilience/DataverseAuthenticationException.md) | Exception thrown when a Dataverse operation fails due to authentication or authorization issues. | +| [DataverseClient](./Client/DataverseClient.md) | Implementation of `PPDS.Dataverse.Client.IDataverseClient` that wraps a `Microsoft.PowerPlatform.Dataverse.Client.ServiceClient`. | +| [DataverseClientOptions](./Client/DataverseClientOptions.md) | Options for configuring a Dataverse client request. | +| [DataverseConnection](./Pooling/DataverseConnection.md) | Configuration for a Dataverse connection (Application User / Service Principal). | +| [DataverseConnectionException](./Security/DataverseConnectionException.md) | Exception thrown when a Dataverse connection fails. | +| [DataverseConnectionPool](./Pooling/DataverseConnectionPool.md) | High-performance connection pool for Dataverse with multi-connection support. | +| [DataverseEnvironmentOptions](./Configuration/DataverseEnvironmentOptions.md) | Configuration for a named Dataverse environment. | +| [DataverseFunctions](./Query/Execution/Functions/DataverseFunctions.md) | Dataverse-specific functions evaluated client-side. | +| [DataverseMetadataQueryService](./Metadata/DataverseMetadataQueryService.md) | Provides access to Dataverse metadata using the SDK. | +| [DataverseOptions](./DependencyInjection/DataverseOptions.md) | Root configuration options for Dataverse connection pooling and operations. | +| [DateFunctions](./Query/Execution/Functions/DateFunctions.md) | T-SQL date/time functions evaluated client-side. | +| [DateRangePartition](./Query/Planning/Partitioning/DateRangePartition.md) | A single date range partition with non-overlapping boundaries. | +| [DateRangePartitioner](./Query/Planning/Partitioning/DateRangePartitioner.md) | Generates non-overlapping date range partitions for splitting aggregate queries | +| [DeleteColumnRequest](./Metadata/Authoring/DeleteColumnRequest.md) | Request to delete a column (attribute) from a Dataverse table. | +| [DeleteDryRunResult](./Metadata/Authoring/DeleteDryRunResult.md) | Result of a delete dry-run operation, listing dependencies that would block deletion. | +| [DeleteGlobalChoiceRequest](./Metadata/Authoring/DeleteGlobalChoiceRequest.md) | Request to delete a global choice (option set) from Dataverse. | +| [DeleteKeyRequest](./Metadata/Authoring/DeleteKeyRequest.md) | Request to delete an alternate key from a Dataverse table. | +| [DeleteOptionValueRequest](./Metadata/Authoring/DeleteOptionValueRequest.md) | Request to delete an option value from an option set. | +| [DeleteRelationshipRequest](./Metadata/Authoring/DeleteRelationshipRequest.md) | Request to delete a Dataverse relationship. | +| [DeleteTableRequest](./Metadata/Authoring/DeleteTableRequest.md) | Request to delete a Dataverse table (entity). | +| [DependencyInfo](./Metadata/Authoring/DependencyInfo.md) | Describes a single component dependency found during a delete dry-run. | +| [DistinctNode](./Query/Planning/Nodes/DistinctNode.md) | Deduplicates rows from a single input using a composite key hash set. | +| [DmlExecuteNode](./Query/Planning/Nodes/DmlExecuteNode.md) | Executes DML operations (INSERT, UPDATE, DELETE) using BulkOperationExecutor. | +| [DmlValueCoercer](./Query/DmlValueCoercer.md) | Coerces raw CLR values from SQL DML into Dataverse SDK-typed values | +| [EntityDataProvider](./Generated/EntityDataProvider.md) | Developers can register plug-ins on a data provider to enable data access for virtual entities in the system. | +| [EntityKeyDto](./Metadata/Models/EntityKeyDto.md) | Represents an alternate key definition for an entity. | +| [EntityMetadataDto](./Metadata/Models/EntityMetadataDto.md) | Full entity metadata including attributes, relationships, keys, and privileges. | +| [EntityRelationshipsDto](./Metadata/Models/EntityRelationshipsDto.md) | Container for all relationship types for an entity. | +| [EntitySummary](./Metadata/Models/EntitySummary.md) | Summary information for an entity in list views. | +| [EnvironmentResolver](./Configuration/EnvironmentResolver.md) | Resolves named environments from DataverseOptions. | +| [EnvironmentVariableDefinition](./Generated/EnvironmentVariableDefinition.md) | Contains information about the settable variable: its type, default value, and etc. | +| [EnvironmentVariableValue](./Generated/EnvironmentVariableValue.md) | Holds the value for the associated EnvironmentVariableDefinition entity. | +| [ErrorFunctions](./Query/Execution/Functions/ErrorFunctions.md) | T-SQL error functions for TRY/CATCH blocks. | +| [FetchXmlScanNode](./Query/Planning/Nodes/FetchXmlScanNode.md) | Executes a FetchXML query and yields rows page-by-page. | +| [FunctionRegistry](./Query/Execution/Functions/FunctionRegistry.md) | Registry of scalar functions available for expression evaluation. | +| [ImportJob](./Generated/ImportJob.md) | For internal use only. | +| [JsonFunctions](./Query/Execution/Functions/JsonFunctions.md) | T-SQL JSON functions evaluated client-side using System.Text.Json. | +| [LeastConnectionsStrategy](./Pooling/Strategies/LeastConnectionsStrategy.md) | Selects the connection with the fewest active clients. | +| [ListResult<T>](./Models/ListResult`1.md) | Wraps a list result with metadata about the total dataset. | +| [ManyToManyRelationshipDto](./Metadata/Models/ManyToManyRelationshipDto.md) | Represents a many-to-many relationship. | +| [MathFunctions](./Query/Execution/Functions/MathFunctions.md) | T-SQL math functions evaluated client-side. | +| [MergeAggregateColumn](./Query/Planning/Nodes/MergeAggregateColumn.md) | Describes an aggregate column to be merged. | +| [MergeAggregateNode](./Query/Planning/Nodes/MergeAggregateNode.md) | Merges partial aggregate results from parallel partitions. | +| [MetadataErrorCodes](./Metadata/Authoring/MetadataErrorCodes.md) | Machine-readable error codes for metadata authoring validation failures. | +| [MetadataQueryExecutor](./Metadata/MetadataQueryExecutor.md) | Queries Dataverse metadata via `PPDS.Dataverse.Metadata.IMetadataQueryService` and returns results | +| [MetadataScanNode](./Query/Planning/Nodes/MetadataScanNode.md) | Scan node that queries Dataverse metadata API instead of entity data. | +| [MetadataTableDefinitions](./Metadata/MetadataTableDefinitions.md) | Defines the schema of metadata virtual tables. | +| [MetadataValidationException](./Metadata/Authoring/MetadataValidationException.md) | Thrown when metadata authoring validation fails. | +| [NodeStatistics](./Query/Planning/NodeStatistics.md) | Statistics for a single plan node. Thread-safe via Interlocked operations. | +| [NullFunctions](./Query/Execution/Functions/NullFunctions.md) | T-SQL null-handling functions evaluated client-side. | +| [OptionDefinition](./Metadata/Authoring/OptionDefinition.md) | Defines a single option value for a choice or choices column. | +| [OptionSetMetadataDto](./Metadata/Models/OptionSetMetadataDto.md) | Full option set metadata including all values. | +| [OptionSetSummary](./Metadata/Models/OptionSetSummary.md) | Summary information for a global option set in list views. | +| [OptionValueDeriver](./Metadata/Authoring/OptionValueDeriver.md) | Pure helper that picks a numeric option value for status-reason add and local-column option-add. | +| [OptionValueDto](./Metadata/Models/OptionValueDto.md) | Represents a single option value in an option set. | +| [ParallelPartitionNode](./Query/Planning/Nodes/ParallelPartitionNode.md) | Executes child plan nodes in parallel, limited by pool capacity. | +| [PlanExecutor](./Query/Execution/PlanExecutor.md) | Executes a query plan by consuming the root node's IAsyncEnumerable | +| [PlanFormatter](./Query/Planning/PlanFormatter.md) | Formats an execution plan tree as indented text for EXPLAIN output. | +| [PluginAssembly](./Generated/PluginAssembly.md) | Assembly that contains one or more plug-in types. | +| [PluginTraceLog](./Generated/PluginTraceLog.md) | Trace and exception information generated by plug-ins and custom workflow activities. | +| [PluginType](./Generated/PluginType.md) | Type that inherits from the IPlugin interface and is contained within a plug-in assembly. | +| [PoolExhaustedException](./Pooling/PoolExhaustedException.md) | Exception thrown when the connection pool is exhausted and no connection | +| [PoolStatistics](./Pooling/PoolStatistics.md) | Statistics and health information for the connection pool. | +| [PooledClientExtensions](./Pooling/PooledClientExtensions.md) | Extension methods on `PPDS.Dataverse.Pooling.IPooledClient` for common Dataverse SDK operations | +| [PrefetchScanNode](./Query/Planning/Nodes/PrefetchScanNode.md) | Wraps any IQueryPlanNode to speculatively prefetch rows into a bounded buffer. | +| [PrivilegeDto](./Metadata/Models/PrivilegeDto.md) | Represents a security privilege for an entity. | +| [ProgressSnapshot](./Progress/ProgressSnapshot.md) | Immutable snapshot of progress state at a point in time. | +| [ProgressTracker](./Progress/ProgressTracker.md) | Thread-safe progress tracker for bulk operations. | +| [ProjectColumn](./Query/Planning/Nodes/ProjectColumn.md) | Defines a column in a ProjectNode's output. | +| [ProjectNode](./Query/Planning/Nodes/ProjectNode.md) | Maps input rows to output rows (column selection, renaming, expression evaluation). | +| [Publisher](./Generated/Publisher.md) | A publisher of a CRM solution. | +| [QueryColumn](./Query/QueryColumn.md) | Represents a column in a query result with its metadata. | +| [QueryErrorCode](./Query/Execution/QueryErrorCode.md) | Structured error codes for query execution failures. | +| [QueryExecutionException](./Query/Execution/QueryExecutionException.md) | Exception thrown during query plan execution with a structured error code. | +| [QueryExecutor](./Query/QueryExecutor.md) | Executes FetchXML queries against Dataverse using the connection pool. | +| [QueryPlanContext](./Query/Planning/QueryPlanContext.md) | Shared context for plan execution: pool, cancellation, statistics. | +| [QueryPlanDescription](./Query/Planning/QueryPlanDescription.md) | Describes an execution plan for display (EXPLAIN output). | +| [QueryPlanOptions](./Query/Planning/QueryPlanOptions.md) | Options for query plan construction. | +| [QueryPlanResult](./Query/Planning/QueryPlanResult.md) | The result of building an execution plan: the root plan node plus metadata | +| [QueryPlanStatistics](./Query/Planning/QueryPlanStatistics.md) | Mutable statistics collected during plan execution. | +| [QueryResult](./Query/QueryResult.md) | Represents the result of a query execution against Dataverse. | +| [QueryRow](./Query/Planning/QueryRow.md) | A single row flowing through the plan. Lightweight wrapper around column values. | +| [QueryValue](./Query/QueryValue.md) | Represents a value in a query result, including both the raw value | +| [ReactivateKeyRequest](./Metadata/Authoring/ReactivateKeyRequest.md) | Request to reactivate a failed alternate key on a Dataverse table. | +| [RelationshipMetadataDto](./Metadata/Models/RelationshipMetadataDto.md) | Represents a one-to-many or many-to-one relationship. | +| [RemoteScanNode](./Query/Planning/Nodes/RemoteScanNode.md) | Executes a FetchXML query against a remote environment's connection pool. | +| [RemoveColumnOptionRequest](./Metadata/Authoring/RemoveColumnOptionRequest.md) | Request to remove an option from a column-scoped (local) option set (#1161). | +| [RemoveStatusReasonRequest](./Metadata/Authoring/RemoveStatusReasonRequest.md) | Request to remove a status reason from an entity. | +| [ReorderOptionsRequest](./Metadata/Authoring/ReorderOptionsRequest.md) | Request to reorder the option values in an option set. | +| [ResilienceOptions](./Resilience/ResilienceOptions.md) | Configuration options for resilience and retry behavior. | +| [Role](./Generated/Role.md) | Grouping of security privileges. Users are assigned roles that authorize their access to the Microsoft CRM system. | +| [RoundRobinStrategy](./Pooling/Strategies/RoundRobinStrategy.md) | Simple round-robin rotation through available connections. | +| [SchemaValidator](./Metadata/Authoring/SchemaValidator.md) | Validates metadata authoring requests before SDK calls. | +| [SdkMessage](./Generated/SdkMessage.md) | Message that is supported by the SDK. | +| [SdkMessageFilter](./Generated/SdkMessageFilter.md) | Filter that defines which SDK messages are valid for each type of entity. | +| [SdkMessageProcessingStep](./Generated/SdkMessageProcessingStep.md) | Stage in the execution pipeline that a plug-in is to execute. | +| [SdkMessageProcessingStepImage](./Generated/SdkMessageProcessingStepImage.md) | Copy of an entity's attributes before or after the core system operation. | +| [SecretResolver](./Configuration/SecretResolver.md) | Resolves secrets from various sources. | +| [SeedInitializationResult](./Pooling/SeedInitializationResult.md) | Result of initializing a seed connection for a pool source. | +| [SensitiveDataAttribute](./Security/SensitiveDataAttribute.md) | Marks a property or field as containing sensitive data that should not be logged or displayed. | +| [ServiceClientSource](./Pooling/ServiceClientSource.md) | Connection source for pre-authenticated ServiceClients. | +| [ServiceCollectionExtensions](./DependencyInjection/ServiceCollectionExtensions.md) | Extension methods for configuring Dataverse services in an `Microsoft.Extensions.DependencyInjection.IServiceCollection`. | +| [ServiceEndpoint](./Generated/ServiceEndpoint.md) | Service endpoint that can be contacted. | +| [ServiceProtectionException](./Resilience/ServiceProtectionException.md) | Exception thrown when a service protection limit is hit. | +| [Solution](./Generated/Solution.md) | A solution which contains CRM customizations. | +| [SolutionComponent](./Generated/SolutionComponent.md) | A component of a CRM solution. | +| [SqlCursorContextResult](./Sql/Intellisense/SqlCursorContextResult.md) | Result of cursor context analysis for SQL IntelliSense. | +| [StatusReasonInfo](./Metadata/Authoring/StatusReasonInfo.md) | Projection of a statuscode option value for list output. | +| [StringFunctions](./Query/Execution/Functions/StringFunctions.md) | T-SQL string functions evaluated client-side. | +| [SystemUser](./Generated/SystemUser.md) | Person with access to the Microsoft CRM system and who owns objects in the Microsoft CRM database. | +| [TdsCompatibilityChecker](./Query/TdsCompatibilityChecker.md) | Determines whether a SQL query can be executed via the Dataverse TDS Endpoint. | +| [TdsQueryExecutor](./Query/TdsQueryExecutor.md) | Executes SQL queries against Dataverse's TDS Endpoint using the SQL Server wire protocol. | +| [TdsScanNode](./Query/Planning/Nodes/TdsScanNode.md) | Executes a SQL query directly against the Dataverse TDS Endpoint. | +| [ThrottleAwareStrategy](./Pooling/Strategies/ThrottleAwareStrategy.md) | Avoids throttled connections and falls back to round-robin among available connections. | +| [ThrottleState](./Resilience/ThrottleState.md) | Represents the throttle state for a connection. | +| [ThrottleTracker](./Resilience/ThrottleTracker.md) | Tracks throttle state for connections using a thread-safe concurrent dictionary. | +| [TranspileResult](./Sql/Transpilation/TranspileResult.md) | Result of SQL to FetchXML transpilation, including virtual column metadata. | +| [UpdateColumnOptionRequest](./Metadata/Authoring/UpdateColumnOptionRequest.md) | Request to update an option on a column-scoped (local) option set (#1161). | +| [UpdateColumnRequest](./Metadata/Authoring/UpdateColumnRequest.md) | Request to update an existing column (attribute) on a Dataverse table. | +| [UpdateGlobalChoiceRequest](./Metadata/Authoring/UpdateGlobalChoiceRequest.md) | Request to update an existing global choice (option set) in Dataverse. | +| [UpdateOptionValueRequest](./Metadata/Authoring/UpdateOptionValueRequest.md) | Request to update an existing option value in an option set. | +| [UpdateRelationshipRequest](./Metadata/Authoring/UpdateRelationshipRequest.md) | Request to update an existing Dataverse relationship. | +| [UpdateStateValueRequest](./Metadata/Authoring/UpdateStateValueRequest.md) | Request to update a state or status option value label. | +| [UpdateStatusReasonRequest](./Metadata/Authoring/UpdateStatusReasonRequest.md) | Request to update an existing status reason on an entity. | +| [UpdateTableRequest](./Metadata/Authoring/UpdateTableRequest.md) | Request to update an existing Dataverse table (entity). | +| [ValidationMessage](./Metadata/Authoring/ValidationMessage.md) | Represents a validation message produced during a dry-run or schema authoring operation. | +| [VariableScope](./Query/Execution/VariableScope.md) | Manages SQL variable declarations and values. | +| [VirtualColumnInfo](./Sql/Transpilation/VirtualColumnInfo.md) | Information about a virtual column (e.g., "owneridname" that maps to "ownerid"). | +| [WebResource](./Generated/WebResource.md) | Data equivalent to files used in Web development. Web resources provide client-side components that are used to provide custom user interface elements. | +| [WindowDefinition](./Query/Planning/Nodes/WindowDefinition.md) | Defines a single window function to compute within a ClientWindowNode. | +| [Workflow](./Generated/Workflow.md) | Set of logical rules that define the steps necessary to automate a specific business process, task, or set of actions to be performed. | + +## Records + +| Type | Summary | +|------|---------| +| [BulkOperationResult](./BulkOperations/BulkOperationResult.md) | Result of a bulk operation. | +| [CompiledOrderByItem](./Query/Planning/Nodes/CompiledOrderByItem.md) | A compiled ORDER BY item used by window functions. Contains the column name for | +| [CompiledSetClause](./Query/Planning/Nodes/CompiledSetClause.md) | A compiled SET clause for UPDATE statements. | +| [QueryExecutionOptions](./Query/QueryExecutionOptions.md) | Per-query execution options that affect how the query is sent to Dataverse. | +| [SqlCompletion](./Sql/Intellisense/SqlCompletion.md) | A single completion item for SQL IntelliSense. | +| [SqlDiagnostic](./Sql/Intellisense/SqlDiagnostic.md) | A diagnostic message for a region of SQL text (error, warning, or info). | +| [VariableInfo](./Query/Execution/VariableInfo.md) | Information about a declared SQL variable. | + +## Structs + +| Type | Summary | +|------|---------| +| [SourceToken](./Sql/Intellisense/SourceToken.md) | A token with position and classification for syntax highlighting. | + +## Enums + +| Type | Summary | +|------|---------| +| [AggregateFunction](./Query/Planning/Nodes/AggregateFunction.md) | Aggregate functions supported by MergeAggregateNode. | +| [CascadeBehavior](./Metadata/Authoring/CascadeBehavior.md) | Defines the cascade behavior options for entity relationship actions. | +| [ClientAggregateFunction](./Query/Planning/Nodes/ClientAggregateFunction.md) | Aggregate functions supported by ClientAggregateNode. | +| [ConnectionSelectionStrategy](./Pooling/ConnectionSelectionStrategy.md) | Strategy for selecting which connection to use from the pool. | +| [CustomLogicBypass](./BulkOperations/CustomLogicBypass.md) | Specifies which custom business logic to bypass during bulk operations. | +| [DataverseAuthType](./Configuration/DataverseAuthType.md) | Authentication type for Dataverse connections. | +| [DmlOperation](./Query/Planning/Nodes/DmlOperation.md) | The type of DML operation. | +| [OAuthLoginPrompt](./Configuration/OAuthLoginPrompt.md) | OAuth login prompt behavior. | +| [QueryColumnType](./Query/QueryColumnType.md) | Represents the data type of a column in a query result. | +| [SchemaColumnType](./Metadata/Authoring/SchemaColumnType.md) | Defines the supported column types for schema authoring operations. | +| [SeedFailureReason](./Pooling/SeedFailureReason.md) | Categorized reasons for seed initialization failure. | +| [SourceTokenType](./Sql/Intellisense/SourceTokenType.md) | Language-agnostic source token classification for syntax highlighting. | +| [SqlCompletionContextKind](./Sql/Intellisense/SqlCompletionContextKind.md) | The kind of completion context at a cursor position in SQL text. | +| [SqlCompletionKind](./Sql/Intellisense/SqlCompletionKind.md) | The kind of completion item in SQL IntelliSense results. | +| [SqlDiagnosticSeverity](./Sql/Intellisense/SqlDiagnosticSeverity.md) | Severity level for SQL diagnostics. | +| [TdsCompatibility](./Query/TdsCompatibility.md) | Result of a TDS Endpoint compatibility check. | +| [asyncoperation_operationtype](./Generated/asyncoperation_operationtype.md) | Type of the system job. | +| [asyncoperation_statecode](./Generated/asyncoperation_statecode.md) | Status of the system job. | +| [asyncoperation_statuscode](./Generated/asyncoperation_statuscode.md) | Reason for the status of the system job. | +| [componentstate](./Generated/componentstate.md) | The state of this component. | +| [componenttype](./Generated/componenttype.md) | All of the possible component types for solutions. | +| [connectionreference_promptingbehavior](./Generated/connectionreference_promptingbehavior.md) | This field configures how this connection reference gets prompted | +| [connectionreference_statecode](./Generated/connectionreference_statecode.md) | Status of the Connection Reference | +| [connectionreference_statuscode](./Generated/connectionreference_statuscode.md) | Reason for the status of the Connection Reference | +| [customapi_allowedcustomprocessingsteptype](./Generated/customapi_allowedcustomprocessingsteptype.md) | The Allowed Custom Processing Step Type | +| [customapi_statecode](./Generated/customapi_statecode.md) | Status of the Custom API | +| [customapi_statuscode](./Generated/customapi_statuscode.md) | Reason for the status of the Custom API | +| [customapifieldtype](./Generated/customapifieldtype.md) | Custom API Field Types | +| [customapirequestparameter_statecode](./Generated/customapirequestparameter_statecode.md) | Status of the Custom API Request Parameter | +| [customapirequestparameter_statuscode](./Generated/customapirequestparameter_statuscode.md) | Reason for the status of the Custom API Request Parameter | +| [customapiresponseproperty_statecode](./Generated/customapiresponseproperty_statecode.md) | Status of the Custom API Response Property | +| [customapiresponseproperty_statuscode](./Generated/customapiresponseproperty_statuscode.md) | Reason for the status of the Custom API Response Property | +| [environmentvariabledefinition_secretstore](./Generated/environmentvariabledefinition_secretstore.md) | The secret store where the secret is persisted. | +| [environmentvariabledefinition_statecode](./Generated/environmentvariabledefinition_statecode.md) | Status of the Environment Variable Definition | +| [environmentvariabledefinition_statuscode](./Generated/environmentvariabledefinition_statuscode.md) | Reason for the status of the Environment Variable Definition | +| [environmentvariablevalue_statecode](./Generated/environmentvariablevalue_statecode.md) | Status of the Environment Variable Value | +| [environmentvariablevalue_statuscode](./Generated/environmentvariablevalue_statuscode.md) | Reason for the status of the Environment Variable Value | +| [isinherited](./Generated/isinherited.md) | The role is inherited | +| [pluginassembly_authtype](./Generated/pluginassembly_authtype.md) | Authentication Type for the Web sources like AzureWebApp, for example 0=BasicAuth | +| [pluginassembly_isolationmode](./Generated/pluginassembly_isolationmode.md) | Information about how the plugin assembly is to be isolated at execution time; None / Sandboxed / External. | +| [pluginassembly_sourcetype](./Generated/pluginassembly_sourcetype.md) | Location of the assembly, for example 0=database, 1=on-disk, 2=Normal, 3=AzureWebApp. | +| [pluginpackage_statecode](./Generated/pluginpackage_statecode.md) | Status of the Plugin Package | +| [pluginpackage_statuscode](./Generated/pluginpackage_statuscode.md) | Reason for the status of the Plugin Package | +| [plugintracelog_mode](./Generated/plugintracelog_mode.md) | Type of Execution | +| [plugintracelog_operationtype](./Generated/plugintracelog_operationtype.md) | Type of Plugin | +| [publisher_address1_addresstypecode](./Generated/publisher_address1_addresstypecode.md) | Type of address for address 1, such as billing, shipping, or primary address. | +| [publisher_address1_shippingmethodcode](./Generated/publisher_address1_shippingmethodcode.md) | Method of shipment for address 1. | +| [publisher_address2_addresstypecode](./Generated/publisher_address2_addresstypecode.md) | Type of address for address 2. such as billing, shipping, or primary address. | +| [publisher_address2_shippingmethodcode](./Generated/publisher_address2_shippingmethodcode.md) | Method of shipment for address 2. | +| [sdkmessageprocessingstep_invocationsource](./Generated/sdkmessageprocessingstep_invocationsource.md) | Identifies if a plug-in should be executed from a parent pipeline, a child pipeline, or both. | +| [sdkmessageprocessingstep_mode](./Generated/sdkmessageprocessingstep_mode.md) | Run-time mode of execution, for example, synchronous or asynchronous. | +| [sdkmessageprocessingstep_stage](./Generated/sdkmessageprocessingstep_stage.md) | Stage in the execution pipeline that the SDK message processing step is in. | +| [sdkmessageprocessingstep_statecode](./Generated/sdkmessageprocessingstep_statecode.md) | Status of the SDK message processing step. | +| [sdkmessageprocessingstep_statuscode](./Generated/sdkmessageprocessingstep_statuscode.md) | Reason for the status of the SDK message processing step. | +| [sdkmessageprocessingstep_supporteddeployment](./Generated/sdkmessageprocessingstep_supporteddeployment.md) | Deployment that the SDK message processing step should be executed on; server, client, or both. | +| [sdkmessageprocessingstepimage_imagetype](./Generated/sdkmessageprocessingstepimage_imagetype.md) | Type of image requested. | +| [securityrole_isautoassigned](./Generated/securityrole_isautoassigned.md) | Value indicating whether security role is auto-assigned based on user license | +| [serviceendpoint_authtype](./Generated/serviceendpoint_authtype.md) | Authentication type for Service Bus | +| [serviceendpoint_connectionmode](./Generated/serviceendpoint_connectionmode.md) | Connection mode. | +| [serviceendpoint_contract](./Generated/serviceendpoint_contract.md) | Contract type. | +| [serviceendpoint_messagecharset](./Generated/serviceendpoint_messagecharset.md) | Character encoding used for messages sent to a service endpoint | +| [serviceendpoint_messageformat](./Generated/serviceendpoint_messageformat.md) | Format type. | +| [serviceendpoint_namespaceformat](./Generated/serviceendpoint_namespaceformat.md) | Format for Service Bus Namespace | +| [serviceendpoint_schematype](./Generated/serviceendpoint_schematype.md) | Schema type for Event Grid | +| [serviceendpoint_userclaim](./Generated/serviceendpoint_userclaim.md) | User claim value type. | +| [solution_solutiontype](./Generated/solution_solutiontype.md) | All possible types of solution | +| [solutioncomponent_rootcomponentbehavior](./Generated/solutioncomponent_rootcomponentbehavior.md) | Indicates the include behavior of the root component. | +| [systemuser_accessmode](./Generated/systemuser_accessmode.md) | Type of user. | +| [systemuser_address1_addresstypecode](./Generated/systemuser_address1_addresstypecode.md) | Type of address for address 1, such as billing, shipping, or primary address. | +| [systemuser_address1_shippingmethodcode](./Generated/systemuser_address1_shippingmethodcode.md) | Method of shipment for address 1. | +| [systemuser_address2_addresstypecode](./Generated/systemuser_address2_addresstypecode.md) | Type of address for address 2, such as billing, shipping, or primary address. | +| [systemuser_address2_shippingmethodcode](./Generated/systemuser_address2_shippingmethodcode.md) | Method of shipment for address 2. | +| [systemuser_azurestate](./Generated/systemuser_azurestate.md) | Azure state of user. | +| [systemuser_caltype](./Generated/systemuser_caltype.md) | License type of user. This is used only in the on-premises version of the product. Online licenses are managed through Microsoft 365 Office Portal. | +| [systemuser_deletestate](./Generated/systemuser_deletestate.md) | User delete state. | +| [systemuser_emailrouteraccessapproval](./Generated/systemuser_emailrouteraccessapproval.md) | Indicates the approval options for server-side synchronization or Email Router access. | +| [systemuser_incomingemaildeliverymethod](./Generated/systemuser_incomingemaildeliverymethod.md) | Incoming email delivery method for the user. | +| [systemuser_invitestatuscode](./Generated/systemuser_invitestatuscode.md) | User invitation status. | +| [systemuser_outgoingemaildeliverymethod](./Generated/systemuser_outgoingemaildeliverymethod.md) | Outgoing email delivery method for the user. | +| [systemuser_preferredaddresscode](./Generated/systemuser_preferredaddresscode.md) | Preferred address for the user. | +| [systemuser_preferredemailcode](./Generated/systemuser_preferredemailcode.md) | Preferred email address for the user. | +| [systemuser_preferredphonecode](./Generated/systemuser_preferredphonecode.md) | Preferred phone number for the user. | +| [systemuser_systemmanagedusertype](./Generated/systemuser_systemmanagedusertype.md) | The type of user | +| [workflow_businessprocesstype](./Generated/workflow_businessprocesstype.md) | Business Process Type. | +| [workflow_category](./Generated/workflow_category.md) | Category of the process. | +| [workflow_mode](./Generated/workflow_mode.md) | Mode of the process. | +| [workflow_modernflowtype](./Generated/workflow_modernflowtype.md) | Type of the Modern Flow process. | +| [workflow_runas](./Generated/workflow_runas.md) | Specifies the system user account under which a workflow executes | +| [workflow_scope](./Generated/workflow_scope.md) | Workflow scope. | +| [workflow_stage](./Generated/workflow_stage.md) | Stage in which the Workflow executes | +| [workflow_statecode](./Generated/workflow_statecode.md) | Status of the workflow | +| [workflow_statuscode](./Generated/workflow_statuscode.md) | Reason for the status of the workflow | +| [workflow_throttlingbehaviortype](./Generated/workflow_throttlingbehaviortype.md) | Type of workflow throttling behavior. | +| [workflow_type](./Generated/workflow_type.md) | Workflow type. | +| [workflow_uiflowtype](./Generated/workflow_uiflowtype.md) | Type of the UI Flow process. | + diff --git a/docs/reference/libraries/Migration/Export/ExportDataFormat.md b/docs/reference/libraries/Migration/Export/ExportDataFormat.md new file mode 100644 index 0000000..333eb43 --- /dev/null +++ b/docs/reference/libraries/Migration/Export/ExportDataFormat.md @@ -0,0 +1,30 @@ + + +# ExportDataFormat + +- Namespace: `PPDS.Migration.Export` +- Assembly: `PPDS.Migration` +- Kind: Enum +- Implements: `IComparable`, `IConvertible`, `IFormattable`, `ISpanFormattable` + +## Summary + +Serialization format for exported migration data. + +## Members + +### Fields + +#### Cmt + +`ExportDataFormat Cmt` + +Configuration Migration Tool (CMT) ZIP archive: data.xml + data_schema.xml. +Drop-in compatible with Microsoft's existing CMT tooling. + +#### Json + +`ExportDataFormat Json` + +PPDS-native JSON document. Single file. Modern tooling (jq, JSON Schema, APIs). + diff --git a/docs/reference/libraries/Migration/Export/ExportOptions.md b/docs/reference/libraries/Migration/Export/ExportOptions.md index e6fdc95..9c209b8 100644 --- a/docs/reference/libraries/Migration/Export/ExportOptions.md +++ b/docs/reference/libraries/Migration/Export/ExportOptions.md @@ -21,6 +21,13 @@ Options for export operations. Gets or sets the degree of parallelism for entity export. Default: ProcessorCount * 2 +#### Format + +`ExportDataFormat Format { get; set; }` + +Gets or sets the serialization format for the exported data. +Default: `PPDS.Migration.Export.ExportDataFormat.Cmt` (CMT-compatible XML ZIP). + #### IncludeFileData `bool IncludeFileData { get; set; }` diff --git a/docs/reference/libraries/Migration/Export/ParallelExporter.md b/docs/reference/libraries/Migration/Export/ParallelExporter.md index 75e615f..13e6a5a 100644 --- a/docs/reference/libraries/Migration/Export/ParallelExporter.md +++ b/docs/reference/libraries/Migration/Export/ParallelExporter.md @@ -27,9 +27,9 @@ Initializes a new instance of the `PPDS.Migration.Export.ParallelExporter` class - Param `dataWriter`: The data writer. -#### ParallelExporter(IDataverseConnectionPool connectionPool, ICmtSchemaReader schemaReader, ICmtDataWriter dataWriter, FileColumnTransferHelper fileTransferHelper, IOptions<MigrationOptions> migrationOptions, ILogger<ParallelExporter> logger) +#### ParallelExporter(IDataverseConnectionPool connectionPool, ICmtSchemaReader schemaReader, ICmtDataWriter dataWriter, IJsonDataWriter jsonDataWriter, FileColumnTransferHelper fileTransferHelper, IOptions<MigrationOptions> migrationOptions, ILogger<ParallelExporter> logger) -`ParallelExporter(IDataverseConnectionPool connectionPool, ICmtSchemaReader schemaReader, ICmtDataWriter dataWriter, FileColumnTransferHelper fileTransferHelper, IOptions migrationOptions, ILogger logger)` +`ParallelExporter(IDataverseConnectionPool connectionPool, ICmtSchemaReader schemaReader, ICmtDataWriter dataWriter, IJsonDataWriter jsonDataWriter, FileColumnTransferHelper fileTransferHelper, IOptions migrationOptions, ILogger logger)` Initializes a new instance of the `PPDS.Migration.Export.ParallelExporter` class. @@ -37,7 +37,9 @@ Initializes a new instance of the `PPDS.Migration.Export.ParallelExporter` class - Param `schemaReader`: The schema reader. -- Param `dataWriter`: The data writer. +- Param `dataWriter`: The CMT XML data writer. + +- Param `jsonDataWriter`: The JSON data writer (used when `PPDS.Migration.Export.ExportOptions.Format` is `PPDS.Migration.Export.ExportDataFormat.Json`). - Param `fileTransferHelper`: Optional file column transfer helper for downloading file data. diff --git a/docs/reference/libraries/Migration/Formats/IJsonDataWriter.md b/docs/reference/libraries/Migration/Formats/IJsonDataWriter.md new file mode 100644 index 0000000..6dfdcf1 --- /dev/null +++ b/docs/reference/libraries/Migration/Formats/IJsonDataWriter.md @@ -0,0 +1,28 @@ + + +# IJsonDataWriter + +- Namespace: `PPDS.Migration.Formats` +- Assembly: `PPDS.Migration` +- Kind: Interface + +## Summary + +Writes migration data to a PPDS-native JSON document. + +## Members + +### Methods + +#### WriteAsync + +`Task WriteAsync(MigrationData data, Stream stream, IProgressReporter progress, CancellationToken cancellationToken)` + +Writes migration data to a stream as a JSON document. + +#### WriteAsync + +`Task WriteAsync(MigrationData data, string path, IProgressReporter progress, CancellationToken cancellationToken)` + +Writes migration data to a JSON file at the given path. + diff --git a/docs/reference/libraries/Migration/Formats/JsonDataWriter.md b/docs/reference/libraries/Migration/Formats/JsonDataWriter.md new file mode 100644 index 0000000..c7fca2e --- /dev/null +++ b/docs/reference/libraries/Migration/Formats/JsonDataWriter.md @@ -0,0 +1,61 @@ + + +# JsonDataWriter + +- Namespace: `PPDS.Migration.Formats` +- Assembly: `PPDS.Migration` +- Kind: Class +- Implements: `IJsonDataWriter` + +## Summary + +Writes migration data as a PPDS-native JSON document. + +## Members + +### Constructors + +#### JsonDataWriter() + +`JsonDataWriter()` + +Initializes a new instance of the `PPDS.Migration.Formats.JsonDataWriter` class. + +#### JsonDataWriter(ILogger<JsonDataWriter> logger) + +`JsonDataWriter(ILogger logger)` + +Initializes a new instance of the `PPDS.Migration.Formats.JsonDataWriter` class. + +- Param `logger`: The logger. + + +### Methods + +#### WriteAsync + +`Task WriteAsync(MigrationData data, Stream stream, IProgressReporter progress, CancellationToken cancellationToken)` + +Writes migration data to a stream as a JSON document. + +#### WriteAsync + +`Task WriteAsync(MigrationData data, string path, IProgressReporter progress, CancellationToken cancellationToken)` + +Writes migration data to a JSON file at the given path. + + +### Fields + +#### FormatVersion + +`string FormatVersion` + +Current JSON export format version. Bump on breaking schema changes. + +#### SchemaUri + +`string SchemaUri` + +$schema URI for the JSON export document. + diff --git a/docs/reference/libraries/Migration/_index.md b/docs/reference/libraries/Migration/_index.md new file mode 100644 index 0000000..3b54956 --- /dev/null +++ b/docs/reference/libraries/Migration/_index.md @@ -0,0 +1,146 @@ + + +# Migration reference + +## Interfaces + +| Type | Summary | +|------|---------| +| [ICmtDataReader](./Formats/ICmtDataReader.md) | Interface for reading CMT data files. | +| [ICmtDataWriter](./Formats/ICmtDataWriter.md) | Interface for writing CMT-compatible data files. | +| [ICmtSchemaReader](./Formats/ICmtSchemaReader.md) | Interface for reading CMT schema files. | +| [ICmtSchemaWriter](./Formats/ICmtSchemaWriter.md) | Interface for writing CMT-compatible schema files. | +| [IDependencyGraphBuilder](./Analysis/IDependencyGraphBuilder.md) | Interface for building entity dependency graphs from schemas. | +| [IExecutionPlanBuilder](./Analysis/IExecutionPlanBuilder.md) | Interface for building execution plans from dependency graphs. | +| [IExporter](./Export/IExporter.md) | Interface for exporting data from Dataverse. | +| [IImportPhaseProcessor](./Import/IImportPhaseProcessor.md) | Processes a phase of the import pipeline. | +| [IImporter](./Import/IImporter.md) | Interface for importing data to Dataverse. | +| [IJsonDataWriter](./Formats/IJsonDataWriter.md) | Writes migration data to a PPDS-native JSON document. | +| [IPluginStepManager](./Import/IPluginStepManager.md) | Interface for managing plugin steps during import. | +| [IPostImportHandler](./Import/Handlers/IPostImportHandler.md) | Executes post-import processing for an entity. | +| [IProgressReporter](./Progress/IProgressReporter.md) | Interface for reporting migration progress. | +| [IRecordFilter](./Import/Handlers/IRecordFilter.md) | Filters records during import, determining which should be skipped. | +| [IRecordTransformer](./Import/Handlers/IRecordTransformer.md) | Transforms records before they are imported. | +| [ISchemaGenerator](./Schema/ISchemaGenerator.md) | Interface for generating migration schemas from Dataverse metadata. | +| [ISchemaValidator](./Import/ISchemaValidator.md) | Validates schema compatibility between exported data and target environment. | +| [IStateTransitionHandler](./Import/Handlers/IStateTransitionHandler.md) | Determines state transitions to apply to records after import. | +| [IUserMappingGenerator](./UserMapping/IUserMappingGenerator.md) | Interface for generating user mappings. | +| [IUserMappingReader](./Formats/IUserMappingReader.md) | Interface for reading user mappings. | +| [IWarningCollector](./Progress/IWarningCollector.md) | Collects warnings during import operations. | + +## Classes + +| Type | Summary | +|------|---------| +| [ActivityPointerHandler](./Import/Handlers/ActivityPointerHandler.md) | Filters activitypointer base type records — always skipped because | +| [AttributeNames](./Constants/AttributeNames.md) | Dataverse attribute logical names used in migration operations. | +| [BulkOperationProber](./Import/BulkOperationProber.md) | Probes entities to detect bulk operation support and executes appropriate strategy. | +| [BusinessUnitHandler](./Import/Handlers/BusinessUnitHandler.md) | Transforms business unit records during import. | +| [CircularReference](./Models/CircularReference.md) | Represents a circular reference between entities. | +| [CmtDataReader](./Formats/CmtDataReader.md) | Reads CMT data.zip files. | +| [CmtDataWriter](./Formats/CmtDataWriter.md) | Writes CMT-compatible data.zip files. | +| [CmtSchemaReader](./Formats/CmtSchemaReader.md) | Reads CMT schema.xml files. | +| [CmtSchemaWriter](./Formats/CmtSchemaWriter.md) | Writes CMT-compatible schema files. | +| [ConsoleProgressReporter](./Progress/ConsoleProgressReporter.md) | Progress reporter that writes human-readable output to stderr. | +| [DataverseSchemaGenerator](./Schema/DataverseSchemaGenerator.md) | Generates migration schemas from Dataverse metadata. | +| [DateShifter](./Import/DateShifter.md) | Shifts date/time values based on the configured `PPDS.Migration.Models.DateMode`. | +| [DeferredField](./Models/DeferredField.md) | Represents a field that must be deferred during initial import. | +| [DeferredFieldProcessor](./Import/DeferredFieldProcessor.md) | Processes deferred fields after the initial entity import. | +| [DependencyEdge](./Models/DependencyEdge.md) | Represents a dependency edge between entities. | +| [DependencyGraph](./Models/DependencyGraph.md) | Entity dependency graph for determining import order. | +| [DependencyGraphBuilder](./Analysis/DependencyGraphBuilder.md) | Builds entity dependency graphs using Tarjan's algorithm for cycle detection. | +| [DetailedError](./Progress/DetailedError.md) | Detailed error information for a single record. | +| [DuplicateRuleHandler](./Import/Handlers/DuplicateRuleHandler.md) | Handles duplicate rule records during import. | +| [EntityErrorSummary](./Progress/EntityErrorSummary.md) | Per-entity error summary. | +| [EntityExportResult](./Export/EntityExportResult.md) | Result for a single entity export. | +| [EntityImportResult](./Import/EntityImportResult.md) | Result for a single entity import. | +| [EntityInfo](./Schema/EntityInfo.md) | Basic entity information. | +| [EntityNames](./Constants/EntityNames.md) | Dataverse entity logical names used in migration operations. | +| [EntityNode](./Models/EntityNode.md) | Represents an entity node in the dependency graph. | +| [EntityReferenceMapper](./Import/EntityReferenceMapper.md) | Resolves entity references using cascading lookup resolution. | +| [EntitySchema](./Models/EntitySchema.md) | Schema definition for an entity. | +| [ErrorReportWriter](./Progress/ErrorReportWriter.md) | Writes comprehensive error reports for import operations. | +| [ExecutionPlan](./Models/ExecutionPlan.md) | Execution plan for importing data with dependency resolution. | +| [ExecutionPlanBuilder](./Analysis/ExecutionPlanBuilder.md) | Builds execution plans with deferred field identification. | +| [ExportOptions](./Export/ExportOptions.md) | Options for export operations. | +| [ExportResult](./Export/ExportResult.md) | Result of an export operation. | +| [ExportWarningCodes](./Export/ExportWarningCodes.md) | Standard warning codes for export operations. | +| [FieldMetadataCollection](./Import/FieldMetadataCollection.md) | Collection of field metadata for multiple entities. | +| [FieldSchema](./Models/FieldSchema.md) | Schema definition for a field. | +| [FileColumnData](./Models/FileColumnData.md) | Represents file column binary data for a record field. | +| [FileColumnProcessor](./Import/FileColumnProcessor.md) | Processes file column data after record import. | +| [FileColumnTransferHelper](./Import/FileColumnTransferHelper.md) | Handles chunked upload/download of file column binary data. | +| [GuidPartitioner](./Export/GuidPartitioner.md) | Splits the GUID space into non-overlapping ranges for parallel export. | +| [IdMappingCollection](./Models/IdMappingCollection.md) | Tracks old-to-new GUID mappings during import. | +| [ImportContext](./Import/ImportContext.md) | Shared context passed to all import phases. | +| [ImportErrorReport](./Progress/ImportErrorReport.md) | Comprehensive error report for import operations. | +| [ImportErrorSummary](./Progress/ImportErrorSummary.md) | Summary statistics for an import operation. | +| [ImportExecutionContext](./Progress/ImportExecutionContext.md) | Execution context capturing version and environment information for diagnostics. | +| [ImportOptions](./Import/ImportOptions.md) | Options for import operations. | +| [ImportOutputManager](./Progress/ImportOutputManager.md) | Manages streaming output for import operations. | +| [ImportResult](./Import/ImportResult.md) | Result of an import operation. | +| [ImportTier](./Models/ImportTier.md) | Represents a tier of entities that can be imported in parallel. | +| [ImportWarning](./Progress/ImportWarning.md) | Represents a warning that occurred during import. | +| [ImportWarningCodes](./Progress/ImportWarningCodes.md) | Standard warning codes for import operations. | +| [IncidentHandler](./Import/Handlers/IncidentHandler.md) | Handles state transitions for incident (case) records. | +| [JsonDataWriter](./Formats/JsonDataWriter.md) | Writes migration data as a PPDS-native JSON document. | +| [JsonProgressReporter](./Progress/JsonProgressReporter.md) | Progress reporter that writes JSON lines to a TextWriter. | +| [LeadHandler](./Import/Handlers/LeadHandler.md) | Handles state transitions for lead records. | +| [ManyToManyRelationshipData](./Models/ManyToManyRelationshipData.md) | Represents grouped M2M associations for one source record. | +| [MigrationData](./Models/MigrationData.md) | Container for exported migration data. | +| [MigrationError](./Progress/MigrationError.md) | Error information from a migration operation. | +| [MigrationOptions](./DependencyInjection/MigrationOptions.md) | Options for configuring migration services. | +| [MigrationResult](./Progress/MigrationResult.md) | Result of a migration operation. | +| [MigrationSchema](./Models/MigrationSchema.md) | Parsed migration schema containing entity definitions. | +| [OperationClock](./Progress/OperationClock.md) | Provides elapsed time since the current operation started. | +| [OpportunityHandler](./Import/Handlers/OpportunityHandler.md) | Handles state transitions for opportunity records. | +| [ParallelExporter](./Export/ParallelExporter.md) | Parallel exporter for Dataverse data. | +| [PhaseResult](./Import/PhaseResult.md) | Result from a single import phase. | +| [PluginStepManager](./Import/PluginStepManager.md) | Manages plugin step disabling/enabling during import. | +| [PluginStepReenableException](./Import/PluginStepReenableException.md) | Aggregated exception thrown when one or more plugin steps fail to re-enable. | +| [ProductHandler](./Import/Handlers/ProductHandler.md) | Handles product records during import. | +| [ProgressAdapterFactory](./Progress/ProgressAdapterFactory.md) | Creates `System.IProgress`1` adapters that bridge | +| [ProgressEventArgs](./Progress/ProgressEventArgs.md) | Progress event data for migration operations. | +| [QuoteHandler](./Import/Handlers/QuoteHandler.md) | Handles state transitions for quote records. | +| [RelationshipProcessor](./Import/RelationshipProcessor.md) | Processes many-to-many relationships after entity import. | +| [RelationshipSchema](./Models/RelationshipSchema.md) | Schema definition for a relationship. | +| [RetryManifest](./Progress/RetryManifest.md) | Manifest of failed records for retry operations. | +| [SalesOrderHandler](./Import/Handlers/SalesOrderHandler.md) | Handles state transitions for sales order records. | +| [SchemaGeneratorOptions](./Schema/SchemaGeneratorOptions.md) | Options for schema generation. | +| [SchemaMismatchException](./Import/SchemaMismatchException.md) | Exception thrown when exported data contains columns that don't exist in the target environment. | +| [SchemaMismatchResult](./Import/SchemaMismatchResult.md) | Result of schema mismatch detection between exported data and target environment. | +| [SchemaValidator](./Import/SchemaValidator.md) | Validates schema compatibility between exported data and target environment. | +| [ServiceCollectionExtensions](./DependencyInjection/ServiceCollectionExtensions.md) | Extension methods for registering migration services. | +| [StateTransitionCollection](./Import/StateTransitionCollection.md) | Thread-safe collection of state transitions to apply after record import. | +| [StateTransitionData](./Import/StateTransitionData.md) | Describes a state/status transition to apply to a record after import. | +| [StateTransitionProcessor](./Import/StateTransitionProcessor.md) | Processes Phase 3 of the import pipeline: applying state transitions | +| [SystemUserHandler](./Import/Handlers/SystemUserHandler.md) | Filters system, integration, and support users during import. | +| [TieredImporter](./Import/TieredImporter.md) | Tiered importer that respects dependency order. | +| [UserInfo](./UserMapping/UserInfo.md) | Information about a system user. | +| [UserMapping](./Models/UserMapping.md) | Represents a mapping from a source user to a target user. | +| [UserMappingCollection](./Models/UserMappingCollection.md) | Collection of user mappings for migrating user references between environments. | +| [UserMappingGenerator](./UserMapping/UserMappingGenerator.md) | Generates user mapping files for cross-environment migration. | +| [UserMappingMatch](./UserMapping/UserMappingMatch.md) | A matched user mapping. | +| [UserMappingOptions](./UserMapping/UserMappingOptions.md) | Options for user mapping generation. | +| [UserMappingReader](./Formats/UserMappingReader.md) | Reads user mapping files. | +| [UserMappingResult](./UserMapping/UserMappingResult.md) | Result of user mapping generation. | +| [WarningCollector](./Progress/WarningCollector.md) | Thread-safe implementation of `PPDS.Migration.Progress.IWarningCollector`. | + +## Structs + +| Type | Summary | +|------|---------| +| [FieldValidity](./Import/FieldValidity.md) | Represents the create/update validity of a field in the target environment. | +| [GuidRange](./Export/GuidRange.md) | Represents a range of GUIDs for partitioned export queries. | + +## Enums + +| Type | Summary | +|------|---------| +| [BulkOperationType](./Import/BulkOperationType.md) | The type of bulk operation to execute. | +| [DateMode](./Models/DateMode.md) | Determines how date/time fields are adjusted during import. | +| [DependencyType](./Models/DependencyType.md) | Type of dependency between entities. | +| [ExportDataFormat](./Export/ExportDataFormat.md) | Serialization format for exported migration data. | +| [ImportMode](./Import/ImportMode.md) | Import mode for handling records. | +| [MigrationPhase](./Progress/MigrationPhase.md) | Phase of the migration operation. | + diff --git a/docs/reference/libraries/Plugins/_index.md b/docs/reference/libraries/Plugins/_index.md new file mode 100644 index 0000000..bbe083d --- /dev/null +++ b/docs/reference/libraries/Plugins/_index.md @@ -0,0 +1,27 @@ + + +# Plugins reference + +## Classes + +| Type | Summary | +|------|---------| +| [CustomApiAttribute](./CustomApiAttribute.md) | Defines Custom API registration configuration. | +| [CustomApiParameterAttribute](./CustomApiParameterAttribute.md) | Defines a request or response parameter for a Custom API. | +| [PluginImageAttribute](./PluginImageAttribute.md) | Defines a pre-image or post-image for a plugin step. | +| [PluginStepAttribute](./PluginStepAttribute.md) | Defines plugin step registration configuration. | + +## Enums + +| Type | Summary | +|------|---------| +| [ApiBindingType](./ApiBindingType.md) | Specifies the binding type for a Custom API. | +| [ApiParameterType](./ApiParameterType.md) | Specifies the data type of a Custom API request or response parameter. | +| [ApiProcessingStepType](./ApiProcessingStepType.md) | Specifies the type of processing steps allowed for a Custom API. | +| [ParameterDirection](./ParameterDirection.md) | Specifies whether a Custom API parameter is an input or output parameter. | +| [PluginDeployment](./PluginDeployment.md) | Specifies the deployment context in which a plugin step executes. | +| [PluginImageType](./PluginImageType.md) | Specifies the type of entity image to register with a plugin step. | +| [PluginInvocationSource](./PluginInvocationSource.md) | Specifies the invocation source for a plugin step. | +| [PluginMode](./PluginMode.md) | Specifies the execution mode for a plugin step. | +| [PluginStage](./PluginStage.md) | Specifies the stage in the event pipeline when a plugin executes. | + diff --git a/docs/reference/mcp/_index.md b/docs/reference/mcp/_index.md new file mode 100644 index 0000000..b8b2730 --- /dev/null +++ b/docs/reference/mcp/_index.md @@ -0,0 +1,105 @@ + + +# MCP Tools + +## auth + +| Tool | Description | +|------|-------------| +| [ppds_auth_who](./tools/ppds_auth_who.md) | Get the current authentication profile context including identity, connected environment, and token status. Use this to understand which Dataverse environment queries will run against. | + +## connectionreferences + +| Tool | Description | +|------|-------------| +| [ppds_connection_references_analyze](./tools/ppds_connection_references_analyze.md) | Analyze connection references for orphaned references (not used by any flow) and orphaned flows (referencing missing connection references). Useful for deployment cleanup. | +| [ppds_connection_references_get](./tools/ppds_connection_references_get.md) | Get full details of a specific connection reference including dependent flows and connection info. Use the logicalName from ppds_connection_references_list. | +| [ppds_connection_references_list](./tools/ppds_connection_references_list.md) | List connection references in the current environment. Shows connector bindings and whether connections are bound. Optionally filter by solution name. | + +## customapis + +| Tool | Description | +|------|-------------| +| [ppds_custom_apis_list](./tools/ppds_custom_apis_list.md) | List all Custom APIs registered in the Dataverse environment. Custom APIs are developer-defined messages that extend the Dataverse API surface with custom business logic. Returns each API with its request parameters and response properties. | + +## data + +| Tool | Description | +|------|-------------| +| [ppds_data_analyze](./tools/ppds_data_analyze.md) | Analyze data for a Dataverse entity. Returns record count, primary attributes, and sample records. Use this to understand the data in an entity before querying. | +| [ppds_data_providers_list](./tools/ppds_data_providers_list.md) | List all virtual entity data sources and data providers registered in the Dataverse environment. Data providers implement plugin-based virtual entity adapters that connect Dataverse virtual entities to external data sources. Returns both data source definitions and their associated data provider plugin bindings. | +| [ppds_data_schema](./tools/ppds_data_schema.md) | Get the schema (fields/attributes) for a Dataverse entity. Returns attribute names, types, and metadata. Use this to understand entity structure before querying. | + +## env + +| Tool | Description | +|------|-------------| +| [ppds_env_list](./tools/ppds_env_list.md) | List available Dataverse environments. Use this to discover which environments are accessible with the current authentication profile. The currently selected environment is marked with isActive=true. | +| [ppds_env_select](./tools/ppds_env_select.md) | Select a Dataverse environment for subsequent queries. You can specify the environment by URL (e.g., 'https://contoso.crm.dynamics.com'), display name (e.g., 'Contoso Production'), or unique name. All subsequent ppds tools will use this environment. | +| [ppds_environment_variables_get](./tools/ppds_environment_variables_get.md) | Get full details of a specific environment variable including description, type, and values. Use the schemaName from ppds_environment_variables_list. | +| [ppds_environment_variables_list](./tools/ppds_environment_variables_list.md) | List environment variable definitions and their current values. Shows default vs current values, type, and override status. Optionally filter by solution name. | +| [ppds_environment_variables_set](./tools/ppds_environment_variables_set.md) | Set the current value of an environment variable. Creates the value record if none exists. AI agents can use this to fix misconfigurations during deployment troubleshooting. | + +## importjobs + +| Tool | Description | +|------|-------------| +| [ppds_import_jobs_get](./tools/ppds_import_jobs_get.md) | Get full details of a specific import job including the XML import log. Use the id from ppds_import_jobs_list. The import log XML contains detailed component-level success/failure information for troubleshooting failed imports. | +| [ppds_import_jobs_list](./tools/ppds_import_jobs_list.md) | List recent solution import jobs for the current environment. Shows import status, progress, solution name, and timing. Use this to check if a solution import succeeded or failed. | + +## metadata + +| Tool | Description | +|------|-------------| +| [ppds_metadata_add_column](./tools/ppds_metadata_add_column.md) | Adds a new column (attribute) to an existing Dataverse table. Supports all standard column types. Use dry-run to validate before committing. | +| [ppds_metadata_add_option_value](./tools/ppds_metadata_add_option_value.md) | Adds a new option value to an existing option set (global or local choice). Returns the assigned integer value. | +| [ppds_metadata_create_choice](./tools/ppds_metadata_create_choice.md) | Creates a new global choice (option set) in the specified solution. Options are provided as a JSON array of \{label, value\} objects. Supports dry-run mode. | +| [ppds_metadata_create_key](./tools/ppds_metadata_create_key.md) | Creates an alternate key on a Dataverse table. Attributes can be provided as a comma-separated list or a JSON array of column logical names. Supports dry-run mode. | +| [ppds_metadata_create_relationship](./tools/ppds_metadata_create_relationship.md) | Creates a relationship (one-to-many or many-to-many) between two Dataverse tables. For one-to-many, a lookup column is created on the referencing entity. Supports dry-run mode. | +| [ppds_metadata_create_table](./tools/ppds_metadata_create_table.md) | Creates a new Dataverse table (entity) in the specified solution. Supports dry-run mode for validation without persisting changes. Use ppds_metadata_entities to verify the table was created. | +| [ppds_metadata_entities](./tools/ppds_metadata_entities.md) | Lists all entities (tables) in the connected Dataverse environment. Returns entity logical names, display names, schema names, and ownership type. Use this to discover available entities before querying with ppds_metadata_entity for full details. | +| [ppds_metadata_entity](./tools/ppds_metadata_entity.md) | Get detailed metadata for a Dataverse entity including attributes, relationships, and keys. Use this to understand entity structure, field types, and how entities relate to each other. | +| [ppds_metadata_update_choice](./tools/ppds_metadata_update_choice.md) | Updates an existing global choice (option set). Only the provided optional fields are changed; omitted fields remain unchanged. Supports dry-run mode. | +| [ppds_metadata_update_column](./tools/ppds_metadata_update_column.md) | Updates an existing column (attribute) on a Dataverse table. Only the provided optional fields are changed; omitted fields remain unchanged. Supports dry-run mode. | +| [ppds_metadata_update_relationship](./tools/ppds_metadata_update_relationship.md) | Updates an existing Dataverse relationship's cascade configuration. Only the provided optional fields are changed; omitted fields remain unchanged. Supports dry-run mode. | +| [ppds_metadata_update_table](./tools/ppds_metadata_update_table.md) | Updates an existing Dataverse table (entity). Only the provided optional fields are changed; omitted fields remain unchanged. Supports dry-run mode. | + +## plugin + +| Tool | Description | +|------|-------------| +| [ppds_plugin_traces_delete](./tools/ppds_plugin_traces_delete.md) | Delete plugin trace logs. Provide exactly one mode: specific IDs for targeted deletion, olderThanDays for age-based cleanup, or filter parameters (typeName, messageName, primaryEntity, errorsOnly) for criteria-based deletion. | +| [ppds_plugin_traces_get](./tools/ppds_plugin_traces_get.md) | Get detailed information about a specific plugin trace including the full message block (trace output) and exception details. Use the trace ID from ppds_plugin_traces_list. | +| [ppds_plugin_traces_list](./tools/ppds_plugin_traces_list.md) | List plugin trace logs from Dataverse. Use this to find plugin execution logs, identify errors, and debug plugin behavior. Requires trace logging to be enabled in the environment. | +| [ppds_plugin_traces_timeline](./tools/ppds_plugin_traces_timeline.md) | Build an execution timeline showing all plugin executions for a single transaction. Use the correlationId from ppds_plugin_traces_list to see how plugins chain together and identify performance bottlenecks. | +| [ppds_plugins_get](./tools/ppds_plugins_get.md) | Get detailed information for a specific plugin registration entity (assembly, package, type, step, or image). Use ppds_plugins_list first to discover entity names/IDs. | +| [ppds_plugins_list](./tools/ppds_plugins_list.md) | List registered plugin assemblies in the Dataverse environment. Shows plugin types and their registered steps (message/entity/stage combinations). By default excludes hidden system assemblies and Microsoft.* assemblies. | + +## query + +| Tool | Description | +|------|-------------| +| [ppds_query_fetch](./tools/ppds_query_fetch.md) | Execute a FetchXML query against Dataverse. Use this when you have raw FetchXML or need advanced query features not available in SQL. Prefer ppds_query_sql for simpler queries. | +| [ppds_query_sql](./tools/ppds_query_sql.md) | Execute a SQL SELECT query against Dataverse. The SQL is transpiled to FetchXML internally. Supports JOINs, WHERE, ORDER BY, TOP, and aggregate functions. Example: SELECT name, revenue FROM account WHERE statecode = 0 ORDER BY revenue DESC | + +## serviceendpoints + +| Tool | Description | +|------|-------------| +| [ppds_service_endpoints_list](./tools/ppds_service_endpoints_list.md) | List all service endpoints and webhooks registered in the Dataverse environment. Includes Azure Service Bus (Queue, Topic, EventHub), REST endpoints, and HTTP webhooks. Used for event-driven integrations that receive Dataverse change notifications. | + +## solutions + +| Tool | Description | +|------|-------------| +| [ppds_solutions_components](./tools/ppds_solutions_components.md) | Get components of a Dataverse solution. Returns entities, workflows, plugins, and other components. Use the solution id from ppds_solutions_list. Optionally filter by component type code. | +| [ppds_solutions_list](./tools/ppds_solutions_list.md) | List Dataverse solutions for the current environment. Shows solution name, version, publisher, and managed status. Use includeManaged to also show managed (system) solutions. | + +## webresources + +| Tool | Description | +|------|-------------| +| [ppds_web_resources_get](./tools/ppds_web_resources_get.md) | Get web resource content for viewing or analysis. Returns decoded text content for text types (JS, HTML, CSS, XML, etc.) and metadata-only for binary types (PNG, JPG, GIF). Use the id from ppds_web_resources_list. | +| [ppds_web_resources_list](./tools/ppds_web_resources_list.md) | List web resources in a Dataverse environment, optionally filtered by solution. Returns name, type, managed status, and modification info. Use textOnly=true (default) to exclude binary types like images. Supports pagination via maxRows and nextPageToken parameters — when more records exist the response includes a nextPageToken to pass on the next call. | +| [ppds_web_resources_publish](./tools/ppds_web_resources_publish.md) | Publish specific web resources to make changes live. After updating web resource content, you must publish for changes to take effect. Provide one or more web resource IDs. | +