Citizen Permit Portal with Power Pages

Build an external-facing permit portal with authentication and Dataverse automation.

Introduction

30 Second Summary

Anyone who has applied for a building permit knows the pain of clunky government portals. Behind every smooth citizen-facing form there is a stack of security rules, data validation, and automated routing that keeps things moving.

In this project, you will build a Citizen Permit Portal using Power Pages. Residents will authenticate, submit permit applications through a multistep form, and track their submissions in a secured list. You will also wire up server-side automation that validates data and auto-assigns permits to a reviewer.

What You'll Build

A public-facing permit portal backed by Dataverse, with authentication, data security, a business rule, a low-code plug-in, and a classic real-time workflow.

By the end of this project, you'll have:

  • A Power Pages site with local authentication, a multistep permit application form, and a secured list page so citizens can track their submissions.
  • Server-side logic enforcing data quality through a Dataverse business rule and an automated low-code plug-in running Power Fx validation.
  • A classic real-time Dataverse workflow that auto-assigns new permit applications to a reviewer, demonstrating the legacy automation pattern tested on the PL-200.
  • Secret Mission: integrate a SharePoint document library for permit attachments and generate a permit summary using a Word template.

Are there any prerequisites?

You should be familiar with Dataverse tables and the Power Apps maker portal. You also need an active Power Apps environment where you have the System Administrator role.

A Power Apps Developer Plan (free) gives you a suitable environment. You will activate a free 30-day Power Pages trial in Step 1.

Set Up Your Environment and Power Pages Site

Every external-facing portal needs a foundation: a site to host pages and a database to store form submissions. In this project, you are building a Citizen Permit Portal on Power Pages, backed by a Dataverse table that holds permit applications.

In this step, you will activate the Power Pages trial, provision a site, create the Permit Application table with all its columns, and add a business rule that enforces conditional validation. This gives you the complete data layer before you start building forms and pages.

In this step, get ready to:
  • Activate a Power Pages trial and provision a site from a Starter layout template.
  • Create a Dataverse solution and a Permit Application table with all required columns.
  • Add a business rule that enforces a cost estimate for Demolition permits.
Activate the Power Pages trial and provision your site

Power Pages is a low-code platform for building secure, external-facing websites connected to Dataverse. You need a 30-day trial to access the design studio.

  • Open your browser and navigate to https://make.powerpages.microsoft.com/.
  • Select Try it for free to sign up for the free, 30-day trial.
  • When prompted, select your developer environment from the environment picker at the top of the page.

Why not use the default environment?

The default environment is shared across all users in your tenant. Creating a site there risks exposing data to other users unintentionally. Your developer environment gives you an isolated space to build and test.

  • On the home page, select Start with a template.
  • Choose one of the Starter layout templates (a cross-industry starting point).
  • Select Choose this template.
  • Review the default site name and web address, then select Done.
  • Wait for provisioning to complete. This may take a few moments.

What just happened?

Power Pages created a site in your developer environment. This site has a public URL, a design studio for editing pages, and a connection to Dataverse for storing data. You will configure authentication and add pages in later steps.

Site creation failing?

Make sure you have the System Administrator role and Read-Write Access Mode in your environment. If you selected the default environment by mistake, go back to the environment picker and switch to your developer environment before trying again.

Help me troubleshoot Power Pages site provisioning

Create the solution and Permit Application table

Solutions in the Power Apps maker portal let you package all your customizations (tables, business rules, workflows) into a single transportable unit. You will create a solution, then build the Permit Application table inside it.

  • Open a new browser tab and navigate to https://make.powerapps.com/.
  • Confirm you are in your developer environment using the environment picker in the top-right corner.
  • In the left navigation, select Solutions. If you do not see it, select ...More and then select Solutions.
  • Select + New solution.
  • Enter Citizen Permit Portal as the Display name.
  • Select a Publisher (your default publisher is fine).
  • Select Create.

Now create the Permit Application table inside the solution.

  • Open the Citizen Permit Portal solution you just created.
  • On the command bar, select + New, then select Table, then select Set advanced properties.
  • In the Display name field, enter Permit Application.
  • Switch to the Primary column tab. Change the Display name from Name to Applicant Name. This renames the primary text column.
  • Select Save to create the table.

