<?xml version="1.0" encoding="UTF-8"?><rss xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:content="http://purl.org/rss/1.0/modules/content/" xmlns:atom="http://www.w3.org/2005/Atom" version="2.0" xmlns:itunes="http://www.itunes.com/dtds/podcast-1.0.dtd" xmlns:googleplay="http://www.google.com/schemas/play-podcasts/1.0"><channel><title><![CDATA[M365 Show -  Microsoft 365 Digital Workplace Daily: Microsoft Dev Pulse: Code. Build. Deploy.]]></title><description><![CDATA[Microsoft Dev Pulse is your go-to source for all things coding within the Microsoft ecosystem. Stay up to date on the latest tools, trends, and innovations across Visual Studio, GitHub, .NET, and Azure DevOps. Whether you're building apps, automating workflows, or deploying to the cloud, Dev Pulse keeps you connected to what matters most for developers. Code smarter, build faster, and innovate with Microsoft.]]></description><link>https://newsletter.m365.show/s/microsoft-dev-pulse-code-build-deploy</link><image><url>https://substackcdn.com/image/fetch/$s_!lvpM!,w_256,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F185d552e-dd17-493f-8d6d-df2df34c23c3_1280x1280.png</url><title>M365 Show -  Microsoft 365 Digital Workplace Daily: Microsoft Dev Pulse: Code. Build. Deploy.</title><link>https://newsletter.m365.show/s/microsoft-dev-pulse-code-build-deploy</link></image><generator>Substack</generator><lastBuildDate>Tue, 28 Apr 2026 13:33:29 GMT</lastBuildDate><atom:link href="https://newsletter.m365.show/feed" rel="self" type="application/rss+xml"/><copyright><![CDATA[Mirko Peters]]></copyright><language><![CDATA[en]]></language><webMaster><![CDATA[mirko.peters@datascience.show]]></webMaster><itunes:owner><itunes:email><![CDATA[mirko.peters@datascience.show]]></itunes:email><itunes:name><![CDATA[Mirko Peters - M365 Specialist]]></itunes:name></itunes:owner><itunes:author><![CDATA[Mirko Peters - M365 Specialist]]></itunes:author><googleplay:owner><![CDATA[mirko.peters@datascience.show]]></googleplay:owner><googleplay:email><![CDATA[mirko.peters@datascience.show]]></googleplay:email><googleplay:author><![CDATA[Mirko Peters - M365 Specialist]]></googleplay:author><itunes:block><![CDATA[Yes]]></itunes:block><item><title><![CDATA[How to Use PowerShell with Microsoft Graph API]]></title><description><![CDATA[If you want to tie together automation and the Microsoft 365 world, learning how to use PowerShell with the Microsoft Graph API is a must.]]></description><link>https://newsletter.m365.show/p/how-to-use-powershell-with-microsoft</link><guid isPermaLink="false">https://newsletter.m365.show/p/how-to-use-powershell-with-microsoft</guid><dc:creator><![CDATA[Mirko Peters - M365 Specialist]]></dc:creator><pubDate>Sat, 03 Jan 2026 14:30:46 GMT</pubDate><enclosure url="https://substackcdn.com/image/fetch/$s_!hDf3!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fpodcast-episode_1000740348247.jpg" length="0" type="image/jpeg"/><content:encoded><![CDATA[<p>If you want to tie together automation and the Microsoft 365 world, learning how to use PowerShell with the Microsoft Graph API is a must. This guide gives you a step-by-step path&#8212;from module installation and authentication to managing permissions and optimizing your scripts. Whether the goal is everyday admin functions or wrangling thousands of records&#8230;</p>
      <p>
          <a href="https://newsletter.m365.show/p/how-to-use-powershell-with-microsoft">
              Read more
          </a>
      </p>
   ]]></content:encoded></item><item><title><![CDATA[The Evolution of Custom Row Actions in List Formatting JSON]]></title><description><![CDATA[Custom row actions significantly enhance SharePoint lists, improving user interaction.]]></description><link>https://newsletter.m365.show/p/the-evolution-of-custom-row-actions</link><guid isPermaLink="false">https://newsletter.m365.show/p/the-evolution-of-custom-row-actions</guid><dc:creator><![CDATA[Mirko Peters - M365 Specialist]]></dc:creator><pubDate>Sun, 26 Oct 2025 00:40:29 GMT</pubDate><enclosure url="https://api.substack.com/feed/podcast/177104351/493e774ce97b1e3f9bb384387297567d.mp3" length="0" type="audio/mpeg"/><content:encoded><![CDATA[<p>Custom row actions significantly enhance SharePoint lists, improving user interaction. Initially, these actions were simple links, but they have evolved into intelligent tools that adapt based on user activity. You can manage these actions effectively using column formatting. This evolution introduces new, highly useful features. You configure these actions through column formatting, which allows for the addition of conditional logic, making them exceptionally powerful. Column formatting is crucial for guiding users and is therefore very important. The underlying mechanism for defining these custom row actions and their conditional behaviors is through <strong>List Formatting JSON definitions</strong>.</p><h2>Key Takeaways</h2><ul><li><p>Custom row actions make SharePoint lists better. They help users do things easily. You can add buttons and links to list items.</p></li><li><p>You can make actions smart. They can show or hide based on rules. They can also send different information. This makes your lists more helpful.</p></li><li><p>You can use actions to start Power Automate flows. You can also change column values. This helps you automate tasks and manage data quickly.</p></li><li><p>Actions help with document libraries. You can preview, copy, or move files. This makes handling documents easier.</p></li><li><p>Good practices make actions work well. Keep your code simple. Plan for your lists to grow. This makes your solutions last longer.</p></li></ul><h2>Basic Row Actions</h2><p>You started with basic tools. These tools helped you make your list items interactive. They let you control how people use your data. This first set of tools prepared the way for more complex actions.</p><h3>Simple Action Rules</h3><p>To make a custom row action, use <code>customRowAction</code>. Put it inside a button. This tells SharePoint what to do. You pick an action with an <code>action</code> key. Use a text value. For example, use <code>&#8220;action&#8221;: &#8220;defaultClick&#8221;</code> to open an item. This simple rule connects actions to parts of your list. You can put these actions in buttons. You can also put them in spans or divs. This gives you many choices.</p><pre><code><code>{
  &#8220;elmType&#8221;: &#8220;button&#8221;,
  &#8220;txtContent&#8221;: &#8220;Open this item&#8221;,
  &#8220;customRowAction&#8221;: {
    &#8220;action&#8221;: &#8220;defaultClick&#8221;
  }
}
</code></code></pre><p>Some actions need more information. For example, <code>setValue</code> needs an <code>actionInput</code> object. This object holds extra details. It includes field names and new values. When you use <code>executeFlow</code>, you give flow details. Use the <code>actionParams</code> attribute for the flow ID. These parts are key in your list formatting json.</p><h3>Main Action Types</h3><p>The first main actions were like SharePoint buttons. <code>defaultClick</code> opened an item. It worked like a double-click. <code>editProps</code> opened the edit form. <code>share</code> showed the share box. <code>copyLink</code> put the item&#8217;s link on your clipboard. <code>comment</code> opened the comments panel. It went right to the comments. <code>delete</code> let you remove an item. These actions were simple. But they became strong with conditional column formatting. You could show or hide them. This depended on your data. This made using the list better.</p><p>Two other strong actions are <code>setValue</code> and <code>executeFlow</code>. <code>setValue</code> changes column values. It does this without opening a form. You can even use formulas to update values. For example, you can add one to a number. <code>executeFlow</code> runs Power Automate flows. It runs them right from a list item. This was a big step. It let you start workflows with one click. You set up these actions in the column formatting pane.</p><h3>Old Problems</h3><p>These basic actions gave good control. But they had some limits. They mostly worked on one item at a time. You could not easily act on many items. This was true with custom column formatting. The dynamic features were also limited. You often needed complex rules. This was for different situations. These early versions led to today&#8217;s advanced features. The need for better solutions pushed column formatting forward.</p><h2>Dynamic Actions and Conditional Logic</h2><p>This part shows how custom row actions got smarter. You can make them intelligent now. They change based on your data. They also change based on what users need. This makes your SharePoint lists stronger. You use column formatting for this.</p><h3>Conditional Display</h3><p>You want actions to show only when needed. The <code>display</code> setting helps you. It lets you show or hide actions. This depends on certain rules. This is key for conditional formatting. You write an <code>if</code> statement. If the rule is true, the action shows. If false, it stays hidden.</p><p>For example, you may want an action. It is only for Word documents. You can check the file name.</p><blockquote><p><code>&#8220;display&#8221;: &#8220;=if(indexOf([$FileLeafRef], &#8216;.docx&#8217;) &gt; 0, &#8216;flex&#8217;, &#8216;none&#8217;)&#8221;</code></p></blockquote><p>This code checks the file name. It looks for &#8220;.docx&#8221;. If found, the action appears. If not, it stays hidden. This uses <code>indexOf</code> on <code>FileLeafRef</code>. It checks for file types. This feature makes column formatting better. It guides users to the right actions. This is a main idea in conditional formatting.</p><h3>Dynamic Parameters</h3><p>Custom row actions can also send changing data. This makes them flexible. The <code>actionParams</code> setting helps here. You use <code>actionParams</code> with <code>executeFlow</code>. It sends details to a Power Automate flow. Remember, <code>actionParams</code> is an escaped JSON string. You must escape all double quotes inside it.</p><p>You give the flow&#8217;s ID. You can also change the flow panel&#8217;s look.</p><div class="captioned-image-container"><figure><a class="image-link image2" target="_blank" href="https://substackcdn.com/image/fetch/$s_!6NZz!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fef155f56-ad9e-4505-84b3-53d5f70ac280_684x136.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!6NZz!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fef155f56-ad9e-4505-84b3-53d5f70ac280_684x136.png 424w, https://substackcdn.com/image/fetch/$s_!6NZz!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fef155f56-ad9e-4505-84b3-53d5f70ac280_684x136.png 848w, https://substackcdn.com/image/fetch/$s_!6NZz!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fef155f56-ad9e-4505-84b3-53d5f70ac280_684x136.png 1272w, https://substackcdn.com/image/fetch/$s_!6NZz!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fef155f56-ad9e-4505-84b3-53d5f70ac280_684x136.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!6NZz!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fef155f56-ad9e-4505-84b3-53d5f70ac280_684x136.png" width="684" height="136" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/ef155f56-ad9e-4505-84b3-53d5f70ac280_684x136.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:136,&quot;width&quot;:684,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:20897,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/png&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:&quot;https://m365.show/i/177104351?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fef155f56-ad9e-4505-84b3-53d5f70ac280_684x136.png&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!6NZz!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fef155f56-ad9e-4505-84b3-53d5f70ac280_684x136.png 424w, https://substackcdn.com/image/fetch/$s_!6NZz!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fef155f56-ad9e-4505-84b3-53d5f70ac280_684x136.png 848w, https://substackcdn.com/image/fetch/$s_!6NZz!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fef155f56-ad9e-4505-84b3-53d5f70ac280_684x136.png 1272w, https://substackcdn.com/image/fetch/$s_!6NZz!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fef155f56-ad9e-4505-84b3-53d5f70ac280_684x136.png 1456w" sizes="100vw" loading="lazy"></picture><div></div></div></a></figure></div><p>Here is how you set up <code>executeFlow</code> with <code>actionParams</code>:</p><pre><code><code>{
  &#8220;$schema&#8221;: &#8220;https://developer.microsoft.com/json-schemas/sp/column-formatting.schema.json&#8221;,
  &#8220;elmType&#8221;: &#8220;button&#8221;,
  &#8220;customRowAction&#8221;: {
    &#8220;action&#8221;: &#8220;executeFlow&#8221;,
    &#8220;actionParams&#8221;: &#8220;{\&#8221;id\&#8221;:\&#8221;f7ecec0b-15c5-419f-8211-302a5d4e94f1\&#8221;, \&#8221;headerText\&#8221;:\&#8221;Do the things and stuff\&#8221;,\&#8221;runFlowButtonText\&#8221;:\&#8221;Lazerify!\&#8221;}&#8221;
  },
  &#8220;attributes&#8221;: {
    &#8220;class&#8221;: &#8220;ms-fontColor-themePrimary ms-fontColor-themeDark--hover&#8221;,
    &#8220;title&#8221;: &#8220;Launch Flow&#8221;
  },
  &#8220;style&#8221;: {
    &#8220;border&#8221;: &#8220;none&#8221;,
    &#8220;background-color&#8221;: &#8220;transparent&#8221;,
    &#8220;cursor&#8221;: &#8220;pointer&#8221;
  },
  &#8220;children&#8221;: [
    {
      &#8220;elmType&#8221;: &#8220;span&#8221;,
      &#8220;attributes&#8221;: {
        &#8220;iconName&#8221;: &#8220;Flow&#8221;,
        &#8220;class&#8221;: &#8220;ms-font-xxl&#8221;
      }
    }
  ]
}
</code></code></pre><p>This example shows a button. It starts a flow with an ID. It also sets a custom header. It sets custom button text. This control is strong for column formatting.</p><p>You also use <code>actionInput</code> for other actions. <code>actionInput</code> uses simpler JSON. You do not need to escape it. Actions like <code>setValue</code> and <code>embed</code> use <code>actionInput</code>. For <code>setValue</code>, give the column name. Give the new value. For <code>embed</code>, set height, width, and the link. This makes setting up these actions easy.</p><p>Beyond flows, you can make user interaction better. You do not need full custom forms. The <code>openApprovalDialog</code> action opens the SharePoint approval box. This is good if approvals are on your list. You can also use <code>openContextMenu</code>. This opens the item&#8217;s menu. It works like a right-click. These actions offer quick ways to use items. They work well with your column formatting.</p><h3>Using Column Values</h3><p>You can make custom row actions truly dynamic. You do this by using values from other columns. These columns are in the same row. This is a main part of column formatting. You get a column&#8217;s value using its internal name. Put the internal name in square brackets. Add a dollar sign before it. For example, <code>[$InternalName]</code>. This works because column formatting applies to the whole row. It lets you use all field values in that row.</p><p>This ability is key for conditional formatting. You can build dynamic links. You can update fields based on current data.</p><blockquote><p><a href="https://sharepoint.stackexchange.com/questions/278564/column-formatting-with-json-add-dynamic-hyperlink">Column values can be referenced within SharePoint list formatting JSON</a> to dynamically configure custom row actions. This is achieved by using the internal name of the field, enclosed in square brackets and preceded by a dollar sign, like <code>[$InternalName]</code>. This method works because the column is formatted within the context of the entire row, granting access to other field values within that row.</p><p>For instance, to create a dynamic hyperlink using a column value, you can embed <code>&#8220;[$ID]&#8221;</code> within the <code>href</code> property of an <code>elmType: &#8220;a&#8221;</code> element, as shown in the following example:</p><pre><code><code>{
  &#8220;elmType&#8221;: &#8220;a&#8221;,
  &#8220;txtContent&#8221;: &#8220;&#8221;,
  &#8220;attributes&#8221;: {
    &#8220;target&#8221;: &#8220;_blank&#8221;,
    &#8220;iconName&#8221;: &#8220;OpenInNewWindow&#8221;,
    &#8220;class&#8221;: &#8220;sp-field-quickAction&#8221;,
    &#8220;href&#8221;: {
      &#8220;operator&#8221;: &#8220;+&#8221;,
      &#8220;operands&#8221;: [
        &#8220;http://intranet.maib.local/sites/help/Workflows/preluareElement/preluareElement.aspx?List={7a9edd38-3f18-4bef-99f6-062067196fa2}&amp;ID=&#8221;,
        &#8220;[$ID]&#8221;,
        &#8220;&amp;ItemGuid={690E069D-F5E7-45B3-9BED-123844A03316}&amp;TemplateID={dbe5af40-944e-4a76-afa4-df336141cbf6}&amp;Source=http%3A%2F%2Fintranet%2Emaib%2Elocal%2Fsites%2Fhelp%2FLists%2FCerere%2520de%2520suport%2FAllItems%2Easpx&#8221;,
        &#8220;@currentField&#8221;
      ]
    }
  }
}
</code></code></pre></blockquote><p>This example makes a dynamic link. It uses the item&#8217;s ID (<code>[$ID]</code>). This builds a special URL. This shows how powerful referencing column values is. It helps you make interactive solutions. These solutions know their context. This is key for good column formatting. It makes your list formatting json definitions more useful. You can use this for conditional formatting rules. You can also fill parts of a json object.</p><h2>Advanced Integrations</h2><p>You can now use stronger actions. These actions connect things better. They go beyond simple tasks. You can link your lists to other services. You can also handle your documents better.</p><h3>Triggering Power Automate Flows</h3><p>You can start Power Automate flows. You can do this right from your list items. This is a strong feature. It makes hard tasks automatic. You use the <code>executeFlow</code> action. This action needs the flow&#8217;s special ID. You send this ID using <code>actionParams</code>. Remember, <code>actionParams</code> uses special JSON. You must change all double quotes inside its text.</p><blockquote><p>To start a Power Automate flow from a custom row action in SharePoint list formatting, use this JSON code:</p><pre><code><code>{
  &#8220;customRowAction&#8221;: {
    &#8220;action&#8221;: &#8220;executeFlow&#8221;,
    &#8220;actionParams&#8221;: &#8220;{\&#8221;id\&#8221;: \&#8221;[FLOW_IDENTIFIER]\&#8221;}&#8221;
  }
}
</code></code></pre><p>The <code>action</code> is set to <code>executeFlow</code>. The <code>actionParams</code> has a JSON text. It holds the <code>id</code> of the Power Automate flow. You should change <code>[FLOW_IDENTIFIER]</code> to your flow&#8217;s real ID. You can find this on the flow&#8217;s details page. Choose &#8216;Export&#8217; then &#8216;Get flow identifier&#8217;.</p></blockquote><p>This lets you start tasks with one click. You can also send live data from your list. This makes your automatic tasks smarter. You set up these actions in your column formatting. This gives you full control. You decide when and how users start flows.</p><h3>External Data Interactions</h3><p>You can put outside content. You can put it right into your list views. The <code>embed</code> action makes this happen. This action uses <code>actionInput</code>. You set the height, width, and the embed link. This link must be from an approved site. SharePoint has sites like YouTube already approved. You can add more sites in your settings.</p><p>For example, you can embed a YouTube video. Get the embed link from YouTube&#8217;s share option. Then set the height and width. Make them match the video&#8217;s size. This makes watching smooth. You can also create these links as you go. Use formulas to build the link. Base it on column values. This means each row can show different content. This makes your data look better. You can show media next to your list data.</p><p>The <code>setValue</code> action lets you change column values. You can change one or many columns at once. This action also uses <code>actionInput</code>. You give the column&#8217;s internal name. You also give the new value. You can use formulas for the new value. For example, you can add one to a number. You can also change many columns in one action. This is very strong for quick data changes.</p><p>Think about <code>setValue</code> versus &#8220;quick steps.&#8221; <code>setValue</code> works on one item. It changes specific columns. It does this right from your column formatting. &#8220;Quick steps&#8221; let you pick many items. You can then do a set action. Both ways are fast. <code>setValue</code> gives you exact control per item. &#8220;Quick steps&#8221; let you update many things.</p><h3>Complex Action Scenarios</h3><p>Document libraries have special actions. These actions make file handling easy. The <code>previewFileAction</code> opens a file preview. This is good for a quick look. It does not open the file&#8217;s program. This gives a steady preview. This is not like clicking the file directly.</p><p>The <code>copyFile</code> action lets you copy a file. You copy it to a chosen place. The <code>moveFile</code> action moves a file. It takes the file from its spot. It puts it in a new spot. Both actions use <code>actionParams</code>. You set the <code>destinationUrl</code> in this special JSON. You can make this URL change. You can build it with formulas. This means you can copy or move files. You can do this based on their state. You can also move them to certain folders. This makes sure files go to the right place. It stops user mistakes.</p><p>These actions are like &#8220;quick steps.&#8221; You can set up &#8220;quick steps&#8221; to copy or move files. This lets users pick many files. They can then copy or move them. You can check how &#8220;quick steps&#8221; are set up. Use tools like SP Editor. This tool shows list details. It shows the JSON code for quick steps. This helps you learn their structure. This helps you make your own actions. These actions can be more dynamic.</p><p>You can also make hard tasks. You can do this with existing actions. For example, show an &#8216;Edit&#8217; button.</p><ul><li><p><a href="https://www.linkedin.com/pulse/format-sharepoint-online-list-view-using-json-larry-saytee-cyvue">Clicking this button opens the &#8216;EditForm.aspx&#8217; page</a>. This is for that list item.</p></li><li><p>The item ID shows the exact list item.</p></li></ul><p>This gives a direct way to edit an item. It skips the usual click. This is one way to mix actions. You can make special user experiences. These make your data look better. They guide users through tasks. All these strong connections are possible. They use flexible column formatting.</p><h2>Practical Applications</h2><p>You can use custom row actions in many ways. These actions make your SharePoint lists stronger. They help users do tasks. You can put many actions together. This makes a custom toolbar. It makes things easy to use. You also help users with special workflows. You show actions only when needed. This uses column formatting well.</p><h3>Workflow Automation</h3><p>Custom row actions make approvals faster. They also give quick updates. You can work with items right in the list. This makes workflows simpler. For example, make &#8216;Approve&#8217; and &#8216;Reject&#8217; buttons. These buttons use the <code>setValue</code> action. They change fields like &#8216;ItemStatus&#8217;. They also change &#8216;ApprovalActionBy&#8217;. You do not need to open other forms. This makes approvals quicker.</p><blockquote><p>Custom row actions help with approvals. They use column formatting in SharePoint. You can work right in the list. The <a href="https://tech-a-way.com/create-an-approval-process-in-sharepoint-superfast-using-column-formatting-df31a767ee3d">JSON code shows &#8216;Approve&#8217; and &#8216;Reject&#8217; buttons</a>. When clicked, they use <code>setValue</code>. This updates &#8216;ItemStatus&#8217; and &#8216;ApprovalActionBy&#8217;. You do not need to go to other pages. This makes approvals faster and easier.</p><pre><code><code>{
  &#8220;$schema&#8221;: &#8220;https://developer.microsoft.com/json-schemas/sp/v2/column-formatting.schema.json&#8221;,
  &#8220;elmType&#8221;: &#8220;div&#8221;,
  &#8220;style&#8221;: {
    &#8220;flex-directon&#8221;: &#8220;row&#8221;,
    &#8220;justify-content&#8221;: &#8220;left&#8221;,
    &#8220;align-items&#8221;: &#8220;center&#8221;,
    &#8220;flex-wrap&#8221;: &#8220;nowrap&#8221;
  },
  &#8220;children&#8221;: [
    {
      &#8220;elmType&#8221;: &#8220;div&#8221;,
      &#8220;style&#8221;: {
        &#8220;display&#8221;: &#8220;=if([$ItemStatus] == &#8216;Pending&#8217; || [$ItemStatus] == &#8216;&#8217;, &#8216;inherit&#8217;,&#8217;none&#8217;)&#8221;,
        &#8220;flex-directon&#8221;: &#8220;row&#8221;,
        &#8220;justify-content&#8221;: &#8220;left&#8221;,
        &#8220;align-items&#8221;: &#8220;center&#8221;,
        &#8220;flex-wrap&#8221;: &#8220;wrap&#8221;
      },
      &#8220;children&#8221;: [
        {
          &#8220;elmType&#8221;: &#8220;button&#8221;,
          &#8220;customRowAction&#8221;: {
            &#8220;action&#8221;: &#8220;setValue&#8221;,
            &#8220;actionInput&#8221;: {
              &#8220;ItemStatus&#8221;: &#8220;Approved&#8221;,
              &#8220;ApprovalActionBy&#8221;: &#8220;@me&#8221;
            }
          },
          &#8220;attributes&#8221;: {
            &#8220;class&#8221;: &#8220;ms-fontColor-themePrimary ms-fontColor-themeDarker--hover&#8221;
          },
          &#8220;style&#8221;: {
            &#8220;border&#8221;: &#8220;none&#8221;,
            &#8220;background-color&#8221;: &#8220;transparent&#8221;,
            &#8220;cursor&#8221;: &#8220;pointer&#8221;,
            &#8220;display&#8221;: &#8220;flex&#8221;,
            &#8220;flex-directon&#8221;: &#8220;row&#8221;,
            &#8220;justify-content&#8221;: &#8220;left&#8221;,
            &#8220;align-items&#8221;: &#8220;center&#8221;,
            &#8220;flex-wrap&#8221;: &#8220;wrap&#8221;
          },
          &#8220;children&#8221;: [
            {
              &#8220;elmType&#8221;: &#8220;span&#8221;,
              &#8220;attributes&#8221;: {
                &#8220;iconName&#8221;: &#8220;SkypeCircleCheck&#8221;
              },
              &#8220;style&#8221;: {
                &#8220;padding&#8221;: &#8220;4px&#8221;
              }
            },
            {
              &#8220;elmType&#8221;: &#8220;span&#8221;,
              &#8220;txtContent&#8221;: &#8220;Approve&#8221;,
              &#8220;style&#8221;: {
                &#8220;word-break&#8221;: &#8220;keep-all&#8221;
              }
            }
          ]
        },
        {
          &#8220;elmType&#8221;: &#8220;button&#8221;,
          &#8220;customRowAction&#8221;: {
            &#8220;action&#8221;: &#8220;setValue&#8221;,
            &#8220;actionInput&#8221;: {
              &#8220;ItemStatus&#8221;: &#8220;Rejected&#8221;,
              &#8220;ApprovalActionBy&#8221;: &#8220;@me&#8221;
            }
          },
          &#8220;attributes&#8221;: {
            &#8220;class&#8221;: &#8220;ms-fontColor-themePrimary ms-fontColor-themeDarker--hover&#8221;
          },
          &#8220;style&#8221;: {
            &#8220;border&#8221;: &#8220;none&#8221;,
            &#8220;background-color&#8221;: &#8220;transparent&#8221;,
            &#8220;cursor&#8221;: &#8220;pointer&#8221;,
            &#8220;display&#8221;: &#8220;flex&#8221;,
            &#8220;flex-directon&#8221;: &#8220;row&#8221;,
            &#8220;justify-content&#8221;: &#8220;left&#8221;,
            &#8220;align-items&#8221;: &#8220;center&#8221;,
            &#8220;flex-wrap&#8221;: &#8220;wrap&#8221;
          },
          &#8220;children&#8221;: [
            {
              &#8220;elmType&#8221;: &#8220;span&#8221;,
              &#8220;attributes&#8221;: {
                &#8220;iconName&#8221;: &#8220;Blocked&#8221;
              },
              &#8220;style&#8221;: {
                &#8220;padding&#8221;: &#8220;4px&#8221;
              }
            },
            {
              &#8220;elmType&#8221;: &#8220;span&#8221;,
              &#8220;txtContent&#8221;: &#8220;Reject&#8221;,
              &#8220;style&#8221;: {
                &#8220;word-break&#8221;: &#8220;keep-all&#8221;
              }
            }
          ]
        }
      ]
    },
    {
      &#8220;elmType&#8221;: &#8220;div&#8221;,
      &#8220;children&#8221;: [
        {
          &#8220;elmType&#8221;: &#8220;span&#8221;,
          &#8220;txtContent&#8221;: &#8220;=&#8217;This item is &#8216; + toLowerCase([$ItemStatus])&#8221;,
          &#8220;style&#8221;: {
            &#8220;display&#8221;: &#8220;=if([$ItemStatus] == &#8216;Pending&#8217; ||[$ItemStatus] == &#8216;&#8217; , &#8216;none&#8217;,&#8217;inherit&#8217;)&#8221;,
            &#8220;padding-left&#8221;: &#8220;5px&#8221;,
            &#8220;word-break&#8221;: &#8220;keep-all&#8221;
          }
        }
      ]
    }
  ]
}
</code></code></pre></blockquote><h3>Enhanced Data Management</h3><p>You can use custom row actions. They help manage data better. This includes quick updates. It also helps with changing many items. These actions make lists more active. They also show data better. You can do common tasks. Do them right from the list. This is possible with column formatting.</p><ul><li><p><code>defaultClick</code>: This opens an item. It is like clicking a title.</p></li><li><p><code>share</code>: This opens a sharing box. You can share the item.</p></li><li><p><code>delete</code>: This opens a pop-up. You can delete the item.</p></li><li><p><code>editProps</code>: This opens the item&#8217;s edit window.</p></li><li><p><code>executeFlow</code>: This runs a Microsoft Flow. It connects to the item.</p></li></ul><p>These actions and column formatting give you control. They help you manage data well.</p><h3>Custom Navigation</h3><p>You can make custom ways to move around. Do this in your lists. Custom row actions make this happen. You can add links to menus. You can also add to the toolbar. This helps users move through content. This is a good use of column formatting.</p><ul><li><p><a href="https://learn.microsoft.com/en-us/sharepoint/dev/solution-guidance/modern-experience-customizations-customize-lists-and-libraries">Add custom links to the menu</a>. Use <code>EditControlBlock</code> actions. Set <code>Location=&#8221;EditControlBlock&#8221;</code>. Add a <code>Url</code> for moving around.</p></li><li><p>Extend the toolbar in modern lists. Use <code>CommandUI.Ribbon</code> actions. Set <code>Location=&#8221;CommandUI.Ribbon&#8221;</code>. Set <code>CommandAction</code> with a URL. This lets you move from toolbar items.</p></li></ul><p>These ways let you build custom navigation. They make data look better. They also make users interact more.</p><h2>Best Practices and Future</h2><h3>Performance and Maintainability</h3><p>You should make custom row actions work well. Make your JSON easy to read. Keep your <code>column formatting</code> simple. Do not use very hard expressions. Use clear names for your parts. This helps others get your code. Write down how your solutions work. Explain why you made choices. This makes your <code>column formatting</code> easier to fix. It also keeps it working for a long time. Think about adding notes in your JSON. This makes hard parts clear. You can also split big formats. Make them into smaller, easy parts. This makes things clearer. You can find many examples. Look in the List Formatting repo. These examples show good ways to work. They help you learn good <code>column formatting</code> skills.</p><h3>Scalability Considerations</h3><p>Think about how your <code>column formatting</code> will get bigger. Small JSON files work better. Try your <code>column formatting</code> on big lists. Make sure your expressions work fast. Do not do extra math. This stops slow loading. Your <code>list formatting json definitions</code> should work with many items. Plan for more things later. Hard formats can make pages load slowly. Always think about users first. Keep your JSON short. Think about how many items are in your list. Very big lists might need simpler formats.</p><h3>Future Developments</h3><p>Expect more actions in <code>column formatting</code>. <a href="https://m365.show/">Microsoft always adds new things</a>. Look for better links with other services. Maybe more ways to change data will come. The <code>list formatting json</code> will keep changing. Always check the <code>formatting pane</code>. Look for new choices there. This keeps you current on what it can do. The List Formatting repo is a good place. You can find many examples there. It shows what you can do now. It also hints at what is coming. These new things will make your lists stronger. You can build more active solutions. Think about even easier ways for users to work.</p><p>You have learned about custom row actions. They started simple. Now they are powerful tools. These tools help you get more done. They make your SharePoint lists active. Use these new features. Make smart and strong solutions. More new things will come. Your lists will get even better.</p><h2>FAQ</h2><h3>What are custom row actions in SharePoint?</h3><p>Custom row actions add buttons. They add links to list items. You use JSON for these actions. This is in column formatting. They help you control users. They help users use your data. Your lists become more active. They become easier to use.</p><h3>How do you make custom row actions dynamic?</h3><p>You make actions dynamic. You use special rules. The <code>display</code> setting hides or shows actions. This depends on rules. You also use <code>actionParams</code>. This is for complex data. Flow IDs are an example. <code>actionInput</code> handles simpler data. This is for <code>setValue</code> or <code>embed</code>.</p><h3>Can you use custom row actions in document libraries?</h3><p>Yes, you can use them. You can use them in document libraries. Actions like <code>previewFileAction</code> show files. <code>copyFile</code> and <code>moveFile</code> help with documents. You set destination URLs. These URLs can change.</p><h3>What is the difference between <code>actionParams</code> and <code>actionInput</code>?</h3><p><code>actionParams</code> needs special JSON. You must change all double quotes. This is for actions like <code>executeFlow</code>. <code>actionInput</code> uses simpler JSON. You do not need to change quotes. Actions like <code>setValue</code> and <code>embed</code> use <code>actionInput</code>.</p><p></p>]]></content:encoded></item><item><title><![CDATA[Your Guide to Building Stunning .NET Console UIs]]></title><description><![CDATA[You might think console apps are just plain text.]]></description><link>https://newsletter.m365.show/p/your-guide-to-building-stunning-net</link><guid isPermaLink="false">https://newsletter.m365.show/p/your-guide-to-building-stunning-net</guid><dc:creator><![CDATA[Mirko Peters - M365 Specialist]]></dc:creator><pubDate>Sat, 25 Oct 2025 22:32:22 GMT</pubDate><enclosure url="https://api.substack.com/feed/podcast/177101622/adf2040c678808c90c641390b887a49f.mp3" length="0" type="audio/mpeg"/><content:encoded><![CDATA[<p>You might think console apps are just plain text. They may seem to lack visual appeal. But the command-line interface (CLI) is now a very important tool. This is true in modern development. It&#8217;s especially true with <a href="https://mulitfariousguy.medium.com/the-unavoidable-command-line-9ed3cd5587b8">cloud platforms. Think of AWS and Azure</a>. <a href="https://www.warp.dev/state-of-the-cli-2023">Many developers find the terminal a must-have. 69% say it is essential.</a></p><div class="captioned-image-container"><figure><a class="image-link image2" target="_blank" href="https://substackcdn.com/image/fetch/$s_!kHR1!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F177833d8-3441-4516-9d2a-7a65bce7da67_685x148.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!kHR1!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F177833d8-3441-4516-9d2a-7a65bce7da67_685x148.png 424w, https://substackcdn.com/image/fetch/$s_!kHR1!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F177833d8-3441-4516-9d2a-7a65bce7da67_685x148.png 848w, https://substackcdn.com/image/fetch/$s_!kHR1!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F177833d8-3441-4516-9d2a-7a65bce7da67_685x148.png 1272w, https://substackcdn.com/image/fetch/$s_!kHR1!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F177833d8-3441-4516-9d2a-7a65bce7da67_685x148.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!kHR1!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F177833d8-3441-4516-9d2a-7a65bce7da67_685x148.png" width="685" height="148" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/177833d8-3441-4516-9d2a-7a65bce7da67_685x148.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:148,&quot;width&quot;:685,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:23452,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/png&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:false,&quot;topImage&quot;:true,&quot;internalRedirect&quot;:&quot;https://m365.show/i/177101622?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F177833d8-3441-4516-9d2a-7a65bce7da67_685x148.png&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!kHR1!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F177833d8-3441-4516-9d2a-7a65bce7da67_685x148.png 424w, https://substackcdn.com/image/fetch/$s_!kHR1!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F177833d8-3441-4516-9d2a-7a65bce7da67_685x148.png 848w, https://substackcdn.com/image/fetch/$s_!kHR1!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F177833d8-3441-4516-9d2a-7a65bce7da67_685x148.png 1272w, https://substackcdn.com/image/fetch/$s_!kHR1!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F177833d8-3441-4516-9d2a-7a65bce7da67_685x148.png 1456w" sizes="100vw" fetchpriority="high"></picture><div></div></div></a></figure></div><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!EXPH!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F828f19da-17ff-4851-aa01-6a340b6572b1_1024x768.webp" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!EXPH!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F828f19da-17ff-4851-aa01-6a340b6572b1_1024x768.webp 424w, https://substackcdn.com/image/fetch/$s_!EXPH!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F828f19da-17ff-4851-aa01-6a340b6572b1_1024x768.webp 848w, https://substackcdn.com/image/fetch/$s_!EXPH!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F828f19da-17ff-4851-aa01-6a340b6572b1_1024x768.webp 1272w, https://substackcdn.com/image/fetch/$s_!EXPH!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F828f19da-17ff-4851-aa01-6a340b6572b1_1024x768.webp 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!EXPH!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F828f19da-17ff-4851-aa01-6a340b6572b1_1024x768.webp" width="1024" height="768" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/828f19da-17ff-4851-aa01-6a340b6572b1_1024x768.webp&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:768,&quot;width&quot;:1024,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:null,&quot;alt&quot;:&quot;A bar chart showing developer statistics on CLI usage and self-assessed expertise levels.&quot;,&quot;title&quot;:null,&quot;type&quot;:null,&quot;href&quot;:null,&quot;belowTheFold&quot;:false,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:null,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="A bar chart showing developer statistics on CLI usage and self-assessed expertise levels." title="A bar chart showing developer statistics on CLI usage and self-assessed expertise levels." srcset="https://substackcdn.com/image/fetch/$s_!EXPH!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F828f19da-17ff-4851-aa01-6a340b6572b1_1024x768.webp 424w, https://substackcdn.com/image/fetch/$s_!EXPH!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F828f19da-17ff-4851-aa01-6a340b6572b1_1024x768.webp 848w, https://substackcdn.com/image/fetch/$s_!EXPH!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F828f19da-17ff-4851-aa01-6a340b6572b1_1024x768.webp 1272w, https://substackcdn.com/image/fetch/$s_!EXPH!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F828f19da-17ff-4851-aa01-6a340b6572b1_1024x768.webp 1456w" sizes="100vw"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg role="img" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><title></title><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><p>This shows a clear need. We need more engaging console experiences. We also need user-friendly ones. You can change your basic .net console app. Make it visually stunning. Make it interactive. .NET has powerful tools for this. It also has techniques. This guide will help you. You can build the coolest console apps.</p><h2>Key Takeaways</h2><ul><li><p>New console apps are useful tools. They can look good. They can also be fun to use.</p></li><li><p>Tools like Razor.Core and Spectre.Console help make .NET console UIs better. They let you add colors. They also let you add tables. You can also add things you can click on.</p></li><li><p>Good console UIs make using apps nicer. They help developers work faster. They also make work easier.</p></li><li><p>You can make console apps interactive. Use questions to ask the user. Show how much work is done. You can also respond to key presses.</p></li><li><p>Console UIs are good for certain jobs. They are better than big graphical programs. This is true for scripts. It is also true for automation.</p></li></ul><h2>Why Make Console UIs Look Great?</h2><h3>How Users Feel in Console Apps</h3><p>You may ask why make console apps look good. A good user experience helps a lot. One study shows money spent on UX can <a href="https://userpilot.com/blog/how-to-measure-user-experience/">return 100 times more</a>. This is a huge return. Better UX means users finish tasks faster. This is called &#8216;Time on task&#8217;. For example, setting up work gets quicker. A clear app means fewer confusing steps. You want users to learn your app fast. See <a href="https://ux.stackexchange.com/questions/107865/how-to-evaluate-a-console-application">how often they check help guides</a>. Users should need little help quickly. This means your app is easy to use.</p><h3>Making Work Better and Easier</h3><p>A better console UI makes work much faster. Developers write more code. They write better code. They write it faster. They have fewer problems. You remove things that slow them down. This lets them focus on key work. A good developer works well. They fix problems with few stops. <a href="https://www.codeant.ai/blog/best-tools-to-improve-developer-productivity">A good tool is like a &#8216;power-up&#8217;</a>. It helps developers go faster. They work together better. They make better code. This means better work. <a href="https://www.zigpoll.com/blog/15-proven-strategies-to-enhance-your-user-interface-for-efficient-developer-collaboration-and-rapid-debugging">Debugging is faster</a>. Switching tasks is less. Fixing issues is quicker. Seeing what&#8217;s happening gets better. Thinking hard is less. Code checks speed up. Response times are faster. Automated tasks run smoother. Learning alone is quicker. Being responsible improves. Understanding is better. Less frustration happens. Teamwork gets better.</p><h3>When a GUI is Too Much</h3><p>Sometimes, a full GUI is just too much. For many jobs, a good console app works better. You might need to run scripts automatically. You might set up servers. Or you might do quick data work. A console app is fast and direct. It avoids a complex GUI. This makes it great for developers. It is also good for system managers. They often like the command line. It gives them power and flexibility.</p><h2>Key Tools for .NET Console UI Development</h2><div id="youtube2-rXJ2p2Am_0I" class="youtube-wrap" data-attrs="{&quot;videoId&quot;:&quot;rXJ2p2Am_0I&quot;,&quot;startTime&quot;:null,&quot;endTime&quot;:null}" data-component-name="Youtube2ToDOM"><div class="youtube-inner"><iframe src="https://www.youtube-nocookie.com/embed/rXJ2p2Am_0I?rel=0&amp;autoplay=0&amp;showinfo=0&amp;enablejsapi=0" frameborder="0" loading="lazy" gesture="media" allow="autoplay; fullscreen" allowautoplay="true" allowfullscreen="true" width="728" height="409"></iframe></div></div><p>You want to make great console UIs. You need the right tools. .NET has strong choices. Let&#8217;s look at them.</p><h3>Building Interactive C# Console Apps with Razor.Core</h3><p>Imagine making a lively C# console app. It would be as easy as making a website. Razor.Core makes this real. This new library brings Razor syntax. It comes to your console apps. Think of Blazor. But it is for your terminal. You write Razor files. An example is <code>Counter.razor</code>. These files mix HTML-like code. They also use C# code. This way makes state management simple. It makes building interactive parts easy.</p><p>For example, you can use a <code>Columns</code> component. It helps arrange your layout. You can use a <code>p</code> tag. This is for paragraphs. You can even make interactive buttons. A <code>TextButton</code> component can start C# methods. An example is <code>IncrementCount()</code>. This lets you build animated dashboards. Or you can make complex database managers. You can create UIs that update live. This is a big step. It is beyond old, manual console UI updates. Razor.Core gives a strong and easy way. It helps make engaging .NET console experiences. This method truly lifts the power. It helps a C# console app.</p><h3>Spectre.Console: The Versatile UI Toolkit</h3><p>Spectre.Console is another good choice. It makes your console apps better. This useful toolkit has many features. It helps you make good-looking interfaces. They are also interactive. You can build complex questions. These include picking one item. Or picking many items. You can also ask for secrets. Spectre.Console also has questions with checks.</p><p>The library has good ways to show things. You get <a href="https://anthonysimmon.com/beautiful-interactive-console-apps-with-system-commandline-and-spectre-console/">24-bit colors. You can style text. You can make it bold. You can make it italic</a>. Other styles are there too. It has different widgets. These include tables and trees. It also has ASCII images. You can show progress bars. You can also show status controls. Spectre.Console checks terminal features. It changes what it shows. This makes it look best. This makes sure your UI looks good. It works on different terminals.</p><p>Spectre.Console works with tables. It works with grids. It works with panels. It uses a Rich-like language. This makes formatting easy. You can use common SRG settings. These are for text styling. They include bold and dim. Also italic and underline. Strikethrough and blinking text are there. It works with <a href="https://github.com/spectreconsole/spectre.console">3/4/8/24-bit colors</a>. This is in the terminal. It can use fewer colors if needed. This makes it work everywhere. You can also use live displays. These are for progress and status. They are also for tasks that run over time. <a href="https://spectreconsole.net/">The library has many widgets</a>:</p><ul><li><p>Align</p></li><li><p>Columns</p></li><li><p>Panel</p></li><li><p>Table</p></li><li><p>Tree</p></li><li><p>Bar Chart</p></li><li><p>Rows</p></li><li><p>Breakdown Chart</p></li><li><p>Rule</p></li><li><p>Calendar</p></li><li><p>Grid</p></li><li><p>Layout</p></li><li><p>Figlet</p></li><li><p>Padder</p></li><li><p>Canvas</p></li><li><p>Canvas Image</p></li><li><p>JSON</p></li><li><p>Text Path</p></li></ul><p>Spectre.Console.Cli also helps. It helps with command-line app making. It has <code>CommandApp</code>. It also has tools for making commands. And for testing them.</p><h3>Terminal.Gui: TUI Applications with Controls</h3><p>Some people like old-style Text User Interfaces (TUI). For them, Terminal.Gui is a good option. This library lets you build full TUI apps. It has many controls. You can make windows. You can make dialogs. You can make menus. You can make input boxes. It gives you a GUI-like feel. This is right in your terminal. You can make complex designs. You can handle user actions well. Terminal.Gui is a strong system. It helps build interactive console experiences.</p><h3>Other Libraries for Console App Enhancements</h3><p>There are other .NET libraries. They are not just UI toolkits. They make your console apps better. These tools improve how things work. They also improve speed.</p><p>You can use <code>WebSocketStream</code>. This new tool makes WebSockets simple. It uses a <code>Stream</code>-based idea. This means less extra code. It handles buffering. It handles framing. It handles putting messages back together. <code>JsonSerializer.Deserialize</code> now works directly. It works with <code>PipeReader</code>. This means you don&#8217;t need to change it. You don&#8217;t need to make it a <code>Stream</code>. This makes it much faster. For Windows process control, <code>ProcessStartInfo.CreateNewProcessGroup</code> is helpful. It lets you start processes. They are in their own group. This means child processes can handle signals alone. These are important steps forward. They are for any modern .NET app.</p><p><code>TensorPrimitives</code> now has general options. These are for different types. It goes beyond <code>float</code> values. This is for things like <code>CosineSimilarity&lt;T&gt;</code>. New threading tools include <code>Task.WhenEach</code>. This goes through tasks. It does this as they finish. <code>CreateUnboundedPrioritized</code> makes channels. These order items by how important they are. <code>Interlocked.CompareExchange</code> now works. It works with more basic types. These include <code>byte</code> and <code>sbyte</code>. Also <code>short</code> and <code>ushort</code>. <code>bool</code>, <code>char</code>, and <code>enum</code> types are included. It also removed limits. These were for reference types. Lastly, <code>Base64Url</code> is new. It helps encode and decode data fast. This is for URL-safe Base64 format. It fixes problems with &#8216;+&#8217; and &#8216;/&#8217; signs. These are in standard Base64. These new things in .NET core give a strong base. They help you build fast console apps. They also help build apps with many features.</p><h2>Core Techniques for Visual Appeal</h2><p>You can make your console apps look good. You use special ways to do this. These ways help users see and use your app better.</p><h3>Mastering Colors and Text Formatting</h3><p>Colors and text make your console output clear. They show what is important. ANSI escape sequences control text. They start with an escape character. Then they have a bracket. They tell the terminal how to show text. For example, <code>\x1b[31m</code> makes text red. <code>\x1b[0m</code> removes all styling.</p><div class="captioned-image-container"><figure><a class="image-link image2" target="_blank" href="https://substackcdn.com/image/fetch/$s_!Dbhk!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa3467428-d9bb-45dd-b62a-a46538d0118f_682x190.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!Dbhk!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa3467428-d9bb-45dd-b62a-a46538d0118f_682x190.png 424w, https://substackcdn.com/image/fetch/$s_!Dbhk!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa3467428-d9bb-45dd-b62a-a46538d0118f_682x190.png 848w, https://substackcdn.com/image/fetch/$s_!Dbhk!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa3467428-d9bb-45dd-b62a-a46538d0118f_682x190.png 1272w, https://substackcdn.com/image/fetch/$s_!Dbhk!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa3467428-d9bb-45dd-b62a-a46538d0118f_682x190.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!Dbhk!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa3467428-d9bb-45dd-b62a-a46538d0118f_682x190.png" width="682" height="190" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/a3467428-d9bb-45dd-b62a-a46538d0118f_682x190.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:190,&quot;width&quot;:682,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:28923,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/png&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:&quot;https://m365.show/i/177101622?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa3467428-d9bb-45dd-b62a-a46538d0118f_682x190.png&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!Dbhk!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa3467428-d9bb-45dd-b62a-a46538d0118f_682x190.png 424w, https://substackcdn.com/image/fetch/$s_!Dbhk!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa3467428-d9bb-45dd-b62a-a46538d0118f_682x190.png 848w, https://substackcdn.com/image/fetch/$s_!Dbhk!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa3467428-d9bb-45dd-b62a-a46538d0118f_682x190.png 1272w, https://substackcdn.com/image/fetch/$s_!Dbhk!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa3467428-d9bb-45dd-b62a-a46538d0118f_682x190.png 1456w" sizes="100vw" loading="lazy"></picture><div></div></div></a></figure></div><p>You can make text red (31). You can make it green (32). You can also change background colors. Use code 1 for bold text. Code 7 makes text inverse. These tools help make your .net console apps look rich.</p><h3>Using Emojis and Unicode Characters</h3><p>Emojis and Unicode characters add visual hints. They make your console app friendlier. You can use a checkmark (&#9989;) for success. An &#8216;X&#8217; (&#10060;) can show failure. Be consistent when you use these. Always use uniform Unicode escaping. This is for characters not easy to type. Do not use too much escaping. Use clear names for variables. Test your app with different character sets. This makes sure everything shows right. Write down any Unicode characters you use. This helps other developers.</p><h3>Structuring Layouts with Tables and Panels</h3><p>You can organize complex info. Use tables and panels. Tables are good for showing data. Think of comparisons. Or financial numbers. Panels split your screen. They make different areas. This is good for dashboards. Or IDEs. You can show summary info. Put important info at the top-left. This is where users look first. Keep your card layouts the same. Titles and labels are always in the same spot. This makes it less messy. It helps users find info fast. This is in your console UI.</p><h3>Dynamic Content and Real-time Updates</h3><p>Dynamic content makes your console app interactive. It shows changes as they happen. You can show progress bars. This is for long tasks. Spinners show your app is working. Real-time updates mean data changes fast. This keeps users informed. It makes your app feel quick. You can show live system metrics. Or ongoing processes. This makes using your console tool more fun.</p><h2>Adding Interactivity to Your Console App</h2><p>Your console apps can do more. They can be interactive. Users can work with your <code>c# console app</code>.</p><h3>User Input: Prompts, Selections, and Forms</h3><p>Guide users with tasks. Ask for info with prompts. Offer choices with selections. Users pick from a list. Build forms to get data. This makes your <code>console</code> app easy. Users will give input easily.</p><h3>Progress Indicators and Spinners</h3><p>Long tasks make users wait. Show them work is happening. Console spinners are key. They give visual clues. Users won&#8217;t see a still screen. This stops anger. Spinners keep users updated. They make apps better. Adding them is easy. Many spinner types exist. Use <code>&#8592;&#8598;&#8593;&#8599;&#8594;&#8600;&#8595;&#8601;</code> or <code>&#9603;&#9604;&#9605;&#9606;&#9607;&#9608;&#9607;&#9606;&#9605;&#9604;&#9603;</code>. Try <code>&#9712;&#9715;&#9714;&#9713;</code> or <code>|/-\</code>. Even <code>abcdefghijklmnopqrstuvwxyz</code> works. These clues show your app is busy.</p><h3>Handling Keyboard and Mouse Events</h3><p>Your console app can do more. It can react to keys. This means shortcuts. It can also react to mouse clicks. Users can click things. This makes new ways to interact. You can make good navigation. You can start actions right away.</p><h3>Creating Responsive Console Experiences</h3><p>Terminals have different sizes. Your console UI should change. Make experiences that adapt. Check terminal size first. Do this before showing content. This stops text from breaking. Add a resize handler. It sees when size changes. Make UIs for many sizes. Don&#8217;t fix them to one. Set a smallest size. Tell users if it&#8217;s too small. JLine helps find size changes. It uses <code>getSize()</code>. It also tracks resize events. This makes your <code>console</code> app look good anywhere.</p><h2>Practical Examples: Building Advanced Console Apps</h2><p>You can build amazing things. Use the right tools. This section shows what is possible. You will see how to make advanced <strong>console applications</strong>. These examples use <strong>Razor.Core</strong>. They also use other libraries.</p><h3>Interactive Menu Systems</h3><p>You can make your <strong>console app</strong> easy to use. Build interactive menu systems. Users can move through your application. They use simple keyboard inputs. Imagine a main menu. It has options like &#8220;Start New Task.&#8221; Or &#8220;View Reports.&#8221; Or &#8220;Settings.&#8221; <strong>Razor.Core</strong> makes this simple. You define menu items. They are like components. You link them to actions. When a user picks an option, your app acts fast. This makes a smooth user experience. You go beyond basic text prompts. You give users a dynamic way to interact.</p><h3>Real-time Dashboards and Monitoring Tools</h3><p>You can create dynamic dashboards. These dashboards show data right away. Think about checking system performance. You can show CPU usage. Also memory and network traffic. <strong>Razor.Core</strong> is great for this. It lets you build animated UIs. You can update data live. Imagine a dashboard. Numbers change all the time. It shows your server&#8217;s health. You can add simple charts. Or progress bars. <strong>Spectre.Console</strong> helps with visuals. It gives tables and panels. These tools help organize complex info. You get a powerful monitoring tool. It is right in your terminal.</p><h3>Console-based Data Management Interfaces</h3><p>You can build strong data management tools. These tools run in your <strong>console</strong>. Imagine an interface for a database. You can see records. You can add new entries. Or delete old ones. You can even use pagination. This lets you look through big datasets. The video example showed a SQLite manager. It let users look at records. It also let them add and delete data. <strong>Razor.Core</strong>&#8216;s component model makes this work. You define UI parts for showing data. You also define parts for user input. This gives you a full data management app.</p><h3>Setting Up Your Console App Project</h3><p>You need to set up your project first. This is the start for any <strong>.net console app</strong>. You have many ways to make a new project.</p><p>If you use Visual Studio, do these steps:</p><ol><li><p>Name your project. Do this in the &#8216;Configure your new project&#8217; box. For example, call it &#8216;HelloWorld&#8217;.</p></li><li><p><a href="https://learn.microsoft.com/en-us/dotnet/core/tutorials/with-visual-studio">Pick &#8216;.NET 8&#8217;</a>. This is the target framework. Do this in the &#8216;Additional information&#8217; box.</p></li><li><p>Choose &#8216;Do not use top-level statements&#8217;. This includes the <code>Program</code> class. It also includes the <code>Main</code> method.</p></li><li><p>Click &#8216;Create&#8217;. This makes the project. It has a basic &#8216;Hello, World!&#8217; app. It is in <code>Program.cs</code>.</p></li></ol><p>The <code>Program.cs</code> file will look like this:</p><pre><code><code>namespace HelloWorld;

