Wednesday, July 15, 2026

How to sort a view by multiple columns (user personal view)

A system view can be sorted by multiple columns and published. However the user is stuck with this, unless you know this trick. Read on!

Consider you are on the Accounts list and you want to sort the list based on Address 1: City first and then by the Account Name field.
  • Click on Address 1: City header column and sort based on your preference (A-Z or Z-A).
  • Now hold the Shift key on the keyboard and then click on the Account Name header column and sort based on your preference.
  • If you want to add another column to this list, continue holding the Shift key and click on the 3rd column header and sort it.
Hope this helps!

How to enable In-App Notification in Dynamics 365 CE

In-app notifications allow Dynamics 365 users to receive contextual messages directly within a model-driven app such as Dynamics 365 Sales, Customer Service, or Field Service.

In-App notifications in Dynamics 365
Notifications can appear as:

  • Toast notifications on the right side of the application.

  • Notification centre messages accessed through the bell icon.

Notifications remain in the notification centre until the user dismisses them or they expire. The default expiry period is 14 days, although this can be changed when the notification is created.

How to Enable In-App Notifications

The feature must be enabled separately for each model-driven app.

  1. Go to make.powerapps.com.

  2. Open the solution containing the model-driven app.

  3. Select the app and choose Edit.

  4. Open Settings.

  5. Select Features.

  6. Enable In-app notifications.

  7. Save and publish the app.

The notification setting is stored at the individual model-driven app level.

How Notifications Are Created

Notifications can be generated using:

  • Power Automate.

  • JavaScript or the Dataverse Web API.

  • A plug-in or custom integration.

  • The Dataverse SendAppNotification action.

  • Direct creation of records in the Notification table.

Notifications created through SendAppNotification are stored in the Dataverse Notification table, with the logical name appnotification.

Required Security Privileges

There are 4 tables to keep in mind so notifications work smoothly.

  • Notification (appnotification): This is where notifications are stored.

  • Model-Driven App User Setting (appusersetting): The table stores app-specific settings and preferences for each user.
  • Setting Definition (settingdefinition): This table contains the definition of notification-related settings that the model-driven app reads. The user needs Read and Append To privileges because the Model-driven App User Setting record references the relevant Setting Definition record.
  • Send In-App Notification (prvSendAppNotification): To send notifications to others.

Assign the following Privileges


Notification

  • Create, Read and Delete
  • The close or cross button deletes the individual appnotification record. Without Delete access, users may see the close button but be unable to dismiss individual notifications.
  • You may give User, BU or ORG level depending on the access you want to assign.

Model-driven App User Setting

  • Create, Read, Write and Append.

  • These are ORG level access.


Setting Definition

  • Read and Append To

  • These are ORG level access.


Send In-App Notification

  • ORG level access under Miscellaneous privileges tab.

These privileges allow the notification bell, notification centre and user notification settings to work correctly.

To sse “Dismiss All”, the user requires:

  • Model-driven App User Setting

  • Setting Definition

Dismiss All does not immediately delete every notification record. It updates the user setting so that older notifications are no longer retrieved.

Hope this helps!

Thursday, February 19, 2026

Field Service pricing vs ERP pricing: How to turn off the Clash

In Dynamics 365 Field Service, pricing and cost can be calculated by Field Service itself (using features like price lists, products, services, agreement pricing, etc. within Field Service). However if you'd like, you can always disable it.

This happened in one of our environments that a solution dependency was created. When I looked, there was a solution installed with the name: msdyn_FieldServiceDisablePricingComponents

I tried looking at sources from where I can download and install this solution. However, this simple setting in Field Service solves it.

When people say “install the Field Service Disable Pricing Components solution”, they’re usually referring to a built-in capability controlled by Field Service Settings, not a separate managed solution you import into Dataverse.

The practical outcome:
  • Field Service stops calculating price and/or cost
  • Another system becomes the source of truth (e.g., Project Operations, Finance & Operations, or an ERP)

Prerequisites


Before you change settings, make sure you have:
  • Administrator rights to the Power Platform environment (System Administrator / Field Service Admin equivalent).
  • Dynamics 365 Field Service installed in the environment.
  • Access to the Field Service app and the Settings area.

Step-by-step: Disable pricing components


Step 1: Sign in
  • Open the browser.
  • Sign in to your Dynamics 365 Field Service instance.

Step 2: Open Field Service Settings
  • Go to the Field Service app.
  • In the sitemap (left navigation), switch to Settings (typically near the bottom).
  • Under General, select Field Service Settings.

Step 3: Change Work Order / Booking pricing options
  • Open the Work Order / Booking tab.
  • Update these settings:
    • Calculate Price = No
    • Calculate Cost = No
  • Select Save & Close.
