Skip to content

Tools Solutions

Ryan James edited this page Aug 17, 2026 · 2 revisions

Solutions tools

This page is generated from the code by scripts/gen_wiki_tools.py — do not edit by hand.

21 tools · category token solutions · enable with DATAVERSE_TOOLS=solutions (unset enables every category)

Tool-Index · Home

Write tools additionally require DATAVERSE_ALLOW_WRITE=true; delete tools require DATAVERSE_ALLOW_DELETE=true.


dataverse_add_component_to_solution

Write · non-idempotent · category solutions

Add an existing component to a Dataverse solution via AddSolutionComponent.

Requires DATAVERSE_ALLOW_WRITE=true.

Param Type Req Default Notes
dataverse_url str yes Required Dataverse organization URL for this request (e.g., 'https://yourorg.crm.dynamics.com').
solution_unique_name str | None no None Solution unique name. Provide either this or solution_id, not both. (pattern=^[a-zA-Z_][a-zA-Z0-9_]*$)
solution_id str | None no None Solution GUID. Provide either this or solution_unique_name, not both.
component_id str yes GUID of the component to add (min_len=1)
component_type int yes Dataverse solution component type code
add_required_components bool no False Whether Dataverse should include required dependencies
do_not_include_subcomponents bool no False Whether Dataverse should skip adding subcomponents

Returns {"added": ..., "solution_unique_name": ..., "solution_id": ..., "component_id": ..., "component_type": ...}. Errors return {"error": true, "message": "..."}.


dataverse_analyze_dependencies

Read · idempotent · category solutions

Analyze dependencies for a Dataverse solution component.

Exposes three directions via the direction parameter:

  • blocking_delete: components that must be removed before this one can be deleted.
  • dependents: all components that reference/depend on this component.
  • required: all components this component requires to exist.

Use component_type integer codes (1=Entity, 2=Attribute, 61=WebResource, etc.) and the component's metadata GUID for component_id.

Param Type Req Default Notes
dataverse_url str yes Required Dataverse organization URL for this request (e.g., 'https://yourorg.crm.dynamics.com').
component_id str yes GUID of the solution component to analyze (e.g., an entity metadata id, attribute metadata id). (min_len=36)
component_type int yes Integer component type code. Common values: 1=Entity, 2=Attribute, 3=Relationship, 9=OptionSet, 20=SecurityRole, 26=SavedQuery, 29=Workflow, 60=SystemForm, 61=WebResource, 62=SiteMap, 91=PluginAssembly, 92=SDKMessageProcessingStep, 300=CanvasApp. See https://learn.microsoft.com/power-apps/developer/data-platform/reference/entities/solutioncomponent. (ge=1)
direction Literal['blocking_delete', 'dependents', 'required'] no 'blocking_delete' Which dependency direction to retrieve: 'blocking_delete' — components that block deletion of this component; 'dependents' — all components that depend on this component; 'required' — all components this component requires.

Returns {"component": ..., "direction": ..., "function": ..., "count": ..., "dependencies": ...}. Errors return {"error": true, "message": "..."}.


dataverse_clone_solution_as_patch

Write · non-idempotent · category solutions

Clone a solution as a patch via the unbound CloneAsPatch action.

Resolves the parent solution to its unique name (accepting either a GUID or unique name), then POSTs to the unbound /CloneAsPatch action with ParentSolutionUniqueName in the body. Returns the new patch solution GUID. Requires DATAVERSE_ALLOW_WRITE=true.

Param Type Req Default Notes
dataverse_url str yes Required Dataverse organization URL for this request (e.g., 'https://yourorg.crm.dynamics.com').
solution_unique_name str | None no None Solution unique name. Provide either this or solution_id, not both. (pattern=^[a-zA-Z_][a-zA-Z0-9_]*$)
solution_id str | None no None Solution GUID. Provide either this or solution_unique_name, not both.
display_name str yes Display name for the new patch solution. (min_len=1)
version_number str yes Version string for the patch (e.g., '1.0.0.2'). Must share the parent solution's major.minor version and be greater. (min_len=1)

Returns {"cloned": ..., "patch_solution_id": ..., "parent_solution_unique_name": ..., "version_number": ...}. Errors return {"error": true, "message": "..."}.


