Introduction to Microsoft Power Platform
Introduction to Microsoft Power Platform
Power Platform
Power Platform is a suite of business applications developed by Microsoft that helps
organizations automate processes, analyze data, and build custom applications—all without
needing extensive coding skills. It consists of five core components:
5. Power Pages:
Power Pages is the low-code service for building secure, data-driven websites. It extends
the Power Platform into the web domain, allowing you to design, configure, and publish
external-facing sites that interact seamlessly with your business data in Dataverse. You get a
visual, drag-and-drop design studio plus templates for common scenarios (customer portals,
partner hubs, event registration sites, etc.), all without having to hand-code HTML or CSS.
Analogy: Imagine you’re creating a storefront in an online marketplace. Power Pages is like
a ready-made display window and shelving system—you arrange the products (data and
pages) visually, customize the look and feel, and go live, without ever having to build walls
or wiring from scratch.
All five components are built on the same underlying data platform (Dataverse) and integrate seamlessly
with each other, as well as with , and countless external connectors:
• Unified data
Every tool—BI dashboards, apps, workflows, bots, and websites—can read from and write to
the same Dataverse tables. That means your Power App can capture customer feedback, which
instantly becomes available in a Power BI report, and can even trigger an automated approval
flow in Power Automate.
• Cross-tool embedding
Embed a Power BI report inside a canvas app or a Power Pages site. Surface your chatbot (Power
Virtual Agents) directly within a Power Pages portal to assist external users, or invoke a flow
(Power Automate) from a button in Power Apps to send notifications or update records.
• End-to-end scenarios
1. Customer Service Portal
▪ Power Pages hosts the external-facing support site.
▪ Power Virtual Agents chatbot answers common questions or collects case
details.
▪ Power Automate routes submitted issues to the right queue or triggers an
email.
▪ Power Apps provides an internal case-management app for agents to update
statuses.
▪ Power BI dashboards track response times, case volumes, and customer
satisfaction.
• Single sign-on and security
Leverage Azure Active Directory for sign-in across all Power Platform components, apply fine-
grained role-based access, and enforce data-loss prevention policies centrally.
By combining these tools, you get a cohesive, end-to-end solution: from capturing data in apps or on
websites, automating back-office processes with flows, engaging users via chatbots, and surfacing
insights through rich analytics—all within a unified, low-code environment.
🎨 1️⃣ Power BI
• Purpose: To visualize and analyze data through interactive dashboards and reports.
• Key Use: Converts raw data into meaningful insights for decision making.
• Language Used:
o Primarily uses DAX (Data Analysis Expressions) for calculations and Power
Query M Language for data transformation.
Example:
A sales manager uses Power BI to track regional sales performance through visual dashboards.
📱
2️⃣ Power Apps
• Purpose: To create custom business apps without or with minimal code.
• Main Component: Central to Power Platform, connects with Dataverse and other data
sources.
📌 Types of Power Apps:
Websites for both internal and external A customer service portal for
Power Pages
users booking appointments
Features:
• Easy to build apps
• Connect to various data sources
• Role-based security management
• Purpose:
To build secure, low-code business websites for internal and external audiences.
• Key Difference from Canvas App:
Power Pages support external users while Canvas Apps are for internal users.
• Tech Involved:
Can involve JavaScript and Liquid (a template language for rendering dynamic content).
Example:
An insurance company’s online claims submission portal.
• Purpose:
Focused on data structure and business processes within Dataverse.
• Key Features:
o Based on business rules and processes.
o Less design flexibility than Canvas Apps.
o Uses Business Process Flows for guiding users through standard processes.
Example:
A ticketing system for internal IT service requests.
📦 BACKEND Components
• Enable connection with external data sources like SQL, SharePoint, Azure, Excel, etc.
🧠 3️⃣ AI Builder
• Add AI capabilities (like prediction, text recognition) into Power Apps and Power
Automate without coding.
Example:
Use AI to predict customer churn based on past interaction data.
• Azure:
Microsoft’s cloud platform for hosting services, apps, and managing company-wide
data.
It handles:
o Employee details
Environment Purpose
1. Microsoft Dataverse
1.1 Why Use Dataverse?
• Recommended by Microsoft as the primary data platform for Power Platform.
• Provides a scalable, secure, managed relational database with built-in business logic
(e.g., validation, workflows).
1.2 Default Tables & the User Table
• Every new environment includes a set of core tables out-of-the-box.
• The User table is first in the list—stores information about each signed-in user.
o Use case: When logging in, you see only the records and actions allowed by your
user record.
o Security roles are assigned via the User table to control access.
1.3 Core vs. Custom Tables
• If you need to store file attachments for a record, you can enable SharePoint
integration—
• files are stored in SharePoint while metadata remains in Dataverse.
• Delegation: Power Apps delegates data operations to the data source to handle large
datasets.
• Limit: By default, queries are limited (e.g., 500 rows).
• Warning: If an operation can’t be delegated, you’ll see a “Delegation Warning.”
• Example:
• // Delegable
• Filter(Contacts, StartsWith(LastName, "S"))
• // Non-delegable
• Filter(Contacts, DateDiff(CreatedOn, Today(), Days) < 30)
• Arithmetic operators: +, -
• Text/Date functions: TrimEnds, IsBlank, StartsWith, EndsWith, constant values (e.g.
Today())
• Others: If, *, /, Mod, casting (Text, Value), Concatenate (&), ExactIn, string manipulators
(Lower, Upper, Left, Mid, Len, …), signals (Location, Acceleration), volatiles (Rand),
collections
• Sorting: Sort, SortByColumns
• Aggregates (when supported): Sum, Average, Min, Max, CountRows, Count
• Collect, ClearCollect
• GroupBy, Ungroup
• (And any other functions not listed as delegable; these will trigger a blue underline
warning in the formula bar.)
5. Environments
• Production Environment
o Hosts the final, customer-facing version of apps & data.
o Changes here should be well tested.
• Patch(Accounts, selectedCustomer,
• { Address1_City: [Link] }
• );
7. Variables & Collections
• Clearing:
• Clear(colOrders);
• ClearCollect(colOrders, Filter(Orders, Status="Open"));
8. Solutions
9. Power Automate
9.1 Flow Types
1. Cloud Flows
2. Desktop Flows (RPA / “UI Flows”)
3. Instant Flows (triggered manually or from an app)
4. Scheduled Flows
🔄 Types of Flows in Power Automate
Flow Type Description Example
📌 Quick Summary:
• Avoid Premium connectors in shared apps unless every user has a license.
9.4 Triggering from Canvas Apps & Pages
• Canvas: use the [Link]() function.
• // Calling an instant flow named ‘NotifySupervisor’
• [Link]([Link])
• Power Pages: no direct [Link]—use APIs/webhooks to invoke flows.
Tip: Always keep your apps and automations modular—use descriptive names, group related
logic, and document your formulas or flow steps with comments. This makes maintenance,
handover, and troubleshooting much easier!
Goal: Take data from a local Excel file and import it into Dataverse.
Key Question: Can we use a local Excel file as a local data source in Power Apps?
• Answer:
o Power Apps does not support using a purely local Excel file as a live data source.
o Workaround:
1. Upload the Excel file to OneDrive or SharePoint.
2. Create a connection in your Power Platform solution to that cloud-hosted
file.
3. Import into a Dataverse table via the Data → Get data wizard.
Deployment Methods
When you’re ready to move your solution (apps, flows, tables, etc.) to another environment or
tenant:
1. Manual Deployment
4. XrmToolBox Commands
o Leverage plugins like the “Solution Transfer” or “Configuration Migration” to
script deployment tasks.
Tip: Always include versioning and change notes in your solution export to keep track of
updates.
• When you create any custom component (table, field, flow), Dataverse automatically
prefixes its schema name with your publisher prefix:
• Publisher Prefix: abc_
• Custom Field: abc_TotalSales
• Best Practice:
o Create a dedicated publisher for each project or division.
o Keep prefixes short (3–5 characters) and meaningful.
Solution Scoping
• Solution 1 → Designed to bundle all components (apps, tables, flows) for one specific
app or feature set.
• You can maintain multiple solutions for different areas (e.g., “SalesSolution,”
“HROnboardingSolution”).
2. Create a Connection
o In your solution, add a Connection resource that points to your data source (e.g.,
SharePoint, OneDrive).
3. Use “Get Data” Wizard
o Recommendation: When creating a team site for your app’s data, build “from
scratch” (no unused templates) to keep it clean.
2. Communication Site
o For broad announcements, news, and content publishing.
o Not ideal for data integration—use a Team Site for lists that the app will patch
to.
Naming Convention: Always apply a consistent naming scheme to your sites (e.g., PP-HR-Site,
PP-Sales-Site) to ensure clarity and governance.
• Connection:
o A configured instance of a connector, including credentials and endpoints.
Important:
• Connections live outside your solution.
• Solutions only hold references to connections (so you can switch them per
environment).
2. Nested Gallery: Gallery inside another gallery (e.g., for grouping by category).
• Adding Items:
o Always insert into the first layout section (template) of your gallery.
o // Example: Patch a new record into your data source
o Patch(Accounts, Defaults(Accounts), {
o Name: [Link],
o Industry: [Link]
o })
• Large Datasets & Filtered Views:
o If you only need to show specific columns or filter on the fly, use Collections:
o ClearCollect(
o colFilteredAccounts,
o Filter(Accounts, Industry = "Technology")
o );
o [Link] = colFilteredAccounts
1. Splash Screen
o Serves as the app’s loading or welcome screen.
o Often shows branding or a progress indicator.
2. Dashboard Screen
o Displays key KPIs (charts, summary cards) relevant to the user’s role.
o Example controls:
Tomorrow’s Task
Action Items:
1. Recreate your SharePoint list in Dataverse as a native table.
2. Shift all data from SharePoint into the new Dataverse table (use the “Get Data” wizard
or Power Query).
Study Tips:
• Practice by creating a dummy SharePoint site, list, and then importing into Dataverse.
• Experiment with both simple and nested galleries to understand template sections.
1. FILTERS
Definition:
• The Filter function returns a subset of records from a data source that match a given
formula (criteria).
Syntax:
Filter(DataSource, Formula)
• DataSource – your table or list (e.g., SharePointList, SQLTable, Collection).
• Formula – a logical expression that each record must satisfy.
Example:
// Show only active vendors
2. GALLERY SEARCHES
Definition:
• The Search function scans a table and returns records where specified columns contain
a search string.
Syntax:
Search(DataSource, SearchString, "Column1", "Column2", ...)
Example:
// Enable a search box to filter gallery by VendorName or City
3. LOOKUP
Definition:
• The LookUp function returns the first record that matches a condition, or single column
value if specified.
Syntax:
// Full record
LookUp(DataSource, Formula)
// Single column
LookUp(DataSource, Formula, ColumnName)
Example:
// Get the first "Top" vendor record
LookUp(Vendors, Rating = 5)
• You want your gallery items sorted by a column (e.g., date, name, rating).
Syntax (Gallery > Items property):
Sort(DataSource, ColumnName, [Link])
// Or
Example:
// Disable Submit if viewing
[Link] = If([Link] = [Link], [Link],
[Link])
Use Cases:
7. CREATING A COLLECTION
Definition:
• A Collection is an in-memory table used to store data locally in your app for quick access
and offline support.
Syntax:
Important Notes:
• Collections improve performance for small or frequently used data sets.
• Define Collect or ClearCollect in the OnVisible property of a screen so data loads when
the user navigates there.
Example:
// OnVisible of Home Screen
ClearCollect(
Col_Vendor,
3. Demonstrate filtering by a formula (e.g., show only those with rating ≥ 4).
Hints:
• Use Filter(Col_Vendor, Rating >= 4) in the gallery’s Items property.
• Ensure your collection loads via OnVisible before filtering.
Study Tip: Review each syntax block in your own sandbox, tweak parameters, and observe
effects live in the Power Apps Studio.
• Defined once and used across multiple screens or apps to ensure consistency and ease
of maintenance.
Benefits:
• Reusability: Design once, deploy everywhere.
• Consistency: Uniform look and behavior across screens.
• Maintainability: Update in one place and propagate changes.
Key Elements:
1. Component container to hold the navigation panel.
2. Hamburger icon to toggle open/close.
3. Variable to track the open/closed state.
3. Step-by-Step Implementation
3.1. Create the Component
1. In the Power Apps canvas, go to the Tree view ➔ Components ➔ + New component.
o Property type: Output (so the parent screen can read it).
o Data type: Number.
3. In the Formula field for MenuWidth, enter:
4. If(VarOpenMenu,
5. Max([Link]) / 3,
6. 100
7. )
o When VarOpenMenu is true, width = one-third of minimum screen width.
o When false, width = 100px (mostly hidden).
3.5. Use the Component on a Screen
1. Insert the LeftNavMenu component onto your screen.
2. Select the instance, and in its Width property, set:
3. [Link]
4. Now, clicking the hamburger icon toggles the component’s width between 100 and
[Link]/3.
4. LeftNavMenu Component:
o Size formulas as above.
o icn_Hamburger.OnSelect = Set(VarOpenMenu, !VarOpenMenu).
o Custom property MenuWidth = If(VarOpenMenu, Max([Link])/3,
100).
5. Screen Layout:
o Insert → Custom → LeftNavMenu.
o [Link] = [Link].
1. Overview
Power Apps Galleries let you display and interact with a set of records (collections or data
sources) in a flexible, templated layout. In this lecture, we cover:
• Gallery Controls: How to configure and bind data
2. Gallery Controls
2.1. What is a Gallery?
Property Description
{
Title: "Home", Screen: HomeScreen, Icon: [Link] },
{ Title: "Details", Screen: DetailScreen, Icon: [Link] },
{ Title: "Tasks", Screen: TaskScreen, Icon: [Link] }
);
3. Icon Controls
3.1. Purpose
Icons provide visual cues for actions and navigation without requiring text.
3.2. Syntax & Use
• Insert via Insert ▸ Icons
• Icon property: set to a member of the Icon enum, e.g. [Link], [Link], [Link].
)
This highlights the current item in a different shade.
4. Label Controls
• Used to show text fields from your data or static headings.
• Text property: bind to [Link] or any formula.
[Link] = 14;
);
5.2. Default Selection
To default-select the first item:
[Link] = First(LeftNav)
6. [Link]
• Definition: Returns a reference to the screen that the user is currently viewing.
• Use Cases:
2. ClearCollect(LeftNav,
3. { Title: "Home", Screen: HomeScreen, Icon: [Link] },
4. { Title: "Details",Screen: DetailScreen, Icon: [Link] },
5. { Title: "Tasks", Screen: TaskScreen, Icon: [Link] }
6. );
7. Configure Gallery
o Items: LeftNav
o Default: First(LeftNav)
o Template Fill:
o If(
o [Link] = [Link],
o [Link],
o [Link]
o )
o Template OnSelect:
o Navigate([Link], [Link])
8. Bind Controls in Template
• Use clear, descriptive titles for navigation items (e.g., "Dashboard", "Reports").
• Optimize gallery layout for your form factor (mobile vs. desktop).
• Keep icon sizes consistent to maintain visual rhythm.
• Localize text by storing labels in a translation table if needed.
1. Overview
This lecture covers two main topics:
1. Using Containers to organize screen layouts.
• Use Count, CountRows, CountAll, and CountIf functions—including filtering and sorting.
• Link container properties for consistent styling.
• Export and reuse components across apps.
2. Add a Rectangle inside it to serve as a backdrop; set its Fill (color) to a theme color (e.g.,
RGBA(0, 120, 212, 1)).
3. Insert a Label into the container for the title (e.g., "Sales Dashboard");
o Set FontWeight to Bold.
4. Insert a second Label to show the current user’s name.
Syntax Breakdown:
1. Filter(Orders, DueDate < Today()) filters overdue orders.
2. SortByColumns(..., "OrderDate", Descending) sorts them.
3. CountRows(...) counts the resulting set.
4. Linking Container Styles
Containers allow you to manage styles in one place:
o Flows live alongside your Dataverse apps, tables, and other components.
o Ideal for managed, environment-scoped automation in enterprise applications.
o You control connectors and data via Dataverse security roles.
2. Outside a Solution (Standalone)
o Flows created outside any solution, managed at the tenant or user level.
o Quick to build and test, but less structured for ALM (Application Lifecycle
Management).
Tip: Always prefer creating flows inside a solution when you plan to move, package, or deploy
them across environments.
2. Configuration Contexts
Scope Where Configured Managed By
• Azure AD connectors (e.g., Office 365, Azure Active Directory) are managed at the
company/tenant level.
• Dataverse connectors and table triggers/actions live in your solution and are governed
by your app’s security model.
o Example:
o trigger:
o type: "[Link]"
o inputs:
o entityName: "new_invoice"
2. Actions
o Steps executed after the trigger. Could be standard connectors (Outlook, Teams)
or custom Dataverse operations (Create, Update).
o Example: Send an email via Outlook:
3. Adaptive Cards
o Rich cards you can send, e.g., in Teams or Outlook, to collect or display
information.
o Example use: send an approval card with buttons directly inside an email.
5. Switch Statements
• The Switch action evaluates one expression against multiple values:
o Each case is a branch.
o Executes only the matching branch.
o Useful when you have many possible values for a single variable.
• - action: switch
• inputs:
• On: @{triggerOutputs()?['body/priority']}
• Cases:
• - Case: 'High'
• Actions:
• - send mail: ...
• - Case: 'Medium'
• Actions:
• - create task: ...
• - Case: 'Low'
• Actions:
6. Parallel Branches
• Parallel Branch allows multiple paths to run simultaneously:
o Great for independent actions that don’t need to wait on each other.
o Example: Send both an email and create a Teams message at the same time.
• - action: parallelBranch
• branches:
• - name: EmailBranch
• actions:
• - send mail: ...
• - name: TeamsBranch
• actions:
Example: If approval not received within 48 hours, send a second adaptive card with the
message: "Please approve offline or click here to respond".
5. Dynamic Content: Insert Dataverse table fields into the flow’s email/body dynamically.
6. Explore Outlook Action: Familiarize yourself with the various Outlook connector
actions.
7. Deep Link: In any incoming notification (email), embed a text link that opens your
Canvas App. Use:
8. Param(
9. '[Link]
10. 'recordId',
11. triggerOutputs()?['body/itemid']
12. )
13. Deployment: Before deploying an app, set up & use Connection References under the
solution’s Connections area.
Key Takeaway: Structuring your flows inside solutions, leveraging built-in actions (Trigger,
Conditions, Switch, Parallel Branch), and following SLA patterns will make your automation
robust, maintainable, and enterprise-ready.
1. Overview
In Power Apps, there are two primary ways to send data from your app to a data source (e.g.
SharePoint, Dataverse, SQL Server, etc.):
• SubmitForm: Designed to work with an entire form control.
2. SubmitForm
• What it does
o Submits (creates or updates) the entire record bound to a Form control.
o Works only on the fields included in that Form.
• Key characteristics
o Bulk operation: One call, one data operation.
o Form-bound: Only form fields are sent.
o Automatic validation: Honors all form validation rules.
• SubmitForm(EditForm1);
•
3. Patch
• What it does
• Patch(
• 'MyDataSource',
• Defaults('MyDataSource'),
• {
• Title: TextInput_Title.Text,
• Description: TextInput_Desc.Text
• }
• );
•
• );
4. Key Differences
Aspect SubmitForm Patch
Data
One atomic operation per form Create or update per call, per record
operation
Flexibility Limited to form schema Full control over fields and data shape
o When you call Defaults('MyList'), every field starts blank or at its default.
o For choice fields you must explicitly supply a { Value: ... } record.
{
Title: TextInput_Title.Text,
'Machine Types': { Value: Dropdown_MachineType.[Link] }
}
);
// Reset each control
Reset(TextInput_Title);
Reset(Dropdown_MachineType);
o You only want to update or create specific fields (e.g., header info, metadata).
o You’re building a custom UI (galleries, buttons) that doesn’t use a Form control.
o You need to work with more advanced data shapes (lookups, choice fields,
complex tables).
8. Example Scenarios
8.1. Partial Update
Scenario: Only update the “Status” of a record when an Approve button is clicked.
Patch(
'Tasks',
Gallery_Tasks.Selected,
{ Status: "Approved" }
);
Patch(
'Machines',
Defaults('Machines'),
{
Name: TextInput_Name.Text,
'Machine Types': { Value: "Automatic" }
}
);
Reset(TextInput_Name);
Reset(Dropdown_MachineType);
• '@[Link]': "#[Link]",
• Claims: "i:0#.f|membership|" & Lower(TextInput_Email.Text),
• DisplayName: TextInput_Name.Text,
• Email: TextInput_Email.Text
• }
Here’s a clean, well-structured set of study notes for Power Platform LEC-15, broken into
logical sections, with definitions, syntax examples and contextual clarifications.
Best practice: Always give clients at least Read access; only give Write where strictly needed.
1.3 Common Roles & Scopes
• Write access should only be granted to BI developers if they truly need to update data;
otherwise stick to Read.
Patch(
Contacts,
Defaults(Contacts),
{
FirstName: [Link],
LastName: [Link],
Account: [Link]
}
)
| **Notify** | Show a toast message | ```powerapps
Notify(
"Record saved!",
[Link],
3000
)
``` |
| **ResetForm** | Clear form fields | ```powerapps
ResetForm( frmMyContactForm )
``` |
> **Note:**
> - Inside a **DataCard**, use `.Value` to read/write the field value.
> - For a plain **TextInput**, use `.Text`.
---
1. **Solution Export**
- Use **Octopus Deploy** (or Azure DevOps) to pick up the GitHub “release” artifact.
- Octopus pushes the solution into target environments (UAT, Prod).
```text
┌──────────────────┐ ┌───────────────┐ ┌──────────┐
Quick Recap
• Security: assign Security Roles to Azure AD groups; use RO/RW judiciously.
• Power BI: give devs Write only if they must update data; refresh manually/scheduled.
• Modern Forms: use Choices(), LookUp(), plus Patch(), Notify(), ResetForm().
• ALM: export solutions → GitHub → Octopus → target environments.
• Data-first Approach: UI is generated based on the data model (tables, forms, views).
• Responsive Layout: Automatically adapts to different screen sizes.
• Built-in Business Logic: Supports Business Process Flows (BPF), workflows, and plug-ins.
• Ensures data entry follows required business rules before moving forward.
3.2 Core Components of a BPF
Component Description
Step A specific data input or action within a stage (e.g., capture budget).
1. In the Power Apps maker portal, select Solutions > New > Business Process Flow.
2. Base Table: Choose the Dataverse table (e.g., Lead, Opportunity).
3. Add Stages & Steps: Drag stages onto the canvas, then add steps (fields) under each.
4. Define Conditions & Actions:
o Condition: e.g., only show Proposal stage if Budget ≥ $10,000.
- type: DataverseWorkflow
table: opportunity
event: onStageChange
conditions:
- field: statuscode
operator: equals
value: 3
actions:
- type: sendEmail
to: owner
subject: "Opportunity Closed"
[Link]();
[Link]({ text: "Record saved! Notification sent." });
}
• Design: When adding a step, select the field (e.g., EstimatedCloseDate) and specify
requirements (business rules).
• Validation: Use business rules or JavaScript for client-side checks before moving stages.
Context: Think of a data step as a mini-form embedded within the BPF stage.
1. Plan & Design: Gather (with client) and analyze (with team) requirements.
2. Build: Configure tables, forms, BPFs, and flows in a Dev environment.
3. Test: Validate functionality, performance, and security.
4. Deploy: Use managed/unmanaged solutions to move between environments.
Power BI is a business analytics tool by Microsoft that allows users to visualize their data, share
insights across an organization, or embed them in an app or website. It connects to multiple
data sources and provides interactive dashboards and reports.
📌 Workspaces in Power BI
• You can:
o Create your own workspace.
o Manage your work.
o Add other users for collaboration.
Example:
If you’re working on sales reports for your company, you can create a ‘Sales Analysis
Workspace’ and add team members there.
📌 Dashboards vs Reports
Aspect Dashboard Report
Can pull visuals from multiple Created using data models, usually a single
Source
reports dataset
Interactivity Limited (static summary) Highly interactive with slicers and filters
Example:
• Finance Dashboard: Summarized sales, profits, expenses.
• Finance Report: Detailed visualizations of sales per region, month-wise profit charts.
➝ Test Accounts:
• Create dummy accounts to test security roles.
➝ Groups:
Best Practice:
Create as many groups as there are applications (or workspaces) for organized access control.
Example:
If you have a ‘Finance Report App,’ create a ‘Finance Team Group’ and assign relevant access to
the group.
Data Modeling is the process of creating relationships between data tables in Power BI to
support complex queries and reports.
Features:
• You can build ERD (Entity Relationship Diagrams) visually in Power BI.
• Connect different tables via relationships (one-to-many, many-to-one, etc.)
Example:
• Orders table connects to Customers table through CustomerID.
• Orders table connects to Products table via ProductID.
Table Connections:
• Eliminate data redundancy.
• Create meaningful relationships for accurate reporting.
Excel Power BI
Example:
Excel works like a traditional table-based interface, while Power BI works with datasets,
relationships, and interactive dashboards.
1. Get Data
→ Home Tab → Get Data → Choose Source
2. Transform Data
→ Power Query Editor for cleaning and shaping
3. Build Data Model
→ Manage Relationships between tables
4. Create Visualizations
→ Use Charts, Tables, KPIs
5. Create Dashboard
→ Pin visuals from reports to a dashboard
6. Manage Security
→ Assign roles and access levels
7. Publish and Share
2. Add an entry:
3. Name: Authentication/OpenIdConnect/AzureAD
4. Value: ClientId=<your-app-id>; TenantId=<your-tenant-id>;
Authority=[Link]
2. Create or edit a role, then add Linked Contacts (users) or Azure AD Group Claims.
3. Under Table Permissions, tie security rules to that Web Role (see §4).
3. Site Settings & Custom Code
Power Pages exposes many global settings via Site Settings (key/value pairs).
• Tip: You must register any setting you’ll reference in your code—otherwise, your
customization won’t load.
Under Table Permissions, you define which Dataverse tables and records each Web Role can:
• Create
• Read
• Update
• Delete
• Access: Read
• Scope: Contact (the case’s parent contact = current user)
• Web Roles: Customer
5. Web Roles & Out-of-Box Roles
• Out-of-Box:
o Administrators: Full access
• [Link]('#approvalDate').value = new
Date().toISOString().substr(0,10);
• }
• });
7. Web Files
Web Files store static assets (CSS, JS, images) in Dataverse so they’re served by your portal.
{% if [Link] > 0 %}
<ul>
{% for contact in [Link] %}
{% endif %}
8.2 Using FetchXML
To retrieve records, embed a FetchXML query:
{% fetchxml accounts %}
<fetch mapping="logical" count="5">
<entity name="account">
<attribute name="name" />
<filter>
<ul>
{% for item in [Link] %}
<li>{{ [Link] }}</li>
{% endfor %}
</ul>
4. method: 'POST',
5. headers: { 'Content-Type': 'application/json' },
6. body: [Link]({ recordId: '<entity-id>' })
7. })
8. .then(resp => [Link]())
9. .then(data => [Link]('Flow result', data));
{{ [Link] }}
Site Settings →
Azure AD Auth Authentication/OpenIdConnect/AzureAD
Authentication
Portal Management →
Web Role N/A (UI-based)
Web Roles
Portal Management →
Table Permission Scope: Contact; Filter: ownerid eq current user
Table Perm.
Portal Management →
Web File <link href="/_webfile?webfileid=<GUID>" />
Web Files
Portal Management →
Custom Form {% webform id: '...' %}
Web Forms
Feature Where to Configure Key Syntax / Example
2. Deployment Methods
There are three primary ways to move solutions into a target environment:
1.
Export solution, import via Power Platform UI Small teams, quick demos
Manual
3. Built-
Use Power Platform’s in-portal import/export Simple one-off migrations
in
During deployment, you’ll map each connection reference’s logical name to an environment-
specific connection.
Example: Reference in Solution XML
<ConnectionReferenceDisplayName>Dataverse
Connection</ConnectionReferenceDisplayName>
<LogicalName>crb_DataverseConnection</LogicalName>
<ConnectorName>/providers/[Link]/apis/shared_commondataservice</Connec
torName>
Best Practice: Use a dedicated service account for all connection references in your CI/CD
flows.
on:
push:
branches: [ main ]
jobs:
export_solution:
runs-on: windows-latest
steps:
- uses: actions/checkout@v3
with:
name: solution-drop
path: ./artifacts/[Link]
import_solution:
needs: export_solution
runs-on: windows-latest
steps:
- uses: actions/download-artifact@v3
with:
name: solution-drop
- name: Import Managed Solution
run: pac solution import --path ./artifacts/[Link] --async
Note: Secure all credentials as GitHub Secrets.
3. Add a Deploy Step using the “Power Platform: Deploy Solution” plugin
4. Map Octopus variables to CLI parameters
PP_APPID=00000000-0000-0000-0000-000000000000
PP_SECRET=superSecretValue
In your pipeline or local dev, load these before running pac:
# PowerShell
Get-Content .env | Foreach-Object { $name, $value = $_ -split '=';
[[Link]]::SetEnvironmentVariable($name, $value) }
# Authenticate
pac auth create --url <OrgUrl> --clientId <AppId> --clientSecret <Secret>
# Solution operations
pac solution export --name <SolutionName> [--managed] --path <[Link]>
pac solution import --path <[Link]> [--async]
# Portal operations
pac paportal download --portal-id <ID> --output-folder <Folder>
pac paportal upload --portal-id <ID> --path <Folder>
o DVE (Development)
o UAT (User Acceptance Testing)
o SYS (System Testing)
Key Rules:
• Deployment should be executed only on Production from designated accounts.
• Always map the logical name of the environment and service account.
Power Automate Considerations:
• Automate flows are created using service accounts.
• Connections fetched via service account offer better control and security.
• Runtime connections are mapped automatically based on logical names.
• When adding a new reference, only one needs to be created and reused.
• Mapping becomes easy if reference exists.
Example Scenario:
• For Active Directory (AD) users, their account is mapped with existing reference.
Steps:
1. Map all references.
Repository Setup:
• Project Name = Git Repository Name (Consistency is key).
• Push code only once during creation.
GitHub Workflows:
• GitHub actions/workflows manage solution deployment.
Types of Exports:
Naming Conventions:
• Application and solution names should match logical names.
1. Environment Creation
2. Account Creation
3. Granting Access to Environment
Important:
• Without account access to an environment, deployment will fail.
• CI/CD Pipelines are configured for production deployments only.
Tool Used: Configuration Migration Tool
• Create schema
• Master data and logic must always be mapped using connection references.
• No deployment without active and valid connection reference.
• Azure SQL
• Salesforce
• Zendesk
Limitations:
• At a time, you can search a maximum of 4 websites.
• Results fetched are authentic and depend on added sources.
Language Support:
• Additional languages can be added to Copilot.
Thanks! I've extracted the text from all your handwritten notes and will now present them in a
detailed, organized, and easy-to-study format with explanations, examples, and relevant
syntax where useful. This content covers topics from Power BI, Power Apps, Business Process
Flows (BPF), Model-Driven Apps, Security Roles, and Power Automate.
Purpose:
To minimize manual work in business processes using automated flows.
Basic Stages:
🔹 2. Power BI Overview
Installation:
Workspaces:
• My Workspace: Personal area
• Combined Workspace: Shared with teams
Embedding Reports:
Important Concepts:
• Normalization of Data – Reduce data redundancy
🔹 3. Security Roles
Key Concepts:
• Stages are locked unless specific permissions are given.
• Form customization using drag & drop in Model-Driven App
• Document Storage
• Integrates with BPF to guide user process
• Built using:
o Forms: Data entry (Types: Card, Quick View, Main)
o Views: Grid displays (called galleries)
Use Case:
• Submit data via frontend form
• View processed info in views
Example:
• Main form type is often used for BPF integration and is set as the default popup form.
Importing Data:
• From Excel into Power BI
• Create ERD diagrams to visualize relationships
Mapping Tables:
• Define relationships using:
• A → B → C (Mapping path)
• Use cross-filtering:
o One-directional or Both-directional
View & Model:
• Use View & Model pane to manage Excel data added to Power BI
AD (Active Directory):
• Critical for managing user permissions
• PowerApps depend on AD for roles, security, etc.
Notifications:
• Use Teams and Outlook notifications
• Create adaptive cards for better interactivity
Naming Conventions:
• Always follow standardized naming
Approval Link:
• Use item link for email notifications
• Run manually if needed
Flow Checker:
1. Errors: E.g., missing mandatory field
Role:
• Backend automation for apps
Actions:
• PDF merge
• 3rd Party Connectors like Plumsail
Connections:
• Use Connection ID + Logical Name mapping
Here's a structured and detailed version of the notes from your most recent image, with
explanations, context, and syntax where relevant:
An Adaptive Card is a visually rich UI element used within flows (especially Microsoft Teams or
Outlook) to present information or gather input from users.
Usage Context:
• Shown after an automation step to:
o Request approval
o Notify client
o Inform about process status
Example Use Case:
"Send an Adaptive Card in Teams after a flow completes, asking the user to approve a
submitted form."
Connection Break:
Occurs when:
• A service (like SharePoint, Outlook, Dataverse) loses authentication or session.
Condition Block:
• Use Case: Branching logic in Power Automate
• Nested Actions: You can nest multiple actions within an If condition
Example:
If (Status == 'Approved') {
Send Email to Manager
} else {
Notify Requestor
Syntax Switch -> Case 1, Case 2... Multiple flows execute side-by-side
Branch
One selected path based on match All branches run at once
Behavior
Notes:
• Switch: Used when there are multiple exact cases (e.g., "Pending", "Approved",
"Rejected")
• Parallel Branch: Executes all branches together. Used when:
"Working on both ends; it can check Dataverse and trigger same time."
Use Case:
Handling communication between two systems (inbound and outbound flows)
Direction Action
Resolution:
• The system team (IT/Admin) must release access through Active Directory (AD)
Diagram:
The Default environment is mostly avoided for structured ALM processes because it lacks strict
control and governance features.
📌 Quick Example:
• Move your solution to a Sandbox environment for team testing and validation.
• After approval, import the solution into the Production environment for actual clinic
use.
• Avoid doing any of this in the Default environment as it's not governed.
✅ Summary:
---
Hello everyone, Reza here! In this video, we will focus on solutions in the Power Platform.
Solutions are the mechanism through which we can implement application lifecycle management. They
allow us to transport components such as apps, flows, bots, connections, and more from one
environment to another. This is a key concept every maker in the Power Platform should be aware of, so
let's check it out in action!
**\[Music]**
Where do we begin when creating apps, flows, bots, and more in the Power Platform? Let's take an
example of Power Apps.
It is important to understand that when you're building something in the Power Platform ecosystem, it
is built in the context of an environment. The environment you start with is always the default
environment.
The default environment is the standard environment set up for every tenant, and in this environment,
every user with a valid license—be it an Office license covering apps and flows—has the rights to create
things. This cannot be blocked by administrators. Meaning, the default environment is open, allowing
anyone to create apps, flows, and more.
A good recommendation is to rebrand this environment for personal productivity only. It should not be
used for business-critical applications.
To implement application lifecycle management (ALM) in Power Apps and other Power Platform
products, it's crucial to have a good environment strategy in place.
A Power Platform environment is a space to store, manage, and share your organization's business data,
apps, chatbots, flows, and more. It serves as a container to separate apps that may have different roles,
security requirements, or target audiences. Environments play a key role in application lifecycle
management.
In each environment, we can set up a Dataverse database, and only one database can be set up per
environment.
### How should we create apps, flows, bots, and more in a controlled and governed manner?
Solutions are used to transport apps and components from one environment to another. A solution can
contain one or more apps and other components such as database tables, web resources, flows, bots,
and much more.
Where should we create our apps, flows, bots, and more? We should be creating them directly inside
solutions.
Now, I want to bust a common myth—solutions are not a premium feature. The myth is that the user
creating the solution or accessing artifacts inside the solution requires premium licensing. Although
solutions and containers are created inside Microsoft Dataverse, which is a premium licensed feature,
working with solutions does not require premium licensing. All it requires is a Dataverse database set up
for the environment.
1. I have access to my **dev environment** and I want to create a solution from scratch.
2. I already have an app, flow, and database created outside a solution, and now I want to make them
solution-aware.
### Scenario 1: Creating a Solution from Scratch
I'll create a solution called **Issue Tracker**. This solution will have a SharePoint list that tracks issues.
I'll also create a flow to send an email to the admin when a new issue is created in the list.
For this, I'll go to **Solutions** and click on **New Solution**. Here, I will create my solution and
define a publisher for it. A publisher is a mechanism to help avoid naming collisions when solutions from
different publishers are installed in an environment. I’ll name my publisher **RD** with a prefix
**RD\_** to apply to all objects in the solution.
I’ll create my solution, and within the solution explorer, I’ll create a **Canvas App**. After that, I’ll start
connecting to my data sources, in this case, SharePoint.
Since Dataverse is environment-specific, I’ll create a new SharePoint site for my test environment. The
next step is to make the app dynamic by using an environment variable. This will allow me to configure
the app to point to different SharePoint sites depending on the environment.
Once the app is connected to SharePoint and the data is linked to the environment variables, I can save
and publish my app.
Next, I’ll create a flow in the solution. This flow will send an email whenever a new item is created in
SharePoint. I’ll make the email recipient dynamic by using an environment variable for the email.
Let’s say I already have an app (like **My Tasks App**) that connects to multiple data sources like
SharePoint and Dataverse. I want to add this app to a solution for better ALM.
First, I'll create a new solution in my **default environment**. After that, I will add the app to the
solution. Since this app is outside of the solution, I’ll need to edit it to replace hard-coded connections to
SharePoint with environment variables.
For the SharePoint connection, I'll create an environment variable for the site and list, and modify the
app to use those environment variables instead of hard-coded connections. After making the necessary
changes, I'll save and publish the app.
Next, I’ll add a flow, **Service Desk Report**, to the solution. I’ll make the flow aware of the
environment variables in the same way as I did with the app. I'll replace hard-coded connections with
environment variables.
Once the app and flow are solution-aware, I can export the solution and move it to another
environment, following the steps I outlined earlier.
Once everything is ready, I can export the solution from my **dev environment** to a **test** or
**production environment**. Before exporting, I'll ensure that all environment variables have no
current values, as this will prompt me to set new values when I import the solution to a different
environment.
When exporting the solution, I’ll select the **managed solution** option for production environments.
After exporting, I can import the solution into the target environment. I’ll update the environment
variables (e.g., SharePoint site URLs and email recipients) as necessary and finish the import process.
Now, the solution is successfully moved to the test environment, and I can see it working with the
updated environment variables.
---
If you enjoyed this video, don’t forget to like, comment, and subscribe to my YouTube channel. Thanks
for watching!
---
This is the organized and streamlined version of the text for your video. Let me know if you need any
further adjustments!
Here is the detailed explanation of the notes you shared, specifically for Power Apps and related
concepts. I have organized and elaborated on each section to give you a thorough understanding of the
topics covered.
5. Power BI Integration
• Power BI Service: Power BI is a business analytics tool that helps organizations visualize their
data and share insights. In the context of Power Apps, Power BI can be integrated to provide
rich data visualizations such as dashboards, reports, and analytics. The Power BI service is used
to publish and share reports within the Power Apps environment.
o Workspaces: Workspaces in Power BI are containers for organizing your reports,
datasets, and dashboards. They allow users to collaborate on data analysis and manage
access to the reports.
o Dashboards: Dashboards in Power BI are interactive visual displays that bring together
different data sources and visualizations into a single view. These dashboards can be
added to Power Apps to provide users with real-time insights.
o Reports: Reports in Power BI are a collection of visuals that provide deeper insights into
the data. They allow users to explore data in more detail and perform analysis.
• Power BI Reports in Power Apps: Power Apps can integrate with Power BI to display visual
reports directly within the app. This allows users to see relevant data analysis without needing
to leave the app interface. These reports can include charts, tables, and other visual elements.
• Measures: Measures in Power BI are calculations used to analyze data. They are typically used
to calculate totals, averages, percentages, and other metrics. Measures can be displayed in
Power Apps as part of the Power BI integration to provide dynamic insights into the data.
Conclusion:
Power Apps, along with tools like Power BI and Microsoft Dataverse, offers a comprehensive platform
for building applications, automating workflows, and analyzing data. It is essential to understand how
these tools work together to build powerful, data-driven apps and reports for business solutions. The
sandbox environment provides a safe space for development, and integrating KPIs and Power BI into
your apps ensures that users can track performance and make data-driven decisions effectively.
Let me know if you need further clarifications or if you'd like more details on any specific concept!
Business Process Flows (BPF) in Power Platform represent a guided sequence of stages and steps that users follow to complete a task consistently. They visually outline the multi-stage process, ensuring that users adhere to the required business rules before proceeding to the next stage, enhancing data entry accuracy and task completion conformity. By providing a standardized workflow, BPFs minimize errors and improve the reliability of business processes, leading to consistent task completion across users and reducing the dependency on manual checks .
Collections in Power Apps are in-memory tables used to store data locally, which enhances app performance by providing quick access to frequently used or small data sets. They allow for offline support and improve data retrieval speeds since interactions with data do not require constant fetching from cloud-based sources. This makes them ideal for optimizing apps that need to operate efficiently in low-bandwidth environments or when quick data access is crucial .
Microsoft Dataverse acts as the primary data platform for Power Platform. It provides a scalable, secure, and managed relational database with built-in business logic like validation and workflows. It is recommended by Microsoft because it allows for defining tables, setting columns and data types, creating relationships, building business rules, designing forms and views, and configuring security rules, all of which are crucial for enterprise-level application development .
Power Automate enhances workflow automation by allowing the creation of flows that connect different services to automate repetitive tasks and processes within the Power Platform. Typical applications include automating approval processes like leave requests, synchronizing files between different platforms, and integrating with APIs for automatic data collection. This facilitates efficient business operations by reducing manual effort, improving accuracy, and speeding up processes across an organization .
Application Lifecycle Management (ALM) plays a critical role in managing Power Apps deployments by structuring the process of moving solutions from development through to testing and production environments. It involves exporting solutions, using version control systems like GitHub, and deploying them using tools like Octopus Deploy. This approach ensures that deployments are consistent, reproducible, and can be rolled back if necessary, thus minimizing the risk of errors and maintaining solution integrity in production environments .
Model-Driven Apps in Power Platform differ from traditional custom applications as they focus on data and business logic first, automatically generating the UI based on the data model (tables, forms, views). They offer responsive layouts that adapt to different screen sizes and include built-in business logic such as Business Process Flows and workflows. This data-first approach contrasts with traditional development where UI design often precedes data structure and logic implementation .
Power Pages are effective for building secure, customer-oriented web portals as they support external user login via Azure Directory, which ensures robust security. They allow for customization with frontend technologies like Liquid, CSS, and JavaScript, enabling customer-focused experiences through tailored designs and interfaces. Their support for web roles and portal permissions further allows precise control over user accessibility and interactions, creating secure, flexible, and user-centric web environments for diverse business needs .
In Power Apps, galleries display a set of records using a templated layout, while icons provide visual cues for navigation and actions without needing text. Galleries can repeat templates like rows or tiles for each data record, which includes charts, images, icons, and controls. Icons within these galleries can be set using an icon property derived from an enum, providing clear, intuitive navigation. Together, galleries and icons create a user interface that is both visually appealing and functionally efficient, improving user navigation and interaction within the app .
Components in Power Apps are strategically used to maintain consistency in app design by acting as reusable UI elements. These components ensure that design and behavior remain uniform across multiple screens or apps, which simplifies maintenance. Updates and changes can be propagated through all instances of a component in a centralized manner. This approach increases efficiency, reduces development time, and enhances the overall coherence of the user interface across applications .
Integrating SharePoint with Dataverse in Power Platform apps enhances document management by utilizing SharePoint's robust capabilities for managing documents, including version control and metadata handling. This integration allows Dataverse to handle structured data while SharePoint manages unstructured data like large files, effectively circumventing storage limitations in Dataverse. Together, they provide a seamless solution for storing, accessing, and managing documents within applications, leveraging the strengths of each system for optimal performance and resource use .