Description
WBS Connect for Dataverse turns a WordPress site into a front end for your own Microsoft Dataverse (or Dynamics 365) environment. Records from any Dataverse table render as card grids and detail pages via shortcodes, and site forms create records directly in Dataverse. The data stays in Dataverse; only the presentation layer lives in WordPress.
Features
- Collections. Publish any Dataverse table by naming the table, the columns and an optional status filter. No code required; developers can also register collections via a filter.
- Grid and detail on one page.
[wbsdvc_collection]renders the card grid, and the same page renders the detail view when a record is selected, so links stay short. - Search, filters, sort and paging. Offer visitors a search box, filter dropdowns and sort choices per collection, and page through long tables with Previous and Next links that keep the current state. Column labels come from the table’s display names in Dataverse.
- Block editor. Dataverse Collection, Dataverse Record and Dataverse Form blocks wrap the shortcodes with a dropdown of your configured collections and forms and a live preview.
- Images and files. Show a Dataverse Image column on cards and detail pages and offer File columns as downloads, served through your own site so nothing points at Dataverse directly.
- Clean detail URLs. Point a collection at a slug column and detail links use readable slugs (
?dvc=my-record) instead of raw record ids. Id links keep working as a fallback. - Write-back forms. Build a form as a list of typed fields (text, email, phone, multi-line, number, money, date, date and time, choice, multi-select choice, yes/no, lookup, hidden). Values are validated and converted on the server, table metadata fills in labels, options and required levels, and submissions create records in Dataverse, optionally related to the record the form was shown on. Every submission is nonce-verified, honeypot-checked and rate limited; Cloudflare Turnstile can be switched on per form.
- Edit mode. An update-mode form prefills from the record the page shows and saves changes back to it, limited to records visible through the bound collection.
- Webhooks. Post a signed JSON message to URLs of your choice when a form creates a record and when the Dataverse connection fails or recovers, for Power Automate flows or Teams alerts.
- Server-side authentication. The plugin signs in with an Entra ID app registration (client-credentials flow) and a Dataverse application user with a least-privilege role. Credentials never reach the browser;
wp-config.phpconstants are the recommended home for them. - Caching and fail-open. Reads are cached with a configurable TTL. When Dataverse is unreachable, pages show a friendly notice instead of failing; the site never goes blank.
- Display-ready values. Choices, money, dates and lookups arrive formatted by Dataverse itself, in the environment’s locale.
- Themeable. All output runs through templates a theme can override, so markup, classes and SEO belong to the site owner.
Documentation
Setup walkthrough, every collection and form setting, shortcode and block attributes, webhooks, health alerts, the hook reference and a guide for moving from other Dataverse plugins: https://woods.consulting/docs-wbs-connect/
Requirements
- PHP 8.0 or newer, WordPress 6.0 or newer.
- Access to a working Microsoft Dataverse or Dynamics 365 environment is required. Without one the plugin has no function. Free developer environments are available from Microsoft: https://learn.microsoft.com/power-platform/developer/plan
External services
This plugin connects to two external services, both operated by Microsoft and both belonging to you, the site owner, plus one optional third-party service you switch on per form. Data flows only between your WordPress host and your own Microsoft tenant’s endpoints; nothing is sent to WOODS Business Solutions or any other third party, and the plugin contains no telemetry.
- Microsoft Entra ID token endpoint (
login.microsoftonline.com). The plugin requests OAuth2 access tokens here using the tenant id, client id and client secret you configure. This happens whenever a cached token has expired. -
Your Microsoft Dataverse environment (the
*.dynamics.comURL you configure, for examplehttps://yourorg.crm4.dynamics.com). The plugin reads the records you chose to publish and creates the records your visitors submit through configured forms (typically a name, email address, phone number and message). This happens on page views of pages using the shortcodes (subject to caching) and on form submissions. -
Cloudflare Turnstile (optional). When you switch on the Turnstile toggle for a form and enter a site key and secret key, that form loads the Turnstile widget script from
challenges.cloudflare.comin the visitor’s browser and, on submit, your site sends the challenge token together with the visitor’s IP address to Cloudflare’s siteverify endpoint to confirm the challenge passed. Forms without the toggle never contact Cloudflare. Terms: https://www.cloudflare.com/website-terms/, privacy: https://www.cloudflare.com/privacypolicy/
Webhooks you configure yourself post to the URLs you enter and nowhere else.
The Microsoft services are governed by Microsoft’s terms and privacy statement:
- Terms: https://www.microsoft.com/licensing/terms
- Privacy: https://privacy.microsoft.com/privacystatement
WOODS Business Solutions is an independent company and is not affiliated with, endorsed by or sponsored by Microsoft. Dataverse, Dynamics 365 and Microsoft are trademarks of the Microsoft group of companies, used here solely to describe compatibility.
Screenshots
![Collection grid rendered by [wbsdvc_collection].](https://ps.w.org/wbs-connect-for-dataverse/assets/screenshot-1.png?rev=3620392)




Blocks
This plugin provides 3 blocks.
- Dataverse Record The detail view of one record from a Dataverse collection, picked by slug or from the page URL.
- Dataverse Collection A card grid of records from a Dataverse collection, with the detail view on the same page.
- Dataverse Form A form whose submissions create records in a Dataverse table.
Installation
- Install and activate the plugin.
- In the Entra admin center, create an app registration (no redirect URI needed) and a client secret.
- In the Power Platform admin center, create an application user for that app registration in your environment and assign it a least-privilege security role: Read on the tables you publish, Create on the tables your forms write to, Write on tables used by update-mode forms. Do not use System Administrator.
- Enter tenant id, client id, client secret and environment URL under Settings, Dataverse Connect, or define them as
WBS_DATAVERSE_CONNECT_TENANT_ID,WBS_DATAVERSE_CONNECT_CLIENT_ID,WBS_DATAVERSE_CONNECT_CLIENT_SECRETandWBS_DATAVERSE_CONNECT_ENV_URLinwp-config.php(recommended). - Run “Test connection” on the settings page.
- Add a collection on the Collections tab and put
[wbsdvc_collection name="<key>"]on a page, or insert the Dataverse Collection block. The step-by-step version with screenshots is at https://woods.consulting/docs-wbs-connect-getting-started/. Optional shortcode attributes:per_page,columns,detail_page,form,search,filters,sort.
FAQ
-
Where is the documentation?
-
At https://woods.consulting/docs-wbs-connect/: getting started, collections, forms, blocks, webhooks, health alerts, hooks and templates, the Pro add-on, and migrating from DataPress.
-
Do I need my own Dataverse environment?
-
Yes. The plugin is a front end for an environment you already own and administer; it ships with no data and no Microsoft account. Free developer environments are available from Microsoft at https://learn.microsoft.com/power-platform/developer/plan.
-
How is this different from Microsoft Power Pages?
-
Power Pages is Microsoft’s hosted portal product with per-user and per-page-view licensing. This plugin serves the same Dataverse data from your own WordPress site on standard hosting, through the official Dataverse Web API. Dataverse remains the single source of truth; only the front end moves to WordPress.
-
Does WOODS Business Solutions see my data?
-
No. Your WordPress site talks directly to your own Microsoft endpoints (
login.microsoftonline.comand your environment’s*.dynamics.comURL). Nothing is sent to us, and the plugin contains no tracking or telemetry of any kind. -
Where do my credentials live?
-
Preferably as constants in
wp-config.php, which lock the matching settings fields and keep the secret out of the database entirely. Alternatively the settings page stores them in the WordPress options table; the secret is never displayed again after saving. Credentials are only ever used server-side and never reach the browser. -
What data leaves my site?
-
Two things, both to your own Microsoft tenant: the configured credentials during token requests to
login.microsoftonline.com, and the data of form submissions (the fields you mapped, typically name, email, phone and message) written to your Dataverse environment. Record data flows the other way, from your environment to your site. No other external requests are made. -
Does it work with any table?
-
Any table the application user can read, standard or custom. A collection needs the table’s logical name, its entity set name, a name column and the columns to display. Writes work against any table the application user may create records in, with values mapped to text columns; typed columns can be handled via a developer filter.
-
Can visitors edit records?
-
Only through an update-mode form, and only records that are visible through the collection the form is bound to. The application user needs Write on that table. Records that fail the collection’s status filter cannot be opened or changed.
-
Are the templates customizable?
-
Yes. Copy any file from the plugin’s
templates/directory into<your-theme>/wbs-connect-for-dataverse/and edit the copy; the theme version wins, and child themes work too.
Reviews
Contributors & Developers
“WBS Connect for Dataverse” is open source software. The following people have contributed to this plugin.
ContributorsTranslate “WBS Connect for Dataverse” into your language.
Interested in development?
Browse the code, check out the SVN repository, or subscribe to the development log by RSS.
Changelog
1.5.2
- The plugin homepage now points at the documentation site. No functional changes.
1.5.1
- Primary key from metadata: collections over activity tables (task, email, appointment, phone call) and any other table whose key is not
<
table>id now work; an explicit id_column can also be set in code. Found while testing the Pro Business tier live.
1.5.0
- Search, filters and sort on collections: pick the columns on the Collections tab and visitors get a search box, filter dropdowns and sort choices that work without JavaScript. The [wbsdvc_collection] shortcode accepts per_page, search, filters and sort.
- Paging: set the records per page on the collection or in the shortcode; Previous and Next links keep the current search, filters and sort, and a result count is shown when Dataverse reports one. Each collection can also have its own cache lifetime.
- Column labels in cards, detail tables and the toolbar come from the table’s display names in Dataverse instead of being guessed from logical names.
- Typed form fields: a form is now an ordered list of fields with a type, label, required flag, options and default each. Choices, dates, numbers, money, yes/no and lookups are validated and converted on the server. Forms saved with earlier versions keep working unchanged.
- Update mode for forms: prefill from the record the page shows and save changes back to it. Only records visible through the bound collection can be edited.
- Cloudflare Turnstile per form, plus a custom success message and an optional redirect after a successful submission.
- Block editor: Dataverse Collection, Dataverse Record and Dataverse Form blocks with a dropdown of configured collections and forms and a live preview.
- Image and File columns: pictures on cards and detail pages and file downloads, served through your own site. Only published records are served; files up to 5 MB are cached for a day.
- Webhooks tab: post a JSON message, optionally signed with a shared secret, when a form creates a record and when the connection fails or recovers. Every webhook has a Test link.
- Developers: wbs_dataverse_connect_patch() and wbs_dataverse_connect_get_raw() in the client, a wbs_dataverse_connect_typed_value() helper, the actions wbs_dataverse_connect_record_created, wbs_dataverse_connect_record_updated and wbs_dataverse_connect_webhook_dispatched, and filters for the toolbar, the block dropdowns, webhook payloads and media handling. Two new templates, collection-toolbar.php and collection-pagination.php, can be overridden from the theme.
1.4.0
- Review request: after the plugin has rendered collections or created records on a site for at least a week, administrators see one request to rate it on WordPress.org, with a direct link to the review form. It can be snoozed for a month or switched off for good, appears only on the Dashboard, the Plugins screen and the plugin’s own page, and never comes back once answered. Site builders can suppress it with the wbs_dataverse_connect_review_due filter.
- Rate and Support links in the plugin row on the Plugins screen and in the footer of the plugin’s settings page.
1.3.0
- WBS Forms bridge: map a WBS Forms (or Contact Form 7-style) submission straight into a Dataverse table, with per-field typing (text, email, date, choice, multi-select choice, boolean, lookup, and lookup-by-name). Declare a mapping per form with the wbs_dataverse_connect_bridge_maps filter or the stored option. The form keeps rendering, validating and emailing on its own, so a Dataverse outage never loses a submission; the failure is logged and health-alerted.
- Per-form connection: a bridge map can target a different Dataverse environment than the site default.
- Top-level admin menu: Dataverse Connect now has its own menu item instead of living under Settings.
1.2.0
- Extension hooks for add-ons; per-connection token and cache keys.
1.1.0
- Health alerts: when a request to Dataverse fails, an email goes out right away to the alert address (and an optional second recipient), and again when the connection recovers. Failed form submissions always alert, whatever the cause.
- Scheduled connection probe twice a day, so an expired client secret is reported within hours even on a quiet site instead of surfacing as broken forms weeks later.
- Health status readout on the connection tab, and a wbs_dataverse_connect_health_event action for site-specific automation.
1.0.0
- Initial release: collections (grid and detail shortcodes for any Dataverse table), write-back forms with field mapping and lookup binding, server-side Entra ID auth, response caching with fail-open behavior, theme-overridable templates.