dataverse_create_publisher

Write · non-idempotent · category solutions

Create a Dataverse publisher that owns the customization prefix for solutions.

Requires DATAVERSE_ALLOW_WRITE=true.

Param Type Req Default Notes
dataverse_url str yes Required Dataverse organization URL for this request (e.g., 'https://yourorg.crm.dynamics.com').
uniquename str yes Unique name for the publisher (e.g., 'contoso'). Use lowercase logical-name style characters. (min_len=1)
display_name str yes Friendly display name for the publisher (min_len=1)
customization_prefix str yes Customization prefix for publisher-owned components (e.g., 'new'). (min_len=1)
option_value_prefix int yes Customization option value prefix (e.g., 10000) (ge=1, le=2147483647)

Returns {"created": ..., "uniquename": ..., "display_name": ..., "location": ...}. Errors return {"error": true, "message": "..."}.


dataverse_create_solution

Write · non-idempotent · category solutions

Create a new Dataverse solution scoped to a publisher.

Requires DATAVERSE_ALLOW_WRITE=true.

Param Type Req Default Notes
dataverse_url str yes Required Dataverse organization URL for this request (e.g., 'https://yourorg.crm.dynamics.com').
solution_unique_name str yes Unique name for the solution (e.g., 'contoso_core') (min_len=1, pattern=^[a-zA-Z_][a-zA-Z0-9_]*$)
display_name str yes Friendly display name for the solution (min_len=1)
publisher_id str yes GUID of the publisher that owns this solution (min_len=1)
version str yes Solution version string (typically major.minor.build.revision) (min_len=1)
description str | None no None Optional solution description

Returns {"created": ..., "solution_unique_name": ..., "version": ..., "location": ...}. Errors return {"error": true, "message": "..."}.


dataverse_delete_and_promote_solution

Delete · non-idempotent · category solutions

Apply a solution upgrade by promoting the holding _Upgrade solution and deleting obsolete components via DeleteAndPromote.

This is the second step of the two-step upgrade path. Use it after dataverse_import_solution with hold_for_upgrade=true, which stages the new version as a holding ('_Upgrade') solution without deleting anything.

Calling this tool applies the solution upgrade: it promotes the holding _Upgrade solution over the base solution and deletes all components absent from the new version (DeleteComponents phase). This is a synchronous, potentially long-running call — the Web API blocks until the promotion is complete.

Returns solution_id (the GUID of the promoted solution) on success.

For a single-step alternative, use dataverse_stage_and_upgrade_solution instead.

Requires DATAVERSE_ALLOW_WRITE=true.

Param Type Req Default Notes
dataverse_url str yes Required Dataverse organization URL for this request (e.g., 'https://yourorg.crm.dynamics.com').
solution_unique_name str yes Unique name of the solution to promote (e.g., 'MyCustomApp'). This must be the base solution name — not the 'Upgrade' holding variant. The holding solution (created by hold_for_upgrade=true) must already exist. (min_len=1, pattern=^[a-zA-Z][a-zA-Z0-9_]*$)

Returns {"upgraded": ..., "solution_id": ..., "solution_unique_name": ..., "message": ...}. Errors return {"error": true, "message": "..."}.


dataverse_export_solution

Read · idempotent · category solutions

Export a Dataverse solution as a base64-encoded zip.

Calls the ExportSolution unbound action. Large solutions (>~3 MB base64) must be saved to disk via output_path — supply a local filesystem path and the server writes the decoded .zip there, returning metadata only (no base64 in the response). Small solutions are returned inline when output_path is omitted. This tool is read-only for the org (no mutations); writing a local .zip when output_path is set is local I/O only and does not require DATAVERSE_ALLOW_WRITE.

