Showing posts with label Dynamics CE. Show all posts
Showing posts with label Dynamics CE. Show all posts

How to Show SharePoint Documents in Model-Driven Apps and Power Pages

Author: Forrest Zhang

When using SharePoint document management with Dataverse, the right configuration depends on where you want users to see and manage the files. A model-driven app and a Power Pages site may both use Dataverse and SharePoint, but the document display pattern is not the same.

The key difference is this: model-driven apps use the SharePoint document experience through sharepointdocument, while Power Pages uses a form subgrid based on Document Locations. Mixing these patterns can lead to confusing configuration and broken document behavior.

Document Malware Scanning in Dynamics 365: What’s Covered by SharePoint vs Dataverse

Author: Forrest Zhang

When someone asks whether “Dynamics 365 supports virus scanning or document quarantining,” the correct answer is: it depends on where the document is stored. In Microsoft’s ecosystem, documents attached to Dynamics experiences typically live in one of two places:

  • SharePoint / OneDrive (via Dynamics 365 “Document Management” integration)
  • Dataverse (Notes/attachments, File columns, and other Dataverse-backed storage)

Both can provide malware protection, but the capabilities and the operational behavior differ.

How to Add a Custom Ribbon Button to the Global Command Bar in Dynamics 365 CRM

 The Global Command Bar is the toolbar at the top of every screen in your model-driven apps. This guide shows exactly how to add your own custom button to it using Ribbon Workbench.

What we will build: A “Create Case” button that opens a new Case form in a new browser tab — available everywhere in the app.

Thumbnail Grid PCF: User Guidance

Author: Forrest Zhang  •  Version: 0.2.3

The Thumbnail Grid PCF turns a standard Dataverse subgrid into a clean, visual card layout with image, title, subtitle, and badges. It is useful when users need to quickly understand records by picture (files, products, assets, properties, listings, etc.) instead of scanning rows.

Dataverse Custom API vs. Classic Action

In Microsoft Dataverse / Dynamics 365 projects, we often need a clean way to implement “business operations” such as Submit, Approve, Reject, Close, Recalculate, or Validate. Two common options come up:
  • Custom API (modern, contract-based)
  • Classic Action (legacy process-based “Action”)

This article compares them in plain language, with real scenarios and governance considerations (security, auditability, and maintainability). It’s designed for solution architects, functional consultants, and makers who need to make the right platform choice, not just “get it working.”

Do Dataverse Application Users Need API Permissions or Admin Consent?

 Short Answer: No.

When you use the Dataverse application user pattern, you do not need to:

  • Add “Dynamics CRM” API permissions to your app registration, or

  • Click “Grant admin consent” in Entra ID (Azure AD).

Everything is governed by the Dataverse application user + security roles, not by Entra “API permissions”.

Implementing Dynamic Subgrid Filtering in Power Apps Model-Driven Forms Introduction

 In the Rental Smart MVP project, we often need to display filtered data in subgrids on forms like the Property form. This helps property managers quickly view owner expenses without clutter. Here's a simple JavaScript function to dynamically filter the Owner Expense History subgrid for Bills that are historical (Paid or Void), linked to the property owner, and not unit-specific. It uses setFilterXml for UCI compatibility and assumes the subgrid is set up as a related entity grid for Charges.

Dataverse Date & Time columns: a practical guide

The two settings that matter

  • Format: Date only or Date and time.

  • Behavior: User Local, Date Only, or Time zone independent.

These decide storage, conversion, and what users see.

Counting specific-user changes in Dataverse with Audit History

 Goal

Show how to count distinct records whose tracked columns were changed by a specific user (e.g., a Power Pages account), using Audit History only.

Dynamics 365 → Clio Integration with Azure Service Bus & Durable Functions

From Zero to Working Demo: Power Automate → Azure Service Bus → Azure Durable Functions → Clio API

This guide walks a junior developer from a blank Azure subscription to a running integration that accepts a message, runs a Durable Function, and creates a contact in Clio via OAuth. It includes the Azure setup, the required environment variables, the project structure, and the end-to-end flow.

Conditional BPF Switching in Dynamics 365 with JavaScript


Need different Business-Process-Flows (BPFs) for the same entity record depending on a field value?  The article below shows how to switch flows dynamically whenever the Appeal Type option-set changes—without hard-coding GUIDs. Drop this into your Blogger post and publish.

Assigning (or Un-assigning) a Contact’s Web Role with a Classic D365 Workflow

 

Portal web-roles drive what a portal user (contact) can see and do. If you only need a straightforward set-it-and-forget-it rule—no complex branching or API calls—a classic background workflow is still the quickest tool in the box.

Checking Whether a Signed-In User Has a Specific Web Role in Power Pages

Scenario — You need client-side JavaScript to behave differently depending on whether the portal contact holds a particular Web role (e.g. “My Demographics Access”). Power Pages doesn’t expose Web-role data directly to JavaScript, so you must pass that information from Liquid into the page.

Reactivate a Business Process Flow and Jump to a Target Stage with a Pre-Operation Plug-in

1 · Scenario

Problem statement ↴
Records previously flagged as Ineligible (statecode = Inactive) are later re-activated by users. Their associated Business Process Flow rows remain inactive and stuck on an early stage.

Automatically Advance a Business Process Flow Stage with an Asynchronous Workflow in Dynamics 365

Objective — Automatically reopen a record’s Business Process Flow (BPF) and set it to a specific stage as soon as a flag on the parent record changes, using only a background workflow (no code, no ribbon commands).

Edit related table records directly from another table’s main form

Reference: 1

There are multiple ways that you can work with related table records on a table form within Power Apps. For example, you can include related tables in read-only mode with a quick view form and create or edit a record using a main form in a dialog.

Another way you can work with related table records is by adding a form component control to another table's main form. The form component control lets users edit information of a related table record directly from another table’s form.

Dynamically Hide the “New” Button in a Dynamics 365 Sub-Grid

In some business scenarios users should only add one (or two) child records. The quickest way to enforce this in Dynamics 365 is to hide the New button after the sub-grid reaches a specific row count. This article shows how to:

  1. Create a JavaScript enable rule that counts rows.
  2. Refresh only that sub-grid’s ribbon so the rule re-evaluates instantly—no full form reload.

How to Check Whether Any Dataverse Record Is in a Particular Business-Process-Flow (BPF) Stage

Knowing the current stage of a Business Process Flow (BPF) lets you lock fields, hide buttons, or trigger downstream logic. Below are two generic patterns that work in every online environment—no proprietary entity names, no deprecated APIs, and no plug-ins.

Call Dataverse actions directly in Power Fx

Reference: 1 

As a part of the Power Fx language, authors can now directly invoke a Dataverse action within a formula. Both unbound and bound actions are supported. Authors can add a Power Fx Environment language object to their app and access Dataverse actions.

Fixing "Access is Denied" When Creating a Strong Name Key (.snk) File in Visual Studio

 If you're trying to create a .snk file for signing your Dynamics 365 plugin assembly and encounter the error: "The operation could not be completed. Access is denied."