internal class Program
{
    static void Main(string[] args)
    {
        Console.WriteLine(&#8221;Hello, World!&#8221;);
    }
}
</code></code></pre><p>If you like Visual Studio Code, start here:</p><ol><li><p>Open Visual Studio Code.</p></li><li><p>Go to the Explorer view. Pick &#8216;Create .NET Project&#8217;. You can also use Ctrl+Shift+P. Find &#8216;.NET: New Project&#8217;.</p></li><li><p>Choose the &#8216;Console App&#8217; template.</p></li><li><p>Pick a spot for your new project.</p></li><li><p>Name the project &#8216;HelloWorld&#8217;.</p></li><li><p>Pick &#8216;Show all template options&#8217;. <a href="https://learn.microsoft.com/en-us/dotnet/core/tutorials/with-visual-studio-code">Set &#8216;Do not use top-level statements&#8217; to &#8216;true&#8217;</a>.</p></li><li><p>Click &#8216;Create Project&#8217;.</p></li><li><p>Say yes to trusting the file authors. Do this if asked.</p></li><li><p>Open <code>Program.cs</code>. See the app made by the template.</p></li></ol><p>You can also use the command line. This is a fast way to start:</p><ol><li><p>Make a new <strong>console application</strong>. Name it <code>MyConsoleApp</code>. Use the command: <code>dotnet new console -n MyConsoleApp</code>.</p></li><li><p>Go into the new project folder: <code>cd MyConsoleApp</code>.</p></li></ol><p>A basic <strong>.net console app</strong> has two main files:</p><ul><li><p><strong>Program.cs</strong>: This file is where the app starts. It usually has a &#8216;Hello, World!&#8217; example.</p></li><li><p><strong>MyConsoleApp.csproj</strong>: This is the project file. It holds settings. It manages what your app needs.</p></li></ul><p>Sometimes, you need special settings. For example, if you use Windows Forms parts in your <strong>console app</strong>:</p><ol><li><p>Right-click on your project. Do this in Solution Explorer. Pick &#8216;Properties&#8217;.</p></li><li><p>Under &#8216;Build&#8217; in &#8216;General&#8217;, find &#8216;Platform target&#8217;. <a href="https://www.atalasoft.com/kb2/KB/50425/INFO-NET-6-Console-App-Whitepaper-Getting-Started-with-NET-6">Change it from &#8216;AnyCPU&#8217; to &#8216;x64&#8217;</a>. Save all changes.</p></li><li><p>Right-click on the project. Pick &#8216;Edit Project File&#8217;.</p></li><li><p>Change the <code>&lt;TargetFramework&gt;</code> from <code>net8.0</code> to <code>net8.0-windows</code>.</p></li><li><p>Add <code>&lt;UseWindowsForms&gt;true&lt;/UseWindowsForms&gt;</code>. Put it right below <code>TargetFramework</code>. This is key for Windows Forms parts.</p></li><li><p>The final project file should look like this:</p></li></ol><pre><code><code>&lt;Project Sdk=&#8221;Microsoft.NET.Sdk&#8221;&gt;

&lt;PropertyGroup&gt;
&lt;OutputType&gt;Exe&lt;/OutputType&gt;
&lt;TargetFramework&gt;net8.0-windows&lt;/TargetFramework&gt;
&lt;UseWindowsForms&gt;true&lt;/UseWindowsForms&gt;
&lt;ImplicitUsings&gt;enable&lt;/ImplicitUsings&gt;
&lt;Nullable&gt;enable&lt;/Nullable&gt;
&lt;PlatformTarget&gt;x64&lt;/PlatformTarget&gt;
&lt;/PropertyGroup&gt;

&lt;/Project&gt;
</code></code></pre><ol><li><p>Save and close the project file.</p></li></ol><p>You now see how powerful new .NET console UI tools are. Razor.Core helps make cool interactive apps. Making console apps look better helps users. It also makes work faster. Your console app will be special. Try these tools. Make your .NET console apps better. Use all their power. Build the best console apps. Make your .NET console projects great. Create the best console apps.</p><h2>FAQ</h2><h3>What is Razor.Core and how does it compare to Blazor?</h3><p>Razor.Core uses Razor syntax. It works for console apps. You make UI parts. You use Razor files. This is like Blazor. Blazor is for web apps. It helps build interactive console UIs. It also makes animated ones. It does this easily.</p><h3>Can I use Spectre.Console with Razor.Core?</h3><p>Yes, you can use Spectre.Console. You can use it with Razor.Core. Spectre.Console has strong styling. It has rich parts. Razor.Core manages the interactive UI. Together, they make console apps. These apps look great. They work very well.</p><h3>Why should I choose a console UI over a full GUI?</h3><p>A console UI is often better. It is good for scripts. It is good for automation. It is also good for developer tools. You do not need a full graphical interface. This makes your app faster. It is also more direct.</p><h3>Are these tools compatible with all .NET versions?</h3><p>These tools work with new .NET versions. For example, they work with .NET 8. Always check the library&#8217;s guide. This makes sure it works. It works with your project&#8217;s framework.</p><p></p><p></p>]]></content:encoded></item><item><title><![CDATA[Developer perspectives: building AI apps with Microsoft tools]]></title><description><![CDATA[AI is transforming numerous industries, leading to a surge in demand for AI applications.]]></description><link>https://newsletter.m365.show/p/developer-perspectives-building-ai</link><guid isPermaLink="false">https://newsletter.m365.show/p/developer-perspectives-building-ai</guid><dc:creator><![CDATA[Mirko Peters - M365 Specialist]]></dc:creator><pubDate>Tue, 21 Oct 2025 23:28:23 GMT</pubDate><enclosure url="https://api.substack.com/feed/podcast/176714207/d4383f95d42cadd4a1fe91ee3536b360.mp3" length="0" type="audio/mpeg"/><content:encoded><![CDATA[<p>AI is transforming numerous industries, leading to a surge in demand for AI applications. This trend is evident across various sectors. <a href="https://market.us/report/ai-app-development-market/">The AI app market, valued at $40.3 billion in 2024, is projected to reach $221.9 billion by 2034, demonstrating a significant compound annual growth rate of 18.60%</a>. Microsoft offers a comprehensive suite of developer tools designed to empower all developers in creating innovative AI solutions. Microsoft is committed to helping you effectively leverage these tools. This Microsoft guide is specifically designed to teach developers how to build robust AI apps. You will learn to build AI apps easily using Microsoft&#8217;s powerful developer tools.</p><h2>Key Takeaways</h2><ul><li><p>Microsoft has many AI tools. These include Azure AI Services. They also include Azure Machine Learning. Cognitive Services are also available. They help people make smart apps.</p></li><li><p>You can make AI apps with .NET. You can also use simple tools. These are like Microsoft Power Platform. This makes AI solutions quicker and simpler.</p></li><li><p>MLOps helps run AI projects. Azure DevOps makes MLOps simpler. It helps do tasks automatically. This goes from data to using the AI model.</p></li><li><p>You can make AI that talks. Microsoft tools help make smart robots. These robots understand words. They talk like real people.</p></li><li><p>Being fair with AI is key. Microsoft gives tools and rules. These help make sure AI is fair. They also protect private information. They make things clear.</p></li></ul><h2>Microsoft AI Tools</h2><p>Microsoft has many AI tools. They help you work better. They also help you find information. You can build strong AI tools with this platform.</p><h3>Azure AI Services</h3><p>Azure AI Services are AI tools in the cloud. They help you make smart apps. You do not need to be an AI expert. You can add AI to your phone and web apps. For example, <a href="https://learn.microsoft.com/en-us/azure/ai-services/what-are-ai-services">Azure AI Search finds things in your apps. Azure OpenAI does many language tasks. Bot Service helps you make bots. It connects them to many places. Content Safety finds bad content. Custom Vision changes image recognition for your needs. Document Intelligence makes documents smart. Face service finds people and feelings in pictures. Immersive Reader helps people read text.</a></p><p>You can use Azure AI Services for business apps. You can add AI to your work. This makes tasks easier. You get ideas faster. You can give special suggestions. You can make things better. Look at supply chain data. Find problems. Make customer experiences better. Give them special suggestions. Tasks like data entry can be automatic. Report making is easier. Smart search gives good answers. This changes how you use information. It mixes search with AI. It gives answers based on live data. This helps customer support. It finds important ideas from messy data. It also makes long documents short.</p><p>Think about a global team. They can use Azure to find knowledge. They can find important information fast. <a href="https://spr.com/riding-the-ai-wave-with-azure-integrating-ai-into-enterprise-applications/">They use natural language. This means storing files in Azure Blob Storage. Then, they index files with Azure AI Search. This is for smart search. Azure OpenAI makes short summaries of files. You can also ask Azure SQL Database questions. This makes one easy way to find complex information.</a></p><h3>Azure Machine Learning</h3><p>Azure Machine Learning is a cloud service. It helps with machine learning. It helps you build, train, and use machine learning models. <a href="https://learn.microsoft.com/en-us/azure/machine-learning/overview-what-is-azure-machine-learning">You can work with your team. Share notebooks, computers, and data. You can make fair models. You can explain them. You can check them. This helps you follow rules. You can use ML models fast. You can use them on a large scale. You can manage them well with MLOps. Azure Machine Learning lets you run machine learning anywhere. It has built-in safety. You can work with Large Language Models (LLMs). You can also use Generative AI. This has a model catalog. It has prompt flow. You can train models. Use tools like PyTorch and TensorFlow. It has automatic ML. It has hyperparameter optimization. You can use models for quick scoring. You can use them for batch scoring. Use managed endpoints.</a></p><p>Azure Machine Learning helps with MLOps. This is for people, process, and tech. <a href="https://microsoft.github.io/azureml-ops-accelerator/4-Migrate/2-AMLBestPractices.html">For people, you set up Azure Machine Learning Workspaces. Do this for each project. Use expert knowledge. Give roles with Azure RBAC. For process, use code templates. Use Azure Machine Learning pipelines. Use version control. Jobs from Git folders track info. You version inputs and outputs. Use datasets, model management, and environment management. Keep a history of runs. This is for comparing and working together. Check work quality all the time.</a></p><p>You can use Azure Machine Learning. Use the Azure Machine Learning studio. Use Python SDK (v2). Use Azure CLI (v2). Use Azure Resource Manager REST APIs. The studio has notebooks for code. It has pictures for run data. It has a designer for model training without code. It also has automatic machine learning. It has data labeling tools.</p><h3>Cognitive Services</h3><p>Azure Cognitive Services are AI tools. They are also APIs. They help you build smart apps. These tools include <a href="https://www.linkedin.com/pulse/what-azure-ai-services-atech-support-ltd-aisef">Vision. It is for pictures and videos. Speech is for talking to text. It is also for text to talking. Language is for text study. It is for understanding language. Decision tools help make choices. Search tools use Azure Search. They use Bing APIs for better search.</a></p><p><a href="https://learn.microsoft.com/en-us/rest/api/cognitiveservices-textanalytics/">The Text Analytics API is part of Azure Cognitive Services. It has Natural Language Processing (NLP) features. This includes feeling analysis. It also includes opinion mining. It finds key phrases. It finds languages. It finds named things.</a> It works in many languages. For example, <a href="https://doc.dataiku.com/dss/latest/nlp/azure-apis.html">Language Detection works in 108 languages. Feeling Analysis works in 13 languages. Named Entities Extraction works in 23 languages. Key phrase extraction works in 16 languages.</a></p><p><a href="https://www.linkedin.com/pulse/natural-language-processing-nlp-services-aws-azure-dr-rabi-prasad-slv8c">You can use these tools for general NLP. Text Analytics handles feeling analysis. It also handles key phrase extraction. Language Understanding Intelligence Service (LUIS) helps you make language models. Azure Cognitive Services for Language has models already built. They are for text translation. They are also for answering questions. Special NLP tools include Custom Question Answering. There is also Text Analytics for health. There is Content Moderator.</a></p><h3>Bot Framework and Azure Bot Service</h3><p>Bot Framework and Azure Bot Service help you build smart bots. These bots can talk to users. They use many ways to talk. Bot Framework SDK has tools. They are for making good bots. Azure Bot Service works with Microsoft Teams. It also works with Slack. This helps make and use bots easily.</p><p>Bot Framework works with Azure Bot Service. This is for using bots. First, make an Azure Bot Service. Then, get the bot&#8217;s ID and password. Build the bot&#8217;s logic. Do this in a web app. Next, set up a message spot for the bot. Finally, use the web app. It has the bot logic. The bot&#8217;s web app usually has a spot at <code>/api/messages</code>. This is for new messages. You set this spot in the Azure Bot. It is in the message endpoint setting. When you use the bot, set up the <code>Appsettings.json</code> file. Use the bot&#8217;s identity details.</p><pre><code><code>{
&#8220;MicrosoftAppType&#8221;: &#8220;UserAssignedMSI&#8221;,
&#8220;MicrosoftAppId&#8221;: &#8220;&lt;Client ID of the user-assigned managed identity&gt;&#8221;,
&#8220;MicrosoftAppPassword&#8221;: &#8220;&#8221;, // Not applicable. Leave this blank for a user-assigned managed identity bot.
&#8220;MicrosoftAppTenantId&#8221;: &#8220;&lt;The tenant ID of the user-assigned managed identity&gt;&#8221;
}
</code></code></pre><p>Making bots usually has steps. You check bot design rules. You find what the bot needs. This includes talking or understanding language. <a href="https://github.com/microsoft/botbuilder-tools">You can make fake talks. Use Chatdown to test how users talk to bots. As you make the bot, add AI tools. Use LUIS.ai for language. Use QnAMaker.ai for questions. LUDown helps start language understanding. Then, LUIS CLI and QnAMaker CLI tools make LUIS.ai models. They make QnAMaker knowledge bases. Other tools like MSBot manage connected tools. Dispatch builds language models. This is to switch between parts. LUISGen makes C#/Typescript classes automatically. This is for LUIS intents and entities.</a> These AI tools work together. They work through the whole process. Microsoft gives these tools. They help you make strong solutions.</p><h2>Developing AI Applications</h2><p>You can build strong AI apps. Follow practical steps. Use technical patterns. Look at real examples. Building AI apps in .NET is easier now. You can run <strong>large language models</strong> locally. Use <strong>tools</strong> like Ollama. Then, use these models from your .NET apps.</p><h3>Service Selection</h3><p>Picking the right AI services is key. It is the first step for your new app. Start by looking at your company. See what you are ready for. Find any missing parts. This helps you know what you need. Next, check your planned AI solution. Match it with a standard plan. This shows you any missing tech parts.</p><p>Then, look into vendors and products. Check what is on the market. Read independent reports. Find vendor features that fit your needs. Prepare questions for vendors. This helps you check your research. It also helps you learn more. Finally, <a href="https://www.infotech.com/research/ss/build-your-ai-solution-selection-criteria">write down how you will choose</a>. This makes clear rules for picking services. It is the base for any requests for proposals.</p><p>When you pick services, focus on important uses. Look for solutions with special features. These can make uses better. Do not just pick the &#8220;best&#8221; models. If you look at current vendors, find what they lack. Compare them to others. Know your needs well. Check vendors carefully. This helps you make smart choices. The market changes fast. Also, confirm how vendors will help. They should support responsible AI. Your company is in charge of being accountable.</p><h3>AI Integration</h3><p>Adding AI models to your software needs planning. You must <a href="https://www.mantech.com/blog/best-practices-for-architecting-ai-systems/">build a strong base</a>. This is for good AI systems. It makes sure they last and grow. You also need to think about growth. This means keeping things fast and good. This is true as your needs grow. Deployment plans need careful work. This is extra true when you link to older systems.</p><p>You can use agile methods. This gives you flexibility. It helps you make progress step by step. It also helps teams work together. Break AI projects into small parts. Build and test them one by one. This makes things better all the time. Bring different teams together. Include data scientists. Include software engineers. Add UI/UX experts. Add domain specialists. This gives you a full view. It covers many ideas.</p><p>When you add AI, you might use customer things. These are in their own system. You do this when data is private. Or it needs to follow rules. You also do it if you already spent money on systems. This helps keep things running well. Sometimes, you might move things. Move them to other systems. This happens when you need more growth. Or want to save money. Or need advanced <strong>tools</strong>. You might also start new. This is for research. Or special needs. Or trying new ideas.</p><p>You need to make data formats the same. Use formats like XML or JSON. Use them across systems. This makes them work with AI. Make APIs or special connectors. These help share data. Especially with older systems. Ones that do not have APIs. Set up ways to check data quality. Do this before you give data to AI models. <a href="https://www.tristatetechnology.com/blog/integrating-ai-into-existing-software-systems/">Make a strong data system</a>. This includes roles and rules. It has steps to keep data good. Change and map data. Make sure old data matches AI needs. This means matching fields. It means making data the same. <a href="https://www.pecan.ai/blog/data-preparation-for-machine-learning/">Clean your data</a>. Remove or fix wrong data. Fix missing or extra data. This makes sure AI analysis is good.</p><h3>Data for AI Models</h3><p>Getting and readying data is key. It trains AI models. <a href="https://tealium.com/blog/data-strategy/a-complete-guide-to-data-collection-for-artifical-intelligence-ai/">Your data must be right. It must be full and steady</a>. This makes model training reliable. It also needs to follow data rules. It needs to follow AI rules. This means using trusted data. It must be approved and checked. Adding context helps. Metadata and labels help. This helps you understand data better. It also makes AI work better. Data must be there. Being able to use it is key. Being available is key. Getting it in real-time is key. This is for timely AI training. It is also for AI to start working.</p><p>You should use ETL <strong>tools</strong>. These get, change, and load data. They do it automatically. Make sure change rules match your model&#8217;s needs. Set up data quality rules. Make standards. Check things automatically. Set up alerts for problems. This helps you fix bad data fast. You can use <strong>machine learning</strong> to get data ready. ML ways can find odd data points. This cleans data. It makes it better. It helps stop unfairness. Make data pipelines. These make the whole data process automatic. This goes from getting data to checking it. Use version control for pipelines. This makes your work repeatable.</p><p><a href="https://www.cloudfactory.com/blog/ai-data-collection">The process starts with finding data</a>. Say what your project needs. Say what data you need. This helps you know what data to get. It is for good AI training. Next, get data. Find the right places. Find ways to get the data you need. Then, get data ready. Clean it. Fix problems. Label it. Check it. This gets it ready for AI. Finally, manage and store your data. Keep collected data safe. Keep processed data safe. Make it easy to get. Make it easy to check. Use central storage. Use strong data rules. Use cloud solutions that can grow. Use access control based on roles.</p><h3>MLOps with Azure DevOps</h3><p><a href="https://learn.microsoft.com/en-us/azure/aks/concepts-machine-learning-ops">Azure DevOps helps you manage MLOps</a>. It helps with pipelines for your AI apps. It makes many parts of <strong>machine learning</strong> automatic. This includes getting data. It includes training models. It includes putting them out. It includes watching them. Automation makes fewer mistakes. It makes things faster. It keeps things the same. For example, pipelines can tune models. They can retrain models. They can find when things work worse. They can also check for safety problems.</p><p>Azure DevOps helps with Continuous Integration (CI). This is in MLOps. It helps you make model <strong>code</strong>. It helps check its quality. Do this before you put it out. This includes making test <strong>code</strong> better. It also means checking new data. You can do unit tests. You can do integration tests. Azure Pipelines can help check <strong>code</strong>. It can help with unit testing.</p><p>Azure DevOps also helps with Continuous Delivery (CD). It lets you safely put models out. Put them into use. This means packing models. It means putting them in test places first. It makes sure model parts can move easily. Once models pass checks, you can approve them. Approve them for use.</p><p>Azure Repos in Azure DevOps has source control. It uses Git. This helps you manage changes. Changes to your <strong>code</strong>. Changes to data. Changes to models. Different teams can work together. They can track changes. They can go back to old versions. They can manage different tests. Azure Boards in Azure DevOps helps with agile planning. You can put work into sprints. You can change as needed. You can give small model improvements. This helps you plan projects. It keeps teams working together.</p><p><a href="https://learn.microsoft.com/en-us/azure/well-architected/ai/mlops-genaiops">Azure DevOps makes MLOps pipelines easier</a>. It lets you add to Azure Pipelines. It lets you add to GitHub Actions. This is for <strong>machine learning</strong> models. These <strong>tools</strong> help put out <strong>machine learning</strong> systems. They help put out custom parts. They help put out orchestration <strong>code</strong>. They help put out models. Azure <strong>Machine Learning</strong> pipelines can work with Azure DevOps. Or with GitHub pipelines. This is for full MLOps. For putting things out, both Azure <strong>Machine Learning</strong> pipelines. And Azure Pipelines can put out models. This is for guessing. Azure <strong>Machine Learning</strong> has features. Like setting up nodes. Like OS updates. Like autoscaling. Like watching. And support for blue-green deployments. For other hosting places, like Azure Container Apps. Or Azure App Service. Azure DevOps or GitHub pipelines can handle CI/CD.</p><h3>.NET and Local LLMs</h3><p>Using .NET for <strong>building ai apps</strong> has many good points. It gives one place to build web UIs. It builds APIs. It builds many <strong>applications</strong>. .NET works on Windows. It works on macOS. It works on Linux. It is open-source. It has a strong community. It runs on popular web servers. It runs on cloud platforms. You get strong <strong>tools</strong> for editing. For debugging. For testing. For putting out your <strong>code</strong>.</p><p>.NET gives you one place to develop. You can build, train, and put out <strong>ai</strong> models. Especially with ML.NET. You do this without leaving Visual Studio. <a href="https://programmers.io/blog/ai-and-ml-with-net/">The .NET world and community are growing</a>. You can get top <strong>ai</strong> models. This includes OpenAI, Mistral, Meta, and Cohere. There are special <strong>ai</strong> SDKs and libraries. It works with open-source groups. Like Huggingface. The C# <strong>developer</strong> community is also very strong. <strong>Microsoft</strong> actively builds and keeps the open-source .NET platform. It helps a lot with <strong>ai</strong> projects. This includes guides. It includes demos. It includes beginner videos.</p><p>ML.NET gives one place for <strong>machine learning</strong>. This lets <strong>developers</strong> build, train, and put out models. All in one familiar place. You do not need to switch languages. You do not need to switch frameworks. .NET <strong>applications</strong> link directly with Azure AI services. They use native SDKs. This lets cognitive services work. Custom vision works. Language understanding works. They work smoothly with your <strong>code</strong>. Your teams can use familiar .NET <strong>tools</strong>. They can use familiar patterns. This lets ASP.NET teams add <strong>ai</strong> features. They do not need all new skills.</p><p>AI <strong>applications</strong> built with .NET get strong safety features. This includes built-in ways to check who you are. Ways to say what you can do. And ways to follow rules. These meet company safety rules. .NET works well when big. It manages memory well. It handles tasks well. It has optimization <strong>tools</strong>. These are great for complex <strong>machine learning</strong> tasks. It works well with Azure services. This gives a smooth path. From building to using <strong>ai applications</strong>.</p><p>You can also run <strong>large language models</strong> (LLMs) locally. This is a great way for a <strong>developer</strong> to try things. To build <strong>ai dev tools</strong>. Without needing cloud services. <strong>Tools</strong> like Ollama make this happen. Ollama lets you download LLMs. You can run them on your computer. Then, you can use these local LLMs. Use them from your .NET <strong>applications</strong>. You send requests to Ollama&#8217;s local API. This lets your .NET <strong>code</strong> talk to the LLM. This way gives you more control. Control over data privacy. It makes things faster. It also helps you save money. This is when <strong>building ai apps</strong>.</p><h2>Building AI Apps with Low-Code</h2><p>You can build strong AI apps fast. You do not need much coding skill. <strong>Microsoft</strong> Power Platform helps you <a href="https://www.microsoft.com/en-us/power-platform">make apps faster. It makes work automatic. It cuts down on repeated tasks</a>. This <strong>developer platform</strong> uses AI <strong>tools</strong>. They use low-<strong>code</strong>. This helps you create new things faster.</p><h3>Power Platform for AI</h3><p>Power Platform&#8217;s AI features make app building faster. They make workflows automatic. They help you see data. This means fewer repeated tasks. You can make smart chat systems. These make talking with staff and customers better. They also make business tasks better. <a href="https://www.microsoft.com/en-us/power-platform/blog/2025/04/14/identify-your-readiness-for-ai-first-development-with-agents-and-microsoft-power-platform/">The platform makes security better. It makes rules and operations better</a>. Its managed features help you grow these tasks well. Power Platform and <strong>ai</strong> agents help build AI first. It adds AI business ideas. It makes <strong>code</strong> better. <strong>Microsoft</strong> Copilot Studio helps you add generative <strong>ai</strong>. This is for low-<strong>code</strong> places. You can set up ways to sort data. You can secure it. You can show it. This keeps data right and follows rules. Features like data loss prevention (DLP) help. The platform also helps manage risks automatically. This includes checking all the time. It also gives alerts right away. IT leaders can use Power Platform. They can try out <strong>ai</strong> ideas. This helps things get better. It helps all developers.</p><h3>Power Apps and Dataverse</h3><p>Power Apps and Dataverse make <strong>building ai apps</strong> much faster. <a href="https://windowsforum.com/threads/revolutionizing-enterprise-app-development-with-ai-driven-power-apps.374354/">You can say what your app needs. You can type it. You can upload drawings. Or you can pick ideas</a>. You can say which Dataverse tables to use. You can say which entities or links to use. This quickly adds your business data. <strong>Ai</strong> agents then make app pages. They often use React. You can change the design by talking to it. You can change the logic. Or you can change it more with <strong>code</strong>. You can work with Copilot in Power Apps. This helps build apps faster. It helps you make changes. It helps add automatic tasks. It helps write <strong>code</strong>. It gives advice. <strong>Ai</strong> can quickly make working apps. It can make data from drawings. It can make it from data plans. It can make it from Figma files. You use ready-made designs. You drag and drop features. You use special parts. This makes building easy. It lets you use apps fast. <strong>Microsoft</strong> Dataverse is a built-in data platform. It handles business rules. It handles security. It handles rules. It brings data together.</p><h3>AI Agents and Automation</h3><p><strong>Ai</strong> agents are smart systems. They can think. They can learn. They can act with little human help. They handle hard, many-step tasks. They change to new situations. These agents remember past talks. They make choices. They finish whole tasks. Not just one thing. They also get better over time. You can use <strong>ai</strong> chatbots. They give help 24/7. They use <strong>Microsoft</strong> Power Virtual Agents. They answer common questions. They guide users. You can make tasks like expense reports easier. Use <strong>Microsoft</strong> Power Automate. This sends approval requests automatically. You can watch important numbers. Use Power BI and Power Automate. This includes how much stuff you have. Automatic alerts tell you about problems. You can get customer ideas. Use Power Apps. You can check them with Power BI. This finds ways to make things better. Manage sales leads. Track deals. Use Power Apps and Power BI. Make new employee tasks automatic. Use Power Automate and Power Apps. This puts tasks together. It tracks progress. You can make one system for tickets. It can also send hard problems to others. Power Apps and Power Virtual Agents handle common issues. They send hard problems to the right people fast. These <strong>tools</strong> help you make many business tasks automatic.</p><h2>Conversational AI</h2><p>You can build smart systems. They talk like people. This is called <strong>conversational</strong> AI. These systems help users. They get information. They finish tasks easily. Microsoft has many <strong>tools</strong>. They are for <strong>conversational ai app development</strong>.</p><h3>Intelligent Bot Creation</h3><p>Making smart bots takes steps. <a href="https://learn.microsoft.com/en-us/microsoftteams/platform/toolkit/build-a-basic-ai-chatbot-in-teams">You can start in Visual Studio Code</a>. First, open Visual Studio Code. Then, pick the <a href="https://www.linkedin.com/newsletters/m365-digital-workplace-daily-7340260578583592961/">Microsoft 365</a> Agents Toolkit Activity Bar. Next, choose &#8216;Create a New Agent/App&#8217;. Select &#8216;Custom Engine Agent&#8217;. Then, pick &#8216;Basic Custom Engine Agent&#8217;. Choose &#8216;Azure OpenAI&#8217;. Type in your Azure OpenAI Key. Type your Endpoint. Type your Deployment Name. Select &#8216;JavaScript&#8217;. You can use the &#8216;Default folder&#8217;. Or pick a different spot. Type an application name. Update the <code>.env.playground.user</code> file. Use your secret keys. Use your deployment name. Finally, fix your app. Press F5. Or pick &#8216;Run and Debug&#8217;. <a href="https://visualpathblogs.com/azure-ai-102/implement-conversational-ai-using-azure-bot-services/">You can also add Language Understanding (LUIS). Make a LUIS app. Define intents. Train it. Publish the model.</a></p><h3>Language Understanding</h3><p>Language understanding is very important. It is for <strong>conversational</strong> AI. Natural Language Understanding (NLU) helps chatbots. It helps them understand words. It also helps them understand what users want. It helps them understand the situation. This deep understanding makes talks personal. It makes them work well. <strong>Conversational</strong> AI systems use Natural Language Processing (NLP). They use <strong>machine learning</strong>. This helps them understand human language. This means looking at what the user types. It looks for what they mean. It looks at the situation. It looks at feelings. The <strong>ai</strong> learns from past talks. It gets better over time. This makes answers more correct. It makes them more personal. <a href="https://www.ema.co/additional-blogs/addition-blogs/understanding-conversational-ai-examples-and-how-it-works">NLP helps find the meaning. It is behind what users type. This lets the system give good answers.</a></p><h3>Voice and Speech Integration</h3><p>Adding voice to your <strong>conversational</strong> AI needs thought. Voice technology needs experts. Experts in <strong>machine learning</strong>. Experts in speech recognition. Experts in computer vision. It also needs more computer power. Voice recognition is not perfect yet. Especially in loud places. Data safety is a big worry. You need strong protection. This protects voice data. Speech recognition (ASR) changes spoken words to text. This is key for voice systems. Text-to-Speech (TTS) is needed. This is if your <strong>ai</strong> assistant will talk back.</p><h3>Bot Design Best Practices</h3><p>Making good <strong>conversational ai application</strong>s means following good rules. You must set clear goals. Goals for your <strong>conversational</strong> AI. Understand what users need. Research what they like. Research common questions. Pick the right technology. It must fit your business needs. Design easy-to-use talks. Make them human-like. Train your <strong>ai</strong> model. Use <strong>machine learning</strong>. This is for correct understanding. Test and change often. Get feedback. Make your design better. Put your bot on different channels. This gives a steady user experience. Watch how it works. Make it better all the time.</p><h2>Deploying and Managing AI</h2><p>You need good plans. These plans help you use and run your AI apps. This makes sure they work well. They will also stay dependable. You can use many ways. These ways make your AI solutions strong.</p><h3>Containerizing AI Apps</h3><p>You can put your AI models in containers. This includes their settings. This makes them work the same everywhere. <a href="https://www.techtarget.com/searchitoperations/tip/Benefits-of-containers-for-AI-workloads">Containers keep things separate. This is for different parts. So, AI projects can use different versions. They will not cause problems. Being separate also makes things safer. It limits what each container can reach. This is key when you use private data. This data trains AI models. Containers help you watch tests closely. You can save how things look. This helps you fix problems. Using containers also saves money. Developers spend less time setting things up. They spend less time fixing things.</a></p><h3>AI Model Monitoring</h3><p>After you use your AI models, you must watch them. This helps you see how well they work. <a href="https://www.evidentlyai.com/ml-in-production/model-monitoring">You should check how good the model is. Look at things like accuracy. Also, check data quality. Look for missing values. Watch for changes in data. Watch for changes in predictions. This means looking for shifts. Shifts in scores or feature types. You also need to watch for unfairness. Watch for bias. How fast things work is important. How much CPU is used is also important. Tools like Evidently AI help you. Amazon SageMaker Model Monitor also helps.</a></p><h3>MLOps Principles</h3><p><a href="https://www.cake.ai/blog/mlops">MLOps adds DevOps ideas to machine learning. It helps you manage the whole AI process. MLOps makes things strict and steady. It brings all tasks together. From getting data ready to using it.</a> <a href="https://blog.melio.ai/8-mlops-principles/">Continuous Integration (CI) pipelines help. They make fast, automatic releases. They test models against goals. Continuous Delivery (CD) makes using models faster. It sends every change to use automatically. Continuous Monitoring (CM) watches how models work. It finds problems like data changes.</a> These ways make sure things are always delivered. They make sure things are dependable.</p><h3>Scalability and Reliability</h3><p>You must make your AI models able to grow. Do this from the start. Keep models simple and small. This makes them easier to grow and keep up. <a href="https://www.iguazio.com/glossary/ai-scalability/">You can use a system with parts. This lets you update parts. You do not have to change everything. Use cloud power. Cloud systems can change resources. They change based on what is needed. Use MLOps ways. This makes tasks automatic. It makes fewer mistakes. It makes the system more dependable.</a> You should also always watch your AI models. This tracks how they work. It tracks data changes. It helps you plan to train them again. Or to update them.</p><h2>Responsible AI Development</h2><p>You must build AI systems in a good way. This means you find, check, and handle AI risks. Microsoft has many tools for this. They help you through the whole building process.</p><h3>Responsible AI Principles</h3><p>You should follow <a href="https://www.microsoft.com/en-us/ai/responsible-ai">main rules when you make AI</a>. <a href="https://www.microsoft.com/en-us/ai/principles-and-approach">Microsoft stresses these rules</a>. They help you make AI that is fair. <a href="https://professional.dce.harvard.edu/blog/building-a-responsible-ai-framework-5-key-principles-for-organizations/">Your AI should treat everyone fairly</a>. It must work well and be safe. Your systems should also be safe and private. They must help everyone. This is for all people. It does not matter where they come from. You need to make your AI easy to understand. People should also be in charge of AI systems.</p><h3>Fairness and Privacy Tools</h3><p>You can use many tools. They help with fairness and privacy in your AI work. <a href="https://dialzara.com/blog/10-top-tools-for-ethical-ai-development-2024">Microsoft gives a Responsible AI Toolbox</a>. This set of tools has a Responsible AI Dashboard. It also has an Error Analysis Dashboard. It has an Interpretability Dashboard. The Fairness Dashboard is also in this. Fairlearn powers it. These tools help explain things. They help with fairness and including everyone. You can also use ways like <a href="https://smartdev.com/addressing-ai-bias-and-fairness-challenges-implications-and-strategies-for-ethical-ai/">balancing training data</a>. This helps make different kinds of data. Adversarial debiasing helps lower unfairness when learning. Differential privacy makes sure your AI models do not show private personal data.</p><h3>Ethical AI Guidelines</h3><p>You must follow good rules. These are for making and using AI systems. Think about what is right from the start. Make your AI code fair and clear. It must also keep user data private. Get and handle data in a good way when building. Get data sets in a good way. Make sure they are stored safely. Handle their life cycle well. Always watch how your AI system works. Check its good behavior after you use it. Checking often helps you find and fix problems fast.</p><h3>Bias and Transparency</h3><p>You need to fix unfairness. You need to make your AI systems clear. <a href="https://transcend.io/blog/ai-ethics">AI models should be clear</a>. Their choices must be easy to explain. People affected by AI should know why it made a choice. You must make sure <a href="https://www.alation.com/blog/data-ethics-in-ai-6-key-principles-for-responsible-machine-learning/">training data sets show everyone</a>. They need to be different in many ways. You should update and check <a href="https://m365.show/p/what-is-microsoft-dataverse-and-how">data sets</a> as society changes. Use good, correct data. This stops mistakes and unfairness in AI systems. Use strong ways to check data quality. These include looking at it by hand. They include cleaning it automatically. They include checks by other groups.</p><div><hr></div><p>Developers can build great AI apps. Microsoft has strong tools for this. Building AI apps with Azure and Power Platform is good. They offer many benefits. These include growing easily. They work well together. They have strong AI safety features. We want you to try these Microsoft tools. Use them for your own projects. Look at Microsoft&#8217;s many guides. Use Microsoft&#8217;s community help. This includes &#8220;A Developer&#8217;s Guide to Building AI Applications, Second Edition.&#8221; Start making AI apps with Microsoft now. These AI tools help developers make amazing apps. Microsoft gives developers all they need for AI. Microsoft really wants to help with AI development.</p><h2>FAQ</h2><h3>&#10067; How do I start building AI apps with Microsoft tools?</h3><p>You can start with Azure AI Services. Also, look at the Power Platform. Microsoft has many guides. They have tutorials too. You can use books like &#8220;A Developer&#8217;s Guide to Building AI Applications, Second Edition.&#8221; Begin with a small project. This helps you learn the tools.</p><h3>&#128187; Can I run large language models (LLMs) locally with .NET?</h3><p>Yes, you can do this. Tools like Ollama help you. You can download LLMs. Run them on your computer. Then, use these models in your .NET apps. This gives you more control. It can also save you money.</p><h3>&#128640; What is MLOps, and how does Azure DevOps help?</h3><p>MLOps uses DevOps ideas for machine learning. It makes the whole AI process automatic. This goes from getting data ready. It goes to using and watching models. Azure DevOps has pipelines. These help with continuous integration and delivery. This makes your MLOps work easier.</p><h3>&#128737;&#65039; How does Microsoft ensure responsible AI development?</h3><p>Microsoft focuses on Responsible AI rules. They have tools like the Responsible AI Dashboard. This helps you find and fix problems. You can work on fairness, privacy, and clear rules. Do this through all your building steps.</p><h3>&#129302; Can I build AI apps without extensive coding?</h3><p>Yes, you can! The Microsoft Power Platform has low-code tools. You can use Power Apps. You can use Power Automate. These tools help you make AI apps. They also make tasks automatic. You do not need to know a lot of coding.</p>]]></content:encoded></item><item><title><![CDATA[Ensuring Reliable Power Apps Deployments with DevOps and ALM]]></title><description><![CDATA[Reliable Power Apps deployments are crucial for maintaining smooth business operations and ensuring user satisfaction.]]></description><link>https://newsletter.m365.show/p/ensuring-reliable-power-apps-deployments</link><guid isPermaLink="false">https://newsletter.m365.show/p/ensuring-reliable-power-apps-deployments</guid><dc:creator><![CDATA[Mirko Peters - M365 Specialist]]></dc:creator><pubDate>Sat, 11 Oct 2025 01:16:22 GMT</pubDate><enclosure url="https://api.substack.com/feed/podcast/175465280/a4b7d5f6282530f6ed0b40631a4c722f.mp3" length="0" type="audio/mpeg"/><content:encoded><![CDATA[<p>Reliable Power Apps deployments are crucial for maintaining smooth business operations and ensuring user satisfaction. By implementing good practices, you can streamline the deployment process, allowing for faster changes with fewer mistakes. Utilizing DevOps and <a href="https://companial.com/blog/deploying-model-driven-apps-simplifying-alm-with-power-platform-pipelines/">ALM practices enhances the reliability</a> of your app deployments. Through automation and consistent strategies, you can minimize human errors, ensuring safe and secure deployments. These methods also foster improved collaboration among teams, significantly elevating the quality of the Reliable Power Apps you deliver.</p><h2>Key Takeaways</h2><ul><li><p>Use <a href="https://m365.show/p/what-is-microsoft-dataverse-and-how">Application Lifecycle Management (ALM)</a> to make your Power Apps deployments easier and safer.</p></li><li><p>Use DevOps methods to improve teamwork and automate deployment tasks. This helps to lower mistakes.</p></li><li><p>Use version control methods to handle app changes well and make sure deployments go smoothly.</p></li><li><p>Check your Power Apps often to find problems early and keep a good user experience.</p></li><li><p>Work on ways to improve all the time. This keeps your deployments effective and ready for business needs.</p></li></ul><h2>ALM Importance for Reliable Power Apps</h2><div id="youtube2-XeB5KllKO2I" class="youtube-wrap" data-attrs="{&quot;videoId&quot;:&quot;XeB5KllKO2I&quot;,&quot;startTime&quot;:null,&quot;endTime&quot;:null}" data-component-name="Youtube2ToDOM"><div class="youtube-inner"><iframe src="https://www.youtube-nocookie.com/embed/XeB5KllKO2I?rel=0&amp;autoplay=0&amp;showinfo=0&amp;enablejsapi=0" frameborder="0" loading="lazy" gesture="media" allow="autoplay; fullscreen" allowautoplay="true" allowfullscreen="true" width="728" height="409"></iframe></div></div><p>Application Lifecycle Management (ALM) is very important for reliable Power Apps deployments. ALM includes the steps and tools that handle the whole life of an application. This starts from the first development to deployment and maintenance. When you use a good ALM plan, you can lower risks that come with manual deployments.</p><h3>Key ALM Components</h3><p>Knowing the main parts of ALM helps you build a strong base for your Power Apps projects. Here are the <a href="https://learn.microsoft.com/en-us/power-platform/alm/overview-alm">key parts</a>:</p><div class="captioned-image-container"><figure><a class="image-link image2" target="_blank" href="https://substackcdn.com/image/fetch/$s_!LQl3!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F855e0533-51f9-4d5d-8c8e-c485f3d70fe6_685x220.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!LQl3!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F855e0533-51f9-4d5d-8c8e-c485f3d70fe6_685x220.png 424w, https://substackcdn.com/image/fetch/$s_!LQl3!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F855e0533-51f9-4d5d-8c8e-c485f3d70fe6_685x220.png 848w, https://substackcdn.com/image/fetch/$s_!LQl3!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F855e0533-51f9-4d5d-8c8e-c485f3d70fe6_685x220.png 1272w, https://substackcdn.com/image/fetch/$s_!LQl3!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F855e0533-51f9-4d5d-8c8e-c485f3d70fe6_685x220.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!LQl3!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F855e0533-51f9-4d5d-8c8e-c485f3d70fe6_685x220.png" width="685" height="220" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/855e0533-51f9-4d5d-8c8e-c485f3d70fe6_685x220.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:220,&quot;width&quot;:685,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:36851,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/png&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:false,&quot;topImage&quot;:true,&quot;internalRedirect&quot;:&quot;https://m365.show/i/175465280?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F855e0533-51f9-4d5d-8c8e-c485f3d70fe6_685x220.png&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!LQl3!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F855e0533-51f9-4d5d-8c8e-c485f3d70fe6_685x220.png 424w, https://substackcdn.com/image/fetch/$s_!LQl3!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F855e0533-51f9-4d5d-8c8e-c485f3d70fe6_685x220.png 848w, https://substackcdn.com/image/fetch/$s_!LQl3!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F855e0533-51f9-4d5d-8c8e-c485f3d70fe6_685x220.png 1272w, https://substackcdn.com/image/fetch/$s_!LQl3!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F855e0533-51f9-4d5d-8c8e-c485f3d70fe6_685x220.png 1456w" sizes="100vw" fetchpriority="high"></picture><div></div></div></a></figure></div><p>Each part helps make your deployments more reliable. For example, governance makes sure your app development follows rules and regulations. This helps with compliance and shows how work is going. Also, having separate environments for development, testing, and production stops problems between workstreams, which lowers the chance of mistakes.</p><h3>Benefits of ALM in Power Platform Success</h3><p>Using ALM in your Power Platform projects has many benefits. Here are some clear advantages you can see:</p><div class="captioned-image-container"><figure><a class="image-link image2" target="_blank" href="https://substackcdn.com/image/fetch/$s_!EvyP!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F5eb178c4-c452-4779-a7c2-3a0a9dcaa208_684x156.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!EvyP!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F5eb178c4-c452-4779-a7c2-3a0a9dcaa208_684x156.png 424w, https://substackcdn.com/image/fetch/$s_!EvyP!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F5eb178c4-c452-4779-a7c2-3a0a9dcaa208_684x156.png 848w, https://substackcdn.com/image/fetch/$s_!EvyP!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F5eb178c4-c452-4779-a7c2-3a0a9dcaa208_684x156.png 1272w, https://substackcdn.com/image/fetch/$s_!EvyP!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F5eb178c4-c452-4779-a7c2-3a0a9dcaa208_684x156.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!EvyP!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F5eb178c4-c452-4779-a7c2-3a0a9dcaa208_684x156.png" width="684" height="156" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/5eb178c4-c452-4779-a7c2-3a0a9dcaa208_684x156.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:156,&quot;width&quot;:684,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:27607,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/png&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:&quot;https://m365.show/i/175465280?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F5eb178c4-c452-4779-a7c2-3a0a9dcaa208_684x156.png&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!EvyP!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F5eb178c4-c452-4779-a7c2-3a0a9dcaa208_684x156.png 424w, https://substackcdn.com/image/fetch/$s_!EvyP!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F5eb178c4-c452-4779-a7c2-3a0a9dcaa208_684x156.png 848w, https://substackcdn.com/image/fetch/$s_!EvyP!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F5eb178c4-c452-4779-a7c2-3a0a9dcaa208_684x156.png 1272w, https://substackcdn.com/image/fetch/$s_!EvyP!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F5eb178c4-c452-4779-a7c2-3a0a9dcaa208_684x156.png 1456w" sizes="100vw" loading="lazy"></picture><div></div></div></a></figure></div><p>With a good ALM plan, you can make your deployment process smoother. This leads to faster release cycles and better efficiency in software development. Plus, automating tasks reduces the workload for administrators. This lets them focus on more important tasks.</p><p>Manual deployments can be risky, like causing security issues and data leaks. For example, using SharePoint as a data source can make managing permissions tricky. This can lead to app failures and unauthorized data access. By using ALM practices, you can reduce these risks and make your Power Apps deployments more reliable.</p><h2>Best Practices for DevOps Integration</h2><p>Bringing DevOps into your Power Apps deployments can greatly improve how you develop and deploy. By focusing on teamwork and version control, you can make your processes smoother and more efficient.</p><h3>Collaboration Strategies</h3><p>Good teamwork is key for successful Power Apps deployments. Here are some ways to boost collaboration:</p><ul><li><p><strong><a href="https://dynamicscommunities.com/ug/power-platform-ug/strategizing-your-power-platform-environments-best-practices-and-key-insights/">Define Clear Purposes</a></strong>: Set clear roles for development, testing, and production. This helps stop unwanted changes and keeps things compliant.</p></li><li><p><strong>Engage Multidisciplinary Teams</strong>: Work with both business experts and developers. Fusion teams, which mix domain experts and IT staff, help connect business needs with tech solutions.</p></li><li><p><strong>Regular Monitoring</strong>: Watch over your environments closely. Regular checks ensure reliability and scalability, helping you fix problems before they grow.</p></li><li><p><strong><a href="https://sellbery.com/blog/from-concept-to-deployment-how-power-apps-consulting-streamlines-the-app-lifecycle/">Upskill In-House Teams</a></strong>: Provide training for your teams. This keeps your apps in line with changing needs and lowers mistakes during deployment.</p></li></ul><p>By using these strategies, you can speed up deployments and cut down on errors. Better teamwork leads to quicker updates and improved quality checks, making the deployment process more reliable.</p><h3>Version Control Techniques</h3><p>Version control is very important for managing your Power Apps source code and settings. Here are some useful techniques:</p><ul><li><p><strong><a href="https://www.linkedin.com/pulse/exploring-different-kinds-version-control-power-apps-marcel-broschk-gouxf">Built-in Version Control</a></strong>: Use Power Apps Studio&#8217;s basic versioning tools. This helps you track and restore old versions of your apps easily.</p></li><li><p><strong>Source Control Systems</strong>: Save your apps as .msapp or YAML files. Using these with Git helps team members work together and keep track of changes.</p></li><li><p><strong>Branching and Merging</strong>: Use branching methods to handle different features or versions. This lets developers work separately, reducing conflicts.</p></li><li><p><strong>Automated Deployment and CI/CD</strong>: Use tools like Azure DevOps for automatic processes. Continuous integration and continuous delivery (CI/CD) cut down on errors and keep deployments consistent.</p></li><li><p><strong>Best Practices</strong>: Always back up your work, write down changes, and do team reviews. These steps are key for keeping code quality high and ensuring smooth deployments.</p></li></ul><p>By following these version control techniques, you can make your Power Apps deployments more consistent and reliable. <a href="https://www.linkedin.com/pulse/optimizing-power-apps-development-cicd-comprehensive-case-lalit-dhuwe-twddf">CI/CD pipelines</a> help manage code, improve teamwork, and catch issues early, leading to better quality solutions.</p><h2>Power Platform Pipelines for Automation</h2><p><a href="https://m365.show/p/what-is-microsoft-dataverse-and-how">Power Platform pipelines</a> are very important for <a href="https://www.rysun.com/rysun-xchange/unlock-seamless-app-deployments-with-power-platform-pipelines-a-game-changer-for-your-business/">automating your deployment tasks</a>. They help move solutions through different environments. This makes sure everything is tested and approved without needing manual work. Automation cuts down on mistakes and problems, which improves your application lifecycle management. Here are some main benefits of using pipelines:</p><ul><li><p>Automate boring tasks like exporting and importing solutions.</p></li><li><p>Remove human errors like missing parts or wrong versions.</p></li><li><p>Make sure validation and approval happen at each deployment step.</p></li><li><p>Keep a detailed record of changes and approvals.</p></li><li><p>Let non-technical users safely move solutions between environments.</p></li><li><p>Control access to stop unauthorized deployments.</p></li></ul><p>By using these features, you can make your deployments more reliable and efficient.</p><h3>Tools for Automation</h3><p>Many tools can help you automate deployments well. Here are some popular tools used in Power Platform pipelines:</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!V-om!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fc13723e6-e774-47fb-acf7-410fe99ae7e0_683x245.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!V-om!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fc13723e6-e774-47fb-acf7-410fe99ae7e0_683x245.png 424w, https://substackcdn.com/image/fetch/$s_!V-om!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fc13723e6-e774-47fb-acf7-410fe99ae7e0_683x245.png 848w, https://substackcdn.com/image/fetch/$s_!V-om!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fc13723e6-e774-47fb-acf7-410fe99ae7e0_683x245.png 1272w, https://substackcdn.com/image/fetch/$s_!V-om!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fc13723e6-e774-47fb-acf7-410fe99ae7e0_683x245.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!V-om!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fc13723e6-e774-47fb-acf7-410fe99ae7e0_683x245.png" width="683" height="245" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/c13723e6-e774-47fb-acf7-410fe99ae7e0_683x245.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:245,&quot;width&quot;:683,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:46279,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/png&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:&quot;https://m365.show/i/175465280?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fc13723e6-e774-47fb-acf7-410fe99ae7e0_683x245.png&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!V-om!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fc13723e6-e774-47fb-acf7-410fe99ae7e0_683x245.png 424w, https://substackcdn.com/image/fetch/$s_!V-om!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fc13723e6-e774-47fb-acf7-410fe99ae7e0_683x245.png 848w, https://substackcdn.com/image/fetch/$s_!V-om!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fc13723e6-e774-47fb-acf7-410fe99ae7e0_683x245.png 1272w, https://substackcdn.com/image/fetch/$s_!V-om!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fc13723e6-e774-47fb-acf7-410fe99ae7e0_683x245.png 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg role="img" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><title></title><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><p>These tools help you create custom pipelines that meet your needs. They also make your deployment processes more efficient by reducing manual work.</p><p>To keep your automated deployments safe and compliant, think about these strategies:</p><ol><li><p>Use a clear <a href="https://www.linkedin.com/pulse/secure-powerapps-deployments-solution-uwrme">Application Lifecycle Management (ALM)</a> plan to lower risks like security issues and non-compliance.</p></li><li><p>Use solution segmentation to improve security by cutting down system-wide dependencies and enforcing access controls.</p></li><li><p>Do regression testing to make sure updates do not harm security, functionality, or performance.</p></li></ol><p>By following these practices, you can build a strong system for your automated deployments, making sure they are both secure and efficient.</p><h2>Testing Strategies for Deployments</h2><p>Testing is very important in the deployment process of Power Apps. It makes sure your applications work well and meet what users want. By using good testing strategies, you can find problems early and improve the quality of your software. Here are some reasons why testing matters:</p><ul><li><p><a href="https://www.linkedin.com/pulse/ultimate-power-apps-automate-test-plan-developers-marcel-broschk-uonyf">Makes sure applications are reliable and efficient</a></p></li><li><p>Finds and fixes problems early in development</p></li><li><p>Improves user experience</p></li><li><p>Cuts down on expensive fixes after deployment</p></li><li><p>Helps with keeping apps maintained</p></li><li><p>Lets applications change with business needs</p></li></ul><p>By focusing on testing, you can avoid many problems that come from deploying apps that haven&#8217;t been tested.</p><h3>Types of Testing</h3><p>Different types of testing are needed to find issues in Power Apps before deployment. Each environment has a special role in the testing process:</p><ul><li><p><strong><a href="https://ethanguyant.com/2024/01/22/power-apps-tips-visually-distinguishing-your-apps-environment/">Development Environment</a></strong>: This is where you create your app ideas. You can try out features and make changes.</p></li><li><p><strong>Testing/QA Environment</strong>: This environment is key for checking how things work and how users feel. It makes sure everything is ready before deployment.</p></li><li><p><strong>Production Environment</strong>: This is the live space where users use your apps. It needs to stay stable and reliable for a smooth experience.</p></li></ul><p>By using these environments well, you can make sure your deployments succeed and that you give high-quality software to your users.</p><h2>Monitoring and Continuous Improvement</h2><p>Watching your Power Apps after they go live is very important. It helps keep everything running smoothly and users happy. By checking your apps regularly, you can find problems before they get worse. Here are some important things to watch:</p><ul><li><p><a href="https://moldstud.com/articles/p-best-practices-for-post-deployment-monitoring">Response times</a></p></li><li><p>Error rates</p></li><li><p>CPU and memory usage</p></li><li><p>User experience metrics</p></li></ul><p>These things give you early warnings about possible issues. Keeping an eye on your apps shows you how they perform and how users act. This helps you find and fix problems quickly. <a href="https://thisisglance.com/learning-centre/how-does-devops-speed-up-app-development-and-deployment">Monitoring tools can notify your team right away</a> when something goes wrong. This allows for fast fixes to avoid bigger problems.</p><blockquote><p><strong>Tip</strong>: Look at your monitoring data often to see patterns. This can help you make smart choices about improvements and how to use resources.</p></blockquote><h3>Improvement Strategies</h3><p>To make your Power Apps deployment better, think about using these ideas for ongoing improvement:</p><ul><li><p><strong><a href="https://learn.microsoft.com/en-us/power-platform/well-architected/operational-excellence/release-engineering-continuous-integration">Continuous Integration</a></strong>: Check code changes with automated tests and compliance checks. This keeps your deployments stable and safe.</p></li><li><p><strong>Robust Environment Strategy</strong>: Handle different stages of development and deployment well. This keeps things consistent across environments.</p></li><li><p><strong>Utilize CI Pipelines</strong>: Automate testing and reporting to get quick feedback on code quality. This lowers the chances of mistakes slipping through.</p></li><li><p><strong>Integrate Source Control</strong>: Link your source control with CI pipelines for real-time updates on pull requests and build statuses. This encourages teamwork and openness.</p></li><li><p><strong>Quality Checks</strong>: Do careful checks on custom code to keep standards and security high. This step is key for making sure your apps are reliable.</p></li><li><p><strong>Block Failed Deployments</strong>: If tests do not pass, stop the deployment process. This pushes your team to look at issues and improve the code before moving on.</p></li></ul><p>Companies that use these strategies often see big improvements. For example, <a href="https://akitais.com/news/automating-workflows-power-apps-use-cases/">a global automotive finance company</a> set up a structured Power App for idea submissions. This boosted employee involvement and created a clear process with good tracking and audit trails. As a result, they saw a big rise in idea submissions, showing how effective continuous improvement can be.</p><p>By focusing on monitoring and continuous improvement, you can make sure your Power Apps deployments are reliable, scalable, and efficient.</p><div><hr></div><p>In conclusion, using DevOps and ALM is very important for reliable Power Apps deployments. When you use these practices, you can improve teamwork and make your deployment process easier. Here are some important points to remember:</p><ul><li><p><a href="https://www.linkedin.com/pulse/from-cradle-deployment-power-apps-best-practice-journey-kim-brian-brawc">Version Control and Teamwork</a>: ALM helps manage different app versions, making tracking and deployment smooth.</p></li><li><p>Clear Deployment Steps: ALM sets a clear way to move apps through development, testing, and production, which lowers risks.</p></li><li><p>Control and Safety: ALM controls who can build and deploy apps, keeping things safe and compliant.</p></li><li><p>Handling Changes and Improvements: ALM makes it easy to update and improve apps, keeping the system stable.</p></li><li><p>Saving Time and Money: A good ALM plan automates boring tasks, letting teams focus on new ideas.</p></li></ul><p>By using these strategies, you can make sure your Power Apps stay reliable and meet business needs effectively.</p><h2>FAQ</h2><h3>What is ALM in Power Apps?</h3><p>ALM means <a href="https://m365.show/p/what-is-microsoft-dataverse-and-how">Application Lifecycle Management</a>. It is about managing your Power Apps from start to finish. This includes development, deployment, and maintenance. ALM helps keep your app deployments consistent and reliable.</p><h3>Why should I use DevOps with Power Apps?</h3><p>Using DevOps with Power Apps improves teamwork and automates how you deploy apps. This combination lowers human mistakes, speeds up release times, and makes sure your apps meet business needs well.</p><h3>How can I automate my Power Apps deployments?</h3><p>You can automate your deployments by using tools like Azure DevOps or GitHub Actions. These tools help you create CI/CD pipelines. This makes the deployment process easier and reduces manual work.</p><h3>What types of testing should I perform before deployment?</h3><p>You should do unit testing, integration testing, and user acceptance testing. These tests find problems early. They make sure your apps work correctly and meet user needs before going live.</p><h3>How can I monitor my Power Apps after deployment?</h3><p>You can monitor your Power Apps with analytics tools. These tools track performance, error rates, and how users interact with your apps. Regular monitoring helps you spot and fix issues quickly, ensuring a good user experience.</p>]]></content:encoded></item><item><title><![CDATA[Understanding and Managing Microsoft Graph Consent]]></title><description><![CDATA[Microsoft Graph consent is very important for apps using Microsoft 365 resources.]]></description><link>https://newsletter.m365.show/p/understanding-and-managing-microsoft</link><guid isPermaLink="false">https://newsletter.m365.show/p/understanding-and-managing-microsoft</guid><dc:creator><![CDATA[Mirko Peters - M365 Specialist]]></dc:creator><pubDate>Fri, 10 Oct 2025 09:02:35 GMT</pubDate><enclosure url="https://api.substack.com/feed/podcast/175457278/faf088f1af52287a9095194cb4fb8177.mp3" length="0" type="audio/mpeg"/><content:encoded><![CDATA[<p>Microsoft Graph consent is very important for apps using <a href="https://www.linkedin.com/newsletters/m365-digital-workplace-daily-7340260578583592961/">Microsoft 365</a> resources. It helps you control permissions well. This makes sure apps only access the data they need. Knowing these permissions is key for keeping things safe. Recent security reports show that many organizations <a href="https://www.compassitc.com/blog/the-hidden-risks-of-user-installed-apps-in-microsoft-365">miss app visibility and installed apps</a>. This mistake can create weaknesses. Apps with admin permissions can change important security settings. This raises the chance of unauthorized access. By understanding Microsoft Graph consent, you can protect your organization&#8217;s resources and improve functionality.</p><h2>Key Takeaways</h2><ul><li><p><a href="https://m365.show/p/what-is-microsoft-dataverse-and-how">Microsoft Graph consent</a> controls what apps can do. It makes sure apps only get the data they need. This keeps information safe and secure.</p></li><li><p>Know the difference between delegated and application permissions. Delegated permissions need user approval. Application permissions require admin approval.</p></li><li><p>Always use the least-privilege principle when giving permissions. Only give the minimum access needed for apps to work well.</p></li><li><p>Check and review app permissions often in the Azure Portal. This helps find permissions that are not needed and lowers security risks.</p></li><li><p>Use Microsoft Graph Explorer to test and manage permissions. This tool helps make sure your apps have the right access to resources.</p></li></ul><h2>Overview of Microsoft Graph Consent</h2><div id="youtube2-qRZQCdM9VtQ" class="youtube-wrap" data-attrs="{&quot;videoId&quot;:&quot;qRZQCdM9VtQ&quot;,&quot;startTime&quot;:null,&quot;endTime&quot;:null}" data-component-name="Youtube2ToDOM"><div class="youtube-inner"><iframe src="https://www.youtube-nocookie.com/embed/qRZQCdM9VtQ?rel=0&amp;autoplay=0&amp;showinfo=0&amp;enablejsapi=0" frameborder="0" loading="lazy" gesture="media" allow="autoplay; fullscreen" allowautoplay="true" allowfullscreen="true" width="728" height="409"></iframe></div></div><h3>What is Microsoft Graph?</h3><p>Microsoft Graph is a strong tool that connects to many Microsoft cloud services. It gives you <a href="https://docs.witivio.com/trust-center/microsoft-graph-permissions/">one API endpoint</a> to access resources in Microsoft 365. With Microsoft Graph, you can work with user profiles, emails, calendars, documents, and more. This makes it easier to manage permissions for your apps.</p><p>Here are some important features of Microsoft Graph:</p><ul><li><p><strong>Unified API Endpoint</strong>: Use one interface to access many Microsoft services.</p></li><li><p><strong>Rich Data Access</strong>: Get a wide range of resources to improve your app&#8217;s features.</p></li><li><p><strong>Cross-Platform Nature</strong>: Work smoothly on different devices and platforms.</p></li><li><p><strong>Real-Time Updates</strong>: Use webhooks for instant alerts on data changes.</p></li></ul><h3>Importance of Microsoft Graph in Application Development</h3><p>Knowing Microsoft Graph is very important for making secure applications. It helps you manage permissions well, so your apps only access the data they need. This is where consent is important.</p><p>When you create applications, you need to think about two types of permissions: delegated and application permissions.</p><div class="captioned-image-container"><figure><a class="image-link image2" target="_blank" href="https://substackcdn.com/image/fetch/$s_!ZC8_!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F2f85e617-aea8-4484-996a-842ce425e622_685x175.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!ZC8_!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F2f85e617-aea8-4484-996a-842ce425e622_685x175.png 424w, https://substackcdn.com/image/fetch/$s_!ZC8_!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F2f85e617-aea8-4484-996a-842ce425e622_685x175.png 848w, https://substackcdn.com/image/fetch/$s_!ZC8_!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F2f85e617-aea8-4484-996a-842ce425e622_685x175.png 1272w, https://substackcdn.com/image/fetch/$s_!ZC8_!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F2f85e617-aea8-4484-996a-842ce425e622_685x175.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!ZC8_!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F2f85e617-aea8-4484-996a-842ce425e622_685x175.png" width="685" height="175" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/2f85e617-aea8-4484-996a-842ce425e622_685x175.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:175,&quot;width&quot;:685,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:36335,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/png&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:&quot;https://m365.show/i/175457278?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F2f85e617-aea8-4484-996a-842ce425e622_685x175.png&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!ZC8_!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F2f85e617-aea8-4484-996a-842ce425e622_685x175.png 424w, https://substackcdn.com/image/fetch/$s_!ZC8_!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F2f85e617-aea8-4484-996a-842ce425e622_685x175.png 848w, https://substackcdn.com/image/fetch/$s_!ZC8_!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F2f85e617-aea8-4484-996a-842ce425e622_685x175.png 1272w, https://substackcdn.com/image/fetch/$s_!ZC8_!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F2f85e617-aea8-4484-996a-842ce425e622_685x175.png 1456w" sizes="100vw" loading="lazy"></picture><div></div></div></a></figure></div><p>By managing these permissions, you can protect access to sensitive data. For example, delegated permissions need user consent, while application permissions need admin consent. This difference is key for keeping a secure environment.</p><h2>Types of Permissions in Microsoft Graph</h2><h3>Delegated Permissions</h3><p><a href="https://learn.microsoft.com/en-us/graph/auth/auth-concepts">Delegated permissions let apps act for the signed-in user.</a> This means when a user logs into an app, it can access resources based on their permissions. This setup improves security by limiting access to user-specific data. For example, if you use an app like DatabeatOMNI, it can only see information based on your permissions.</p><p>Here are some common delegated permissions used in Microsoft Graph integrations:</p><ul><li><p>Access user profiles</p></li><li><p>Read user emails</p></li><li><p>Manage user calendars</p></li><li><p>Access group memberships</p></li></ul><p>These permissions can be approved by an administrator or given directly by the user. This flexibility helps organizations control what data apps can access while letting users have a say in their data privacy.</p><h3>Application Permissions</h3><p>Application permissions give broader access to the apps themselves. These permissions let apps do things without needing user sign-ins. For example, an app can book a meeting room without needing individual user logins. While this can make things easier, it can also create a higher security risk if not managed well.</p><p><a href="https://blog.admindroid.com/delegated-vs-app-permissions-in-entra-id/">The following table shows the differences in security risk between delegated and application permissions:</a></p><div class="captioned-image-container"><figure><a class="image-link image2" target="_blank" href="https://substackcdn.com/image/fetch/$s_!r9Xp!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb1301327-3f52-41ae-86ce-bd5af0bf099d_686x94.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!r9Xp!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb1301327-3f52-41ae-86ce-bd5af0bf099d_686x94.png 424w, https://substackcdn.com/image/fetch/$s_!r9Xp!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb1301327-3f52-41ae-86ce-bd5af0bf099d_686x94.png 848w, https://substackcdn.com/image/fetch/$s_!r9Xp!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb1301327-3f52-41ae-86ce-bd5af0bf099d_686x94.png 1272w, https://substackcdn.com/image/fetch/$s_!r9Xp!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb1301327-3f52-41ae-86ce-bd5af0bf099d_686x94.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!r9Xp!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb1301327-3f52-41ae-86ce-bd5af0bf099d_686x94.png" width="686" height="94" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/b1301327-3f52-41ae-86ce-bd5af0bf099d_686x94.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:94,&quot;width&quot;:686,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:16648,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/png&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:&quot;https://m365.show/i/175457278?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb1301327-3f52-41ae-86ce-bd5af0bf099d_686x94.png&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!r9Xp!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb1301327-3f52-41ae-86ce-bd5af0bf099d_686x94.png 424w, https://substackcdn.com/image/fetch/$s_!r9Xp!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb1301327-3f52-41ae-86ce-bd5af0bf099d_686x94.png 848w, https://substackcdn.com/image/fetch/$s_!r9Xp!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb1301327-3f52-41ae-86ce-bd5af0bf099d_686x94.png 1272w, https://substackcdn.com/image/fetch/$s_!r9Xp!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb1301327-3f52-41ae-86ce-bd5af0bf099d_686x94.png 1456w" sizes="100vw" loading="lazy"></picture><div></div></div></a></figure></div><p>Choosing between delegated and application permissions means balancing the benefits and risks. <a href="https://support.databeat.net/en/understanding-the-difference-between-delegated-and-application-permissions">Delegated permissions improve security by limiting access to user-specific data.</a> On the other hand, application permissions make processes easier but need careful management to protect sensitive information.</p><h2>Granting Permissions in Azure Portal</h2><h3>Accessing the Azure Portal</h3><p>To manage permissions well, you need to access the <a href="https://portal.azure.com/">Azure Portal</a> first. Here&#8217;s how to do it:</p><ol><li><p>Open your web browser and go to the <a href="https://portal.azure.com/">Azure Portal</a>.</p></li><li><p>Sign in with your Microsoft account that has admin rights.</p></li><li><p>After logging in, find the <strong>Azure Active Directory</strong> section on the left menu.</p></li></ol><p>Sometimes, accessing the Azure Portal can be tricky. Users may see permission errors, even with a Global Admin account. You need <a href="https://learn.microsoft.com/en-us/answers/questions/2243675/azure-graph-api-permissions-issue">specific permissions for Microsoft Graph API access</a>, no matter your account&#8217;s admin status. Also, conditional access policies might cause access problems, needing extra user verification.</p><h3>Setting Up Permissions</h3><p>Once you are in the Azure Portal, you can start granting permissions. Here&#8217;s a simple guide to help you:</p><ol><li><p><strong>Register your application in Azure AD</strong>: Go to the <strong>App registrations</strong> section and click on <strong>New registration</strong>. Fill in the details and click <strong>Register</strong>.</p></li><li><p><strong>Add necessary API permissions for Microsoft Graph</strong>: In the app registration, go to the <strong>API permissions</strong> tab. Click on <strong>Add a permission</strong>, then choose <strong>Microsoft Graph</strong>. Pick the type of permissions you need (delegated or application) and select the specific permissions for your app.</p></li><li><p><strong>Grant admin consent for the permissions added</strong>: After adding permissions, click on the <strong>Grant admin consent for [Your Organization]</strong> button. This step is important because it lets your app access the resources without asking users for consent.</p></li><li><p><strong>Create a client secret for secure access</strong>: Go to the <strong>Certificates &amp; secrets</strong> tab. Click on <strong>New client secret</strong>, write a description, and set an expiration time. Save the secret safely, as you will need it for authentication.</p></li></ol><blockquote><p><strong>Tip</strong>: Misconfigured access controls cause <a href="https://azure.criticalcloud.ai/how-to-audit-azure-rbac-role-assignments/">80% of breaches</a>. Regular audits are important in Azure to reduce risks.</p></blockquote><p>When granting permissions, always use a <a href="https://learn.microsoft.com/en-us/graph/best-practices-graph-permission">least-privilege design</a>. This means only use the minimum permissions needed for your app to work. Here are some best practices to follow:</p><ul><li><p>Use the least privileged permission needed for the app, like <code>User.Read</code> for reading user profiles.</p></li><li><p>Have backup plans for when permissions are blocked, so users still get value from the app.</p></li><li><p>Clearly document all permissions, explaining how they are used and their effects on user experience.</p></li></ul><p>By following these tips, you can improve security and lower the risk of unauthorized access to sensitive data. Remember, managing permissions is not just a one-time job; it needs regular attention and reviews.</p><h2>Testing User Consent with Microsoft Graph Explorer</h2><p>Microsoft Graph Explorer is a great tool for testing user consent and permissions. You can use it to work with Microsoft Graph APIs right from your browser. It helps you see what permissions your apps need and how they affect access to resources.</p><h3>How to Test Permissions</h3><p>To test permissions with Microsoft Graph Explorer, follow these steps:</p><ol><li><p>Open Microsoft Graph Explorer at <a href="https://developer.microsoft.com/en-us/graph/graph-explorer">https://developer.microsoft.com/en-us/graph/graph-explorer</a>.</p></li><li><p>Sign in with your Microsoft account. Make sure this account has the right permissions to access the resources you want to test.</p></li><li><p>Click your profile picture and choose the <strong><a href="https://learn.microsoft.com/en-us/graph/graph-explorer/graph-explorer-features">Consent to permissions</a></strong> option. This shows all the available permissions.</p></li><li><p>From the list, consent to the permissions you want. You can also use the <strong>Modify permissions</strong> tab to see which permissions are needed for specific queries. This helps you pick the least privileged option.</p></li><li><p>If a query fails because of not enough permissions, you can consent to the needed permissions through the <strong>Modify permissions</strong> tab.</p></li></ol><p>By following these steps, you can manage permissions well and make sure your apps have the access they need.</p><h3>Analyzing Test Results</h3><p>After testing permissions, you should analyze the results to find any permission problems. To do this, get the required permissions for specific API calls. Sign in with an Admin account and use the <strong>Modify Permission</strong> tab in Graph Explorer. This helps you find the necessary permissions for the commands you want to use.</p><p>For example, running commands like <code>Connect-MgGraph</code> with the right scopes asks for the needed permissions. This step helps you find and fix permission issues easily.</p><p>Remember, <a href="https://office365itpros.com/2023/05/04/graph-explorer-permissions/">managing permissions</a> is very important for keeping security. Microsoft Graph Explorer helps you manage permissions well, which is key for spotting consent problems. The least permission model can make it hard to understand the specific permissions needed for requests. So, regularly checking permissions helps avoid too many consents and keeps your apps running smoothly.</p><h2>Resource Specific Consent and Service Principals</h2><p>Resource-specific consent lets apps access only what they need. This makes security better by limiting what they can reach. When you use resource-specific consent, apps won&#8217;t have extra permissions. This is very important in big organizations where many apps need different access levels to sensitive data.</p><h3>Setting Up Service Principals</h3><p><a href="https://m365internals.com/2021/07/24/everything-about-service-principals-applications-and-api-permissions/">Service principals are like identities for your apps</a>, services, and automation tools. They help these entities access certain resources in Microsoft Graph. By using service principals, you can give specific API permissions to apps. This makes sure each app only accesses what it needs. In places with many apps, this focused method is key for keeping security and compliance.</p><p>To set up a service principal, follow these steps:</p><ol><li><p>Go to the <strong>Azure Portal</strong>.</p></li><li><p>Click on <strong>Azure Active Directory</strong>.</p></li><li><p>Select <strong>App registrations</strong> and find your app.</p></li><li><p>Click on <strong>Create a service principal</strong>.</p></li></ol><p>This process helps you manage permissions well and makes sure your apps stay within their access limits.</p><h3>Testing API Calls with Service Principals</h3><p>Testing API calls with service principals is important to check if your apps have the right permissions. Here are some common API call situations you might test:</p><div class="captioned-image-container"><figure><a class="image-link image2" target="_blank" href="https://substackcdn.com/image/fetch/$s_!kYct!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fafac10f0-c8ed-4f9b-bc68-d4af3ef8dd98_683x119.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!kYct!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fafac10f0-c8ed-4f9b-bc68-d4af3ef8dd98_683x119.png 424w, https://substackcdn.com/image/fetch/$s_!kYct!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fafac10f0-c8ed-4f9b-bc68-d4af3ef8dd98_683x119.png 848w, https://substackcdn.com/image/fetch/$s_!kYct!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fafac10f0-c8ed-4f9b-bc68-d4af3ef8dd98_683x119.png 1272w, https://substackcdn.com/image/fetch/$s_!kYct!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fafac10f0-c8ed-4f9b-bc68-d4af3ef8dd98_683x119.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!kYct!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fafac10f0-c8ed-4f9b-bc68-d4af3ef8dd98_683x119.png" width="683" height="119" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/afac10f0-c8ed-4f9b-bc68-d4af3ef8dd98_683x119.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:119,&quot;width&quot;:683,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:21464,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/png&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:&quot;https://m365.show/i/175457278?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fafac10f0-c8ed-4f9b-bc68-d4af3ef8dd98_683x119.png&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!kYct!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fafac10f0-c8ed-4f9b-bc68-d4af3ef8dd98_683x119.png 424w, https://substackcdn.com/image/fetch/$s_!kYct!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fafac10f0-c8ed-4f9b-bc68-d4af3ef8dd98_683x119.png 848w, https://substackcdn.com/image/fetch/$s_!kYct!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fafac10f0-c8ed-4f9b-bc68-d4af3ef8dd98_683x119.png 1272w, https://substackcdn.com/image/fetch/$s_!kYct!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fafac10f0-c8ed-4f9b-bc68-d4af3ef8dd98_683x119.png 1456w" sizes="100vw" loading="lazy"></picture><div></div></div></a></figure></div><p>You can use these API calls to test permissions:</p><ol><li><p><code>GET /servicePrincipals</code></p></li><li><p><code>GET /servicePrincipals/{id}</code></p></li><li><p><code>GET /servicePrincipals(appId=&#8217;{appId}&#8217;)</code></p></li></ol><p>By testing these calls, you can make sure your apps have the permissions they need to work right. This careful approach helps you find and fix any permission problems before they affect your users.</p><h2>Managing Group Permissions</h2><p><a href="https://www.tatvasoft.com/blog/overview-of-users-groups-and-permissions-in-microsoft-graph-part-1/">Group permissions are very important for managing access in Microsoft Graph.</a> They help you decide who can see certain resources and work together well. By managing group permissions, you can form teams that improve cooperation and make it easier to access resources. Setting permissions correctly helps users share information while keeping things safe.</p><h3>Understanding Group Permissions</h3><p>Group permissions let you control access for many users at the same time. This makes it easier to give permissions, especially in big organizations. Here are some main benefits of group permissions:</p><ul><li><p>Help users work together by letting them share information easily.</p></li><li><p>Allow the creation and management of teams, which is key for good resource access.</p></li><li><p>Make sure the right permissions are important for managing data access through Microsoft Graph Services.</p></li></ul><h3>Steps to Add Group Permissions</h3><p>Adding group permissions in Microsoft Graph is simple. Follow these steps to do it right:</p><ol><li><p>Make sure the signed-in user has a supported Microsoft Entra role or a custom role with the <code>microsoft.directory/groups/members/update</code> permission.</p></li><li><p>Use the right HTTP request to add members:</p><ul><li><p><code>POST /groups/{group-id}/members/$ref</code></p></li><li><p><code>PATCH /groups/{group-id}</code></p></li></ul></li><li><p>Add the necessary request headers:</p><ul><li><p><code>Authorization: Bearer {token}</code></p></li><li><p><code>Content-type: application/json</code></p></li></ul></li><li><p>Build the request body with the correct JSON object for the group member.</p></li><li><p>Check the response code to see if it worked:</p><ul><li><p><code>204 No Content</code> means success.</p></li><li><p><code>400 Bad Request</code> if the member is already in the group.</p></li><li><p><code>404 Not Found</code> if the member does not exist.</p></li><li><p><code>403 Unauthorized</code> if permissions are not enough.</p></li></ul></li></ol><p>A <code>204 No Content</code> response means you added a member successfully. If you get a <code>400 Bad Request</code>, it means the member is already in the group. A <code>404 Not Found</code> response shows the member does not exist, while a <code>403 Unauthorized</code> response means permissions are not enough.</p><p>By following these steps, you can manage group permissions well and help your organization stay secure and collaborative.</p><div><hr></div><p>Managing Microsoft Graph consent is very important for keeping your apps safe and protecting private information. You need to know the <a href="https://learn.microsoft.com/en-us/entra/identity/enterprise-apps/manage-consent-requests">differences between delegated and application permissions</a>. This understanding helps you decide wisely about giving access.</p><p>Here are some good practices to follow:</p><ul><li><p>Limit access by giving only the <a href="https://docs.nbold.co/trust-center/microsoft-graph-permissions">least privileges needed</a>.</p></li><li><p>Carefully check applications before giving consent.</p></li><li><p>Regularly review and take away permissions that are not needed.</p></li></ul><p>By using these strategies, you can improve security and make sure your organization follows the rules. Remember, managing consent well is a process that needs your attention all the time.</p><h2>FAQ</h2><h3>What is Microsoft Graph consent?</h3><p>Microsoft Graph consent helps you manage which resources your apps can use. It makes sure apps only get the permissions they need. This improves security and keeps things compliant.</p><h3>How do I grant permissions in Azure Portal?</h3><p>To grant permissions, go to the Azure Portal. Register your app, add API permissions for Microsoft Graph, and give admin consent. This way, your app can access the resources it needs.</p><h3>What are the risks of over-permissioning?</h3><p>Over-permissioning raises the chance of unauthorized access. If apps have too many permissions, attackers can take advantage of these weaknesses. This could lead to data breaches.</p><h3>How can I review app permissions regularly?</h3><p>You can check app permissions by going to the Azure Portal and looking at app registrations. Regular audits help find unnecessary permissions and keep a secure environment.</p><h3>What is the least-privilege principle?</h3><p>The least-privilege principle means giving only the minimum permissions needed for an app to work. This method lowers the risk of unauthorized access and boosts overall security.</p>]]></content:encoded></item><item><title><![CDATA[Comprehensive Guide to PnP PowerShell: Evolution, Features, and Best Practices]]></title><description><![CDATA[PnP PowerShell is very important for managing Microsoft 365. This strong tool helps you automate tasks and make admin work easier. With PnP PowerShell, you can save a lot of time on boring tasks. For example, tasks that used to take hours or days can now be done in just minutes]]></description><link>https://newsletter.m365.show/p/comprehensive-guide-to-pnp-powershell</link><guid isPermaLink="false">https://newsletter.m365.show/p/comprehensive-guide-to-pnp-powershell</guid><dc:creator><![CDATA[Mirko Peters - M365 Specialist]]></dc:creator><pubDate>Thu, 09 Oct 2025 07:08:18 GMT</pubDate><enclosure url="https://api.substack.com/feed/podcast/175433231/7c9c21e657d409025dddc84e8430ad4b.mp3" length="0" type="audio/mpeg"/><content:encoded><![CDATA[<p>PnP PowerShell is very important for managing <a href="https://www.linkedin.com/newsletters/m365-digital-workplace-daily-7340260578583592961/">Microsoft 365</a>. This strong tool helps you automate tasks and make admin work easier. With PnP PowerShell, you can save a lot of time on boring tasks. For example, tasks that used to take hours or days <a href="https://www.valprovia.com/en/blog/native-pnp-integration-vs-post-processing">can now be done in just minutes</a>. This change happens because of features like saving PnP templates right in Teams Center. This makes managing tokens easier. Overall, PnP PowerShell helps you work better and faster in your Microsoft environment.</p><h2>Key Takeaways</h2><ul><li><p>PnP PowerShell helps automate tasks in Microsoft 365. This saves time and cuts down on mistakes.</p></li><li><p>It has more than 800 cmdlets. PnP PowerShell makes managing SharePoint and Teams easier.</p></li><li><p>Follow best practices to keep your credentials safe. This protects important information.</p></li><li><p>Update PnP PowerShell often. This lets you use new features and get better performance.</p></li><li><p>Join the community to share scripts. This will improve your PnP PowerShell experience.</p></li></ul><h2>PnP PowerShell Overview</h2><div id="youtube2-ciXdF0KUMVc" class="youtube-wrap" data-attrs="{&quot;videoId&quot;:&quot;ciXdF0KUMVc&quot;,&quot;startTime&quot;:null,&quot;endTime&quot;:null}" data-component-name="Youtube2ToDOM"><div class="youtube-inner"><iframe src="https://www.youtube-nocookie.com/embed/ciXdF0KUMVc?rel=0&amp;autoplay=0&amp;showinfo=0&amp;enablejsapi=0" frameborder="0" loading="lazy" gesture="media" allow="autoplay; fullscreen" allowautoplay="true" allowfullscreen="true" width="728" height="409"></iframe></div></div><h3>Definition and Purpose</h3><p>PnP PowerShell is a special tool for Microsoft 365. It works with .NET Core 3.1 and .NET Framework 4.6.1. This tool has <a href="https://learn.microsoft.com/en-us/powershell/sharepoint/sharepoint-pnp/sharepoint-pnp-cmdlets">over 600 cmdlets</a> for different services, like SharePoint Online and Microsoft Teams. You can use PnP PowerShell to make your management tasks easier. It helps SharePoint admins and developers by giving them tools to work better with SharePoint and other Microsoft 365 services.</p><p>With PnP PowerShell, you can make your management process smoother. You do not have to learn hard tools like the SharePoint Online REST API or Client-Side Object Model (CSOM). Instead, you can use simple PowerShell cmdlets. This method creates new functions and <a href="https://www.techtarget.com/searchwindowsserver/tutorial/Use-PnP-PowerShell-commands-to-fortify-SharePoint-management">improves old ones</a>, making your scripting easier.</p><h3>Key Use Cases</h3><p>You can use PnP PowerShell in many ways to boost your productivity. Here are some common uses:</p><ul><li><p><strong>Automating Tasks</strong>: You can automate boring tasks, saving time and cutting down mistakes.</p></li><li><p><strong>Managing Sites</strong>: Quickly <a href="https://www.puntobello.ch/en/fabian/navigating-the-complex-world-of-login-mechanisms-real-life-insights-with-pnp.powershell/">create and manage sites, lists, and libraries</a>.</p></li><li><p><strong>Streamlining Workflows</strong>: Improve your workflows by using PnP PowerShell commands.</p></li></ul><p>Also, PnP PowerShell lets you upload and download files and manage permissions well. For example, you can use a custom site template with this command:</p><pre><code><code>Invoke-PnPSiteTemplate -Path &#8220;PnP-Provisioning-File.xml&#8221;
</code></code></pre><p>This command helps you set up SharePoint sites based on your needs. Overall, PnP PowerShell <a href="https://xferworx.com/the-right-way-to-install-pnp-powershell-for-sharepoint-use/">boosts productivity</a> in Microsoft 365, making it a must-have tool for admins.</p><h2>Evolution of PnP PowerShell</h2><h3>Historical Background</h3><p>PnP PowerShell started as a project by the community in 2014. It wanted to make managing SharePoint Online and other Microsoft 365 services easier. Before PnP PowerShell, admins had problems with different tools and not enough cmdlets. They often had to use complicated APIs or old methods. The community saw this problem and began creating a better solution.</p><p>As the project grew, more SharePoint and Microsoft 365 admins started using it. The community helped it grow, leading to many useful cmdlets. This teamwork helped PnP PowerShell meet users&#8217; needs well.</p><h3>Major Milestones</h3><p>There are several important milestones in the growth of PnP PowerShell:</p><ul><li><p><strong>2014</strong>: The first release of PnP PowerShell, focusing on SharePoint Online.</p></li><li><p><strong>2016</strong>: The first cmdlets for Microsoft Teams were added.</p></li><li><p><strong>2018</strong>: The project moved to a better governance model, helping community contributions.</p></li><li><p><strong>2020</strong>: The PnP PowerShell module was released on PowerShell Gallery, making it easier to install and update.</p></li><li><p><strong>2023</strong>: The latest version added many new features, such as:</p><ul><li><p>The <code>-CanSyncHubSitePermissions</code> parameter for the <code>Set-PnPSite</code> cmdlet.</p></li><li><p>New cmdlets like <code>Get-PnPProfileCardProperty</code>, <code>New-PnPProfileCardProperty</code>, and <code>Remove-PnPProfileCardProperty</code>.</p></li><li><p>Support for HTTP/2 for all HTTP requests, which improves performance.</p></li></ul></li></ul><p>These milestones show how the community is committed to improving PnP PowerShell. Each update adds new features that help you manage your Microsoft 365 environment better.</p><h3>Current State and Future Directions</h3><p>Today, PnP PowerShell is a key tool for automating Microsoft 365 tasks. With over 818 cmdlets, it covers many services, including SharePoint and Teams. The community keeps pushing for new ideas, making sure PnP PowerShell stays useful and strong.</p><p>In the future, PnP PowerShell plans to add even more cmdlets. You can look forward to better authentication methods and performance upgrades. The community&#8217;s help will be very important in shaping PnP PowerShell&#8217;s future. By accepting these changes, you can use this tool to its full potential for your admin tasks.</p><h2>Key Features of PnP PowerShell</h2><h3>Extensive Cmdlet Library</h3><p>One great thing about PnP PowerShell is its large cmdlet library. There are <a href="https://pnp.github.io/powershell/cmdlets/">over 774 cmdlets</a> you can use to manage different Microsoft 365 products. Each cmdlet has clear instructions, so you can learn how to use them easily. This big library helps you automate tasks, manage sites, and improve workflows without needing to use complicated APIs.</p><p>Here are some cmdlets that you might find useful:</p><ul><li><p><strong>Connect-PnPOnline</strong>: Connects to your Microsoft 365 environment.</p></li><li><p><strong>Get-PnPList</strong>: Gets information about lists in your SharePoint site.</p></li><li><p><strong>Set-PnPList</strong>: Changes properties of a specific list.</p></li></ul><p>These cmdlets help you do many admin tasks quickly and easily.</p><h3>Modern Authentication Methods</h3><p>Keeping your cloud environment safe is very important. PnP PowerShell supports different modern authentication methods to keep access secure. Below is a <a href="https://reshmeeauckloo.com/posts/powershell-pnp-get-started/">table that shows these methods</a>:</p><div class="captioned-image-container"><figure><a class="image-link image2" target="_blank" href="https://substackcdn.com/image/fetch/$s_!vipX!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F66052577-f75c-40b7-80b5-891857f12324_820x199.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!vipX!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F66052577-f75c-40b7-80b5-891857f12324_820x199.png 424w, https://substackcdn.com/image/fetch/$s_!vipX!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F66052577-f75c-40b7-80b5-891857f12324_820x199.png 848w, https://substackcdn.com/image/fetch/$s_!vipX!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F66052577-f75c-40b7-80b5-891857f12324_820x199.png 1272w, https://substackcdn.com/image/fetch/$s_!vipX!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F66052577-f75c-40b7-80b5-891857f12324_820x199.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!vipX!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F66052577-f75c-40b7-80b5-891857f12324_820x199.png" width="820" height="199" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/66052577-f75c-40b7-80b5-891857f12324_820x199.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:199,&quot;width&quot;:820,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:34407,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/png&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:&quot;https://m365.show/i/175433231?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F66052577-f75c-40b7-80b5-891857f12324_820x199.png&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!vipX!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F66052577-f75c-40b7-80b5-891857f12324_820x199.png 424w, https://substackcdn.com/image/fetch/$s_!vipX!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F66052577-f75c-40b7-80b5-891857f12324_820x199.png 848w, https://substackcdn.com/image/fetch/$s_!vipX!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F66052577-f75c-40b7-80b5-891857f12324_820x199.png 1272w, https://substackcdn.com/image/fetch/$s_!vipX!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F66052577-f75c-40b7-80b5-891857f12324_820x199.png 1456w" sizes="100vw" loading="lazy"></picture><div></div></div></a></figure></div><p>These methods help you log in securely. For example, the certificate-based method lets you connect using a certificate on your computer. This way, you can access securely without showing sensitive information.</p><p>Also, PnP PowerShell has features like <a href="https://pnp.github.io/powershell/cmdlets/Connect-PnPOnline.html">device login</a>, which opens a browser for you to log in. This makes logging in easier and better for users.</p><h3>Performance Enhancements</h3><p>Recent updates to PnP PowerShell have made it much faster. Here&#8217;s a <a href="https://www.linkedin.com/posts/nagaraju-kokkilagadda-74020a24_microsoft365-pnppowershell-activity-7357053163524268035-RQTk">table showing some of these improvements</a>:</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!IYS5!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F0b67821b-da07-47af-9f7e-565fee44f78b_817x327.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!IYS5!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F0b67821b-da07-47af-9f7e-565fee44f78b_817x327.png 424w, https://substackcdn.com/image/fetch/$s_!IYS5!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F0b67821b-da07-47af-9f7e-565fee44f78b_817x327.png 848w, https://substackcdn.com/image/fetch/$s_!IYS5!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F0b67821b-da07-47af-9f7e-565fee44f78b_817x327.png 1272w, https://substackcdn.com/image/fetch/$s_!IYS5!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F0b67821b-da07-47af-9f7e-565fee44f78b_817x327.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!IYS5!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F0b67821b-da07-47af-9f7e-565fee44f78b_817x327.png" width="817" height="327" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/0b67821b-da07-47af-9f7e-565fee44f78b_817x327.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:327,&quot;width&quot;:817,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:64664,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/png&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:&quot;https://m365.show/i/175433231?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F0b67821b-da07-47af-9f7e-565fee44f78b_817x327.png&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!IYS5!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F0b67821b-da07-47af-9f7e-565fee44f78b_817x327.png 424w, https://substackcdn.com/image/fetch/$s_!IYS5!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F0b67821b-da07-47af-9f7e-565fee44f78b_817x327.png 848w, https://substackcdn.com/image/fetch/$s_!IYS5!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F0b67821b-da07-47af-9f7e-565fee44f78b_817x327.png 1272w, https://substackcdn.com/image/fetch/$s_!IYS5!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F0b67821b-da07-47af-9f7e-565fee44f78b_817x327.png 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg role="img" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><title></title><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><p>These updates make PnP PowerShell faster and easier to use. You will see quicker load times and smoother actions when managing your SharePoint sites.</p><h3>Community Contributions</h3><p>The power of PnP PowerShell comes from its active community. The open-source project encourages developers to help out. Here&#8217;s a <a href="https://tahoeninja.blog/posts/popular-pnp-repositories-and-how-to-get-started/contributing">table showing the types of contributions</a> from the community:</p><div class="captioned-image-container"><figure><a class="image-link image2" target="_blank" href="https://substackcdn.com/image/fetch/$s_!EFUN!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F1a61d952-c76d-42a4-bf9d-7b4c99ace78e_816x235.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!EFUN!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F1a61d952-c76d-42a4-bf9d-7b4c99ace78e_816x235.png 424w, https://substackcdn.com/image/fetch/$s_!EFUN!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F1a61d952-c76d-42a4-bf9d-7b4c99ace78e_816x235.png 848w, https://substackcdn.com/image/fetch/$s_!EFUN!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F1a61d952-c76d-42a4-bf9d-7b4c99ace78e_816x235.png 1272w, https://substackcdn.com/image/fetch/$s_!EFUN!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F1a61d952-c76d-42a4-bf9d-7b4c99ace78e_816x235.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!EFUN!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F1a61d952-c76d-42a4-bf9d-7b4c99ace78e_816x235.png" width="816" height="235" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/1a61d952-c76d-42a4-bf9d-7b4c99ace78e_816x235.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:235,&quot;width&quot;:816,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:47944,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/png&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:&quot;https://m365.show/i/175433231?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F1a61d952-c76d-42a4-bf9d-7b4c99ace78e_816x235.png&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!EFUN!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F1a61d952-c76d-42a4-bf9d-7b4c99ace78e_816x235.png 424w, https://substackcdn.com/image/fetch/$s_!EFUN!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F1a61d952-c76d-42a4-bf9d-7b4c99ace78e_816x235.png 848w, https://substackcdn.com/image/fetch/$s_!EFUN!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F1a61d952-c76d-42a4-bf9d-7b4c99ace78e_816x235.png 1272w, https://substackcdn.com/image/fetch/$s_!EFUN!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F1a61d952-c76d-42a4-bf9d-7b4c99ace78e_816x235.png 1456w" sizes="100vw" loading="lazy"></picture><div></div></div></a></figure></div><p>Community-driven features, like the PnP Provisioning Engine, let you create site templates that fit your business needs. This teamwork helps PnP PowerShell grow and meet user needs.</p><h2>Best Practices for PnP PowerShell</h2><h3>Installation and Setup</h3><p>To start using PnP PowerShell, follow these steps to install it on Windows and macOS:</p><ol><li><p>Make sure you have <a href="https://pnp.github.io/powershell/articles/installation.html">PowerShell 7.4.0 or newer</a> on your computer.</p></li><li><p>For Windows, type this command: <code>Install-Module PnP.PowerShell -Scope CurrentUser</code> to get the stable version.</p></li><li><p>For macOS, use Homebrew to install PowerShell with: <code>brew cask install powershell</code>.</p></li><li><p>Register the package source by typing: <code>Register-PackageSource -Name PSNuGet -Location https://www.powershellgallery.com/api/v2 -ProviderName NuGet</code>.</p></li><li><p>Install PnP PowerShell by typing: <code>Install-Module PnP.PowerShell</code>.</p></li><li><p>Connect to SharePoint by using: <code>Connect-PnPOnline -Url https://your-sharepoint-url</code>.</p></li></ol><p>If you have problems during installation, <a href="https://github.com/pnp/powershell/discussions/58">check the PSModulePath environment variable</a>. This ensures the module paths are set correctly. Updating to the latest version of PnP PowerShell can fix many common issues.</p><h3>Secure Credential Management</h3><p>It is very important to manage credentials safely when using PnP PowerShell. Here are some best practices:</p><ul><li><p>Use <a href="https://pnp.github.io/powershell/articles/credentialmanagement.html">Microsoft Secret Management and Secret Store modules</a> to store credentials securely.</p></li><li><p>Never keep credentials directly in scripts.</p></li><li><p>Install the needed modules with <code>Install-Module -Name &#8220;Microsoft.PowerShell.SecretManagement&#8221;</code> and <code>Install-Module -Name &#8220;Microsoft.PowerShell.SecretStore&#8221;</code>.</p></li><li><p>Create and register a vault using <code>Register-SecretVault</code> and set it up correctly.</p></li><li><p>Use <code>Set-Secret</code> to add secrets and <code>Get-Secret</code> to get them safely.</p></li></ul><p>You can also use the <a href="https://www.harrytraynor.io/saving-your-accounts-for-powershell-pnp-in-the-windows-credential-manager/">Windows Credential Manager</a> or the Secure Store Service in SharePoint to keep credentials safe.</p><h3>Script Development Tips</h3><p>When writing scripts, focus on making them easy to read and maintain. Here are some tips to improve your scripts:</p><ul><li><p>Use clear naming rules (PascalCase for functions, camelCase for variables).</p></li><li><p>Break code into small, focused functions to make them reusable.</p></li><li><p>Use meaningful parameter names with validation checks.</p></li><li><p>Add comments to explain what scripts and functions do.</p></li><li><p>Use region blocks to organize large scripts into clear sections.</p></li></ul><p>These tips will help you write scripts that are easier to understand and manage.</p><h3>Error Handling Strategies</h3><p>Good error handling is key for strong scripts. Here are some ways to handle errors well:</p><ul><li><p>Expect errors in scripts to create reliable code.</p></li><li><p>Know the difference between terminating and non-terminating errors.</p></li><li><p>Use the <code>ErrorAction</code> parameter to control how errors are handled.</p></li><li><p>Use <code>Try/Catch/Finally</code> blocks to manage exceptions.</p></li></ul><p>Follow this structure for handling errors:</p><ol><li><p>Use <code>Try</code> to run code that might cause an error.</p></li><li><p>Use <code>Catch</code> to deal with any terminating errors that happen.</p></li><li><p>Use <code>Finally</code> to run cleanup code no matter if it succeeded or failed.</p></li></ol><p>By following these best practices, you can improve your experience with PnP PowerShell and make sure your scripts work well.</p><div><hr></div><p>In conclusion, PnP PowerShell is an important tool for managing Microsoft 365. It helps you <a href="https://evigur.com/the-complete-guide-to-sharepoint-permission-levels/">automate tasks, manage permissions, and make operations easier</a>. Here are some main points:</p><div class="captioned-image-container"><figure><a class="image-link image2" target="_blank" href="https://substackcdn.com/image/fetch/$s_!1fK8!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F95f2b447-0e47-43a1-a2d0-b34821b939b7_819x181.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!1fK8!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F95f2b447-0e47-43a1-a2d0-b34821b939b7_819x181.png 424w, https://substackcdn.com/image/fetch/$s_!1fK8!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F95f2b447-0e47-43a1-a2d0-b34821b939b7_819x181.png 848w, https://substackcdn.com/image/fetch/$s_!1fK8!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F95f2b447-0e47-43a1-a2d0-b34821b939b7_819x181.png 1272w, https://substackcdn.com/image/fetch/$s_!1fK8!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F95f2b447-0e47-43a1-a2d0-b34821b939b7_819x181.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!1fK8!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F95f2b447-0e47-43a1-a2d0-b34821b939b7_819x181.png" width="819" height="181" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/95f2b447-0e47-43a1-a2d0-b34821b939b7_819x181.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:181,&quot;width&quot;:819,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:39343,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/png&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:&quot;https://m365.show/i/175433231?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F95f2b447-0e47-43a1-a2d0-b34821b939b7_819x181.png&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!1fK8!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F95f2b447-0e47-43a1-a2d0-b34821b939b7_819x181.png 424w, https://substackcdn.com/image/fetch/$s_!1fK8!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F95f2b447-0e47-43a1-a2d0-b34821b939b7_819x181.png 848w, https://substackcdn.com/image/fetch/$s_!1fK8!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F95f2b447-0e47-43a1-a2d0-b34821b939b7_819x181.png 1272w, https://substackcdn.com/image/fetch/$s_!1fK8!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F95f2b447-0e47-43a1-a2d0-b34821b939b7_819x181.png 1456w" sizes="100vw" loading="lazy"></picture><div></div></div></a></figure></div><p>By using best practices, you can get the most out of PnP PowerShell. Use this strong tool to improve your productivity and efficiency in managing your Microsoft 365 environment.</p><h2>FAQ</h2><h3>What is PnP PowerShell?</h3><p>PnP PowerShell is a group of PowerShell cmdlets. They help make managing Microsoft 365 and SharePoint easier. You can use it to automate tasks, manage permissions, and improve workflows.</p><h3>How do I install PnP PowerShell?</h3><p>To install PnP PowerShell, type the command <code>Install-Module PnP.PowerShell -Scope CurrentUser</code> in PowerShell. Make sure you have PowerShell 7.4.0 or a newer version on your computer.</p><h3>Where can I find PnP PowerShell documentation?</h3><p>You can find detailed PnP PowerShell documentation on the official Microsoft site. This resource gives you guidance, cmdlet references, and examples to help you start using it.</p><h3>Are there any PnP samples available?</h3><p>Yes, many PnP samples are available from the community. You can check these samples on GitHub. They show different use cases and best practices for using PnP PowerShell well.</p><h3>How can I contribute to the PnP PowerShell community?</h3><p>You can help by sharing your scripts, giving feedback, or improving documentation. Joining the community on GitHub is a great way to work together and make PnP PowerShell resources better.</p>]]></content:encoded></item><item><title><![CDATA[Automating Business Processes with Workflows in Business Central]]></title><description><![CDATA[In today&#8217;s busy business world, there is immense pressure to enhance efficiency and minimize errors.]]></description><link>https://newsletter.m365.show/p/automating-business-processes-with</link><guid isPermaLink="false">https://newsletter.m365.show/p/automating-business-processes-with</guid><dc:creator><![CDATA[Mirko Peters - M365 Specialist]]></dc:creator><pubDate>Wed, 08 Oct 2025 13:26:09 GMT</pubDate><enclosure url="https://api.substack.com/feed/podcast/175619061/488737cf58186c64bad159cf6eb60695.mp3" length="0" type="audio/mpeg"/><content:encoded><![CDATA[<p>In today&#8217;s busy business world, there is immense pressure to enhance efficiency and minimize errors. Automating business processes can significantly assist in achieving these goals. Studies indicate that 31% of businesses have fully automated one critical task. Furthermore, by 2025, it is projected that 80% of companies will embrace smart automation. However, challenges may arise, such as resistance to change, a shortage of skilled workers, and difficulties in integrating with existing systems. Understanding these obstacles can pave the way for successful automation initiatives.</p><h2>Key Takeaways</h2><ul><li><p><a href="https://m365.show/p/what-is-microsoft-dataverse-and-how">Automating workflows</a> makes work 30-40% faster. This helps businesses finish tasks quickly and keep customers happy.</p></li><li><p>Automation cuts down on mistakes. It helps make sure that processes like financial reports and approvals are correct.</p></li><li><p>Business Central lets businesses change workflows to fit their needs. This improves how users feel and how well things work.</p></li><li><p>Using automated approval processes makes work easier. It lowers the amount of manual work and helps decisions get made faster.</p></li><li><p>Checking workflows regularly helps find ways to do better. This keeps efficiency and compliance going strong.</p></li></ul><h2>Why Automate Workflows</h2><p>Automating workflows in Business Central has many benefits. It can change how your business works. When you use automation, you can improve your efficiency and accuracy a lot.</p><h3>Efficiency Gains</h3><p>When you automate business processes, you make operations smoother. This helps you finish tasks faster and work better. Companies using automation in Business Central see great efficiency gains. For example, many businesses report:</p><div class="captioned-image-container"><figure><a class="image-link image2" target="_blank" href="https://substackcdn.com/image/fetch/$s_!YpiM!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F91b0bf4b-fd5b-4117-ba66-ea6a76885fca_816x129.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!YpiM!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F91b0bf4b-fd5b-4117-ba66-ea6a76885fca_816x129.png 424w, https://substackcdn.com/image/fetch/$s_!YpiM!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F91b0bf4b-fd5b-4117-ba66-ea6a76885fca_816x129.png 848w, https://substackcdn.com/image/fetch/$s_!YpiM!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F91b0bf4b-fd5b-4117-ba66-ea6a76885fca_816x129.png 1272w, https://substackcdn.com/image/fetch/$s_!YpiM!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F91b0bf4b-fd5b-4117-ba66-ea6a76885fca_816x129.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!YpiM!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F91b0bf4b-fd5b-4117-ba66-ea6a76885fca_816x129.png" width="816" height="129" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/91b0bf4b-fd5b-4117-ba66-ea6a76885fca_816x129.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:129,&quot;width&quot;:816,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:18355,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/png&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:false,&quot;topImage&quot;:true,&quot;internalRedirect&quot;:&quot;https://m365.show/i/175619061?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F91b0bf4b-fd5b-4117-ba66-ea6a76885fca_816x129.png&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!YpiM!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F91b0bf4b-fd5b-4117-ba66-ea6a76885fca_816x129.png 424w, https://substackcdn.com/image/fetch/$s_!YpiM!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F91b0bf4b-fd5b-4117-ba66-ea6a76885fca_816x129.png 848w, https://substackcdn.com/image/fetch/$s_!YpiM!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F91b0bf4b-fd5b-4117-ba66-ea6a76885fca_816x129.png 1272w, https://substackcdn.com/image/fetch/$s_!YpiM!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F91b0bf4b-fd5b-4117-ba66-ea6a76885fca_816x129.png 1456w" sizes="100vw" fetchpriority="high"></picture><div></div></div></a></figure></div><p>You can expect shorter processing times, more productivity, and happier customers. One big benefit of automating business processes is better efficiency. By <a href="https://www.moxo.com/blog/business-process-automation-benefits">removing bottlenecks</a>, you can handle more tasks quickly. This helps data and operations flow better. It means faster service for customers and quicker replies to partners. This is very important in a competitive market.</p><h3>Enhanced Accuracy</h3><p>Automation also helps improve accuracy. It makes sure every step of a process is done correctly. This <a href="https://www.cavallo.com/2024/06/25/optimizing-workflow-for-business-central/">reduces errors</a> and helps with compliance. Here are some key benefits of better accuracy through automation:</p><ul><li><p>Workflow automation lowers the chance of human errors in compliance reporting. It does this by standardizing data input and checking information.</p></li><li><p>It speeds up compliance processes by automating approvals and document submissions. This removes delays.</p></li><li><p>Automation gives real-time dashboards to track compliance tasks. This improves oversight across departments.</p></li></ul><p>By automating workflows, you can cut down the time spent on manual tasks. This leads to fewer mistakes. AI-powered compliance tools in Business Central <a href="https://cynoteck.com/blog-post/ai-in-business-central-smarter-workflows-and-better-decisions">automate checks</a> and create accurate financial reports for audits. They can quickly find problems in compliance documents. This ensures you follow financial and tax rules. This is very important for staying compliant in strict fields like healthcare and finance.</p><h2>Key Features of Business Central Workflows</h2><div id="youtube2-iZVkIulPpk8" class="youtube-wrap" data-attrs="{&quot;videoId&quot;:&quot;iZVkIulPpk8&quot;,&quot;startTime&quot;:null,&quot;endTime&quot;:null}" data-component-name="Youtube2ToDOM"><div class="youtube-inner"><iframe src="https://www.youtube-nocookie.com/embed/iZVkIulPpk8?rel=0&amp;autoplay=0&amp;showinfo=0&amp;enablejsapi=0" frameborder="0" loading="lazy" gesture="media" allow="autoplay; fullscreen" allowautoplay="true" allowfullscreen="true" width="728" height="409"></iframe></div></div><p>Business Central workflows have many important features. These features help you automate tasks and make processes easier. They let you create workflows that fit your business needs.</p><h3>Automated Flows</h3><p>Automated flows are the main part of Business Central workflows. They help you automate tasks that you do often. This saves time and cuts down on mistakes. Here are some key features of automated flows:</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!ipm1!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F4c6a2c9e-6fca-46fd-90fe-2d6952aa4307_819x324.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!ipm1!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F4c6a2c9e-6fca-46fd-90fe-2d6952aa4307_819x324.png 424w, https://substackcdn.com/image/fetch/$s_!ipm1!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F4c6a2c9e-6fca-46fd-90fe-2d6952aa4307_819x324.png 848w, https://substackcdn.com/image/fetch/$s_!ipm1!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F4c6a2c9e-6fca-46fd-90fe-2d6952aa4307_819x324.png 1272w, https://substackcdn.com/image/fetch/$s_!ipm1!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F4c6a2c9e-6fca-46fd-90fe-2d6952aa4307_819x324.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!ipm1!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F4c6a2c9e-6fca-46fd-90fe-2d6952aa4307_819x324.png" width="819" height="324" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/4c6a2c9e-6fca-46fd-90fe-2d6952aa4307_819x324.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:324,&quot;width&quot;:819,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:65532,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/png&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:&quot;https://m365.show/i/175619061?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F4c6a2c9e-6fca-46fd-90fe-2d6952aa4307_819x324.png&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!ipm1!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F4c6a2c9e-6fca-46fd-90fe-2d6952aa4307_819x324.png 424w, https://substackcdn.com/image/fetch/$s_!ipm1!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F4c6a2c9e-6fca-46fd-90fe-2d6952aa4307_819x324.png 848w, https://substackcdn.com/image/fetch/$s_!ipm1!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F4c6a2c9e-6fca-46fd-90fe-2d6952aa4307_819x324.png 1272w, https://substackcdn.com/image/fetch/$s_!ipm1!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F4c6a2c9e-6fca-46fd-90fe-2d6952aa4307_819x324.png 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg role="img" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><title></title><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><p>These features help you create automated flows that react to database changes and business events. For example, you can <a href="https://resources.westerncomputer.com/blog/dynamics-365-business-central-cloud-tips-and-tricks-power-automate-series-part-1-automated-flows-driven-by-events-and-transactions">alert a team when a new customer is added</a> or notify a manager when an item is changed.</p><h3>Customization Options</h3><p>Customization is important to make workflows fit your business needs. Business Central gives you many ways to customize workflows:</p><ul><li><p><a href="https://cargas.com/blog/unlock-growth-by-customizing-dynamics-365-business-central/">Personalization</a>: Change your views and interfaces to match your preferences.</p></li><li><p>Role-Based Profiles: Make custom profiles for different roles so users see what matters most.</p></li><li><p>Microsoft Power Apps: Create simple solutions to solve specific workflow problems.</p></li></ul><p>To customize your workflow, do these steps:</p><ol><li><p>Open a list page (like Customers).</p></li><li><p>Click the gear icon and select Personalize.</p></li><li><p>Use the red triangle icons to hide, move, or freeze columns.</p></li><li><p>To add fields, click + Field and drag your chosen column into the list.</p></li><li><p>Click Done to save your changes.</p></li></ol><p>By using these customization options, you can make sure your Business Central workflows fit your unique needs.</p><h2>Essential Automated Flows to Implement</h2><p>Automating workflows can greatly improve how your business runs. Two important automated flows to use are <strong>approval processes</strong> and <strong>event-driven triggers</strong>.</p><h3>Approval Processes</h3><p>Approval processes are important for keeping control over business transactions. When you automate these workflows, you can make operations smoother and cut down on manual tasks. Here are some main benefits of automated approval processes:</p><ul><li><p><a href="https://www.dexprodynamics.com/business-central-demos/customer-approval-process">They boost productivity by reducing manual work.</a></p></li><li><p>You can approve requests using Teams or Outlook, which speeds up decisions.</p></li><li><p>Automation lowers mistakes in data entry, making records accurate.</p></li><li><p>Quick welcome emails help engage customers without extra work.</p></li></ul><p>For example, think about the onboarding process. You can start it with a virtual agent in Teams. Customer data is sent and approved through Teams or Outlook, and the new customer record is made automatically in Business Central. This method saves time and keeps records accurate.</p><p>Common business processes that gain from automation include:</p><ul><li><p><a href="https://www.brooklandsolutions.com/business-central-automation/">Invoice Processing: Automates purchase requests, orders, or payment approvals.</a></p></li><li><p>Payment Matching: Cuts down time spent matching vendor invoices to orders.</p></li><li><p>Schedule Reporting and Notifications: Automatically creates and sends daily reports.</p></li><li><p>Sales Order Capturing: Scans customer emails for item requests and turns them into sales orders.</p></li><li><p>Instant Flows for Recurring Tasks: Manually triggers follow-up emails or blocks overdue customers.</p></li></ul><h3>Event-Driven Triggers</h3><p>Event-driven triggers are another strong feature of Business Central workflows. They let you automate tasks based on certain events, which improves response times and efficiency. For example, you can <a href="https://risingwave.com/blog/implementing-event-driven-workflows-in-dynamics-365-business-central/">automate financial tasks like invoicing and recording transactions.</a> This method increases accuracy and lessens manual work.</p><p>To create effective workflows, find key events that affect your operations. These could be sales order completions or service requests. By setting specific triggers and actions for these events, you can automate processes and greatly cut down response times.</p><h2>Setting Up Business Central Workflows</h2><p>Setting up workflows in Business Central is important for automating your business processes well. You can make operations smoother and boost productivity by using a clear method. Here&#8217;s how to create automated flows and keep track of them properly.</p><h3>Creating Automated Flows</h3><p>To create automated flows in Business Central, follow these steps:</p><ol><li><p>Select <strong>Search</strong> (<code>Alt</code>+<code>Q</code>) and type <strong>Workflows</strong>, then pick the related link.</p></li><li><p>Click the <strong>New</strong> action. The <strong>Workflow</strong> page will open.</p></li><li><p>In the <strong>Code</strong> field, enter up to 20 characters to name the workflow.</p></li><li><p>To make a flow from a workflow template, on the <strong>Workflows</strong> page, click the <strong>New Workflow from Template</strong> action.</p></li><li><p>In the <strong>Description</strong> field, explain what the workflow does.</p></li><li><p>In the <strong>Category</strong> field, say which category the workflow fits into.</p></li><li><p>In the <strong>When Event</strong> field, say what event must happen to start the workflow step.</p></li><li><p>In the <strong>On Condition</strong> field, say one or more conditions that must be true before the event in the <strong>When Event</strong> field can happen.</p></li><li><p>In the <strong>Then Response</strong> field, say what happens when the workflow event occurs.</p></li><li><p>On the <strong>Options for the Selected Response</strong> FastTab, choose options for the workflow response by selecting values in the different fields that show up.</p></li><li><p>Click the <strong>Increase Indent</strong> and <strong>Decrease Indent</strong> buttons to indent the event name in the <strong>When</strong> field to set the step&#8217;s place in the workflow.</p></li><li><p>Repeat steps 7 through 11 to add more workflow steps, either before or after the step you made.</p></li><li><p>Turn on the <strong>Enabled</strong> toggle to say that the workflow starts when the event on the first step of type <strong>Entry Point</strong> happens.</p></li></ol><p>By following these steps, you can create automated flows that improve your operational efficiency. You can also use workflow templates to make the process easier and keep things consistent in your organization.</p><h3>Monitoring and Governance</h3><p>Monitoring and governance are key for keeping your workflows working well. Here are some <a href="https://learn.microsoft.com/en-us/dynamics365/customerengagement/on-premises/customize/best-practices-workflow-processes">best practices to think about</a>:</p><ul><li><p><strong>Understand the Current State</strong>: Do a gap analysis to see what to keep or change.</p></li><li><p><strong><a href="https://centricconsulting.com/blog/business-process-governance-is-your-foundation-for-operational-excellence/">Define Goals and KPIs</a></strong>: Capture important data points by defining key performance indicators.</p></li><li><p><strong>Design the Governance Structure and Documentation</strong>: Align the governance structure with long-term goals and outline responsibilities.</p></li><li><p><strong>Implement Slowly</strong>: Use a phased approach to make transitions easier and keep productivity high.</p></li><li><p><strong>Communicate With and Train Stakeholders</strong>: Clearly share expectations and provide training.</p></li></ul><p>You can check the performance and effectiveness of your workflows using different methods:</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!9tMy!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F8da245fa-dbc6-4ada-8e5e-1c6b9712ca87_828x241.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!9tMy!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F8da245fa-dbc6-4ada-8e5e-1c6b9712ca87_828x241.png 424w, https://substackcdn.com/image/fetch/$s_!9tMy!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F8da245fa-dbc6-4ada-8e5e-1c6b9712ca87_828x241.png 848w, https://substackcdn.com/image/fetch/$s_!9tMy!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F8da245fa-dbc6-4ada-8e5e-1c6b9712ca87_828x241.png 1272w, https://substackcdn.com/image/fetch/$s_!9tMy!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F8da245fa-dbc6-4ada-8e5e-1c6b9712ca87_828x241.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!9tMy!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F8da245fa-dbc6-4ada-8e5e-1c6b9712ca87_828x241.png" width="828" height="241" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/8da245fa-dbc6-4ada-8e5e-1c6b9712ca87_828x241.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:241,&quot;width&quot;:828,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:52585,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/png&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:&quot;https://m365.show/i/175619061?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F8da245fa-dbc6-4ada-8e5e-1c6b9712ca87_828x241.png&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!9tMy!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F8da245fa-dbc6-4ada-8e5e-1c6b9712ca87_828x241.png 424w, https://substackcdn.com/image/fetch/$s_!9tMy!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F8da245fa-dbc6-4ada-8e5e-1c6b9712ca87_828x241.png 848w, https://substackcdn.com/image/fetch/$s_!9tMy!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F8da245fa-dbc6-4ada-8e5e-1c6b9712ca87_828x241.png 1272w, https://substackcdn.com/image/fetch/$s_!9tMy!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F8da245fa-dbc6-4ada-8e5e-1c6b9712ca87_828x241.png 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg role="img" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><title></title><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><p>By using these strategies, you can make sure your workflows stay efficient and compliant. Regular monitoring helps you find areas to improve and make needed changes.</p><div><hr></div><p>In conclusion, automating workflows in Business Central changes how you handle business tasks. You get better efficiency, accuracy, and control, which are important for growth. Here are some <a href="https://www.business.com/articles/workflow-automation/">main points from companies that have automated workflows successfully</a>:</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!YRvu!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F3d6d471c-0463-4d6e-b0a4-760e2d8dcafc_820x321.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!YRvu!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F3d6d471c-0463-4d6e-b0a4-760e2d8dcafc_820x321.png 424w, https://substackcdn.com/image/fetch/$s_!YRvu!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F3d6d471c-0463-4d6e-b0a4-760e2d8dcafc_820x321.png 848w, https://substackcdn.com/image/fetch/$s_!YRvu!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F3d6d471c-0463-4d6e-b0a4-760e2d8dcafc_820x321.png 1272w, https://substackcdn.com/image/fetch/$s_!YRvu!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F3d6d471c-0463-4d6e-b0a4-760e2d8dcafc_820x321.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!YRvu!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F3d6d471c-0463-4d6e-b0a4-760e2d8dcafc_820x321.png" width="820" height="321" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/3d6d471c-0463-4d6e-b0a4-760e2d8dcafc_820x321.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:321,&quot;width&quot;:820,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:67719,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/png&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:&quot;https://m365.show/i/175619061?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F3d6d471c-0463-4d6e-b0a4-760e2d8dcafc_820x321.png&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!YRvu!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F3d6d471c-0463-4d6e-b0a4-760e2d8dcafc_820x321.png 424w, https://substackcdn.com/image/fetch/$s_!YRvu!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F3d6d471c-0463-4d6e-b0a4-760e2d8dcafc_820x321.png 848w, https://substackcdn.com/image/fetch/$s_!YRvu!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F3d6d471c-0463-4d6e-b0a4-760e2d8dcafc_820x321.png 1272w, https://substackcdn.com/image/fetch/$s_!YRvu!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F3d6d471c-0463-4d6e-b0a4-760e2d8dcafc_820x321.png 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg role="img" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><title></title><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><p>By using automation, you prepare your business for long-term success. Features like <a href="https://softartsolutionsinc.com/dynamics-365/who-should-use-business-central-a-complete-guide-for-growing-businesses/">scalability and built-in reporting</a> help you focus on important projects. As you plan for the future, expect <a href="https://www.sharefile.com/resource/blogs/workflow-automation-trend">trends like AI, low-code platforms, and hyperautomation</a> to influence workflow automation. Dynamics 365 Business Central gives you the tools to make processes smoother, improve accuracy, and support steady growth. &#127775;</p><h2>FAQ</h2><h3>What are workflows in Business Central?</h3><p>Workflows in Business Central are automated steps that make tasks easier. They help you handle approvals, notifications, and changes in data quickly. By using workflows, you can <a href="https://m365.show/p/what-is-microsoft-dataverse-and-how">automate tasks you do often</a> and boost your productivity.</p><h3>How can I create automated flows?</h3><p>To create automated flows, go to the Workflows page in Business Central. Click on &#8220;New,&#8221; give your workflow a name, and set the events and conditions that start actions. This setup helps you automate certain business tasks well.</p><h3>What benefits do automated workflows provide?</h3><p>Automated workflows make things more efficient by cutting down on manual work. They also increase accuracy by reducing mistakes and ensuring rules are followed. Overall, these workflows help you save time and resources while keeping control over your business tasks.</p><h3>Can I customize workflows in Business Central?</h3><p>Yes, you can change workflows in Business Central. You can adjust templates, create role-based profiles, and change views. This flexibility lets you shape workflows to fit your business needs and improve how users experience them.</p><h3>How do I monitor workflow performance?</h3><p>You can check workflow performance using dashboards and tracking tools. These tools show important information, like response times and user activity. Regular checks help you find areas to improve and make sure you follow the rules.</p><p></p>]]></content:encoded></item><item><title><![CDATA[Streamlining Microsoft 365 Integration with the Graph Toolkit]]></title><description><![CDATA[Integrating Microsoft 365 Integration services into your apps makes them better.]]></description><link>https://newsletter.m365.show/p/streamlining-microsoft-365-integration</link><guid isPermaLink="false">https://newsletter.m365.show/p/streamlining-microsoft-365-integration</guid><dc:creator><![CDATA[Mirko Peters - M365 Specialist]]></dc:creator><pubDate>Tue, 07 Oct 2025 11:54:15 GMT</pubDate><enclosure url="https://api.substack.com/feed/podcast/175407644/6e362daeaa074b57d15179f7c68d2775.mp3" length="0" type="audio/mpeg"/><content:encoded><![CDATA[<p>Integrating <a href="https://www.linkedin.com/newsletters/m365-digital-workplace-daily-7340260578583592961/">Microsoft 365</a> Integration services into your apps makes them better. But, this can be hard. You might face problems like <a href="https://www.ion247.com/insights/microsoft-365-integration-challenges-and-how-to-overcome-them/">compatibility issues, data moving worries</a>, and getting users to adopt it. The Microsoft Graph Toolkit makes this easier. It gives you ready-made parts that help with login and keep branding the same. By using the toolkit, you can focus on creating cool features instead of dealing with Microsoft 365 Integration problems.</p><h2>Key Takeaways</h2><ul><li><p>The Microsoft Graph Toolkit makes it easier to use <a href="https://m365.show/p/what-is-microsoft-dataverse-and-how">Microsoft 365</a>. It gives ready-made parts for logging in and branding.</p></li><li><p>Using the toolkit makes logging in simpler. This lets developers build features without worrying about login problems.</p></li><li><p>The toolkit helps keep branding the same. This builds user trust and follows Microsoft&#8217;s design rules.</p></li><li><p>Follow certain steps to make integration easy. This includes making a PCF control project and setting up API permissions.</p></li><li><p>The toolkit helps manage risks by keeping data safe and keeping logs for audits.</p></li></ul><h2>Graph Toolkit Benefits</h2><div id="youtube2-KTOnbEvb1_A" class="youtube-wrap" data-attrs="{&quot;videoId&quot;:&quot;KTOnbEvb1_A&quot;,&quot;startTime&quot;:null,&quot;endTime&quot;:null}" data-component-name="Youtube2ToDOM"><div class="youtube-inner"><iframe src="https://www.youtube-nocookie.com/embed/KTOnbEvb1_A?rel=0&amp;autoplay=0&amp;showinfo=0&amp;enablejsapi=0" frameborder="0" loading="lazy" gesture="media" allow="autoplay; fullscreen" allowautoplay="true" allowfullscreen="true" width="728" height="409"></iframe></div></div><p>The Microsoft Graph Toolkit has many benefits. It makes it easier to use Microsoft 365 services in your apps. Two big benefits are easier login and steady branding.</p><h3>Easier Login</h3><p>Logging in can be hard and annoying for developers. The Microsoft Graph Toolkit makes this simple. It has ready-made parts that take care of login for you. You don&#8217;t have to worry about complicated OAuth steps, token updates, or asking for permission. The toolkit does all this, so you can focus on making important features.</p><blockquote><p>Developers like the Graph Toolkit because it is <a href="https://discussions.unity.com/t/unity-s-graph-toolkit-experimental-available-today-in-unity-6-2/1664909">easy to use</a>. Many say it is strong and flexible. It makes complicated systems simpler and helps speed up production. This shows how the toolkit can save you time and lower the chances of bugs in your apps.</p></blockquote><p>Also, the toolkit keeps your apps safely connected to Microsoft 365 services. This safety protects user data and builds trust. When users feel safe, they are more likely to use your app.</p><h3>Steady Branding</h3><p>Branding is very important for user experience and following rules. If branding is not steady, it can confuse users and make them distrustful. The Microsoft Graph Toolkit solves this by giving you parts that look like Microsoft&#8217;s design. This helps you make apps that match Microsoft 365 branding rules.</p><div class="captioned-image-container"><figure><a class="image-link image2" target="_blank" href="https://substackcdn.com/image/fetch/$s_!pxo3!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Feb5a68a8-be74-486f-a2cb-1335ef5e5306_685x183.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!pxo3!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Feb5a68a8-be74-486f-a2cb-1335ef5e5306_685x183.png 424w, https://substackcdn.com/image/fetch/$s_!pxo3!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Feb5a68a8-be74-486f-a2cb-1335ef5e5306_685x183.png 848w, https://substackcdn.com/image/fetch/$s_!pxo3!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Feb5a68a8-be74-486f-a2cb-1335ef5e5306_685x183.png 1272w, https://substackcdn.com/image/fetch/$s_!pxo3!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Feb5a68a8-be74-486f-a2cb-1335ef5e5306_685x183.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!pxo3!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Feb5a68a8-be74-486f-a2cb-1335ef5e5306_685x183.png" width="685" height="183" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/eb5a68a8-be74-486f-a2cb-1335ef5e5306_685x183.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:183,&quot;width&quot;:685,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:31673,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/png&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:&quot;https://m365.show/i/175407644?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Feb5a68a8-be74-486f-a2cb-1335ef5e5306_685x183.png&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!pxo3!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Feb5a68a8-be74-486f-a2cb-1335ef5e5306_685x183.png 424w, https://substackcdn.com/image/fetch/$s_!pxo3!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Feb5a68a8-be74-486f-a2cb-1335ef5e5306_685x183.png 848w, https://substackcdn.com/image/fetch/$s_!pxo3!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Feb5a68a8-be74-486f-a2cb-1335ef5e5306_685x183.png 1272w, https://substackcdn.com/image/fetch/$s_!pxo3!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Feb5a68a8-be74-486f-a2cb-1335ef5e5306_685x183.png 1456w" sizes="100vw" loading="lazy"></picture><div></div></div></a></figure></div><p>By using the toolkit, you follow Microsoft&#8217;s branding rules. This helps you avoid problems with compliance. A steady user interface makes the experience better and lowers the chances of phishing alerts. When users see a familiar look, they feel more at ease and confident using your app.</p><h2>Steps for Microsoft 365 Integration</h2><p><a href="https://m365.show/">Integrating Microsoft 365</a> into your apps needs careful planning. Follow these steps to set up your environment and use the Microsoft Graph Toolkit well.</p><h3>Environment Setup</h3><p>Setting up your environment is the first important step. Here are the <a href="https://www.manageengine.com/microsoft-365-management-reporting/system-requirements.html">basic system requirements</a> you need:</p><div class="captioned-image-container"><figure><a class="image-link image2" target="_blank" href="https://substackcdn.com/image/fetch/$s_!8COv!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F39ecf25d-22d3-4f72-bc83-fb719e5af74e_686x154.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!8COv!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F39ecf25d-22d3-4f72-bc83-fb719e5af74e_686x154.png 424w, https://substackcdn.com/image/fetch/$s_!8COv!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F39ecf25d-22d3-4f72-bc83-fb719e5af74e_686x154.png 848w, https://substackcdn.com/image/fetch/$s_!8COv!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F39ecf25d-22d3-4f72-bc83-fb719e5af74e_686x154.png 1272w, https://substackcdn.com/image/fetch/$s_!8COv!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F39ecf25d-22d3-4f72-bc83-fb719e5af74e_686x154.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!8COv!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F39ecf25d-22d3-4f72-bc83-fb719e5af74e_686x154.png" width="686" height="154" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/39ecf25d-22d3-4f72-bc83-fb719e5af74e_686x154.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:154,&quot;width&quot;:686,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:21810,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/png&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:&quot;https://m365.show/i/175407644?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F39ecf25d-22d3-4f72-bc83-fb719e5af74e_686x154.png&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!8COv!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F39ecf25d-22d3-4f72-bc83-fb719e5af74e_686x154.png 424w, https://substackcdn.com/image/fetch/$s_!8COv!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F39ecf25d-22d3-4f72-bc83-fb719e5af74e_686x154.png 848w, https://substackcdn.com/image/fetch/$s_!8COv!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F39ecf25d-22d3-4f72-bc83-fb719e5af74e_686x154.png 1272w, https://substackcdn.com/image/fetch/$s_!8COv!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F39ecf25d-22d3-4f72-bc83-fb719e5af74e_686x154.png 1456w" sizes="100vw" loading="lazy"></picture><div></div></div></a></figure></div><p>Once you have the right hardware, follow these steps:</p><ol><li><p><strong><a href="https://taerimhan.com/quick-takeaway-from-using-microsoft-graph-toolkit-in-pcf/">Create your PCF control project</a></strong> using the command <code>pac pcf init</code>.</p></li><li><p><strong>Install necessary npm packages</strong>:</p><ul><li><p><code>npm install react react-dom @microsoft/mgt-element @microsoft/mgt-msal-provider @microsoft/mgt-react</code></p></li></ul></li><li><p><strong><a href="https://m365.show/p/what-is-microsoft-dataverse-and-how">Create Azure AD App Registration</a></strong> and add your Power Apps environment URL as the redirect URI.</p></li><li><p><strong>Configure API Permissions</strong> by adding Microsoft Graph and Delegated permissions, then grant admin consent.</p></li><li><p><strong>Create and Configure MSAL Provider</strong> in your PCF control&#8217;s <code>index.ts</code> file.</p></li></ol><p>Be careful of common mistakes during this phase. Configuration errors can mess up your integration. Authentication problems may happen if user credentials are wrong. Also, API limit issues can slow down performance.</p><h3>Implementing Components</h3><p>After setting up your environment, you can start using the Microsoft Graph Toolkit components. Here are the <a href="https://learn.microsoft.com/en-us/graph/toolkit/get-started/use-toolkit-with-react">main components to focus on</a>:</p><div class="captioned-image-container"><figure><a class="image-link image2" target="_blank" href="https://substackcdn.com/image/fetch/$s_!ScX3!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Faf062b7c-103b-4b33-9be8-1121222feaaf_686x234.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!ScX3!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Faf062b7c-103b-4b33-9be8-1121222feaaf_686x234.png 424w, https://substackcdn.com/image/fetch/$s_!ScX3!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Faf062b7c-103b-4b33-9be8-1121222feaaf_686x234.png 848w, https://substackcdn.com/image/fetch/$s_!ScX3!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Faf062b7c-103b-4b33-9be8-1121222feaaf_686x234.png 1272w, https://substackcdn.com/image/fetch/$s_!ScX3!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Faf062b7c-103b-4b33-9be8-1121222feaaf_686x234.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!ScX3!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Faf062b7c-103b-4b33-9be8-1121222feaaf_686x234.png" width="686" height="234" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/af062b7c-103b-4b33-9be8-1121222feaaf_686x234.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:234,&quot;width&quot;:686,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:44954,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/png&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:&quot;https://m365.show/i/175407644?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Faf062b7c-103b-4b33-9be8-1121222feaaf_686x234.png&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!ScX3!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Faf062b7c-103b-4b33-9be8-1121222feaaf_686x234.png 424w, https://substackcdn.com/image/fetch/$s_!ScX3!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Faf062b7c-103b-4b33-9be8-1121222feaaf_686x234.png 848w, https://substackcdn.com/image/fetch/$s_!ScX3!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Faf062b7c-103b-4b33-9be8-1121222feaaf_686x234.png 1272w, https://substackcdn.com/image/fetch/$s_!ScX3!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Faf062b7c-103b-4b33-9be8-1121222feaaf_686x234.png 1456w" sizes="100vw" loading="lazy"></picture><div></div></div></a></figure></div><p>To make your implementation better, consider these <a href="https://blog.algorithmexamples.com/graph-algorithm/six-top-tips-for-effective-graph-coloring-algorithm-implementation/">helpful tips</a>:</p><ul><li><p>Learn about graph representation methods, like adjacency matrix and adjacency list, to pick the best one for your graph type.</p></li><li><p>Choose the right algorithm based on the graph&#8217;s features, whether it is dense or sparse.</p></li><li><p>Focus on good coding practices, like code readability and algorithm scalability, to improve performance.</p></li><li><p>Use strong testing and debugging methods to ensure your graph coloring solution works well.</p></li><li><p>Create a performance optimization plan that targets both algorithm efficiency and parallel processing.</p></li></ul><p>By following these steps, you can make your Microsoft 365 integration easier and use the Microsoft Graph Toolkit to its full potential.</p><h2>Challenges in Microsoft 365 Integration</h2><p>Putting Microsoft 365 into your apps can be tough. You might face problems with logging in and following rules. Knowing these challenges helps you deal with them better.</p><h3>Authentication Issues</h3><p>Login problems often happen when using Microsoft 365. Here are some common issues you might see:</p><div class="captioned-image-container"><figure><a class="image-link image2" target="_blank" href="https://substackcdn.com/image/fetch/$s_!BGFm!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa415cda9-38cd-4acf-9027-4936a99757bf_682x152.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!BGFm!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa415cda9-38cd-4acf-9027-4936a99757bf_682x152.png 424w, https://substackcdn.com/image/fetch/$s_!BGFm!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa415cda9-38cd-4acf-9027-4936a99757bf_682x152.png 848w, https://substackcdn.com/image/fetch/$s_!BGFm!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa415cda9-38cd-4acf-9027-4936a99757bf_682x152.png 1272w, https://substackcdn.com/image/fetch/$s_!BGFm!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa415cda9-38cd-4acf-9027-4936a99757bf_682x152.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!BGFm!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa415cda9-38cd-4acf-9027-4936a99757bf_682x152.png" width="682" height="152" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/a415cda9-38cd-4acf-9027-4936a99757bf_682x152.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:152,&quot;width&quot;:682,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:28098,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/png&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:&quot;https://m365.show/i/175407644?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa415cda9-38cd-4acf-9027-4936a99757bf_682x152.png&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!BGFm!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa415cda9-38cd-4acf-9027-4936a99757bf_682x152.png 424w, https://substackcdn.com/image/fetch/$s_!BGFm!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa415cda9-38cd-4acf-9027-4936a99757bf_682x152.png 848w, https://substackcdn.com/image/fetch/$s_!BGFm!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa415cda9-38cd-4acf-9027-4936a99757bf_682x152.png 1272w, https://substackcdn.com/image/fetch/$s_!BGFm!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa415cda9-38cd-4acf-9027-4936a99757bf_682x152.png 1456w" sizes="100vw" loading="lazy"></picture><div></div></div></a></figure></div><p>Microsoft knows that users have login issues, especially with <a href="https://cyberpress.org/microsoft-365-authentication-issues/">MFA sign-ins and password resets</a>. These problems come from recent changes meant to improve MFA. Sadly, these changes caused errors in logging in.</p><p>To fix these issues, you can use the Graph Toolkit. It makes logging in easier by handling OAuth steps and token updates automatically. This cuts down on the trouble of setting up safe logins. You can also create a policy that applies to all users and apps, making the login process smoother.</p><h3>Compliance Risks</h3><p>Following rules is another big worry when using Microsoft 365. You need to know about different risks, such as:</p><div class="captioned-image-container"><figure><a class="image-link image2" target="_blank" href="https://substackcdn.com/image/fetch/$s_!3ZS-!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F3e3681e6-35b7-45ff-9ff5-70dd7982d5b1_683x191.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!3ZS-!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F3e3681e6-35b7-45ff-9ff5-70dd7982d5b1_683x191.png 424w, https://substackcdn.com/image/fetch/$s_!3ZS-!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F3e3681e6-35b7-45ff-9ff5-70dd7982d5b1_683x191.png 848w, https://substackcdn.com/image/fetch/$s_!3ZS-!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F3e3681e6-35b7-45ff-9ff5-70dd7982d5b1_683x191.png 1272w, https://substackcdn.com/image/fetch/$s_!3ZS-!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F3e3681e6-35b7-45ff-9ff5-70dd7982d5b1_683x191.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!3ZS-!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F3e3681e6-35b7-45ff-9ff5-70dd7982d5b1_683x191.png" width="683" height="191" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/3e3681e6-35b7-45ff-9ff5-70dd7982d5b1_683x191.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:191,&quot;width&quot;:683,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:31288,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/png&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:&quot;https://m365.show/i/175407644?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F3e3681e6-35b7-45ff-9ff5-70dd7982d5b1_683x191.png&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!3ZS-!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F3e3681e6-35b7-45ff-9ff5-70dd7982d5b1_683x191.png 424w, https://substackcdn.com/image/fetch/$s_!3ZS-!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F3e3681e6-35b7-45ff-9ff5-70dd7982d5b1_683x191.png 848w, https://substackcdn.com/image/fetch/$s_!3ZS-!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F3e3681e6-35b7-45ff-9ff5-70dd7982d5b1_683x191.png 1272w, https://substackcdn.com/image/fetch/$s_!3ZS-!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F3e3681e6-35b7-45ff-9ff5-70dd7982d5b1_683x191.png 1456w" sizes="100vw" loading="lazy"></picture><div></div></div></a></figure></div><p>The Graph Toolkit helps reduce these <a href="https://sharegate.com/blog/compliance-technology">compliance risks</a>. It makes sure you follow rules about data access and keeping data safe. The toolkit keeps logs of activities for checking compliance and ensures you are ready for audits with detailed reports on data access. By using the toolkit, you can focus on creating features while still following Microsoft&#8217;s rules.</p><h2>Real-World Examples</h2><h3>Application Use Cases</h3><p>Many organizations have used the Graph Toolkit in their <a href="https://m365.show/">Microsoft 365 apps</a>. Here are some good examples:</p><ul><li><p><strong>Document Management</strong>: A company gets all Excel files (<code>.xlsx</code>) made in the last month from SharePoint and OneDrive with a special search. This makes it easier to find documents and helps people work better.</p></li><li><p><strong>Customer Data Integration</strong>: A business links different <a href="https://m365.show/p/what-is-microsoft-dataverse-and-how">customer information</a>, like emails, chats, and meetings. This helps new sales team members quickly find important details, so they can start working right away.</p></li></ul><p>These examples show how the Graph Toolkit makes Microsoft 365 integration easier. It lets organizations focus on what they do best.</p><h3>Code Snippets</h3><p>To help you see how to use the Graph Toolkit, here are some useful code snippets that show what it can do:</p><ul><li><p><strong><a href="https://agramont.net/blog/using-microsoft-graph-toolkit-astro-static-site/">Retrieving Microsoft Teams Data</a></strong>:</p></li></ul><pre><code><code>&lt;mgt-get resource=&#8221;/me/joinedTeams&#8221; scopes=&#8221;Directory.Read.All&#8221;&gt;
    &lt;template data-type=&#8221;value&#8221;&gt;
        &lt;div class=&#8221;bg-white text-black grid grid-cols-2 gap-4&#8221;&gt;
            &lt;div&gt;
                &lt;pre is:raw&gt;{{this.displayName}}&lt;/pre&gt;
            &lt;/div&gt;
            &lt;div&gt;
                &lt;pre is:raw&gt;{{this.description}}&lt;/pre&gt;
            &lt;/div&gt;
        &lt;/div&gt;
    &lt;/template&gt;