Param Type Req Default Notes
dataverse_url str yes Required Dataverse organization URL for this request (e.g., 'https://yourorg.crm.dynamics.com').
solution_name str yes Unique name of the solution to export (e.g., 'MyCustomApp'). Use lowercase logical name — not the display name. (min_len=1)
managed bool no False When True, export as a managed solution. When False (default), export as unmanaged.
output_path str | None no None See note below.
export_general_settings bool | None no None Export general environment settings. Omitted from request when None.
export_customization_settings bool | None no None Export customization settings. Omitted from request when None.
export_email_tracking_settings bool | None no None Export email tracking settings. Omitted from request when None.
export_auto_numbering_settings bool | None no None Export auto-numbering settings. Omitted from request when None.
export_calendar_settings bool | None no None Export calendar settings. Omitted from request when None.
export_relationship_roles bool | None no None Export relationship roles. Omitted from request when None.
export_isv_config bool | None no None Export ISV configuration. Omitted from request when None.
export_sales bool | None no None Export sales settings. Omitted from request when None.
export_marketing_settings bool | None no None Export marketing settings. Omitted from request when None.
export_outlook_synchronization_settings bool | None no None Export Outlook synchronization settings. Omitted from request when None.
  • output_path — Local filesystem path to write the exported solution .zip to (e.g., '/tmp/MySolution.zip' or 'C:\exports\MySolution.zip'). When provided, the zip is decoded and written to disk (parent directories are created if missing); the response contains metadata only (no base64 payload). When omitted, the base64 payload is returned inline if it is under ~3 MB; otherwise a structured error asks you to supply output_path. If the server sets DATAVERSE_FILE_BASE_DIR, the resolved path must stay inside that directory — '..' traversal or an absolute path elsewhere is rejected with an error and nothing is written. When that variable is unset the path is not confined.

Returns {"solution_file_base64": ..., "size_bytes": ..., "solution": ..., "managed": ...} or {"written": ..., "path": ..., "size_bytes": ..., "solution": ..., "managed": ...}. Errors return {"error": true, "message": "..."}.


dataverse_get_import_job

Read · idempotent · category solutions

Retrieve a single importjob record by its GUID to check import progress.

Returns progress (0–100), completedon, solutionname, and other tracking fields. The large result XML ('data' column) is excluded by default; set include_data=true to fetch it when diagnosing failures. Use dataverse_import_solution or dataverse_stage_and_upgrade_solution to start an operation and obtain the import_job_id.

When include_data=true, the 'data' result XML contains component-level detail for all import phases, including the DeleteComponents phase of an upgrade. Error code 0x8004F037 (image-column dependency failures) and other component-level errors from the deletion phase appear in this XML.

Param Type Req Default Notes
dataverse_url str yes Required Dataverse organization URL for this request (e.g., 'https://yourorg.crm.dynamics.com').
import_job_id str yes GUID of the importjob to retrieve. This is the client-supplied ImportJobId GUID returned by dataverse_import_solution. (min_len=36)
include_data bool no False When True, the response includes the result XML from the 'data' column. The data column can be very large — use only to inspect failure details.

Returns {"record": ..., "completed": ..., "progress": ...}. Errors return {"error": true, "message": "..."}.


dataverse_get_import_job_results

Read · idempotent · category solutions

Answer "WHY did this solution import fail?" — the readable import results.

Calls the unbound RetrieveFormattedImportJobResults function, which returns the platform's own human-readable results document for one import job.

This is the companion to dataverse_get_import_job, which returns the importjob RECORD (progress, completedon, solutionname) and, with include_data=true, the raw 'data' column — a large opaque XML blob you then have to parse yourself to find the failure. This tool asks Dataverse to format those results instead. Use dataverse_list_import_jobs (most recent first) or the import_job_id returned by dataverse_import_solution / dataverse_stage_and_upgrade_solution to get an id.

RESPONSE SHAPE — LIVE-VERIFIED. The document arrives as ONE string property named FormattedResults, and the body carries nothing else. It is surfaced as 'results', with results_source naming the property it was read from. Nothing in the document is interpreted: the text is passed through verbatim. Microsoft Learn documents the function and its return type but NOT that type's inner properties, so the property is still located by name and then by shape rather than assumed; if the payload cannot be identified unambiguously, normalized is false, no length or summary is reported, and the payload comes back unchanged (minus the @odata.* envelope) under raw_response — read it yourself rather than trusting a guess.

WHAT YOU GET BACK IS A SPREADSHEET. Live-verified: 'results' is a SpreadsheetML (Excel XML) workbook — root element Workbook, an mso-application progid="Excel.Sheet" processing instruction and the urn:schemas-microsoft-com:office:spreadsheet namespace — NOT a Dataverse results schema. Its element names are spreadsheet furniture (Worksheet, Table, Row, Cell, Data, Style, Font, Interior, Border...) and NONE of them is named error, warning or failure. The meaning lives in the CELL VALUES, so to find out why an import failed you must read the TEXT of the document, not its tags. The same format came back for a completed job and a still-running one.