Why rename the Name column?

Every Dataverse table has a primary column that defaults to the display name "Name". For a permit application, renaming it to "Applicant Name" makes the data immediately meaningful when it appears in lookups and views throughout the portal.

With the table created, add the remaining columns one at a time.

  • In the Permit Application table, select the Columns area, then select + New column on the command bar.
  • For Display name, enter Applicant Contact. Set Data type to Lookup and select the Contact table as the related table. Select Done.
  • Add another column: Display name = Permit Type, Data type = Choice. Create a new choice with four options: Building, Electrical, Plumbing, Demolition. Select Done.
  • Add another column: Display name = Desired Start Date, Data type = Date Only. Select Done.
  • Add another column: Display name = Project Description, Data type = Multiple lines of text. Select Done.
  • Add another column: Display name = Estimated Cost, Data type = Currency. Select Done.
  • Add another column: Display name = Status, Data type = Choice. Create a new choice with five options: Draft, Submitted, Under Review, Approved, Rejected. Select Done.
  • Add one final column: Display name = Assigned Reviewer, Data type = Lookup and select the User table as the related table. Select Done.
  • Select Save Table to commit all columns to Dataverse.

What do these columns represent?

Applicant Contact links a permit to a portal user's contact record. Permit Type categorises the application. Desired Start Date and Estimated Cost capture project specifics.

Status tracks where the application is in the review pipeline. Assigned Reviewer links to the internal user who reviews the permit.

Don't see the Lookup data type?

When you select Lookup as the data type, the maker portal asks you to pick a related table. Make sure you are searching for the correct table name ("Contact" or "User"). If you do not see it, confirm you are working inside your developer environment and not the default environment.

Help me find the Lookup data type for my column

Create the business rule for conditional validation

A business rule lets you enforce logic directly on the Dataverse table without writing code. When the scope is set to Entity, the rule fires server-side as well, meaning it also triggers when the Power Pages portal writes data.

  • In the Permit Application table, select the Business rules area.
  • Select + New business rule. The business rule designer opens with a default condition.
  • Select the Condition component on the canvas. In the properties panel, set the Field to Permit Type, the Operator to Equals, and the Value to Demolition. Select Apply.
  • On the canvas, select the + (plus) sign on the right side of the condition (the true branch).
  • Add a Set Business Required action. Set the Field to Estimated Cost and the Status to Business Required. Select Apply.
  • Add another action on the same true branch: Show Error Message. Set the Field to Estimated Cost and enter the message Demolition permits require a cost estimate. Select Apply.
  • In the top-right corner of the designer, select the drop-down arrow next to the rule name. Rename the rule to Require Cost for Demolition.
  • Set the Scope to Entity (not just one form). This ensures the rule fires on all forms and on server-side writes from the portal.
  • Select Validate on the command bar to check for errors.
  • Select Save.
  • Select Activate to make the rule live.

Why set the scope to Entity?

Business rule scope determines where the rule runs. Setting it to Entity ensures the rule fires server-side for every form and every integration that writes to the table.

This is critical for Power Pages, because portal form submissions write directly to Dataverse without going through a model-driven app form.

Validate shows an error?

Check that the condition field is set to Permit Type (not Status or another choice column). Also verify that the action references Estimated Cost as the target field. The error message text must be filled in before validation passes.

Help me fix my business rule validation error

Your data foundation is in place. You have a Power Pages site, a Permit Application table with all required columns, and a business rule enforcing cost estimates for Demolition permits. Next up, you will build the multistep form that citizens use to submit their applications.

Build the Multistep Permit Form

Your Permit Application table is ready with all the right columns and a business rule that enforces cost estimates for demolition permits. Now it's time to give citizens a way to interact with that data through a public-facing form.

In this step, you'll create a multistep form that guides applicants through the submission process one section at a time. You'll also lock down data access so authenticated users can only create and edit their own submissions.

In this step, get ready to:
  • Create three Dataverse forms for personal info, permit details, and a final review.
  • Build a multistep form page in the Power Pages design studio.
  • Configure table permissions to secure citizen data.
Create three Dataverse forms in the Data workspace