&lt;/mgt-get&gt;
</code></code></pre><ul><li><p><strong>Adding a Login Component</strong>:</p></li></ul><pre><code><code>&lt;script type=&#8221;module&#8221; is:inline&gt;
    import {
        registerMgtComponents,
        Providers,
        Msal2Provider
    } from &#8220;https://unpkg.com/@microsoft/mgt@4&#8221;;
    Providers.globalProvider = new Msal2Provider({
        clientId: &#8220;5b4f7809-e123-4e37-a0d3-661687c0a3fd&#8221;,
        scopes: [&#8221;user.read&#8221;, &#8220;calendars.read&#8221;, &#8220;Files.Read.All&#8221;],
        authority: &#8220;https://login.microsoftonline.com/0611c2d5-52a3-4c87-83fc-81903228fa38&#8221;,
        redirectUri: &#8220;http://localhost:4321/&#8221;,
    });
    registerMgtComponents();
&lt;/script&gt;
&lt;div id=&#8221;main&#8221;&gt;
    &lt;mgt-login show-presence login-view=&#8221;compact&#8221;&gt;&lt;/mgt-login&gt;
&lt;/div&gt;
</code></code></pre><p>These snippets show how you can easily add Microsoft 365 services to your apps using the Graph Toolkit. They help solve common problems with logging in and getting data.</p><div><hr></div><p>In short, the Microsoft Graph Toolkit has many benefits for adding Microsoft 365 services to your apps. You get a single API that makes it easier to connect everything. <a href="https://www.linkedin.com/pulse/guide-microsoft-graph-toolkit-marcel-broschk-08l7f">Ready-made parts save time and help you work better.</a> You can also automate simple tasks, which boosts efficiency and makes things better for users.</p><p>Think about these main benefits:</p><ul><li><p><a href="https://www.syskit.com/blog/microsoft-graph-api-guide/">One API to access different Microsoft 365 services.</a></p></li><li><p>Tools like Graph Explorer and Graph SDKs make integration easier.</p></li><li><p>Access to important Microsoft 365 services like Calendar, OneDrive, Outlook, Teams, and more.</p></li></ul><p>Look into the Graph Toolkit more. Use these ideas in your projects and see how easy integration can be.</p><h2>FAQ</h2><h3>What is the Microsoft Graph Toolkit?</h3><p>The Microsoft Graph Toolkit is a set of ready-made parts. It makes it easier to add Microsoft 365 services to your apps. You can use it for logging in, getting data, and keeping a consistent look.</p><h3>How does the Graph Toolkit improve security?</h3><p>The Graph Toolkit keeps logins safe. It takes care of OAuth steps, token updates, and permission requests by itself. This helps lower the chances of security problems in your apps.</p><h3>Can I customize the components in the Graph Toolkit?</h3><p>Yes, you can change the parts to match your brand. The toolkit has choices for design and setup, so you can keep a similar style in all your apps.</p><h3>What services can I access with the Graph Toolkit?</h3><p>You can use many <a href="https://m365.show/p/what-is-microsoft-dataverse-and-how">Microsoft 365 services</a>, like Outlook, OneDrive, Teams, and SharePoint. The toolkit gives you one API to connect with these services easily.</p><h3>Is the Graph Toolkit suitable for all developers?</h3><p>Yes! The Graph Toolkit is made for developers at any level. Whether you are just starting or have lots of experience, you can easily add Microsoft 365 services to your apps with the toolkit.</p>]]></content:encoded></item><item><title><![CDATA[Optimizing Microsoft 365 Automation: PowerShell vs Graph API]]></title><description><![CDATA[Automation is very important in Microsoft 365 Automation.]]></description><link>https://newsletter.m365.show/p/optimizing-microsoft-365-automation</link><guid isPermaLink="false">https://newsletter.m365.show/p/optimizing-microsoft-365-automation</guid><dc:creator><![CDATA[Mirko Peters - M365 Specialist]]></dc:creator><pubDate>Tue, 07 Oct 2025 05:26:29 GMT</pubDate><enclosure url="https://api.substack.com/feed/podcast/175406145/f31274ff32bb21794ccf9ba313ab6b35.mp3" length="0" type="audio/mpeg"/><content:encoded><![CDATA[<p>Automation is very important in <a href="https://www.linkedin.com/newsletters/m365-digital-workplace-daily-7340260578583592961/">Microsoft 365</a> Automation. It makes tasks easier and helps administrators work better. When you think about automating admin tasks in Microsoft 365 Automation, you might ask which tool is better: PowerShell or Graph API? To choose, think about different factors. These include how well it works, what it covers, how fast it is, and how easy it is to get data. Each of these factors affects how well you can automate tasks and help your organization.</p><div class="captioned-image-container"><figure><a class="image-link image2" target="_blank" href="https://substackcdn.com/image/fetch/$s_!9wtj!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F9bd8356a-e458-4915-9068-4e23f7f3099b_685x189.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!9wtj!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F9bd8356a-e458-4915-9068-4e23f7f3099b_685x189.png 424w, https://substackcdn.com/image/fetch/$s_!9wtj!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F9bd8356a-e458-4915-9068-4e23f7f3099b_685x189.png 848w, https://substackcdn.com/image/fetch/$s_!9wtj!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F9bd8356a-e458-4915-9068-4e23f7f3099b_685x189.png 1272w, https://substackcdn.com/image/fetch/$s_!9wtj!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F9bd8356a-e458-4915-9068-4e23f7f3099b_685x189.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!9wtj!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F9bd8356a-e458-4915-9068-4e23f7f3099b_685x189.png" width="685" height="189" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/9bd8356a-e458-4915-9068-4e23f7f3099b_685x189.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:189,&quot;width&quot;:685,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:33591,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/png&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:false,&quot;topImage&quot;:true,&quot;internalRedirect&quot;:&quot;https://m365.show/i/175406145?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F9bd8356a-e458-4915-9068-4e23f7f3099b_685x189.png&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!9wtj!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F9bd8356a-e458-4915-9068-4e23f7f3099b_685x189.png 424w, https://substackcdn.com/image/fetch/$s_!9wtj!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F9bd8356a-e458-4915-9068-4e23f7f3099b_685x189.png 848w, https://substackcdn.com/image/fetch/$s_!9wtj!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F9bd8356a-e458-4915-9068-4e23f7f3099b_685x189.png 1272w, https://substackcdn.com/image/fetch/$s_!9wtj!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F9bd8356a-e458-4915-9068-4e23f7f3099b_685x189.png 1456w" sizes="100vw" fetchpriority="high"></picture><div></div></div></a></figure></div><h2>Key Takeaways</h2><ul><li><p>PowerShell is good for fast tasks in Microsoft 365 automation. It helps you manage users and licenses easily.</p></li><li><p>Graph API is better for complicated automation. It connects many Microsoft services and works well with large data.</p></li><li><p>Pick PowerShell for quick needs and simple tasks. Use Graph API for long-term plans and bigger workflows.</p></li><li><p>Both tools can work together. Use PowerShell for quick fixes and Graph API for larger automation projects.</p></li><li><p>Knowing the strengths of each tool helps you make your Microsoft 365 experience better and automate tasks well.</p></li></ul><h2>PowerShell Overview</h2><div id="youtube2-IHrGresKu2w" class="youtube-wrap" data-attrs="{&quot;videoId&quot;:&quot;IHrGresKu2w&quot;,&quot;startTime&quot;:null,&quot;endTime&quot;:null}" data-component-name="Youtube2ToDOM"><div class="youtube-inner"><iframe src="https://www.youtube-nocookie.com/embed/IHrGresKu2w?rel=0&amp;autoplay=0&amp;showinfo=0&amp;enablejsapi=0" frameborder="0" loading="lazy" gesture="media" allow="autoplay; fullscreen" allowautoplay="true" allowfullscreen="true" width="728" height="409"></iframe></div></div><p>PowerShell is a strong scripting language and command-line tool for system management. It is very important for Microsoft 365 automation. It helps you manage and automate tasks easily.</p><h3>PowerShell Features</h3><p>PowerShell has many main features that help you automate tasks in Microsoft 365. Here&#8217;s a list of its key features:</p><div class="captioned-image-container"><figure><a class="image-link image2" target="_blank" href="https://substackcdn.com/image/fetch/$s_!LjSb!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F9c20b358-7944-439a-93aa-b4338f952e4f_684x158.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!LjSb!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F9c20b358-7944-439a-93aa-b4338f952e4f_684x158.png 424w, https://substackcdn.com/image/fetch/$s_!LjSb!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F9c20b358-7944-439a-93aa-b4338f952e4f_684x158.png 848w, https://substackcdn.com/image/fetch/$s_!LjSb!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F9c20b358-7944-439a-93aa-b4338f952e4f_684x158.png 1272w, https://substackcdn.com/image/fetch/$s_!LjSb!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F9c20b358-7944-439a-93aa-b4338f952e4f_684x158.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!LjSb!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F9c20b358-7944-439a-93aa-b4338f952e4f_684x158.png" width="684" height="158" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/9c20b358-7944-439a-93aa-b4338f952e4f_684x158.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:158,&quot;width&quot;:684,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:26755,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/png&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:&quot;https://m365.show/i/175406145?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F9c20b358-7944-439a-93aa-b4338f952e4f_684x158.png&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!LjSb!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F9c20b358-7944-439a-93aa-b4338f952e4f_684x158.png 424w, https://substackcdn.com/image/fetch/$s_!LjSb!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F9c20b358-7944-439a-93aa-b4338f952e4f_684x158.png 848w, https://substackcdn.com/image/fetch/$s_!LjSb!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F9c20b358-7944-439a-93aa-b4338f952e4f_684x158.png 1272w, https://substackcdn.com/image/fetch/$s_!LjSb!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F9c20b358-7944-439a-93aa-b4338f952e4f_684x158.png 1456w" sizes="100vw" loading="lazy"></picture><div></div></div></a></figure></div><p>These features help you do many admin tasks easily.</p><h3>PowerShell Advantages</h3><p>Using PowerShell for Microsoft 365 automation has many benefits:</p><ul><li><p><strong>Deeper Configurations</strong>: PowerShell lets you make deeper settings that you can&#8217;t do in the Microsoft 365 admin center. This gives you more control over your system.</p></li><li><p><strong>Efficiency in Bulk Operations</strong>: <a href="https://www.hornetsecurity.com/en/blog/powershell-for-m365/">You can do many tasks at once quickly.</a> This saves a lot of time compared to doing them one by one.</p></li><li><p><strong>Robust Data Filtering</strong>: PowerShell has strong data filtering tools. You can get specific data that might not show up in the graphical user interface (GUI).</p></li></ul><p>PowerShell also works with different authentication methods, making it easier to use for automation. For running Microsoft scripts without a user, you can use app-only authentication. This way, you don&#8217;t need to keep user passwords on your computer. Also, certificate-based authentication helps with automation using Microsoft Entra apps and self-signed certificates.</p><p>To set up app-only authentication, do these steps:</p><ol><li><p><a href="https://learn.microsoft.com/en-us/powershell/exchange/app-only-auth-powershell-v2">Create an App Only application registration in Entra ID.</a></p></li><li><p>Use a public/private key pair certificate for authentication.</p></li><li><p>Connect using PnP PowerShell with the private key.</p></li></ol><p>After connecting to Exchange Online PowerShell, <a href="https://learn.microsoft.com/en-us/powershell/exchange/connect-to-exchange-online-powershell">role-based access control (RBAC) controls the cmdlets and settings you can use.</a> This makes sure only allowed users can do certain tasks.</p><p>PowerShell scripts are reliable in big Microsoft 365 systems. Many organizations have seen big improvements by combining scripts and using central policies. For example, Dehner cut onboarding time from 20 minutes to just 5 minutes per worker, saving over 500 hours of manual work each year. This change shows how PowerShell automation can help businesses succeed.</p><h2>Graph API Overview</h2><p>The Microsoft Graph API is a strong tool for automating tasks in Microsoft 365. It gives you one way to access many Microsoft services. This makes it easier to manage resources and automate workflows.</p><h3>Graph API Features</h3><p>The Graph API has several important features that help you automate Microsoft 365 tasks. Here&#8217;s a summary of its <a href="https://codimite.ai/blog/unlocking-microsoft-365-with-microsoft-graph-api-a-guide-to-integration-and-authentication/">main features</a>:</p><div class="captioned-image-container"><figure><a class="image-link image2" target="_blank" href="https://substackcdn.com/image/fetch/$s_!CTJf!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F731be7bd-4f35-44e7-882b-0af1e9ddafa6_683x222.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!CTJf!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F731be7bd-4f35-44e7-882b-0af1e9ddafa6_683x222.png 424w, https://substackcdn.com/image/fetch/$s_!CTJf!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F731be7bd-4f35-44e7-882b-0af1e9ddafa6_683x222.png 848w, https://substackcdn.com/image/fetch/$s_!CTJf!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F731be7bd-4f35-44e7-882b-0af1e9ddafa6_683x222.png 1272w, https://substackcdn.com/image/fetch/$s_!CTJf!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F731be7bd-4f35-44e7-882b-0af1e9ddafa6_683x222.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!CTJf!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F731be7bd-4f35-44e7-882b-0af1e9ddafa6_683x222.png" width="683" height="222" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/731be7bd-4f35-44e7-882b-0af1e9ddafa6_683x222.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:222,&quot;width&quot;:683,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:40666,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/png&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:&quot;https://m365.show/i/175406145?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F731be7bd-4f35-44e7-882b-0af1e9ddafa6_683x222.png&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!CTJf!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F731be7bd-4f35-44e7-882b-0af1e9ddafa6_683x222.png 424w, https://substackcdn.com/image/fetch/$s_!CTJf!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F731be7bd-4f35-44e7-882b-0af1e9ddafa6_683x222.png 848w, https://substackcdn.com/image/fetch/$s_!CTJf!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F731be7bd-4f35-44e7-882b-0af1e9ddafa6_683x222.png 1272w, https://substackcdn.com/image/fetch/$s_!CTJf!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F731be7bd-4f35-44e7-882b-0af1e9ddafa6_683x222.png 1456w" sizes="100vw" loading="lazy"></picture><div></div></div></a></figure></div><p>These features help you make your processes smoother and improve efficiency in your organization.</p><h3>Graph API Advantages</h3><p>Using the Graph API for Microsoft 365 automation has many benefits:</p><ul><li><p><strong><a href="https://learn.microsoft.com/en-us/graph/overview">Single Endpoint</a></strong>: You can get a lot of data and insights through one endpoint (</p></li></ul><p>https://graph.microsoft.com</p><ul><li><p>). This makes your automation easier and less complicated.</p></li><li><p><strong>Integration with External Data</strong>: Microsoft Graph API connectors let you bring in outside data to Microsoft Graph services. This connection improves your Microsoft 365 experience by linking different data sources.</p></li><li><p><strong>Scalability</strong>: The Graph API is made for <a href="https://learn.microsoft.com/en-us/graph/overview-major-services">strong integrations</a>, data queries, and workflow automation. It helps you add Microsoft 365 features into custom enterprise applications easily. But, be careful because the API <a href="https://emailsecurity.checkpoint.com/blog/simplicity-reliability-and-flexibility-with-deployments">might slow down during busy times</a>, which can affect performance.</p></li><li><p><strong>Cloud Infrastructure</strong>: Microsoft 365 runs on the Microsoft Azure system. This setup offers data centers that are safe, can change resources quickly, and have a strong design. These features make sure your automation solutions stay reliable and efficient.</p></li></ul><p>By using these advantages, you can build scalable and effective automation solutions that fit your organization&#8217;s needs. The Graph API helps you automate tasks well while keeping your applications responsive and secure.</p><h2>Performance in Microsoft 365 Automation</h2><p>When thinking about performance in Microsoft 365 automation, speed and efficiency matter a lot. You want your automation tasks to be quick and effective. PowerShell and Graph API both have special benefits in this area.</p><h3>Speed and Efficiency</h3><p>PowerShell usually works faster for smaller tasks. But when there are many objects, you might see a change in speed. The Graph API does better with larger datasets. It uses smart batch methods that cut down processing time a lot.</p><p>Here&#8217;s a comparison of regular methods versus smart batch methods for different endpoints:</p><div class="captioned-image-container"><figure><a class="image-link image2" target="_blank" href="https://substackcdn.com/image/fetch/$s_!MF-H!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F656bfd67-9830-4fa1-ac75-c44a27b7d3a9_685x177.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!MF-H!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F656bfd67-9830-4fa1-ac75-c44a27b7d3a9_685x177.png 424w, https://substackcdn.com/image/fetch/$s_!MF-H!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F656bfd67-9830-4fa1-ac75-c44a27b7d3a9_685x177.png 848w, https://substackcdn.com/image/fetch/$s_!MF-H!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F656bfd67-9830-4fa1-ac75-c44a27b7d3a9_685x177.png 1272w, https://substackcdn.com/image/fetch/$s_!MF-H!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F656bfd67-9830-4fa1-ac75-c44a27b7d3a9_685x177.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!MF-H!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F656bfd67-9830-4fa1-ac75-c44a27b7d3a9_685x177.png" width="685" height="177" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/656bfd67-9830-4fa1-ac75-c44a27b7d3a9_685x177.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:177,&quot;width&quot;:685,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:31924,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/png&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:&quot;https://m365.show/i/175406145?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F656bfd67-9830-4fa1-ac75-c44a27b7d3a9_685x177.png&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!MF-H!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F656bfd67-9830-4fa1-ac75-c44a27b7d3a9_685x177.png 424w, https://substackcdn.com/image/fetch/$s_!MF-H!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F656bfd67-9830-4fa1-ac75-c44a27b7d3a9_685x177.png 848w, https://substackcdn.com/image/fetch/$s_!MF-H!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F656bfd67-9830-4fa1-ac75-c44a27b7d3a9_685x177.png 1272w, https://substackcdn.com/image/fetch/$s_!MF-H!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F656bfd67-9830-4fa1-ac75-c44a27b7d3a9_685x177.png 1456w" sizes="100vw" loading="lazy"></picture><div></div></div></a></figure></div><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!NLx9!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F46e42755-11b9-4932-9931-ece960b136e6_1024x768.webp" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!NLx9!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F46e42755-11b9-4932-9931-ece960b136e6_1024x768.webp 424w, https://substackcdn.com/image/fetch/$s_!NLx9!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F46e42755-11b9-4932-9931-ece960b136e6_1024x768.webp 848w, https://substackcdn.com/image/fetch/$s_!NLx9!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F46e42755-11b9-4932-9931-ece960b136e6_1024x768.webp 1272w, https://substackcdn.com/image/fetch/$s_!NLx9!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F46e42755-11b9-4932-9931-ece960b136e6_1024x768.webp 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!NLx9!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F46e42755-11b9-4932-9931-ece960b136e6_1024x768.webp" width="1024" height="768" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/46e42755-11b9-4932-9931-ece960b136e6_1024x768.webp&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:768,&quot;width&quot;:1024,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:10562,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/webp&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:&quot;https://m365.show/i/175406145?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F46e42755-11b9-4932-9931-ece960b136e6_1024x768.webp&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!NLx9!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F46e42755-11b9-4932-9931-ece960b136e6_1024x768.webp 424w, https://substackcdn.com/image/fetch/$s_!NLx9!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F46e42755-11b9-4932-9931-ece960b136e6_1024x768.webp 848w, https://substackcdn.com/image/fetch/$s_!NLx9!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F46e42755-11b9-4932-9931-ece960b136e6_1024x768.webp 1272w, https://substackcdn.com/image/fetch/$s_!NLx9!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F46e42755-11b9-4932-9931-ece960b136e6_1024x768.webp 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg role="img" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><title></title><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><p>This data shows how the Graph API can automate tasks better, especially with lots of data.</p><h3>Resource Consumption</h3><p><a href="https://m365.show/p/what-is-microsoft-dataverse-and-how">Resource use</a> is another key point. PowerShell scripts can use a lot of resources, especially when running without a user. This can cause problems in bigger environments. In contrast, Graph API is made to work well within the Azure system. It scales nicely and uses fewer resources, making it great for complex workload automation.</p><p>Using the Graph API lets you automate tasks without stressing your system. This efficiency helps keep everything running smoothly in your Microsoft 365 environment. By picking the right tool, you can improve your automation efforts and make sure your resources are used well.</p><h2>Integration and User Provisioning</h2><p>When you automate tasks in Microsoft 365, connecting with other tools is very important. Both PowerShell and Graph API have special features for this.</p><h3>Compatibility with Other Tools</h3><p>PowerShell and Graph API work well with many <a href="https://medhacloud.com/blog/how-does-microsoft-365-e3-handle-api-integrations-with-third-party-tools/">third-party tools</a>. Here&#8217;s a quick list of some tools that work together:</p><div class="captioned-image-container"><figure><a class="image-link image2" target="_blank" href="https://substackcdn.com/image/fetch/$s_!-MM8!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F29918ce1-4632-4cb2-8ebc-711e04efddd6_679x102.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!-MM8!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F29918ce1-4632-4cb2-8ebc-711e04efddd6_679x102.png 424w, https://substackcdn.com/image/fetch/$s_!-MM8!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F29918ce1-4632-4cb2-8ebc-711e04efddd6_679x102.png 848w, https://substackcdn.com/image/fetch/$s_!-MM8!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F29918ce1-4632-4cb2-8ebc-711e04efddd6_679x102.png 1272w, https://substackcdn.com/image/fetch/$s_!-MM8!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F29918ce1-4632-4cb2-8ebc-711e04efddd6_679x102.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!-MM8!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F29918ce1-4632-4cb2-8ebc-711e04efddd6_679x102.png" width="679" height="102" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/29918ce1-4632-4cb2-8ebc-711e04efddd6_679x102.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:102,&quot;width&quot;:679,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:17630,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/png&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:&quot;https://m365.show/i/175406145?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F29918ce1-4632-4cb2-8ebc-711e04efddd6_679x102.png&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!-MM8!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F29918ce1-4632-4cb2-8ebc-711e04efddd6_679x102.png 424w, https://substackcdn.com/image/fetch/$s_!-MM8!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F29918ce1-4632-4cb2-8ebc-711e04efddd6_679x102.png 848w, https://substackcdn.com/image/fetch/$s_!-MM8!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F29918ce1-4632-4cb2-8ebc-711e04efddd6_679x102.png 1272w, https://substackcdn.com/image/fetch/$s_!-MM8!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F29918ce1-4632-4cb2-8ebc-711e04efddd6_679x102.png 1456w" sizes="100vw" loading="lazy"></picture><div></div></div></a></figure></div><p>The Microsoft Graph PowerShell SDK gives IT admins a flexible way to manage services in Microsoft 365. You can handle different services like Entra ID and Teams. This flexibility helps you make your automation work better.</p><h3>User Provisioning Challenges</h3><p>User provisioning can have some problems when using PowerShell or Graph API. Here are some common issues you might see:</p><ul><li><p>Problems with permissions</p></li><li><p>Issues with authentication methods</p></li><li><p>Trouble handling errors</p></li></ul><p>You need to set up your app correctly and give permission consent. It&#8217;s important to know the difference between delegated and application permissions. Often, you will need admin approval for application permissions. Without this, you might get <a href="https://practical365.com/common-graph-api-errors-powershell/">403 errors</a>, which mean you don&#8217;t have enough permission.</p><p>PowerShell also has its own challenges in user provisioning. For example, the ending of <a href="https://practical365.com/challenges-of-powershell-scripting-with-microsoft-365/">PowerShell modules</a> and changes in cmdlets can mess up automated jobs. Many organizations don&#8217;t realize they depend on PowerShell scripts, making maintenance harder. Security issues, like the ending of Basic Authentication in Exchange Online, require regular checks and updates of scripts.</p><p>On the other hand, Microsoft Graph API acts as a complete gateway to many Microsoft 365 services. This single programmability model makes user provisioning easier. You can create applications that work with a lot of user data, making the process smoother than with PowerShell.</p><p>By knowing these integration and provisioning challenges, you can better handle the difficulties of Microsoft 365 automation.</p><h2>Community Support for Automation</h2><p>Community support is very important for improving your experience with Microsoft 365 automation. Both PowerShell and Graph API have lots of guides and tutorials to help you start and fix problems.</p><h3>Documentation and Tutorials</h3><p>The official guides for PowerShell and Graph API are detailed and easy to use. Here&#8217;s a quick look at what you can find:</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!9Y60!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F8450e4c6-63bd-4b6c-a884-fecda780657f_684x293.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!9Y60!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F8450e4c6-63bd-4b6c-a884-fecda780657f_684x293.png 424w, https://substackcdn.com/image/fetch/$s_!9Y60!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F8450e4c6-63bd-4b6c-a884-fecda780657f_684x293.png 848w, https://substackcdn.com/image/fetch/$s_!9Y60!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F8450e4c6-63bd-4b6c-a884-fecda780657f_684x293.png 1272w, https://substackcdn.com/image/fetch/$s_!9Y60!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F8450e4c6-63bd-4b6c-a884-fecda780657f_684x293.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!9Y60!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F8450e4c6-63bd-4b6c-a884-fecda780657f_684x293.png" width="684" height="293" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/8450e4c6-63bd-4b6c-a884-fecda780657f_684x293.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:293,&quot;width&quot;:684,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:48295,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/png&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:&quot;https://m365.show/i/175406145?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F8450e4c6-63bd-4b6c-a884-fecda780657f_684x293.png&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!9Y60!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F8450e4c6-63bd-4b6c-a884-fecda780657f_684x293.png 424w, https://substackcdn.com/image/fetch/$s_!9Y60!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F8450e4c6-63bd-4b6c-a884-fecda780657f_684x293.png 848w, https://substackcdn.com/image/fetch/$s_!9Y60!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F8450e4c6-63bd-4b6c-a884-fecda780657f_684x293.png 1272w, https://substackcdn.com/image/fetch/$s_!9Y60!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F8450e4c6-63bd-4b6c-a884-fecda780657f_684x293.png 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg role="img" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><title></title><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><p>You can find tutorials for all skill levels. For example, the <strong><a href="https://practical365.com/introduction-to-the-microsoft-graph-powershell-sdk/">Introduction to the Microsoft Graph PowerShell SDK</a></strong> makes learning easier. Another helpful guide is <strong><a href="https://learn.microsoft.com/en-us/graph/tutorials/powershell">Building PowerShell scripts with Microsoft Graph</a></strong>, which shows you how to create scripts that access user data.</p><h3>Community Contributions</h3><p>The community helps a lot by creating scripts and solutions for PowerShell and Graph API automation. Here are some important projects and contributions:</p><ul><li><p>The <strong><a href="https://pnp.github.io/powershell/">PnP PowerShell</a> module</strong> is <a href="https://www.syskit.com/blog/top-office-365-powershell-scripts/">very popular, with many downloads</a>. This open-source project offers many resources for automation.</p></li><li><p><strong>Microsoft365DSC</strong> helps automate tenant setup and checks configurations, showing community efforts to make management easier.</p></li><li><p>Scripts made by Tony Redmond help find unused Microsoft 365 Groups and Teams, solving common management issues.</p></li><li><p>Satheshwaran Manoharan&#8217;s script exports Distribution groups and their members, providing useful solutions for many users.</p></li></ul><p>Also, there are several community projects that improve Microsoft 365 automation:</p><ul><li><p><a href="https://github.com/pnp/pnpjs">PnPjs</a> &#8211; A framework repository for Microsoft 365.</p></li><li><p><a href="https://pnp.github.io/cli-microsoft365/">CLI Microsoft 365</a> &#8211; A command line tool for managing Office 365 settings.</p></li><li><p><a href="https://pnp.github.io/powershell/">PnP PowerShell</a> &#8211; A PowerShell module for Microsoft 365.</p></li></ul><p>These resources and contributions help you automate tasks well and connect with a lively community of users.</p><h2>Automation Scenarios</h2><h3>PowerShell for Quick Wins</h3><p>PowerShell is great for quick wins in Microsoft 365 automation. You can handle everyday tasks quickly, saving time and cutting down on mistakes. Here are some good examples where PowerShell works well:</p><ul><li><p><a href="https://www.syskit.com/blog/powershell-automation-for-m365-admin-tasks/">Assigning site collection administrators in SharePoint Online</a>.</p></li><li><p>Exporting lists of SharePoint site collections.</p></li><li><p>Using the PnP.PowerShell module for different tasks.</p></li></ul><p>These quick tasks can save you a lot of time. PowerShell scripts help automate both complex and simple tasks. This automation lowers the chance of making mistakes, making your work easier and more dependable.</p><h3>Graph API for Scalable Solutions</h3><p>As your organization grows, you need solutions that can grow too. The Microsoft Graph API gives you the tools to automate complicated workflows effectively. Here are some of the best uses for scalable Microsoft 365 automation:</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!dWnh!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F9377791d-c96e-49cf-8393-356436811b5d_683x251.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!dWnh!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F9377791d-c96e-49cf-8393-356436811b5d_683x251.png 424w, https://substackcdn.com/image/fetch/$s_!dWnh!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F9377791d-c96e-49cf-8393-356436811b5d_683x251.png 848w, https://substackcdn.com/image/fetch/$s_!dWnh!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F9377791d-c96e-49cf-8393-356436811b5d_683x251.png 1272w, https://substackcdn.com/image/fetch/$s_!dWnh!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F9377791d-c96e-49cf-8393-356436811b5d_683x251.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!dWnh!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F9377791d-c96e-49cf-8393-356436811b5d_683x251.png" width="683" height="251" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/9377791d-c96e-49cf-8393-356436811b5d_683x251.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:251,&quot;width&quot;:683,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:48017,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/png&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:&quot;https://m365.show/i/175406145?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F9377791d-c96e-49cf-8393-356436811b5d_683x251.png&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!dWnh!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F9377791d-c96e-49cf-8393-356436811b5d_683x251.png 424w, https://substackcdn.com/image/fetch/$s_!dWnh!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F9377791d-c96e-49cf-8393-356436811b5d_683x251.png 848w, https://substackcdn.com/image/fetch/$s_!dWnh!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F9377791d-c96e-49cf-8393-356436811b5d_683x251.png 1272w, https://substackcdn.com/image/fetch/$s_!dWnh!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F9377791d-c96e-49cf-8393-356436811b5d_683x251.png 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg role="img" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><title></title><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><p>The Graph API helps you automate tasks across many Microsoft services. It supports <a href="https://learn.microsoft.com/en-us/graph/data-connect-concept-overview">business process analysis</a>, helping you find manual tasks and workflow problems. You can create <a href="https://www.coreview.com/blog/how-to-set-up-custom-actions-using-the-microsoft-graph-api-in-coreview">custom actions</a> that improve management efficiency in Microsoft 365. The Microsoft Graph PowerShell SDK lets you write scripts that automate different management tasks and workflows. This flexibility makes sure your automation can grow as your organization does.</p><div><hr></div><p>In conclusion, both <a href="https://cloudyhappypeople.com/category/office365/">PowerShell and Graph API have special strengths</a> for <a href="https://m365.show/">Microsoft 365 automation</a>. PowerShell is great for quick and simple tasks. It lets you run scripts easily. But, it might need certain permissions and can be hard for new users to learn. On the other hand, Graph API has strong data searching abilities. It works well with many Microsoft services. However, it needs careful permission management because it is more complex.</p><p>If you need something right away, use PowerShell. For long-term and bigger solutions, Graph API is a better option. By knowing these tools, you can automate tasks well and improve your Microsoft 365 experience.</p><h2>FAQ</h2><h3>What is the main difference between PowerShell and Graph API?</h3><p>PowerShell is a tool you use on the command line for quick admin tasks. Graph API gives you one place to access many Microsoft services. This makes it better for complex automation and connections.</p><h3>When should I use PowerShell for automation?</h3><p>Use PowerShell for tasks you do often, like managing users or assigning licenses. It&#8217;s great for quick fixes and simple jobs that need fast results.</p><h3>What are the prerequisites for using Graph API?</h3><p>To use Graph API, you need an Azure AD account with the right permissions. Knowing about RESTful APIs and OAuth authentication will help you use its features better.</p><h3>Can I use both PowerShell and Graph API together?</h3><p>Yes, you can use both tools together. Use PowerShell for quick tasks and Graph API for bigger solutions. This way, you can take advantage of what each tool does best.</p><h3>Where can I find resources for learning PowerShell and Graph API?</h3><p>You can find official guides on the Microsoft website. Also, community forums, GitHub pages, and online tutorials give helpful tips and examples for both tools.</p>]]></content:encoded></item><item><title><![CDATA[Optimizing Microsoft Lists: Choosing Between CAML, REST, and JSON]]></title><description><![CDATA[In today's digital workspace, you often need good tools to manage your data. Optimizing Microsoft Lists can really boost your productivity. Picking the right way to query and format can make a big dif]]></description><link>https://newsletter.m365.show/p/optimizing-microsoft-lists-choosing</link><guid isPermaLink="false">https://newsletter.m365.show/p/optimizing-microsoft-lists-choosing</guid><dc:creator><![CDATA[Mirko Peters - M365 Specialist]]></dc:creator><pubDate>Mon, 06 Oct 2025 23:43:20 GMT</pubDate><enclosure url="https://api.substack.com/feed/podcast/175403024/42a13ba2f72922ffeb219c30c09a5929.mp3" length="0" type="audio/mpeg"/><content:encoded><![CDATA[<div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!EeoB!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F57a2d7e2-0cd1-499b-8e6c-4468e27c3458_682x412.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!EeoB!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F57a2d7e2-0cd1-499b-8e6c-4468e27c3458_682x412.png 424w, https://substackcdn.com/image/fetch/$s_!EeoB!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F57a2d7e2-0cd1-499b-8e6c-4468e27c3458_682x412.png 848w, https://substackcdn.com/image/fetch/$s_!EeoB!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F57a2d7e2-0cd1-499b-8e6c-4468e27c3458_682x412.png 1272w, https://substackcdn.com/image/fetch/$s_!EeoB!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F57a2d7e2-0cd1-499b-8e6c-4468e27c3458_682x412.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!EeoB!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F57a2d7e2-0cd1-499b-8e6c-4468e27c3458_682x412.png" width="682" height="412" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/57a2d7e2-0cd1-499b-8e6c-4468e27c3458_682x412.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:412,&quot;width&quot;:682,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:72314,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/png&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:false,&quot;topImage&quot;:true,&quot;internalRedirect&quot;:&quot;https://m365.show/i/175403024?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F57a2d7e2-0cd1-499b-8e6c-4468e27c3458_682x412.png&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!EeoB!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F57a2d7e2-0cd1-499b-8e6c-4468e27c3458_682x412.png 424w, https://substackcdn.com/image/fetch/$s_!EeoB!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F57a2d7e2-0cd1-499b-8e6c-4468e27c3458_682x412.png 848w, https://substackcdn.com/image/fetch/$s_!EeoB!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F57a2d7e2-0cd1-499b-8e6c-4468e27c3458_682x412.png 1272w, https://substackcdn.com/image/fetch/$s_!EeoB!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F57a2d7e2-0cd1-499b-8e6c-4468e27c3458_682x412.png 1456w" sizes="100vw" fetchpriority="high"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg role="img" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><title></title><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><p>As your list gets bigger, some tasks may take longer. You should prepare for lists or libraries that might have <a href="https://learn.microsoft.com/en-us/microsoft-365/community/large-lists-large-libraries-in-sharepoint">more than 5,000 items</a>. Use filtering and sorting to handle large lists well. Choosing the modern experience can also help you avoid performance problems.</p><h3>JSON Performance Insights</h3><p>JSON performance in Microsoft Lists can change based on a few important factors. Here&#8217;s what you should know:</p><div class="captioned-image-container"><figure><a class="image-link image2" target="_blank" href="https://substackcdn.com/image/fetch/$s_!i5RR!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F0dae9a10-f5b9-4b93-89ee-df620f54129e_684x154.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!i5RR!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F0dae9a10-f5b9-4b93-89ee-df620f54129e_684x154.png 424w, https://substackcdn.com/image/fetch/$s_!i5RR!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F0dae9a10-f5b9-4b93-89ee-df620f54129e_684x154.png 848w, https://substackcdn.com/image/fetch/$s_!i5RR!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F0dae9a10-f5b9-4b93-89ee-df620f54129e_684x154.png 1272w, https://substackcdn.com/image/fetch/$s_!i5RR!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F0dae9a10-f5b9-4b93-89ee-df620f54129e_684x154.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!i5RR!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F0dae9a10-f5b9-4b93-89ee-df620f54129e_684x154.png" width="684" height="154" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/0dae9a10-f5b9-4b93-89ee-df620f54129e_684x154.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:154,&quot;width&quot;:684,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:32721,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/png&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:false,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:&quot;https://m365.show/i/175403024?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F0dae9a10-f5b9-4b93-89ee-df620f54129e_684x154.png&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!i5RR!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F0dae9a10-f5b9-4b93-89ee-df620f54129e_684x154.png 424w, https://substackcdn.com/image/fetch/$s_!i5RR!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F0dae9a10-f5b9-4b93-89ee-df620f54129e_684x154.png 848w, https://substackcdn.com/image/fetch/$s_!i5RR!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F0dae9a10-f5b9-4b93-89ee-df620f54129e_684x154.png 1272w, https://substackcdn.com/image/fetch/$s_!i5RR!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F0dae9a10-f5b9-4b93-89ee-df620f54129e_684x154.png 1456w" sizes="100vw"></picture><div></div></div></a></figure></div><p>In real-time data rendering situations, <a href="https://mgwdevcom.wordpress.com/2022/08/01/benchmarking-different-ways-of-accessing-sp-list-items/">CAML usually works better</a> than REST and JSON. Adjusting ViewFields can make performance even better. Using RenderListDataAsStream with server-side pagination helps manage large datasets effectively.</p><p>By knowing these performance trade-offs, you can make smart choices when optimizing Microsoft Lists. Pick the right method based on your needs and how much data you have.</p><h2>Usability and Scalability</h2><p>When you make Microsoft Lists better, usability and scalability are very important. Each method&#8212;CAML, REST, and JSON&#8212;has its own benefits and challenges that change how you work with your data.</p><h3>User Experience with CAML</h3><p>CAML is a strong tool for querying, but it can be hard to learn. Users often think CAML queries are complicated, especially with complex data. But, once you get the hang of it, CAML helps you make good queries that work well with large datasets.</p><ul><li><p><strong>Pros</strong>:</p><ul><li><p>Good for complex queries.</p></li><li><p>Works well for batch processing.</p></li><li><p>Lowers server load by reducing requests.</p></li></ul></li><li><p><strong>Cons</strong>:</p><ul><li><p>Hard to learn.</p></li><li><p>Needs a good understanding of SharePoint.</p></li></ul></li></ul><h3>User Experience with REST</h3><p>REST is easier to use for working with SharePoint data. It uses standard HTTP requests, which makes it simple for users who know web technologies. You can easily do CRUD operations, which makes it user-friendly. But, as your lists get bigger, you might see some performance problems.</p><ul><li><p><strong>Pros</strong>:</p><ul><li><p>Simple to learn and use.</p></li><li><p>Works well with third-party apps.</p></li><li><p>Supports many operations.</p></li></ul></li><li><p><strong>Cons</strong>:</p><ul><li><p>Performance can slow down with larger datasets.</p></li><li><p>Throttling issues can happen under heavy load.</p></li></ul></li></ul><h3>User Experience with JSON</h3><p>JSON is great for customization and improving the user interface. It lets you format list views and create interactive dashboards without needing a lot of coding skills. However, users have noticed some common problems with JSON formatting:</p><ul><li><p><a href="https://learn.microsoft.com/en-us/answers/questions/5323869/anyone-else-seeing-problems-with-json-formatted-vi">Users may lose access to the parent site when looking at lists.</a></p></li><li><p>JSON formatting does not stay when using &#8216;Save As&#8217; for a JSON view.</p></li><li><p>Some views might not show JSON formatting correctly.</p></li><li><p>JSON views look different when embedded as a web part compared to direct access.</p></li></ul><p>Even with these issues, JSON&#8217;s flexibility really helps usability. Here&#8217;s a summary of its strengths:</p><div class="captioned-image-container"><figure><a class="image-link image2" target="_blank" href="https://substackcdn.com/image/fetch/$s_!37Ki!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F9a525602-4065-4a4f-88d5-a5527134dd52_686x230.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!37Ki!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F9a525602-4065-4a4f-88d5-a5527134dd52_686x230.png 424w, https://substackcdn.com/image/fetch/$s_!37Ki!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F9a525602-4065-4a4f-88d5-a5527134dd52_686x230.png 848w, https://substackcdn.com/image/fetch/$s_!37Ki!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F9a525602-4065-4a4f-88d5-a5527134dd52_686x230.png 1272w, https://substackcdn.com/image/fetch/$s_!37Ki!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F9a525602-4065-4a4f-88d5-a5527134dd52_686x230.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!37Ki!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F9a525602-4065-4a4f-88d5-a5527134dd52_686x230.png" width="686" height="230" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/9a525602-4065-4a4f-88d5-a5527134dd52_686x230.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:230,&quot;width&quot;:686,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:39846,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/png&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:&quot;https://m365.show/i/175403024?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F9a525602-4065-4a4f-88d5-a5527134dd52_686x230.png&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!37Ki!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F9a525602-4065-4a4f-88d5-a5527134dd52_686x230.png 424w, https://substackcdn.com/image/fetch/$s_!37Ki!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F9a525602-4065-4a4f-88d5-a5527134dd52_686x230.png 848w, https://substackcdn.com/image/fetch/$s_!37Ki!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F9a525602-4065-4a4f-88d5-a5527134dd52_686x230.png 1272w, https://substackcdn.com/image/fetch/$s_!37Ki!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F9a525602-4065-4a4f-88d5-a5527134dd52_686x230.png 1456w" sizes="100vw" loading="lazy"></picture><div></div></div></a></figure></div><p>Also, JSON makes forms in Microsoft Lists look better. It allows you to use conditional logic to improve user experience. You can easily change how list elements look and act, making it a favorite choice for many users.</p><h2>Use Cases for Each Method</h2><h3>When to Use CAML</h3><p>You should think about using CAML when you need to <a href="https://www.c-sharpcorner.com/blogs/query-sharepoint-list-from-microsoft-flow">filter data in SharePoint lists</a> well. CAML is great when you have complex queries that need advanced filtering and sorting. For example, if you want to group items by certain rules or get large datasets fast, CAML is the best choice. Here are some common times to use CAML:</p><ul><li><p>Filtering data in SharePoint lists.</p></li><li><p>Handling batch processing for big datasets.</p></li><li><p>Doing complex queries that REST cannot do alone.</p></li></ul><p><a href="https://chuvash.eu/2014/using-caml-with-sharepoint-rest-api/">CAML queries can also be used inside REST requests</a> to fix REST&#8217;s limits. This way, you can make more detailed queries that REST cannot handle by itself.</p><h3>When to Use REST</h3><p>REST is best for times when you need to do standard CRUD actions. If you are working with third-party apps or using Microsoft Flow, REST gives you an easy way to work with SharePoint data. Here are some situations where REST works well:</p><ol><li><p>You want to create, read, update, or delete items in a list.</p></li><li><p>You need to deal with smaller datasets where speed is not a big issue.</p></li><li><p>You are making apps that need easy connections with SharePoint Online.</p></li></ol><p>To make REST faster, set up indexed columns, leave out extra metadata, and change the order of filters for better response times.</p><h3>When to Use JSON</h3><p>You should use JSON when you want to change how the user interface looks in your Microsoft Lists. JSON lets you format list views and build interactive dashboards without needing a lot of coding skills. Here are some times when JSON is helpful:</p><ul><li><p>You want to make your lists look nicer.</p></li><li><p>You need to use conditional formatting to help users.</p></li><li><p>You want to create quick, no-code ways to customize lists.</p></li></ul><p>JSON is especially good for making forms look nicer and adding custom styles and actions. But, be careful not to use too much JSON, as it can cause maintenance problems.</p><h2>Advantages and Disadvantages</h2><h3>Pros and Cons of CAML</h3><p>CAML has many good points when you use it with Microsoft Lists. It is very flexible for filtering. You can use different operators for complex queries. This makes it great for large datasets. CAML also works well with big lists, especially if you use indexed fields. Plus, you can filter by metadata, which REST or JSON cannot do.</p><p>But, there are some downsides to using CAML. You need to know how to create good CAML queries. Small changes can cause big performance problems, like cache misses. These issues might not appear until the system is busy. So, it&#8217;s important to understand how CAML functions.</p><h3>Pros and Cons of REST</h3><p>REST is easy to use and works well with third-party apps. It makes CRUD actions simple. This means you can easily create, read, update, or delete items in a list. REST is good for smaller datasets where speed isn&#8217;t a big issue.</p><p>On the downside, REST can have performance problems as your lists get bigger. You might run into throttling, which can slow down your queries. Also, REST has limits in filtering compared to CAML. This can make it hard to do complex queries.</p><h3>Pros and Cons of JSON</h3><p>JSON is great for customizing Microsoft Lists. It changes regular lists into <a href="https://stevecorey.com/a-beginners-guide-to-mastering-list-json-formatting-in-sharepoint/">interactive dashboards</a>. This helps users navigate and understand data better. You can make data look nice and highlight important information. You can even add icons based on conditions.</p><p>However, JSON has some downsides too. Using too much JSON can create maintenance problems. You might have trouble with formatting consistency across different views. While JSON improves user experience, it needs careful management to avoid clutter and confusion.</p><h2>Conclusion: Best Practices for Optimizing Microsoft Lists</h2><p>To sum up, optimizing Microsoft Lists needs you to think about what you really need. Each method&#8212;CAML, REST, and JSON&#8212;has its own benefits. Here are some best practices to help you decide:</p><ol><li><p><strong>Assess Your Needs</strong>: Figure out how complex your queries are. If you have large datasets and need advanced filtering, choose CAML. For regular CRUD actions, the SharePoint REST API is the best fit.</p></li><li><p><strong>Consider Performance</strong>: Look at the performance trade-offs. CAML queries can handle a lot of data in one server call. REST might have trouble with big lists, which can cause throttling. JSON is good for customizing the user interface but can slow down if used too much.</p></li><li><p><strong>Focus on Usability</strong>: Think about how users will experience it. If your team knows coding, JSON can make the interface better. But if users want something simple, REST is easier to learn.</p></li><li><p><strong>Plan for Scalability</strong>: As your lists get bigger, make sure your chosen method can grow with them. CAML works well with large datasets, while REST may need careful planning to avoid slowdowns.</p></li><li><p><strong>Test and Iterate</strong>: Always check how your queries perform. Keep an eye on performance and make changes when needed. This helps you improve your methods and work better over time.</p></li></ol><p>By matching your method choice with your needs, you can optimize Microsoft Lists effectively. Whether you pick CAML for its power, REST for its ease, or JSON for its flexibility, knowing each method&#8217;s strengths will help you get better results in your SharePoint Online setup.</p><div><hr></div><p>To sum up, making Microsoft Lists better needs you to think about what you need. Each method&#8212;CAML, REST, and JSON&#8212;has its own special benefits.</p><ol><li><p><strong>Choose CAML</strong> if you have complex queries and big datasets.</p></li><li><p><strong>Opt for REST</strong> when you want simple CRUD actions.</p></li><li><p><strong>Use JSON</strong> to improve user interfaces and make quick changes.</p></li></ol><blockquote><p>Keep in mind, matching your method with your needs will help with performance and usability. Make smart choices to get the most out of your Microsoft Lists!</p></blockquote><h2>FAQ</h2><h3>What is the best method for large datasets?</h3><p>For <a href="https://m365.show/p/what-is-microsoft-dataverse-and-how">large datasets</a>, you should pick CAML. It works well with complex queries and cuts down server requests. This makes it great for performance.</p><h3>Can I use REST for CRUD operations?</h3><p>Yes, REST is great for CRUD operations. It makes creating, reading, updating, and deleting items in SharePoint lists easy.</p><h3>How does JSON improve user experience?</h3><p>JSON makes user experience better by letting you change list views. You can build interactive dashboards and use conditional formatting easily.</p><h3>Are there any performance issues with REST?</h3><p>Yes, REST can have performance problems with large datasets. Throttling and slow response times can happen, especially when there is a lot of traffic.</p><h3>Is CAML difficult to learn?</h3><p>CAML is harder to learn than REST and JSON. But, if you master it, you can query complex data much better.</p>]]></content:encoded></item><item><title><![CDATA[Enhancing Power Pages Development with VS Code and GitHub Copilot]]></title><description><![CDATA[In today&#8217;s busy development world, you have challenges that slow you down.]]></description><link>https://newsletter.m365.show/p/enhancing-power-pages-development</link><guid isPermaLink="false">https://newsletter.m365.show/p/enhancing-power-pages-development</guid><dc:creator><![CDATA[Mirko Peters - M365 Specialist]]></dc:creator><pubDate>Mon, 06 Oct 2025 15:17:25 GMT</pubDate><enclosure url="https://api.substack.com/feed/podcast/175380372/ef0d4ad5bb26cab35077c9abebc98284.mp3" length="0" type="audio/mpeg"/><content:encoded><![CDATA[<p>In today&#8217;s busy development world, you have challenges that slow you down. Tools like Visual Studio Code and GitHub Copilot can change how you work on Power Pages Development. Recent studies show that using Copilot increases pull requests by 10.6%. It also cuts down cycle time by 3.5 hours. This means you can spend less time fixing problems. You can spend more time making great solutions. Using these tools improves your workflow. It also makes coding more fun.</p><h2>Key Takeaways</h2><ul><li><p>Visual Studio Code makes your <a href="https://m365.show/p/what-is-microsoft-dataverse-and-how">Power Pages development</a> easier. It has important features all in one place. This helps you focus on making great websites.</p></li><li><p>GitHub Copilot is like a coding helper. It gives you suggestions while you code. This speeds up your work and helps you be more productive.</p></li><li><p>Changing VS Code to fit how you work can help a lot. You can adjust settings and tools for your own needs.</p></li><li><p>GitHub Copilot gives clear error messages. This helps you find and fix problems in your code quickly. It reduces frustration and saves time.</p></li><li><p>Using VS Code with GitHub Copilot makes your work smoother. It helps you work better with others and solve problems faster in your projects.</p></li></ul><h2>VS Code for Power Pages</h2><div id="youtube2-BmFTssfdGeg" class="youtube-wrap" data-attrs="{&quot;videoId&quot;:&quot;BmFTssfdGeg&quot;,&quot;startTime&quot;:null,&quot;endTime&quot;:null}" data-component-name="Youtube2ToDOM"><div class="youtube-inner"><iframe src="https://www.youtube-nocookie.com/embed/BmFTssfdGeg?rel=0&amp;autoplay=0&amp;showinfo=0&amp;enablejsapi=0" frameborder="0" loading="lazy" gesture="media" allow="autoplay; fullscreen" allowautoplay="true" allowfullscreen="true" width="728" height="409"></iframe></div></div><p>Visual Studio Code (VS Code) is a strong helper for your power pages development. Its features make your work easier and help you get more done. Let&#8217;s look at some important features that make VS Code a must-have tool for building websites.</p><h3>Key Features</h3><p>VS Code has many features that help with power pages development. Here are some of the most popular features:</p><div class="captioned-image-container"><figure><a class="image-link image2" target="_blank" href="https://substackcdn.com/image/fetch/$s_!bI9B!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F8d1344e8-3152-4b9a-9a87-a76b6fffdd1e_683x155.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!bI9B!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F8d1344e8-3152-4b9a-9a87-a76b6fffdd1e_683x155.png 424w, https://substackcdn.com/image/fetch/$s_!bI9B!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F8d1344e8-3152-4b9a-9a87-a76b6fffdd1e_683x155.png 848w, https://substackcdn.com/image/fetch/$s_!bI9B!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F8d1344e8-3152-4b9a-9a87-a76b6fffdd1e_683x155.png 1272w, https://substackcdn.com/image/fetch/$s_!bI9B!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F8d1344e8-3152-4b9a-9a87-a76b6fffdd1e_683x155.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!bI9B!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F8d1344e8-3152-4b9a-9a87-a76b6fffdd1e_683x155.png" width="683" height="155" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/8d1344e8-3152-4b9a-9a87-a76b6fffdd1e_683x155.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:155,&quot;width&quot;:683,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:27239,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/png&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:false,&quot;topImage&quot;:true,&quot;internalRedirect&quot;:&quot;https://m365.show/i/175380372?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F8d1344e8-3152-4b9a-9a87-a76b6fffdd1e_683x155.png&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!bI9B!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F8d1344e8-3152-4b9a-9a87-a76b6fffdd1e_683x155.png 424w, https://substackcdn.com/image/fetch/$s_!bI9B!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F8d1344e8-3152-4b9a-9a87-a76b6fffdd1e_683x155.png 848w, https://substackcdn.com/image/fetch/$s_!bI9B!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F8d1344e8-3152-4b9a-9a87-a76b6fffdd1e_683x155.png 1272w, https://substackcdn.com/image/fetch/$s_!bI9B!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F8d1344e8-3152-4b9a-9a87-a76b6fffdd1e_683x155.png 1456w" sizes="100vw" fetchpriority="high"></picture><div></div></div></a></figure></div><p>These features keep your development tasks in one place. This way, you can focus on what really matters&#8212;making great power pages.</p><h3>Customization Options</h3><p>Customization in VS Code helps you set up your work area the way you want. Here are some popular options that power pages developers often use:</p><div class="captioned-image-container"><figure><a class="image-link image2" target="_blank" href="https://substackcdn.com/image/fetch/$s_!AfPc!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ffb2251df-1ba2-4836-ad34-0fd43b3b9b26_684x156.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!AfPc!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ffb2251df-1ba2-4836-ad34-0fd43b3b9b26_684x156.png 424w, https://substackcdn.com/image/fetch/$s_!AfPc!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ffb2251df-1ba2-4836-ad34-0fd43b3b9b26_684x156.png 848w, https://substackcdn.com/image/fetch/$s_!AfPc!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ffb2251df-1ba2-4836-ad34-0fd43b3b9b26_684x156.png 1272w, https://substackcdn.com/image/fetch/$s_!AfPc!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ffb2251df-1ba2-4836-ad34-0fd43b3b9b26_684x156.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!AfPc!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ffb2251df-1ba2-4836-ad34-0fd43b3b9b26_684x156.png" width="684" height="156" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/fb2251df-1ba2-4836-ad34-0fd43b3b9b26_684x156.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:156,&quot;width&quot;:684,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:33326,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/png&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:&quot;https://m365.show/i/175380372?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ffb2251df-1ba2-4836-ad34-0fd43b3b9b26_684x156.png&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!AfPc!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ffb2251df-1ba2-4836-ad34-0fd43b3b9b26_684x156.png 424w, https://substackcdn.com/image/fetch/$s_!AfPc!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ffb2251df-1ba2-4836-ad34-0fd43b3b9b26_684x156.png 848w, https://substackcdn.com/image/fetch/$s_!AfPc!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ffb2251df-1ba2-4836-ad34-0fd43b3b9b26_684x156.png 1272w, https://substackcdn.com/image/fetch/$s_!AfPc!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ffb2251df-1ba2-4836-ad34-0fd43b3b9b26_684x156.png 1456w" sizes="100vw" loading="lazy"></picture><div></div></div></a></figure></div><p>These customization options help you work better on power pages projects. You can do site-specific tasks right from VS Code Desktop. For example, you can see your work live, upload or download content, and check site details without changing tools. This way of working saves you time and makes things less frustrating.</p><p>By using Visual Studio Code, you can change how you develop power pages. You get the tools to create strong websites while keeping your work smooth.</p><h2>GitHub Copilot Coding Agent</h2><p>GitHub Copilot is like your coding buddy. It makes your Power Pages development better. It gives you help that fits your needs. This means you get suggestions just for Power Pages. This makes coding easier and faster.</p><h3>Context-Aware Assistance</h3><p>With GitHub Copilot, you can use many helpful features. These features make your coding work better. Here are some important ones:</p><div class="captioned-image-container"><figure><a class="image-link image2" target="_blank" href="https://substackcdn.com/image/fetch/$s_!KrBn!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fadbca59a-6023-4dd0-9bd1-189b475440b3_686x151.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!KrBn!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fadbca59a-6023-4dd0-9bd1-189b475440b3_686x151.png 424w, https://substackcdn.com/image/fetch/$s_!KrBn!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fadbca59a-6023-4dd0-9bd1-189b475440b3_686x151.png 848w, https://substackcdn.com/image/fetch/$s_!KrBn!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fadbca59a-6023-4dd0-9bd1-189b475440b3_686x151.png 1272w, https://substackcdn.com/image/fetch/$s_!KrBn!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fadbca59a-6023-4dd0-9bd1-189b475440b3_686x151.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!KrBn!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fadbca59a-6023-4dd0-9bd1-189b475440b3_686x151.png" width="686" height="151" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/adbca59a-6023-4dd0-9bd1-189b475440b3_686x151.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:151,&quot;width&quot;:686,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:31483,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/png&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:&quot;https://m365.show/i/175380372?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fadbca59a-6023-4dd0-9bd1-189b475440b3_686x151.png&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!KrBn!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fadbca59a-6023-4dd0-9bd1-189b475440b3_686x151.png 424w, https://substackcdn.com/image/fetch/$s_!KrBn!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fadbca59a-6023-4dd0-9bd1-189b475440b3_686x151.png 848w, https://substackcdn.com/image/fetch/$s_!KrBn!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fadbca59a-6023-4dd0-9bd1-189b475440b3_686x151.png 1272w, https://substackcdn.com/image/fetch/$s_!KrBn!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fadbca59a-6023-4dd0-9bd1-189b475440b3_686x151.png 1456w" sizes="100vw" loading="lazy"></picture><div></div></div></a></figure></div><p>These features help you write strong code. They also cut down the time spent on boring tasks. You can focus on making great solutions instead of getting stuck on small details.</p><h3>Real-Time Coding Support</h3><p>GitHub Copilot gives real-time coding help. This makes it different from regular code tools. Here&#8217;s how it stacks up:</p><div class="captioned-image-container"><figure><a class="image-link image2" target="_blank" href="https://substackcdn.com/image/fetch/$s_!qZjP!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fdbbfedf2-1e21-44de-96ee-7c0bd4e5a7df_687x236.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!qZjP!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fdbbfedf2-1e21-44de-96ee-7c0bd4e5a7df_687x236.png 424w, https://substackcdn.com/image/fetch/$s_!qZjP!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fdbbfedf2-1e21-44de-96ee-7c0bd4e5a7df_687x236.png 848w, https://substackcdn.com/image/fetch/$s_!qZjP!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fdbbfedf2-1e21-44de-96ee-7c0bd4e5a7df_687x236.png 1272w, https://substackcdn.com/image/fetch/$s_!qZjP!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fdbbfedf2-1e21-44de-96ee-7c0bd4e5a7df_687x236.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!qZjP!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fdbbfedf2-1e21-44de-96ee-7c0bd4e5a7df_687x236.png" width="687" height="236" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/dbbfedf2-1e21-44de-96ee-7c0bd4e5a7df_687x236.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:236,&quot;width&quot;:687,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:40768,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/png&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:&quot;https://m365.show/i/175380372?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fdbbfedf2-1e21-44de-96ee-7c0bd4e5a7df_687x236.png&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!qZjP!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fdbbfedf2-1e21-44de-96ee-7c0bd4e5a7df_687x236.png 424w, https://substackcdn.com/image/fetch/$s_!qZjP!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fdbbfedf2-1e21-44de-96ee-7c0bd4e5a7df_687x236.png 848w, https://substackcdn.com/image/fetch/$s_!qZjP!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fdbbfedf2-1e21-44de-96ee-7c0bd4e5a7df_687x236.png 1272w, https://substackcdn.com/image/fetch/$s_!qZjP!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fdbbfedf2-1e21-44de-96ee-7c0bd4e5a7df_687x236.png 1456w" sizes="100vw" loading="lazy"></picture><div></div></div></a></figure></div><p>This real-time help lets you change your code right away. You can make quick changes based on Copilot&#8217;s ideas. This makes your development faster, so you can be more creative and solve problems better.</p><p>By using the <code>@powerpages</code> tag with Copilot, you can get even more specific help. This makes your work easier and helps you create high-quality Power Pages.</p><h2>Integrating Tools for Power Pages Development</h2><p>Combining Visual Studio Code with GitHub Copilot changes how you develop <a href="https://m365.show/">power pages</a>. This mix makes your work easier and helps you code better. You can make your processes smoother and work better with your team.</p><h3>Streamlined Workflow</h3><p>When you connect these tools, you create a smooth workflow. Here are some key benefits of this connection:</p><ul><li><p><strong><a href="https://www.codemag.com/Article/2503071/Unleashing-the-Power-of-GitHub-Copilot-in-Visual-Studio-Code">Real-time assistance</a></strong>: You get quick help and ideas, which helps solve problems faster with your team.</p></li><li><p><strong>Inline chat capabilities</strong>: You can talk directly in the coding area, making teamwork better.</p></li><li><p><strong>Code review tools</strong>: These tools let you comment and give feedback on code, improving reviews and team talks.</p></li><li><p><strong>Documentation generation</strong>: You can write documentation right in the code, helping share knowledge better.</p></li><li><p><strong>Language and framework support</strong>: The connection gives you smart suggestions based on your project, making you work faster.</p></li></ul><p>This smooth workflow lets you focus on making assets and building your website without switching tools. For example, you can use simple language to <a href="https://www.microsoft.com/en-us/power-platform/blog/2023/10/03/innovate-and-build-data-driven-websites-with-copilot-in-power-pages">create websites</a>, which helps quickly make sitemaps and homepages. The power pages design studio helps you improve your websites by describing what you want, leading to smart HTML layouts and themes.</p><h3>Debugging with Copilot</h3><p>Debugging can feel hard sometimes. But with GitHub Copilot, you can make this task much easier. Here&#8217;s how Copilot helps you debug your power pages code:</p><ul><li><p><strong><a href="https://devblogs.microsoft.com/visualstudio/simplified-code-refinement-and-debugging-with-github-copilot-chat/">CPU Usage auto insights</a></strong>: Copilot gives you clear details about execution times and CPU usage, helping you make your code better.</p></li><li><p><strong>Copilot Exception Helper</strong>: This feature looks at exceptions, call stacks, and local variables to give you insights and possible fixes.</p></li><li><p><strong>Debugger &#8216;Rubber Ducking&#8217;</strong>: You can ask detailed questions about your code, using Copilot&#8217;s knowledge of the call stack and variable states.</p></li></ul><p>By using these features, you can lower errors and make your code better overall. The mix of VS Code and GitHub Copilot not only improves your development workflow but also helps you handle debugging tasks with confidence.</p><h2>Enhancing Code Quality</h2><p>In Power Pages development, having good code quality is very important. It helps create applications that work well and are easy to maintain. GitHub Copilot is a big help in making this quality better. It improves how errors are handled and makes your code stronger. Let&#8217;s see how Copilot does this.</p><h3>Error Message Clarity</h3><p>When you find errors in your code, clear messages can really help. Copilot makes this easier by giving you clearer error messages. Instead of confusing alerts, you get specific advice on what went wrong and how to fix it. For example, look at these <a href="https://learn.microsoft.com/en-us/troubleshoot/power-platform/copilot-studio/authoring/error-codes">common errors</a>:</p><div class="captioned-image-container"><figure><a class="image-link image2" target="_blank" href="https://substackcdn.com/image/fetch/$s_!V_Ed!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F69cda5c6-d8da-4605-b215-d830737ceffd_685x204.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!V_Ed!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F69cda5c6-d8da-4605-b215-d830737ceffd_685x204.png 424w, https://substackcdn.com/image/fetch/$s_!V_Ed!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F69cda5c6-d8da-4605-b215-d830737ceffd_685x204.png 848w, https://substackcdn.com/image/fetch/$s_!V_Ed!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F69cda5c6-d8da-4605-b215-d830737ceffd_685x204.png 1272w, https://substackcdn.com/image/fetch/$s_!V_Ed!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F69cda5c6-d8da-4605-b215-d830737ceffd_685x204.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!V_Ed!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F69cda5c6-d8da-4605-b215-d830737ceffd_685x204.png" width="685" height="204" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/69cda5c6-d8da-4605-b215-d830737ceffd_685x204.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:204,&quot;width&quot;:685,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:38854,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/png&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:&quot;https://m365.show/i/175380372?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F69cda5c6-d8da-4605-b215-d830737ceffd_685x204.png&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!V_Ed!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F69cda5c6-d8da-4605-b215-d830737ceffd_685x204.png 424w, https://substackcdn.com/image/fetch/$s_!V_Ed!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F69cda5c6-d8da-4605-b215-d830737ceffd_685x204.png 848w, https://substackcdn.com/image/fetch/$s_!V_Ed!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F69cda5c6-d8da-4605-b215-d830737ceffd_685x204.png 1272w, https://substackcdn.com/image/fetch/$s_!V_Ed!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F69cda5c6-d8da-4605-b215-d830737ceffd_685x204.png 1456w" sizes="100vw" loading="lazy"></picture><div></div></div></a></figure></div><p>These messages point you right to the problem, helping you fix issues faster. By making error messages clearer, Copilot cuts down on frustration and makes your development experience better.</p><h3>Handling Edge Cases</h3><p>In any project, edge cases can cause strange behavior. Copilot helps you think ahead and deal with these situations well. With smart suggestions, you can write stronger code that handles unusual inputs or events. Here are some benefits of using Copilot for edge case handling:</p><ul><li><p><strong><a href="https://windowsforum.com/threads/microsoft-power-pages-launches-native-support-for-modern-single-page-applications-spa.372328/">Rapid generation of boilerplate code</a></strong>: Copilot quickly creates the basic code you need, so you can focus on special parts of your project.</p></li><li><p><strong>Decreased manual coding errors</strong>: By automating repetitive tasks, Copilot lowers the chances of making mistakes in your code.</p></li><li><p><strong>Contextual AI suggestions</strong>: These suggestions guide you through tricky coding tasks, especially if you are new to certain frameworks or patterns.</p></li></ul><p>By using these features, you can build Power Pages that work well and are strong against unexpected user actions. This leads to a better experience for users and less downtime for your applications.</p><p>AI tools like Copilot also help with keeping code easy to maintain over time. They <a href="https://www.godofprompt.ai/blog/how-ai-refactors-code-for-better-performance">automate boring tasks</a>, improve code quality, and lower technical debt. This is important for growth. You can keep your coding standards consistent, which leads to cleaner code. Plus, AI can track changes over time, helping new developers understand the code structure.</p><div><hr></div><p>Using Visual Studio Code and GitHub Copilot in your Power Pages development can change how you work. You will become more efficient, clear, and supported, which makes coding better.</p><p>In the future, <a href="https://medium.com/%40thepowerxguy/power-apps-generative-pages-the-revolutionary-ai-powered-app-development-experience-cdc24cb7e303">AI-assisted development</a> will help more developers create advanced apps. Here are some important trends to notice:</p><ul><li><p>Better AI features will increase library support.</p></li><li><p>Closer ties with Microsoft will make Power Apps Generative Pages very important.</p></li><li><p>Generative Pages will help both new and skilled developers <a href="https://www.linkedin.com/pulse/generative-pages-power-apps-game-changer-app-pmp-pmi-acp--phgef">build apps quickly and safely</a>.</p></li></ul><p>Use these tools and trends to improve your Power Pages projects. The future of development looks bright, and you can lead this exciting change! &#127775;</p><h2>FAQ</h2><h3>What is Visual Studio Code?</h3><p>Visual Studio Code (VS Code) is a free tool for writing code. It works with many programming languages and has features like debugging, color coding, and add-ons. You can use it to make your <a href="https://m365.show/p/what-is-microsoft-dataverse-and-how">Power Pages development</a> easier.</p><h3>How does GitHub Copilot assist in coding?</h3><p>GitHub Copilot gives you smart code suggestions while you type. It helps you write code faster by creating small pieces and finishing lines based on what you write. This makes coding quicker and more fun.</p><h3>Can I customize VS Code for my needs?</h3><p>Yes, you can change VS Code a lot. You can change settings, add extensions, and change themes to make a workspace that fits how you work. This helps improve your Power Pages development experience.</p><h3>What are edge cases in coding?</h3><p>Edge cases are strange or extreme situations that can make software act weird. Dealing with these cases helps your application run well in all situations, making it more reliable.</p><h3>Why is error message clarity important?</h3><p>Clear error messages help you find and fix problems in your code quickly. They make things less frustrating and save time while developing, so you can focus on making good solutions.</p>]]></content:encoded></item><item><title><![CDATA[Standardizing Development Environments with Dev Containers]]></title><description><![CDATA[In today&#8217;s quick software development world, you deal with problems from different setups and changing environments.]]></description><link>https://newsletter.m365.show/p/standardizing-development-environments</link><guid isPermaLink="false">https://newsletter.m365.show/p/standardizing-development-environments</guid><dc:creator><![CDATA[Mirko Peters - M365 Specialist]]></dc:creator><pubDate>Mon, 06 Oct 2025 11:58:25 GMT</pubDate><enclosure url="https://api.substack.com/feed/podcast/175379229/a83fca1eca4a67293984087360d964e7.mp3" length="0" type="audio/mpeg"/><content:encoded><![CDATA[<p>In today&#8217;s quick software development world, you deal with problems from different setups and changing environments. These problems can slow you down and cause annoying errors. Making your development environments the same can help you get past these issues. By using tools like Dev Containers, you make a steady workspace that looks like production. This method not only makes your work easier but also improves teamwork among group members.</p><h2>Key Takeaways</h2><ul><li><p>Dev Containers make development environments the same. This cuts down on mistakes from different setups.</p></li><li><p>Using Dev Containers helps new developers start quickly. They can begin working in minutes, not hours.</p></li><li><p>Making environments the same with Dev Containers can save 90% of setup time. It can also lower environment bugs by 80%.</p></li><li><p>Dev Containers help teamwork by giving everyone a <a href="https://m365.show/p/what-is-microsoft-dataverse-and-how">shared space</a>. This makes sharing code and solving problems easier.</p></li><li><p>Use best practices like predefined features and better Dockerfiles. This will improve your development experience.</p></li></ul><h2>Dev Containers Overview</h2><p>Dev Containers are a strong tool. They help you make the same and repeatable development environments. They include all the tools, libraries, and settings you need for your project. This setup makes sure you can work in a similar environment, no matter the local machine setup. By using Dev Containers, you fix common problems from different setups. This includes issues like &#8220;it works on my machine&#8221; problems.</p><h3>Key Features of Dev Containers</h3><p>Several important parts define Dev Containers in today&#8217;s development workflows:</p><ol><li><p><strong>devcontainer.json</strong>: This is the main setup file. It tells the Docker image, runtime settings, environment variables, and VS Code extensions.</p></li><li><p><strong>Dockerfile</strong>: This is an optional file. It lets you change the base Docker image more. You can use it to build the image when the container starts.</p></li><li><p><strong>docker-compose.yml</strong>: This optional file sets up multi-container settings if your project needs more services.</p></li></ol><p>These parts work together to create a smooth development experience. Here are some main benefits of using Dev Containers:</p><ul><li><p><strong>Container-Based Development</strong>: This method keeps things the same and repeatable on different machines.</p></li><li><p><strong>Isolation and Portability</strong>: Dev Containers stop problems between projects and let you share settings easily.</p></li><li><p><strong>Ease of Onboarding</strong>: New developers can start quickly by using ready-made settings.</p></li></ul><p>The <code>devcontainer.json</code> file is very important for setting up and changing your Dev Containers. Here&#8217;s a look at its features:</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!JCZL!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fcfd00970-8c63-4312-a18b-86a329c6313f_683x311.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!JCZL!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fcfd00970-8c63-4312-a18b-86a329c6313f_683x311.png 424w, https://substackcdn.com/image/fetch/$s_!JCZL!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fcfd00970-8c63-4312-a18b-86a329c6313f_683x311.png 848w, https://substackcdn.com/image/fetch/$s_!JCZL!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fcfd00970-8c63-4312-a18b-86a329c6313f_683x311.png 1272w, https://substackcdn.com/image/fetch/$s_!JCZL!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fcfd00970-8c63-4312-a18b-86a329c6313f_683x311.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!JCZL!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fcfd00970-8c63-4312-a18b-86a329c6313f_683x311.png" width="683" height="311" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/cfd00970-8c63-4312-a18b-86a329c6313f_683x311.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:311,&quot;width&quot;:683,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:53905,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/png&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:&quot;https://m365.show/i/175379229?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fcfd00970-8c63-4312-a18b-86a329c6313f_683x311.png&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!JCZL!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fcfd00970-8c63-4312-a18b-86a329c6313f_683x311.png 424w, https://substackcdn.com/image/fetch/$s_!JCZL!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fcfd00970-8c63-4312-a18b-86a329c6313f_683x311.png 848w, https://substackcdn.com/image/fetch/$s_!JCZL!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fcfd00970-8c63-4312-a18b-86a329c6313f_683x311.png 1272w, https://substackcdn.com/image/fetch/$s_!JCZL!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fcfd00970-8c63-4312-a18b-86a329c6313f_683x311.png 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg role="img" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><title></title><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><p>By using these features, you can create a standard development environment. This helps improve productivity and teamwork among group members.</p><h2>Benefits of Standardizing Development Environments</h2><p>Making development environments the same with Dev Containers has many benefits. You can have the same setup for all teams. This leads to smoother work and fewer mistakes. By using Dev Containers, you fix common problems that come from different setups. These problems happen when developers use different machines with different settings.</p><p>When you standardize your development environment, you create a complete setup that looks like production. This means applications work the same way everywhere. Because of this, you can avoid the annoying &#8220;it works on my machine&#8221; problem.</p><h3>Consistency and Speed in CI/CD</h3><p>Dev Containers make Continuous Integration and Continuous Deployment (CI/CD) faster and more reliable. With a steady development environment, you can cut down the time needed to set up and configure everything. Studies show that teams see a <strong><a href="https://cloudnativenow.com/contributed-content/measuring-containerization-value-for-enterprise-build-systems/">90% reduction</a></strong> in setup time. New developers can start quickly in minutes instead of going through long installation steps. This fast onboarding means they don&#8217;t have to read through lots of documents about needed software.</p><p>Here are some clear improvements seen after standardizing development environments with Dev Containers:</p><div class="captioned-image-container"><figure><a class="image-link image2" target="_blank" href="https://substackcdn.com/image/fetch/$s_!Byiz!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff63e06dc-f00b-43ff-9085-8f1aef3a3389_682x150.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!Byiz!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff63e06dc-f00b-43ff-9085-8f1aef3a3389_682x150.png 424w, https://substackcdn.com/image/fetch/$s_!Byiz!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff63e06dc-f00b-43ff-9085-8f1aef3a3389_682x150.png 848w, https://substackcdn.com/image/fetch/$s_!Byiz!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff63e06dc-f00b-43ff-9085-8f1aef3a3389_682x150.png 1272w, https://substackcdn.com/image/fetch/$s_!Byiz!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff63e06dc-f00b-43ff-9085-8f1aef3a3389_682x150.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!Byiz!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff63e06dc-f00b-43ff-9085-8f1aef3a3389_682x150.png" width="682" height="150" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/f63e06dc-f00b-43ff-9085-8f1aef3a3389_682x150.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:150,&quot;width&quot;:682,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:26115,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/png&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:&quot;https://m365.show/i/175379229?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff63e06dc-f00b-43ff-9085-8f1aef3a3389_682x150.png&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!Byiz!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff63e06dc-f00b-43ff-9085-8f1aef3a3389_682x150.png 424w, https://substackcdn.com/image/fetch/$s_!Byiz!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff63e06dc-f00b-43ff-9085-8f1aef3a3389_682x150.png 848w, https://substackcdn.com/image/fetch/$s_!Byiz!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff63e06dc-f00b-43ff-9085-8f1aef3a3389_682x150.png 1272w, https://substackcdn.com/image/fetch/$s_!Byiz!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff63e06dc-f00b-43ff-9085-8f1aef3a3389_682x150.png 1456w" sizes="100vw" loading="lazy"></picture><div></div></div></a></figure></div><p>Using Dev Containers also helps team work and sharing knowledge. When everyone uses the same environment, sharing code and fixing problems is easier. You can expect a <strong>40% reduction</strong> in support tickets about build environment issues. This lets your team focus on development instead of putting out fires.</p><p>Also, the separation of development environments from Dev Containers stops problems between projects. Each project can have its own needs without affecting others. This separation makes the development process more stable. It allows you to try new things safely without risking other projects.</p><h2>Create Your First Devcontainer</h2><div id="youtube2-C_5tDWsWSj0" class="youtube-wrap" data-attrs="{&quot;videoId&quot;:&quot;C_5tDWsWSj0&quot;,&quot;startTime&quot;:null,&quot;endTime&quot;:null}" data-component-name="Youtube2ToDOM"><div class="youtube-inner"><iframe src="https://www.youtube-nocookie.com/embed/C_5tDWsWSj0?rel=0&amp;autoplay=0&amp;showinfo=0&amp;enablejsapi=0" frameborder="0" loading="lazy" gesture="media" allow="autoplay; fullscreen" allowautoplay="true" allowfullscreen="true" width="728" height="409"></iframe></div></div><p>Making your first devcontainer can be a fun step to standardize your development environment. Follow this easy guide to set up a basic development container for a Node.js application.</p><h3>Prerequisites</h3><p>Before you start, make sure you have these tools to run your dev container:</p><ul><li><p><strong>VS Code</strong></p></li><li><p><strong>Docker Desktop</strong> for Windows/Mac or <strong>Docker CE/CC</strong> for Linux</p></li><li><p><strong>VS Code Remote Development Extension Pack</strong></p></li></ul><h3>Step-by-Step Process</h3><ol><li><p><strong>Install Application Dependencies</strong>: Start by installing Node.js and any other tools your application needs.</p></li><li><p><strong>Create NodeJS Application Files</strong>: Set up your project layout and create the files for your Node.js application.</p></li><li><p><strong>Write the Dockerfile</strong>: Make a Dockerfile that shows how your application will run in the container. This file should list the base image and any extra setup commands.</p></li><li><p><strong>Create DockerHub Image Repository</strong>: If you want to share your image, make a repository on DockerHub to keep your Docker images.</p></li><li><p><strong>Build the Docker Image</strong>: Use the Docker CLI to build your image from the Dockerfile. Run this command:</p></li></ol><pre><code><code>docker build -t your-image-name .
</code></code></pre><ol><li><p><strong>Run the Docker Container</strong>: Start your container with this command:</p></li></ol><pre><code><code>docker run -d -p 3000:3000 your-image-name
</code></code></pre><ol><li><p>This command runs your application in the background and connects port 3000 of the container to port 3000 on your host.</p></li><li><p><strong>Optimize for Production</strong>: Make sure to improve your Dockerfile for production by reducing the image size and following security best practices.</p></li><li><p><strong>Push to a Container Registry</strong>: Finally, upload your image to the DockerHub repository using:</p></li></ol><pre><code><code>docker push your-image-name
</code></code></pre><h3>Best Practices</h3><p>To keep your devcontainer settings good over time, think about these best practices:</p><ul><li><p>Make configuration easier by using features in VS Code to install needed tools instead of long Dockerfile steps.</p></li><li><p>Build the environment step by step, mixing Docker setup with manual steps and notes for clarity.</p></li><li><p>Use dev containers in CI/CD pipelines to make testing and deployment easier.</p></li></ul><p>By following these steps, you can create your first devcontainer and enjoy a steady development environment. <a href="https://coder.com/docs/admin/templates/managing-templates/devcontainers">Dev Containers help teamwork among remote teams</a> by giving them standardized and customizable environments that are easy to share. This reduces configuration problems and lets developers work well from different places.</p><h3>Common Mistakes to Avoid</h3><p>When setting up your devcontainer, watch out for these common mistakes:</p><ul><li><p>Using the &#8216;latest&#8217; tag in production can cause unexpected changes in the container version.</p></li><li><p>Running containers as root raises security risks if someone breaks into the container.</p></li><li><p>Not making <code>.dockerignore</code> files can create larger images by including unwanted files in the build context.</p></li><li><p>Using big, bloated base images can slow down downloads and deployments; smaller, purpose-built images are better.</p></li><li><p>Ignoring Dockerfile layer optimization can lead to slow builds and larger images.</p></li></ul><p>By avoiding these mistakes, you can have a smoother experience with your development containers.</p><h2>Best Practices for Using Dev Containers</h2><p>Using Dev Containers well can make your development experience much better. Here are some tips to think about:</p><ol><li><p><strong><a href="https://www.okoone.com/spark/product-design-research/improve-your-development-workflow-with-dev-containers/">Customization</a></strong>: Change your Dev Containers to fit your project&#8217;s needs. Use Dev Container Features to add tools and improve functionality.</p></li><li><p><strong>Repeatability and Consistency</strong>: Keep all settings in one file. This helps make builds the same and cuts down on unexpected problems.</p></li><li><p><strong>Integration with CI/CD Pipelines</strong>: Automate testing and deployment. This saves time and effort when adding new features or fixes.</p></li><li><p><strong>Use of Predefined Features</strong>: Quickly add tools and services without doing it by hand. This speeds up development and cuts setup time.</p></li><li><p><strong>Standardized Base Image</strong>: Agree on core technologies. This makes customization easier and lowers compatibility issues.</p></li><li><p><strong>Remote Development Tools</strong>: Use Visual Studio Code&#8217;s tools for better management. These tools help keep the development process organized.</p></li><li><p><strong>Cloud-Native Development Focus</strong>: Keep your code in the same environment all the time. This helps with cloud deployment.</p></li></ol><blockquote><p><strong>Security Considerations</strong>: When using Dev Containers, watch out for security risks. Here are some common problems and how to fix them:</p><ul><li><p><strong>Vulnerabilities in container runtimes</strong>: Make sure to secure container images and handle secrets well.</p></li><li><p><strong>Insufficient network security</strong>: Set up strong network controls to stop unauthorized access.</p></li><li><p><strong>Weak authentication and authorization</strong>: Use centralized access management to keep your applications safe.</p></li><li><p><strong>Unsecured APIs</strong>: Protect your APIs to stop interception of communications.</p></li><li><p><strong>Lack of visibility</strong>: Regularly check dependencies to find possible vulnerabilities.</p></li></ul></blockquote><p>To improve security, follow these tips:</p><ul><li><p><a href="https://www.rapidfort.com/blog/common-container-security-issues-risks-and-best-practices">Download container images from trusted sources</a>.</p></li><li><p>Remove unneeded software packages from images.</p></li><li><p>Regularly scan container images for vulnerabilities.</p></li><li><p>Use secret rotation and auditing policies.</p></li><li><p>Use runtime security tools to watch container activity.</p></li></ul><p>By following these best practices, you can build a safe and efficient development environment that helps your team be more productive.</p><div><hr></div><p>In short, Dev Containers change how you develop software. They offer:</p><ul><li><p><strong>Consistency</strong>: You stop &#8216;it works on my machine&#8217; problems.</p></li><li><p><strong>Isolation</strong>: Each project works in its own space, avoiding issues.</p></li><li><p><strong>Reproducibility</strong>: You can easily copy environments on different systems.</p></li><li><p><strong>Portability</strong>: Applications work on any system that uses Docker.</p></li><li><p><strong>Resource Efficiency</strong>: They need less power than regular VMs.</p></li><li><p><strong>Dependency Management</strong>: Managing dependencies is easier.</p></li><li><p><strong>Rapid Development and Testing</strong>: You can quickly test and make changes.</p></li><li><p><strong>Version Control</strong>: You can keep track of changes in environments with your code.</p></li></ul><p>As you start using Dev Containers, remember to <a href="https://medium.com/%40mattiagazzola_95479/docker-developing-inside-a-container-why-how-bb0aa9cbe951">keep them safe</a>. Pay attention to known security issues and setup problems. Simple steps, like updating base images and using non-root users, can greatly improve security.</p><p>Looking forward, expect <a href="https://containertools.dev/article/The_future_of_containerization_trends_and_predictions.html">more new ideas in container technology</a>. Kubernetes will be key for managing containers. Cloud-native ideas will become more popular. Combining AI/ML with containers will open new doors, making your work even smoother.</p><p>Embrace these changes to stay ahead in your development journey! &#128640;</p><h2>FAQ</h2><h3>What are Dev Containers?</h3><p><a href="https://m365.show/p/what-is-microsoft-dataverse-and-how">Dev Containers</a> are special setups for development. They include all the tools, libraries, and settings you need. This helps keep things the same on different computers. It makes it easier for developers to work together without problems from different setups.</p><h3>How do I create a devcontainer.json file?</h3><p>To create a <code>devcontainer.json</code> file, put it in the <code>.devcontainer</code> folder of your project. This file tells what Docker image to use, how to run it, and which VS Code extensions you need for your work.</p><h3>Can I use Dev Containers for multiple projects?</h3><p>Yes, you can use Dev Containers for many projects. Each project can have its own <code>devcontainer.json</code> file. This lets you change the setup based on what each project needs without messing up others.</p><h3>Are there any security concerns with Dev Containers?</h3><p>Yes, security matters when using Dev Containers. You should protect container images, handle secrets carefully, and check for problems often to keep your development environment safe.</p><h3>How do Dev Containers improve onboarding for new developers?</h3><p>Dev Containers make it easier for new developers to start working. They provide a steady environment. New developers can quickly copy repositories and begin working without long setup times. This helps them become productive faster.</p>]]></content:encoded></item><item><title><![CDATA[Mastering Microsoft Graph API: The Hidden Power Behind Microsoft 365]]></title><description><![CDATA[You might not know this, but Microsoft 365 has a strong tool called Microsoft Graph API.]]></description><link>https://newsletter.m365.show/p/mastering-microsoft-graph-api-the</link><guid isPermaLink="false">https://newsletter.m365.show/p/mastering-microsoft-graph-api-the</guid><dc:creator><![CDATA[Mirko Peters - M365 Specialist]]></dc:creator><pubDate>Sun, 05 Oct 2025 19:49:19 GMT</pubDate><enclosure url="https://api.substack.com/feed/podcast/175111652/5bec54bba674f5242db952dc30fec849.mp3" length="0" type="audio/mpeg"/><content:encoded><![CDATA[<p>You might not know this, but Microsoft 365 has a strong tool called Microsoft Graph API. This API connects different services and data in Microsoft. Think about being able to get user info, manage resources, and make custom workflows easily. With Microsoft Graph API, you can boost your productivity and make your tasks easier than ever.</p><h2>Key Takeaways</h2><ul><li><p><a href="https://m365.show/p/what-is-microsoft-dataverse-and-how">Microsoft Graph API connects</a> different Microsoft 365 services. It lets you access user data and manage resources from one place.</p></li><li><p>Setting up your environment is very important. First, register your app. Then, assign permissions. Finally, create a client secret to use the API well.</p></li><li><p>Use webhooks to get quick notifications about changes in your resources. This helps your apps respond fast without checking all the time.</p></li><li><p>Automate daily tasks like user setup and license management with Microsoft Graph API. This saves time and reduces mistakes.</p></li><li><p>Follow good practices like smart query design and caching. This helps improve your API calls and makes everything work better.</p></li></ul><h2>What is Microsoft Graph API?</h2><h3>Overview of Microsoft Graph API</h3><p><a href="https://learn.microsoft.com/en-us/graph/">Microsoft Graph API is the way to access data and smart features in Microsoft 365.</a> You can use it to create smart apps, get useful information, and improve your Microsoft 365 experience. This API connects different services and data. It lets you find a lot of information across Microsoft products.</p><blockquote><p>Microsoft Graph is the way to access data and smart features in Microsoft 365. Use Microsoft Graph to create smart apps, get insights and analytics, and improve Microsoft 365 experiences.</p></blockquote><p>When you use Microsoft Graph API, you get one place to access all main Microsoft cloud services. This means you can work with many services without needing to handle different APIs for each one. Here are some <a href="https://vertexcs.com/the-role-of-microsoft-graph-in-modern-applications/">important benefits of using Microsoft Graph API</a>:</p><div class="captioned-image-container"><figure><a class="image-link image2" target="_blank" href="https://substackcdn.com/image/fetch/$s_!fggq!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F3e28e40e-47cd-4b10-9b0e-5594308de8db_835x228.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!fggq!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F3e28e40e-47cd-4b10-9b0e-5594308de8db_835x228.png 424w, https://substackcdn.com/image/fetch/$s_!fggq!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F3e28e40e-47cd-4b10-9b0e-5594308de8db_835x228.png 848w, https://substackcdn.com/image/fetch/$s_!fggq!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F3e28e40e-47cd-4b10-9b0e-5594308de8db_835x228.png 1272w, https://substackcdn.com/image/fetch/$s_!fggq!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F3e28e40e-47cd-4b10-9b0e-5594308de8db_835x228.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!fggq!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F3e28e40e-47cd-4b10-9b0e-5594308de8db_835x228.png" width="835" height="228" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/3e28e40e-47cd-4b10-9b0e-5594308de8db_835x228.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:228,&quot;width&quot;:835,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:27040,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/png&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:false,&quot;topImage&quot;:true,&quot;internalRedirect&quot;:&quot;https://m365.show/i/175111652?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F3e28e40e-47cd-4b10-9b0e-5594308de8db_835x228.png&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!fggq!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F3e28e40e-47cd-4b10-9b0e-5594308de8db_835x228.png 424w, https://substackcdn.com/image/fetch/$s_!fggq!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F3e28e40e-47cd-4b10-9b0e-5594308de8db_835x228.png 848w, https://substackcdn.com/image/fetch/$s_!fggq!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F3e28e40e-47cd-4b10-9b0e-5594308de8db_835x228.png 1272w, https://substackcdn.com/image/fetch/$s_!fggq!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F3e28e40e-47cd-4b10-9b0e-5594308de8db_835x228.png 1456w" sizes="100vw" fetchpriority="high"></picture><div></div></div></a></figure></div><h3>Key Components</h3><p>Knowing the <a href="https://prismatic.io/docs/components/ms-graph-api/">key parts of Microsoft Graph API</a> is important for using it well. Here are the main parts and what they do:</p><div class="captioned-image-container"><figure><a class="image-link image2" target="_blank" href="https://substackcdn.com/image/fetch/$s_!sZgw!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F75e1c166-1471-46fc-ae7e-3dd98f814499_820x136.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!sZgw!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F75e1c166-1471-46fc-ae7e-3dd98f814499_820x136.png 424w, https://substackcdn.com/image/fetch/$s_!sZgw!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F75e1c166-1471-46fc-ae7e-3dd98f814499_820x136.png 848w, https://substackcdn.com/image/fetch/$s_!sZgw!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F75e1c166-1471-46fc-ae7e-3dd98f814499_820x136.png 1272w, https://substackcdn.com/image/fetch/$s_!sZgw!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F75e1c166-1471-46fc-ae7e-3dd98f814499_820x136.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!sZgw!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F75e1c166-1471-46fc-ae7e-3dd98f814499_820x136.png" width="820" height="136" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/75e1c166-1471-46fc-ae7e-3dd98f814499_820x136.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:136,&quot;width&quot;:820,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:16059,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/png&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:&quot;https://m365.show/i/175111652?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F75e1c166-1471-46fc-ae7e-3dd98f814499_820x136.png&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!sZgw!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F75e1c166-1471-46fc-ae7e-3dd98f814499_820x136.png 424w, https://substackcdn.com/image/fetch/$s_!sZgw!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F75e1c166-1471-46fc-ae7e-3dd98f814499_820x136.png 848w, https://substackcdn.com/image/fetch/$s_!sZgw!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F75e1c166-1471-46fc-ae7e-3dd98f814499_820x136.png 1272w, https://substackcdn.com/image/fetch/$s_!sZgw!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F75e1c166-1471-46fc-ae7e-3dd98f814499_820x136.png 1456w" sizes="100vw" loading="lazy"></picture><div></div></div></a></figure></div><p>With Microsoft Graph API, you can <a href="https://learn.microsoft.com/en-us/graph/office-365-connected-services">access many Microsoft 365 services</a>, like:</p><ul><li><p>Outlook: email, calendars, and contacts</p></li><li><p>Microsoft Entra ID: users, groups, and directories</p></li><li><p>OneDrive: files</p></li><li><p>OneNote: notes and notebooks</p></li><li><p>SharePoint: sites, lists, and document libraries</p></li><li><p>Planner: tasks</p></li></ul><p>By using these parts, you can build strong applications that boost your productivity and make your work easier.</p><h2>Getting Started with Microsoft Graph API</h2><div id="youtube2-z11IZ4JFtBA" class="youtube-wrap" data-attrs="{&quot;videoId&quot;:&quot;z11IZ4JFtBA&quot;,&quot;startTime&quot;:null,&quot;endTime&quot;:null}" data-component-name="Youtube2ToDOM"><div class="youtube-inner"><iframe src="https://www.youtube-nocookie.com/embed/z11IZ4JFtBA?rel=0&amp;autoplay=0&amp;showinfo=0&amp;enablejsapi=0" frameborder="0" loading="lazy" gesture="media" allow="autoplay; fullscreen" allowautoplay="true" allowfullscreen="true" width="728" height="409"></iframe></div></div><p>To use the <strong>Microsoft Graph API</strong>, you need to get your environment ready and learn about authentication. Here&#8217;s a simple guide to help you start.</p><h3>Setting Up Your Environment</h3><p>Before you begin with the API, you must meet some requirements. Follow these steps to prepare your development environment:</p><ol><li><p><strong><a href="https://docs.workato.com/en/connectors/microsoft-graph-api.html">Register an application in Microsoft Entra ID.</a></strong> This lets your app work with <strong>Microsoft Graph API</strong>.</p></li><li><p><strong>Assign permissions to your application.</strong> You need to say what your app can access.</p></li><li><p><strong>Generate a client secret.</strong> This secret is like a password for your app.</p></li></ol><p>After you finish these steps, create a <strong>Microsoft 365</strong> developer account. Sign up on the <strong>Microsoft 365 Developer Program</strong> website. Then, set up a <strong>Microsoft 365</strong> developer subscription. This subscription gives you a special environment with user licenses.</p><p>You can also use <strong>Graph Explorer</strong> to test <strong>Microsoft Graph API</strong> queries without setting up apps. Log in to <strong>Graph Explorer</strong> with admin credentials for your developer tenant to start using the API.</p><h3>Authentication and Permissions</h3><p>Knowing about authentication and permissions is very important for using the <strong>Microsoft Graph API</strong> well. You can use different ways to authenticate, like:</p><ul><li><p><a href="https://learn.microsoft.com/en-us/graph/api/resources/authenticationmethods-overview">Email authentication</a></p></li><li><p>FIDO2 security key</p></li><li><p>Microsoft Authenticator app</p></li><li><p>Password authentication</p></li><li><p>Phone authentication</p></li></ul><p>Permissions in <strong>Microsoft Graph API</strong> are in two groups: delegated permissions and application permissions. Delegated permissions need user consent, letting apps act for users. On the other hand, application permissions are given by an admin and let apps access data without a signed-in user.</p><p>When you ask for permissions, follow a naming pattern that includes the resource, operation, and constraint, like &#8216;User.Read&#8217; or &#8216;Application.ReadWrite.All&#8217;. This helps you manage access better.</p><p>By setting up your environment and learning about authentication and permissions, you build a strong base for using the full power of the <strong>Microsoft Graph API</strong>.</p><h2>Core Functions of Microsoft Graph API</h2><p>The <strong>Microsoft Graph API</strong> has strong features that improve your experience with <strong>Microsoft 365</strong>. You can easily access user data and manage different services. Let&#8217;s look at these main functions closely.</p><h3>Accessing User Data</h3><p>With the <strong>Microsoft Graph API</strong>, you can get a lot of user data. This lets you make apps that give personalized experiences. Here are some types of user data you can access:</p><ul><li><p><strong>User Profiles</strong>: Get details like names, email addresses, and job titles.</p></li><li><p><strong>Contacts</strong>: Access a user&#8217;s contacts and their information.</p></li><li><p><strong>Calendar Events</strong>: Manage and see calendar events for planning.</p></li><li><p><strong>Mail</strong>: Read, create, and manage emails.</p></li><li><p><strong>Groups</strong>: Find out about user groups and memberships.</p></li></ul><p>By using this data, you can create apps that meet user needs. For example, you can build a dashboard that shows a user&#8217;s upcoming meetings, recent emails, and important contacts all in one spot. This helps users stay organized and boosts productivity.</p><blockquote><p><strong>Tip</strong>: Use the insights API to show relevant files based on user context. This feature helps teamwork and productivity by showing users what they need when they need it.</p></blockquote><h3>Managing Microsoft 365 Services</h3><p>The <strong>Microsoft Graph API</strong> makes it easier to manage <strong>Microsoft 365</strong> services. You can add different features to your apps, making it simple to handle tasks across platforms. Here are some key management functions:</p><ul><li><p><strong><a href="https://www.linkedin.com/pulse/microsoft-graph-api-purpose-use-cases-examples-nadir-riyani-gbctf">Email and Calendar Management</a></strong>: Add email and calendar features to your app to read, create, and manage events and emails.</p></li><li><p><strong>User and Group Management</strong>: Manage users, groups, roles, and permissions in Azure Active Directory.</p></li><li><p><strong>Microsoft Teams Integration</strong>: Create chatbots, automate channel management, and send notifications to Teams channels.</p></li><li><p><strong>Document Management</strong>: Access and manage files in OneDrive, SharePoint, and other connected services.</p></li><li><p><strong>Insights and Analytics</strong>: Get user insights, organizational data, and reports to help with decision-making.</p></li></ul><p>These features bring together data from many <strong>Microsoft 365</strong> services, like Azure AD, Teams, Outlook, and SharePoint. This makes it easier to get and manage data, allowing you to automate repetitive tasks. As a result, you save time and can focus on more important things.</p><p>Also, the <strong>Microsoft Graph API</strong> is key for automating <strong>Microsoft 365</strong>. It ensures smooth data access and management, which is very important for developers and administrators. Before <strong>Microsoft Graph</strong>, each <strong>Microsoft</strong> app had its own separate API. This made it hard to create apps that used all the features of <strong>Microsoft 365</strong>.</p><div class="captioned-image-container"><figure><a class="image-link image2" target="_blank" href="https://substackcdn.com/image/fetch/$s_!cQ2B!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd3a073bb-656c-4512-802e-5546c1ea5e3f_816x201.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!cQ2B!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd3a073bb-656c-4512-802e-5546c1ea5e3f_816x201.png 424w, https://substackcdn.com/image/fetch/$s_!cQ2B!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd3a073bb-656c-4512-802e-5546c1ea5e3f_816x201.png 848w, https://substackcdn.com/image/fetch/$s_!cQ2B!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd3a073bb-656c-4512-802e-5546c1ea5e3f_816x201.png 1272w, https://substackcdn.com/image/fetch/$s_!cQ2B!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd3a073bb-656c-4512-802e-5546c1ea5e3f_816x201.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!cQ2B!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd3a073bb-656c-4512-802e-5546c1ea5e3f_816x201.png" width="816" height="201" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/d3a073bb-656c-4512-802e-5546c1ea5e3f_816x201.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:201,&quot;width&quot;:816,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:24763,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/png&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:&quot;https://m365.show/i/175111652?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd3a073bb-656c-4512-802e-5546c1ea5e3f_816x201.png&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!cQ2B!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd3a073bb-656c-4512-802e-5546c1ea5e3f_816x201.png 424w, https://substackcdn.com/image/fetch/$s_!cQ2B!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd3a073bb-656c-4512-802e-5546c1ea5e3f_816x201.png 848w, https://substackcdn.com/image/fetch/$s_!cQ2B!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd3a073bb-656c-4512-802e-5546c1ea5e3f_816x201.png 1272w, https://substackcdn.com/image/fetch/$s_!cQ2B!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd3a073bb-656c-4512-802e-5546c1ea5e3f_816x201.png 1456w" sizes="100vw" loading="lazy"></picture><div></div></div></a></figure></div><p>By using the <strong>Microsoft Graph API</strong>, you can improve your apps and boost productivity across <strong>Microsoft 365</strong>. The ability to access user data and manage services well helps you create solutions that fit user needs.</p><h2>Advanced Features of Microsoft Graph API</h2><p>The <strong>Microsoft Graph API</strong> has special features that make building apps easier. Two of the best features are webhooks and batch requests. These tools help you make faster and better applications.</p><h3>Webhooks and Notifications</h3><p>Webhooks give you <a href="https://www.voitanos.io/blog/microsoft-graph-webhook-delta-query/">instant alerts</a> when something changes in your resources. This means your apps can react right away to events. You don&#8217;t have to keep checking for updates. Here&#8217;s how webhooks work:</p><ol><li><p>You send a request to Microsoft Graph to watch a specific resource.</p></li><li><p>Microsoft Graph checks your request and sends a token to your notification URL.</p></li><li><p>You reply with the token in plain text.</p></li><li><p>Microsoft Graph confirms the token and gives you a subscription ID.</p></li></ol><p>After you set it up, <a href="https://learn.microsoft.com/en-us/graph/change-notifications-delivery-webhooks">Microsoft Graph sends alerts</a> to your chosen endpoint whenever changes happen. If an alert fails, Microsoft Graph tries again at longer intervals. This way, you won&#8217;t miss important updates, even if there are small problems.</p><p>Some common uses for webhooks are:</p><ul><li><p>Telling IT teams about service problems.</p></li><li><p><a href="https://martellotech.com/blog/9-real-world-ways-webhooks-improve-office-365-performance-monitoring-and-service-quality/">Notifying users affected by outages</a>.</p></li><li><p>Keeping customers updated through different channels.</p></li></ul><p>Using webhooks can greatly improve how quickly your app responds and how users feel about it.</p><h3>Batch Requests and Delta Queries</h3><p>Batch requests help you cut down on the number of API calls your app makes. This feature makes your app run better and lowers server load. Instead of sending many requests, you can combine them into one batch. This saves time and resources.</p><p>Delta queries make getting data more efficient. They let you track changes without getting all the data again. For example, you can ask for only the changes since your last request. This means less data to process and a faster app.</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!mSrb!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fff51e876-4e15-435b-9aca-353c5b1fc367_814x241.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!mSrb!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fff51e876-4e15-435b-9aca-353c5b1fc367_814x241.png 424w, https://substackcdn.com/image/fetch/$s_!mSrb!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fff51e876-4e15-435b-9aca-353c5b1fc367_814x241.png 848w, https://substackcdn.com/image/fetch/$s_!mSrb!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fff51e876-4e15-435b-9aca-353c5b1fc367_814x241.png 1272w, https://substackcdn.com/image/fetch/$s_!mSrb!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fff51e876-4e15-435b-9aca-353c5b1fc367_814x241.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!mSrb!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fff51e876-4e15-435b-9aca-353c5b1fc367_814x241.png" width="814" height="241" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/ff51e876-4e15-435b-9aca-353c5b1fc367_814x241.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:241,&quot;width&quot;:814,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:32511,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/png&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:&quot;https://m365.show/i/175111652?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fff51e876-4e15-435b-9aca-353c5b1fc367_814x241.png&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!mSrb!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fff51e876-4e15-435b-9aca-353c5b1fc367_814x241.png 424w, https://substackcdn.com/image/fetch/$s_!mSrb!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fff51e876-4e15-435b-9aca-353c5b1fc367_814x241.png 848w, https://substackcdn.com/image/fetch/$s_!mSrb!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fff51e876-4e15-435b-9aca-353c5b1fc367_814x241.png 1272w, https://substackcdn.com/image/fetch/$s_!mSrb!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fff51e876-4e15-435b-9aca-353c5b1fc367_814x241.png 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg role="img" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><title></title><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><p>By using these advanced features of the <strong>Microsoft Graph API</strong>, you can build apps that are not only efficient but also meet user needs quickly.</p><h2>Best Practices for Microsoft Graph API</h2><p>When you use the <strong>Microsoft Graph API</strong>, following good practices can make your experience better and help it work faster. Here are some tips to improve your API calls and keep things safe.</p><h3>Optimizing API Calls</h3><p>To get the best from your API usage, think about these ideas:</p><ul><li><p><strong><a href="https://www.integrate.io/blog/graph-api-boost-your-data-skills/">Efficient Query Design</a></strong>: Only get the data you need. Use clear filters to limit the information you receive.</p></li><li><p><strong>Caching</strong>: Cut down on API calls by saving common queries and their results. This saves time and resources.</p></li><li><p><strong>Pagination and Batching</strong>: Limit the data you get in one request. Combine several calls into one batch to work better.</p></li><li><p><strong>Concurrency</strong>: Make several API calls at the same time. This speeds up retrieval but watch out for rate limits.</p></li><li><p><strong>Regularly Review API Updates</strong>: Keep up with the latest changes in the <strong>Microsoft Graph API</strong> documentation. This helps you use new features and improvements.</p></li></ul><p>By using these practices, you can lower delays and increase speed. For example, use the least privilege principle to limit requests. Use pagination to get data in smaller parts. Also, use filtering, sorting, and projection to limit the data you receive.</p><h3>Security Considerations</h3><p>Keeping things safe is very important when using the <strong>Microsoft Graph API</strong>. Here are key points to remember:</p><ul><li><p>Register your apps with <strong>Microsoft Graph</strong>. You need customer consent to access user data.</p></li><li><p>Make sure you ask for <a href="https://learn.microsoft.com/en-us/graph/security-authorization">specific permissions</a>. For GET requests, use *.Read.All. For PATCH, POST, or DELETE requests, use *.ReadWrite.All.</p></li><li><p>Permissions must be clearly given by a <strong>Microsoft Entra</strong> tenant administrator through the admin consent endpoint.</p></li><li><p>Give users the <strong>Microsoft Entra ID Security Reader</strong> role to access sensitive security data.</p></li></ul><p>Be aware of common security risks linked to the <strong>Microsoft Graph API</strong>. Each risk gives context and specific ways to fix it. Regularly check your security measures to protect your apps and data.</p><p>By following these best practices, you can improve your use of the <strong>Microsoft Graph API</strong> while keeping strong security.</p><h2>Use Cases for Microsoft Graph API</h2><p>The <strong>Microsoft Graph API</strong> has strong features that can change how you use <strong>Microsoft 365</strong>. Here are some real-life examples that show what it can do.</p><h3>Automating Tasks</h3><p>You can make many everyday tasks automatic with the <strong>Microsoft Graph API</strong>. This saves time and cuts down on mistakes. Here are some ways to use the API for automation:</p><ul><li><p><strong>User Provisioning</strong>: Make account setup, license giving, and permission changes easier based on updates in your HR system.</p></li><li><p><strong>Policy Enforcement</strong>: Automatically check for rule-breaking and fix issues to keep everything in line.</p></li><li><p><strong>License Management</strong>: Find unused licenses and automatically assign them based on user details to avoid waste.</p></li><li><p><strong>Permissions Management</strong>: Automatically give or take away permissions when roles change to keep access correct.</p></li><li><p><strong>Compliance Monitoring</strong>: Regularly check if rules are followed, mark problems, and suggest fixes.</p></li></ul><p>By automating these tasks, you work better and can focus on more important projects.</p><h3>Integrating with Third-Party Applications</h3><p>The <strong>Microsoft Graph API</strong> also helps you connect easily with other applications. This makes your work smoother and boosts productivity. Here are some good things about linking the API with outside apps:</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!QJtw!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F0b58ecec-a6b2-4839-8c4d-80a15f67f4cf_829x286.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!QJtw!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F0b58ecec-a6b2-4839-8c4d-80a15f67f4cf_829x286.png 424w, https://substackcdn.com/image/fetch/$s_!QJtw!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F0b58ecec-a6b2-4839-8c4d-80a15f67f4cf_829x286.png 848w, https://substackcdn.com/image/fetch/$s_!QJtw!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F0b58ecec-a6b2-4839-8c4d-80a15f67f4cf_829x286.png 1272w, https://substackcdn.com/image/fetch/$s_!QJtw!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F0b58ecec-a6b2-4839-8c4d-80a15f67f4cf_829x286.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!QJtw!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F0b58ecec-a6b2-4839-8c4d-80a15f67f4cf_829x286.png" width="829" height="286" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/0b58ecec-a6b2-4839-8c4d-80a15f67f4cf_829x286.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:286,&quot;width&quot;:829,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:34698,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/png&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:&quot;https://m365.show/i/175111652?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F0b58ecec-a6b2-4839-8c4d-80a15f67f4cf_829x286.png&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!QJtw!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F0b58ecec-a6b2-4839-8c4d-80a15f67f4cf_829x286.png 424w, https://substackcdn.com/image/fetch/$s_!QJtw!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F0b58ecec-a6b2-4839-8c4d-80a15f67f4cf_829x286.png 848w, https://substackcdn.com/image/fetch/$s_!QJtw!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F0b58ecec-a6b2-4839-8c4d-80a15f67f4cf_829x286.png 1272w, https://substackcdn.com/image/fetch/$s_!QJtw!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F0b58ecec-a6b2-4839-8c4d-80a15f67f4cf_829x286.png 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg role="img" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><title></title><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><p>Connecting the <strong>Microsoft Graph API</strong> with other applications lets you create custom experiences. You can change your apps based on user actions, showing relevant content and suggestions right away. This flexibility leads to happier users and better engagement.</p><p>By using the <strong>Microsoft Graph API</strong> for automation and integration, you open up new ways to work better and collaborate in your organization.</p><div><hr></div><p>Learning the Microsoft Graph API gives you strong tools in Microsoft 365. You can make tasks automatic, connect apps, and improve how users feel. As you look into this API, watch for new trends.</p><ul><li><p>In 2024, Microsoft Graph API will add <a href="https://www.linkedin.com/pulse/my-top-10-new-microsoft-graph-api-calls-2024-marcel-broschk-gadqf">new features to help with connections and automation</a>.</p></li><li><p>These updates will make things easier and help developers work better.</p></li></ul><p>By knowing about these changes, you can use the API to fit today&#8217;s workflows and security needs. Use the power of Microsoft Graph API to change how you work and team up in the Microsoft 365 world. &#128640;</p><h2>FAQ</h2><h3>What is Microsoft Graph API used for?</h3><p>Microsoft Graph API connects different Microsoft 365 services. You can get user data, <a href="https://m365.show/p/what-is-microsoft-dataverse-and-how">manage resources</a>, and automate tasks. This API helps you work better and lets you create custom apps that fit your needs.</p><h3>How do I authenticate with Microsoft Graph API?</h3><p>You can log in using OAuth 2.0. First, register your app in Microsoft Entra ID. Then, give it permissions and create a client secret. This process keeps your access to Microsoft Graph API safe.</p><h3>Can I use Microsoft Graph API for automation?</h3><p>Yes, you can automate tasks like setting up users, managing licenses, and checking rules. The API makes these tasks easier, saving time and cutting down on mistakes in your work.</p><h3>What are webhooks in Microsoft Graph API?</h3><p>Webhooks send you instant alerts when changes happen in your resources. You set up a subscription to get notifications, so your apps can react quickly to events without checking constantly.</p><h3>How can I optimize my API calls?</h3><p>To make your API calls better, create efficient queries, use caching, and break data into pages. These tips lower server load and speed up response times, making your app work better.</p>]]></content:encoded></item><item><title><![CDATA[Database Performance Anti-Patterns That Teams Ignore]]></title><description><![CDATA[Database performance anti-patterns can hurt how well a system works.]]></description><link>https://newsletter.m365.show/p/database-performance-anti-patterns</link><guid isPermaLink="false">https://newsletter.m365.show/p/database-performance-anti-patterns</guid><dc:creator><![CDATA[Mirko Peters - M365 Specialist]]></dc:creator><pubDate>Fri, 26 Sep 2025 15:46:47 GMT</pubDate><enclosure url="https://substack-post-media.s3.amazonaws.com/public/images/3a508daf-edfd-4651-955b-65660452870a_1408x768.jpeg" length="0" type="image/jpeg"/><content:encoded><![CDATA[<p>Database performance anti-patterns can hurt how well a system works. Many teams ignore these problems. They think these issues won&#8217;t affect their apps. But if they ignore these patterns, it can cause big problems. For example, using <code>SELECT *</code> queries gets extra columns. This makes charts load slowly. Not having indexes means the system checks the whole t&#8230;</p>
      <p>
          <a href="https://newsletter.m365.show/p/database-performance-anti-patterns">
              Read more
          </a>
      </p>
   ]]></content:encoded></item><item><title><![CDATA[Machine Learning Shortcuts Every Developer Misses]]></title><description><![CDATA[Machine learning is changing very fast.]]></description><link>https://newsletter.m365.show/p/machine-learning-shortcuts-every</link><guid isPermaLink="false">https://newsletter.m365.show/p/machine-learning-shortcuts-every</guid><dc:creator><![CDATA[Mirko Peters - M365 Specialist]]></dc:creator><pubDate>Fri, 26 Sep 2025 14:42:57 GMT</pubDate><enclosure url="https://substack-post-media.s3.amazonaws.com/public/images/87be9d84-0eeb-4484-ba10-6bf6f0d895a2_1408x768.jpeg" length="0" type="image/jpeg"/><content:encoded><![CDATA[<p>Machine learning is changing very fast. This makes being efficient very important for developers. Have you ever thought about what shortcuts you might not be using? By using these helpful tips, you can boost your coding speed and make your models work better. In fact, companies using AI tools have noticed a <a href="https://superagi.com/future-of-project-scheduling-trends-and-innovations-in-ai-project-management-tools-for-2025-and-beyond/">28% drop in project delays</a>.</p><h2>Key Takeaways</h2><ul><li><p>Use pr&#8230;</p></li></ul>
      <p>
          <a href="https://newsletter.m365.show/p/machine-learning-shortcuts-every">
              Read more
          </a>
      </p>
   ]]></content:encoded></item><item><title><![CDATA[The Illusion of Simplicity in ORM Frameworks]]></title><description><![CDATA[Many developers see ORM frameworks as tools that create the illusion of simplicity in database work.]]></description><link>https://newsletter.m365.show/p/the-illusion-of-simplicity-in-orm</link><guid isPermaLink="false">https://newsletter.m365.show/p/the-illusion-of-simplicity-in-orm</guid><dc:creator><![CDATA[Mirko Peters - M365 Specialist]]></dc:creator><pubDate>Fri, 26 Sep 2025 14:27:11 GMT</pubDate><enclosure url="https://substack-post-media.s3.amazonaws.com/public/images/0022c055-4c38-412e-b57a-48e6c6d10bd4_1408x768.jpeg" length="0" type="image/jpeg"/><content:encoded><![CDATA[<p>Many developers see ORM frameworks as tools that create the illusion of simplicity in database work. You might appreciate how these frameworks allow you to write less code, helping you focus on your app&#8217;s logic. However, this perspective can lead to a false sense of simplicity. Beneath the surface, ORM frameworks can introduce challenges that may catch &#8230;</p>
      <p>
          <a href="https://newsletter.m365.show/p/the-illusion-of-simplicity-in-orm">
              Read more
          </a>
      </p>
   ]]></content:encoded></item><item><title><![CDATA[Choosing Collaboration Tools Without Killing Dev Velocity]]></title><description><![CDATA[In today&#8217;s fast tech world, collaboration tools are very important.]]></description><link>https://newsletter.m365.show/p/choosing-collaboration-tools-without</link><guid isPermaLink="false">https://newsletter.m365.show/p/choosing-collaboration-tools-without</guid><dc:creator><![CDATA[Mirko Peters - M365 Specialist]]></dc:creator><pubDate>Thu, 25 Sep 2025 13:46:51 GMT</pubDate><enclosure url="https://substack-post-media.s3.amazonaws.com/public/images/15c6b480-b5c6-4058-b117-2673fb542014_1312x736.jpeg" length="0" type="image/jpeg"/><content:encoded><![CDATA[<p>In today&#8217;s fast tech world, collaboration tools are very important. They help you and your team make software. Picking the wrong tools can slow you down and cause frustration. You may notice that using the wrong tools makes you switch tasks too much. This can hurt your workflow and creativity. The goal is to find tools that help communication. They shou&#8230;</p>
      <p>
          <a href="https://newsletter.m365.show/p/choosing-collaboration-tools-without">
              Read more
          </a>
      </p>
   ]]></content:encoded></item><item><title><![CDATA[A Step-by-Step Guide to Using the AI Toolkit in Visual Studio Code]]></title><description><![CDATA[The AI Toolkit for VS Code helps you code better and faster.]]></description><link>https://newsletter.m365.show/p/a-step-by-step-guide-to-using-the</link><guid isPermaLink="false">https://newsletter.m365.show/p/a-step-by-step-guide-to-using-the</guid><dc:creator><![CDATA[Mirko Peters - M365 Specialist]]></dc:creator><pubDate>Tue, 23 Sep 2025 08:39:27 GMT</pubDate><enclosure url="https://substack-post-media.s3.amazonaws.com/public/images/73d0ecb7-8677-4957-b35e-544bf5cd93e1_1312x736.jpeg" length="0" type="image/jpeg"/><content:encoded><![CDATA[<p>The AI Toolkit for VS Code helps you code better and faster. It adds AI to your work process. This way, you can <a href="https://graphite.dev/guides/adopting-ai-tools-development-workflow">automate boring tasks</a>. You can also make your code better and work more efficiently. This toolkit makes development easier. You can focus on tough problems instead of simple tasks. It <a href="https://www.tribe.ai/applied-ai/benefits-of-ai-in-software-development">speeds up coding</a>, fixing errors, and testing. The AI toolki&#8230;</p>
      <p>
          <a href="https://newsletter.m365.show/p/a-step-by-step-guide-to-using-the">
              Read more
          </a>
      </p>
   ]]></content:encoded></item><item><title><![CDATA[How to Build Innovative Solutions for Microsoft 365 Using a Fluent API Library]]></title><description><![CDATA[Innovation is very important for improving your Microsoft 365 solutions.]]></description><link>https://newsletter.m365.show/p/how-to-build-innovative-solutions</link><guid isPermaLink="false">https://newsletter.m365.show/p/how-to-build-innovative-solutions</guid><dc:creator><![CDATA[Mirko Peters - M365 Specialist]]></dc:creator><pubDate>Sat, 20 Sep 2025 04:36:23 GMT</pubDate><enclosure url="https://substack-post-media.s3.amazonaws.com/public/images/0e09dba4-7aa8-4d54-adbd-b0af69199a4c_1312x736.jpeg" length="0" type="image/jpeg"/><content:encoded><![CDATA[<p>Innovation is very important for improving your Microsoft 365 solutions. A Fluent API Library makes this easier. It helps you create strong applications without much trouble. When you use a Fluent API, your code is easier to read. You also have a better coding experience. This way, you can focus on making new solutions. You won&#8217;t get confused by complic&#8230;</p>
      <p>
          <a href="https://newsletter.m365.show/p/how-to-build-innovative-solutions">
              Read more
          </a>
      </p>
   ]]></content:encoded></item></channel></rss>