THE DOCUMENT IS TRIMMED BY DEFAULT, AND IT IS BIG. The function has no server-side paging — it returns the whole document in one string, and observed documents ran to tens of thousands of characters (about 14,000 for a small import, about 71,000 for a larger one), so the default WILL usually truncate. The first max_chars characters (default 20,000) are returned inline and the true size is never hidden: results_length is ALWAYS the full character count Dataverse returned and truncated says whether anything was cut. Raise max_chars (max 2,000,000) to read more; an import failure's reason is usually near the top, but spreadsheet markup is verbose, so budget generously.

A STRUCTURAL SUMMARY, NOT A VERDICT. When the document parses as XML, the summary reports root_tag, element_count, distinct_tag_count and element_counts (a per-tag tally) — computed over the WHOLE document, not just the returned slice, so it describes what you did not see as well as what you did. It is deliberately descriptive only: no node is labelled an error, a warning or a failure, because the document's schema is undocumented and a wrong "the import succeeded" verdict is worse than none. Given the SpreadsheetML format above, the tally counts spreadsheet structure and tells you little about the import itself — element_counts_note repeats that warning in the response. Read the text. If the document does not parse (it may be HTML or plain text), markup_parsed is false with a note explaining why and the text is still returned in full. Parsing uses a hardened parser that refuses XML entity declarations and external entity references outright.

Note the two ids are not interchangeable: this takes the importjob GUID (ImportJobId / importjobid), not the separate ImportJobKey string that ImportSolutionAsync also returns.

Param Type Req Default Notes
dataverse_url str yes Required Dataverse organization URL for this request (e.g., 'https://yourorg.crm.dynamics.com').
import_job_id str yes GUID of the import job whose formatted results to read — the importjobid primary key, which is the same client-supplied ImportJobId that dataverse_import_solution and dataverse_stage_and_upgrade_solution return as import_job_id. Use dataverse_list_import_jobs to find recent import jobs (most recent first), or dataverse_get_import_job to check one job's progress before reading its results.
max_chars int no 20000 See note below.
  • max_chars — Maximum number of characters of the results document to return inline. RetrieveFormattedImportJobResults has no server-side paging — it returns the whole document in one string — so the slice is taken here. results_length always reports the FULL character count Dataverse returned regardless of trimming, and truncated says whether anything was cut, so the true size is never hidden. Any document summary is likewise computed over the WHOLE document, not just the returned slice. Raise this (max 2,000,000) to read more. (ge=1000, le=2000000)

Returns JSON. Errors return {"error": true, "message": "..."}.


dataverse_get_solution

Read · idempotent · category solutions

Retrieve a single Dataverse solution by its unique name or GUID.

Returns full details including version, publisher, and managed status. Provide solution_unique_name or solution_id — not both.

Param Type Req Default Notes
dataverse_url str yes Required Dataverse organization URL for this request (e.g., 'https://yourorg.crm.dynamics.com').
solution_unique_name str | None no None The unique name of the solution (e.g., 'MyCustomApp'). Provide either this or solution_id, not both. (pattern=^[a-zA-Z_][a-zA-Z0-9_]*$)
solution_id str | None no None The GUID of the solution (e.g., 'a1b2c3d4-...'). Provide either this or solution_unique_name, not both.
select list[str] | None no None Columns to return. Defaults to all standard solution columns.

Returns {"record": ...}. Errors return {"error": true, "message": "..."}.


dataverse_get_solution_history

Read · idempotent · category solutions

Retrieve a single solution history record by its GUID.

Returns import/upgrade/export operation details including result, timing, error messages, and publisher information from msdyn_solutionhistories.

The msdyn_suboperation field distinguishes operation sub-types:

  • 3: Import/Update (in-place overlay; obsolete components are NOT deleted)
  • 5: Upgrade-with-deletion (DeleteComponents phase; obsolete components ARE deleted)