Each step of a multistep form needs its own Dataverse form behind it. You'll create three forms on the Permit Application table, each showing only the fields relevant to that step.

  • In the Power Pages design studio, select Data on the left toolbar.
  • Under Other tables, find and select the Permit Application table.
  • Select the Forms tab.
  • Select + New form.
  • Enter Step 1 - Personal Info as the form name, then select Create.
  • In the form designer, select + Add field and drag the Applicant Name and Applicant Contact fields onto the form canvas.
  • Remove any other fields that appear by default (select the field, then press Delete).
  • Select Save, then select Publish form in the command bar.
  • Select Back to return to the table designer.

Why three separate forms?

A multistep form in Power Pages maps each step to its own Dataverse form. This lets you control exactly which fields appear at each stage, keeping the experience focused for the applicant.

Now repeat the process for the second form.

  • Select + New form again from the Forms tab.
  • Enter Step 2 - Permit Details as the form name, then select Create.
  • Add the following fields to the form: Permit Type, Desired Start Date, Project Description, and Estimated Cost.
  • Remove any other default fields.
  • Select Save, then Publish form.
  • Select Back.

Finally, create the review form.

  • Select + New form once more.
  • Enter Step 3 - Review and Submit as the form name, then select Create.
  • Add all permit fields to the form (Applicant Name, Applicant Contact, Permit Type, Desired Start Date, Project Description, Estimated Cost).
  • Select each field on the canvas, then in the properties pane on the right, check Read-only to prevent editing on this review step.
  • Select Save, then Publish form.

What does read-only do here?

Marking fields as read-only on the review form means the applicant can see everything they entered across the previous steps, but cannot change values on this final page. This gives them a chance to confirm before submitting.

You should now see three forms listed under the Forms tab for the Permit Application table.

Don't see your new forms listed?

Make sure you published each form before navigating away. Unpublished forms won't appear as options when configuring the multistep form component later.

If you accidentally created a form under the wrong table, delete it and start again from the Permit Application table.

help me find my Dataverse forms in the Power Pages Data workspace

Add a multistep form to a new page

With the three Dataverse forms published, you can now wire them together into a single multistep form on a new page. Citizens will navigate through each step sequentially.

  • Select Pages on the left toolbar to switch to the Pages workspace.
  • Select the + icon next to Main Navigation to add a new page.
  • Name the page Apply for Permit, choose Start from Blank, then select Add.
  • On the new blank page, select the Multistep form component from the component library.
  • Select + New multistep form from the dialog.
  • In the Form name field, enter Permit Application Form.

Now configure the form options before adding steps.

  • Toggle Show progress indicator to enabled.
  • Under On submit, select the option to show a success message.
  • Select OK to confirm the form settings.

What is the progress indicator?

The progress indicator displays which step the user is currently on within the multistep form. It can appear as a title, a numeric counter (Step x of n), or a progress bar. Enabling it helps applicants understand how far along they are in the process.

Next, add the three steps to your multistep form.

  • Select + Add the first step.
  • In the Step name field, enter Personal Info.
  • In the Choose a table dropdown, select Permit Application.
  • In the Select a form dropdown, select Step 1 - Personal Info.
  • Select OK to save the step.
  • Select + Add step to add the second step.
  • Enter Permit Details as the Step name.
  • The Permit Application table should already be selected.
  • In the Select a form dropdown, select Step 2 - Permit Details.
  • Select OK.
  • Select + Add step to add the third step.
  • Enter Review and Submit as the Step name.
  • In the Select a form dropdown, select Step 3 - Review and Submit.
  • Under More options, set the step mode to Read only.
  • Select OK.

You should now see all three steps listed in your multistep form configuration panel.

How does the first step differ from later steps?

The first step of a multistep form is automatically set to Create a new record in Dataverse. Subsequent steps are set to Update an existing record, meaning they continue editing the same row that was created in step one.

Form not appearing in the step dropdown?

Only published forms appear in the dropdown. Return to the Data workspace, open the Permit Application table, select the Forms tab, open the missing form, and select Publish form.

help me fix my multistep form configuration in Power Pages

Configure table permissions for the Permit Application table

