Public Profile
  • AppSourceCop, removing object and the side-effect on the automatic object numbering in VSCode

    Before removing a page or a report, we mark the object as ObsoleteState = Pending in version N. In version N+1, we delete the object. But in version N+1, we also create new objects. For that, we use the intellisense in VSCode that gives us the next available object number in the app object range. The con comes the fact intellisense recycles the object number deleted, without looking at the object numbers in use in version N, beside the fact the package is in the alpackage folder for the AppSourceCop. The consequence is errors coming from AppSourceCop about the fact all actions/fields/public procedures has been changed within the same object id between version N and N+1. Could the object numbering be improved? It would require to consider objects declared in the previous version as still in use.
  • Propagate ObsoleteState to child controls

    Related to this discussion : https://github.com/microsoft/AL/issues/6545#issuecomment-803894400 I propose to change the current behaviour of the ObsoleteState or (as @qutreson suggested) gives the hability to opt-in to a new behaviour: when a control is marked as obsolete, then all child control should inherit this state. It would mean: - If I mark a page, at the object level, as ObsoleteState = Pending, then all fields, actions, procedures are automatically obsolete. - If a group/repeater is ObsoleteState = Pending, then all child controls becomes obsolete. If the child element has its own ObsoleteTag/ObsoleteReason, this one should overload the same property at the parent level.
  • Exclude Permission Sets

    In BC18 we have got a new object type named permissionset. This object type allows to build a permission by including other permissionsets (with property IncludePermissionSets) and add our own on top. Although, we frequently deploy customers by copying standard permissionsets (like D365 BASIC) where we remove some permissions (like those on G/L Entries and G/L Accounts). The immediate consequence is a important workload when major upgrades occur: new tables are created, customers cannot work until we add these tables on their custom permissionsets. This could be "easily" solved if we could exclude a permissionset from another. For instance, I could create a permissionset for G/L Entry and G/L Account tables: permissionset 50000 "Accounting PTE" { Permissions = tabledata "G/L Entry" = RIM, tabledata "G/L Account" = RIMD; } Then I could create my customized D365 BASIC permissionset: permissionset 50001 "My Basic PTE" { IncludePermissionSets = "D365 BASIC"; ExcludePermissionSets = "Accounting PTE"; } Users with permissionset My Basic PTE would access the same things as D365 BASIC expect the read permission on G/L Account and the read permission on G/L Entry would be removed. It would mean that permissionset are build this way: First add IncludePermissionSets, Then remove ExcludePermissionSets and finally add Permissions. This design would permit us to build custom permission sets that easily can be upgraded if Microsoft adds new objects.
  • Surface URL and EMail ExtendedDataTypes in the UI

    Developers have a property in AL named ExtendedDataType (https://docs.microsoft.com/en-us/dynamics365/business-central/dev-itpro/developer/properties/devenv-extendeddatatype-property). In the modern client, this property does not really surface in the UI for URL and EMail, especially when the field is editable. My suggestion if this one: if there is no lookup or drilldown specified for the field, then display a default button (similar to the one that was displayed in the retired Windows Client). => If the ExtendedDatatype is URL, run a Hyperlink command. => If the ExtendedDatatype is EMail, then, now we have a very good Email module, open an empty e-mail. If on the top of that we could get global an event to catch the click with the current record, fieldno and field value to implement our own behavior, that would be awesome.
  • Display the tenant name in the Dynamics 365 Business Central admin center

    As a VAR we manage many customers and we might have multiple tabs in the web browser with different Dynamics 365 Business Central admin center opened. The tenant ID is displayed in the address bar and in environment details but the tenant name (aka Primary Domain Name) would help to distinguish each customer. Could it be displayed somewhere? (in the of the page ?)</div> </li> <li class="bottom-break"> <h3><a href="/insider/public-profile/ideas/dynamics-financials/ID0084376">Add default order address on vendors, like the default ship-to address on customers</a></h3> <p class="metadata"> <abbr class="timeago">Thu, 19 Aug 2021 08:02:46 GMT</abbr> – <a href="/insider/public-profile/ideas/dynamics-financials">Dynamics 365 Business Central</a> – <span class="label label-default "> Needs Votes </span> </p> <div>On the Customer card, there is a field called "Ship-to Code" related to customer "Ship-to Address" table. There is such table on Vendors ("Order Address") but there is not a similar field on the Vendor Card to specify the default order address code. Could you add such field to get consistent capabilities between customers and vendors?</div> </li> <li class="bottom-break"> <h3><a href="/insider/public-profile/ideas/dynamics-financials/ID0085091">Cancel a purchase invoice with Item Charges</a></h3> <p class="metadata"> <abbr class="timeago">Mon, 23 Aug 2021 10:26:57 GMT</abbr> – <a href="/insider/public-profile/ideas/dynamics-financials">Dynamics 365 Business Central</a> – <span class="label label-default "> Needs Votes </span> </p> <div>If you post a purchase invoice with item charges with mistakes, you can create a credit memo. However, the credit memo is hard to complete because the item charge assignments are not copied from the purchase invoice. Could you implement this feature that would be really helpful when correcting purchase invoices? I guess a similar feature would also be helpful on sales credit memos.</div> </li> <li class="bottom-break"> <h3><a href="/insider/public-profile/ideas/dynamics-financials/ID0089017">Subscribe to an event directly in *extension objects</a></h3> <p class="metadata"> <abbr class="timeago">Thu, 26 Aug 2021 07:58:12 GMT</abbr> – <a href="/insider/public-profile/ideas/dynamics-financials">Dynamics 365 Business Central</a> – <span class="label label-default "> Needs Votes </span> </p> <div>On tableextension or pageextension objects, we are able to write to platform events like OnAfterAction, OnOpenPage, OnAfterInsert, and so on. But for IntegrationEvent or BusinessEvent, we have to create codeunits. If I take as an example the page "Sales Order Subform", I would like being able to do this: pageextension 50000 "Sales Order Subform PTE" extends "Sales Order Subform" { //OnBeforeSetDefaultType is an IntegrationEvent declared in Sales Order Subform page trigger OnBeforeSetDefaultType(var SalesLine: Record "Sales Line"; var xSalesLine: Record "Sales Line"; var IsHandled: Boolean) begin //Do something.. end; }</div> </li> <li class="bottom-break"> <h3><a href="/insider/public-profile/ideas/dynamics-financials/ID0118950">AS0029 prevents us from removing pageextensions</a></h3> <p class="metadata"> <abbr class="timeago">Fri, 08 Oct 2021 10:21:08 GMT</abbr> – <a href="/insider/public-profile/ideas/dynamics-financials">Dynamics 365 Business Central</a> – <span class="label label-default "> Needs Votes </span> </p> <div>If you have an empty pageextension like this: pageextension 50000 "MyPageExt" extends "Customer Card" { } You cannot remove the object from your app because of rule AS0029. If think we cannot take dependency on pageextension themselves so removing a pageextension should not be a breaking change (unless there is control inside but that way we have the hability to obsolete them and remove them afterwards). Could you improve AS0029 to ignore such cases?</div> </li> <li class="bottom-break"> <h3><a href="/insider/public-profile/ideas/dynamics-financials/ID0118951">AS0089 is raised for pagecustomization</a></h3> <p class="metadata"> <abbr class="timeago">Fri, 08 Oct 2021 10:21:53 GMT</abbr> – <a href="/insider/public-profile/ideas/dynamics-financials">Dynamics 365 Business Central</a> – <span class="label label-default "> Needs Votes </span> </p> <div>1. Describe the bug When you rename a pagecustomization object, the error AS0089 is raised and I do not see any path to do it. 2. To Reproduce Steps to reproduce the behavior: In V1 of your app create a pagecustomization named "My Cust. Card" In V2 of your app, rename the pagecustomization "My Customer Card" 3. Expected behavior I do not see immediate problems regarding changing the name of a pagecustomization, so my first thought would be this rule should not apply to this type of object. However if it can be a problem, then, we should be able to mark a pagecustomization as obsolete. 4. Actual behavior The error AS0089 is raised, preventing us to change the name of this object. 5. Versions: AL Language: 8.1.525271 Visual Studio Code: 1.60.2 Business Central: 19 List of Visual Studio Code extensions that you have installed: AL Language</div> </li> </ul> <ul class="pagination"> <li> <a href="/public/10695048-46dd-e811-a974-000d3a1be90a/ideas?page=2" aria-label ="Previous page">‹</a> </li> <li> <a href="/public/10695048-46dd-e811-a974-000d3a1be90a/ideas?page=1" aria-label="Page 1">1</a> </li> <li> <a href="/public/10695048-46dd-e811-a974-000d3a1be90a/ideas?page=2" aria-label="Page 2">2</a> </li> <li class="active"> <a aria-label="Page 3">3</a> </li> <li> <a href="/public/10695048-46dd-e811-a974-000d3a1be90a/ideas?page=4" aria-label="Page 4">4</a> </li> <li> <a href="/public/10695048-46dd-e811-a974-000d3a1be90a/ideas?page=5" aria-label="Page 5">5</a> </li> <li> <a href="/public/10695048-46dd-e811-a974-000d3a1be90a/ideas?page=6" aria-label="Page 6">6</a> </li> <li> <a href="/public/10695048-46dd-e811-a974-000d3a1be90a/ideas?page=7" aria-label="Page 7">7</a> </li> <li> <a href="/public/10695048-46dd-e811-a974-000d3a1be90a/ideas?page=4" aria-label ="Next page">›</a> </li> </ul> </div> </div> </div> </div> </div> <script onerror="javascript: var target = event.target; var script = document.createElement('script'); script.crossOrigin = target.crossOrigin; script.src = '/dist/pcf-loader.bundle-f4a0e619b8.js'; script.type = 'text/javascript'; target.insertAdjacentElement('afterend',script);" src="https://content.powerapps.com/resource/powerappsportal/dist/pcf-loader.bundle-f4a0e619b8.js" type="text/javascript"></script> <script onerror="javascript: var target = event.target; var script = document.createElement('script'); script.crossOrigin = target.crossOrigin; script.src = '/dist/pvaembedded.bundle-75d831b825.js'; script.type = 'text/javascript'; target.insertAdjacentElement('afterend',script);" src="https://content.powerapps.com/resource/powerappsportal/dist/pvaembedded.bundle-75d831b825.js" type="text/javascript"></script> <!-- Power virtual agents web template V2.0--> <div class="pva-floating-style" style="position: absolute; z-index: 1000;"> <div name="webChat"></div> <script nonce="SogAUgn4nGm2oUB14QgjHYNruZcyQCXnQmgDIrs1Cyk=" type="text/javascript" id="pvaChatInlineScript"> var botConfig = {'skillConfigViewName': 'Experience Dynamics Portal bot Answers'}; // Learn more about advanced configuration: https://go.microsoft.com/fwlink/?linkid=2147420 const webChatHeaderStyleOptions = botConfig?.webChatHeaderStyleOptions; const webChatCanvasStyleOptions = botConfig?.webChatCanvasStyleOptions; const webChatWidgetStyleOptions = botConfig?.webChatWidgetStyleOptions; var botMaximizedByDefault = botConfig?.botMaximizedByDefault; var botTitle = botConfig?.headerText; var region = "prod"; if(!botTitle || botTitle == undefined || botTitle == "" || botTitle.length == 0) { botTitle = "Implementation Copilot"; } if(!botMaximizedByDefault || botMaximizedByDefault == undefined) { botMaximizedByDefault = false; } let chatWidth = "320px"; let chatHeight = "500px"; if (screen.width > 992) { chatWidth = "25%"; chatHeight = "80%"; } window.PvaEmbeddedWebChat.renderWebChat( { "container": document.getElementsByName('webChat')[0], "botSchemaName": "adx_795fc350-5977-4c4f-ab15-7a335be1caff", "environmentId": "f55e79bd-d8cb-4fbb-9be2-2cefd8cb3b83", "width": chatWidth, "height": chatHeight, "client": "msportals", // client and version is needed for the ease of future breaking changes "version": "v1", "headerText": botTitle, "webChatCanvasStyleOptions": webChatCanvasStyleOptions, "webChatHeaderStyleOptions": webChatHeaderStyleOptions, "webChatWidgetStyleOptions": webChatWidgetStyleOptions, "accessibilityLanguage": "en-US", "botMaximizedByDefault": botMaximizedByDefault, "region": region }); </script> </div> <div class="mscom-footer"> <div id="footerArea" class="uhf" data-m='{"cN":"footerArea","cT":"Area_coreuiArea","id":"a2Body","sN":2,"aN":"Body"}'> <div id="footerRegion" data-region-key="footerregion" data-m='{"cN":"footerRegion","cT":"Region_coreui-region","id":"r1a2","sN":1,"aN":"a2"}' > <div id="footerUniversalFooter" data-m='{"cN":"footerUniversalFooter","cT":"Module_coreui-universalfooter","id":"m1r1a2","sN":1,"aN":"r1a2"}' data-module-id="Category|footerRegion|coreui-region|footerUniversalFooter|coreui-universalfooter"> <style> .c-list.f-bare a:link, .c-list.f-bare a:focus, .c-list.f-bare a:hover, .c-list.f-bare a:active, .c-list.f-bare a:visited { text-decoration: underline; } </style> <footer id="uhf-footer" class="c-uhff context-uhf" data-uhf-mscc-rq="false" data-footer-footprint="/Dynamics365/Dynamics365Footer, fromService: True" data-m='{"cN":"Uhf footer_cont","cT":"Container","id":"c1m1r1a2","sN":1,"aN":"m1r1a2"}'> <nav class="c-uhff-nav" aria-label="Footer Resource links" data-m='{"cN":"Footer nav_cont","cT":"Container","id":"c1c1m1r1a2","sN":1,"aN":"c1m1r1a2"}'> <div class="c-uhff-nav-row"> <div class="c-uhff-nav-group" data-m='{"cN":"footerNavColumn1_cont","cT":"Container","id":"c1c1c1m1r1a2","sN":1,"aN":"c1c1m1r1a2"}'> <div class="c-heading-4" role="heading" aria-level="2">What's new</div> <ul class="c-list f-bare"> <li> <a aria-label="Surface Laptop Studio 2 What's new" class="c-uhff-link" href="https://www.microsoft.com/en-us/d/Surface-Laptop-Studio-2/8rqr54krf1dz" data-m='{"cN":"Footer_WhatsNew_SurfaceLaptopStudio2_nav","id":"n1c1c1c1m1r1a2","sN":1,"aN":"c1c1c1m1r1a2"}'>Surface Laptop Studio 2</a> </li> <li> <a aria-label="Surface Laptop Go 3 What's new" class="c-uhff-link" href="https://www.microsoft.com/en-us/d/Surface-Laptop-Go-3/8p0wwgj6c6l2" data-m='{"cN":"Footer_WhatsNew_SurfaceLaptopGo3_nav","id":"n2c1c1c1m1r1a2","sN":2,"aN":"c1c1c1m1r1a2"}'>Surface Laptop Go 3</a> </li> <li> <a aria-label="Surface Pro 9 What's new" class="c-uhff-link" href="https://www.microsoft.com/en-us/d/surface-pro-9/93VKD8NP4FVK" data-m='{"cN":"Footer_WhatsNew_NewSurfacePro8_nav","id":"n3c1c1c1m1r1a2","sN":3,"aN":"c1c1c1m1r1a2"}'>Surface Pro 9</a> </li> <li> <a aria-label="Surface Laptop 5 What's new" class="c-uhff-link" href="https://www.microsoft.com/en-us/d/surface-laptop-5/8XN49V61S1BN" data-m='{"cN":"Footer_WhatsNew_SurfaceLaptop2_nav","id":"n4c1c1c1m1r1a2","sN":4,"aN":"c1c1c1m1r1a2"}'>Surface Laptop 5</a> </li> <li> <a aria-label="Microsoft Copilot What's new" class="c-uhff-link" href="https://www.microsoft.com/en-us/microsoft-copilot" data-m='{"cN":"Footer_WhatsNew_CopilotMicrosoft_nav","id":"n5c1c1c1m1r1a2","sN":5,"aN":"c1c1c1m1r1a2"}'>Microsoft Copilot</a> </li> <li> <a aria-label="Copilot in Windows What's new" class="c-uhff-link" href="https://www.microsoft.com/en-us/windows/copilot-ai-features" data-m='{"cN":"Whatsnew_CopilotinWindows_nav","id":"n6c1c1c1m1r1a2","sN":6,"aN":"c1c1c1m1r1a2"}'>Copilot in Windows</a> </li> <li> <a aria-label="Explore Microsoft products What's new" class="c-uhff-link" href="https://www.microsoft.com/en-us/microsoft-products-and-apps" data-m='{"cN":"Footer_WhatsNew_ExploreMicrosoftProducts_nav","id":"n7c1c1c1m1r1a2","sN":7,"aN":"c1c1c1m1r1a2"}'>Explore Microsoft products</a> </li> <li> <a aria-label="Windows 11 apps What's new" class="c-uhff-link" href="https://www.microsoft.com/windows/windows-11-apps" data-m='{"cN":"Footer_WhatsNew_Windows_11_apps_nav","id":"n8c1c1c1m1r1a2","sN":8,"aN":"c1c1c1m1r1a2"}'>Windows 11 apps</a> </li> </ul> </div> <div class="c-uhff-nav-group" data-m='{"cN":"footerNavColumn2_cont","cT":"Container","id":"c2c1c1m1r1a2","sN":2,"aN":"c1c1m1r1a2"}'> <div class="c-heading-4" role="heading" aria-level="2">Microsoft Store</div> <ul class="c-list f-bare"> <li> <a aria-label="Account profile Microsoft Store" class="c-uhff-link" href="https://account.microsoft.com/" data-m='{"cN":"Footer_StoreandSupport_AccountProfile_nav","id":"n1c2c1c1m1r1a2","sN":1,"aN":"c2c1c1m1r1a2"}'>Account profile</a> </li> <li> <a aria-label="Download Center Microsoft Store" class="c-uhff-link" href="https://www.microsoft.com/en-us/download" data-m='{"cN":"Footer_StoreandSupport_DownloadCenter_nav","id":"n2c2c1c1m1r1a2","sN":2,"aN":"c2c1c1m1r1a2"}'>Download Center</a> </li> <li> <a aria-label="Microsoft Store support Microsoft Store" class="c-uhff-link" href="https://go.microsoft.com/fwlink/?linkid=2139749" data-m='{"cN":"Footer_StoreandSupport_SalesAndSupport_nav","id":"n3c2c1c1m1r1a2","sN":3,"aN":"c2c1c1m1r1a2"}'>Microsoft Store support</a> </li> <li> <a aria-label="Returns Microsoft Store" class="c-uhff-link" href="https://www.microsoft.com/en-us/store/b/returns" data-m='{"cN":"Footer_StoreandSupport_Returns_nav","id":"n4c2c1c1m1r1a2","sN":4,"aN":"c2c1c1m1r1a2"}'>Returns</a> </li> <li> <a aria-label="Order tracking Microsoft Store" class="c-uhff-link" href="https://account.microsoft.com/orders" data-m='{"cN":"Footer_StoreandSupport_OrderTracking_nav","id":"n5c2c1c1m1r1a2","sN":5,"aN":"c2c1c1m1r1a2"}'>Order tracking</a> </li> <li> <a aria-label="Certified Refurbished Microsoft Store" class="c-uhff-link" href="https://www.microsoft.com/en-us/store/b/certified-refurbished-products" data-m='{"cN":"Footer_StoreandSupport_StoreLocations_nav","id":"n6c2c1c1m1r1a2","sN":6,"aN":"c2c1c1m1r1a2"}'>Certified Refurbished</a> </li> <li> <a aria-label="Microsoft Store Promise Microsoft Store" class="c-uhff-link" href="https://www.microsoft.com/en-us/store/b/why-microsoft-store?icid=footer_why-msft-store_7102020" data-m='{"cN":"Footer_StoreandSupport_MicrosoftPromise_nav","id":"n7c2c1c1m1r1a2","sN":7,"aN":"c2c1c1m1r1a2"}'>Microsoft Store Promise</a> </li> <li> <a aria-label="Flexible Payments Microsoft Store" class="c-uhff-link" href="https://www.microsoft.com/en-us/store/b/payment-financing-options?icid=footer_financing_vcc" data-m='{"cN":"Footer_StoreandSupport_Financing_nav","id":"n8c2c1c1m1r1a2","sN":8,"aN":"c2c1c1m1r1a2"}'>Flexible Payments</a> </li> </ul> </div> <div class="c-uhff-nav-group" data-m='{"cN":"footerNavColumn3_cont","cT":"Container","id":"c3c1c1m1r1a2","sN":3,"aN":"c1c1m1r1a2"}'> <div class="c-heading-4" role="heading" aria-level="2">Education</div> <ul class="c-list f-bare"> <li> <a aria-label="Microsoft in education Education" class="c-uhff-link" href="https://www.microsoft.com/en-us/education" data-m='{"cN":"Footer_Education_MicrosoftInEducation_nav","id":"n1c3c1c1m1r1a2","sN":1,"aN":"c3c1c1m1r1a2"}'>Microsoft in education</a> </li> <li> <a aria-label="Devices for education Education" class="c-uhff-link" href="https://www.microsoft.com/en-us/education/devices/overview" data-m='{"cN":"Footer_Education_DevicesforEducation_nav","id":"n2c3c1c1m1r1a2","sN":2,"aN":"c3c1c1m1r1a2"}'>Devices for education</a> </li> <li> <a aria-label="Microsoft Teams for Education Education" class="c-uhff-link" href="https://www.microsoft.com/en-us/education/products/teams" data-m='{"cN":"Footer_Education_MicrosoftTeamsforEducation_nav","id":"n3c3c1c1m1r1a2","sN":3,"aN":"c3c1c1m1r1a2"}'>Microsoft Teams for Education</a> </li> <li> <a aria-label="Microsoft 365 Education Education" class="c-uhff-link" href="https://www.microsoft.com/en-us/education/buy-license/microsoft365" data-m='{"cN":"Footer_Education_Microsoft365Education_nav","id":"n4c3c1c1m1r1a2","sN":4,"aN":"c3c1c1m1r1a2"}'>Microsoft 365 Education</a> </li> <li> <a aria-label="How to buy for your school Education" class="c-uhff-link" href="https://www.microsoft.com/education/how-to-buy" data-m='{"cN":"Footer_Howtobuyforyourschool_nav","id":"n5c3c1c1m1r1a2","sN":5,"aN":"c3c1c1m1r1a2"}'>How to buy for your school</a> </li> <li> <a aria-label="Educator training and development Education" class="c-uhff-link" href="https://education.microsoft.com/" data-m='{"cN":"Footer_Education_EducatorTrainingDevelopment_nav","id":"n6c3c1c1m1r1a2","sN":6,"aN":"c3c1c1m1r1a2"}'>Educator training and development</a> </li> <li> <a aria-label="Deals for students and parents Education" class="c-uhff-link" href="https://www.microsoft.com/en-us/store/b/education" data-m='{"cN":"Footer_Education_DealsForStudentsandParents_nav","id":"n7c3c1c1m1r1a2","sN":7,"aN":"c3c1c1m1r1a2"}'>Deals for students and parents</a> </li> <li> <a aria-label="Azure for students Education" class="c-uhff-link" href="https://azure.microsoft.com/en-us/free/students/" data-m='{"cN":"Footer_Education_Azureforstudents_nav","id":"n8c3c1c1m1r1a2","sN":8,"aN":"c3c1c1m1r1a2"}'>Azure for students</a> </li> </ul> </div> </div> <div class="c-uhff-nav-row"> <div class="c-uhff-nav-group" data-m='{"cN":"footerNavColumn4_cont","cT":"Container","id":"c4c1c1m1r1a2","sN":4,"aN":"c1c1m1r1a2"}'> <div class="c-heading-4" role="heading" aria-level="2">Business</div> <ul class="c-list f-bare"> <li> <a aria-label="Microsoft Cloud Business" class="c-uhff-link" href="https://www.microsoft.com/en-us/microsoft-cloud" data-m='{"cN":"Footer_Business_Microsoft_Cloud_nav","id":"n1c4c1c1m1r1a2","sN":1,"aN":"c4c1c1m1r1a2"}'>Microsoft Cloud</a> </li> <li> <a aria-label="Microsoft Security Business" class="c-uhff-link" href="https://www.microsoft.com/en-us/security" data-m='{"cN":"Footer_Business_Microsoft Security_nav","id":"n2c4c1c1m1r1a2","sN":2,"aN":"c4c1c1m1r1a2"}'>Microsoft Security</a> </li> <li> <a aria-label="Dynamics 365 Business" class="c-uhff-link" href="https://www.microsoft.com/en-us/dynamics-365" data-m='{"cN":"Footer_Business_MicrosoftDynamics365_nav","id":"n3c4c1c1m1r1a2","sN":3,"aN":"c4c1c1m1r1a2"}'>Dynamics 365</a> </li> <li> <a aria-label="Microsoft 365 Business" class="c-uhff-link" href="https://www.microsoft.com/en-us/microsoft-365/business" data-m='{"cN":"Footer_Business_M365_nav","id":"n4c4c1c1m1r1a2","sN":4,"aN":"c4c1c1m1r1a2"}'>Microsoft 365</a> </li> <li> <a aria-label="Microsoft Power Platform Business" class="c-uhff-link" href="https://www.microsoft.com/en-us/power-platform" data-m='{"cN":"Footer_DeveloperAndIT_Power Platform_nav","id":"n5c4c1c1m1r1a2","sN":5,"aN":"c4c1c1m1r1a2"}'>Microsoft Power Platform</a> </li> <li> <a aria-label="Microsoft Teams Business" class="c-uhff-link" href="https://www.microsoft.com/en-us/microsoft-teams/group-chat-software" data-m='{"cN":"Footer_Business_Microsoft365_nav","id":"n6c4c1c1m1r1a2","sN":6,"aN":"c4c1c1m1r1a2"}'>Microsoft Teams</a> </li> <li> <a aria-label="Copilot for Microsoft 365 Business" class="c-uhff-link" href="https://www.microsoft.com/en-us/microsoft-365/business/copilot-for-microsoft-365" data-m='{"cN":"Footer_CopilotMicrosoft365_nav","id":"n7c4c1c1m1r1a2","sN":7,"aN":"c4c1c1m1r1a2"}'>Copilot for Microsoft 365</a> </li> <li> <a aria-label="Small Business Business" class="c-uhff-link" href="https://www.microsoft.com/en-us/store/b/business?icid=CNavBusinessStore" data-m='{"cN":"Footer_Business-SmallBusiness_nav","id":"n8c4c1c1m1r1a2","sN":8,"aN":"c4c1c1m1r1a2"}'>Small Business</a> </li> </ul> </div> <div class="c-uhff-nav-group" data-m='{"cN":"footerNavColumn5_cont","cT":"Container","id":"c5c1c1m1r1a2","sN":5,"aN":"c1c1m1r1a2"}'> <div class="c-heading-4" role="heading" aria-level="2">Developer & IT</div> <ul class="c-list f-bare"> <li> <a aria-label="Azure Developer & IT" class="c-uhff-link" href="https://azure.microsoft.com/en-us/" data-m='{"cN":"Footer_DeveloperAndIT_MicrosoftAzure_nav","id":"n1c5c1c1m1r1a2","sN":1,"aN":"c5c1c1m1r1a2"}'>Azure</a> </li> <li> <a aria-label="Developer Center Developer & IT" class="c-uhff-link" href="https://developer.microsoft.com/en-us/" data-m='{"cN":"Footer_DeveloperAndIT_DeveloperCenter_nav","id":"n2c5c1c1m1r1a2","sN":2,"aN":"c5c1c1m1r1a2"}'>Developer Center</a> </li> <li> <a aria-label="Documentation Developer & IT" class="c-uhff-link" href="https://learn.microsoft.com/docs/" data-m='{"cN":"Footer_DeveloperAndIT_Documentation_nav","id":"n3c5c1c1m1r1a2","sN":3,"aN":"c5c1c1m1r1a2"}'>Documentation</a> </li> <li> <a aria-label="Microsoft Learn Developer & IT" class="c-uhff-link" href="https://learn.microsoft.com/" data-m='{"cN":"Footer_DeveloperAndIT_MicrosoftLearn_nav","id":"n4c5c1c1m1r1a2","sN":4,"aN":"c5c1c1m1r1a2"}'>Microsoft Learn</a> </li> <li> <a aria-label="Microsoft Tech Community Developer & IT" class="c-uhff-link" href="https://techcommunity.microsoft.com/" data-m='{"cN":"Footer_DeveloperAndIT_MicrosoftTechCommunity_nav","id":"n5c5c1c1m1r1a2","sN":5,"aN":"c5c1c1m1r1a2"}'>Microsoft Tech Community</a> </li> <li> <a aria-label="Azure Marketplace Developer & IT" class="c-uhff-link" href="https://azuremarketplace.microsoft.com/en-us/" data-m='{"cN":"Footer_DeveloperAndIT_AzureMarketplace_nav","id":"n6c5c1c1m1r1a2","sN":6,"aN":"c5c1c1m1r1a2"}'>Azure Marketplace</a> </li> <li> <a aria-label="AppSource Developer & IT" class="c-uhff-link" href="https://appsource.microsoft.com/en-us/" data-m='{"cN":"Footer_DeveloperAndIT_AppSource_nav","id":"n7c5c1c1m1r1a2","sN":7,"aN":"c5c1c1m1r1a2"}'>AppSource</a> </li> <li> <a aria-label="Visual Studio Developer & IT" class="c-uhff-link" href="https://visualstudio.microsoft.com/" data-m='{"cN":"Footer_DeveloperAndIT_MicrosoftVisualStudio_nav","id":"n8c5c1c1m1r1a2","sN":8,"aN":"c5c1c1m1r1a2"}'>Visual Studio</a> </li> </ul> </div> <div class="c-uhff-nav-group" data-m='{"cN":"footerNavColumn6_cont","cT":"Container","id":"c6c1c1m1r1a2","sN":6,"aN":"c1c1m1r1a2"}'> <div class="c-heading-4" role="heading" aria-level="2">Company</div> <ul class="c-list f-bare"> <li> <a aria-label="Careers Company" class="c-uhff-link" href="https://careers.microsoft.com/" data-m='{"cN":"Footer_Company_Careers_nav","id":"n1c6c1c1m1r1a2","sN":1,"aN":"c6c1c1m1r1a2"}'>Careers</a> </li> <li> <a aria-label="About Microsoft Company" class="c-uhff-link" href="https://www.microsoft.com/en-us/about" data-m='{"cN":"Footer_Company_AboutMicrosoft_nav","id":"n2c6c1c1m1r1a2","sN":2,"aN":"c6c1c1m1r1a2"}'>About Microsoft</a> </li> <li> <a aria-label="Company news Company" class="c-uhff-link" href="https://news.microsoft.com/" data-m='{"cN":"Footer_Company_CompanyNews_nav","id":"n3c6c1c1m1r1a2","sN":3,"aN":"c6c1c1m1r1a2"}'>Company news</a> </li> <li> <a aria-label="Privacy at Microsoft Company" class="c-uhff-link" href="https://privacy.microsoft.com/en-us" data-m='{"cN":"Footer_Company_PrivacyAtMicrosoft_nav","id":"n4c6c1c1m1r1a2","sN":4,"aN":"c6c1c1m1r1a2"}'>Privacy at Microsoft</a> </li> <li> <a aria-label="Investors Company" class="c-uhff-link" href="https://www.microsoft.com/investor/default.aspx" data-m='{"cN":"Footer_Company_Investors_nav","id":"n5c6c1c1m1r1a2","sN":5,"aN":"c6c1c1m1r1a2"}'>Investors</a> </li> <li> <a aria-label="Diversity and inclusion Company" class="c-uhff-link" href="https://www.microsoft.com/en-us/diversity/" data-m='{"cN":"Footer_Company_DiversityAndInclusion_nav","id":"n6c6c1c1m1r1a2","sN":6,"aN":"c6c1c1m1r1a2"}'>Diversity and inclusion</a> </li> <li> <a aria-label="Accessibility Company" class="c-uhff-link" href="https://www.microsoft.com/en-us/accessibility" data-m='{"cN":"Footer_Company_Accessibility_nav","id":"n7c6c1c1m1r1a2","sN":7,"aN":"c6c1c1m1r1a2"}'>Accessibility</a> </li> <li> <a aria-label="Sustainability Company" class="c-uhff-link" href="https://www.microsoft.com/en-us/sustainability/" data-m='{"cN":"Footer_Company_Sustainability_nav","id":"n8c6c1c1m1r1a2","sN":8,"aN":"c6c1c1m1r1a2"}'>Sustainability</a> </li> </ul> </div> </div> </nav> <div class="c-uhff-base"> <a id="locale-picker-link" aria-label="Content Language Selector. Currently set to English (United States)" class="c-uhff-link c-uhff-lang-selector c-glyph glyph-world" href="https://dynamics.microsoft.com/en-us/locale/" data-m='{"cN":"locale_picker(US)_nav","id":"n7c1c1m1r1a2","sN":7,"aN":"c1c1m1r1a2"}'>English (United States)</a> <a data-m='{"id":"n8c1c1m1r1a2","sN":8,"aN":"c1c1m1r1a2"}' href="https://aka.ms/yourcaliforniaprivacychoices" class='c-uhff-link c-uhff-ccpa'> <svg role="img" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 30 14" xml:space="preserve" height="16" width="43"> <title>Your Privacy Choices Opt-Out Icon Your Privacy Choices Consumer Health Privacy