Param Type Req Default Notes
dataverse_url str yes Required Dataverse organization URL for this request (e.g., 'https://yourorg.crm.dynamics.com').
solution_history_id str yes GUID of the msdyn_solutionhistory record to retrieve (e.g., 'a1b2c3d4-1234-5678-abcd-ef0123456789'). (min_len=36)
select list[str] | None no None Columns to return. Defaults to a standard solution history projection.

Returns {"record": ...}. Errors return {"error": true, "message": "..."}.


dataverse_import_solution

Write · non-idempotent · category solutions

Import a Dataverse solution asynchronously via ImportSolutionAsync.

Accepts the solution zip as inline base64 (customization_file) or a local filesystem path (input_path). Returns import_job_id, async_operation_id, and import_job_key immediately — poll dataverse_get_import_job with import_job_id to track progress and retrieve failure details. Requires DATAVERSE_ALLOW_WRITE=true.

IMPORTANT — import mode vs. upgrade mode:

  • hold_for_upgrade=false (default): performs an in-place UPDATE (overlay). Components removed from the new solution version are NOT deleted from the environment. This is NOT a true upgrade.

  • hold_for_upgrade=true: stages the solution as a holding ('_Upgrade') variant without deleting anything yet. Follow up with dataverse_delete_and_promote_solution to complete the upgrade and delete obsolete components (two-step path).

For a single-step true upgrade (stage + delete obsolete + promote in one call), use dataverse_stage_and_upgrade_solution instead.

Param Type Req Default Notes
dataverse_url str yes Required Dataverse organization URL for this request (e.g., 'https://yourorg.crm.dynamics.com').
customization_file str | None no None Base64-encoded solution .zip content to import inline. Provide this XOR input_path — not both and not neither. Rejected if the base64 string exceeds ~3 MB; use input_path instead.
input_path str | None no None See note below.
overwrite_unmanaged_customizations bool no True When True, overwrite existing unmanaged customizations with those in the solution being imported.
publish_workflows bool no True When True, publish workflows (cloud flows) included in the solution.
hold_for_upgrade bool no False When True, hold the solution as a holding solution for staged upgrade. Maps to HoldingSolution in the ImportSolutionAsync request.
skip_product_update_dependencies bool no False When True, skip enforcing product update dependencies during import.
import_job_id str | None no None Client-supplied GUID to use as the importjob primary key. When omitted, one is generated automatically. Use this value to poll dataverse_get_import_job for progress.
  • input_path — Local filesystem path to the solution .zip to import (e.g., '/tmp/MySolution.zip'). The server reads the file and base64-encodes it before posting. Provide this XOR customization_file — not both and not neither. If the server sets DATAVERSE_FILE_BASE_DIR, the resolved path must stay inside that directory — '..' traversal or an absolute path elsewhere is rejected with an error and nothing is read. When that variable is unset the path is not confined.

Returns {"accepted": ..., "import_job_id": ..., "async_operation_id": ..., "import_job_key": ..., "message": ...}. Errors return {"error": true, "message": "..."}.


dataverse_list_import_jobs

Read · idempotent · category solutions

List importjob records, optionally filtered by solution unique name.

The large result XML ('data' column) is excluded from all records by default. Results are ordered by createdon descending (most recent first).

Param Type Req Default Notes
dataverse_url str yes Required Dataverse organization URL for this request (e.g., 'https://yourorg.crm.dynamics.com').
solution_name str | None no None Optional solution unique name to filter results by (e.g., 'MyCustomApp'). Maps to an OData filter on the solutionname column.
top int no 50 Maximum number of import job records to return. (ge=1, le=5000)
select list[str] | None no None Columns to return. Defaults to a projection that excludes the large 'data' XML column. Specify explicitly to override.

Returns {"records": ..., "count": ..., "has_more": ...}. Errors return {"error": true, "message": "..."}.


dataverse_list_solution_components

Read · idempotent · category solutions

List components within a Dataverse solution, with human-readable type names.

Use component_type to filter by type code (1=Entity, 61=Web Resource, 300=Canvas App, 91=Plugin Assembly, 92=SDK Message Processing Step).