Without table permissions, authenticated users cannot submit or view data through your portal forms. You need to grant specific privileges and scope data access so each citizen only interacts with their own records.

  • Select Security on the left toolbar to open the Security workspace.
  • Select Table permissions.
  • Select + New permission.
  • In the Table dropdown, select Permit Application.
  • Set the Access type to Contact access.
  • In the Relationship dropdown, select the relationship that maps to the Applicant Contact lookup column.
  • Under Privileges, check Create and Write.
  • Under Web roles, select Authenticated Users.
  • Select Save.

What is Contact access?

Contact access scopes data to the signed-in user's contact record. Because your table has an Applicant Contact lookup pointing to the Contact table, Power Pages uses this relationship to filter records.

A citizen who signs in will only see permit applications where their contact record matches the Applicant Contact field. This prevents users from seeing each other's submissions.

What are web roles?

Web roles are groups you assign to portal users to control what they can access. The Authenticated Users role is a built-in role that automatically applies to anyone who registers and signs into the portal.

Getting a permission error when previewing the form?

Make sure the Authenticated Users web role is selected in the table permission configuration. If you only assigned a custom web role, anonymous or newly registered users won't have access.

Also confirm that Create and Write privileges are both checked. Without Create, the first step of the multistep form cannot insert a new record.

help me fix table permissions for my Power Pages form

Your multistep permit form is live and secured. Next up, you'll add a list page so citizens can track their submissions and configure authentication so they can register and sign in.

Add a Secured List and Authentication

Your multistep form lets citizens submit permit applications, but they have no way to check on those submissions after the fact.

In this step, you'll build a "My Permits" page where authenticated users can track their applications. You'll also verify that authentication is enabled and create a custom web role that restricts data visibility so citizens only ever see their own records.

In this step, get ready to:
  • Create a list page showing permit submissions.
  • Verify authentication is configured for citizen registration and login.
  • Create a custom web role and assign it to table permissions for read-only access.
Create the My Permits list page

Citizens need a way to view their submitted applications in one place. A List component in Power Pages renders Dataverse records directly on a webpage using a view you define.

  • In the Power Pages design studio, select the Pages workspace from the left navigation.
  • Click + Page to create a new page.
  • Name the page My Permits.
  • Select a standard layout and ensure the page is added to the main navigation.

Now add a List component to display permit records.

  • Hover over the editable canvas area on your new page and select the List icon from the component panel.
  • In the Add a list window, choose to create a new list.
  • Under Choose a table, select Permit Application.
  • Under Select Dataverse views, choose a view that shows the columns Applicant Name, Permit Type, Status, and Desired Start Date.
  • Name the list Permit Applications List.
  • Click OK to save.

What if I don't see the right columns in my view?

You can create or modify views in the Data workspace. Select the Permit Application table, click Views, then create a new view with the four columns: Applicant Name, Permit Type, Status, and Desired Start Date. Save and publish the view, then return to the list setup to select it.

Next, configure the list so each record links to the Apply for Permit page in read-only mode.

  • Select the list component you just added and click Edit list.
  • In the list configuration, go to the More options tab.
  • Set the Web Page for Details View to the Apply for Permit page. This ensures that clicking a record opens it in the multistep form as a read-only view.
  • Save your changes.

What does the View Details link do?

When a user clicks a record in the list, Power Pages appends the record's ID to the URL and opens the target page. The form's behavior (read-only or editable) is controlled by the table permissions assigned to the user's web role.

List shows a permissions error?

This is expected. Power Pages protects data by default. You already have table permissions granting Create and Write to Authenticated Users, but Read access for citizens is configured later in this step when you create the Citizen web role.

Why can't I see data in my list preview?

Verify authentication is enabled

For citizens to register and sign in to the portal, you need an identity provider configured. Power Pages supports local authentication (email and password) out of the box.

  • In the design studio, select the Set up workspace from the left navigation.
  • Select Identity providers.
  • Confirm that Local sign in (email + password registration) is listed and enabled. This is the default identity provider for Power Pages sites.

Now test the registration and login flow.

  • Click Preview in the top-right corner of the design studio and select Desktop.
  • On the preview site, click Sign in, then click the Register tab.
  • Fill in a test email and password, then complete the registration.
  • Confirm that you are redirected to the site as a signed-in user. You should see your display name or email in the top-right corner of the page.

