microsoft / microsoft/managed-apps
[Bug] Dataverse table alias is ambiguous and native CRUD returns OperationNotFound
Nobody has claimed this yet.
- Dominant language
- TypeScript
- Stars
- 11
- Forks
- 7
- Avg merge
- 5d 19h
- Merged PRs (30d)
- 5
Description
Describe the bug
The documented tabular Dataverse command cannot be selected with Managed Apps CLI 0.23.0. The repository documentation says to use --connector dataverse --as table, but the CLI resolves dataverse to two connectors with the same display name and exits as ambiguous. Binding tables through shared_commondataserviceforapps succeeds, but native getClient(dataSources) CRUD calls then fail in App Player with OperationNotFound.
Steps to Reproduce
- Create or initialize a Managed App in an environment with Dataverse.
- Create a custom Dataverse table, for example
sample_order. - Run:
ms app add data-source `
--connector dataverse `
--as table `
--table sample_order `
--skip-codegen `
--non-interactive `
--json
- The CLI exits with:
Multiple connectors match 'dataverse'. Specify the connector ID directly:
shared_commondataservice (Microsoft Dataverse)
shared_commondataserviceforapps (Microsoft Dataverse)
- Use the current-environment connector as a workaround:
ms app add data-source `
--connector shared_commondataserviceforapps `
--as table `
--dataverse-environment-id <environment-id> `
--table sample_order
- Call native CRUD from the app:
const client = getClient(dataSources)
await client.createRecordAsync('sample_order', record)
Expected behavior
--connector dataverse --as table should resolve the dedicated tabular Dataverse data source described in plugins/microsoft-managed-apps/shared/connector-reference.md, bind the active environment without a connection ID, and generate metadata that native CRUD can execute.
Actual behavior
The alias is ambiguous because ms connector list exposes only shared_commondataservice and shared_commondataserviceforapps, both named Microsoft Dataverse.
Using shared_commondataserviceforapps generates a Dataverse table entry and dataset binding, but App Player native CRUD fails before reaching Dataverse:
{
"error": {
"path": "",
"source": "configuration",
"message": "Unable to match incoming request to an operation.",
"reason": "OperationNotFound"
}
}
The generated connector metadata has an empty version, so native CRUD constructs a dataset/table URL for which the runtime cannot match an operation. The failure affects both createRecordAsync and the preceding retrieveRecordAsync reconciliation calls.
Environment information
- Managed Apps CLI:
0.23.0(latestnpm dist-tag on September 10, 2026) - Node.js:
v26.7.0 - npm:
11.19.0 - OS: Windows
- Framework: React 19, TypeScript, Vite 8
- Connector: Microsoft Dataverse
- Enterprise network: Yes
Additional context
The repository documentation currently states that the tabular Dataverse connector is --connector dataverse and does not use the connection-id model. That command is not reachable unambiguously in CLI 0.23.0. shared_commondataservice exposes legacy tabular operations such as PostItem_V2, while shared_commondataserviceforapps exposes current-environment actions such as CreateRecord; neither provides the documented dedicated connector identifier through ms connector list.
Contributor guide
No contributing guide indexed for this repository
First steps
- Read the whole issue, then the project's contributing guide.
- Comment on the issue to say you are picking it up — it saves two people doing the same work.
- Fork the repository and make your change on a branch.
- Open a pull request that references the issue number.
Research direction
Start with plugins/microsoft-managed-apps/shared/connector-reference.md and reproduce the ms app add data-source command using the documented alias. Then trace getClient(dataSources), the generated connector metadata, and the retrieveRecordAsync/createRecordAsync calls. Done means the alias resolves unambiguously and native CRUD no longer returns OperationNotFound for a bound Dataverse table.
Written by the indexing model from the issue text.
Assessment
- Tech stack
- typescript
- Domain
- api, cli, databases
- Issue type
- Bug
- Difficulty
- 4/5
- Estimated time
- 3-5 days
- Activity status
- Active
- Clarity
- Mostly clear
- Newbie friendliness
- 52/100