Param Type Req Default Notes
dataverse_url str yes Required Dataverse organization URL for this request (e.g., 'https://yourorg.crm.dynamics.com').
solution_id str yes The GUID of the solution whose components to list (min_len=1)
component_type int | None no None Filter by component type code. Common values: 1=Entity, 2=Attribute, 3=Relationship, 9=OptionSet, 10=EntityRelationship, 26=View, 29=Workflow, 60=SystemForm, 61=WebResource, 300=CanvasApp, 371=Connector
top int no 50 Maximum number of components to return (ge=1, le=5000)

Returns {"records": ..., "count": ..., "has_more": ...}. Errors return {"error": true, "message": "..."}.


dataverse_list_solution_histories

Read · idempotent · category solutions

List solution history records from msdyn_solutionhistories.

Tracks import, upgrade, and export operations on solutions. Optionally filter by solution_id or solution_unique_name (mutually exclusive). solution_id is resolved to the solution unique name first, then used to filter history records via msdyn_name. Omit both to list all.

The msdyn_suboperation field distinguishes operation sub-types:

  • 3: Import/Update (in-place overlay; obsolete components are NOT deleted)
  • 5: Upgrade-with-deletion (DeleteComponents phase; obsolete components ARE deleted)

Use msdyn_suboperation to determine whether a history record represents a standard update or a true upgrade with component deletion.

Param Type Req Default Notes
dataverse_url str yes Required Dataverse organization URL for this request (e.g., 'https://yourorg.crm.dynamics.com').
solution_id str | None no None Optional GUID of the solution to filter history records by. Provide either this or solution_unique_name, not both.
solution_unique_name str | None no None Optional unique name of the solution to filter history records by (e.g., 'MyCustomApp'). Provide either this or solution_id, not both. (pattern=^[a-zA-Z_][a-zA-Z0-9_]*$)
select list[str] | None no None Columns to return. Defaults to a standard solution history projection.
top int no 50 Maximum number of solution history records to return. (ge=1, le=5000)

Returns {"records": ..., "count": ..., "has_more": ...}. Errors return {"error": true, "message": "..."}.


dataverse_list_solutions

Read · idempotent · category solutions

List solutions in the Dataverse environment with name, version, and managed status.

Use filter to narrow results (e.g., "ismanaged eq false"). Use dataverse_get_solution for full details on a specific solution.

Param Type Req Default Notes
dataverse_url str yes Required Dataverse organization URL for this request (e.g., 'https://yourorg.crm.dynamics.com').
filter str | None no None OData $filter expression to narrow results. Use lowercase logical names (e.g., "ismanaged eq true", "uniquename eq 'MyApp'")
select list[str] | None no None Columns to return. Defaults to solutionid, uniquename, friendlyname, version, ismanaged, installedon, modifiedon
top int no 50 Maximum number of solutions to return (ge=1, le=5000)

Returns {"records": ..., "count": ..., "has_more": ...}. Errors return {"error": true, "message": "..."}.


dataverse_remove_component_from_solution

Delete · idempotent · category solutions

Remove a component from a Dataverse solution via RemoveSolutionComponent.

Removes the component from the solution only — does not delete the component. Requires DATAVERSE_ALLOW_DELETE=true.

Param Type Req Default Notes
dataverse_url str yes Required Dataverse organization URL for this request (e.g., 'https://yourorg.crm.dynamics.com').
solution_unique_name str | None no None Solution unique name. Provide either this or solution_id, not both. (pattern=^[a-zA-Z_][a-zA-Z0-9_]*$)
solution_id str | None no None Solution GUID. Provide either this or solution_unique_name, not both.
component_id str yes GUID of the underlying component to remove (RemoveSolutionComponent ComponentId) (min_len=1)
component_type int yes Dataverse solution component type code

Returns {"removed": ..., "solution_unique_name": ..., "solution_id": ..., "component_id": ..., "component_type": ...}. Errors return {"error": true, "message": "..."}.


dataverse_stage_and_upgrade_solution

Delete · non-idempotent · category solutions

Perform a single-step true solution upgrade via StageAndUpgradeAsync.

Stages the new solution version as a holding solution, deletes components that are no longer present in the new version (DeleteComponents phase), and promotes the result — all in one async operation. This is the correct tool for a true upgrade that removes obsolete components.