What is local authentication?

Local authentication stores user credentials directly in Dataverse as Contact records. When a citizen registers, Power Pages creates a new Contact and associates the sign-in credentials with it. This is the simplest identity provider and works without any external service configuration.

Registration page not appearing?

Make sure you are using the preview URL (not the design studio canvas). The registration flow only works in the live preview or the published site.

Help me troubleshoot my Power Pages registration flow

Create the Citizen web role and assign read permissions

The existing table permissions let Authenticated Users create and edit permits. However, you need a separate web role with Read access so citizens can view (but not edit) their submitted records on the My Permits list.

A custom web role scoped with Contact access means each citizen only sees rows where they are the Applicant Contact. This is the row-level security model in Power Pages.

  • In the design studio, select the Security workspace from the left navigation.
  • In the Protect section, select Web roles.
  • Click + New role.
  • Enter the name Citizen.
  • Leave Authenticated Users Role set to No.
  • Leave Anonymous Users Role set to No.
  • Click Save.

Why create a custom role instead of using Authenticated Users?

The Authenticated Users role is a broad default that applies to every logged-in user. Creating a custom Citizen role lets you grant fine-grained Read access without also granting Write or Delete. In a production portal, you would assign different roles to different user types (citizens, reviewers, admins).

Now assign this role to the Permit Application table permissions with Read privilege.

  • Still in the Security workspace, select Table permissions in the Protect section.
  • Find the Permit Application table permission you created earlier and click the ellipsis (...) next to it.
  • Select Edit.
  • Confirm the Access type is set to Contact access using the Applicant Contact relationship.
  • Under Privileges, enable Read.
  • Under Roles, click Add roles and select the Citizen role you just created.
  • Click Save.

Sync after Portal Management changes

If you created the web role from the Portal Management app instead of the Security workspace, return to the design studio and click Sync in the upper-right corner. Then refresh your browser so the new role appears in the table permissions dropdown.

Verify the configuration by previewing the site as an authenticated user.

  • Click Preview > Desktop to open the site.
  • Sign in with the test account you registered earlier.
  • Navigate to the My Permits page from the main navigation.
  • Confirm that the list loads without a permissions error. If you have submitted any test permits, those records should appear. If no records exist yet, the list shows an empty state.

Still seeing a permissions error on My Permits?

Make sure the Citizen role is assigned to the table permission AND that Read is checked as a privilege. Also verify the access type is Contact access using the Applicant Contact relationship. If the role was created in Portal Management, click Sync in the design studio and refresh your browser.

Help me fix my table permissions for the Citizen role

Your portal now has a fully secured data layer. Citizens can submit permits through the multistep form and track their submissions on the My Permits page. Next up, you'll add server-side automation with a classic real-time workflow and a low-code plug-in.

Create a Classic Real-Time Workflow and Low-Code Plug-in

Your portal is fully functional for citizens. They can register, sign in, fill out the multistep permit form, and view their submissions in a secured list. But what happens on the server side when someone submits a new permit application?

In this step, you'll build two server-side automations that fire when a permit record is created. A classic real-time Dataverse workflow auto-assigns new applications to a reviewer. An automated low-code plug-in validates date logic using Power Fx before the record is saved.

In this step, get ready to:
  • Create a classic real-time Dataverse workflow that auto-assigns permits.
  • Build an automated low-code plug-in with Power Fx validation.
  • Test both automations through the Power Pages portal.
Create a classic real-time Dataverse workflow

The PL-200 exam explicitly tests your ability to configure, troubleshoot, and manage classic Dataverse workflows. These are the legacy automation pattern that preceded Power Automate cloud flows.

  • Return to the Power Apps maker portal at make.powerapps.com.
  • Open your Citizen Permit Portal solution.
  • Select New in the command bar.
  • Select Automation > Process > Workflow.
  • In the Display name field, enter Permit Application Assignment.
  • Set the Table dropdown to Permit Application.
  • Clear the Run workflow in the background checkbox. This makes the workflow real-time instead of asynchronous.
  • Select Create.

What is a real-time workflow?

