<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom"><channel><title>Adaptive Cards on LinkeD365 Blog</title><link>https://linked365.blog/tags/adaptive-cards/</link><description>Recent content in Adaptive Cards on LinkeD365 Blog</description><generator>Hugo -- gohugo.io</generator><language>en</language><lastBuildDate>Thu, 02 Apr 2020 00:00:00 +0000</lastBuildDate><atom:link href="https://linked365.blog/tags/adaptive-cards/index.xml" rel="self" type="application/rss+xml"/><item><title>Quick Approvals - Send with Options</title><link>https://linked365.blog/2020/04/02/quick-approvals-send-with-options/</link><pubDate>Thu, 02 Apr 2020 00:00:00 +0000</pubDate><guid>https://linked365.blog/2020/04/02/quick-approvals-send-with-options/</guid><description>&lt;img src="https://linked365.blog/images/2020/04-04-image-38.png" alt="Featured image of post Quick Approvals - Send with Options" />&lt;p>As I digitally transform the club I am involved with, &lt;a class="link" href="http://stardiving.org" target="_blank" rel="noopener"
>stardiving.org&lt;/a> I come across ways in Power Automate that are pretty useful. I have previously talked about &lt;a class="link" href="https://linked365.blog/adaptive-cards-improved-approvals-part-1/" target="_blank" rel="noopener"
>Adaptive Cards&lt;/a> for approvals and this works great, but only for internal use. Same with Approvals, they are perfect for what I wanted to achieve, but limited to internal users.&lt;/p>
&lt;p>Send Email with options is a great way of getting approval or an answer to a specific question for any user, external or internal. I use this action, along with a Form &amp;amp; some parallel branching to move our little club another step towards total digitisation&lt;/p>
&lt;h2 id="the-scenario">The Scenario&lt;/h2>
&lt;p>My club, for a new member, requires entry of their personal details, medical information and contact details, and the way we store this and allow for access necessitates that we use online, secure storage. With my background, it is clear we should use SharePoint lists to store this data (yes, I know SharePoint is not a data repository, but it works great when you do not have a lot of data and limited monetary resources).&lt;/p>
&lt;p>Forms is also a great tool to publish these questions out to our members or their parent or guardian. It gives a great look and feel, is pretty easy to set up and, again, is free in the licensing Microsoft generously gives the club due to its charitable status. The problem with Forms is that you can not collate signatures. You can&amp;rsquo;t do this via Forms Pro either, there are several really good business reasons for this, especially as Adobe or Docusign make a whole business out of this.&lt;/p>
&lt;p>For my scenario, we had to get agreement to various parts of the entry, particularly around the consent to store their data and use it run the club. This would be easy in a paper form, just ask for a signature, but to bring this electronically, I needed to create a way of ensuring that they have agreed and capture that agreement.&lt;/p>
&lt;p>Power Automate has a great approvals engine, but you can not send an approval outside of your organisation (you can if the user is a guest, but I don&amp;rsquo;t want to add all our parents as guests). So this is out.&lt;/p>
&lt;p>&lt;a class="link" href="https://linked365.blog/adaptive-cards-improved-approvals-part-1/" target="_blank" rel="noopener"
>Adaptive Cards&lt;/a> are also great, but this is restricted to internal users as well, and you are reliant on the receiver of the card having the appropriately supported viewer, which is only Microsoft applications currently.&lt;/p>
&lt;p>Power Automate also has a &amp;ldquo;Send email with Options&amp;rdquo; which allows a much simpler approval process, but you can send it to anyone. Perfect for my scenario, free and any email address!&lt;/p>
&lt;h2 id="the-solution">The solution&lt;/h2>
&lt;p>&lt;img src="https://linked365.blog/images/2020/04-04-image-38.png"
loading="lazy"
>&lt;/p>
&lt;ul>
&lt;li>Forms data entry&lt;/li>
&lt;li>Copy information to SharePoint list&lt;/li>
&lt;li>Ask for approval via email
&lt;ul>
&lt;li>Approve email given&lt;/li>
&lt;li>Have a record that they acknowledged.&lt;/li>
&lt;/ul>
&lt;/li>
&lt;li>If approval is not given, notify an administrator&lt;/li>
&lt;/ul>
&lt;h2 id="form">Form&lt;/h2>
&lt;p>&lt;a class="link" href="https://meganvwalker.com/" target="_blank" rel="noopener"
>Megan Walker&lt;/a> is the Forms queen, not going to try and compete with the knowledge she has imparted since Forms came out.&lt;/p>
&lt;p>My form is pretty simple, asks a host of questions on behalf of the diver and the parent. There are a couple of sections, branched depending on whether the user is entering this form as a member or their parent/guardian.&lt;/p>
&lt;p>I ask in the form for them to confirm a couple of key points, by asking for the name of the diver to confirm their agreement. This is obviously not foolproof, but gives enough confirmation, backed up with the email approval that comes as part of the Flow.&lt;/p>
&lt;h2 id="create-sharepoint-item">Create SharePoint Item&lt;/h2>
&lt;p>My trigger is &amp;ldquo;When a New response is submitted&amp;rdquo;. As I have no CDS, this is the only one available to me. I then get the response details, which helps later when you want to copy the details across to SharePoint list.&lt;/p>
&lt;p>&lt;img src="https://linked365.blog/images/2020/04-04-image-29.png"
loading="lazy"
>&lt;/p>
&lt;p>Next step is to create the SharePoint list&lt;/p>
&lt;p>&lt;img src="https://linked365.blog/images/2020/04-04-image-30.png"
loading="lazy"
>&lt;/p>
&lt;p>Because we will have different user groups, there are separate questions in the survey which populate the same data fields in the list. This is done with a simple if ( equals (field,&amp;rsquo;&amp;rsquo;), value1, value2) function. The random field names are those linking to the questions, which look prettier when you insert them.&lt;/p>
&lt;div class="highlight">&lt;div class="chroma">
&lt;table class="lntable">&lt;tr>&lt;td class="lntd">
&lt;pre tabindex="0" class="chroma">&lt;code>&lt;span class="lnt">1
&lt;/span>&lt;/code>&lt;/pre>&lt;/td>
&lt;td class="lntd">
&lt;pre tabindex="0" class="chroma">&lt;code class="language-csharp" data-lang="csharp">&lt;span class="line">&lt;span class="cl">&lt;span class="k">if&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="k">equals&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="n">body&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="err">&amp;#39;&lt;/span>&lt;span class="n">Get_response_details&lt;/span>&lt;span class="err">&amp;#39;&lt;/span>&lt;span class="p">)?[&lt;/span>&lt;span class="err">&amp;#39;&lt;/span>&lt;span class="n">r11eaea5575824aa8b515f76fd43d1332&lt;/span>&lt;span class="err">&amp;#39;&lt;/span>&lt;span class="p">],&lt;/span>&lt;span class="err">&amp;#39;&amp;#39;&lt;/span>&lt;span class="p">),&lt;/span>&lt;span class="n">body&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="err">&amp;#39;&lt;/span>&lt;span class="n">Get_response_details&lt;/span>&lt;span class="err">&amp;#39;&lt;/span>&lt;span class="p">)?[&lt;/span>&lt;span class="err">&amp;#39;&lt;/span>&lt;span class="n">r6d52d6567ea1425aaf91c6d678c125e8&lt;/span>&lt;span class="err">&amp;#39;&lt;/span>&lt;span class="p">],&lt;/span>&lt;span class="n">body&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="err">&amp;#39;&lt;/span>&lt;span class="n">Get_response_details&lt;/span>&lt;span class="err">&amp;#39;&lt;/span>&lt;span class="p">)?[&lt;/span>&lt;span class="err">&amp;#39;&lt;/span>&lt;span class="n">r11eaea5575824aa8b515f76fd43d1332&lt;/span>&lt;span class="err">&amp;#39;&lt;/span>&lt;span class="p">])&lt;/span>
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/td>&lt;/tr>&lt;/table>
&lt;/div>
&lt;/div>&lt;h2 id="emailing-for-approval">Emailing for approval&lt;/h2>
&lt;p>After the list item is created, I put in a parallel branch. The left branch sends out the email for approval, the right branch waits for a week. If the week is reached, send an email to our administrator to chase the person, as the user who entered the information has not done the confirmation.&lt;/p>
&lt;p>&lt;img src="https://linked365.blog/images/2020/04-04-image-31.png"
loading="lazy"
>&lt;/p>
&lt;p>On the left parallel branch, I create the email with options&lt;/p>
&lt;p>&lt;img src="https://linked365.blog/images/2020/04-04-image-32.png"
loading="lazy"
>&lt;/p>
&lt;p>This formatted email converts into the email below, shown in GMail. You can see the formatting that was applied, and the 2 buttons I defined in the action.&lt;/p>
&lt;p>&lt;img src="https://i1.wp.com/linked365.blog/wp-content/uploads/2020/03/image-33.png?fit=1024%2C424&amp;amp;ssl=1"
loading="lazy"
>&lt;/p>
&lt;p>Clicking on the Approve or Deny button shows the user this screen, thanking them for their response&lt;/p>
&lt;p>&lt;img src="https://linked365.blog/images/2020/04-04-image-34.png"
loading="lazy"
>&lt;/p>
&lt;h2 id="waiting-for-approval">Waiting for Approval&lt;/h2>
&lt;p>Back in the Flow, we wait for a response.&lt;/p>
&lt;p>&lt;img src="https://i1.wp.com/linked365.blog/wp-content/uploads/2020/03/image-35.png?fit=1024%2C267&amp;amp;ssl=1"
loading="lazy"
>&lt;/p>
&lt;p>If it is not Approve, then send an email to our administrator, to check what part they don&amp;rsquo;t agree with.&lt;/p>
&lt;p>If it is Approve, update the item to confirm that the member is registered successfully&lt;/p>
&lt;p>&lt;img src="https://linked365.blog/images/2020/04-04-image-36.png"
loading="lazy"
>&lt;/p>
&lt;p>Either way, cancel the flow. As the other parallel branch is waiting for a week and then responding to our administrator, cut this short by cancelling the flow.&lt;/p>
&lt;p>&lt;img src="https://linked365.blog/images/2020/04-04-image-37.png"
loading="lazy"
>&lt;/p></description></item><item><title>Adaptive Cards - Improved Approvals (Part 2)</title><link>https://linked365.blog/2019/07/05/adaptive-cards-improved-approvals-part-2/</link><pubDate>Fri, 05 Jul 2019 00:00:00 +0000</pubDate><guid>https://linked365.blog/2019/07/05/adaptive-cards-improved-approvals-part-2/</guid><description>&lt;img src="https://linked365.blog/images/2019/07-image-24.png" alt="Featured image of post Adaptive Cards - Improved Approvals (Part 2)" />&lt;p>Continuing on a walkthrough of creating a more effective adaptive card for approvals, this part will describe the flow I created to generate the card as well as complete the action in D365 depending on the response&lt;/p>
&lt;h2 id="objectives">Objectives&lt;/h2>
&lt;ul>
&lt;li>The Scenario (&lt;a class="link" href="https://linked365.blog/2019/07/04/adaptive-cards-improved-approvals-part-1/" >Part 1&lt;/a>)&lt;/li>
&lt;li>Preventing progress of an Opportunity ( &lt;a class="link" href="https://linked365.blog/2019/07/04/adaptive-cards-improved-approvals-part-1/" >Part 1&lt;/a> )&lt;/li>
&lt;li>Using Flow to create a basic Approval ( &lt;a class="link" href="https://linked365.blog/2019/07/04/adaptive-cards-improved-approvals-part-1/" >Part 1&lt;/a> )&lt;/li>
&lt;li>Creating an Adaptive Card ( &lt;a class="link" href="https://linked365.blog/2019/07/04/adaptive-cards-improved-approvals-part-1/" >Part 1&lt;/a> )&lt;/li>
&lt;li>Using Flow to create the Approval (This Part)&lt;/li>
&lt;li>Updating the Opportunity (This Part)&lt;/li>
&lt;/ul>
&lt;h2 id="starting-out">Starting out&lt;/h2>
&lt;p>As previously described, the Flow is triggered when a user updates the Develop Propsal checkbox. In the first stages, the flow also retrieves some records that are needed later on for population of the card. There are also initialisations of 2 arrays that are used to populate the approvers and product lines on the card.&lt;/p>
&lt;p>&lt;img src="https://linked365.blog/images/2019/07-image-15.png"
loading="lazy"
>&lt;/p>
&lt;p>The next section is used to retrieve the approvers for the territory. In part 1, a many to many relationship was added, linking User to Territory via the territory approvers table.&lt;/p>
&lt;p>As the territory approvers table is a many to many relationship, it does not appear as a standard table in the common data service connector, nor the D365 connector. There are various blog posts out there which state you can just use a custom value, naming the table, but I couldn&amp;rsquo;t get it working, so I fell back to my custom connector.&lt;/p>
&lt;p>In my previous post on &lt;a class="link" href="https://linked365.blog/2019/06/10/user-admin-powerapp-part-1/" target="_blank" rel="noopener"
>Security roles via a PowerApp&lt;/a>, the custom connector which allows an FetchXML string to be sent against an object is used a lot to get the teams and the roles for a user. This connector is again used to find the users associated with a territory via the new relationship. The FetchXML is below.&lt;/p>
&lt;div class="highlight">&lt;div class="chroma">
&lt;table class="lntable">&lt;tr>&lt;td class="lntd">
&lt;pre tabindex="0" class="chroma">&lt;code>&lt;span class="lnt"> 1
&lt;/span>&lt;span class="lnt"> 2
&lt;/span>&lt;span class="lnt"> 3
&lt;/span>&lt;span class="lnt"> 4
&lt;/span>&lt;span class="lnt"> 5
&lt;/span>&lt;span class="lnt"> 6
&lt;/span>&lt;span class="lnt"> 7
&lt;/span>&lt;span class="lnt"> 8
&lt;/span>&lt;span class="lnt"> 9
&lt;/span>&lt;span class="lnt">10
&lt;/span>&lt;span class="lnt">11
&lt;/span>&lt;/code>&lt;/pre>&lt;/td>
&lt;td class="lntd">
&lt;pre tabindex="0" class="chroma">&lt;code class="language-xml" data-lang="xml">&lt;span class="line">&lt;span class="cl">&lt;span class="nt">&amp;lt;fetch&lt;/span> &lt;span class="na">top=&lt;/span>&lt;span class="s">&amp;#39;50&amp;#39;&lt;/span> &lt;span class="nt">&amp;gt;&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="nt">&amp;lt;entity&lt;/span> &lt;span class="na">name=&lt;/span>&lt;span class="s">&amp;#39;systemuser&amp;#39;&lt;/span> &lt;span class="nt">&amp;gt;&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="nt">&amp;lt;attribute&lt;/span> &lt;span class="na">name=&lt;/span>&lt;span class="s">&amp;#39;internalemailaddress&amp;#39;&lt;/span> &lt;span class="nt">/&amp;gt;&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="nt">&amp;lt;attribute&lt;/span> &lt;span class="na">name=&lt;/span>&lt;span class="s">&amp;#39;fullname&amp;#39;&lt;/span> &lt;span class="nt">/&amp;gt;&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="nt">&amp;lt;link-entity&lt;/span> &lt;span class="na">name=&lt;/span>&lt;span class="s">&amp;#39;cc\_territory\_approver&amp;#39;&lt;/span> &lt;span class="na">from=&lt;/span>&lt;span class="s">&amp;#39;systemuserid&amp;#39;&lt;/span> &lt;span class="na">to=&lt;/span>&lt;span class="s">&amp;#39;systemuserid&amp;#39;&lt;/span> &lt;span class="na">intersect=&lt;/span>&lt;span class="s">&amp;#39;true&amp;#39;&lt;/span> &lt;span class="nt">&amp;gt;&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="nt">&amp;lt;filter&amp;gt;&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="nt">&amp;lt;condition&lt;/span> &lt;span class="na">attribute=&lt;/span>&lt;span class="s">&amp;#39;territoryid&amp;#39;&lt;/span> &lt;span class="na">operator=&lt;/span>&lt;span class="s">&amp;#39;eq&amp;#39;&lt;/span> &lt;span class="na">value=&lt;/span>&lt;span class="s">&amp;#39;@{body(&amp;#39;&lt;/span>&lt;span class="err">Get\_Account\_Manager&amp;#39;)?\[&amp;#39;\_territoryid\_value&amp;#39;\]}&amp;#39;&lt;/span> &lt;span class="nt">/&amp;gt;&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="nt">&amp;lt;/filter&amp;gt;&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="nt">&amp;lt;/link-entity&amp;gt;&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="nt">&amp;lt;/entity&amp;gt;&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="nt">&amp;lt;/fetch&amp;gt;&lt;/span>
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/td>&lt;/tr>&lt;/table>
&lt;/div>
&lt;/div>&lt;p> This will return JSON which corresponds to the users linked as approvers to the territory.&lt;/p>
&lt;div class="highlight">&lt;div class="chroma">
&lt;table class="lntable">&lt;tr>&lt;td class="lntd">
&lt;pre tabindex="0" class="chroma">&lt;code>&lt;span class="lnt"> 1
&lt;/span>&lt;span class="lnt"> 2
&lt;/span>&lt;span class="lnt"> 3
&lt;/span>&lt;span class="lnt"> 4
&lt;/span>&lt;span class="lnt"> 5
&lt;/span>&lt;span class="lnt"> 6
&lt;/span>&lt;span class="lnt"> 7
&lt;/span>&lt;span class="lnt"> 8
&lt;/span>&lt;span class="lnt"> 9
&lt;/span>&lt;span class="lnt">10
&lt;/span>&lt;span class="lnt">11
&lt;/span>&lt;span class="lnt">12
&lt;/span>&lt;span class="lnt">13
&lt;/span>&lt;span class="lnt">14
&lt;/span>&lt;span class="lnt">15
&lt;/span>&lt;span class="lnt">16
&lt;/span>&lt;span class="lnt">17
&lt;/span>&lt;span class="lnt">18
&lt;/span>&lt;span class="lnt">19
&lt;/span>&lt;span class="lnt">20
&lt;/span>&lt;span class="lnt">21
&lt;/span>&lt;span class="lnt">22
&lt;/span>&lt;span class="lnt">23
&lt;/span>&lt;/code>&lt;/pre>&lt;/td>
&lt;td class="lntd">
&lt;pre tabindex="0" class="chroma">&lt;code class="language-json" data-lang="json">&lt;span class="line">&lt;span class="cl">&lt;span class="err">\&lt;/span>&lt;span class="p">[&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="p">{&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="nt">&amp;#34;@odata.etag&amp;#34;&lt;/span>&lt;span class="p">:&lt;/span> &lt;span class="s2">&amp;#34;W/\\&amp;#34;&lt;/span>&lt;span class="mi">3421832&lt;/span>&lt;span class="err">\\&lt;/span>&lt;span class="s2">&amp;#34;&amp;#34;&lt;/span>&lt;span class="p">,&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="nt">&amp;#34;internalemailaddress&amp;#34;&lt;/span>&lt;span class="p">:&lt;/span> &lt;span class="s2">&amp;#34;veronicaq@CRM568082.OnMicrosoft.com&amp;#34;&lt;/span>&lt;span class="p">,&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="nt">&amp;#34;fullname&amp;#34;&lt;/span>&lt;span class="p">:&lt;/span> &lt;span class="s2">&amp;#34;Veronica Quek&amp;#34;&lt;/span>&lt;span class="p">,&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="nt">&amp;#34;systemuserid&amp;#34;&lt;/span>&lt;span class="p">:&lt;/span> &lt;span class="s2">&amp;#34;824da0b2-6c88-e911-a83e-000d3a323d10&amp;#34;&lt;/span>&lt;span class="p">,&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="nt">&amp;#34;ownerid&amp;#34;&lt;/span>&lt;span class="p">:&lt;/span> &lt;span class="s2">&amp;#34;824da0b2-6c88-e911-a83e-000d3a323d10&amp;#34;&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="p">},&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="p">{&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="nt">&amp;#34;@odata.etag&amp;#34;&lt;/span>&lt;span class="p">:&lt;/span> &lt;span class="s2">&amp;#34;W/\\&amp;#34;&lt;/span>&lt;span class="mi">1742271&lt;/span>&lt;span class="err">\\&lt;/span>&lt;span class="s2">&amp;#34;&amp;#34;&lt;/span>&lt;span class="p">,&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="nt">&amp;#34;internalemailaddress&amp;#34;&lt;/span>&lt;span class="p">:&lt;/span> &lt;span class="s2">&amp;#34;danj@CRM568082.OnMicrosoft.com&amp;#34;&lt;/span>&lt;span class="p">,&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="nt">&amp;#34;fullname&amp;#34;&lt;/span>&lt;span class="p">:&lt;/span> &lt;span class="s2">&amp;#34;Dan Jump&amp;#34;&lt;/span>&lt;span class="p">,&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="nt">&amp;#34;systemuserid&amp;#34;&lt;/span>&lt;span class="p">:&lt;/span> &lt;span class="s2">&amp;#34;e3b305bf-6c88-e911-a83e-000d3a323d10&amp;#34;&lt;/span>&lt;span class="p">,&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="nt">&amp;#34;ownerid&amp;#34;&lt;/span>&lt;span class="p">:&lt;/span> &lt;span class="s2">&amp;#34;e3b305bf-6c88-e911-a83e-000d3a323d10&amp;#34;&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="p">},&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="p">{&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="nt">&amp;#34;@odata.etag&amp;#34;&lt;/span>&lt;span class="p">:&lt;/span> &lt;span class="s2">&amp;#34;W/\\&amp;#34;&lt;/span>&lt;span class="mi">3422353&lt;/span>&lt;span class="err">\\&lt;/span>&lt;span class="s2">&amp;#34;&amp;#34;&lt;/span>&lt;span class="p">,&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="nt">&amp;#34;internalemailaddress&amp;#34;&lt;/span>&lt;span class="p">:&lt;/span> &lt;span class="s2">&amp;#34;CarlC@CRM568082.onmicrosoft.com&amp;#34;&lt;/span>&lt;span class="p">,&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="nt">&amp;#34;fullname&amp;#34;&lt;/span>&lt;span class="p">:&lt;/span> &lt;span class="s2">&amp;#34;Carl Cookson&amp;#34;&lt;/span>&lt;span class="p">,&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="nt">&amp;#34;systemuserid&amp;#34;&lt;/span>&lt;span class="p">:&lt;/span> &lt;span class="s2">&amp;#34;113f1e3a-db90-e911-a822-000d3a34e879&amp;#34;&lt;/span>&lt;span class="p">,&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="nt">&amp;#34;ownerid&amp;#34;&lt;/span>&lt;span class="p">:&lt;/span> &lt;span class="s2">&amp;#34;113f1e3a-db90-e911-a822-000d3a34e879&amp;#34;&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="p">}&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="err">\&lt;/span>&lt;span class="p">]&lt;/span>
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/td>&lt;/tr>&lt;/table>
&lt;/div>
&lt;/div>&lt;p> An approval needs a list of email addresses, separated with a ; . To achieve this, firstly put each of the returned email addresses in an array, then use the Join function to create the string used for approvers&lt;/p>
&lt;p>&lt;img src="https://linked365.blog/images/2019/07-image-17.png"
loading="lazy"
>&lt;/p>
&lt;h2 id="populated-the-main-approval">Populated the Main approval&lt;/h2>
&lt;p>The next part the body of the approval that is going to be sent. I&amp;rsquo;ll link the full version of this at the end of the article, but effectively, you copy your design, remembering to insert appropriate dynamic content on the way.&lt;/p>
&lt;p>Here, I create the 2 URLs that are displayed in the card, which combine the starting point of url and append Account or Opportunity Id.&lt;/p>
&lt;p>&lt;img src="https://linked365.blog/images/2019/07-image-18.png"
loading="lazy"
>&lt;/p>
&lt;p>This is displayed at the top of the card.&lt;/p>
&lt;p>&lt;img src="https://linked365.blog/images/2019/07-image-19.png"
loading="lazy"
>&lt;/p>
&lt;p>Further, formatting currencies is difficult in Flow. (I stand to be corrected). I found this &lt;a class="link" href="https://powerusers.microsoft.com/t5/Using-Flows/Format-number-with-thousands-separator-in-Flow-email/m-p/305263/highlight/true#M7484" target="_blank" rel="noopener"
>post&lt;/a> on Power Platform community which highlights the issue and degvalentine has the solution, which I have tweaked to take into account of null values in the fields in D365. This example is for one of the fields on the secondary grid.&lt;/p>
&lt;div class="highlight">&lt;div class="chroma">
&lt;table class="lntable">&lt;tr>&lt;td class="lntd">
&lt;pre tabindex="0" class="chroma">&lt;code>&lt;span class="lnt"> 1
&lt;/span>&lt;span class="lnt"> 2
&lt;/span>&lt;span class="lnt"> 3
&lt;/span>&lt;span class="lnt"> 4
&lt;/span>&lt;span class="lnt"> 5
&lt;/span>&lt;span class="lnt"> 6
&lt;/span>&lt;span class="lnt"> 7
&lt;/span>&lt;span class="lnt"> 8
&lt;/span>&lt;span class="lnt"> 9
&lt;/span>&lt;span class="lnt">10
&lt;/span>&lt;span class="lnt">11
&lt;/span>&lt;span class="lnt">12
&lt;/span>&lt;span class="lnt">13
&lt;/span>&lt;span class="lnt">14
&lt;/span>&lt;span class="lnt">15
&lt;/span>&lt;span class="lnt">16
&lt;/span>&lt;span class="lnt">17
&lt;/span>&lt;span class="lnt">18
&lt;/span>&lt;span class="lnt">19
&lt;/span>&lt;span class="lnt">20
&lt;/span>&lt;span class="lnt">21
&lt;/span>&lt;span class="lnt">22
&lt;/span>&lt;span class="lnt">23
&lt;/span>&lt;span class="lnt">24
&lt;/span>&lt;span class="lnt">25
&lt;/span>&lt;span class="lnt">26
&lt;/span>&lt;span class="lnt">27
&lt;/span>&lt;span class="lnt">28
&lt;/span>&lt;span class="lnt">29
&lt;/span>&lt;span class="lnt">30
&lt;/span>&lt;span class="lnt">31
&lt;/span>&lt;span class="lnt">32
&lt;/span>&lt;span class="lnt">33
&lt;/span>&lt;span class="lnt">34
&lt;/span>&lt;span class="lnt">35
&lt;/span>&lt;span class="lnt">36
&lt;/span>&lt;span class="lnt">37
&lt;/span>&lt;/code>&lt;/pre>&lt;/td>
&lt;td class="lntd">
&lt;pre tabindex="0" class="chroma">&lt;code class="language-c" data-lang="c">&lt;span class="line">&lt;span class="cl">&lt;span class="k">if&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="nf">empty&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="nf">string&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="nf">items&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="err">&amp;#39;&lt;/span>&lt;span class="n">Add&lt;/span>&lt;span class="err">\&lt;/span>&lt;span class="n">_to&lt;/span>&lt;span class="err">\&lt;/span>&lt;span class="n">_Prod&lt;/span>&lt;span class="err">\&lt;/span>&lt;span class="n">_LInes&lt;/span>&lt;span class="err">&amp;#39;&lt;/span>&lt;span class="p">)&lt;/span>&lt;span class="o">?&lt;/span>&lt;span class="err">\&lt;/span>&lt;span class="p">[&lt;/span>&lt;span class="err">&amp;#39;&lt;/span>&lt;span class="n">manualdiscountamount&lt;/span>&lt;span class="err">&amp;#39;\&lt;/span>&lt;span class="p">])),&lt;/span> &lt;span class="sc">&amp;#39;0&amp;#39;&lt;/span>&lt;span class="p">,&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="nf">concat&lt;/span>&lt;span class="p">(&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="k">if&lt;/span>&lt;span class="p">(&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="nf">greaterOrEquals&lt;/span>&lt;span class="p">(&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="nf">items&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="err">&amp;#39;&lt;/span>&lt;span class="n">Add&lt;/span>&lt;span class="err">\&lt;/span>&lt;span class="n">_to&lt;/span>&lt;span class="err">\&lt;/span>&lt;span class="n">_Prod&lt;/span>&lt;span class="err">\&lt;/span>&lt;span class="n">_LInes&lt;/span>&lt;span class="err">&amp;#39;&lt;/span>&lt;span class="p">)&lt;/span>&lt;span class="o">?&lt;/span>&lt;span class="err">\&lt;/span>&lt;span class="p">[&lt;/span>&lt;span class="err">&amp;#39;&lt;/span>&lt;span class="n">manualdiscountamount&lt;/span>&lt;span class="err">&amp;#39;\&lt;/span>&lt;span class="p">],&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="mi">1000&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="p">),&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="nf">concat&lt;/span>&lt;span class="p">(&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="nf">substring&lt;/span>&lt;span class="p">(&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="nf">string&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="nf">items&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="err">&amp;#39;&lt;/span>&lt;span class="n">Add&lt;/span>&lt;span class="err">\&lt;/span>&lt;span class="n">_to&lt;/span>&lt;span class="err">\&lt;/span>&lt;span class="n">_Prod&lt;/span>&lt;span class="err">\&lt;/span>&lt;span class="n">_LInes&lt;/span>&lt;span class="err">&amp;#39;&lt;/span>&lt;span class="p">)&lt;/span>&lt;span class="o">?&lt;/span>&lt;span class="err">\&lt;/span>&lt;span class="p">[&lt;/span>&lt;span class="err">&amp;#39;&lt;/span>&lt;span class="n">manualdiscountamount&lt;/span>&lt;span class="err">&amp;#39;\&lt;/span>&lt;span class="p">]),&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="mi">0&lt;/span>&lt;span class="p">,&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="nf">max&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="mi">0&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="nf">sub&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="nf">length&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="nf">first&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="nf">split&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="nf">string&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="nf">items&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="err">&amp;#39;&lt;/span>&lt;span class="n">Add&lt;/span>&lt;span class="err">\&lt;/span>&lt;span class="n">_to&lt;/span>&lt;span class="err">\&lt;/span>&lt;span class="n">_Prod&lt;/span>&lt;span class="err">\&lt;/span>&lt;span class="n">_LInes&lt;/span>&lt;span class="err">&amp;#39;&lt;/span>&lt;span class="p">)&lt;/span>&lt;span class="o">?&lt;/span>&lt;span class="err">\&lt;/span>&lt;span class="p">[&lt;/span>&lt;span class="err">&amp;#39;&lt;/span>&lt;span class="n">manualdiscountamount&lt;/span>&lt;span class="err">&amp;#39;\&lt;/span>&lt;span class="p">]),&lt;/span> &lt;span class="sc">&amp;#39;.&amp;#39;&lt;/span>&lt;span class="p">))),&lt;/span> &lt;span class="mi">3&lt;/span>&lt;span class="p">))&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="p">),&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="sc">&amp;#39;,&amp;#39;&lt;/span>&lt;span class="p">,&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="nf">substring&lt;/span>&lt;span class="p">(&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="nf">first&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="nf">split&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="nf">string&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="nf">items&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="err">&amp;#39;&lt;/span>&lt;span class="n">Add&lt;/span>&lt;span class="err">\&lt;/span>&lt;span class="n">_to&lt;/span>&lt;span class="err">\&lt;/span>&lt;span class="n">_Prod&lt;/span>&lt;span class="err">\&lt;/span>&lt;span class="n">_LInes&lt;/span>&lt;span class="err">&amp;#39;&lt;/span>&lt;span class="p">)&lt;/span>&lt;span class="o">?&lt;/span>&lt;span class="err">\&lt;/span>&lt;span class="p">[&lt;/span>&lt;span class="err">&amp;#39;&lt;/span>&lt;span class="n">manualdiscountamount&lt;/span>&lt;span class="err">&amp;#39;\&lt;/span>&lt;span class="p">]),&lt;/span> &lt;span class="sc">&amp;#39;.&amp;#39;&lt;/span>&lt;span class="p">)),&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="nf">max&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="mi">0&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="nf">sub&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="nf">length&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="nf">first&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="nf">split&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="nf">string&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="nf">items&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="err">&amp;#39;&lt;/span>&lt;span class="n">Add&lt;/span>&lt;span class="err">\&lt;/span>&lt;span class="n">_to&lt;/span>&lt;span class="err">\&lt;/span>&lt;span class="n">_Prod&lt;/span>&lt;span class="err">\&lt;/span>&lt;span class="n">_LInes&lt;/span>&lt;span class="err">&amp;#39;&lt;/span>&lt;span class="p">)&lt;/span>&lt;span class="o">?&lt;/span>&lt;span class="err">\&lt;/span>&lt;span class="p">[&lt;/span>&lt;span class="err">&amp;#39;&lt;/span>&lt;span class="n">manualdiscountamount&lt;/span>&lt;span class="err">&amp;#39;\&lt;/span>&lt;span class="p">]),&lt;/span> &lt;span class="sc">&amp;#39;.&amp;#39;&lt;/span>&lt;span class="p">))),&lt;/span> &lt;span class="mi">3&lt;/span>&lt;span class="p">)),&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="nf">min&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="mi">3&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="nf">length&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="nf">first&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="nf">split&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="nf">string&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="nf">items&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="err">&amp;#39;&lt;/span>&lt;span class="n">Add&lt;/span>&lt;span class="err">\&lt;/span>&lt;span class="n">_to&lt;/span>&lt;span class="err">\&lt;/span>&lt;span class="n">_Prod&lt;/span>&lt;span class="err">\&lt;/span>&lt;span class="n">_LInes&lt;/span>&lt;span class="err">&amp;#39;&lt;/span>&lt;span class="p">)&lt;/span>&lt;span class="o">?&lt;/span>&lt;span class="err">\&lt;/span>&lt;span class="p">[&lt;/span>&lt;span class="err">&amp;#39;&lt;/span>&lt;span class="n">manualdiscountamount&lt;/span>&lt;span class="err">&amp;#39;\&lt;/span>&lt;span class="p">]),&lt;/span> &lt;span class="sc">&amp;#39;.&amp;#39;&lt;/span>&lt;span class="p">))))&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="p">)&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="p">),&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="nf">first&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="nf">split&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="nf">string&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="nf">items&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="err">&amp;#39;&lt;/span>&lt;span class="n">Add&lt;/span>&lt;span class="err">\&lt;/span>&lt;span class="n">_to&lt;/span>&lt;span class="err">\&lt;/span>&lt;span class="n">_Prod&lt;/span>&lt;span class="err">\&lt;/span>&lt;span class="n">_LInes&lt;/span>&lt;span class="err">&amp;#39;&lt;/span>&lt;span class="p">)&lt;/span>&lt;span class="o">?&lt;/span>&lt;span class="err">\&lt;/span>&lt;span class="p">[&lt;/span>&lt;span class="err">&amp;#39;&lt;/span>&lt;span class="n">manualdiscountamount&lt;/span>&lt;span class="err">&amp;#39;\&lt;/span>&lt;span class="p">]),&lt;/span> &lt;span class="sc">&amp;#39;.&amp;#39;&lt;/span>&lt;span class="p">))&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="p">),&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="sc">&amp;#39;.&amp;#39;&lt;/span>&lt;span class="p">,&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="k">if&lt;/span>&lt;span class="p">(&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="nf">contains&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="nf">string&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="nf">items&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="err">&amp;#39;&lt;/span>&lt;span class="n">Add&lt;/span>&lt;span class="err">\&lt;/span>&lt;span class="n">_to&lt;/span>&lt;span class="err">\&lt;/span>&lt;span class="n">_Prod&lt;/span>&lt;span class="err">\&lt;/span>&lt;span class="n">_LInes&lt;/span>&lt;span class="err">&amp;#39;&lt;/span>&lt;span class="p">)&lt;/span>&lt;span class="o">?&lt;/span>&lt;span class="err">\&lt;/span>&lt;span class="p">[&lt;/span>&lt;span class="err">&amp;#39;&lt;/span>&lt;span class="n">manualdiscountamount&lt;/span>&lt;span class="err">&amp;#39;\&lt;/span>&lt;span class="p">]),&lt;/span> &lt;span class="sc">&amp;#39;.&amp;#39;&lt;/span>&lt;span class="p">),&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="nf">concat&lt;/span>&lt;span class="p">(&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="nf">last&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="nf">split&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="nf">string&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="nf">items&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="err">&amp;#39;&lt;/span>&lt;span class="n">Add&lt;/span>&lt;span class="err">\&lt;/span>&lt;span class="n">_to&lt;/span>&lt;span class="err">\&lt;/span>&lt;span class="n">_Prod&lt;/span>&lt;span class="err">\&lt;/span>&lt;span class="n">_LInes&lt;/span>&lt;span class="err">&amp;#39;&lt;/span>&lt;span class="p">)&lt;/span>&lt;span class="o">?&lt;/span>&lt;span class="err">\&lt;/span>&lt;span class="p">[&lt;/span>&lt;span class="err">&amp;#39;&lt;/span>&lt;span class="n">manualdiscountamount&lt;/span>&lt;span class="err">&amp;#39;\&lt;/span>&lt;span class="p">]),&lt;/span> &lt;span class="sc">&amp;#39;.&amp;#39;&lt;/span>&lt;span class="p">)),&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="k">if&lt;/span>&lt;span class="p">(&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="nf">less&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="nf">length&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="nf">last&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="nf">split&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="nf">string&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="nf">items&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="err">&amp;#39;&lt;/span>&lt;span class="n">Add&lt;/span>&lt;span class="err">\&lt;/span>&lt;span class="n">_to&lt;/span>&lt;span class="err">\&lt;/span>&lt;span class="n">_Prod&lt;/span>&lt;span class="err">\&lt;/span>&lt;span class="n">_LInes&lt;/span>&lt;span class="err">&amp;#39;&lt;/span>&lt;span class="p">)&lt;/span>&lt;span class="o">?&lt;/span>&lt;span class="err">\&lt;/span>&lt;span class="p">[&lt;/span>&lt;span class="err">&amp;#39;&lt;/span>&lt;span class="n">manualdiscountamount&lt;/span>&lt;span class="err">&amp;#39;\&lt;/span>&lt;span class="p">]),&lt;/span> &lt;span class="sc">&amp;#39;.&amp;#39;&lt;/span>&lt;span class="p">))),&lt;/span> &lt;span class="mi">2&lt;/span>&lt;span class="p">),&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="sc">&amp;#39;0&amp;#39;&lt;/span>&lt;span class="p">,&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="err">&amp;#39;&amp;#39;&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="p">)&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="p">),&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="err">&amp;#39;&lt;/span>&lt;span class="mo">00&lt;/span>&lt;span class="err">&amp;#39;&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="p">)&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="p">)&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="p">)&lt;/span>
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/td>&lt;/tr>&lt;/table>
&lt;/div>
&lt;/div>&lt;h2 id="populating-product-details">Populating Product details&lt;/h2>
&lt;p>As the approval body is built up, the next stage is to create a table with the product lines in it. Getting the lines is a simple filter query using the primary key on Opportunity.&lt;/p>
&lt;p>&lt;img src="https://linked365.blog/images/2019/07-image-20.png"
loading="lazy"
>&lt;/p>
&lt;p>Like with the approvers, an array is populated with a formatted version of each line, taking fields returned and combining them with formatting rules.&lt;/p>
&lt;p>&lt;img src="https://linked365.blog/images/2019/07-image-22.png"
loading="lazy"
>&lt;/p>
&lt;p>The first expression deals with the fact one of the products chosen to demo had a double quote (&amp;quot;) in it, which messes up JSON if it isn&amp;rsquo;t escaped as it is the string delimiter. I used a simple replace expression to add a &amp;ldquo;\&amp;rdquo; before it.&lt;/p>
&lt;div class="highlight">&lt;div class="chroma">
&lt;table class="lntable">&lt;tr>&lt;td class="lntd">
&lt;pre tabindex="0" class="chroma">&lt;code>&lt;span class="lnt">1
&lt;/span>&lt;/code>&lt;/pre>&lt;/td>
&lt;td class="lntd">
&lt;pre tabindex="0" class="chroma">&lt;code class="language-c" data-lang="c">&lt;span class="line">&lt;span class="cl">&lt;span class="nf">replace&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="nf">items&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="err">&amp;#39;&lt;/span>&lt;span class="n">Add&lt;/span>&lt;span class="err">\&lt;/span>&lt;span class="n">_to&lt;/span>&lt;span class="err">\&lt;/span>&lt;span class="n">_Prod&lt;/span>&lt;span class="err">\&lt;/span>&lt;span class="n">_LInes&lt;/span>&lt;span class="err">&amp;#39;&lt;/span>&lt;span class="p">)&lt;/span>&lt;span class="o">?&lt;/span>&lt;span class="err">\&lt;/span>&lt;span class="p">[&lt;/span>&lt;span class="err">&amp;#39;&lt;/span>&lt;span class="n">productname&lt;/span>&lt;span class="err">&amp;#39;\&lt;/span>&lt;span class="p">],&lt;/span> &lt;span class="sc">&amp;#39;&amp;#34;&amp;#39;&lt;/span>&lt;span class="p">,&lt;/span>&lt;span class="err">&amp;#39;\\&lt;/span>&lt;span class="s">&amp;#34;&amp;#39;)&lt;/span>
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/td>&lt;/tr>&lt;/table>
&lt;/div>
&lt;/div>&lt;p>The next expression is the one above to format the currency with the appropriate commas and decimal places.&lt;/p>
&lt;p>The output of this looping of the product lines is then combined using a join again, then combined with the body main string.&lt;/p>
&lt;p>&lt;img src="https://linked365.blog/images/2019/07-image-23.png"
loading="lazy"
>&lt;/p>
&lt;p>The bottom of this string starts the list of actions, which are the buttons.&lt;/p>
&lt;p>The next step is to create the Approval. This is pretty simple, using a first to respond type, and fleshing it out a bit, so if a user uses the standard Flow Approval interface, they have something to relate to. No notification is needed, this will send an email to the approver, but the Flow will alert the approver via Teams.&lt;/p>
&lt;p>&lt;img src="https://linked365.blog/images/2019/07-image-24.png"
loading="lazy"
>&lt;/p>
&lt;p>My original design for this PoC was to push this notification / approval to a Team channel, one notice to the Approvers channel. As Teams integrates with D365, it did not seem much of a hop to highlight the Opportunity approval.&lt;/p>
&lt;p>The only issue is that approvals don&amp;rsquo;t work in team channels, only when sent to a user. Until this is resolved by MS, you are limited to sending the approval to an individual in Teams.&lt;/p>
&lt;h2 id="sending-the-approval">Sending the Approval&lt;/h2>
&lt;p>&lt;img src="https://linked365.blog/images/2019/07-image-25.png"
loading="lazy"
>&lt;/p>
&lt;p>The key bits of this action is ensuring you have the Approvers tenant (can you post approvals across tenants?), the respond link, the approval ID and the creation time populated with the data coming from the approval. The same goes for the Reject action.&lt;/p>
&lt;p>That&amp;rsquo;s it, the new approval is sent.&lt;/p>
&lt;h2 id="waiting-for-the-approval">Waiting for the Approval&lt;/h2>
&lt;p>As the approval is configured that anyone could approve or reject, the next action is to wait for that approval to happen. Approvals can happen upto 30 days, which is another issue, but as this is to speed up the approval process, let&amp;rsquo;s not worry about that.&lt;/p>
&lt;p>&lt;img src="https://linked365.blog/images/2019/07-image-26.png"
loading="lazy"
>&lt;/p>
&lt;p>If the outcome is approved, then the field Complete Internal Review is checked and a note is created, linked to the Opportunity logging who approved it.&lt;/p>
&lt;p>&lt;img src="https://linked365.blog/images/2019/07-image-27.png"
loading="lazy"
>&lt;/p>
&lt;p>This is in a loop, as, in theory, there could be more than one approver on an approval, if you use the Approval setting that forces everyone to approve something.&lt;/p>
&lt;p>The Regarding / Regarding type, highlighted above, need to be populated as you get orphan records and can spend 20 minutes wondering what is wrong (not me obviously)&lt;/p>
&lt;p>On the Reject side of the condition, the Opportunity is put back to the state it was in before the flow started, namely Develop Proposal is reset. This triggers our Flow again, but as long as the first condition is met, it won&amp;rsquo;t go any further. A note is also added, to highlight who rejected it and why.&lt;/p>
&lt;p>&lt;img src="https://linked365.blog/images/2019/07-image-28.png"
loading="lazy"
>&lt;/p></description></item><item><title>Adaptive Cards - Improved Approvals (Part 1)</title><link>https://linked365.blog/2019/07/04/adaptive-cards-improved-approvals-part-1/</link><pubDate>Thu, 04 Jul 2019 00:00:00 +0000</pubDate><guid>https://linked365.blog/2019/07/04/adaptive-cards-improved-approvals-part-1/</guid><description>&lt;img src="https://linked365.blog/images/2019/07-image-12.png" alt="Featured image of post Adaptive Cards - Improved Approvals (Part 1)" />&lt;p>&lt;a class="link" href="https://adaptivecards.io/" target="_blank" rel="noopener"
>Adaptive cards&lt;/a> are relatively new to the stack of tools available to PowerPlatform users, emerging from Message Cards. They are a great way of interacting with users who are not a typical D365 user, those on the periphery who are interested in the data but not the detail.&lt;/p>
&lt;h2 id="objectives">Objectives&lt;/h2>
&lt;ul>
&lt;li>The Scenario (This Part)&lt;/li>
&lt;li>Preventing progress of an Opportunity (This Part)&lt;/li>
&lt;li>Using Flow to create a basic Approval (This Part)&lt;/li>
&lt;li>Creating an Adaptive Card (This Part)&lt;/li>
&lt;li>Using Flow to create the Approval&lt;/li>
&lt;li>Updating the Opportunity&lt;/li>
&lt;/ul>
&lt;h2 id="the-scenario">The Scenario&lt;/h2>
&lt;p>Big Energy is going well, they are now involved in some big deals for big enterprises which need a lot of time to land. The proposals that are generated are complicated, and they struggled with some dubious sales people reducing the margins just to get the deals and this is just bad for business.&lt;/p>
&lt;p>An approval process needs to be implemented, where one or more of a designated group of individuals per territory review the opportunity and decide if the margins are appropriate.&lt;/p>
&lt;p>Unfortunately, the approvers tend to be very busy senior directors, who use D365 sporadically, if at all, and Big Energy need to allow them to approve the opportunities where ever they are using Outlook or Teams as the preferred option.&lt;/p>
&lt;h2 id="tweaking-the-standard-sales-process">Tweaking the standard Sales process&lt;/h2>
&lt;p>Microsoft provides a Business Process Flow for Opportunity management, and in our scenario, only the approvers should be able to check the boolean Complete Internal Review. This is part of the standard Propose stage of the BPF.&lt;/p>
&lt;p>&lt;img src="https://linked365.blog/images/2019/07-image-3.png"
loading="lazy"
>&lt;/p>
&lt;p>To &amp;ldquo;lock&amp;rdquo; (I know it isn&amp;rsquo;t foolproof, what is?) the progress on Propose, the Complete Internal Review is subject to a simple business rule, if the opportunity is at any stage, lock the field.&lt;/p>
&lt;p>&lt;img src="https://linked365.blog/images/2019/07-image-1.png"
loading="lazy"
>&lt;/p>
&lt;p>Now, no one can edit that field, if that field is made mandatory to progress the bpf stage, no one can progress the stage past propose.&lt;/p>
&lt;p>&lt;img src="https://linked365.blog/images/2019/07-image-2.png"
loading="lazy"
>&lt;/p>
&lt;p>Territories are often used in Sales to group accounts or account managers and in our scenario, there is a set list of approvers for a territory. I have added a new many - to - many relationship for this, Approvers and ensured it is listed in the user form as one of the relationships&lt;/p>
&lt;p>&lt;img src="https://linked365.blog/images/2019/07-image-16.png"
loading="lazy"
>&lt;/p>
&lt;h2 id="using-flow-to-create-an-approval">Using Flow to create an Approval&lt;/h2>
&lt;p>In the standard Propose stage, there is another boolean that is of interest, Develop Proposal. The Flow is triggered when this value is changed. A simple CDS update trigger is the starting point.&lt;/p>
&lt;p>&lt;img src="https://linked365.blog/images/2019/07-image-4.png"
loading="lazy"
>&lt;/p>
&lt;p>The next stage is to confirm that this trigger is coming with the correct record state, the record has been marked with Develop Proposal, but the other field, Complete Internal Review is still empty.&lt;/p>
&lt;p>&lt;img src="https://linked365.blog/images/2019/07-image-5.png"
loading="lazy"
>&lt;/p>
&lt;p>The flow to create the adapted card is fairly intense, well, from my experience, as you will see, so for now, create an Approval using enough details to get the default experience that can be built on.&lt;/p>
&lt;p>&lt;img src="https://linked365.blog/images/2019/07-image-7.png"
loading="lazy"
>&lt;/p>
&lt;p>In Details, there is a lot you can do, using &lt;a class="link" href="https://docs.microsoft.com/en-us/flow/approvals-markdown-support" target="_blank" rel="noopener"
>markdown&lt;/a> but this is not as comprehensive as the formating you get from adaptive cards.&lt;/p>
&lt;p>When this flow is run, you will get an email to the assigned to with a simple, standard approval, which is in itself, an adaptive card, but it is fairly plain.&lt;/p>
&lt;p>&lt;img src="https://linked365.blog/images/2019/07-image-8.png"
loading="lazy"
>&lt;/p>
&lt;p>Using the Flow history, this action also shows the adaptive card that was built&lt;/p>
&lt;p>&lt;img src="https://linked365.blog/images/2019/07-image-9.png"
loading="lazy"
>&lt;/p>
&lt;p>Copying this value into the Adaptive card designer JSON section gives the format for a basic design, which can be augmented to show some proper information&lt;/p>
&lt;p>&lt;img src="https://linked365.blog/images/2019/07-image-10.png"
loading="lazy"
>&lt;/p>
&lt;h2 id="building-an-adaptive-card">Building an Adaptive card&lt;/h2>
&lt;p>Adaptive Cards are a means to interact with your users via email, teams or any other app that handles the rendering of them. They have actions, allow images to be presented and can format text in a markup that imitates a comprehensive website. They are supported in Outlook mobile apps as well as O365, either using the main app or online.&lt;/p>
&lt;p>They work by rendering a JSON object, which can be formatted to match the host application (the dark black Teams theme for example renders it very differently, but the core actions are still there.&lt;/p>
&lt;p>&lt;img src="https://linked365.blog/images/2019/07-image-11.png"
loading="lazy"
>&lt;/p>
&lt;p>Microsoft has built a superb tool to manage Adaptive cards, the new version, at adaptivecards.io/designer. This site has lots of examples to get you started, the &lt;a class="link" href="https://adaptivecards.io/samples/ExpenseReport.html" target="_blank" rel="noopener"
>Expense Report&lt;/a> is a good starting point from a design point of view, but the standard approval card forms the base for the card. There are bits in it that you need to incorporate into your card to allow the approval to work.&lt;/p>
&lt;p>The parts in the data section are the essential bits that, in our adopted JSON need to be duplicated or populated by Flow to allow our card to act as an approval.&lt;/p>
&lt;p>My card is a bit different than the standard, displaying key parts of the Opportunity and the associated product lines.&lt;/p>
&lt;p>&lt;img src="https://linkd365home.files.wordpress.com/2019/07/image-12.png?w=457"
loading="lazy"
>&lt;/p>
&lt;p>As you can see, there is a lot more information on what is happening on the opportunity, probably enough for a sales manager to make a decision in most cases. Included in the card are links to the Account and Opportunity if further review is needed.&lt;/p>
&lt;p>I would recommend starting from a sample and building your content, with dummy data, so you can get the layout correct.&lt;/p>
&lt;p>Each of the buttons are also cards on their own, allowing a comment to be made before the approval is approved or rejected.&lt;/p>
&lt;p>These have been copied from the standard adaptive card produced by the Flow approval so that the submitted approval works like a standard approval.&lt;/p>
&lt;h2 id="some-considerations-and-limitations">Some considerations and limitations&lt;/h2>
&lt;p>I first started trying to reproduce the Expense Approval card in full from the samples&lt;/p>
&lt;p>&lt;img src="https://linked365.blog/images/2019/07-image-13.png"
loading="lazy"
>&lt;/p>
&lt;p>This has a great use of hidden / visible sections of the expense lines which could give you a lot of real estate for Opportunity lines. Unfortunately, these are not rendered in Teams.&lt;/p>
&lt;p>Also, I thought I would be able to use HTTP trigger, but again, any button with an HTTP trigger is ignored in teams, you are only allowed to create actions for opening URLs, submitting, hiding parts and showing a secondary card.&lt;/p>
&lt;p>Below the main part of the designer is the JSON, which is created by any changes you make above but also can be edited and reflected in the visualiser. The snippet below is taken from the standard card, which contains all the bits that need duplicating to ensure the new, improved approval works correctly.&lt;/p>
&lt;div class="highlight">&lt;div class="chroma">
&lt;table class="lntable">&lt;tr>&lt;td class="lntd">
&lt;pre tabindex="0" class="chroma">&lt;code>&lt;span class="lnt"> 1
&lt;/span>&lt;span class="lnt"> 2
&lt;/span>&lt;span class="lnt"> 3
&lt;/span>&lt;span class="lnt"> 4
&lt;/span>&lt;span class="lnt"> 5
&lt;/span>&lt;span class="lnt"> 6
&lt;/span>&lt;span class="lnt"> 7
&lt;/span>&lt;span class="lnt"> 8
&lt;/span>&lt;span class="lnt"> 9
&lt;/span>&lt;span class="lnt">10
&lt;/span>&lt;span class="lnt">11
&lt;/span>&lt;span class="lnt">12
&lt;/span>&lt;span class="lnt">13
&lt;/span>&lt;span class="lnt">14
&lt;/span>&lt;span class="lnt">15
&lt;/span>&lt;span class="lnt">16
&lt;/span>&lt;span class="lnt">17
&lt;/span>&lt;span class="lnt">18
&lt;/span>&lt;span class="lnt">19
&lt;/span>&lt;span class="lnt">20
&lt;/span>&lt;span class="lnt">21
&lt;/span>&lt;span class="lnt">22
&lt;/span>&lt;span class="lnt">23
&lt;/span>&lt;span class="lnt">24
&lt;/span>&lt;span class="lnt">25
&lt;/span>&lt;span class="lnt">26
&lt;/span>&lt;span class="lnt">27
&lt;/span>&lt;span class="lnt">28
&lt;/span>&lt;span class="lnt">29
&lt;/span>&lt;span class="lnt">30
&lt;/span>&lt;span class="lnt">31
&lt;/span>&lt;span class="lnt">32
&lt;/span>&lt;span class="lnt">33
&lt;/span>&lt;span class="lnt">34
&lt;/span>&lt;span class="lnt">35
&lt;/span>&lt;span class="lnt">36
&lt;/span>&lt;span class="lnt">37
&lt;/span>&lt;span class="lnt">38
&lt;/span>&lt;span class="lnt">39
&lt;/span>&lt;span class="lnt">40
&lt;/span>&lt;span class="lnt">41
&lt;/span>&lt;span class="lnt">42
&lt;/span>&lt;span class="lnt">43
&lt;/span>&lt;span class="lnt">44
&lt;/span>&lt;span class="lnt">45
&lt;/span>&lt;span class="lnt">46
&lt;/span>&lt;span class="lnt">47
&lt;/span>&lt;span class="lnt">48
&lt;/span>&lt;/code>&lt;/pre>&lt;/td>
&lt;td class="lntd">
&lt;pre tabindex="0" class="chroma">&lt;code class="language-json" data-lang="json">&lt;span class="line">&lt;span class="cl">&lt;span class="s2">&amp;#34;actions&amp;#34;&lt;/span>&lt;span class="err">:&lt;/span> &lt;span class="err">\&lt;/span>&lt;span class="p">[&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="p">{&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="nt">&amp;#34;type&amp;#34;&lt;/span>&lt;span class="p">:&lt;/span> &lt;span class="s2">&amp;#34;Action.ShowCard&amp;#34;&lt;/span>&lt;span class="p">,&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="nt">&amp;#34;title&amp;#34;&lt;/span>&lt;span class="p">:&lt;/span> &lt;span class="s2">&amp;#34;Approve&amp;#34;&lt;/span>&lt;span class="p">,&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="nt">&amp;#34;card&amp;#34;&lt;/span>&lt;span class="p">:&lt;/span> &lt;span class="p">{&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="nt">&amp;#34;type&amp;#34;&lt;/span>&lt;span class="p">:&lt;/span> &lt;span class="s2">&amp;#34;AdaptiveCard&amp;#34;&lt;/span>&lt;span class="p">,&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="nt">&amp;#34;body&amp;#34;&lt;/span>&lt;span class="p">:&lt;/span> &lt;span class="err">\&lt;/span>&lt;span class="p">[&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="p">{&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="nt">&amp;#34;type&amp;#34;&lt;/span>&lt;span class="p">:&lt;/span> &lt;span class="s2">&amp;#34;TextBlock&amp;#34;&lt;/span>&lt;span class="p">,&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="nt">&amp;#34;text&amp;#34;&lt;/span>&lt;span class="p">:&lt;/span> &lt;span class="s2">&amp;#34;Comments&amp;#34;&lt;/span>&lt;span class="p">,&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="nt">&amp;#34;wrap&amp;#34;&lt;/span>&lt;span class="p">:&lt;/span> &lt;span class="kc">true&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="p">},&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="p">{&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="nt">&amp;#34;type&amp;#34;&lt;/span>&lt;span class="p">:&lt;/span> &lt;span class="s2">&amp;#34;Input.Text&amp;#34;&lt;/span>&lt;span class="p">,&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="nt">&amp;#34;id&amp;#34;&lt;/span>&lt;span class="p">:&lt;/span> &lt;span class="s2">&amp;#34;comments&amp;#34;&lt;/span>&lt;span class="p">,&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="nt">&amp;#34;placeholder&amp;#34;&lt;/span>&lt;span class="p">:&lt;/span> &lt;span class="s2">&amp;#34;Enter comments&amp;#34;&lt;/span>&lt;span class="p">,&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="nt">&amp;#34;maxLength&amp;#34;&lt;/span>&lt;span class="p">:&lt;/span> &lt;span class="mi">1000&lt;/span>&lt;span class="p">,&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="nt">&amp;#34;isMultiline&amp;#34;&lt;/span>&lt;span class="p">:&lt;/span> &lt;span class="kc">true&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="p">}&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="err">\&lt;/span>&lt;span class="p">],&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="nt">&amp;#34;actions&amp;#34;&lt;/span>&lt;span class="p">:&lt;/span> &lt;span class="err">\&lt;/span>&lt;span class="p">[&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="p">{&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="nt">&amp;#34;type&amp;#34;&lt;/span>&lt;span class="p">:&lt;/span> &lt;span class="s2">&amp;#34;Action.Submit&amp;#34;&lt;/span>&lt;span class="p">,&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="nt">&amp;#34;title&amp;#34;&lt;/span>&lt;span class="p">:&lt;/span> &lt;span class="s2">&amp;#34;Submit&amp;#34;&lt;/span>&lt;span class="p">,&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="nt">&amp;#34;data&amp;#34;&lt;/span>&lt;span class="p">:&lt;/span> &lt;span class="p">{&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="nt">&amp;#34;Environment&amp;#34;&lt;/span>&lt;span class="p">:&lt;/span> &lt;span class="s2">&amp;#34;Default-2821cf92-86ad-4c7b-ba9a-5c79a70d4a21&amp;#34;&lt;/span>&lt;span class="p">,&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="nt">&amp;#34;ApprovalTitle&amp;#34;&lt;/span>&lt;span class="p">:&lt;/span> &lt;span class="s2">&amp;#34;Appoval required for Opportunity&amp;#34;&lt;/span>&lt;span class="p">,&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="nt">&amp;#34;ApprovalLink&amp;#34;&lt;/span>&lt;span class="p">:&lt;/span> &lt;span class="s2">&amp;#34;https://flow.microsoft.com/manage/environments/Default-2821cf92-86ad-4c7b-ba9a-5c79a70d4a21/approvals/received/6cce94f6-603c-40e7-adb6-8b20c75f724f&amp;#34;&lt;/span>&lt;span class="p">,&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="nt">&amp;#34;ApprovalName&amp;#34;&lt;/span>&lt;span class="p">:&lt;/span> &lt;span class="s2">&amp;#34;6cce94f6-603c-40e7-adb6-8b20c75f724f&amp;#34;&lt;/span>&lt;span class="p">,&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="nt">&amp;#34;ItemLink&amp;#34;&lt;/span>&lt;span class="p">:&lt;/span> &lt;span class="s2">&amp;#34;https://.crm.dynamics.com/main.aspx?newWindow=true&amp;amp;pagetype=entityrecord&amp;amp;etn=opportunity&amp;amp;id=b7c47c42-a290-e611-80e3-c4346bacba3c&amp;#34;&lt;/span>&lt;span class="p">,&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="nt">&amp;#34;ItemLinkDescription&amp;#34;&lt;/span>&lt;span class="p">:&lt;/span> &lt;span class="s2">&amp;#34;Opportunity for 7-Eleven and Udaside label - &amp;#34;&lt;/span>&lt;span class="p">,&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="nt">&amp;#34;OnBehalfOfNotice&amp;#34;&lt;/span>&lt;span class="p">:&lt;/span> &lt;span class="s2">&amp;#34;Requested by Carl Cookson &amp;lt;CarlC@CRM.onmicrosoft.com&amp;gt;&amp;#34;&lt;/span>&lt;span class="p">,&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="nt">&amp;#34;CreatorName&amp;#34;&lt;/span>&lt;span class="p">:&lt;/span> &lt;span class="s2">&amp;#34;Carl Cookson&amp;#34;&lt;/span>&lt;span class="p">,&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="nt">&amp;#34;CreatorEmail&amp;#34;&lt;/span>&lt;span class="p">:&lt;/span> &lt;span class="s2">&amp;#34;CarlC@CRM.onmicrosoft.com&amp;#34;&lt;/span>&lt;span class="p">,&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="nt">&amp;#34;CreationTime&amp;#34;&lt;/span>&lt;span class="p">:&lt;/span> &lt;span class="s2">&amp;#34;\\&amp;#34;&lt;/span>&lt;span class="mi">2019-07-03&lt;/span>&lt;span class="err">T&lt;/span>&lt;span class="mi">14&lt;/span>&lt;span class="p">:&lt;/span>&lt;span class="mi">30&lt;/span>&lt;span class="p">:&lt;/span>&lt;span class="mi">02&lt;/span>&lt;span class="err">Z\\&lt;/span>&lt;span class="s2">&amp;#34;&amp;#34;&lt;/span>&lt;span class="p">,&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="nt">&amp;#34;MessageTitle&amp;#34;&lt;/span>&lt;span class="p">:&lt;/span> &lt;span class="s2">&amp;#34;Appoval required for Opportunity&amp;#34;&lt;/span>&lt;span class="p">,&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="nt">&amp;#34;Options&amp;#34;&lt;/span>&lt;span class="p">:&lt;/span> &lt;span class="err">\&lt;/span>&lt;span class="p">[&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="s2">&amp;#34;Approve&amp;#34;&lt;/span>&lt;span class="p">,&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="s2">&amp;#34;Reject&amp;#34;&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="err">\&lt;/span>&lt;span class="p">],&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="nt">&amp;#34;SelectedOption&amp;#34;&lt;/span>&lt;span class="p">:&lt;/span> &lt;span class="s2">&amp;#34;Approve&amp;#34;&lt;/span>&lt;span class="p">,&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="nt">&amp;#34;ActionType&amp;#34;&lt;/span>&lt;span class="p">:&lt;/span> &lt;span class="mi">1&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="p">}&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="p">}&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="err">\&lt;/span>&lt;span class="p">],&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="nt">&amp;#34;$schema&amp;#34;&lt;/span>&lt;span class="p">:&lt;/span> &lt;span class="s2">&amp;#34;http://adaptivecards.io/schemas/adaptive-card.json&amp;#34;&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="p">}&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="p">},&lt;/span>
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/td>&lt;/tr>&lt;/table>
&lt;/div>
&lt;/div></description></item></channel></rss>