Congratulations!

[Valid RSS] This is a valid RSS feed.

Recommendations

This feed is valid, but interoperability with the widest range of feed readers could be improved by implementing the following recommendations.

Source: http://feeds2.feedburner.com/PaulSchaeflein

  1. <?xml version="1.0" encoding="UTF-8"?>
  2. <?xml-stylesheet type="text/xsl" media="screen" href="/~d/styles/rss2titles.xsl"?><?xml-stylesheet type="text/css" media="screen" href="http://feeds.feedburner.com/~d/styles/itemtitles.css"?><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" xmlns:media="http://search.yahoo.com/mrss/" xmlns:feedburner="http://rssnamespace.org/feedburner/ext/1.0" version="2.0"><channel><title><![CDATA[Paul Schaeflein]]></title><description><![CDATA[Thoughts, stories and ideas.]]></description><link>https://www.schaeflein.net/</link><generator>Ghost 0.11</generator><lastBuildDate>Fri, 12 Jan 2018 18:46:32 GMT</lastBuildDate><ttl>60</ttl><atom10:link xmlns:atom10="http://www.w3.org/2005/Atom" rel="self" type="application/rss+xml" href="http://feeds.feedburner.com/PaulSchaeflein" /><feedburner:info uri="paulschaeflein" /><atom10:link xmlns:atom10="http://www.w3.org/2005/Atom" rel="hub" href="http://pubsubhubbub.appspot.com/" /><feedburner:browserFriendly>This is an XML content feed. It is intended to be viewed in a newsreader or syndicated to another site.</feedburner:browserFriendly><item><title><![CDATA[Exporting PowerApp - Only published version is exported]]></title><description><![CDATA[<p>Just a quick note to myself that may be useful to others...</p>
  3.  
  4. <p>In PowerApps, the web interface has an export/import function. This is useful for moving apps between environments (or tenants in the case of a consultant). One detail that is crucially important:</p>
  5.  
  6. <ul>
  7. <li>Only the published version of the</li></ul>]]></description><link>http://feedproxy.google.com/~r/PaulSchaeflein/~3/sCeHZKl15aU/</link><guid isPermaLink="false">bfd1fb3d-b633-4c67-a280-e0052cb80cf4</guid><category><![CDATA[PowerApps]]></category><dc:creator><![CDATA[Paul Schaeflein]]></dc:creator><pubDate>Fri, 12 Jan 2018 18:45:56 GMT</pubDate><content:encoded><![CDATA[<p>Just a quick note to myself that may be useful to others...</p>
  8.  
  9. <p>In PowerApps, the web interface has an export/import function. This is useful for moving apps between environments (or tenants in the case of a consultant). One detail that is crucially important:</p>
  10.  
  11. <ul>
  12. <li>Only the published version of the app is exported. Saving and closing an app is not enough.</li>
  13. </ul><div class="feedflare">
  14. <a href="http://feeds.feedburner.com/~ff/PaulSchaeflein?a=sCeHZKl15aU:dH72ONFdfvU:yIl2AUoC8zA"><img src="http://feeds.feedburner.com/~ff/PaulSchaeflein?d=yIl2AUoC8zA" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/PaulSchaeflein?a=sCeHZKl15aU:dH72ONFdfvU:dnMXMwOfBR0"><img src="http://feeds.feedburner.com/~ff/PaulSchaeflein?d=dnMXMwOfBR0" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/PaulSchaeflein?a=sCeHZKl15aU:dH72ONFdfvU:F7zBnMyn0Lo"><img src="http://feeds.feedburner.com/~ff/PaulSchaeflein?i=sCeHZKl15aU:dH72ONFdfvU:F7zBnMyn0Lo" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/PaulSchaeflein?a=sCeHZKl15aU:dH72ONFdfvU:V_sGLiPBpWU"><img src="http://feeds.feedburner.com/~ff/PaulSchaeflein?i=sCeHZKl15aU:dH72ONFdfvU:V_sGLiPBpWU" border="0"></img></a>
  15. </div><img src="http://feeds.feedburner.com/~r/PaulSchaeflein/~4/sCeHZKl15aU" height="1" width="1" alt=""/>]]></content:encoded><feedburner:origLink>https://www.schaeflein.net/exporting-powerapp-only-published-version-is-exported/</feedburner:origLink></item><item><title><![CDATA[Change the Display Name of a Message sender when using Microsoft Graph]]></title><description><![CDATA[<p>There are scenarios in which an application sends an email with the requirement that the sender name be something different than what is configured in Exchange. In an on-premises environment, this is straightforward. Setting the header in the message payload is usually sufficient because the authentication of the application by</p>]]></description><link>http://feedproxy.google.com/~r/PaulSchaeflein/~3/YBknCF1qWhY/</link><guid isPermaLink="false">2eb0c566-6d10-451e-b5cb-03c78414c59f</guid><category><![CDATA[Development]]></category><category><![CDATA[Office 365]]></category><dc:creator><![CDATA[Paul Schaeflein]]></dc:creator><pubDate>Wed, 10 Jan 2018 03:50:31 GMT</pubDate><content:encoded><![CDATA[<p>There are scenarios in which an application sends an email with the requirement that the sender name be something different than what is configured in Exchange. In an on-premises environment, this is straightforward. Setting the header in the message payload is usually sufficient because the authentication of the application by the mail server can happen outside of the application code (e.g. mail relay configuration, <a href="https://en.wikipedia.org/wiki/SMTP_Authentication">SMTP Auth</a>, etc.).</p>
  16.  
  17. <p>When using Exchange Online via Microsoft Graph, things are quite different. The application must present a token (with or without user context). In addition, the <a href="https://developer.microsoft.com/en-us/graph/docs/api-reference/v1.0/api/user_sendmail">sendEmail</a> action requires a user or group id or user principal name as part of the request URL. When the message is sent, Exchange uses the display name from Azure AD in the From name.</p>
  18.  
  19. <p>There are a few cases in which the from property of the message can be changed. From the <a href="https://developer.microsoft.com/en-us/graph/docs/api-reference/v1.0/resources/message">Graph API documentation for the message entity</a>:</p>
  20.  
  21. <blockquote>  
  22. <b>Setting the from and sender properties</b>  
  23. <br>  
  24. When a message is being composed, in most cases, the From and Sender properties represent the same signed-in user, unless either is updated as described in the following scenarios:  
  25. <br>  
  26. <ul>  
  27. <li>The from property can be changed if the Exchange administrator has assigned <b>sendAs</b> rights of the mailbox to some other users. The administrator can do this by selecting <b>Mailbox Permissions</b> of the mailbox owner in the Azure Management Portal, or by using the Exchange Admin Center or a Windows PowerShell Add-ADPermission cmdlet. Then, you can programmatically set the <b>from</b> property to one of these users who have <b>sendAs</b> rights for that mailbox.</li>  
  28. <li>The <b>sender</b> property can be changed if the mailbox owner has delegated one or more users to be able to send messages from that mailbox. The mailbox owner can delegate in Outlook. When a delegate sends a message on behalf of the mailbox owner, the <b>sender</b> property is set to the delegate‚Äôs account, and the <b>from</b> property remains as the mailbox owner. Programmatically, you can set the <b>sender</b> property to a user who has got delegate right for that mailbox.</li></ul>  
  29. </blockquote>
  30.  
  31. <p>While those cases sound a bit compliated, the setup can be simplified -- use a shared mailbox. (For details on the creation of a shared mailbox, refer to this support article: <a href="https://support.office.com/en-us/article/create-a-shared-mailbox-871a246d-3acd-4bba-948e-5de8be0544c9?appver=MOE150">Create a Shared Mailbox</a>) When using the Exchange Admin Portal to create a shared mailbox, the members will get the <strong>sendAs</strong> rights for the mailbox. The application can then set the <strong>from</strong> property to the address of the shared mailbox.</p>
  32.  
  33. <p>As an example: </p>
  34.  
  35. <ul>
  36. <li>Assume that a shared mailbox has an email address of [email protected] </li>
  37. <li>Assume the shared mailbox has a member with the upn [email protected]</li>
  38. </ul>
  39.  
  40. <p>The following HTTP request will send a message with the from name equal to the display name of the shared mailbox. The <strong>sender</strong> is set based on the UPN in the URL ([email protected]) and the <strong>from</strong> property is set in the body.</p>
  41.  
  42. <pre><code>POST https://graph.microsoft.com/v1.0/users/[email protected]/sendMail  
  43. Content-type: application/json
  44.  
  45. {
  46.  "message": {
  47.    "subject": "Meet for lunch?",
  48.    "body": {
  49.      "contentType": "Text",
  50.      "content": "The new cafeteria is open."
  51.    },
  52.    "toRecipients": [
  53.      {
  54.        "emailAddress": {
  55.          "address": "[email protected]"
  56.        }
  57.      }
  58.    ],
  59.    "from": {
  60.      "emailAddress": {
  61.        "address": "[email protected]"
  62.      }
  63.    }
  64.  }
  65. }
  66. </code></pre><div class="feedflare">
  67. <a href="http://feeds.feedburner.com/~ff/PaulSchaeflein?a=YBknCF1qWhY:O0EJka_e1Bs:yIl2AUoC8zA"><img src="http://feeds.feedburner.com/~ff/PaulSchaeflein?d=yIl2AUoC8zA" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/PaulSchaeflein?a=YBknCF1qWhY:O0EJka_e1Bs:dnMXMwOfBR0"><img src="http://feeds.feedburner.com/~ff/PaulSchaeflein?d=dnMXMwOfBR0" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/PaulSchaeflein?a=YBknCF1qWhY:O0EJka_e1Bs:F7zBnMyn0Lo"><img src="http://feeds.feedburner.com/~ff/PaulSchaeflein?i=YBknCF1qWhY:O0EJka_e1Bs:F7zBnMyn0Lo" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/PaulSchaeflein?a=YBknCF1qWhY:O0EJka_e1Bs:V_sGLiPBpWU"><img src="http://feeds.feedburner.com/~ff/PaulSchaeflein?i=YBknCF1qWhY:O0EJka_e1Bs:V_sGLiPBpWU" border="0"></img></a>
  68. </div><img src="http://feeds.feedburner.com/~r/PaulSchaeflein/~4/YBknCF1qWhY" height="1" width="1" alt=""/>]]></content:encoded><feedburner:origLink>https://www.schaeflein.net/change-the-display-name-of-a-message-sender/</feedburner:origLink></item><item><title><![CDATA[BIFocal podcast interview]]></title><description><![CDATA[<p>Last week at the SharePoint Fest conference, Jason and John made the mistake of inviting me on to their Business Intelligence-focused podcast BIFocal. You can listen and subscribe on their website <a href="https://bifocal.show/2017/12/13/paul-schaeflein-power-bi-microsoft-teams/">https://bifocal.show</a>.</p>
  69.  
  70. <p>We had a wide-ranging discussion, mostly because I ignored Jason's questions and asked a few of</p>]]></description><link>http://feedproxy.google.com/~r/PaulSchaeflein/~3/FzYkYMYufPY/</link><guid isPermaLink="false">d6e04678-554b-4cc9-813f-e07b3a85e1d4</guid><category><![CDATA[Office 365]]></category><category><![CDATA[Teams]]></category><category><![CDATA[Development]]></category><dc:creator><![CDATA[Paul Schaeflein]]></dc:creator><pubDate>Wed, 13 Dec 2017 21:05:53 GMT</pubDate><media:content url="https://bifocal.show/wp-content/uploads/2017/07/cropped-cropped-BIFocal-Logo-Final.jpg" medium="image" /><content:encoded><![CDATA[<img src="https://bifocal.show/wp-content/uploads/2017/07/cropped-cropped-BIFocal-Logo-Final.jpg" alt="BIFocal podcast interview"><p>Last week at the SharePoint Fest conference, Jason and John made the mistake of inviting me on to their Business Intelligence-focused podcast BIFocal. You can listen and subscribe on their website <a href="https://bifocal.show/2017/12/13/paul-schaeflein-power-bi-microsoft-teams/">https://bifocal.show</a>.</p>
  71.  
  72. <p>We had a wide-ranging discussion, mostly because I ignored Jason's questions and asked a few of my own. John &amp; Jason were very gracious in answering them, no doubt because they understand that developers don't really know how to do BI. ;)</p>
  73.  
  74. <p>BIFocal is one of my must-listen-to podcasts. I strongly encourage you to listen as well. </p><div class="feedflare">
  75. <a href="http://feeds.feedburner.com/~ff/PaulSchaeflein?a=FzYkYMYufPY:8Mo7ME6IZWE:yIl2AUoC8zA"><img src="http://feeds.feedburner.com/~ff/PaulSchaeflein?d=yIl2AUoC8zA" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/PaulSchaeflein?a=FzYkYMYufPY:8Mo7ME6IZWE:dnMXMwOfBR0"><img src="http://feeds.feedburner.com/~ff/PaulSchaeflein?d=dnMXMwOfBR0" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/PaulSchaeflein?a=FzYkYMYufPY:8Mo7ME6IZWE:F7zBnMyn0Lo"><img src="http://feeds.feedburner.com/~ff/PaulSchaeflein?i=FzYkYMYufPY:8Mo7ME6IZWE:F7zBnMyn0Lo" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/PaulSchaeflein?a=FzYkYMYufPY:8Mo7ME6IZWE:V_sGLiPBpWU"><img src="http://feeds.feedburner.com/~ff/PaulSchaeflein?i=FzYkYMYufPY:8Mo7ME6IZWE:V_sGLiPBpWU" border="0"></img></a>
  76. </div><img src="http://feeds.feedburner.com/~r/PaulSchaeflein/~4/FzYkYMYufPY" height="1" width="1" alt=""/>]]></content:encoded><feedburner:origLink>https://www.schaeflein.net/bifocal-podcast-interview/</feedburner:origLink></item><item><title><![CDATA[Microsoft Graph Community Call recording released]]></title><description><![CDATA[<p>The <a href="https://dev.office.com/blogs/microsoft-graph-community-call-december-5th-2017">recording of the Microsoft Graph Community Call held on Dec 5th has been published</a>. This is a new community call to be held on the first Tuesday of each month to share updates, tips and connect you to the product teams behind Microsoft Graph.</p>
  77.  
  78. <p>I strongly encourage you to</p>]]></description><link>http://feedproxy.google.com/~r/PaulSchaeflein/~3/h9DZaC0IU7I/</link><guid isPermaLink="false">0c230b90-2a21-48c9-bec8-a19fd7f506c5</guid><category><![CDATA[Development]]></category><category><![CDATA[Office 365]]></category><dc:creator><![CDATA[Paul Schaeflein]]></dc:creator><pubDate>Tue, 12 Dec 2017 03:20:31 GMT</pubDate><content:encoded><![CDATA[<p>The <a href="https://dev.office.com/blogs/microsoft-graph-community-call-december-5th-2017">recording of the Microsoft Graph Community Call held on Dec 5th has been published</a>. This is a new community call to be held on the first Tuesday of each month to share updates, tips and connect you to the product teams behind Microsoft Graph.</p>
  79.  
  80. <p>I strongly encourage you to dial-in each month!</p><div class="feedflare">
  81. <a href="http://feeds.feedburner.com/~ff/PaulSchaeflein?a=h9DZaC0IU7I:Qw-4YsIwWWw:yIl2AUoC8zA"><img src="http://feeds.feedburner.com/~ff/PaulSchaeflein?d=yIl2AUoC8zA" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/PaulSchaeflein?a=h9DZaC0IU7I:Qw-4YsIwWWw:dnMXMwOfBR0"><img src="http://feeds.feedburner.com/~ff/PaulSchaeflein?d=dnMXMwOfBR0" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/PaulSchaeflein?a=h9DZaC0IU7I:Qw-4YsIwWWw:F7zBnMyn0Lo"><img src="http://feeds.feedburner.com/~ff/PaulSchaeflein?i=h9DZaC0IU7I:Qw-4YsIwWWw:F7zBnMyn0Lo" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/PaulSchaeflein?a=h9DZaC0IU7I:Qw-4YsIwWWw:V_sGLiPBpWU"><img src="http://feeds.feedburner.com/~ff/PaulSchaeflein?i=h9DZaC0IU7I:Qw-4YsIwWWw:V_sGLiPBpWU" border="0"></img></a>
  82. </div><img src="http://feeds.feedburner.com/~r/PaulSchaeflein/~4/h9DZaC0IU7I" height="1" width="1" alt=""/>]]></content:encoded><feedburner:origLink>https://www.schaeflein.net/microsoft-graph-community-call-recording-released/</feedburner:origLink></item><item><title><![CDATA[SharePoint Conference North America - $50 discount]]></title><description><![CDATA[<p>I am delighted to announce that I will be presenting at the <a href="https://www.sharepointna.com/">SharePoint Conference North America</a> in Las Vegas on May 21-23 2018!</p>
  83.  
  84. <p>I am speaking about strategies and practices for integrating you line of business systems with Office 365. This includes the session "INS AND OUTS OF OFFICE 365</p>]]></description><link>http://feedproxy.google.com/~r/PaulSchaeflein/~3/R52eQb-CxxI/</link><guid isPermaLink="false">bf12e5e8-5c10-45d9-a3a2-0d82e41eb934</guid><category><![CDATA[SharePoint]]></category><category><![CDATA[Development]]></category><category><![CDATA[Teams]]></category><category><![CDATA[Speaking]]></category><dc:creator><![CDATA[Paul Schaeflein]]></dc:creator><pubDate>Fri, 08 Dec 2017 18:40:21 GMT</pubDate><media:content url="https://www.schaeflein.net/content/images/2017/12/SPCNA_email_300x141_SCHAEFLEIN.PNG" medium="image" /><content:encoded><![CDATA[<img src="https://www.schaeflein.net/content/images/2017/12/SPCNA_email_300x141_SCHAEFLEIN.PNG" alt="SharePoint Conference North America - $50 discount"><p>I am delighted to announce that I will be presenting at the <a href="https://www.sharepointna.com/">SharePoint Conference North America</a> in Las Vegas on May 21-23 2018!</p>
  85.  
  86. <p>I am speaking about strategies and practices for integrating you line of business systems with Office 365. This includes the session "INS AND OUTS OF OFFICE 365 -- INTEGRATION STRATEGIES FOR YOUR SYSTEMS" and a post-event workshop "TEAM UP - WORK TOGETHER BY INTEGRATING LOB SYSTEMS IN MICROSOFT TEAMS."</p>
  87.  
  88. <p>The conference organizers have extended a discount. Use the code <a href="https://www.sharepointna.com/#!/register">SCHAEFLEIN upon registration and receive $50 off the price</a>.</p>
  89.  
  90. <p><a href="https://www.sharepointna.com/#!/register"><img src="https://www.schaeflein.net/content/images/2017/12/SPCNA_1000x560_SCHAEFLEIN.JPG" alt="SharePoint Conference North America - $50 discount" title=""></a></p>
  91.  
  92. <p>I look forward to seeing you there!</p><div class="feedflare">
  93. <a href="http://feeds.feedburner.com/~ff/PaulSchaeflein?a=R52eQb-CxxI:1yr39N7yRjQ:yIl2AUoC8zA"><img src="http://feeds.feedburner.com/~ff/PaulSchaeflein?d=yIl2AUoC8zA" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/PaulSchaeflein?a=R52eQb-CxxI:1yr39N7yRjQ:dnMXMwOfBR0"><img src="http://feeds.feedburner.com/~ff/PaulSchaeflein?d=dnMXMwOfBR0" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/PaulSchaeflein?a=R52eQb-CxxI:1yr39N7yRjQ:F7zBnMyn0Lo"><img src="http://feeds.feedburner.com/~ff/PaulSchaeflein?i=R52eQb-CxxI:1yr39N7yRjQ:F7zBnMyn0Lo" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/PaulSchaeflein?a=R52eQb-CxxI:1yr39N7yRjQ:V_sGLiPBpWU"><img src="http://feeds.feedburner.com/~ff/PaulSchaeflein?i=R52eQb-CxxI:1yr39N7yRjQ:V_sGLiPBpWU" border="0"></img></a>
  94. </div><img src="http://feeds.feedburner.com/~r/PaulSchaeflein/~4/R52eQb-CxxI" height="1" width="1" alt=""/>]]></content:encoded><feedburner:origLink>https://www.schaeflein.net/sharepointna-may2018/</feedburner:origLink></item><item><title><![CDATA[Microsoft Tech Academy - Get Started Developing with Microsoft Teams]]></title><description><![CDATA[<p>Microsoft has a new Tech Academy site, part of the Tech Community.</p>
  95.  
  96. <p>One of the <a href="https://academy.techcommunity.microsoft.com/pathways/learningpath/f383be64-dbd7-47d0-8964-d3a3946bcf80">learning pathways covers developing with Microsoft Teams</a>. This includes videos and hands-on-labs.</p>
  97.  
  98. <p>Check it out!</p>]]></description><link>http://feedproxy.google.com/~r/PaulSchaeflein/~3/QregJXl6CQg/</link><guid isPermaLink="false">55e5104a-c480-4f77-ade8-9c6f0281d0d5</guid><category><![CDATA[Development]]></category><category><![CDATA[Office 365]]></category><category><![CDATA[Teams]]></category><dc:creator><![CDATA[Paul Schaeflein]]></dc:creator><pubDate>Wed, 06 Dec 2017 15:33:11 GMT</pubDate><media:content url="https://www.schaeflein.net/content/images/2017/12/LearningPath.jpg" medium="image" /><content:encoded><![CDATA[<img src="https://www.schaeflein.net/content/images/2017/12/LearningPath.jpg" alt="Microsoft Tech Academy - Get Started Developing with Microsoft Teams"><p>Microsoft has a new Tech Academy site, part of the Tech Community.</p>
  99.  
  100. <p>One of the <a href="https://academy.techcommunity.microsoft.com/pathways/learningpath/f383be64-dbd7-47d0-8964-d3a3946bcf80">learning pathways covers developing with Microsoft Teams</a>. This includes videos and hands-on-labs.</p>
  101.  
  102. <p>Check it out!</p><div class="feedflare">
  103. <a href="http://feeds.feedburner.com/~ff/PaulSchaeflein?a=QregJXl6CQg:NGwRjc6JQWM:yIl2AUoC8zA"><img src="http://feeds.feedburner.com/~ff/PaulSchaeflein?d=yIl2AUoC8zA" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/PaulSchaeflein?a=QregJXl6CQg:NGwRjc6JQWM:dnMXMwOfBR0"><img src="http://feeds.feedburner.com/~ff/PaulSchaeflein?d=dnMXMwOfBR0" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/PaulSchaeflein?a=QregJXl6CQg:NGwRjc6JQWM:F7zBnMyn0Lo"><img src="http://feeds.feedburner.com/~ff/PaulSchaeflein?i=QregJXl6CQg:NGwRjc6JQWM:F7zBnMyn0Lo" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/PaulSchaeflein?a=QregJXl6CQg:NGwRjc6JQWM:V_sGLiPBpWU"><img src="http://feeds.feedburner.com/~ff/PaulSchaeflein?i=QregJXl6CQg:NGwRjc6JQWM:V_sGLiPBpWU" border="0"></img></a>
  104. </div><img src="http://feeds.feedburner.com/~r/PaulSchaeflein/~4/QregJXl6CQg" height="1" width="1" alt=""/>]]></content:encoded><feedburner:origLink>https://www.schaeflein.net/microsoft-tech-academy-get-started-developing-with-microsoft-teams/</feedburner:origLink></item><item><title><![CDATA[Using Dynamic Values in Microsoft Flow]]></title><description><![CDATA[<p>Microsoft Flow provides a nice, low-friction environment for power users to automate tasks. When integrating custom web services into flow, we should be mindful of this ease-of-use capability and make our actions simple to call.</p>
  105.  
  106. <p>Recently, at the Live360! Conference in Orlando, I heard <a href="http://www.ableblue.com/blog">Matthew McDermott</a> remark that he had</p>]]></description><link>http://feedproxy.google.com/~r/PaulSchaeflein/~3/FEPhEutWD-g/</link><guid isPermaLink="false">4df16065-bf52-445f-9583-1abd4ba6606f</guid><category><![CDATA[Flow]]></category><category><![CDATA[Office 365]]></category><category><![CDATA[Development]]></category><dc:creator><![CDATA[Paul Schaeflein]]></dc:creator><pubDate>Tue, 05 Dec 2017 14:18:07 GMT</pubDate><media:content url="https://www.schaeflein.net/content/images/2017/12/dynamic-values-4.jpg" medium="image" /><content:encoded><![CDATA[<img src="https://www.schaeflein.net/content/images/2017/12/dynamic-values-4.jpg" alt="Using Dynamic Values in Microsoft Flow"><p>Microsoft Flow provides a nice, low-friction environment for power users to automate tasks. When integrating custom web services into flow, we should be mindful of this ease-of-use capability and make our actions simple to call.</p>
  107.  
  108. <p>Recently, at the Live360! Conference in Orlando, I heard <a href="http://www.ableblue.com/blog">Matthew McDermott</a> remark that he had to create a process for users to request new terms for a term set. As you may not know, the enterprise term store requires administrative privileges to update. It struck me as an ideal problem to solve with a Custom Connector in Flow.</p>
  109.  
  110. <p><a href="https://www.schaeflein.net/connecting-the-clouds-overview">I've written before about custom connectors and how they can provide capabilities that are un-achievable by most users in an organization.</a> Using this framework, adding an action to add a term to a term set is quite straightforward. (The actual implementation is the topic for another post. Stay tuned!)</p>
  111.  
  112. <h3 id="gatheringparametersforcreatingaterm">Gathering parameters for creating a term</h3>
  113.  
  114. <p>When looking at the SharePoint CSOM code required to add a term, you will notice a few pieces of data that are required:</p>
  115.  
  116. <pre><code class="language-csharp">TaxonomySession txSes = TaxonomySession.GetTaxonomySession(ctx);  
  117. TermStore termStore = txSes.GetDefaultSiteCollectionTermStore();  
  118. TermGroup group = termStore.GetGroup(TermGroupId);  
  119. TermSet set = group.TermSets.GetById(TermSetId);
  120.  
  121. var newTerm = set.CreateTerm(addTermRequest.Term, 1033, Guid.NewGuid());  
  122. </code></pre>
  123.  
  124. <ul>
  125. <li>A SharePoint context (which requires URL and credentials)</li>
  126. <li>Term Group Id</li>
  127. <li>Term Set Id</li>
  128. <li>Label for the new Term.</li>
  129. </ul>
  130.  
  131. <p>In our scenario, we will be establishing a context using stored credentials, so we don't need to collect those. (I promise, the creds are secure. Again, stay tuned.) But we do need the Id or Name of the term group and the term set. This information is likely not known by most users, since they are not readily visible when adding an item to a list. </p>
  132.  
  133. <p>In keeping with our goal of ease-of-use, we should provide a dropdown list of Term Groups, and once a Term Group is selected, show a list of Term Sets. For reference, this is very similar to the experience when referencing a SharePoint list. We provide a URL and can then select the list.</p>
  134.  
  135. <p><img src="https://www.schaeflein.net/content/images/2017/12/dynamic-values-1-1.jpg" alt="Using Dynamic Values in Microsoft Flow"></p>
  136.  
  137. <h3 id="supportingmethods">Supporting methods</h3>
  138.  
  139. <p>To support the dropdown controls, we will need methods to read all Term Groups from the Term Store and to read all Term Sets from a specified Term Group. We will also need a method to add the term. Example calls to these methods are listed below -- we will refer to them in a bit. Notice that each method requires a Site Url, but the property name for each is prefixed to distinguish them.</p>
  140.  
  141. <h4 id="gettermgroups">GetTermGroups</h4>
  142.  
  143. <pre><code>POST https://&lt;host&gt;/api/GetTermGroups
  144.  
  145. {
  146.  "tgSiteUrl":"https://&lt;tenant&gt;.sharepoint.com"
  147. }
  148.  
  149. HTTP/1.1 200 OK  
  150. Content-type: application/json
  151.  
  152. {
  153.  "termGroups": [
  154.    {
  155.      "termGroupId": "7caf3397-ZZa6-4d0d-8c00-aa8fdadfcXX3",
  156.      "termGroupName": "Contoso"
  157.    },
  158.    {
  159.      "termGroupId": "8e9c5770-ZZ4d-4324-b782-75a6fd95dXXb",
  160.      "termGroupName": "Flow"
  161.    }
  162.  ]
  163. }
  164. </code></pre>
  165.  
  166. <h4 id="gettermsets">GetTermSets</h4>
  167.  
  168. <pre><code>POST https://&lt;host&gt;/api/GetTermSets
  169.  
  170. {
  171.  "tsSiteUrl":"https://&lt;tenant&gt;.sharepoint.com",
  172.  "tsTermGroupId":"8e9c5770-ZZ4d-4324-b782-75a6fd95dXXb"
  173. }
  174.  
  175. HTTP/1.1 200 OK  
  176. Content-type: application/json
  177.  
  178. {
  179.  "termSets": [
  180.    {
  181.      "termSetId": "8e4a2c7a-ZZ18-4839-88b9-14a38be1XXXc",
  182.      "termSetName": "Matt"
  183.    }
  184.  ]
  185. }
  186. </code></pre>
  187.  
  188. <h4 id="addterm">AddTerm</h4>
  189.  
  190. <pre><code>POST https://&lt;host&gt;/api/AddTerm
  191.  
  192. {
  193.  "atSiteUrl":"https://scmvp.sharepoint.com",
  194.  "atTermGroupId":"8e9c5770-ZZ4d-4324-b782-75a6fd95dXXb",
  195.  "atTermSetId":"8e4a2c7a-ZZ18-4839-88b9-14a38be1XXXc",
  196.  "atTerm":"spfn"
  197. }
  198. </code></pre>
  199.  
  200. <h3 id="configuringdynamicvalues">Configuring Dynamic Values</h3>
  201.  
  202. <p>With the methods to get the required parameters, we can update the OpenAPI document (f.k.a. Swagger), instructing it to use those methods. The definition of the AddTerm method starts out with a description of the parameters:  </p>
  203.  
  204. <pre><code>"definitions": {
  205.  "AddTermRequest": {
  206.    "type": "object",
  207.    "properties": {
  208.      "atSiteUrl": {
  209.        "description": "Site Collection Url",
  210.        "type": "string"
  211.      },
  212.      "atTermGroupId": {
  213.        "description": "TermGroup Id",
  214.        "type": "string"
  215.      },
  216.      "atTermSetId": {
  217.        "description": "TermSet Id",
  218.        "type": "string",
  219.      },
  220.      "atTerm": {
  221.        "description": "Term to add",
  222.        "type": "string"
  223.      }
  224.    },
  225.    "required": [
  226.      "atSiteUrl",
  227.      "atTermGroupId",
  228.      "atTermSetId",
  229.      "atTerm"
  230.    ]
  231.  },
  232. }
  233. </code></pre>
  234.  
  235. <p>To get the dropdown control for a parameter, we need to provide the extension property <code>x-ms-dynamic-values</code>. I found the <a href="https://docs.microsoft.com/en-us/flow/customapi-how-to-swagger#x-ms-dynamic-values">documentation of this property to be a bit confusing</a>, so let me try to explain with examples.</p>
  236.  
  237. <p>In my scenario, I want the <code>atTermGroupId</code> to have a dynamic list of values. So I add the <code>x-ms-dynamic-values</code> property:</p>
  238.  
  239. <pre><code>"atTermGroupId": {
  240.  "description": "TermGroup Id",
  241.  "type": "string",
  242.  "x-ms-dynamic-values": {
  243.  }
  244. }
  245. </code></pre>
  246.  
  247. <p>The values I want to show are returned by the GetTermGroups method. That becomes the <code>operationId</code>:  </p>
  248.  
  249. <pre><code>"atTermGroupId": {
  250.  "description": "TermGroup Id",
  251.  "type": "string",
  252.  "x-ms-dynamic-values": {
  253.    "operationId": "GetTermGroups"
  254.  }
  255. }
  256. </code></pre>
  257.  
  258. <p>Next, the <code>x-ms-dynamic-values</code> properties needs to specify how to extract the dropdown items (and Id and Text) from the response. Referring to the sample output shown above, I see that method returns a collection with the name of "termGroups". Each item in the collection has a "termGroupId" and termGroupName". These are added as the <code>value-*</code> properties (not sure why it is called value-path instead of value-id):  </p>
  259.  
  260. <pre><code>"atTermGroupId": {
  261.  "description": "TermGroup Id",
  262.  "type": "string",
  263.  "x-ms-dynamic-values": {
  264.    "operationId": "GetTermGroups",
  265.    "value-collection":"termGroups",
  266.    "value-path":"termGroupId",
  267.    "value-title":"termGroupName"
  268.  }
  269. }
  270. </code></pre>
  271.  
  272. <p>It appears that we are done, but there is one more property that is required. The GetTermGroups operation has an input parameter - it requires the SiteUrl parameter:  </p>
  273.  
  274. <pre><code>"atTermGroupId": {
  275.  "description": "TermGroup Id",
  276.  "type": "string",
  277.  "x-ms-dynamic-values": {
  278.    "operationId": "GetTermGroups",
  279.    "value-collection":"termGroups",
  280.    "value-path":"termGroupId",
  281.    "value-title":"termGroupName",
  282.    "parameters": {
  283.      "tgSiteUrl": &lt;parameter-definition-here&gt;
  284.    }
  285.  }
  286. }
  287. </code></pre>
  288.  
  289. <p>To fill in that <code>&lt;parameter-definition-here&gt;</code> token, we have two possible choices. If we want to hard-code a value, meaning the same value is <strong>always</strong> used, then we can specify that value:  </p>
  290.  
  291. <pre><code>   "tgSiteUrl":"https://example.com"
  292. </code></pre>
  293.  
  294. <p>However, in our case, we want to pass the value entered by the user as the <code>atSiteUrl</code> parameter for the <code>AddTerm</code> operation. This is defined as a <em>dynamic parameter</em>. So, the parameter definition contains a "link" from the <code>AddTerm</code> parameter to the <code>GetTermGroups</code> parameter. </p>
  295.  
  296. <p>The full definition of the <code>atTermGroupId</code> parameter of the <code>AddTerm</code> operation:  </p>
  297.  
  298. <pre><code>"atTermGroupId": {
  299.  "description": "TermGroup Id",
  300.  "type": "string",
  301.  "x-ms-dynamic-values": {
  302.    "operationId": "GetTermGroups",
  303.    "value-collection":"termGroups",
  304.    "value-path":"termGroupId",
  305.    "value-title":"termGroupName",
  306.    "parameters": {
  307.      "tgSiteUrl": {
  308.        "parameter":"atSiteUrl"
  309.      }
  310.    }
  311.  }
  312. }
  313. </code></pre>
  314.  
  315. <p>When the above definition is provided as a custom connector, the Flow designer will then render the dropdown control, connected to the GetTermGroups operation.</p>
  316.  
  317. <p><img src="https://www.schaeflein.net/content/images/2017/12/dynamic-values-2.jpg" alt="Using Dynamic Values in Microsoft Flow">
  318. <img src="https://www.schaeflein.net/content/images/2017/12/dynamic-values-3.jpg" alt="Using Dynamic Values in Microsoft Flow"></p>
  319.  
  320. <p>In the <code>AddTerm</code> operation, the <code>atTermSet</code> parameter must be configured similarly:  </p>
  321.  
  322. <pre><code>"atTermSetId": {
  323.  "description": "TermSet Id",
  324.  "type": "string",
  325.  "x-ms-dynamic-values":{
  326.    "operationId":"GetTermSets",
  327.    "value-collection":"termSets"
  328.    "value-path":"termSetId",
  329.    "value-title":"termSetName",
  330.    "parameters":{
  331.      "tsSiteUrl": {
  332.        "parameter":"atSiteUrl"
  333.      },
  334.      "tsTermGroupId": {
  335.        "parameter": "atTermGroupId"
  336.      }
  337.    }
  338.  }
  339. }
  340. </code></pre>
  341.  
  342. <h3 id="hidethesupportingoperations">Hide the supporting operations</h3>
  343.  
  344. <p>In keeping with our ease-of-use theme, we should hide the supporting operations from the users. When using the Terms, it is very unlikely that getting a list of Term Groups or Term Sets is ever required. They are only needed to add or select a Term. Using the <code>x-ms-visibility</code> property, an operation (or parameter or schema) can be hidden from the Flow designer.</p>
  345.  
  346. <p>On the GetTermGroups and GetTermSets operations, add the property with the value <strong>internal</strong>;</p>
  347.  
  348. <pre><code>"paths": {
  349.  "/api/GetTermGroups": {
  350.    "post": {
  351.      "operationId": "GetTermGroups",
  352.      "x-ms-visibility":"internal",
  353.  
  354.    &lt;snipped&gt;
  355.  
  356. }
  357. </code></pre>
  358.  
  359. <p>With the <code>x-ms-visibility</code> setting, the support operations do not show as actions that the Flow creator can choose:</p>
  360.  
  361. <p><img src="https://www.schaeflein.net/content/images/2017/12/dynamic-values-4.jpg" alt="Using Dynamic Values in Microsoft Flow"></p>
  362.  
  363. <h3 id="conclusion">Conclusion</h3>
  364.  
  365. <p>I hope that you found this post helpful in creating Dynamic Values for flow Operations. Please post questions/comments below, or tag me in the <a href="https://powerusers.microsoft.com/t5/Microsoft-Flow-Community-Boards/ct-p/MSFlowCommunity">Flow Community Boards</a>.</p><div class="feedflare">
  366. <a href="http://feeds.feedburner.com/~ff/PaulSchaeflein?a=FEPhEutWD-g:i8PZcBgqsSg:yIl2AUoC8zA"><img src="http://feeds.feedburner.com/~ff/PaulSchaeflein?d=yIl2AUoC8zA" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/PaulSchaeflein?a=FEPhEutWD-g:i8PZcBgqsSg:dnMXMwOfBR0"><img src="http://feeds.feedburner.com/~ff/PaulSchaeflein?d=dnMXMwOfBR0" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/PaulSchaeflein?a=FEPhEutWD-g:i8PZcBgqsSg:F7zBnMyn0Lo"><img src="http://feeds.feedburner.com/~ff/PaulSchaeflein?i=FEPhEutWD-g:i8PZcBgqsSg:F7zBnMyn0Lo" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/PaulSchaeflein?a=FEPhEutWD-g:i8PZcBgqsSg:V_sGLiPBpWU"><img src="http://feeds.feedburner.com/~ff/PaulSchaeflein?i=FEPhEutWD-g:i8PZcBgqsSg:V_sGLiPBpWU" border="0"></img></a>
  367. </div><img src="http://feeds.feedburner.com/~r/PaulSchaeflein/~4/FEPhEutWD-g" height="1" width="1" alt=""/>]]></content:encoded><feedburner:origLink>https://www.schaeflein.net/using-dynamic-values-in-microsoft-flow/</feedburner:origLink></item><item><title><![CDATA[Webinar: Using Microsoft Flow to automate a B2B approval process]]></title><description><![CDATA[<p>Want to see how Flow combined with a custom web service can help your users? Come to a webinar showing a real-life solution leveraging Microsoft Flow and Azure B2B.</p>
  368.  
  369. <p>When: 12/7/2017 1PM EST / 10AM PST</p>
  370.  
  371. <p>Subscribe to watch <a href="https://www.youtube.com/watch?v=AIImcUZyP7U">https://www.youtube.com/watch?v=AIImcUZyP7U</a></p>]]></description><link>http://feedproxy.google.com/~r/PaulSchaeflein/~3/pqyABQnW66o/</link><guid isPermaLink="false">1f4ef39e-2d31-4ce0-af9c-eaf62c4b16d9</guid><category><![CDATA[Flow]]></category><category><![CDATA[Development]]></category><category><![CDATA[Speaking]]></category><category><![CDATA[Identity]]></category><category><![CDATA[Office 365]]></category><dc:creator><![CDATA[Paul Schaeflein]]></dc:creator><pubDate>Mon, 04 Dec 2017 22:10:04 GMT</pubDate><content:encoded><![CDATA[<p>Want to see how Flow combined with a custom web service can help your users? Come to a webinar showing a real-life solution leveraging Microsoft Flow and Azure B2B.</p>
  372.  
  373. <p>When: 12/7/2017 1PM EST / 10AM PST</p>
  374.  
  375. <p>Subscribe to watch <a href="https://www.youtube.com/watch?v=AIImcUZyP7U">https://www.youtube.com/watch?v=AIImcUZyP7U</a></p><div class="feedflare">
  376. <a href="http://feeds.feedburner.com/~ff/PaulSchaeflein?a=pqyABQnW66o:8NoylP7PwLA:yIl2AUoC8zA"><img src="http://feeds.feedburner.com/~ff/PaulSchaeflein?d=yIl2AUoC8zA" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/PaulSchaeflein?a=pqyABQnW66o:8NoylP7PwLA:dnMXMwOfBR0"><img src="http://feeds.feedburner.com/~ff/PaulSchaeflein?d=dnMXMwOfBR0" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/PaulSchaeflein?a=pqyABQnW66o:8NoylP7PwLA:F7zBnMyn0Lo"><img src="http://feeds.feedburner.com/~ff/PaulSchaeflein?i=pqyABQnW66o:8NoylP7PwLA:F7zBnMyn0Lo" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/PaulSchaeflein?a=pqyABQnW66o:8NoylP7PwLA:V_sGLiPBpWU"><img src="http://feeds.feedburner.com/~ff/PaulSchaeflein?i=pqyABQnW66o:8NoylP7PwLA:V_sGLiPBpWU" border="0"></img></a>
  377. </div><img src="http://feeds.feedburner.com/~r/PaulSchaeflein/~4/pqyABQnW66o" height="1" width="1" alt=""/>]]></content:encoded><feedburner:origLink>https://www.schaeflein.net/webinar-using-microsoft-flow-b2b/</feedburner:origLink></item><item><title><![CDATA["Error - [sass] Error: Missing binding" when using Visual Studio Extension for SPFx]]></title><description><![CDATA[<p>When running Debug command in Visual Studio on an SPFx project, you may notice a lot of red in the console window: <br>
  378. <img src="https://www.schaeflein.net/content/images/2017/11/SPFxDebugErrors.jpg" alt=""></p>
  379.  
  380. <p>Furthermore, the web page will open to a page on localhost:5432 instead of localhost:4321.</p>
  381.  
  382. <h3 id="cause">Cause</h3>
  383.  
  384. <p>This error is caused by a version mismatch. The current <a href="https://docs.microsoft.com/en-us/sharepoint/dev/spfx/set-up-your-development-environment">guidance</a></p>]]></description><link>http://feedproxy.google.com/~r/PaulSchaeflein/~3/VkIVVUgpvGo/</link><guid isPermaLink="false">6355f466-c9f4-4b1b-97f3-e4630d0d31c9</guid><category><![CDATA[SharePoint Framework]]></category><category><![CDATA[Development]]></category><category><![CDATA[VSExtension]]></category><dc:creator><![CDATA[Paul Schaeflein]]></dc:creator><pubDate>Tue, 21 Nov 2017 19:35:30 GMT</pubDate><media:content url="https://www.schaeflein.net/content/images/2017/11/ExternalWebTools.jpg" medium="image" /><content:encoded><![CDATA[<img src="https://www.schaeflein.net/content/images/2017/11/ExternalWebTools.jpg" alt=""Error - [sass] Error: Missing binding" when using Visual Studio Extension for SPFx"><p>When running Debug command in Visual Studio on an SPFx project, you may notice a lot of red in the console window: <br>
  385. <img src="https://www.schaeflein.net/content/images/2017/11/SPFxDebugErrors.jpg" alt=""Error - [sass] Error: Missing binding" when using Visual Studio Extension for SPFx"></p>
  386.  
  387. <p>Furthermore, the web page will open to a page on localhost:5432 instead of localhost:4321.</p>
  388.  
  389. <h3 id="cause">Cause</h3>
  390.  
  391. <p>This error is caused by a version mismatch. The current <a href="https://docs.microsoft.com/en-us/sharepoint/dev/spfx/set-up-your-development-environment">guidance for setting up a developer workstation</a> calls for version 6.x of NodeJS. The Node Tools for Visual Studio (version 1.3.50201.08) is using NodeJS version 5.4.1.</p>
  392.  
  393. <p>You can see this in the output windows. When the project is opened, the Node Tools will inspect the packages.json file and download any missing packages. This process will log to the Output windows. (Select "Bower/npm" from the dropdown.) Near the bottom, below the dependency tree, look for errors. The running version is displayed in the log: <br>
  394. <img src="https://www.schaeflein.net/content/images/2017/11/NodeToolsVersion.jpg" alt=""Error - [sass] Error: Missing binding" when using Visual Studio Extension for SPFx"></p>
  395.  
  396. <h3 id="resolution">Resolution</h3>
  397.  
  398. <p>Configure Visual Studio to use the NodeJS version you installed instead of the version included in the Visual Studio install:</p>
  399.  
  400. <ul>
  401. <li>Click <strong>Tools > Options</strong></li>
  402. <li>Expand <strong>Projects and Solutions > Web Package Management</strong>. </li>
  403. <li>Click on <strong>External Web Tools</strong></li>
  404. <li>Select the entry <strong>$(PATH)</strong>. </li>
  405. <li>Click the up arrow to make this entry first in the list.</li>
  406. </ul>
  407.  
  408. <p><img src="https://www.schaeflein.net/content/images/2017/11/ExternalWebTools.jpg" alt=""Error - [sass] Error: Missing binding" when using Visual Studio Extension for SPFx">
  409. Performing these steps will not fully solve the issue for existing projects. You may still need to run the <code>npm rebuild node-sass --force</code> command. However, new projects will correctly download the correct node-sass module.</p><div class="feedflare">
  410. <a href="http://feeds.feedburner.com/~ff/PaulSchaeflein?a=VkIVVUgpvGo:zWGHpOlahzk:yIl2AUoC8zA"><img src="http://feeds.feedburner.com/~ff/PaulSchaeflein?d=yIl2AUoC8zA" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/PaulSchaeflein?a=VkIVVUgpvGo:zWGHpOlahzk:dnMXMwOfBR0"><img src="http://feeds.feedburner.com/~ff/PaulSchaeflein?d=dnMXMwOfBR0" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/PaulSchaeflein?a=VkIVVUgpvGo:zWGHpOlahzk:F7zBnMyn0Lo"><img src="http://feeds.feedburner.com/~ff/PaulSchaeflein?i=VkIVVUgpvGo:zWGHpOlahzk:F7zBnMyn0Lo" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/PaulSchaeflein?a=VkIVVUgpvGo:zWGHpOlahzk:V_sGLiPBpWU"><img src="http://feeds.feedburner.com/~ff/PaulSchaeflein?i=VkIVVUgpvGo:zWGHpOlahzk:V_sGLiPBpWU" border="0"></img></a>
  411. </div><img src="http://feeds.feedburner.com/~r/PaulSchaeflein/~4/VkIVVUgpvGo" height="1" width="1" alt=""/>]]></content:encoded><feedburner:origLink>https://www.schaeflein.net/error-sass-error-missing-binding-when-using-visual-studio-extension-for-spfx/</feedburner:origLink></item><item><title><![CDATA[Using MSAL package in Microsoft Teams Tab]]></title><description><![CDATA[<h4 id="problem">Problem</h4>
  412.  
  413. <p>Let's say you ran <code>yo Teams</code> to create a Tab for a Microsoft Teams app. The generated code will use HTML &amp; TypeScript, and uses <code>webpack</code> to transpile to JavaScript as part of the building process.</p>
  414.  
  415. <p>Now, add the MSAL package using <code>npm install msal</code>. </p>
  416.  
  417. <p>Normally, you would import</p>]]></description><link>http://feedproxy.google.com/~r/PaulSchaeflein/~3/37q2mYoHLQI/</link><guid isPermaLink="false">a8544afa-f95d-43dc-a33a-804631326aa3</guid><category><![CDATA[Teams]]></category><category><![CDATA[Development]]></category><category><![CDATA[Office 365]]></category><dc:creator><![CDATA[Paul Schaeflein]]></dc:creator><pubDate>Mon, 20 Nov 2017 22:29:59 GMT</pubDate><content:encoded><![CDATA[<h4 id="problem">Problem</h4>
  418.  
  419. <p>Let's say you ran <code>yo Teams</code> to create a Tab for a Microsoft Teams app. The generated code will use HTML &amp; TypeScript, and uses <code>webpack</code> to transpile to JavaScript as part of the building process.</p>
  420.  
  421. <p>Now, add the MSAL package using <code>npm install msal</code>. </p>
  422.  
  423. <p>Normally, you would import the MSAL library in your <code>.ts</code> file:</p>
  424.  
  425. <pre><code>import * as Msal from 'msal';
  426. </code></pre>
  427.  
  428. <p>Then, referencing the types in that module:</p>
  429.  
  430. <pre><code>private app: Msal.UserAgentApplication;
  431. </code></pre>
  432.  
  433. <p>Everything looks good in the editor, but running the build (webpack) process results in an error:</p>
  434.  
  435. <pre><code>TS2307: Cannot find module 'msal'
  436. </code></pre>
  437.  
  438. <h4 id="resolution">Resolution</h4>
  439.  
  440. <p>The Teams generator creates two <code>tsconfig</code> files. One for the "server," which is express on Node.js and one for the client JavaScript that runs in the browser. This client file, named <strong>tsconfig-client.json</strong> has the module resolution set to <a href="https://www.schaeflein.net/using-msal-package-in-microsoft-teams-tab/">classic</a>. So the TypeScript compiler does not look for the module in the node_modules folder.</p>
  441.  
  442. <p>The fix: in tsconfig-client.json, change the <strong>moduleResolution</strong> value to <code>node</code></p>
  443.  
  444. <p><img src="https://www.schaeflein.net/content/images/2017/11/tsconfig-client.png" alt=""></p>
  445.  
  446. <p><em>* NOTE *</em></p>
  447.  
  448. <p>Then generator has been updated, so this fix is only necessary in existing projects.</p><div class="feedflare">
  449. <a href="http://feeds.feedburner.com/~ff/PaulSchaeflein?a=37q2mYoHLQI:zCpWpVXLEyU:yIl2AUoC8zA"><img src="http://feeds.feedburner.com/~ff/PaulSchaeflein?d=yIl2AUoC8zA" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/PaulSchaeflein?a=37q2mYoHLQI:zCpWpVXLEyU:dnMXMwOfBR0"><img src="http://feeds.feedburner.com/~ff/PaulSchaeflein?d=dnMXMwOfBR0" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/PaulSchaeflein?a=37q2mYoHLQI:zCpWpVXLEyU:F7zBnMyn0Lo"><img src="http://feeds.feedburner.com/~ff/PaulSchaeflein?i=37q2mYoHLQI:zCpWpVXLEyU:F7zBnMyn0Lo" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/PaulSchaeflein?a=37q2mYoHLQI:zCpWpVXLEyU:V_sGLiPBpWU"><img src="http://feeds.feedburner.com/~ff/PaulSchaeflein?i=37q2mYoHLQI:zCpWpVXLEyU:V_sGLiPBpWU" border="0"></img></a>
  450. </div><img src="http://feeds.feedburner.com/~r/PaulSchaeflein/~4/37q2mYoHLQI" height="1" width="1" alt=""/>]]></content:encoded><feedburner:origLink>https://www.schaeflein.net/using-msal-package-in-microsoft-teams-tab/</feedburner:origLink></item><item><title><![CDATA[REST Client for VS Code]]></title><description><![CDATA[<p>This extension is pretty sweet:</p>
  451.  
  452. <ul>
  453. <li><a href="https://marketplace.visualstudio.com/items?itemName=humao.rest-client">REST Client</a></li>
  454. </ul>
  455.  
  456. <p>Type or paste a plain-text HTTP Request in a window and execute it with a click. Even runs CURL statements as well.</p>
  457.  
  458. <pre><code>POST https://example.com/comments HTTP/1.1  
  459. Content-Type: application/xml  
  460. Authorization: token xxx
  461.  
  462. &lt;request&gt;  
  463.    &lt;name&gt;sample&</code></pre>]]></description><link>http://feedproxy.google.com/~r/PaulSchaeflein/~3/YgELl0uAyKI/</link><guid isPermaLink="false">5f47a85f-3f6a-4fdf-a679-a1827c2112f0</guid><category><![CDATA[Development]]></category><dc:creator><![CDATA[Paul Schaeflein]]></dc:creator><pubDate>Wed, 18 Oct 2017 16:47:00 GMT</pubDate><media:content url="https://humao.gallerycdn.vsassets.io/extensions/humao/rest-client/0.15.3/1506414788386/Microsoft.VisualStudio.Services.Icons.Default" medium="image" /><content:encoded><![CDATA[<img src="https://humao.gallerycdn.vsassets.io/extensions/humao/rest-client/0.15.3/1506414788386/Microsoft.VisualStudio.Services.Icons.Default" alt="REST Client for VS Code"><p>This extension is pretty sweet:</p>
  464.  
  465. <ul>
  466. <li><a href="https://marketplace.visualstudio.com/items?itemName=humao.rest-client">REST Client</a></li>
  467. </ul>
  468.  
  469. <p>Type or paste a plain-text HTTP Request in a window and execute it with a click. Even runs CURL statements as well.</p>
  470.  
  471. <pre><code>POST https://example.com/comments HTTP/1.1  
  472. Content-Type: application/xml  
  473. Authorization: token xxx
  474.  
  475. &lt;request&gt;  
  476.    &lt;name&gt;sample&lt;/name&gt;
  477.    &lt;time&gt;Wed, 21 Oct 2015 18:27:50 GMT&lt;/time&gt;
  478. &lt;/request&gt;  
  479. </code></pre>
  480.  
  481. <p>It certainly is no replacement for Postman or Graph Explorer, but sometimes you just need a quick call to visualize/validate the payload.</p>
  482.  
  483. <p>(Hat tip to <a href="http://josephwoodward.co.uk/2017/10/rest-%20client-for-vs-Code-an-elegant-alternative-postman">http://josephwoodward.co.uk/2017/10/rest-%20client-for-vs-Code-an-elegant-alternative-postman</a>)</p><div class="feedflare">
  484. <a href="http://feeds.feedburner.com/~ff/PaulSchaeflein?a=YgELl0uAyKI:kAsbgZz4uqQ:yIl2AUoC8zA"><img src="http://feeds.feedburner.com/~ff/PaulSchaeflein?d=yIl2AUoC8zA" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/PaulSchaeflein?a=YgELl0uAyKI:kAsbgZz4uqQ:dnMXMwOfBR0"><img src="http://feeds.feedburner.com/~ff/PaulSchaeflein?d=dnMXMwOfBR0" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/PaulSchaeflein?a=YgELl0uAyKI:kAsbgZz4uqQ:F7zBnMyn0Lo"><img src="http://feeds.feedburner.com/~ff/PaulSchaeflein?i=YgELl0uAyKI:kAsbgZz4uqQ:F7zBnMyn0Lo" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/PaulSchaeflein?a=YgELl0uAyKI:kAsbgZz4uqQ:V_sGLiPBpWU"><img src="http://feeds.feedburner.com/~ff/PaulSchaeflein?i=YgELl0uAyKI:kAsbgZz4uqQ:V_sGLiPBpWU" border="0"></img></a>
  485. </div><img src="http://feeds.feedburner.com/~r/PaulSchaeflein/~4/YgELl0uAyKI" height="1" width="1" alt=""/>]]></content:encoded><feedburner:origLink>https://www.schaeflein.net/rest-client-for-vs-code/</feedburner:origLink></item><item><title><![CDATA[ADAL.Net 3.17.0 release]]></title><description><![CDATA[<p>Microsoft has published an update to the <a href="https://azure.microsoft.com/en-us/blog/adal-net-3-17-0-released-2/">Active Directory Authentication Library (ADAL)</a>. Notable enhancements:</p>
  486.  
  487. <ul>
  488. <li>Retry-After property when receiving a 429 response</li>
  489. <li>Better support for Conditional Access scenarios</li>
  490. <li>Multi-target project, which means one DLL reference</li>
  491. <li>Improved documentation (Ironically, there is no link to the docs in the announcement. Here are a</li></ul>]]></description><link>http://feedproxy.google.com/~r/PaulSchaeflein/~3/VdQNsPK7Qdg/</link><guid isPermaLink="false">2b5741a6-8a27-4715-982a-f330f75cc72e</guid><category><![CDATA[Identity]]></category><category><![CDATA[Development]]></category><category><![CDATA[Azure]]></category><dc:creator><![CDATA[Paul Schaeflein]]></dc:creator><pubDate>Wed, 11 Oct 2017 20:18:16 GMT</pubDate><media:content url="https://docs.microsoft.com/en-us/azure/active-directory/develop/media/active-directory-authentication-scenarios/application_types_and_scenarios.png" medium="image" /><content:encoded><![CDATA[<img src="https://docs.microsoft.com/en-us/azure/active-directory/develop/media/active-directory-authentication-scenarios/application_types_and_scenarios.png" alt="ADAL.Net 3.17.0 release"><p>Microsoft has published an update to the <a href="https://azure.microsoft.com/en-us/blog/adal-net-3-17-0-released-2/">Active Directory Authentication Library (ADAL)</a>. Notable enhancements:</p>
  492.  
  493. <ul>
  494. <li>Retry-After property when receiving a 429 response</li>
  495. <li>Better support for Conditional Access scenarios</li>
  496. <li>Multi-target project, which means one DLL reference</li>
  497. <li>Improved documentation (Ironically, there is no link to the docs in the announcement. Here are a few documentation links: <a href="https://docs.microsoft.com/en-us/azure/active-directory/develop/active-directory-authentication-libraries">General documentation</a> and <a href="https://docs.microsoft.com/en-us/dotnet/api/?view=identitymodelclientsad-3.16.0">API Browser</a>.)</li>
  498. </ul>
  499.  
  500. <p>Also, be aware that this is not the converged auth library that we are expecting from Azure. There are signs that things are getting closer, but they are not there yet.</p>
  501.  
  502. <p>Lastly, for readers of this blog, a reminder to post questions on on <a href="https://stackoverflow.com/questions/tagged/adal">Stack Overflow tagged with ADAL</a>.</p><div class="feedflare">
  503. <a href="http://feeds.feedburner.com/~ff/PaulSchaeflein?a=VdQNsPK7Qdg:encj-tOnxAw:yIl2AUoC8zA"><img src="http://feeds.feedburner.com/~ff/PaulSchaeflein?d=yIl2AUoC8zA" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/PaulSchaeflein?a=VdQNsPK7Qdg:encj-tOnxAw:dnMXMwOfBR0"><img src="http://feeds.feedburner.com/~ff/PaulSchaeflein?d=dnMXMwOfBR0" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/PaulSchaeflein?a=VdQNsPK7Qdg:encj-tOnxAw:F7zBnMyn0Lo"><img src="http://feeds.feedburner.com/~ff/PaulSchaeflein?i=VdQNsPK7Qdg:encj-tOnxAw:F7zBnMyn0Lo" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/PaulSchaeflein?a=VdQNsPK7Qdg:encj-tOnxAw:V_sGLiPBpWU"><img src="http://feeds.feedburner.com/~ff/PaulSchaeflein?i=VdQNsPK7Qdg:encj-tOnxAw:V_sGLiPBpWU" border="0"></img></a>
  504. </div><img src="http://feeds.feedburner.com/~r/PaulSchaeflein/~4/VdQNsPK7Qdg" height="1" width="1" alt=""/>]]></content:encoded><feedburner:origLink>https://www.schaeflein.net/adal-net-3-17-0-release/</feedburner:origLink></item><item><title><![CDATA[Enhancing Office 365 Collaboration via Microsoft Teams Extensions]]></title><description><![CDATA[<p>Microsoft Teams is not just about chatting. Not a "Slack killer" -- rather it is a collaboration platform that developers can use to help their users.</p>
  505.  
  506. <p>Interested in learning more? First, read the <a href="https://visualstudiomagazine.com/articles/2017/10/05/microsoft-teams.aspx">Q &amp; A I did with Visual Studio Magazine</a>. Then <a href="http://bit.ly/LSPK77_reg">sign up for a hands-on lab at</a></p>]]></description><link>http://feedproxy.google.com/~r/PaulSchaeflein/~3/raj89NZqLYY/</link><guid isPermaLink="false">f5ae94ca-4a3f-4acc-ab8c-352f32e2f566</guid><category><![CDATA[Teams]]></category><category><![CDATA[Speaking]]></category><dc:creator><![CDATA[Paul Schaeflein]]></dc:creator><pubDate>Fri, 06 Oct 2017 16:32:40 GMT</pubDate><media:content url="https://visualstudiomagazine.com/articles/2017/10/05/~/media/ECG/visualstudiomagazine/Images/introimages2014/1115vsm_PVogelPnetLong.ashx" medium="image" /><content:encoded><![CDATA[<img src="https://visualstudiomagazine.com/articles/2017/10/05/~/media/ECG/visualstudiomagazine/Images/introimages2014/1115vsm_PVogelPnetLong.ashx" alt="Enhancing Office 365 Collaboration via Microsoft Teams Extensions"><p>Microsoft Teams is not just about chatting. Not a "Slack killer" -- rather it is a collaboration platform that developers can use to help their users.</p>
  507.  
  508. <p>Interested in learning more? First, read the <a href="https://visualstudiomagazine.com/articles/2017/10/05/microsoft-teams.aspx">Q &amp; A I did with Visual Studio Magazine</a>. Then <a href="http://bit.ly/LSPK77_reg">sign up for a hands-on lab at Live360!</a> (That link gets you a discount!)</p><div class="feedflare">
  509. <a href="http://feeds.feedburner.com/~ff/PaulSchaeflein?a=raj89NZqLYY:_hStHcXZx0I:yIl2AUoC8zA"><img src="http://feeds.feedburner.com/~ff/PaulSchaeflein?d=yIl2AUoC8zA" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/PaulSchaeflein?a=raj89NZqLYY:_hStHcXZx0I:dnMXMwOfBR0"><img src="http://feeds.feedburner.com/~ff/PaulSchaeflein?d=dnMXMwOfBR0" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/PaulSchaeflein?a=raj89NZqLYY:_hStHcXZx0I:F7zBnMyn0Lo"><img src="http://feeds.feedburner.com/~ff/PaulSchaeflein?i=raj89NZqLYY:_hStHcXZx0I:F7zBnMyn0Lo" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/PaulSchaeflein?a=raj89NZqLYY:_hStHcXZx0I:V_sGLiPBpWU"><img src="http://feeds.feedburner.com/~ff/PaulSchaeflein?i=raj89NZqLYY:_hStHcXZx0I:V_sGLiPBpWU" border="0"></img></a>
  510. </div><img src="http://feeds.feedburner.com/~r/PaulSchaeflein/~4/raj89NZqLYY" height="1" width="1" alt=""/>]]></content:encoded><feedburner:origLink>https://www.schaeflein.net/enhancing-office-365-collaboration-via-microsoft-teams-extensions/</feedburner:origLink></item><item><title><![CDATA[Azure AD: Managed Service Identity preview]]></title><description><![CDATA[<p>Here is a great reason to host your cloud services in Azure: <a href="https://azure.microsoft.com/en-us/blog/keep-credentials-out-of-code-introducing-azure-ad-managed-service-identity/">Managed Service Identities</a></p>
  511.  
  512. <p>Instead of calling the AAD token endpoint, you can call this special service that is part of the Azure infrastructure. The Managed Service Identity service (exposed via localhost) handles the token acquisition for an identity</p>]]></description><link>http://feedproxy.google.com/~r/PaulSchaeflein/~3/BeATWtwiigg/</link><guid isPermaLink="false">daa66c78-cddd-428c-9f38-c4c991638636</guid><category><![CDATA[Identity]]></category><category><![CDATA[Azure]]></category><dc:creator><![CDATA[Paul Schaeflein]]></dc:creator><pubDate>Thu, 14 Sep 2017 19:17:04 GMT</pubDate><media:content url="https://azurecomcdn.azureedge.net/mediahandler/acomblog/media/Default/blog/8ea097aa-1497-4e69-9475-f55de097c91e.png" medium="image" /><content:encoded><![CDATA[<img src="https://azurecomcdn.azureedge.net/mediahandler/acomblog/media/Default/blog/8ea097aa-1497-4e69-9475-f55de097c91e.png" alt="Azure AD: Managed Service Identity preview"><p>Here is a great reason to host your cloud services in Azure: <a href="https://azure.microsoft.com/en-us/blog/keep-credentials-out-of-code-introducing-azure-ad-managed-service-identity/">Managed Service Identities</a></p>
  513.  
  514. <p>Instead of calling the AAD token endpoint, you can call this special service that is part of the Azure infrastructure. The Managed Service Identity service (exposed via localhost) handles the token acquisition for an identity registered for the VM / AppService / Function.</p>
  515.  
  516. <p>I'll be trying this out soon. Certainly makes applications more secure.</p><div class="feedflare">
  517. <a href="http://feeds.feedburner.com/~ff/PaulSchaeflein?a=BeATWtwiigg:RJmHLduGH88:yIl2AUoC8zA"><img src="http://feeds.feedburner.com/~ff/PaulSchaeflein?d=yIl2AUoC8zA" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/PaulSchaeflein?a=BeATWtwiigg:RJmHLduGH88:dnMXMwOfBR0"><img src="http://feeds.feedburner.com/~ff/PaulSchaeflein?d=dnMXMwOfBR0" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/PaulSchaeflein?a=BeATWtwiigg:RJmHLduGH88:F7zBnMyn0Lo"><img src="http://feeds.feedburner.com/~ff/PaulSchaeflein?i=BeATWtwiigg:RJmHLduGH88:F7zBnMyn0Lo" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/PaulSchaeflein?a=BeATWtwiigg:RJmHLduGH88:V_sGLiPBpWU"><img src="http://feeds.feedburner.com/~ff/PaulSchaeflein?i=BeATWtwiigg:RJmHLduGH88:V_sGLiPBpWU" border="0"></img></a>
  518. </div><img src="http://feeds.feedburner.com/~r/PaulSchaeflein/~4/BeATWtwiigg" height="1" width="1" alt=""/>]]></content:encoded><feedburner:origLink>https://www.schaeflein.net/managed-service-identity/</feedburner:origLink></item><item><title><![CDATA[Guest access comes to Microsoft Teams]]></title><description><![CDATA[<p>After a long period of development, guest access finally arrives for Microsoft Teams! Based on the Azure AD B2B service, the feature will enable many extranet-type scenarios.</p>
  519.  
  520. <p>More details on the <a href="https://blogs.technet.microsoft.com/enterprisemobility/2017/09/11/azure-ad-b2b-collaboration-in-microsoft-teams/">EMS Blog</a> and the <a href="http://blogs.office.com/en-us/2017/09/11/expand-your-collaboration-with-guest-access-in-microsoft-teams/">Office Blog</a>.</p>]]></description><link>http://feedproxy.google.com/~r/PaulSchaeflein/~3/__UvR17k8nE/</link><guid isPermaLink="false">394e9d07-be88-4e79-acc6-2c77f5535d55</guid><category><![CDATA[Identity]]></category><category><![CDATA[Teams]]></category><category><![CDATA[Office 365]]></category><dc:creator><![CDATA[Paul Schaeflein]]></dc:creator><pubDate>Mon, 11 Sep 2017 16:01:49 GMT</pubDate><media:content url="https://support.content.office.net/en-us/media/33394a31-7d10-4950-8b39-b7d9953397c3.png" medium="image" /><content:encoded><![CDATA[<img src="https://support.content.office.net/en-us/media/33394a31-7d10-4950-8b39-b7d9953397c3.png" alt="Guest access comes to Microsoft Teams"><p>After a long period of development, guest access finally arrives for Microsoft Teams! Based on the Azure AD B2B service, the feature will enable many extranet-type scenarios.</p>
  521.  
  522. <p>More details on the <a href="https://blogs.technet.microsoft.com/enterprisemobility/2017/09/11/azure-ad-b2b-collaboration-in-microsoft-teams/">EMS Blog</a> and the <a href="http://blogs.office.com/en-us/2017/09/11/expand-your-collaboration-with-guest-access-in-microsoft-teams/">Office Blog</a>.</p><div class="feedflare">
  523. <a href="http://feeds.feedburner.com/~ff/PaulSchaeflein?a=__UvR17k8nE:Y2jJs0pvkSM:yIl2AUoC8zA"><img src="http://feeds.feedburner.com/~ff/PaulSchaeflein?d=yIl2AUoC8zA" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/PaulSchaeflein?a=__UvR17k8nE:Y2jJs0pvkSM:dnMXMwOfBR0"><img src="http://feeds.feedburner.com/~ff/PaulSchaeflein?d=dnMXMwOfBR0" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/PaulSchaeflein?a=__UvR17k8nE:Y2jJs0pvkSM:F7zBnMyn0Lo"><img src="http://feeds.feedburner.com/~ff/PaulSchaeflein?i=__UvR17k8nE:Y2jJs0pvkSM:F7zBnMyn0Lo" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/PaulSchaeflein?a=__UvR17k8nE:Y2jJs0pvkSM:V_sGLiPBpWU"><img src="http://feeds.feedburner.com/~ff/PaulSchaeflein?i=__UvR17k8nE:Y2jJs0pvkSM:V_sGLiPBpWU" border="0"></img></a>
  524. </div><img src="http://feeds.feedburner.com/~r/PaulSchaeflein/~4/__UvR17k8nE" height="1" width="1" alt=""/>]]></content:encoded><feedburner:origLink>https://www.schaeflein.net/guest-access-comes-to-microsoft-teams/</feedburner:origLink></item></channel></rss>
  525.  

If you would like to create a banner that links to this page (i.e. this validation result), do the following:

  1. Download the "valid RSS" banner.

  2. Upload the image to your own server. (This step is important. Please do not link directly to the image on this server.)

  3. Add this HTML to your page (change the image src attribute if necessary):

If you would like to create a text link instead, here is the URL you can use:

http://www.feedvalidator.org/check.cgi?url=http%3A//feeds2.feedburner.com/PaulSchaeflein

Copyright © 2002-9 Sam Ruby, Mark Pilgrim, Joseph Walton, and Phil Ringnalda