That’s it—Field Service will stop calculating those values internally.

Tuesday, January 20, 2026

Find what’s hiding a field in Dynamics 365: Step-by-Step with PowerApps Live Monitor

A Little Background


A field (msdyn_customergroupid / Customer Group) exists in Dataverse for the Account table, but it is not showing on the Account form in a Dynamics 365 model-driven app. Our requirement was to show this on the form and I know that we had made it visible on the Account form.

However, after a deployment we noticed that it wasn't the case. Now it could be because on various reasons:
  • The field is hidden on the form level.
  • Column security profile was implemented.
  • There is a business rule, due to which it was hidden.
  • There is a script, due to which the field was hidden.


Our Approach


The easiest way to rule out the problem is to start with the simplest reason and work your way up.

Step 1 - To check if field was hidden on the form


We checked if the field was hidden on the form? It wasn't. That was easy.

Now, to check Business Rules and Script was a hard road for us because we had 20+ rules and many functions written on form load.

Step 2 - Run quick form-runtime checks (console logic)


We used simple client checks to classify the problem.
This is the fastest way to know whether you’re dealing with design-time vs runtime.
Click F12 > Console and run these commands:

Xrm.Page.getControl("msdyn_customergroupid")
If the call returns null, the field is not on the form. For us, tt returned the Control means something must be hiding it.

Xrm.Page.getControl("msdyn_customergroupid").getVisible()
If it returns a control, something must be hiding it. We ran the below command to confirm:
It returned FALSE.

Step 3 - Use PowerApps Live monitor to capture the visibility change


When I opened the PowerApps Live Monitor and performed the steps within the App, I captured a Live monitor event:
  • dataSource: Forms.FormChecker.ControlStateChange
  • controlName: msdyn_customergroupid
  • visible before: true
  • visible after: false

And the call stack included:
  • M.setVisible(...)
  • pbl_c3f86e4e73b7ed1183ff6045bd8c93df(...)
  • Mscrm.BusinessRulesScript.Initialize(...)


Key Finding:


The field was initially visible, then explicitly hidden at runtime by a business rule script.
This pattern indicates the visibility change came from a Business Rule (Power Apps compiles business rules into runtime scripts, commonly visible as pbl_<guid> style functions).

So we could say with confidence:

✅ A Business Rule running on the Account form hid Customer Group by calling setVisible(false).
✅ Not JavaScript web resources. Not security. Not form XML missing. Not personalization.
✅ Focused our attention to look at all the business rules and we could find the culprit.

Hope this helps!

Thursday, December 25, 2025

Dual-write | Initial Sync for newly added Legal Entities in Dual-write (D365 F&O → Dataverse)

Dual write initial sync
When you add a new legal entity in a Dual-write enabled environment, this checkbox decides whether
you want to sync data for the newly added legal entity.

Also, without impacting existing legal entities.


The Core Concept


The checkbox "Skip initial write for newly added legal entities" controls whether an initial sync (initial write) is triggered from Dynamics 365 FO to Dataverse when a new legal entity is added.

Two possible behaviors:


1) Checkbox is checked
  • Initial sync is skipped
  • No data is written automatically for that legal entity
  • You must manually trigger syncs later

2) Checkbox is unchecked (recommended for initial sync)
  • Initial sync runs automatically
  • Sync applies only to the newly added legal entity
  • Existing legal entities are not reprocessed
  • Better performance and cleaner execution

👉 Bottom line:
Unchecking this box is the correct and safest way to run an initial sync only for the new legal entity.


When To Use This


A common real-life scenario:
  • Dual-write is already running and live with other legal entities.
  • A new company / legal entity is introduced later.
  • You want data to sync only for the new entity, without disturbing production data.

Step-by-Step: Perform Initial Sync for a New Legal Entity


Step 1: Open Dual-write

Navigate to: Workspaces → Data management → Dual-write

Data management


Step 2: Open Environment Details

Click Environment details from the Dual-write workspace.

Environment Details


Step 3: Go to Legal Entities

Select Legal Entities to view the list of companies enabled for Dual-write.


Dual Write Legal Entities

Step 4: Add the New Legal Entity

  • Click Add Legal Entity.
  • ❌ Uncheck: Skip initial writes for newly added legal entities
  • Click Save




Step 5: Confirm Sync Completion

  • Once the system finishes syncing table maps, you’ll see: Legal entities updated successfully!

This confirms the initial write has been triggered only for the new legal entity.


What Happens Behind the Scenes

  • Dual-write runs initial write only for the new legal entity.
  • Existing legal entities are untouched.
  • No historical reprocessing.
  • No performance degradation.
  • Table maps are reused automatically.
  • Makes incremental rollout safe.

Hope this helps!