{"id":43115,"date":"2025-12-19T15:55:59","date_gmt":"2025-12-19T10:25:59","guid":{"rendered":"https:\/\/www.inogic.com\/blog\/?p=43115"},"modified":"2025-12-19T15:55:59","modified_gmt":"2025-12-19T10:25:59","slug":"building-standalone-apps-with-power-apps-code-apps-using-dataverse-and-office-365-users-connectors-part-1","status":"publish","type":"post","link":"https:\/\/www.inogic.com\/blog\/2025\/12\/building-standalone-apps-with-power-apps-code-apps-using-dataverse-and-office-365-users-connectors-part-1\/","title":{"rendered":"Building Standalone Apps with Power Apps Code Apps: Using Dataverse and Office 365 Users Connectors (Part 1)"},"content":{"rendered":"<p><img decoding=\"async\" class=\"alignnone size-full wp-image-43117\" src=\"https:\/\/www.inogic.com\/blog\/wp-content\/uploads\/2025\/12\/Building-Standalone-Apps-with-Power-Apps-Code-Apps-Part-1-\u2013-Using-Dataverse-and-Office-365-Users-Connectors.png\" alt=\"Power Apps\" width=\"2100\" height=\"1200\" srcset=\"https:\/\/www.inogic.com\/blog\/wp-content\/uploads\/2025\/12\/Building-Standalone-Apps-with-Power-Apps-Code-Apps-Part-1-\u2013-Using-Dataverse-and-Office-365-Users-Connectors.png 2100w, https:\/\/www.inogic.com\/blog\/wp-content\/uploads\/2025\/12\/Building-Standalone-Apps-with-Power-Apps-Code-Apps-Part-1-\u2013-Using-Dataverse-and-Office-365-Users-Connectors-300x171.png 300w, https:\/\/www.inogic.com\/blog\/wp-content\/uploads\/2025\/12\/Building-Standalone-Apps-with-Power-Apps-Code-Apps-Part-1-\u2013-Using-Dataverse-and-Office-365-Users-Connectors-1024x585.png 1024w, https:\/\/www.inogic.com\/blog\/wp-content\/uploads\/2025\/12\/Building-Standalone-Apps-with-Power-Apps-Code-Apps-Part-1-\u2013-Using-Dataverse-and-Office-365-Users-Connectors-768x439.png 768w, https:\/\/www.inogic.com\/blog\/wp-content\/uploads\/2025\/12\/Building-Standalone-Apps-with-Power-Apps-Code-Apps-Part-1-\u2013-Using-Dataverse-and-Office-365-Users-Connectors-1536x878.png 1536w, https:\/\/www.inogic.com\/blog\/wp-content\/uploads\/2025\/12\/Building-Standalone-Apps-with-Power-Apps-Code-Apps-Part-1-\u2013-Using-Dataverse-and-Office-365-Users-Connectors-2048x1170.png 2048w, https:\/\/www.inogic.com\/blog\/wp-content\/uploads\/2025\/12\/Building-Standalone-Apps-with-Power-Apps-Code-Apps-Part-1-\u2013-Using-Dataverse-and-Office-365-Users-Connectors-660x377.png 660w\" sizes=\"(max-width: 2100px) 100vw, 2100px\" \/><\/p>\n<p>In the Dynamics 365 and Power Apps ecosystem, we have several options for building applications, each one is for a specific type of requirement. Model-driven Apps works well when we need a structured UI with standard components, while we use Canvas Apps to create custom, mobile-friendly interfaces with a low-code approach. Recently, Microsoft introduced another application type called Code Apps, which offers a completely different way to build applications using pro code approach.<\/p>\n<p>With the introduction of\u00a0 Power Apps Code Apps, things have changed. Code Apps let us build standalone single page applications using modern web frameworks. These are independent applications that cannot be integrated with Canvas Apps or Model-driven Apps.<\/p>\n<p>The best part is that we get direct access to more than 1,500 standard and premium connectors through the Power Apps SDK. We do not have to write any authentication code, no OAuth flows, no custom APIs, no middleware. We just have to connect and use.<\/p>\n<p>In this article, we&#8217;ll walk you through creating a Code App from scratch. We&#8217;ll build Personal Dashboard, a simple application that pulls assigned cases and leads from Dataverse and shows current logged in user details using the Office 365 Users and Dataverse connectors.<\/p>\n<h3>What Makes Code Apps Different?<\/h3>\n<p>We can build a UI of our own choice and connect to a wide range of data sources using more than 1,500 standard and premium connectors provided by the Power Platform. All connections are secure because the Power Apps SDK handles authentication, and each connector enforces user-level permissions. This means the app can only access data that the signed-in user is allowed to see, so there\u2019s no need to write custom authentication code.<\/p>\n<p>Code Apps provide a balanced approach with several key advantages:<\/p>\n<ul>\n<li>A standalone application that runs directly within Power Platform<\/li>\n<li>Full development with modern web frameworks such as React, Vue, or Angular, with support for\u00a0 your preferred libraries<\/li>\n<li>Direct access to connectors through the Power Apps SDK without custom authentication code<\/li>\n<li>Streamlined deployment through a single command to your environment<\/li>\n<\/ul>\n<p>The connector integration is particularly valuable. Whether the need is to query Dataverse, access current user profile details, or use other services, the connector can be called directly. There&#8217;s no need to configure service principals, manage app registrations, or implement token management. The integration works seamlessly within the platform.<\/p>\n<h3>Prerequisites<\/h3>\n<p>Before getting started, we have to make sure the following prerequisites are in place:<\/p>\n<ul>\n<li>Power Apps Premium license with Code Apps enabled environment<\/li>\n<li>Visual Studio Code installed<\/li>\n<li>Node.js LTS version<\/li>\n<li>Power Platform Tools for VS Code extension<\/li>\n<\/ul>\n<h3><strong>Step 1: Setting Up the Code App<\/strong><\/h3>\n<p>Let&#8217;s create the app. Open VS Code, launch a PowerShell terminal, and run the following command:<\/p>\n<p><em>npm create vite@latest PersonalDashboard &#8212; &#8211;template react-ts<\/em><\/p>\n<p>For this application, we are using React as the framework and TypeScript as the variant. After that, navigate to the project folder and install the dependencies:<\/p>\n<p><em>npm install<br \/>\n<\/em><br \/>\nInstall the node type definitions:<\/p>\n<p><em>npm i &#8211;save-dev @types\/node<\/em><\/p>\n<p>After executing these commands, the project structure will appear as shown in the image below.<\/p>\n<p><img decoding=\"async\" class=\"alignnone size-full wp-image-43119\" style=\"border: 1px solid #000000; padding: 1px; margin: 1px;\" src=\"https:\/\/www.inogic.com\/blog\/wp-content\/uploads\/2025\/12\/1PowerAppsCode.png\" alt=\"PowerAppsCode\" width=\"453\" height=\"509\" srcset=\"https:\/\/www.inogic.com\/blog\/wp-content\/uploads\/2025\/12\/1PowerAppsCode.png 453w, https:\/\/www.inogic.com\/blog\/wp-content\/uploads\/2025\/12\/1PowerAppsCode-267x300.png 267w\" sizes=\"(max-width: 453px) 100vw, 453px\" \/><\/p>\n<p>According to the official Microsoft documentation, the Power Apps SDK currently requires the port to be 3000 in the default configuration. To configure this, open vite.config.ts and replace the content with the following code:<\/p>\n<pre class=\"lang:css gutter:true start:1\">import { defineConfig } from 'vite'\r\n\r\nimport react from '@vitejs\/plugin-react'\r\n\r\nimport * as path from 'path'\r\n\r\n\u00a0\r\n\r\n\/\/ https:\/\/vite.dev\/config\/\r\n\r\nexport default defineConfig({\r\n\r\nbase: \".\/\",\r\n\r\nserver: {\r\n\r\nhost: \"::\",\r\n\r\nport: 3000,\r\n\r\n},\r\n\r\nplugins: [react()],\r\n\r\nresolve: {\r\n\r\nalias: {\r\n\r\n\"@\": path.resolve(__dirname, \".\/src\"),\r\n\r\n},\r\n\r\n},\r\n\r\n});<\/pre>\n<p><strong><em>Note for Mac users: It may be necessary to modify the package.json scripts section.<\/em><\/strong><\/p>\n<p>Change from:<\/p>\n<pre class=\"lang:css gutter:true start:1\">\"scripts\": \u00a0{\r\n\r\n\"dev\": \"start vite &amp;&amp; start pac code run\",\r\n\r\n\"build\": \"tsc -b &amp;&amp; vite build\",\r\n\r\n\"lint\": \"eslint .\",\r\n\r\n\"preview\": \"vite preview\"\r\n\r\n}<\/pre>\n<p>to this<\/p>\n<pre class=\"lang:css gutter:true start:1\">\"scripts\": {\r\n\"dev\": \"vite &amp;&amp; pac code run\",\r\n\"build\": \"tsc -b &amp;&amp; vite build\",\r\n\"lint\": \"eslint .\",\r\n\"preview\": \"vite preview\"\r\n}<\/pre>\n<p>Save the file and run the Code App locally by executing:<\/p>\n<p><em>npm run dev<\/em><\/p>\n<p>Browse to <a href=\"http:\/\/localhost:3000\" target=\"_blank\" rel=\"noopener\">http:\/\/localhost:3000<\/a>. If the application loads successfully, press Ctrl+C to stop the server.<\/p>\n<h3><strong>Step 2: Initialize the Code App<\/strong><\/h3>\n<p>First authenticate to Power Platform:<\/p>\n<p><em>pac auth create<\/em><\/p>\n<p>After that, sign in with the credentials and select the environment:<\/p>\n<p><em>pac env select -env &lt;environment-url&gt;<\/em><\/p>\n<p>Initialize the Code App:<\/p>\n<p><em>pac code init &#8211;displayName &#8220;Personal Dashboard&#8221;<\/em><\/p>\n<p>This will create a power.config.json file in the project as shown in the image below.<\/p>\n<p><img decoding=\"async\" class=\"alignnone size-full wp-image-43120\" style=\"border: 1px solid #000000; padding: 1px; margin: 1px;\" src=\"https:\/\/www.inogic.com\/blog\/wp-content\/uploads\/2025\/12\/2PowerAppsCode.png\" alt=\"PowerAppsCode\" width=\"456\" height=\"303\" srcset=\"https:\/\/www.inogic.com\/blog\/wp-content\/uploads\/2025\/12\/2PowerAppsCode.png 456w, https:\/\/www.inogic.com\/blog\/wp-content\/uploads\/2025\/12\/2PowerAppsCode-300x199.png 300w\" sizes=\"(max-width: 456px) 100vw, 456px\" \/><\/p>\n<p>Now install the Power Apps SDK. This package provides APIs that allow the application to interact directly with Power Platform services and includes built-in logic to manage connections automatically as they are added or removed.<\/p>\n<p><em>npm install &#8211;save-dev &#8220;@microsoft\/power-apps<\/em><\/p>\n<p>Update package.json to run both Vite and the Power Apps SDK server:<\/p>\n<pre class=\"lang:css gutter:true start:1\">\"scripts\": {\r\n\"dev\": \"start pac code run &amp;&amp; vite\",\r\n\"build\": \"tsc -b &amp;&amp; vite build\",\r\n\"lint\": \"eslint .\",\r\n\"preview\": \"vite preview\"\r\n}<\/pre>\n<h3><strong>Step 3: Configure Power Provider<\/strong><\/h3>\n<p>&nbsp;<\/p>\n<p>Create PowerProvider.tsx under src and add the Power SDK context provider code given below.<\/p>\n<p>&nbsp;<\/p>\n<pre class=\"lang:css gutter:true start:1\">import { initialize } from \"@microsoft\/power-apps\/app\";\r\n\r\nimport { useEffect, type ReactNode } from \"react\";\r\n\r\ninterface PowerProviderProps {\r\n\r\nchildren: ReactNode;\r\n\r\n}\r\n\r\nexport default function PowerProvider({ children }: PowerProviderProps) {\r\n\r\nuseEffect(() =&gt; {\r\n\r\nconst initApp = async () =&gt; {\r\n\r\ntry {\r\n\r\nawait initialize();\r\n\r\nconsole.log('Power Platform SDK initialized successfully');\r\n\r\n} catch (error) {\r\n\r\nconsole.error('Failed to initialize Power Platform SDK:', error);\r\n\r\n}\r\n\r\n};\r\n\r\ninitApp();\r\n\r\n}, []);\r\n\r\nreturn &lt;&gt;{children}&lt;\/&gt;;\r\n\r\n}<\/pre>\n<p>Update the main.tsx and add this line in the imports section:<\/p>\n<pre class=\"lang:css gutter:true start:1\">import PowerProvider from '.\/PowerProvider.tsx'<\/pre>\n<p>and change this code snippet<\/p>\n<pre class=\"lang:css gutter:true start:1\">&lt;StrictMode&gt;\r\n&lt;App \/&gt;\r\n&lt;\/StrictMode&gt;,<\/pre>\n<p>to this<\/p>\n<pre class=\"lang:css gutter:true start:1\">&lt;StrictMode&gt;\r\n\r\n&lt;PowerProvider&gt;\r\n\r\n&lt;App \/&gt;\r\n\r\n&lt;\/PowerProvider&gt;\r\n\r\n&lt;\/StrictMode&gt;,<\/pre>\n<p>Run the app by executing :<\/p>\n<p><em>npm run dev<\/em><\/p>\n<h3>Open the URL provided by the Power SDK Server in the same browser profile as that of power platform tenant.<br \/>\n<strong><br \/>\n<\/strong><strong>Step 4: Adding Dataverse Connector<\/strong><\/h3>\n<p>Now comes the part where we will add the data source to our application. In this step, we\u2019ll use the Dataverse connector to fetch assigned cases and leads for the logged-in user.<\/p>\n<p>For that First, we need to create a connection:<\/p>\n<p>1. Go to <a href=\"https:\/\/make.powerapps.com\/\" target=\"_blank\" rel=\"noopener\">Power Apps<\/a> and open Connections.<\/p>\n<p>2. Click New Connection and select Dataverse.<\/p>\n<p>Follow the instruction properly to create the connection, as shown in the<\/p>\n<p><img decoding=\"async\" class=\"alignnone size-full wp-image-43121\" style=\"border: 1px solid #000000; padding: 1px; margin: 1px;\" src=\"https:\/\/www.inogic.com\/blog\/wp-content\/uploads\/2025\/12\/3PowerAppsCode.png\" alt=\"PowerAppsCode\" width=\"1135\" height=\"535\" srcset=\"https:\/\/www.inogic.com\/blog\/wp-content\/uploads\/2025\/12\/3PowerAppsCode.png 1135w, https:\/\/www.inogic.com\/blog\/wp-content\/uploads\/2025\/12\/3PowerAppsCode-300x141.png 300w, https:\/\/www.inogic.com\/blog\/wp-content\/uploads\/2025\/12\/3PowerAppsCode-1024x483.png 1024w, https:\/\/www.inogic.com\/blog\/wp-content\/uploads\/2025\/12\/3PowerAppsCode-768x362.png 768w, https:\/\/www.inogic.com\/blog\/wp-content\/uploads\/2025\/12\/3PowerAppsCode-660x311.png 660w\" sizes=\"(max-width: 1135px) 100vw, 1135px\" \/><\/p>\n<p>Once the connection is ready, we have to open the terminal. For Dataverse, we have to add the tables required for the application. For this example, we&#8217;ll add the Leads and Incident (Cases) tables using the following commands:<\/p>\n<p><em>pac code add-data-source -a dataverse -t lead <\/em><\/p>\n<p><em>pac code add-data-source -a dataverse -t incident<br \/>\n<\/em><\/p>\n<p><img decoding=\"async\" class=\"alignnone size-full wp-image-43122\" style=\"border: 1px solid #000000; padding: 1px; margin: 1px;\" src=\"https:\/\/www.inogic.com\/blog\/wp-content\/uploads\/2025\/12\/4PowerAppsCode.png\" alt=\"PowerAppsCode\" width=\"458\" height=\"736\" srcset=\"https:\/\/www.inogic.com\/blog\/wp-content\/uploads\/2025\/12\/4PowerAppsCode.png 458w, https:\/\/www.inogic.com\/blog\/wp-content\/uploads\/2025\/12\/4PowerAppsCode-187x300.png 187w\" sizes=\"(max-width: 458px) 100vw, 458px\" \/><\/p>\n<p>After running these commands, we can see that some files and folders are added to the project. Inside the generated folder, there are services and models folders. These contain the files for Leads, Incidents, and other tables, which can be used in the code. For example:<\/p>\n<pre class=\"lang:css gutter:true start:1\">import { AccountsService } from '.\/generated\/services\/AccountsService';\r\n\r\nImport type { Accounts } from '.\/generated\/models\/AccountsModel';<\/pre>\n<p>CRUD operations can be performed on Dataverse using the app. Before accessing any data, we have to initialize the Power Apps SDK to avoid errors. An async function or state check can ensure the SDK is ready before making API calls. For example:<\/p>\n<pre class=\"lang:css gutter:true start:1\">useEffect(() =&gt; {\r\n\r\n\/\/ Define a function of asynchronous type to properly initialize the Power Apps SDK to avoid any error during runtime\r\n\r\n\u00a0\r\n\r\nconst init = async () =&gt; {\r\n\r\ntry {\r\n\r\nawait initialize(); \/\/ Wait for SDK initialization\r\n\r\nsetIsInitialized(true); \/\/ Mark the app as ready for data operations\r\n\r\n} catch (err) {\r\n\r\nsetError('Failed to initialize Power Apps SDK'); \/\/ Handle initialization errors\r\n\r\nsetLoading(false); \/\/ Stop any loading indicators\r\n\r\n}\r\n\r\n};\r\n\r\n\u00a0\r\n\r\ninit(); \/\/ Call the initialization function when the component mounts\r\n\r\n}, []);\r\n\r\n\u00a0\r\n\r\nuseEffect(() =&gt; {\r\n\r\nIf (!isInitialized) return;\r\n\r\n\u00a0\r\n\r\n\/\/ Place your data reading logic here<\/pre>\n<h3>}, []);<\/h3>\n<pre class=\"lang:css gutter:true start:1\"><\/pre>\n<p>&nbsp;<\/p>\n<h3><strong>Step 5: Adding Office 365 Users Connector<\/strong><\/h3>\n<p>Similar to Dataverse, we need to create a connection for Office 365 Users by following the same steps. Once the connection is ready, we need to add it to the application. First, list all available connections to get the connection ID using command:<\/p>\n<p><em>pac connection list<\/em><\/p>\n<p>It will list all the connections available in the selected environment. We need to Copy the connection ID for Office 365 Users from the list, then add it to the project using:<\/p>\n<p><em>pac code add-data-source -a &#8220;shared_office365users&#8221; -c &#8220;&lt;connection-id&gt;&#8221;<\/em><\/p>\n<p>After running this command, the Office 365 Users connector will be available to use in the application, allowing access to user profiles, and other Office 365 user data.<\/p>\n<h3><strong><br \/>\n<\/strong><strong>Step 6: Building the UI<\/strong><br \/>\n<strong><br \/>\n<\/strong><\/h3>\n<p>There are two ways to build a good UI. The first is the traditional coding approach where we write the complete code manually. The second is by using GitHub Copilot integrated in VS Code with the help of prompts.<\/p>\n<h3><strong>Using GitHub Copilot:<\/strong><\/h3>\n<p>We can generate the UI by writing a detailed prompt in GitHub Copilot. Here&#8217;s an example prompt:<\/p>\n<p>Create a Personal Dashboard UI component in React with TypeScript that displays:<\/p>\n<ol>\n<li>A header section showing the current logged-in user&#8217;s profile information (name, email, job title, and profile photo) fetched from Office 365 Users connector<\/li>\n<li>Two main sections side by side:<\/li>\n<\/ol>\n<p>&#8211; Left section: Display a list of assigned Cases (Incidents) from Dataverse<\/p>\n<p>* Show case title, case number, priority, status, and created date<\/p>\n<p>* Use card layout for each case<\/p>\n<p>* Add loading state and error handling<\/p>\n<p>&#8211; Right section: Display a list of assigned Leads from Dataverse<\/p>\n<p>* Show lead name, company, topic, status, and created date<\/p>\n<p>* Use card layout for each lead<\/p>\n<p>* Add loading state and error handling<\/p>\n<ol start=\"3\">\n<li>Use modern, clean UI design with:<\/li>\n<\/ol>\n<p>&#8211; Responsive layout (works on desktop and mobile)<\/p>\n<p>&#8211; Tailwind CSS for styling<\/p>\n<p>&#8211; Professional color scheme (blues and grays)<\/p>\n<p>&#8211; Proper spacing and typography<\/p>\n<p>&#8211; Loading spinners while data is fetching<\/p>\n<p>&#8211; Error messages if data fails to load<\/p>\n<p>After providing this prompt to GitHub Copilot, it will generate the complete component code. We can then review the generated code, make any necessary adjustments, and integrate it into our application.<\/p>\n<h3><strong>Step 7: Deploy Your Code App<\/strong><\/h3>\n<p>Once the code is complete and the app is running locally, the next step is to deploy the application. For Code Apps, deployment is straightforward. First, build the application by running:<\/p>\n<p><em>npm run build <\/em><\/p>\n<p>After a successful build, execute the following command to push the application to Power Apps:<\/p>\n<p><em>pac code push <\/em><\/p>\n<p>This command will deploy the application to Power Apps. To verify the deployment, go to the Power Apps portal and open the Apps section. The newly deployed Code App will be visible in the list as shown in the image below.<\/p>\n<p><img decoding=\"async\" class=\"alignnone size-full wp-image-43123\" style=\"border: 1px solid #000000; padding: 1px; margin: 1px;\" src=\"https:\/\/www.inogic.com\/blog\/wp-content\/uploads\/2025\/12\/5PowerAppsCode.png\" alt=\"PowerAppsCode\" width=\"1901\" height=\"533\" srcset=\"https:\/\/www.inogic.com\/blog\/wp-content\/uploads\/2025\/12\/5PowerAppsCode.png 1901w, https:\/\/www.inogic.com\/blog\/wp-content\/uploads\/2025\/12\/5PowerAppsCode-300x84.png 300w, https:\/\/www.inogic.com\/blog\/wp-content\/uploads\/2025\/12\/5PowerAppsCode-1024x287.png 1024w, https:\/\/www.inogic.com\/blog\/wp-content\/uploads\/2025\/12\/5PowerAppsCode-768x215.png 768w, https:\/\/www.inogic.com\/blog\/wp-content\/uploads\/2025\/12\/5PowerAppsCode-1536x431.png 1536w, https:\/\/www.inogic.com\/blog\/wp-content\/uploads\/2025\/12\/5PowerAppsCode-660x185.png 660w\" sizes=\"(max-width: 1901px) 100vw, 1901px\" \/><\/p>\n<p>To run the app, click the play button. On the first launch, the application will prompt for permission to access the connected data sources. After allowing the permissions, the application will use those connection references for all subsequent operations.<\/p>\n<p><img decoding=\"async\" class=\"alignnone size-full wp-image-43124\" style=\"border: 1px solid #000000; padding: 1px; margin: 1px;\" src=\"https:\/\/www.inogic.com\/blog\/wp-content\/uploads\/2025\/12\/6PowerAppsCode.png\" alt=\"PowerAppsCode\" width=\"1246\" height=\"541\" srcset=\"https:\/\/www.inogic.com\/blog\/wp-content\/uploads\/2025\/12\/6PowerAppsCode.png 1246w, https:\/\/www.inogic.com\/blog\/wp-content\/uploads\/2025\/12\/6PowerAppsCode-300x130.png 300w, https:\/\/www.inogic.com\/blog\/wp-content\/uploads\/2025\/12\/6PowerAppsCode-1024x445.png 1024w, https:\/\/www.inogic.com\/blog\/wp-content\/uploads\/2025\/12\/6PowerAppsCode-768x333.png 768w, https:\/\/www.inogic.com\/blog\/wp-content\/uploads\/2025\/12\/6PowerAppsCode-660x287.png 660w\" sizes=\"(max-width: 1246px) 100vw, 1246px\" \/><\/p>\n<p><strong>\u00a0<\/strong><\/p>\n<p><strong> <img decoding=\"async\" class=\"alignnone size-full wp-image-43125\" style=\"border: 1px solid #000000; padding: 1px; margin: 1px;\" src=\"https:\/\/www.inogic.com\/blog\/wp-content\/uploads\/2025\/12\/7PowerAppsCode.gif\" alt=\"PowerAppsCode\" width=\"1280\" height=\"544\" \/><\/strong><\/p>\n<h3><strong>Conclusion<\/strong><\/h3>\n<p>With Power Apps Code Apps, we can now build standalone applications. The real advantage here is the direct access to over 1,500 connectors through the Power Apps SDK. We can connect to Dataverse, Office 365 Users, and other services without writing any authentication code. The Power Apps SDK handles all the security, and each connector respects user level permissions automatically.<\/p>\n<p>We also get complete freedom to design our own UI using any libraries we prefer. The deployment process is simple. Just run the build command and push it to Power Platform with a single command.<\/p>\n<p>In this article, we built a Personal Dashboard that pulls data from Dataverse and Office 365 Users. The same approach works for any application that needs to connect with Power Platform services. The setup is straightforward, and once the project is initialized, adding new data sources is just a matter of running a few commands.<\/p>\n<p>Code Apps provide a practical way to build custom applications within the Power Platform ecosystem while maintaining secure connections and proper access control.<\/p>\n<h3>Frequently Asked Questions (FAQs)<\/h3>\n<h3>What are Power Apps Code Apps?<\/h3>\n<p>Power Apps Code Apps are a new application type in Microsoft Power Platform that allow developers to build standalone single-page applications using modern web frameworks such as React, Angular, or Vue. They provide direct access to Power Platform connectors through the Power Apps SDK without requiring custom authentication code.<\/p>\n<h3>How are Code Apps different from Canvas Apps and Model-Driven Apps?<\/h3>\n<p>Unlike Canvas Apps and Model-Driven Apps, Code Apps:<\/p>\n<ul>\n<li>Are fully standalone applications<\/li>\n<li>Use a pro-code development approach<\/li>\n<li>Allow complete control over UI and application architecture<\/li>\n<li>Cannot be embedded into Canvas or Model-Driven Apps<\/li>\n<li>Use modern frontend frameworks instead of low-code designers<\/li>\n<\/ul>\n<h3>Do Power Apps Code Apps require authentication setup?<\/h3>\n<p>No. Authentication is handled automatically by the Power Apps SDK. Developers do not need to implement OAuth flows, manage tokens, or configure app registrations. All connectors enforce user-level permissions by default.<\/p>\n<h3>Can Power Apps Code Apps connect to Dataverse?<\/h3>\n<p>Yes. Power Apps Code Apps can connect directly to Dataverse using the Dataverse connector. Developers can perform CRUD operations on Dataverse tables, such as Leads and Incidents once the SDK is initialized.<\/p>\n<h3>How do Code Apps access Office 365 user information?<\/h3>\n<p>Code Apps use the Office 365 Users connector to retrieve profile details such as name, email, job title, and profile photo. The connector respects the signed-in user\u2019s permissions automatically.<\/p>\n","protected":false},"excerpt":{"rendered":"<p>In the Dynamics 365 and Power Apps ecosystem, we have several options for building applications, each one is for a specific type of requirement. Model-driven Apps works well when we need a structured UI with standard components, while we use Canvas Apps to create custom, mobile-friendly interfaces with a low-code approach. Recently, Microsoft introduced another\u2026 <span class=\"read-more\"><a href=\"https:\/\/www.inogic.com\/blog\/2025\/12\/building-standalone-apps-with-power-apps-code-apps-using-dataverse-and-office-365-users-connectors-part-1\/\">Read More &raquo;<\/a><\/span><\/p>\n","protected":false},"author":15,"featured_media":0,"comment_status":"closed","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"om_disable_all_campaigns":false,"_monsterinsights_skip_tracking":false,"_monsterinsights_sitenote_active":false,"_monsterinsights_sitenote_note":"","_monsterinsights_sitenote_category":0,"footnotes":""},"categories":[2354,38,2361],"tags":[],"class_list":["post-43115","post","type-post","status-publish","format-standard","hentry","category-dataverse","category-microsoft-powerapps","category-technical"],"aioseo_notices":[],"_links":{"self":[{"href":"https:\/\/www.inogic.com\/blog\/wp-json\/wp\/v2\/posts\/43115","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.inogic.com\/blog\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.inogic.com\/blog\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.inogic.com\/blog\/wp-json\/wp\/v2\/users\/15"}],"replies":[{"embeddable":true,"href":"https:\/\/www.inogic.com\/blog\/wp-json\/wp\/v2\/comments?post=43115"}],"version-history":[{"count":0,"href":"https:\/\/www.inogic.com\/blog\/wp-json\/wp\/v2\/posts\/43115\/revisions"}],"wp:attachment":[{"href":"https:\/\/www.inogic.com\/blog\/wp-json\/wp\/v2\/media?parent=43115"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.inogic.com\/blog\/wp-json\/wp\/v2\/categories?post=43115"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.inogic.com\/blog\/wp-json\/wp\/v2\/tags?post=43115"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}