{"id":20370,"date":"2022-09-02T06:00:00","date_gmt":"2022-09-02T13:00:00","guid":{"rendered":"https:\/\/cm-edgetun.pages.dev\/en-us\/power-platform\/blog\/power-apps\/extend-modern-commands-with-custom-pages-and-geospatial-mapping\/"},"modified":"2025-06-11T07:48:29","modified_gmt":"2025-06-11T14:48:29","slug":"extend-modern-commands-with-custom-pages-and-geospatial-mapping","status":"publish","type":"post","link":"https:\/\/cm-edgetun.pages.dev\/en-us\/power-platform\/blog\/power-apps\/extend-modern-commands-with-custom-pages-and-geospatial-mapping\/","title":{"rendered":"Extend modern commands with custom pages and geospatial mapping"},"content":{"rendered":"\n<p class=\"wp-block-paragraph\">Buttons and command bars control the core behavior for any application. Without them, we can\u2019t print the latest report, start our time-sensitive process, or make our hero storm the castle and save the day in our favorite video game. In Power Apps Model-Driven Apps, they are everywhere, and this blog will show you how to leverage <strong>geospatial <\/strong>features with <strong>modern commands, custom pages, model-driven apps<\/strong>, and a little bit of JavaScript. <\/p>\n\n\n<figure class=\"wp-block-image aligncenter\"><img loading=\"lazy\" decoding=\"async\" width=\"1463\" height=\"813\" alt=\"Open Contacts Map\" class=\"wp-image-20865\" src=\"https:\/\/cm-edgetun.pages.dev\/en-us\/power-platform\/blog\/wp-content\/uploads\/2022\/08\/image011.gif\"\/><figcaption>Use commanding to display a custom control <a href=\"https:\/\/cm-edgetun.pages.dev\/en-us\/power-platform\/blog\/wp-content\/uploads\/2022\/08\/image011.gif\" rel=\"noreferrer noopener\" target=\"_blank\">image<\/a><\/figcaption><\/figure>\n\n\n<h2 class=\"wp-block-heading\">Walkthrough<\/h2>\n\n\n<p class=\"wp-block-paragraph\">In this walkthrough, we will be using custom pages, map control, and app notifications for plotting a contact&#8217;s address on a map.  <\/p>\n\n<figure class=\"wp-block-image aligncenter size-full\"><img decoding=\"async\" alt=\"graphical user interface\" class=\"wp-image-21085 webp-format\" src=\"https:\/\/cm-edgetun.pages.dev\/en-us\/power-platform\/blog\/wp-content\/uploads\/2022\/08\/MapForIndividualRecord.webp\" srcset=\"\" data-orig-src=\"https:\/\/cm-edgetun.pages.dev\/en-us\/power-platform\/blog\/wp-content\/uploads\/2022\/08\/MapForIndividualRecord.webp\"><figcaption>Map for an individual record <a href=\"https:\/\/cm-edgetun.pages.dev\/en-us\/power-platform\/blog\/wp-content\/uploads\/2022\/08\/MapForIndividualRecord.png\" rel=\"noreferrer noopener\" target=\"_blank\">image<\/a><\/figcaption><\/figure>\n\n\n<p class=\"wp-block-paragraph\"><strong>What if<\/strong> you wanted to plan your trip around town to visit clients to be more effective and review the relative locations of your clients? And <strong>what if<\/strong> you were asked to do this by your CEO or VP and needed to let them know it was ready to view and where to find this map in your model-driven app?\u00a0 You could build them a beautiful app that looks something like this.<\/p>\n\n\n<figure class=\"wp-block-image aligncenter\"><img loading=\"lazy\" decoding=\"async\" width=\"1463\" height=\"813\" alt=\"Open Contacts Map\" class=\"wp-image-20865\" src=\"https:\/\/cm-edgetun.pages.dev\/en-us\/power-platform\/blog\/wp-content\/uploads\/2022\/08\/image011.gif\"\/><figcaption>Open contacts map <a data-id=\"https:\/\/cm-edgetun.pages.dev\/en-us\/power-platform\/blog\/wp-content\/uploads\/2022\/08\/image011.gif\" data-type=\"URL\" href=\"https:\/\/cm-edgetun.pages.dev\/en-us\/power-platform\/blog\/wp-content\/uploads\/2022\/08\/image011.gif\" rel=\"noreferrer noopener\" target=\"_blank\">image<\/a><\/figcaption><\/figure>\n\n\n<figure class=\"wp-block-image aligncenter\"><img loading=\"lazy\" decoding=\"async\" width=\"1463\" height=\"813\" alt=\"Send notification to CEO or VP with link to map\" class=\"wp-image-20866\" src=\"https:\/\/cm-edgetun.pages.dev\/en-us\/power-platform\/blog\/wp-content\/uploads\/2022\/08\/image012.gif\"\/><figcaption>Send notification to CEO or VIP with link to the map <a href=\"https:\/\/cm-edgetun.pages.dev\/en-us\/power-platform\/blog\/wp-content\/uploads\/2022\/08\/image012.gif\" rel=\"noreferrer noopener\" target=\"_blank\">image<\/a><\/figcaption><\/figure>\n\n\n<h3 class=\"wp-block-heading\">Setup<\/h3>\n\n\n<p class=\"wp-block-paragraph\">We need to create a custom page with a map control that will read contact data. What ingredients do we need to build all this? A solution, model-driven app, contacts, canvas app, custom page and JavaScript.<\/p>\n\n\n<h4 class=\"wp-block-heading\">Prerequisites<\/h4>\n\n\n<p class=\"wp-block-paragraph\">As an admin, go to the admin center, turn on geospatial controls and turn on Bing Maps. Detailed steps are here \u00a0<a href=\"https:\/\/docs.microsoft.com\/power-apps\/maker\/canvas-apps\/geospatial-overview#enable-geospatial-features-for-the-environment\" rel=\"noreferrer noopener\" target=\"_blank\">Add geospatial controls to canvas apps<\/a> and <a href=\"https:\/\/docs.microsoft.com\/power-platform\/admin\/manage-bing-maps-organization\" rel=\"noreferrer noopener\" target=\"_blank\">Manage Bing Maps for your organizations<\/a><\/p>\n\n<figure class=\"wp-block-image aligncenter\"><img decoding=\"async\" alt=\"Go to admin center\" class=\"wp-image-20868 webp-format\" src=\"https:\/\/cm-edgetun.pages.dev\/en-us\/power-platform\/blog\/wp-content\/uploads\/2022\/08\/image013.webp\" srcset=\"\" data-orig-src=\"https:\/\/cm-edgetun.pages.dev\/en-us\/power-platform\/blog\/wp-content\/uploads\/2022\/08\/image013.webp\"><figcaption>Enable maps<\/figcaption><\/figure>\n\n\n<h4 class=\"wp-block-heading\">Let\u2019s start with creating a solution, model-driven app, and contacts<\/h4>\n\n\n<ol class=\"wp-block-list\"><li>From your Power Apps portal, go-to solutions and create a new solution<\/li><li>Create a new model-driven app<\/li><li>Open the model-driven app<\/li><li>Add the contacts table to your model-driven app<\/li><li>Go to contact and enter new contacts with addresses using the main Contact form. Enter City, State\/Province, Country\/Region<\/li><\/ol>\n\n\n<p class=\"wp-block-paragraph\">For more information <a href=\"https:\/\/docs.microsoft.com\/power-apps\/maker\/model-driven-apps\/create-a-model-driven-app#add-pages-to-your-app\" rel=\"noreferrer noopener\" target=\"_blank\">Create a model-driven app using the account page<\/a><\/p>\n\n\n<h4 class=\"wp-block-heading\">Create canvas app<\/h4>\n\n\n<p class=\"wp-block-paragraph\">Why do we need a canvas app? You can copy and paste controls that aren\u2019t shown on a custom page from a canvas app. In this case, we want the map control<\/p>\n\n\n<ol class=\"wp-block-list\"><li>From the solution, add a blank canvas app. See <a href=\"https:\/\/docs.microsoft.com\/power-apps\/maker\/canvas-apps\/create-blank-app\" rel=\"noreferrer noopener\" target=\"_blank\">Create a blank canvas app from scratch<\/a><\/li><li>Add a data table that uses contacts as the data source. See <a href=\"https:\/\/docs.microsoft.com\/power-apps\/maker\/canvas-apps\/controls\/control-data-table#basic-usage\" rel=\"noreferrer noopener\" target=\"_blank\">Data table control in Power Apps<\/a><\/li><li>Add the map control. See <a href=\"https:\/\/docs.microsoft.com\/power-apps\/maker\/canvas-apps\/geospatial-component-map#add-a-map-to-an-app-screen\" rel=\"noreferrer noopener\" target=\"_blank\">Use an interactive map control in Power Apps<\/a><\/li><li>Enable the <strong>Show current location<\/strong> property and use the formula bar to set the <strong>CurrentLocationLongitude<\/strong> and <strong>CurrentLocationLatitude<\/strong> So that when the user selects a row, the map highlights the location with a blue circle<\/li><li><span style=\"font-size: 1rem\">When you\u2019re happy with formatting the data table and map. Select the controls and on your keyboard, use CTRL+C. See <\/span><a href=\"https:\/\/powerapps.microsoft.com\/blog\/copy-and-paste-controls-across-canvas-apps-available\/\" rel=\"noreferrer noopener\" target=\"_blank\">Copy and Paste controls across Canvas Apps available<\/a><\/li><\/ol>\n\n<figure class=\"wp-block-image aligncenter size-full\"><img decoding=\"async\" alt=\"graphical user interface, application\" class=\"wp-image-21083 webp-format\" src=\"https:\/\/cm-edgetun.pages.dev\/en-us\/power-platform\/blog\/wp-content\/uploads\/2022\/08\/MapProperties.webp\" srcset=\"\" data-orig-src=\"https:\/\/cm-edgetun.pages.dev\/en-us\/power-platform\/blog\/wp-content\/uploads\/2022\/08\/MapProperties.webp\"><figcaption>Map properties <a href=\"https:\/\/cm-edgetun.pages.dev\/en-us\/power-platform\/blog\/wp-content\/uploads\/2022\/08\/MapProperties.png\" rel=\"noreferrer noopener\" target=\"_blank\">image<\/a><\/figcaption><\/figure>\n\n<figure class=\"wp-block-image aligncenter size-full\"><img decoding=\"async\" alt=\"graphical user interface, application\" class=\"wp-image-21081 webp-format\" src=\"https:\/\/cm-edgetun.pages.dev\/en-us\/power-platform\/blog\/wp-content\/uploads\/2022\/08\/MapAdvancedCurrentLattitudeAndLongitudeProperties.webp\" srcset=\"\" data-orig-src=\"https:\/\/cm-edgetun.pages.dev\/en-us\/power-platform\/blog\/wp-content\/uploads\/2022\/08\/MapAdvancedCurrentLattitudeAndLongitudeProperties.webp\"><figcaption>Map advanced current latitude and longitude properties <a href=\"https:\/\/cm-edgetun.pages.dev\/en-us\/power-platform\/blog\/wp-content\/uploads\/2022\/08\/MapAdvancedCurrentLattitudeAndLongitudeProperties.png\" rel=\"noreferrer noopener\" target=\"_blank\">image<\/a><\/figcaption><\/figure>\n\n\n<h4 class=\"wp-block-heading\">Create a custom page<\/h4>\n\n\n<ol class=\"wp-block-list\"><li>From your solution open the model-driven app.<\/li><li>Click the top + Add page button. See <a href=\"https:\/\/docs.microsoft.com\/power-apps\/maker\/model-driven-apps\/add-page-to-model-app\" rel=\"noreferrer noopener\" target=\"_blank\">Add a custom page to your model-driven app<\/a><\/li><li>While on the custom page use CTRL+V to add the data table and map to your custom page. See <a href=\"https:\/\/powerapps.microsoft.com\/blog\/copy-and-paste-controls-across-canvas-apps-available\/\" rel=\"noreferrer noopener\" target=\"_blank\">Copy and Paste controls across Canvas Apps available<\/a><br\/> <h5>Open your map from a button<\/h5> <ol><li>From your solution open the model-driven app and navigate to command designer. When prompted leave the default to the Main grid. See <a href=\"https:\/\/docs.microsoft.com\/power-apps\/maker\/model-driven-apps\/use-command-designer#open-an-existing-model-driven-app-using-modern-app-designer\" rel=\"noreferrer noopener\" target=\"_blank\">Open the app designer<\/a><\/li><li>When prompted select to use JavaScript<\/li><li>From the left pane, add a new dropdown using the +New button<\/li><li>You will see a group is added by default<\/li><li>From the left pane select the group and using the same +New button create a command button under the group<\/li><li>Create a local JS file and add the JS script below to open a centered dialog window.<\/li><li>Click + Add library link<\/li><li>Click + new web resource<\/li><li>Upload your file and enter all the fields.<\/li><li>Select your new library<\/li><li>Enter the name of the function in this case <strong><em>openCustomPage<\/em><\/strong>. See <a href=\"https:\/\/docs.microsoft.com\/power-apps\/maker\/model-driven-apps\/commanding-designer-use-custom-pages-as-dialogs#create-a-javascript-web-resource-for-your-command\" rel=\"noreferrer noopener\" target=\"_blank\">Use commands with custom pages with cloud flows<\/a><\/li><li>Enter the custom page logical name as the first param and the page title as the second param. See <a href=\"https:\/\/docs.microsoft.com\/power-apps\/maker\/model-driven-apps\/use-command-designer#use-javascript-for-actions\" rel=\"noreferrer noopener\" target=\"_blank\">Use Javascript for actions<\/a> and <a href=\"https:\/\/docs.microsoft.com\/power-apps\/developer\/model-driven-apps\/clientapi\/navigate-to-custom-page-examples#finding-the-logical-name\" rel=\"noreferrer noopener\" target=\"_blank\">Finding the logical name<\/a> <p>For more information see <a href=\"https:\/\/docs.microsoft.com\/power-apps\/maker\/model-driven-apps\/create-edit-web-resources\" rel=\"noreferrer noopener\" target=\"_blank\">Create and edit web resources<\/a><\/p> <\/li><\/ol><\/li><\/ol>\n\n\n<p class=\"has-vivid-cyan-blue-color has-text-color wp-block-paragraph\"><strong>Example code for openCustomPage sample function<\/strong><\/p>\n\n\n<pre class=\"wp-block-code\"><code>function openCustomPage(customPageLogicalName, customPageTitle) {\n  \/\/ Opens a centered custom page dialog\n  let pageInput = {\n    pageType: \"custom\",\n    name: customPageLogicalName,\n  };\n  let navigationOptions = {\n    target: 2,\n    position: 1,\n    width: { value: 50, unit: \"%\" },\n    title: customPageTitle,\n  };\n  Xrm.Navigation.navigateTo(pageInput, navigationOptions)\n    .then(function () {\n      \/\/ Called when the dialog closes\n    })\n    .catch(function (error) {\n      \/\/ Handle error\n    });\n}\n<\/code><\/pre>\n\n\n<h4 class=\"wp-block-heading\">Add send notification button<\/h4>\n\n\n<p class=\"wp-block-paragraph\">To get this working we are going to need to get the system user id. You can use OData to get the system user id quickly using this snippet. As a test, you can use your own system user id before sending it to someone. See <a href=\"https:\/\/docs.microsoft.com\/power-apps\/developer\/data-platform\/reference\/entities\/systemuser\" rel=\"noreferrer noopener\" target=\"_blank\">User (SystemUser) table\/entity reference<\/a><\/p>\n\n\n<p class=\"has-vivid-cyan-blue-color has-text-color wp-block-paragraph\"><strong>Example query<\/strong><\/p>\n\n\n<p class=\"wp-block-paragraph\"><em><u>\/api\/data\/v9.0\/systemusers?$select=fullname&amp;$filter=startswith(fullname,&#8217;Alfredo C&#8217;)<\/u><\/em><\/p>\n\n\n<ol class=\"wp-block-list\"><li>While still on the command designer, select the group again<\/li><li>Add another command using the +New button create command button<\/li><li>Add the below JS as a web resource just like you did above and this time the function name is <strong><em>sendNotification<\/em><\/strong>.<\/li><li>Enter the system user id of the person to see the notification as the first param. Enter the page title as the second param and the custom page URL for the third param.<\/li><li>When you are done save and publish your changes<\/li><\/ol>\n\n\n<p class=\"has-vivid-cyan-blue-color has-text-color wp-block-paragraph\"><strong>Example URL<\/strong><\/p>\n\n\n<p class=\"wp-block-paragraph\"><strong>\u00a0<\/strong><em><u>?appid=0b02a3a4-16da-ec11-bb3b-000d3a33d9bf&amp;ribbondebug=true&amp;pagetype=custom&amp;name=cr1c6_contactslocations_24f66<\/u><\/em><\/p>\n\n\n<p class=\"has-vivid-cyan-blue-color has-text-color wp-block-paragraph\"><strong>Example code for send notification function<\/strong><\/p>\n\n\n<pre class=\"wp-block-code\"><code>function sendNotification(systemuserid, customPageTitle, customPageUrl) {\n    var notificationRecord = {\n        \"title\": \"Congratulations\",\n        \"body\": \"You can review the location of your contacts\",\n        \"ownerid@odata.bind\": \"\/systemusers(\" + systemuserid + \")\",\n        \"icontype\": 100000001, \/\/ success\n        \"data\": JSON.stringify({\n            \"actions\": [{\n                    \"title\": customPageTitle,\n                    \"data\": {\n                        \"url\": customPageUrl\n                    }\n                }\n            ]\n        })\n    }\n    Xrm.WebApi.createRecord(\"appnotification\", notificationRecord).\n    then(\n        function success(result) {\n        console.log(\"notification created with single action: \" + result.id);\n    },\n        function (error) {\n        console.log(error.message);\n        \/\/ handle error conditions\n    });\n}\n<\/code><\/pre>\n\n\n<p class=\"wp-block-paragraph\">? Congratulations!<\/p>\n\n\n<p class=\"wp-block-paragraph\">Now you have your map and a way to notify your CEO or VP that it\u2019s available. The next time they open the app they will see the notification and can click on the link to review the map. \u00a0Note that the JS functions are reusable, and can be applied for different tables such as Accounts, Organizations, etc.<\/p>\n\n\n<p class=\"wp-block-paragraph\">You can discover your own scenarios. One example is you are planning a conference with different event locations.<\/p>\n\n\n<h2 class=\"wp-block-heading\">Team Credits<\/h2>\n\n\n<p class=\"wp-block-paragraph\">Huge thanks to the commanding engineering team. Alfredo Cerritos <a href=\"https:\/\/www.linkedin.com\/in\/alfredo-cerritos-8857358\/\" rel=\"noreferrer noopener\" target=\"_blank\">LinkedIn<\/a>, Anshul Jain <a href=\"https:\/\/www.linkedin.com\/in\/anshul-jain-81215946\/\" rel=\"noreferrer noopener\" target=\"_blank\">LinkedIn<\/a>, Brad Flood <a href=\"https:\/\/www.linkedin.com\/in\/brad-flood-12563950\/\" rel=\"noreferrer noopener\" target=\"_blank\">LinkedIn<\/a>, Casey Burke <a href=\"https:\/\/www.linkedin.com\/in\/casey-burke-microsoft\/\" rel=\"noreferrer noopener\" target=\"_blank\">LinkedIn<\/a>, Prabhat Pandey <a href=\"https:\/\/www.linkedin.com\/in\/prabhatpandey\/\" rel=\"noreferrer noopener\" target=\"_blank\">LinkedIn<\/a>, Sanket Patadia <a href=\"https:\/\/www.linkedin.com\/in\/sanket-p-4496ba9\/\" rel=\"noreferrer noopener\" target=\"_blank\">LinkedIn<\/a>, Sergio Escalera Costa <a href=\"https:\/\/www.linkedin.com\/in\/sescalera\/\" rel=\"noreferrer noopener\" target=\"_blank\">LinkedIn<\/a>, Srinivas Dandu <a href=\"https:\/\/www.linkedin.com\/in\/srinid\/\" rel=\"noreferrer noopener\" target=\"_blank\">LinkedIn<\/a><\/p>\n\n\n<p class=\"wp-block-paragraph\">Thanks to Scott Durrow <a href=\"https:\/\/www.linkedin.com\/in\/scottdurow\/\" rel=\"noreferrer noopener\" target=\"_blank\">LinkedIn<\/a>, Adrian Orth <a href=\"https:\/\/www.linkedin.com\/in\/adrian-orth-168891\/\" rel=\"noreferrer noopener\" target=\"_blank\">LinkedIn<\/a>\u00a0for collaboration<\/p>\n","protected":false},"excerpt":{"rendered":"<p>As a developer, learn how to extend Power Apps modern commanding by leveraging geospatial mapping with custom pages, and sending a notification about the map.<\/p>\n","protected":false},"author":235,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"ms_queue_id":[],"ep_exclude_from_search":false,"_classifai_error":"","_classifai_text_to_speech_error":"","_alt_title":"","ms-ems-related-posts":[],"footnotes":""},"audience":[3378],"content-type":[],"job-role":[],"product":[3473],"property":[],"topic":[3421],"coauthors":[2206],"class_list":["post-20370","post","type-post","status-publish","format-standard","hentry","audience-it-professional","product-power-apps","topic-application-modernization"],"yoast_head":"<!-- This site is optimized with the Yoast SEO plugin v27.2 - https:\/\/yoast.com\/product\/yoast-seo-wordpress\/ -->\n<title>Extend modern commands with custom pages and geospatial mapping - Microsoft Power Platform Blog<\/title>\n<meta name=\"robots\" content=\"index, follow, max-snippet:-1, max-image-preview:large, max-video-preview:-1\" \/>\n<link rel=\"canonical\" href=\"https:\/\/cm-edgetun.pages.dev\/en-us\/power-platform\/blog\/2022\/09\/02\/extend-modern-commands-with-custom-pages-and-geospatial-mapping\/\" \/>\n<meta property=\"og:locale\" content=\"en_US\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"Extend modern commands with custom pages and geospatial mapping - Microsoft Power Platform Blog\" \/>\n<meta property=\"og:description\" content=\"As a developer, learn how to extend Power Apps modern commanding by leveraging geospatial mapping with custom pages, and sending a notification about the map.\" \/>\n<meta property=\"og:url\" content=\"https:\/\/cm-edgetun.pages.dev\/en-us\/power-platform\/blog\/power-apps\/extend-modern-commands-with-custom-pages-and-geospatial-mapping\/\" \/>\n<meta property=\"og:site_name\" content=\"Microsoft Power Platform Blog\" \/>\n<meta property=\"article:published_time\" content=\"2022-09-02T13:00:00+00:00\" \/>\n<meta property=\"article:modified_time\" content=\"2025-06-11T14:48:29+00:00\" \/>\n<meta property=\"og:image\" content=\"https:\/\/cm-edgetun.pages.dev\/en-us\/power-platform\/blog\/wp-content\/uploads\/2022\/08\/image011-1024x569.gif\" \/>\n\t<meta property=\"og:image:width\" content=\"1024\" \/>\n\t<meta property=\"og:image:height\" content=\"569\" \/>\n\t<meta property=\"og:image:type\" content=\"image\/gif\" \/>\n<meta name=\"author\" content=\"Alfredo Cerritos\" \/>\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n<meta name=\"twitter:label1\" content=\"Written by\" \/>\n\t<meta name=\"twitter:data1\" content=\"Alfredo Cerritos\" \/>\n\t<meta name=\"twitter:label2\" content=\"Est. reading time\" \/>\n\t<meta name=\"twitter:data2\" content=\"6 minutes\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\/\/schema.org\",\"@graph\":[{\"@type\":\"Article\",\"@id\":\"https:\/\/cm-edgetun.pages.dev\/en-us\/power-platform\/blog\/2022\/09\/02\/extend-modern-commands-with-custom-pages-and-geospatial-mapping\/#article\",\"isPartOf\":{\"@id\":\"https:\/\/cm-edgetun.pages.dev\/en-us\/power-platform\/blog\/2022\/09\/02\/extend-modern-commands-with-custom-pages-and-geospatial-mapping\/\"},\"author\":[{\"@id\":\"https:\/\/cm-edgetun.pages.dev\/en-us\/power-platform\/blog\/author\/alfredo-cerritos\/\",\"@type\":\"Person\",\"@name\":\"Alfredo Cerritos\"}],\"headline\":\"Extend modern commands with custom pages and geospatial mapping\",\"datePublished\":\"2022-09-02T13:00:00+00:00\",\"dateModified\":\"2025-06-11T14:48:29+00:00\",\"mainEntityOfPage\":{\"@id\":\"https:\/\/cm-edgetun.pages.dev\/en-us\/power-platform\/blog\/2022\/09\/02\/extend-modern-commands-with-custom-pages-and-geospatial-mapping\/\"},\"wordCount\":1048,\"commentCount\":0,\"publisher\":{\"@id\":\"https:\/\/cm-edgetun.pages.dev\/en-us\/power-platform\/blog\/#organization\"},\"image\":{\"@id\":\"https:\/\/cm-edgetun.pages.dev\/en-us\/power-platform\/blog\/2022\/09\/02\/extend-modern-commands-with-custom-pages-and-geospatial-mapping\/#primaryimage\"},\"thumbnailUrl\":\"https:\/\/cm-edgetun.pages.dev\/en-us\/power-platform\/blog\/wp-content\/uploads\/2022\/08\/image011.gif\",\"keywords\":[\"Canvas Apps\",\"Dataverse\",\"Model-Driven Apps\"],\"inLanguage\":\"en-US\",\"potentialAction\":[{\"@type\":\"CommentAction\",\"name\":\"Comment\",\"target\":[\"https:\/\/cm-edgetun.pages.dev\/en-us\/power-platform\/blog\/2022\/09\/02\/extend-modern-commands-with-custom-pages-and-geospatial-mapping\/#respond\"]}]},{\"@type\":\"WebPage\",\"@id\":\"https:\/\/cm-edgetun.pages.dev\/en-us\/power-platform\/blog\/2022\/09\/02\/extend-modern-commands-with-custom-pages-and-geospatial-mapping\/\",\"url\":\"https:\/\/cm-edgetun.pages.dev\/en-us\/power-platform\/blog\/2022\/09\/02\/extend-modern-commands-with-custom-pages-and-geospatial-mapping\/\",\"name\":\"Extend modern commands with custom pages and geospatial mapping - Microsoft Power Platform Blog\",\"isPartOf\":{\"@id\":\"https:\/\/cm-edgetun.pages.dev\/en-us\/power-platform\/blog\/#website\"},\"primaryImageOfPage\":{\"@id\":\"https:\/\/cm-edgetun.pages.dev\/en-us\/power-platform\/blog\/2022\/09\/02\/extend-modern-commands-with-custom-pages-and-geospatial-mapping\/#primaryimage\"},\"image\":{\"@id\":\"https:\/\/cm-edgetun.pages.dev\/en-us\/power-platform\/blog\/2022\/09\/02\/extend-modern-commands-with-custom-pages-and-geospatial-mapping\/#primaryimage\"},\"thumbnailUrl\":\"https:\/\/cm-edgetun.pages.dev\/en-us\/power-platform\/blog\/wp-content\/uploads\/2022\/08\/image011.gif\",\"datePublished\":\"2022-09-02T13:00:00+00:00\",\"dateModified\":\"2025-06-11T14:48:29+00:00\",\"breadcrumb\":{\"@id\":\"https:\/\/cm-edgetun.pages.dev\/en-us\/power-platform\/blog\/2022\/09\/02\/extend-modern-commands-with-custom-pages-and-geospatial-mapping\/#breadcrumb\"},\"inLanguage\":\"en-US\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\/\/cm-edgetun.pages.dev\/en-us\/power-platform\/blog\/2022\/09\/02\/extend-modern-commands-with-custom-pages-and-geospatial-mapping\/\"]}]},{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https:\/\/cm-edgetun.pages.dev\/en-us\/power-platform\/blog\/2022\/09\/02\/extend-modern-commands-with-custom-pages-and-geospatial-mapping\/#primaryimage\",\"url\":\"https:\/\/cm-edgetun.pages.dev\/en-us\/power-platform\/blog\/wp-content\/uploads\/2022\/08\/image011.gif\",\"contentUrl\":\"https:\/\/cm-edgetun.pages.dev\/en-us\/power-platform\/blog\/wp-content\/uploads\/2022\/08\/image011.gif\"},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\/\/cm-edgetun.pages.dev\/en-us\/power-platform\/blog\/2022\/09\/02\/extend-modern-commands-with-custom-pages-and-geospatial-mapping\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Home\",\"item\":\"https:\/\/cm-edgetun.pages.dev\/en-us\/power-platform\/blog\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"Extend modern commands with custom pages and geospatial mapping\"}]},{\"@type\":\"WebSite\",\"@id\":\"https:\/\/cm-edgetun.pages.dev\/en-us\/power-platform\/blog\/#website\",\"url\":\"https:\/\/cm-edgetun.pages.dev\/en-us\/power-platform\/blog\/\",\"name\":\"Microsoft Power Platform Blog\",\"description\":\"Innovate with Business Apps\",\"publisher\":{\"@id\":\"https:\/\/cm-edgetun.pages.dev\/en-us\/power-platform\/blog\/#organization\"},\"potentialAction\":[{\"@type\":\"SearchAction\",\"target\":{\"@type\":\"EntryPoint\",\"urlTemplate\":\"https:\/\/cm-edgetun.pages.dev\/en-us\/power-platform\/blog\/?s={search_term_string}\"},\"query-input\":{\"@type\":\"PropertyValueSpecification\",\"valueRequired\":true,\"valueName\":\"search_term_string\"}}],\"inLanguage\":\"en-US\"},{\"@type\":\"Organization\",\"@id\":\"https:\/\/cm-edgetun.pages.dev\/en-us\/power-platform\/blog\/#organization\",\"name\":\"Microsoft Power Platform Blog\",\"url\":\"https:\/\/cm-edgetun.pages.dev\/en-us\/power-platform\/blog\/\",\"logo\":{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https:\/\/cm-edgetun.pages.dev\/en-us\/power-platform\/blog\/#\/schema\/logo\/image\/\",\"url\":\"https:\/\/cm-edgetun.pages.dev\/en-us\/power-platform\/blog\/wp-content\/uploads\/2020\/03\/Microsoft-Logo-e1685482038800.png\",\"contentUrl\":\"https:\/\/cm-edgetun.pages.dev\/en-us\/power-platform\/blog\/wp-content\/uploads\/2020\/03\/Microsoft-Logo-e1685482038800.png\",\"width\":194,\"height\":145,\"caption\":\"Microsoft Power Platform Blog\"},\"image\":{\"@id\":\"https:\/\/cm-edgetun.pages.dev\/en-us\/power-platform\/blog\/#\/schema\/logo\/image\/\"}},{\"@type\":\"Person\",\"@id\":\"https:\/\/cm-edgetun.pages.dev\/en-us\/power-platform\/blog\/#\/schema\/person\/d14719c369f317bcdb4848f6abffd4b9\",\"name\":\"Alfredo Cerritos\",\"image\":{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https:\/\/secure.gravatar.com\/avatar\/788389ffdeba9eb211de7aa987c888a6bdd5eeb10021402689aae8909061b578?s=96&d=mm&r=g264ca3eb39b6a9a6b7fb5fff056a3071\",\"url\":\"https:\/\/secure.gravatar.com\/avatar\/788389ffdeba9eb211de7aa987c888a6bdd5eeb10021402689aae8909061b578?s=96&d=mm&r=g\",\"contentUrl\":\"https:\/\/secure.gravatar.com\/avatar\/788389ffdeba9eb211de7aa987c888a6bdd5eeb10021402689aae8909061b578?s=96&d=mm&r=g\",\"caption\":\"Alfredo Cerritos\"},\"url\":\"https:\/\/cm-edgetun.pages.dev\/en-us\/power-platform\/blog\/author\/alcerri\/\"}]}<\/script>\n<!-- \/ Yoast SEO plugin. -->","yoast_head_json":{"title":"Extend modern commands with custom pages and geospatial mapping - Microsoft Power Platform Blog","robots":{"index":"index","follow":"follow","max-snippet":"max-snippet:-1","max-image-preview":"max-image-preview:large","max-video-preview":"max-video-preview:-1"},"canonical":"https:\/\/cm-edgetun.pages.dev\/en-us\/power-platform\/blog\/2022\/09\/02\/extend-modern-commands-with-custom-pages-and-geospatial-mapping\/","og_locale":"en_US","og_type":"article","og_title":"Extend modern commands with custom pages and geospatial mapping - Microsoft Power Platform Blog","og_description":"As a developer, learn how to extend Power Apps modern commanding by leveraging geospatial mapping with custom pages, and sending a notification about the map.","og_url":"https:\/\/cm-edgetun.pages.dev\/en-us\/power-platform\/blog\/power-apps\/extend-modern-commands-with-custom-pages-and-geospatial-mapping\/","og_site_name":"Microsoft Power Platform Blog","article_published_time":"2022-09-02T13:00:00+00:00","article_modified_time":"2025-06-11T14:48:29+00:00","og_image":[{"width":1024,"height":569,"url":"https:\/\/cm-edgetun.pages.dev\/en-us\/power-platform\/blog\/wp-content\/uploads\/2022\/08\/image011-1024x569.gif","type":"image\/gif"}],"author":"Alfredo Cerritos","twitter_card":"summary_large_image","twitter_misc":{"Written by":"Alfredo Cerritos","Est. reading time":"6 minutes"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"Article","@id":"https:\/\/cm-edgetun.pages.dev\/en-us\/power-platform\/blog\/2022\/09\/02\/extend-modern-commands-with-custom-pages-and-geospatial-mapping\/#article","isPartOf":{"@id":"https:\/\/cm-edgetun.pages.dev\/en-us\/power-platform\/blog\/2022\/09\/02\/extend-modern-commands-with-custom-pages-and-geospatial-mapping\/"},"author":[{"@id":"https:\/\/cm-edgetun.pages.dev\/en-us\/power-platform\/blog\/author\/alfredo-cerritos\/","@type":"Person","@name":"Alfredo Cerritos"}],"headline":"Extend modern commands with custom pages and geospatial mapping","datePublished":"2022-09-02T13:00:00+00:00","dateModified":"2025-06-11T14:48:29+00:00","mainEntityOfPage":{"@id":"https:\/\/cm-edgetun.pages.dev\/en-us\/power-platform\/blog\/2022\/09\/02\/extend-modern-commands-with-custom-pages-and-geospatial-mapping\/"},"wordCount":1048,"commentCount":0,"publisher":{"@id":"https:\/\/cm-edgetun.pages.dev\/en-us\/power-platform\/blog\/#organization"},"image":{"@id":"https:\/\/cm-edgetun.pages.dev\/en-us\/power-platform\/blog\/2022\/09\/02\/extend-modern-commands-with-custom-pages-and-geospatial-mapping\/#primaryimage"},"thumbnailUrl":"https:\/\/cm-edgetun.pages.dev\/en-us\/power-platform\/blog\/wp-content\/uploads\/2022\/08\/image011.gif","keywords":["Canvas Apps","Dataverse","Model-Driven Apps"],"inLanguage":"en-US","potentialAction":[{"@type":"CommentAction","name":"Comment","target":["https:\/\/cm-edgetun.pages.dev\/en-us\/power-platform\/blog\/2022\/09\/02\/extend-modern-commands-with-custom-pages-and-geospatial-mapping\/#respond"]}]},{"@type":"WebPage","@id":"https:\/\/cm-edgetun.pages.dev\/en-us\/power-platform\/blog\/2022\/09\/02\/extend-modern-commands-with-custom-pages-and-geospatial-mapping\/","url":"https:\/\/cm-edgetun.pages.dev\/en-us\/power-platform\/blog\/2022\/09\/02\/extend-modern-commands-with-custom-pages-and-geospatial-mapping\/","name":"Extend modern commands with custom pages and geospatial mapping - Microsoft Power Platform Blog","isPartOf":{"@id":"https:\/\/cm-edgetun.pages.dev\/en-us\/power-platform\/blog\/#website"},"primaryImageOfPage":{"@id":"https:\/\/cm-edgetun.pages.dev\/en-us\/power-platform\/blog\/2022\/09\/02\/extend-modern-commands-with-custom-pages-and-geospatial-mapping\/#primaryimage"},"image":{"@id":"https:\/\/cm-edgetun.pages.dev\/en-us\/power-platform\/blog\/2022\/09\/02\/extend-modern-commands-with-custom-pages-and-geospatial-mapping\/#primaryimage"},"thumbnailUrl":"https:\/\/cm-edgetun.pages.dev\/en-us\/power-platform\/blog\/wp-content\/uploads\/2022\/08\/image011.gif","datePublished":"2022-09-02T13:00:00+00:00","dateModified":"2025-06-11T14:48:29+00:00","breadcrumb":{"@id":"https:\/\/cm-edgetun.pages.dev\/en-us\/power-platform\/blog\/2022\/09\/02\/extend-modern-commands-with-custom-pages-and-geospatial-mapping\/#breadcrumb"},"inLanguage":"en-US","potentialAction":[{"@type":"ReadAction","target":["https:\/\/cm-edgetun.pages.dev\/en-us\/power-platform\/blog\/2022\/09\/02\/extend-modern-commands-with-custom-pages-and-geospatial-mapping\/"]}]},{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/cm-edgetun.pages.dev\/en-us\/power-platform\/blog\/2022\/09\/02\/extend-modern-commands-with-custom-pages-and-geospatial-mapping\/#primaryimage","url":"https:\/\/cm-edgetun.pages.dev\/en-us\/power-platform\/blog\/wp-content\/uploads\/2022\/08\/image011.gif","contentUrl":"https:\/\/cm-edgetun.pages.dev\/en-us\/power-platform\/blog\/wp-content\/uploads\/2022\/08\/image011.gif"},{"@type":"BreadcrumbList","@id":"https:\/\/cm-edgetun.pages.dev\/en-us\/power-platform\/blog\/2022\/09\/02\/extend-modern-commands-with-custom-pages-and-geospatial-mapping\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Home","item":"https:\/\/cm-edgetun.pages.dev\/en-us\/power-platform\/blog\/"},{"@type":"ListItem","position":2,"name":"Extend modern commands with custom pages and geospatial mapping"}]},{"@type":"WebSite","@id":"https:\/\/cm-edgetun.pages.dev\/en-us\/power-platform\/blog\/#website","url":"https:\/\/cm-edgetun.pages.dev\/en-us\/power-platform\/blog\/","name":"Microsoft Power Platform Blog","description":"Innovate with Business Apps","publisher":{"@id":"https:\/\/cm-edgetun.pages.dev\/en-us\/power-platform\/blog\/#organization"},"potentialAction":[{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https:\/\/cm-edgetun.pages.dev\/en-us\/power-platform\/blog\/?s={search_term_string}"},"query-input":{"@type":"PropertyValueSpecification","valueRequired":true,"valueName":"search_term_string"}}],"inLanguage":"en-US"},{"@type":"Organization","@id":"https:\/\/cm-edgetun.pages.dev\/en-us\/power-platform\/blog\/#organization","name":"Microsoft Power Platform Blog","url":"https:\/\/cm-edgetun.pages.dev\/en-us\/power-platform\/blog\/","logo":{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/cm-edgetun.pages.dev\/en-us\/power-platform\/blog\/#\/schema\/logo\/image\/","url":"https:\/\/cm-edgetun.pages.dev\/en-us\/power-platform\/blog\/wp-content\/uploads\/2020\/03\/Microsoft-Logo-e1685482038800.png","contentUrl":"https:\/\/cm-edgetun.pages.dev\/en-us\/power-platform\/blog\/wp-content\/uploads\/2020\/03\/Microsoft-Logo-e1685482038800.png","width":194,"height":145,"caption":"Microsoft Power Platform Blog"},"image":{"@id":"https:\/\/cm-edgetun.pages.dev\/en-us\/power-platform\/blog\/#\/schema\/logo\/image\/"}},{"@type":"Person","@id":"https:\/\/cm-edgetun.pages.dev\/en-us\/power-platform\/blog\/#\/schema\/person\/d14719c369f317bcdb4848f6abffd4b9","name":"Alfredo Cerritos","image":{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/secure.gravatar.com\/avatar\/788389ffdeba9eb211de7aa987c888a6bdd5eeb10021402689aae8909061b578?s=96&d=mm&r=g264ca3eb39b6a9a6b7fb5fff056a3071","url":"https:\/\/secure.gravatar.com\/avatar\/788389ffdeba9eb211de7aa987c888a6bdd5eeb10021402689aae8909061b578?s=96&d=mm&r=g","contentUrl":"https:\/\/secure.gravatar.com\/avatar\/788389ffdeba9eb211de7aa987c888a6bdd5eeb10021402689aae8909061b578?s=96&d=mm&r=g","caption":"Alfredo Cerritos"},"url":"https:\/\/cm-edgetun.pages.dev\/en-us\/power-platform\/blog\/author\/alcerri\/"}]}},"bloginabox_animated_featured_image":null,"bloginabox_display_generated_audio":false,"distributor_meta":false,"distributor_terms":false,"distributor_media":false,"distributor_original_site_name":"Microsoft Power Platform Blog","distributor_original_site_url":"https:\/\/cm-edgetun.pages.dev\/en-us\/power-platform\/blog","push-errors":false,"_links":{"self":[{"href":"https:\/\/cm-edgetun.pages.dev\/en-us\/power-platform\/blog\/wp-json\/wp\/v2\/posts\/20370","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/cm-edgetun.pages.dev\/en-us\/power-platform\/blog\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/cm-edgetun.pages.dev\/en-us\/power-platform\/blog\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/cm-edgetun.pages.dev\/en-us\/power-platform\/blog\/wp-json\/wp\/v2\/users\/235"}],"replies":[{"embeddable":true,"href":"https:\/\/cm-edgetun.pages.dev\/en-us\/power-platform\/blog\/wp-json\/wp\/v2\/comments?post=20370"}],"version-history":[{"count":1,"href":"https:\/\/cm-edgetun.pages.dev\/en-us\/power-platform\/blog\/wp-json\/wp\/v2\/posts\/20370\/revisions"}],"predecessor-version":[{"id":130074,"href":"https:\/\/cm-edgetun.pages.dev\/en-us\/power-platform\/blog\/wp-json\/wp\/v2\/posts\/20370\/revisions\/130074"}],"wp:attachment":[{"href":"https:\/\/cm-edgetun.pages.dev\/en-us\/power-platform\/blog\/wp-json\/wp\/v2\/media?parent=20370"}],"wp:term":[{"taxonomy":"audience","embeddable":true,"href":"https:\/\/cm-edgetun.pages.dev\/en-us\/power-platform\/blog\/wp-json\/wp\/v2\/audience?post=20370"},{"taxonomy":"content-type","embeddable":true,"href":"https:\/\/cm-edgetun.pages.dev\/en-us\/power-platform\/blog\/wp-json\/wp\/v2\/content-type?post=20370"},{"taxonomy":"job-role","embeddable":true,"href":"https:\/\/cm-edgetun.pages.dev\/en-us\/power-platform\/blog\/wp-json\/wp\/v2\/job-role?post=20370"},{"taxonomy":"product","embeddable":true,"href":"https:\/\/cm-edgetun.pages.dev\/en-us\/power-platform\/blog\/wp-json\/wp\/v2\/product?post=20370"},{"taxonomy":"property","embeddable":true,"href":"https:\/\/cm-edgetun.pages.dev\/en-us\/power-platform\/blog\/wp-json\/wp\/v2\/property?post=20370"},{"taxonomy":"topic","embeddable":true,"href":"https:\/\/cm-edgetun.pages.dev\/en-us\/power-platform\/blog\/wp-json\/wp\/v2\/topic?post=20370"},{"taxonomy":"author","embeddable":true,"href":"https:\/\/cm-edgetun.pages.dev\/en-us\/power-platform\/blog\/wp-json\/wp\/v2\/coauthors?post=20370"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}