A real-time workflow runs synchronously. It executes immediately as part of the same transaction that triggered it, before control returns to the user. An asynchronous (background) workflow runs in a queue and may experience delays.

By clearing the background checkbox, you ensure the workflow fires instantly when the record is created. This is the pattern the PL-200 expects you to configure and troubleshoot.

The workflow designer opens. Now configure when the workflow triggers and what it does.

  • Under Start when, check Record is created. Uncheck any other options.
  • In the workflow steps area, select Add Step > Update Record.
  • Click Set Properties on the Update step.
  • Set Status to Submitted.
  • Set Assigned Reviewer to a specific user record in your environment. Select any user (this simulates round-robin assignment to a reviewer).
  • Select Save and Close to return to the workflow designer.
  • Select Activate in the command bar.
  • Confirm activation when prompted.

Why a classic workflow instead of Power Automate?

The PL-200 exam has a dedicated sub-objective for classic Dataverse workflows: configure, troubleshoot, and manage workflow logs. Power Automate cloud flows are covered separately.

Classic workflows run natively inside Dataverse with no external service dependency. They are still widely used in production Dynamics 365 environments and remain a testable skill on the certification.

Don't see the Workflow option?

Ensure you are creating the workflow from inside the Citizen Permit Portal solution, not from the default environment. The New > Automation > Process > Workflow path only appears in solutions.

You also need the Activate Real-time Processes privilege. If the Activate button is greyed out, confirm your System Administrator role is assigned in this environment.

Help me troubleshoot my classic workflow activation.

Create an automated low-code plug-in

A low-code plug-in lets you write server-side validation logic using Power Fx. It runs inside Dataverse before or after a record is saved, without needing a compiled plug-in assembly.

  • In the Power Apps maker portal, select Apps in the left navigation.
  • Find Dataverse Accelerator in the app list and select Play.
  • On the Dataverse Accelerator landing screen, select the Create automated plug-in card.

What is the Dataverse Accelerator?

The Dataverse Accelerator is a model-driven app that provides access to preview features and tooling for Dataverse development. It is automatically installed in all new Dataverse environments.

You use it here to create an automated plug-in. This plug-in runs server-side Power Fx logic in response to a data event on a table.

  • In the Name field, enter Validate Start Date.
  • For Table, select Permit Application.
  • For Run this plugin when the row is, select Created.
  • In the Formula box, enter the following Power Fx expression:
If(ThisRecord.'Desired Start Date' < DateAdd(Now(), 7), Error({Kind: ErrorKind.Validation, Message: "Desired start date must be at least 7 days from today"}))

What does this formula do?

The formula checks whether the Desired Start Date on the new permit record is less than 7 days from now. If it is, the Error() function fires a validation error that prevents the record from being saved.

The ThisRecord reference accesses column values on the row that triggered the plug-in. The ErrorKind.Validation kind signals to Dataverse that this is input validation, not a system failure.

  • Expand Advanced options.
  • Set When should this run to Pre-operation. This ensures validation runs before the record is committed to the database.
  • Select Save.

Why Pre-operation?

Pre-operation means the plug-in runs before the data is written to Dataverse. If the validation fails, the entire create operation is rolled back and the user sees the error message.

Post-operation would run after the record is already saved, which defeats the purpose of input validation.

Don't see the Dataverse Accelerator app?

The app is automatically installed in environments created after October 2023. If your environment is older, search for Dataverse Accelerator in the Power Platform admin center and install it manually.

Ensure you are playing the app in the same environment where your Citizen Permit Portal solution lives. Check the environment picker in the top-right corner of make.powerapps.com.

Help me find and open the Dataverse Accelerator app.

Test both automations

Both automations are now live. Time to verify they work by submitting permits through your Power Pages portal.

  • Return to your Power Pages design studio.
  • Select Preview, then select Desktop.
  • When the site loads, select Sign in and sign in with a registered site user.
  • Navigate to the Apply for Permit page.