Accepts the solution zip as inline base64 (customization_file) or a local filesystem path (input_path). Returns import_job_id, async_operation_id, and import_job_key immediately — poll dataverse_get_import_job with import_job_id to track progress. Component-level deletion errors (e.g., 0x8004F037 image-column dependency failures) surface in the importjob 'data' XML when include_data=true.

Compare to dataverse_import_solution (hold_for_upgrade=false): that tool performs an in-place UPDATE (overlay) and does NOT delete removed components. For the two-step path, use dataverse_import_solution with hold_for_upgrade=true, then call dataverse_delete_and_promote_solution.

Requires DATAVERSE_ALLOW_WRITE=true.

Param Type Req Default Notes
dataverse_url str yes Required Dataverse organization URL for this request (e.g., 'https://yourorg.crm.dynamics.com').
customization_file str | None no None Base64-encoded solution .zip content to stage and upgrade inline. Provide this XOR input_path — not both and not neither. Rejected if the base64 string exceeds ~3 MB; use input_path instead.
input_path str | None no None See note below.
overwrite_unmanaged_customizations bool no True When True, overwrite existing unmanaged customizations with those in the solution being upgraded.
publish_workflows bool no True When True, publish workflows (cloud flows) included in the solution.
skip_product_update_dependencies bool no False When True, skip enforcing product update dependencies during the upgrade.
  • input_path — Local filesystem path to the solution .zip to stage and upgrade (e.g., '/tmp/MySolution.zip'). The server reads the file and base64-encodes it before posting. Provide this XOR customization_file — not both and not neither. If the server sets DATAVERSE_FILE_BASE_DIR, the resolved path must stay inside that directory — '..' traversal or an absolute path elsewhere is rejected with an error and nothing is read. When that variable is unset the path is not confined.

Returns {"accepted": ..., "import_job_id": ..., "async_operation_id": ..., "import_job_key": ..., "message": ...}. Errors return {"error": true, "message": "..."}.


dataverse_update_publisher

Write · idempotent · category solutions

Update a Dataverse publisher's display name, customization prefix, or option value prefix.

Requires DATAVERSE_ALLOW_WRITE=true.

Param Type Req Default Notes
dataverse_url str yes Required Dataverse organization URL for this request (e.g., 'https://yourorg.crm.dynamics.com').
publisher_id str yes GUID of the publisher to update (min_len=1)
display_name str | None no None Updated friendly display name
customization_prefix str | None no None Updated customization prefix
option_value_prefix int | None no None Updated customization option value prefix (ge=1, le=2147483647)

Returns {"updated": ..., "publisher_id": ...}. Errors return {"error": true, "message": "..."}.


dataverse_update_solution

Write · idempotent · category solutions

Update a Dataverse solution's display name, description, or publisher.

Requires DATAVERSE_ALLOW_WRITE=true.

Param Type Req Default Notes
dataverse_url str yes Required Dataverse organization URL for this request (e.g., 'https://yourorg.crm.dynamics.com').
solution_unique_name str | None no None Solution unique name. Provide either this or solution_id, not both. (pattern=^[a-zA-Z_][a-zA-Z0-9_]*$)
solution_id str | None no None Solution GUID. Provide either this or solution_unique_name, not both.
display_name str | None no None Updated friendly display name
description str | None no None Updated solution description
publisher_id str | None no None Updated publisher GUID

Returns {"updated": ..., "solution_id": ..., "solution_unique_name": ...}. Errors return {"error": true, "message": "..."}.


dataverse_update_solution_version

Write · idempotent · category solutions

Update a Dataverse solution's version string only (e.g., '1.0.0.1' → '1.0.0.2').

Requires DATAVERSE_ALLOW_WRITE=true.

Param Type Req Default Notes
dataverse_url str yes Required Dataverse organization URL for this request (e.g., 'https://yourorg.crm.dynamics.com').
solution_unique_name str | None no None Solution unique name. Provide either this or solution_id, not both. (pattern=^[a-zA-Z_][a-zA-Z0-9_]*$)
solution_id str | None no None Solution GUID. Provide either this or solution_unique_name, not both.
version str yes New solution version string (min_len=1)

Returns {"updated": ..., "solution_id": ..., "solution_unique_name": ..., "version": ...}. Errors return {"error": true, "message": "..."}.


Clone this wiki locally