{"id":795,"date":"2024-03-21T14:00:00","date_gmt":"2024-03-21T14:00:00","guid":{"rendered":"https:\/\/automatethemundane.com\/index.php\/2024\/03\/21\/power-pipelines-and-enhanced-alm-part-4-solution-approvals\/"},"modified":"2024-03-27T11:58:46","modified_gmt":"2024-03-27T11:58:46","slug":"power-pipelines-and-enhanced-alm-part-4-solution-approvals","status":"publish","type":"post","link":"https:\/\/automatethemundane.com\/index.php\/2024\/03\/21\/power-pipelines-and-enhanced-alm-part-4-solution-approvals\/","title":{"rendered":"Power Pipelines and Enhanced ALM Part 4 &#8211; Solution Approvals"},"content":{"rendered":"\n<h2 class=\"wp-block-heading\">Approvers<\/h2>\n\n\n\n<p class=\"has-text-color\" style=\"color:rgb(0, 0, 0)\">With the core of the app created we now need to define how approvals will be done. To do this we will create a new table called Power Platform Project Approvers. Use the following Diagram to construct the table<\/p>\n\n\n\n<div class=\"wp-block-wp-mermaid-block mermaid\">\n---\ntitle: Approvers ERD\n---\nerDiagram\n    Approvers}| -- || Entra :contains\n    \n    Entra{\n        int EntraID PK\n        }\n     Approvers {\n        string ApproverName PK\n        choice Role\n        coice RoleContext\n        lookup MicrosoftEntraID-POC FK\n    }\n<\/div>\n\n\n\n<ol class=\"wp-block-list\">\n<li>Create the table with its Primary Column as Approver Name set the Required to Optional\n<div class=\"wp-block-columns is-layout-flex wp-container-core-columns-is-layout-9d6595d7 wp-block-columns-is-layout-flex\">\n<div class=\"wp-block-column is-layout-flow wp-block-column-is-layout-flow\">\n<figure class=\"wp-block-image size-large\"><img decoding=\"async\" src=\"https:\/\/automatethemundane.com\/wp-content\/uploads\/2024\/03\/untitled-40.png\" alt=\"\"\/><\/figure>\n<\/div>\n\n\n\n<div class=\"wp-block-column is-layout-flow wp-block-column-is-layout-flow\">\n<figure class=\"wp-block-image size-large\"><img decoding=\"async\" src=\"https:\/\/automatethemundane.com\/wp-content\/uploads\/2024\/03\/untitled-41.png\" alt=\"\"\/><\/figure>\n<\/div>\n<\/div>\n<\/li>\n\n\n\n<li>Add a new choice column called Role, with a local choices \n<div class=\"wp-block-columns is-layout-flex wp-container-core-columns-is-layout-9d6595d7 wp-block-columns-is-layout-flex\">\n<div class=\"wp-block-column is-layout-flow wp-block-column-is-layout-flow\">\n<figure class=\"wp-block-image size-large\"><img decoding=\"async\" src=\"https:\/\/automatethemundane.com\/wp-content\/uploads\/2024\/03\/untitled-42.png\" alt=\"\"\/><\/figure>\n<\/div>\n\n\n\n<div class=\"wp-block-column is-layout-flow wp-block-column-is-layout-flow\">\n<figure class=\"wp-block-image size-large\"><img decoding=\"async\" src=\"https:\/\/automatethemundane.com\/wp-content\/uploads\/2024\/03\/untitled-43.png\" alt=\"\"\/><\/figure>\n<\/div>\n<\/div>\n<\/li>\n\n\n\n<li>Add another choice column called Role Context with a global choice called Context\n<div class=\"wp-block-columns is-layout-flex wp-container-core-columns-is-layout-9d6595d7 wp-block-columns-is-layout-flex\">\n<div class=\"wp-block-column is-layout-flow wp-block-column-is-layout-flow\">\n<figure class=\"wp-block-image size-large\"><img decoding=\"async\" src=\"https:\/\/automatethemundane.com\/wp-content\/uploads\/2024\/03\/untitled-44.png\" alt=\"\"\/><\/figure>\n<\/div>\n\n\n\n<div class=\"wp-block-column is-layout-flow wp-block-column-is-layout-flow\">\n<figure class=\"wp-block-image size-large\"><img decoding=\"async\" src=\"https:\/\/automatethemundane.com\/wp-content\/uploads\/2024\/03\/untitled-45.png\" alt=\"\"\/><\/figure>\n<\/div>\n<\/div>\n<\/li>\n\n\n\n<li>Add one more lookup column to the Entra ID table called POC\n<figure class=\"wp-block-image size-large\"><img decoding=\"async\" src=\"https:\/\/automatethemundane.com\/wp-content\/uploads\/2024\/03\/untitled-46.png\" alt=\"\"\/><\/figure>\n<\/li>\n\n\n\n<li>Update the Main form as follows\n<figure class=\"wp-block-image size-large\"><img decoding=\"async\" src=\"https:\/\/automatethemundane.com\/wp-content\/uploads\/2024\/03\/untitled-47-1024x650.png\" alt=\"\"\/><\/figure>\n<\/li>\n\n\n\n<li>Update the main view as follows\n<figure class=\"wp-block-image size-large\"><img decoding=\"async\" src=\"https:\/\/automatethemundane.com\/wp-content\/uploads\/2024\/03\/untitled-48-1024x396.png\" alt=\"\"\/><\/figure>\n<\/li>\n\n\n\n<li>In the MDA add a new area called backend and add the table\n<figure class=\"wp-block-image size-large\"><img decoding=\"async\" src=\"https:\/\/automatethemundane.com\/wp-content\/uploads\/2024\/03\/untitled-49-1024x472.png\" alt=\"\"\/><\/figure>\n<\/li>\n\n\n\n<li>To set the Approvers Name, we could use a Power Automate flow, JavaScript, or a Plugin. For this scenario I am going to use the <a href=\"https:\/\/andworx-development.crm.dynamics.com\/main.aspx?appid=97eee007-fcd3-ee11-9079-00224827257b&amp;pagetype=custom&amp;name=cat_dataverseactiondetailspage_eec36#\">Dataverse Accelerator<\/a> App (yes I know it is preview, but its great). \n\n<figure class=\"wp-block-image size-large\"><img decoding=\"async\" src=\"https:\/\/automatethemundane.com\/wp-content\/uploads\/2024\/03\/untitled-50-1024x538.png\" alt=\"\"\/><\/figure>\n\n\n\n<pre class=\"wp-block-code\"><code>Set('Approver Name',ThisRecord.POC.'Display Name')<\/code><\/pre>\n<\/li>\n\n\n\n<li>The Approvers Name will now be properly set upon creation<\/li>\n<\/ol>\n\n\n\n<h2 class=\"wp-block-heading\">Approval Setup<\/h2>\n\n\n\n<ol class=\"wp-block-list\">\n<li>Create two lookup columns in the Power Platform Projects table, each pointing to the Approvals Table. Call the first one Team Lead Approval and the second one Branch Chief Approval.\n<div class=\"wp-block-columns is-layout-flex wp-container-core-columns-is-layout-9d6595d7 wp-block-columns-is-layout-flex\">\n<div class=\"wp-block-column is-layout-flow wp-block-column-is-layout-flow\">\n<figure class=\"wp-block-image size-large\"><img decoding=\"async\" src=\"https:\/\/automatethemundane.com\/wp-content\/uploads\/2024\/03\/untitled-51.png\" alt=\"\"\/><\/figure>\n<\/div>\n\n\n\n<div class=\"wp-block-column is-layout-flow wp-block-column-is-layout-flow\">\n<figure class=\"wp-block-image size-large\"><img decoding=\"async\" src=\"https:\/\/automatethemundane.com\/wp-content\/uploads\/2024\/03\/untitled-52.png\" alt=\"\"\/><\/figure>\n<\/div>\n<\/div>\n<\/li>\n\n\n\n<li>Add the lookups to the main form in a new hidden tab call Approvals (we will do more with it later)\n<figure class=\"wp-block-image size-large\"><img decoding=\"async\" src=\"https:\/\/automatethemundane.com\/wp-content\/uploads\/2024\/03\/untitled-53-1024x562.png\" alt=\"\"\/><\/figure>\n<\/li>\n<\/ol>\n\n\n\n<h2 class=\"wp-block-heading\">Project Approval Workflow<\/h2>\n\n\n\n<p class=\"has-text-color\" style=\"color:rgb(0, 0, 0)\">The last step will be to send an approval to the Team lead to start gathering basic requirements so estimation can occur. <\/p>\n\n\n\n<p class=\"has-background\" style=\"background-color:rgb(241, 241, 239)\">\ud83d\udca1 The estimation feature will be added at a later time<\/p>\n\n\n\n<ol class=\"wp-block-list\">\n<li>Create a Power Automate flow called \u201c1.1 - When a new Project is Requested (Power Platform Management)\u201d, with a Dataverse trigger of \u201cWhen a row is added, modified or deleted\u201d.\n<figure class=\"wp-block-image size-large\"><img decoding=\"async\" src=\"https:\/\/automatethemundane.com\/wp-content\/uploads\/2024\/03\/untitled-54.png\" alt=\"\"\/><\/figure>\n<\/li>\n\n\n\n<li>Add a Parse JSON Action that will read the output of the trigger<\/li>\n\n\n\n<li>Add an Array Variable called varUserArray<\/li>\n\n\n\n<li>Add a String Variable called varEmails\n<figure class=\"wp-block-image size-large\"><img decoding=\"async\" src=\"https:\/\/automatethemundane.com\/wp-content\/uploads\/2024\/03\/untitled-55.png\" alt=\"\"\/><\/figure>\n<\/li>\n\n\n\n<li>Create a Scope Control called Get User\n<figure class=\"wp-block-image size-large\"><img decoding=\"async\" src=\"https:\/\/automatethemundane.com\/wp-content\/uploads\/2024\/03\/untitled-56.png\" alt=\"\"\/><\/figure>\n<\/li>\n\n\n\n<li>Add a Dataverse List Rows action that filters off for the role Team Lead (435700000)\n<figure class=\"wp-block-image size-large\"><img decoding=\"async\" src=\"https:\/\/automatethemundane.com\/wp-content\/uploads\/2024\/03\/untitled-57.png\" alt=\"\"\/><\/figure>\n<\/li>\n\n\n\n<li>Within an Apply to Each appended to the varUsersArray the POC information\n<figure class=\"wp-block-image size-large\"><img decoding=\"async\" src=\"https:\/\/automatethemundane.com\/wp-content\/uploads\/2024\/03\/untitled-58.png\" alt=\"\"\/><\/figure>\n<\/li>\n\n\n\n<li>Parse the JSON of the varUserArray to make it dynamically accesible \n<figure class=\"wp-block-image size-large\"><img decoding=\"async\" src=\"https:\/\/automatethemundane.com\/wp-content\/uploads\/2024\/03\/untitled-59.png\" alt=\"\"\/><\/figure>\n<\/li>\n\n\n\n<li>Within another Apply to Each lookup the Users info and append to the string variable varEmails the users Email\n\n<figure class=\"wp-block-image size-large\"><img decoding=\"async\" src=\"https:\/\/automatethemundane.com\/wp-content\/uploads\/2024\/03\/untitled-60.png\" alt=\"\"\/><\/figure>\n\n\n\n<figure class=\"wp-block-image size-large\"><img decoding=\"async\" src=\"https:\/\/automatethemundane.com\/wp-content\/uploads\/2024\/03\/untitled-61.png\" alt=\"\"\/><\/figure>\n<\/li>\n\n\n\n<li>Add another Scope Control called Approval\n<figure class=\"wp-block-image size-large\"><img decoding=\"async\" src=\"https:\/\/automatethemundane.com\/wp-content\/uploads\/2024\/03\/untitled-62.png\" alt=\"\"\/><\/figure>\n<\/li>\n\n\n\n<li>Add a Scope Control inside and add three actions, \n\n<ol class=\"wp-block-list\">\n<li>Dataverse Get Row by ID for the Users table that uses the Created By as the ID<\/li>\n\n\n\n<li>Dataverse Get Row by ID for the Persons (Contacts) table that uses the Project Customer as the ID<\/li>\n\n\n\n<li>O365 Get user profile that uses the Project Lead value as the UPN<\/li>\n<\/ol>\n\n\n\n<figure class=\"wp-block-image size-large\"><img decoding=\"async\" src=\"https:\/\/automatethemundane.com\/wp-content\/uploads\/2024\/03\/untitled-63.png\" alt=\"\"\/><\/figure>\n<\/li>\n\n\n\n<li>Create an Approval action as follows\n<figure class=\"wp-block-image size-large\"><img decoding=\"async\" src=\"https:\/\/automatethemundane.com\/wp-content\/uploads\/2024\/03\/untitled-64.png\" alt=\"\"\/><\/figure>\n<\/li>\n\n\n\n<li>Add two Dataverse Update a row actions\n<ol class=\"wp-block-list\">\n<li>Table-Power Platform Projects, ID Projects ID, Team Lead Approval will be the approval just created<\/li>\n\n\n\n<li>Table-Approvals, ID Approval created above, Name will be the title of the Approval (this is to make it \u201csimple\u201d to view)\n<figure class=\"wp-block-image size-large\"><img decoding=\"async\" src=\"https:\/\/automatethemundane.com\/wp-content\/uploads\/2024\/03\/untitled-65-1024x607.png\" alt=\"\"\/><\/figure>\n<\/li>\n<\/ol>\n<\/li>\n\n\n\n<li>Add a Wait for Approval Action using the ID of the approval from above\n<figure class=\"wp-block-image size-large\"><img decoding=\"async\" src=\"https:\/\/automatethemundane.com\/wp-content\/uploads\/2024\/03\/untitled-66.png\" alt=\"\"\/><\/figure>\n<\/li>\n\n\n\n<li>Add a Condition based on the outcome of the approval\n<figure class=\"wp-block-image size-large\"><img decoding=\"async\" src=\"https:\/\/automatethemundane.com\/wp-content\/uploads\/2024\/03\/untitled-67-1024x375.png\" alt=\"\"\/><\/figure>\n<\/li>\n\n\n\n<li>If Approved we will need to add a row to the solutions table in the Development Environment. Because this needs to run from the Production Environment and this needs to leave my tenant I will add an Environment variable called Dataverse Development Environment\n<div class=\"wp-block-image size-large\">\n<figure class=\"aligncenter\"><img decoding=\"async\" src=\"https:\/\/automatethemundane.com\/wp-content\/uploads\/2024\/03\/untitled-68.png\" alt=\"\"\/><\/figure>\n<\/div>\n\n\n<p class=\"has-background\" style=\"background-color:rgb(241, 241, 239)\">\ud83d\udca1 Before Publishing this we will be removing the current value. If this is not done, then we will have to manually fix it in Test and Production<\/p>\n<\/li>\n\n\n\n<li>Next we will add an Environment variable called Publisher ID for the solution publisher (this is done to ensure we have the publisher we want)<div class=\"wp-block-image size-large\">\n<figure class=\"aligncenter\"><img decoding=\"async\" src=\"https:\/\/automatethemundane.com\/wp-content\/uploads\/2024\/03\/untitled-69.png\" alt=\"\"\/><\/figure>\n<\/div><\/li>\n\n\n\n<li>Then we will add a Environment Variable called Dataverse Development Environment ID<div class=\"wp-block-image size-large\">\n<figure class=\"aligncenter\"><img decoding=\"async\" src=\"https:\/\/automatethemundane.com\/wp-content\/uploads\/2024\/03\/untitled-70.png\" alt=\"\"\/><\/figure>\n<\/div><\/li>\n\n\n\n<li>The last Environment Variable will be for the Power apps URL. Depending on the cloud you are in this may differ, so it helps to have a variable set it for us<div class=\"wp-block-image size-large\">\n<figure class=\"aligncenter\"><img decoding=\"async\" src=\"https:\/\/automatethemundane.com\/wp-content\/uploads\/2024\/03\/untitled-71.png\" alt=\"\"\/><\/figure>\n<\/div><\/li>\n\n\n\n<li>Add a Scope Control that will help us clean the project Name String before being added. This is being done because the name must not contain any special characters or spaces. \n<figure class=\"wp-block-image size-large\"><img decoding=\"async\" src=\"https:\/\/automatethemundane.com\/wp-content\/uploads\/2024\/03\/untitled-72.png\" alt=\"\"\/><\/figure>\n<\/li>\n\n\n\n<li>Add a Compose called bad Characters \n\n<figure class=\"wp-block-image size-large\"><img decoding=\"async\" src=\"https:\/\/automatethemundane.com\/wp-content\/uploads\/2024\/03\/untitled-73.png\" alt=\"\"\/><\/figure>\n\n\n\n<pre class=\"wp-block-code\"><code>&#91;\"-\",\"~\",\"#\",\"%\",\"&amp;\",\"*\",\":\",\"&lt;\",\"&gt;\",\"?\",\"\/\",\"\",\"{\",\"|\",\"}\"]<\/code><\/pre>\n<\/li>\n\n\n\n<li>Add a Select and add the following Expressions\n\n<figure class=\"wp-block-image size-large\"><img decoding=\"async\" src=\"https:\/\/automatethemundane.com\/wp-content\/uploads\/2024\/03\/untitled-74.png\" alt=\"\"\/><\/figure>\n\n\n\n<div class=\"wp-block-columns is-layout-flex wp-container-core-columns-is-layout-9d6595d7 wp-block-columns-is-layout-flex\">\n<div class=\"wp-block-column is-layout-flow wp-block-column-is-layout-flow\">\n<pre class=\"wp-block-code\"><code>range(0, length(triggerOutputs()?&#91;'body\/andy_projectname']))<\/code><\/pre>\n<\/div>\n\n\n\n<div class=\"wp-block-column is-layout-flow wp-block-column-is-layout-flow\">\n<pre class=\"wp-block-code\"><code>if\n(contains(outputs('Compose_-_Bad_Characters'), substring(triggerOutputs()?&#91;'body\/andy_projectname'], item(), 1)),\n '',\n substring(triggerOutputs()?&#91;'body\/andy_projectname'], item(), 1)\n)<\/code><\/pre>\n<\/div>\n<\/div>\n<\/li>\n\n\n\n<li>Add a Compose Action that joins the string back together. \n\n<figure class=\"wp-block-image size-large\"><img decoding=\"async\" src=\"https:\/\/automatethemundane.com\/wp-content\/uploads\/2024\/03\/untitled-75.png\" alt=\"\"\/><\/figure>\n\n\n\n<pre class=\"wp-block-code\"><code>join(body('Select_-_Remove_Unwanted'), '')<\/code><\/pre>\n<\/li>\n\n\n\n<li>Finally add a compose action that will remove any spaces from the string\n\n<figure class=\"wp-block-image size-large\"><img decoding=\"async\" src=\"https:\/\/automatethemundane.com\/wp-content\/uploads\/2024\/03\/untitled-76.png\" alt=\"\"\/><\/figure>\n\n\n\n<pre class=\"wp-block-code\"><code>replace(outputs('Compose_-_Clean_Project_Name_Join'),' ','')<\/code><\/pre>\n<\/li>\n\n\n\n<li>Add a Scope Control that called Scope - Create Solution in Dev\n<figure class=\"wp-block-image size-large\"><img decoding=\"async\" src=\"https:\/\/automatethemundane.com\/wp-content\/uploads\/2024\/03\/untitled-77.png\" alt=\"\"\/><\/figure>\n<\/li>\n\n\n\n<li>Add a Dataverse Add a new row to selected environment Action\n\n<ol class=\"wp-block-list\">\n<li>The Environment will be the Environment variable \u201cDataverse Development Environment\u201d set earlier<\/li>\n\n\n\n<li>The Table name will be Solutions<\/li>\n\n\n\n<li>The Name will be the output of \u201cCompose - Clean Project Name Remove Spaces\u201d<\/li>\n\n\n\n<li>The Publisher will be the Environment variable \u201cPublisher ID\u201d. Make sure to type the publisher as shown below. <\/li>\n<\/ol>\n\n\n\n<figure class=\"wp-block-image size-large\"><img decoding=\"async\" src=\"https:\/\/automatethemundane.com\/wp-content\/uploads\/2024\/03\/untitled-78.png\" alt=\"\"\/><\/figure>\n<\/li>\n\n\n\n<li>One more Dataverse Update row will be added. This will update the table with the Name of the Solution. \n\n<p class=\"has-background\" style=\"background-color:rgb(241, 241, 239)\">\ud83d\udca1 We are using the name vs a GUID because when it comes time to verify the solution in our pipeline all we have access to is the name<\/p>\n\n\n\n<figure class=\"wp-block-image size-large\"><img decoding=\"async\" src=\"https:\/\/automatethemundane.com\/wp-content\/uploads\/2024\/03\/untitled-83.png\" alt=\"\"\/><\/figure>\n<\/li>\n\n\n\n<li>The last action in this path will be to send an email if it has been approved. <\/li>\n\n\n\n<li>Add a Send an Email Action\n<ol class=\"wp-block-list\">\n<li>To will be to the Primary Email of the submitted<\/li>\n\n\n\n<li>The Subject will contain the Project Name<\/li>\n\n\n\n<li>The Body of the Email will have a note and a link to the solution. The Link will be constructed as follows\n<ol class=\"wp-block-list\">\n<li>Power apps URL environments\/Dataverse Development Environment ID\/solutions\/Solution identifier<\/li>\n<\/ol>\n<\/li>\n\n\n\n<li>CC will be the approvers\n<figure class=\"wp-block-image size-large\"><img decoding=\"async\" src=\"https:\/\/automatethemundane.com\/wp-content\/uploads\/2024\/03\/untitled-79.png\" alt=\"\"\/><\/figure>\n<\/li>\n<\/ol>\n<\/li>\n\n\n\n<li>If denied, we will send an email. Note, the link to the app is currently not loaded in, we will get that added when we push the solution to production. \n<figure class=\"wp-block-image size-large\"><img decoding=\"async\" src=\"https:\/\/automatethemundane.com\/wp-content\/uploads\/2024\/03\/untitled-80.png\" alt=\"\"\/><\/figure>\n<\/li>\n<\/ol>\n\n\n\n<h2 class=\"wp-block-heading\">Push to Test<\/h2>\n\n\n\n<ol class=\"wp-block-list\">\n<li>For each Environment Variable, remove the default value, then push the solution to test<\/li>\n\n\n\n<li>Update each variable to the appropriate value via the pipelines menu\n<figure class=\"wp-block-image size-large\"><img decoding=\"async\" src=\"https:\/\/automatethemundane.com\/wp-content\/uploads\/2024\/03\/untitled-81.png\" alt=\"\"\/><\/figure>\n<\/li>\n\n\n\n<li>With the solution in Test create a request and verify that the solution is created in the Development Environment. <\/li>\n<\/ol>\n\n\n\n<p class=\"has-text-color\" style=\"color:rgb(0, 0, 0)\">If you have any issues or questions feel free to send a message. If you simply want to download this solution you can find it all stored on my GitHub <\/p>\n","protected":false},"excerpt":{"rendered":"<p>Approvers With the core of the app created we now need to define how approvals will be done. To do this we will create a new table called Power Platform Project Approvers. Use the following Diagram to construct the table Approval Setup Project Approval Workflow The last step will be to send an approval to [&hellip;]<\/p>\n","protected":false},"author":1,"featured_media":788,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[22,43,6,30,42,35],"tags":[25,5,29,41],"class_list":["post-795","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-dataverse","category-environments","category-model-driven-app","category-power-automate","category-power-pipelines","category-tables","tag-dataverse","tag-power-apps","tag-power-automate","tag-power-pipelines","entry","has-media"],"jetpack_featured_media_url":"https:\/\/automatethemundane.com\/wp-content\/uploads\/2024\/03\/photo-1560174971-443de64be852-scaled.jpg","_links":{"self":[{"href":"https:\/\/automatethemundane.com\/index.php\/wp-json\/wp\/v2\/posts\/795","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/automatethemundane.com\/index.php\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/automatethemundane.com\/index.php\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/automatethemundane.com\/index.php\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/automatethemundane.com\/index.php\/wp-json\/wp\/v2\/comments?post=795"}],"version-history":[{"count":2,"href":"https:\/\/automatethemundane.com\/index.php\/wp-json\/wp\/v2\/posts\/795\/revisions"}],"predecessor-version":[{"id":797,"href":"https:\/\/automatethemundane.com\/index.php\/wp-json\/wp\/v2\/posts\/795\/revisions\/797"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/automatethemundane.com\/index.php\/wp-json\/wp\/v2\/media\/788"}],"wp:attachment":[{"href":"https:\/\/automatethemundane.com\/index.php\/wp-json\/wp\/v2\/media?parent=795"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/automatethemundane.com\/index.php\/wp-json\/wp\/v2\/categories?post=795"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/automatethemundane.com\/index.php\/wp-json\/wp\/v2\/tags?post=795"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}