First, test the low-code plug-in validation by entering an invalid start date.

  • Fill in the form. On the Permit Details step, set Desired Start Date to a date less than 7 days from today (for example, tomorrow's date).
  • Complete the remaining fields and submit the form.
  • You should see a validation error message stating that the desired start date must be at least 7 days from today.

What should I see?

The form submission fails with the error message from your Power Fx formula. The record is not created because the Pre-operation plug-in blocked it.

Now test a valid submission that triggers the classic workflow.

  • Return to the Apply for Permit page.
  • Fill in the form again. This time, set Desired Start Date to a date at least 7 days in the future.
  • Complete and submit the form. You should see the success message.
  • Return to the Power Apps maker portal.
  • Open your Permit Application table and find the newly created record.
  • Confirm that Status is set to Submitted and Assigned Reviewer is populated with the user you configured in the workflow.

Status still showing Draft?

Open your Citizen Permit Portal solution and confirm the workflow status shows Activated. An inactive workflow does not fire.

Also verify the workflow's Start when is set to Record is created. If it was set to Record is updated, the workflow would not trigger on new submissions.

Help me troubleshoot my classic workflow not triggering.

Both server-side automations are working. Your portal now enforces date validation at the Dataverse layer and automatically assigns new permits to a reviewer the instant they're created.

Secret mission

Integrate SharePoint Document Management and Word Templates

Your permit portal handles applications and automations, but what about supporting documents? Real permit workflows need file attachments and printable summaries. Extend the system with SharePoint-backed document storage and auto-generated permit reports using Word templates.

Clean Up Your Resources

Clean Up Your Resources

Decide whether to keep your resources running, pause them to come back later, or delete them entirely. This project runs on a Power Pages 30-day trial and the Power Apps Developer Plan, so there are no ongoing costs while the trial remains active.

Resources you created:

  • Power Pages trial site (auto-expires after 30 days if not converted).
  • Citizen Permit Portal solution in Dataverse (contains the Permit Application table, business rule, classic workflow, low-code plug-in, forms, table permissions, web role, and Word template).
  • SharePoint document library for Permit Application (if you completed the Secret Mission).

Keep everything running

No action needed. Choose this if you're still actively building or want to practice configuring additional pages, forms, or workflows.

  • Your Power Pages trial remains active for 30 days from activation. You can continue iterating on the portal during this window.
  • All Dataverse components (tables, business rules, workflows, plug-ins) persist in your developer environment at no cost.
  • The SharePoint document library (if created) remains in your Microsoft 365 tenant and counts toward your tenant storage.

Pause - I'll come back to this later

Shut down the public-facing site to prevent external access while preserving all configuration so you can resume later.

  • Open the Power Platform admin center at admin.powerplatform.microsoft.com.
  • Select Resources in the left navigation, then select Power Pages sites.
  • Find your Citizen Permit Portal site, select it, and click Disable. This takes the site offline but keeps all configuration intact.
  • Your Dataverse solution and all its components remain untouched. When you're ready to resume, return here and re-enable the site.

Delete - I don't want to use this again

Remove all project resources permanently. This cannot be undone.

  • Delete the Power Pages site: open the Power Platform admin center at admin.powerplatform.microsoft.com. Select Resources > Power Pages sites. Find your site, select it, and click Delete. Confirm the deletion.
  • Delete the Dataverse solution: go to make.powerapps.com, select your developer environment, and open Solutions in the left navigation. Find the Citizen Permit Portal solution, click the three-dot menu, and select Delete. This removes the Permit Application table, business rule, classic workflow, low-code plug-in, forms, table permissions, web role, and Word template.
  • Delete the SharePoint document library (Secret Mission only): open your SharePoint site in a browser, navigate to Site contents, find the document library created for Permit Application, click the three-dot menu, and select Remove.

Nice Work!

Nice Work!

You just built a fully functional external-facing Citizen Permit Portal backed by Dataverse, complete with authentication, server-side automation, and data security.

You've learned how to:

  • Build a Power Pages site from scratch with local authentication, a multistep form, and a secured list page for citizen self-service.
  • Configure table permissions with Contact access and a custom web role to ensure citizens only see their own records.
  • Create a classic real-time Dataverse workflow for auto-assignment, a business rule for conditional field requirements, and an automated low-code plug-in with Power Fx server-side validation.
  • (Secret Mission) Integrated SharePoint document management for permit attachments and generated a populated permit summary using a Word template.

Ready to quiz yourself?