CINXE.COM
Adaptive expressions in Bot Framework SDK - Bot Service | Microsoft Learn
<!DOCTYPE html><html class="hasSidebar hasPageActions hasBreadcrumb conceptual has-default-focus theme-light" lang="en-us" dir="ltr" data-authenticated="false" data-auth-status-determined="false" data-target="docs" x-ms-format-detection="none"> <head> <meta charset="utf-8" /> <meta name="viewport" content="width=device-width, initial-scale=1.0" /> <meta property="og:title" content="Adaptive expressions in Bot Framework SDK - Bot Service" /> <meta property="og:type" content="website" /> <meta property="og:url" content="https://learn.microsoft.com/en-us/azure/bot-service/bot-builder-concept-adaptive-expressions?view=azure-bot-service-4.0" /><meta property="og:description" content="Describes how adaptive expressions work within the Bot Framework SDK." /><meta property="og:image" content="https://learn.microsoft.com/en-us/media/open-graph-image.png" /> <meta property="og:image:alt" content="Microsoft Learn" /> <meta name="twitter:card" content="summary_large_image" /> <meta name="twitter:site" content="@MicrosoftLearn" /> <meta name="color-scheme" content="light dark"><meta name="archive_url" content="https://docs.microsoft.com/previous-versions/azure/bot-service/index-bf-sdk" /> <meta name="author" content="JonathanFingold" /> <meta name="breadcrumb_path" content="/azure/bot-service/breadcrumb/TOC.json" /> <meta name="default_moniker" content="azure-bot-service-4.0" /> <meta name="depot_name" content="Azure.bot-framework" /> <meta name="description" content="Describes how adaptive expressions work within the Bot Framework SDK." /> <meta name="document_id" content="98fbb9f4-706c-e90d-bad8-bf14a80f838c" /> <meta name="document_version_independent_id" content="06f4923f-e7aa-abf1-0b08-32b8513e69eb" /> <meta name="exclude_monikers" content="azure-bot-service-3.0" /> <meta name="feedback_help_link_type" content="" /> <meta name="feedback_help_link_url" content="" /> <meta name="feedback_product_url" content="" /> <meta name="feedback_system" content="None" /> <meta name="git_commit_id" content="74b6632248c0a95e4a63a652a8b6f4bf3a1f0e7f" /> <meta name="gitcommit" content="https://github.com/MicrosoftDocs/bot-docs-pr/blob/74b6632248c0a95e4a63a652a8b6f4bf3a1f0e7f/articles/v4sdk/bot-builder-concept-adaptive-expressions.md" /> <meta name="keywords" content="adaptive expressions" /> <meta name="locale" content="en-us" /> <meta name="manager" content="shellyha" /> <meta name="monikerRange" content="azure-bot-service-4.0" /> <meta name="monikers" content="azure-bot-service-4.0" /> <meta name="ms.author" content="iawilt" /> <meta name="ms.custom" content="evergreen" /> <meta name="ms.date" content="09/28/2021" /> <meta name="ms.reviewer" content="micchow" /> <meta name="ms.service" content="azure-ai-bot-service" /> <meta name="ms.topic" content="conceptual" /> <meta name="original_content_git_url" content="https://github.com/MicrosoftDocs/bot-docs-pr/blob/live/articles/v4sdk/bot-builder-concept-adaptive-expressions.md" /> <meta name="page_type" content="conceptual" /> <meta name="pdf_url_template" content="https://learn.microsoft.com/pdfstore/en-us/Azure.bot-framework/{branchName}{pdfName}" /> <meta name="schema" content="Conceptual" /> <meta name="site_name" content="Docs" /> <meta name="toc_rel" content="toc.json" /> <meta name="uhfHeaderId" content="azure" /> <meta name="updated_at" content="2024-08-02 01:02 PM" /> <meta name="word_count" content="938" /> <meta name="persistent_id" content="9b7588fc-65c0-9df8-f8a9-22c34121bf59" /> <meta name="cmProducts" content="https://authoring-docs-microsoft.poolparty.biz/devrel/8b896464-3b7d-4e1f-84b0-9bb45aeb5f64" data-source="generated" /> <meta name="cmProducts" content="https://authoring-docs-microsoft.poolparty.biz/devrel/540ac133-a371-4dbb-8f94-28d6cc77a70b" data-source="generated" /> <meta name="cmProducts" content="https://microsoft-devrel.poolparty.biz/DevRelOfferingOntology/c6f99e62-1cf6-4b71-af9b-649b05f80cce" data-source="generated" /> <meta name="spProducts" content="https://authoring-docs-microsoft.poolparty.biz/devrel/b1d2d671-9549-46e8-918c-24349120dbf5" data-source="generated" /> <meta name="spProducts" content="https://authoring-docs-microsoft.poolparty.biz/devrel/60bfc045-f127-4841-9d00-ea35495a5800" data-source="generated" /> <meta name="spProducts" content="https://microsoft-devrel.poolparty.biz/DevRelOfferingOntology/3f56b378-07a9-4fa1-afe8-9889fdc77628" data-source="generated" /> <meta name="scope" content="Azure, BotService" /><meta name="github_feedback_content_git_url" content="https://github.com/MicrosoftDocs/bot-docs-pr/blob/live/articles/v4sdk/bot-builder-concept-adaptive-expressions.md" /><link href="https://learn.microsoft.com/en-us/azure/bot-service/bot-builder-concept-adaptive-expressions?view=azure-bot-service-4.0" rel="canonical"><title>Adaptive expressions in Bot Framework SDK - Bot Service | Microsoft Learn</title><link rel="stylesheet" href="/static/assets/0.4.028726178/styles/site-ltr.css"> <script id="msdocs-script"> var msDocs = {environment: { supportLevel: 'production', accessLevel: 'online', reviewFeatures: false, systemContent: true, azurePortalHostname: 'portal.azure.com', legacyHosting: false, siteName: 'learn', },data: { timeOrigin: Date.now(), contentLocale: 'en-us', contentDir: 'ltr', userLocale: 'en-us', userDir: 'ltr', pageTemplate: 'Conceptual', brand: 'azure', context: {}, hasBinaryRating: true, feedbackHelpLinkType:'', feedbackHelpLinkUrl:'', standardFeedback: false, showFeedbackReport: false, enableTutorialFeedback: false, feedbackSystem: 'None', feedbackGitHubRepo: '', feedbackProductUrl: '',extendBreadcrumb: false,isEditDisplayable: false, hideViewSource: false, hasPageActions: true, hasPrintButton: true, hasBookmark: true, hasShare: true, isPermissioned: false, isPrivateUnauthorized: false,hasRecommendations: true,contributors: [{ name: "JonathanFingold", url: "https://github.com/JonathanFingold" },{ name: "cyrilanderson", url: "https://github.com/cyrilanderson" },{ name: "MarcFromTerawe", url: "https://github.com/MarcFromTerawe" },{ name: "emgrol", url: "https://github.com/emgrol" },{ name: "v-maudel", url: "https://github.com/v-maudel" }],}, functions:{} }; </script><script src="https://wcpstatic.microsoft.com/mscc/lib/v2/wcp-consent.js"></script> <script src="https://js.monitor.azure.com/scripts/c/ms.jsll-4.min.js"></script><script src="/static/assets/0.4.028726178/global/deprecation.js"></script><script src="/static/assets/0.4.028726178/scripts/en-us/index-docs.js"></script></head> <body lang="en-us" dir="ltr"> <div class="header-holder has-default-focus"> <a href="#main" style="z-index: 1070" class="outline-color-text visually-hidden-until-focused position-fixed inner-focus focus-visible top-0 left-0 right-0 padding-xs text-align-center has-body-background" tabindex="1">Skip to main content</a><div hidden id="cookie-consent-holder" data-test-id="cookie-consent-container"></div> <div id="unsupported-browser" style=" background-color: white; color: black; padding: 16px; border-bottom: 1px solid grey;" hidden > <div style="max-width: 800px; margin: 0 auto;"> <p style="font-size: 24px">This browser is no longer supported.</p> <p style="font-size: 16px; margin-top: 16px;">Upgrade to Microsoft Edge to take advantage of the latest features, security updates, and technical support.</p> <div style="margin-top: 12px;"> <a href="https://go.microsoft.com/fwlink/p/?LinkID=2092881 " style=" background-color: #0078d4; border: 1px solid #0078d4; color: white; padding: 6px 12px; border-radius: 2px; display: inline-block; ">Download Microsoft Edge</a> <a href="https://learn.microsoft.com/en-us/lifecycle/faq/internet-explorer-microsoft-edge" style=" background-color: white; padding: 6px 12px; border: 1px solid #505050; color: #171717; border-radius: 2px; display: inline-block; ">More info about Internet Explorer and Microsoft Edge</a> </div> </div> </div> <!-- liquid-tag banners global --> <!-- site header --> <header id="ms--site-header" data-test-id="site-header-wrapper" role="banner" itemscope="itemscope" itemtype="http://schema.org/Organization"> <div id="ms--mobile-nav" class="site-header display-none-tablet padding-inline-none gap-none" data-bi-name="mobile-header" data-test-id="mobile-header"></div> <div id="ms--primary-nav" class="site-header display-none display-flex-tablet" data-bi-name="L1-header" data-test-id="primary-header"></div> <div id="ms--secondary-nav" class="site-header display-none display-flex-tablet" data-bi-name="L2-header" data-test-id="secondary-header"></div> </header><div id="content-header" class="content-header uhf-container has-padding has-default-focus border-bottom-none" data-bi-name="content-header"> <div class="content-header-controls margin-xxs margin-inline-sm-tablet"> <button type="button" class="contents-button button button-sm margin-right-xxs" data-bi-name="contents-expand" aria-haspopup="true" data-contents-button> <span class="icon"><span class="docon docon-menu" aria-hidden="true"></span></span> <span class="contents-expand-title">Table of contents</span> </button> <button type="button" class="ap-collapse-behavior ap-expanded button button-sm" data-bi-name="ap-collapse" aria-controls="action-panel"> <span class="icon"><span class="docon docon-exit-mode" aria-hidden="true"></span></span> <span>Exit focus mode</span> </button> </div> </div><div id="disclaimer-holder" class="has-overflow-hidden has-default-focus"> <!-- liquid-tag banners sectional --> </div> </div> <div class="mainContainer uhf-container has-default-focus" data-bi-name="body"> <div class="columns has-large-gaps is-gapless-mobile "><div id="left-container" class="left-container is-hidden-mobile column is-one-third-tablet is-one-quarter-desktop"> <nav id="affixed-left-container" class="margin-top-sm-tablet position-sticky display-flex flex-direction-column" aria-label="Primary"></nav> </div><!-- .primary-holder --> <section class="primary-holder column is-two-thirds-tablet is-three-quarters-desktop"> <!--div.columns --> <div class="columns is-gapless-mobile has-large-gaps "><div id="main-column" class="column is-full is-8-desktop"> <main id="main" class="" role="main" data-bi-name="content" lang="en-us" dir="ltr"><!-- article-header --> <div id="article-header" class="background-color-body margin-top-sm-tablet margin-bottom-xs display-none-print"> <div class="display-flex align-items-center "><details id="article-header-breadcrumbs-overflow-popover" class="popover" data-for="article-header-breadcrumbs"> <summary class="button button-clear button-primary button-sm inner-focus" aria-label="All breadcrumbs"> <span class="icon"> <span class="docon docon-more"></span> </span> </summary> <div id="article-header-breadcrumbs-overflow" class="popover-content padding-none"> </div> </details> <bread-crumbs id="article-header-breadcrumbs" data-test-id="article-header-breadcrumbs" class="overflow-hidden flex-grow-1 margin-right-sm margin-right-md-tablet margin-right-lg-desktop margin-left-negative-xxs padding-left-xxs"></bread-crumbs><div id="article-header-page-actions" class="opacity-none margin-left-auto display-flex flex-wrap-no-wrap align-items-stretch"><a id="lang-link-tablet" class="button button-primary button-clear button-sm display-none display-inline-flex-tablet" title="Read in English" data-bi-name="language-toggle" data-read-in-link hidden> <span class="icon margin-none" aria-hidden="true" data-read-in-link-icon> <span class="docon docon-locale-globe"></span> </span> <span class="is-visually-hidden" data-read-in-link-text>Read in English</span> </a><button type="button" class="collection button button-clear button-sm button-primary display-none display-inline-flex-tablet" data-list-type="collection" data-bi-name="collection" title="Add to collection"> <span class="icon margin-none" aria-hidden="true"> <span class="docon docon-circle-addition"></span> </span> <span class="collection-status is-visually-hidden">Save</span> </button><a data-contenteditbtn class="button button-clear button-sm text-decoration-none button-primary display-none display-inline-flex-tablet" aria-label="Edit" title="Edit This Document" data-bi-name="edit" hidden href="https://github.com/MicrosoftDocs/bot-docs-pr/blob/live/articles/v4sdk/bot-builder-concept-adaptive-expressions.md"> <span class="icon margin-none" aria-hidden="true"> <span class="docon docon-edit-outline"></span> </span> </a> <details class="popover popover-right" id="article-header-page-actions-overflow"> <summary class="justify-content-flex-start button button-clear button-sm button-primary" aria-label="More actions" title="More actions"> <span class="icon" aria-hidden="true"> <span class="docon docon-more-vertical"></span> </span> </summary> <div class="popover-content padding-xs"><button data-page-action-item="overflow-mobile" type="button" class="justify-content-flex-start button-block button-sm has-inner-focus button button-clear display-none-tablet" data-bi-name="contents-expand" data-contents-button data-popover-close> <span class="icon"> <span class="docon docon-editor-list-bullet" aria-hidden="true"></span> </span><span class="contents-expand-title">Table of contents</span></button><a id="lang-link-overflow" class="justify-content-flex-start button-sm has-inner-focus button button-clear button-block display-none-tablet" title="Read in English" data-bi-name="language-toggle" data-page-action-item="overflow-mobile" data-check-hidden="true" data-read-in-link hidden > <span class="icon" aria-hidden="true" data-read-in-link-icon> <span class="docon docon-locale-globe"></span> </span> <span data-read-in-link-text>Read in English</span> </a><button type="button" class="collection justify-content-flex-start button button-clear button-sm has-inner-focus button-block display-none-tablet" data-list-type="collection" data-bi-name="collection" title="Save" data-page-action-item="overflow-mobile" data-check-hidden="true" data-popover-close> <span class="icon" aria-hidden="true"> <span class="docon docon-circle-addition"></span> </span> <span class="collection-status">Save</span> </button> <button type="button" class="collection justify-content-flex-start button button-clear button-sm has-inner-focus button-block display-none-tablet" data-list-type="plan" data-bi-name="plan" title="Add to Plan" data-page-action-item="overflow-mobile" data-check-hidden="true" data-popover-close hidden> <span class="icon" aria-hidden="true"> <span class="docon docon-circle-addition"></span> </span> <span class="plan-status">Add to Plan</span> </button><a data-contenteditbtn class="button button-clear button-block button-sm has-inner-focus justify-content-flex-start text-decoration-none display-none-tablet" aria-label="Edit" title="Edit This Document" data-bi-name="edit" hidden href="https://github.com/MicrosoftDocs/bot-docs-pr/blob/live/articles/v4sdk/bot-builder-concept-adaptive-expressions.md"> <span class="icon" aria-hidden="true"> <span class="docon docon-edit-outline"></span> </span> <span>Edit</span> </a><div aria-hidden="true" class="margin-none" data-page-action-item="overflow-all"></div> <hr class="display-none-tablet margin-bottom-xxs margin-top-xxs" /> <h4 class="font-size-sm padding-left-xxs">Share via</h4> <a class="button button-clear button-sm button-block has-inner-focus text-decoration-none justify-content-flex-start share-facebook" data-bi-name="facebook" data-page-action-item="overflow-all"> <span class="icon" aria-hidden="true"> <span class="docon docon-facebook-share font-size-md color-primary"></span> </span> <span class="margin-left-xxs">Facebook</span> </a> <a class="button button-clear button-sm has-inner-focus button-block text-decoration-none justify-content-flex-start share-twitter" data-bi-name="twitter" data-page-action-item="overflow-all"> <span class="icon" aria-hidden="true"> <span class="docon docon-xlogo-share font-size-xxs"></span> </span> <span class="margin-left-xxs">x.com</span> </a> <a class="button button-clear button-sm has-inner-focus button-block text-decoration-none justify-content-flex-start share-linkedin" data-bi-name="linkedin" data-page-action-item="overflow-all"> <span class="icon" aria-hidden="true"> <span class="docon docon-linked-in-logo font-size-sm color-primary"></span> </span> <span class="margin-left-xxs">LinkedIn</span> </a> <a class="button button-clear button-sm button-block has-inner-focus text-decoration-none justify-content-flex-start margin-bottom-xxs share-email" data-bi-name="email" data-page-action-item="overflow-all"> <span class="icon" aria-hidden="true"> <span class="docon docon-mail-message font-size-sm color-primary"></span> </span> <span class="margin-left-xxs">Email</span> </a><hr /> <button class="button button-block button-clear button-sm justify-content-flex-start has-inner-focus margin-top-xxs" title="Print" type="button" aria-label="Print" data-bi-name="print" data-page-action-item="overflow-all" data-popover-close data-print-page data-check-hidden="true"> <span class="icon" aria-hidden="true"> <span class="docon docon-print font-size-sm color-primary"></span> </span> <span class="margin-left-xxs">Print</span> </button> </div> </details> </div></div> </div> <!-- end article-header --><div> <button type="button" class="border contents-button button button-clear button-sm is-hidden-tablet has-inner-focus" data-bi-name="contents-expand" data-contents-button hidden> <span class="icon"> <span class="docon docon-editor-list-bullet" aria-hidden="true"></span> </span><span class="contents-expand-title">Table of contents</span></button> </div><!-- end mobile-contents button --> <div class="content "><h1 id="adaptive-expressions">Adaptive expressions</h1><div class="display-flex justify-content-space-between align-items-center flex-wrap-wrap page-metadata-container"> <div class="margin-right-xxs"> <ul class="metadata page-metadata" data-bi-name="page info" lang="en-us" dir="ltr"><li>Article</li><li class="visibility-hidden-visual-diff"><time class="is-invisible" data-article-date aria-label="Article review date" datetime="2021-12-15T19:01:00Z" data-article-date-source="calculated">12/15/2021</time> </li><li class="contributors-holder display-none-print"> <button aria-label="View all contributors" class="contributors-button link-button" data-bi-name="contributors" title="View all contributors">5 contributors</button> </li></ul> </div> <div id="user-feedback" class="margin-block-xxs display-none-print" data-hide-on-archived> <button id="user-feedback-button" data-test-id="conceptual-feedback-button" class="button button-sm button-clear button-primary" type="button" data-bi-name="user-feedback-button" data-user-feedback-button > <span class="icon" aria-hidden="true"> <span class="docon docon-like"></span> </span> <span>Feedback</span> </button> </div></div><nav id="center-doc-outline" class="doc-outline is-hidden-desktop display-none-print margin-bottom-sm" data-bi-name="intopic toc" aria-label="In this article"> <h2 id="ms--in-this-article" class="title is-6 margin-block-xs">In this article</h2> </nav><!-- <content> --><p><strong>APPLIES TO:</strong> SDK v4</p> <p>Bots use adaptive expressions to evaluate the outcome of a condition based on runtime information available in memory to the dialog or the <a href="bot-builder-concept-language-generation?view=azure-bot-service-4.0" data-linktype="relative-path">Language Generation</a> system. These evaluations determine how your bot reacts to user input and other factors that impact bot functionality.</p> <p>Adaptive expressions address this core need by providing an adaptive expression language that can be used with the Bot Framework SDK and other conversational AI components, like <a href="https://github.com/microsoft/BotFramework-Composer" data-linktype="external">Bot Framework Composer</a>, <a href="bot-builder-concept-language-generation?view=azure-bot-service-4.0" data-linktype="relative-path">Language Generation</a>, <a href="bot-builder-adaptive-dialog-introduction?view=azure-bot-service-4.0" data-linktype="relative-path">Adaptive dialogs</a>, and <a href="/en-us/adaptive-cards/templating" data-linktype="absolute-path">Adaptive Cards templating</a>.</p> <p>An adaptive expression can contain one or more explicit values, <a href="adaptive-expressions/adaptive-expressions-prebuilt-functions?view=azure-bot-service-4.0" data-linktype="relative-path">prebuilt functions</a>, or custom functions. Consumers of adaptive expressions also have the capability to inject additional supported functions. For example, all language generation templates are available as functions as well as additional functions that are only available within that component's use of adaptive expressions.</p> <h2 id="operators">Operators</h2> <p>Adaptive expressions support the following operator types and expression syntax:</p> <ul> <li>arithmetic</li> <li>comparison</li> <li>logical</li> <li>other operators and expressions syntax</li> </ul> <div class="tabGroup" id="tabgroup_1"> <ul role="tablist"> <li role="presentation"> <a href="#tabpanel_1_arithmetic" role="tab" aria-controls="tabpanel_1_arithmetic" data-tab="arithmetic" tabindex="0" aria-selected="true" data-linktype="self-bookmark">Arithmetic</a> </li> <li role="presentation"> <a href="#tabpanel_1_comparison" role="tab" aria-controls="tabpanel_1_comparison" data-tab="comparison" tabindex="-1" data-linktype="self-bookmark">Comparison</a> </li> <li role="presentation"> <a href="#tabpanel_1_logical" role="tab" aria-controls="tabpanel_1_logical" data-tab="logical" tabindex="-1" data-linktype="self-bookmark">Logical</a> </li> <li role="presentation"> <a href="#tabpanel_1_other" role="tab" aria-controls="tabpanel_1_other" data-tab="other" tabindex="-1" data-linktype="self-bookmark">Other</a> </li> </ul> <section id="tabpanel_1_arithmetic" role="tabpanel" data-tab="arithmetic"> <table> <thead> <tr> <th>Operator</th> <th>Functionality</th> <th>Prebuilt function equivalent</th> </tr> </thead> <tbody> <tr> <td>+</td> <td>Addition. Example: A + B</td> <td><a href="adaptive-expressions/adaptive-expressions-prebuilt-functions?view=azure-bot-service-4.0#add" data-linktype="relative-path">add</a></td> </tr> <tr> <td>-</td> <td>Subtraction. Example: A - B</td> <td><a href="adaptive-expressions/adaptive-expressions-prebuilt-functions?view=azure-bot-service-4.0#sub" data-linktype="relative-path">sub</a></td> </tr> <tr> <td>unary +</td> <td>Positive value. Example: +1, +A</td> <td>N/A</td> </tr> <tr> <td>unary -</td> <td>Negative value. Example: -2, -B</td> <td>N/A</td> </tr> <tr> <td>*</td> <td>Multiplication. Example: A * B</td> <td><a href="adaptive-expressions/adaptive-expressions-prebuilt-functions?view=azure-bot-service-4.0#mul" data-linktype="relative-path">mul</a></td> </tr> <tr> <td>/</td> <td>Division. Example: A / B</td> <td><a href="adaptive-expressions/adaptive-expressions-prebuilt-functions?view=azure-bot-service-4.0#div" data-linktype="relative-path">div</a></td> </tr> <tr> <td>^</td> <td>Exponentiation. Example: A ^ B</td> <td><a href="adaptive-expressions/adaptive-expressions-prebuilt-functions?view=azure-bot-service-4.0#exp" data-linktype="relative-path">exp</a></td> </tr> <tr> <td>%</td> <td>Modulus. Example: A % B</td> <td><a href="adaptive-expressions/adaptive-expressions-prebuilt-functions?view=azure-bot-service-4.0#mod" data-linktype="relative-path">mod</a></td> </tr> </tbody> </table> </section> <section id="tabpanel_1_comparison" role="tabpanel" data-tab="comparison" aria-hidden="true" hidden="hidden"> <table> <thead> <tr> <th>Operator</th> <th>Functionality</th> <th>Prebuilt function equivalent</th> </tr> </thead> <tbody> <tr> <td>==</td> <td>Equals. Example: A == B</td> <td><a href="adaptive-expressions/adaptive-expressions-prebuilt-functions?view=azure-bot-service-4.0#equals" data-linktype="relative-path">equals</a></td> </tr> <tr> <td>!=</td> <td>Not equals. Example: A != B</td> <td><a href="adaptive-expressions/adaptive-expressions-prebuilt-functions?view=azure-bot-service-4.0#not" data-linktype="relative-path">not</a>(<a href="adaptive-expressions/adaptive-expressions-prebuilt-functions?view=azure-bot-service-4.0#equals" data-linktype="relative-path">equals</a>())</td> </tr> <tr> <td>></td> <td>Greater than. Example: A > B</td> <td><a href="adaptive-expressions/adaptive-expressions-prebuilt-functions?view=azure-bot-service-4.0#greater" data-linktype="relative-path">greater</a></td> </tr> <tr> <td><</td> <td>Less than. Example: A < B</td> <td><a href="adaptive-expressions/adaptive-expressions-prebuilt-functions?view=azure-bot-service-4.0#less" data-linktype="relative-path">less</a></td> </tr> <tr> <td>>=</td> <td>Greater than or equal. Example: A >= B</td> <td><a href="adaptive-expressions/adaptive-expressions-prebuilt-functions?view=azure-bot-service-4.0#greaterOrEquals" data-linktype="relative-path">greaterOrEquals</a></td> </tr> <tr> <td><=</td> <td>Less than or equal. Example: A <= B</td> <td><a href="adaptive-expressions/adaptive-expressions-prebuilt-functions?view=azure-bot-service-4.0#lessOrEquals" data-linktype="relative-path">lessOrEquals</a></td> </tr> </tbody> </table> </section> <section id="tabpanel_1_logical" role="tabpanel" data-tab="logical" aria-hidden="true" hidden="hidden"> <table> <thead> <tr> <th>Operator</th> <th>Functionality</th> <th>Prebuilt function equivalent</th> </tr> </thead> <tbody> <tr> <td>&&</td> <td>And. Example: exp1 && exp2</td> <td><a href="adaptive-expressions/adaptive-expressions-prebuilt-functions?view=azure-bot-service-4.0#and" data-linktype="relative-path">and</a></td> </tr> <tr> <td>||</td> <td>Or. Example: exp1 || exp2</td> <td><a href="adaptive-expressions/adaptive-expressions-prebuilt-functions?view=azure-bot-service-4.0#or" data-linktype="relative-path">or</a></td> </tr> <tr> <td>!</td> <td>Not. Example: !exp1</td> <td><a href="adaptive-expressions/adaptive-expressions-prebuilt-functions?view=azure-bot-service-4.0#not" data-linktype="relative-path">not</a></td> </tr> </tbody> </table> </section> <section id="tabpanel_1_other" role="tabpanel" data-tab="other" aria-hidden="true" hidden="hidden"> <table> <thead> <tr> <th>Operator</th> <th>Functionality</th> <th>Prebuilt function equivalent</th> </tr> </thead> <tbody> <tr> <td>&, +</td> <td>Concatenation operators. Operands will always be cast to string. Examples: A & B, 'foo' + ' bar' => 'foo bar', 'foo' + 3 => 'foo3', 'foo' + (3 + 3) => 'foo6'</td> <td>N/A</td> </tr> <tr> <td>'</td> <td>Used to wrap a string literal. Example: 'myValue'</td> <td>N/A</td> </tr> <tr> <td>"</td> <td>Used to wrap a string literal. Example: "myValue"</td> <td>N/A</td> </tr> <tr> <td>[]</td> <td>Used to refer to an item in a list by its index. Example: A[0]</td> <td>N/A</td> </tr> <tr> <td>${}</td> <td>Used to denote an expression. Example: ${A == B}.</td> <td>N/A</td> </tr> <tr> <td>${}</td> <td>Used to denote a variable in template expansion. Example: ${myVariable}</td> <td>N/A</td> </tr> <tr> <td>()</td> <td>Enforces precedence order and groups sub expressions into larger expressions. Example: (A+B)*C</td> <td>N/A</td> </tr> <tr> <td>.</td> <td>Property selector. Example: myObject.Property1</td> <td>N/A</td> </tr> <tr> <td>\</td> <td>Escape character for templates, expressions.</td> <td>N/A</td> </tr> </tbody> </table> </section> </div> <h2 id="variables">Variables</h2> <p>Variables are always referenced by their name in the format <code>${myVariable}</code>. They can be referenced either by the property selector operator in the form of <code>myParent.myVariable</code>, using the item index selection operator like in <code>myParent.myList[0]</code>, or by the <a href="adaptive-expressions/adaptive-expressions-prebuilt-functions?view=azure-bot-service-4.0#getProperty" data-linktype="relative-path">getProperty()</a> function.</p> <p>There are two special variables. <strong>[]</strong> represents an empty list, and <strong>{}</strong> represents a empty object.</p> <h2 id="explicit-values">Explicit values</h2> <p>Explicit values can be enclosed in either single quotes 'myExplicitValue' or double quotes "myExplicitValue".</p> <h2 id="functions">Functions</h2> <p>An adaptive expression has one or more functions. For more information about functions supported by adaptive expressions, see the <a href="adaptive-expressions/adaptive-expressions-prebuilt-functions?view=azure-bot-service-4.0" data-linktype="relative-path">prebuilt functions</a> reference article.</p> <h2 id="bot-framework-composer">Bot Framework Composer</h2> <p>Bot Framework Composer is an open-source visual authoring canvas for developers and multidisciplinary teams to build bots. Composer uses adaptive expressions to create, calculate, and modify values. Adaptive expressions can be used in language generation template definitions and as properties in the authoring canvas. As seen in the example below, properties in memory can also be used in an adaptive expression.</p> <p>The expression <code>(dialog.orderTotal + dialog.orderTax) > 50</code> adds the values of the properties <code>dialog.orderTotal</code> and <code>dialog.orderTax</code>, and evaluates to <code>True</code> if the sum is greater than 50 or <code>False</code> if the sum is 50 or less.</p> <p>Read <a href="/en-us/composer/concept-memory" data-linktype="absolute-path">Conversation flow and memory</a> for more information about how expressions are used in memory.</p> <h2 id="language-generation">Language generation</h2> <p>Adaptive expressions are used by language generation (LG) systems to evaluate conditions described in LG templates. In the example below, the <a href="adaptive-expressions/adaptive-expressions-prebuilt-functions?view=azure-bot-service-4.0#join" data-linktype="relative-path">join</a> prebuilt function is used to list all values in the <code>recentTasks</code> collection.</p> <pre><code class="lang-lg"># RecentTasks - IF: ${count(recentTasks) == 1} - Your most recent task is ${recentTasks[0]}. You can let me know if you want to add or complete a task. - ELSEIF: ${count(recentTasks) == 2} - Your most recent tasks are ${join(recentTasks, ', ', ' and ')}. You can let me know if you want to add or complete a task. - ELSEIF: ${count(recentTasks) > 2} - Your most recent ${count(recentTasks)} tasks are ${join(recentTasks, ', ', ' and ')}. You can let me know if you want to add or complete a task. - ELSE: - You don't have any tasks. </code></pre> <p>Read the <a href="file-format/bot-builder-lg-file-format?view=azure-bot-service-4.0#using-prebuilt-functions-in-variations" data-linktype="relative-path">using prebuilt function in variations</a> section of the <a href="file-format/bot-builder-lg-file-format?view=azure-bot-service-4.0" data-linktype="relative-path">.lg file format</a> article for more information.</p> <h2 id="adaptive-cards-templating">Adaptive Cards templating</h2> <p><a href="/en-us/adaptive-cards/templating/" data-linktype="absolute-path">Adaptive Cards templating</a> can be used by developers of bots and other technologies to separate data from the layout in an Adaptive Card. Developers can provide <a href="/en-us/adaptive-cards/templating/language#option-a-inline-data" data-linktype="absolute-path">data inline</a> with the <code>AdaptiveCard</code> payload, or the more common approach of <a href="/en-us/adaptive-cards/templating/language#option-b-separating-the-template-from-the-data" data-linktype="absolute-path">separating the data from the template</a>.</p> <p>For example, say you have the following data:</p> <pre><code class="lang-json">{ "id": "1291525457129548", "status": 4, "author": "Matt Hidinger", "message": "{\"type\":\"Deployment\",\"buildId\":\"9542982\",\"releaseId\":\"129\",\"buildNumber\":\"20180504.3\",\"releaseName\":\"Release-104\",\"repoProvider\":\"GitHub\"}", "start_time": "2018-05-04T18:05:33.3087147Z", "end_time": "2018-05-04T18:05:33.3087147Z" } </code></pre> <p>The <code>message</code> property is a JSON-serialized string. To access the values within the string, the <a href="adaptive-expressions/adaptive-expressions-prebuilt-functions?view=azure-bot-service-4.0#json" data-linktype="relative-path">json</a> prebuilt function can be called:</p> <pre><code class="lang-json">{ "type": "TextBlock", "text": "${json(message).releaseName}" } </code></pre> <p>And will result to the following object:</p> <pre><code class="lang-json">{ "type": "TextBlock", "text": "Release-104" } </code></pre> <p>For more information and examples see the <a href="/en-us/adaptive-cards/templating/" data-linktype="absolute-path">adaptive cards templating documentation</a>.</p> <h2 id="additional-resources">Additional resources</h2> <ul> <li><a href="https://www.nuget.org/packages/AdaptiveExpressions" data-linktype="external">NuGet AdaptiveExpressions</a> package for C#</li> <li><a href="https://www.npmjs.com/package/adaptive-expressions" data-linktype="external">npm adaptive-expressions</a> package for JavaScript</li> <li><a href="adaptive-expressions/adaptive-expressions-prebuilt-functions?view=azure-bot-service-4.0" data-linktype="relative-path">Prebuilt functions</a> supported by the adaptive expressions library</li> <li><a href="/en-us/dotnet/api/adaptiveexpressions" data-linktype="absolute-path">C# API reference</a></li> <li><a href="/en-us/javascript/api/adaptive-expressions" data-linktype="absolute-path">JavaScript API reference</a></li> </ul> </div><div id="ms--inline-notifications" class="margin-block-xs" data-bi-name="inline-notification"></div><div id="assertive-live-region" role="alert" aria-live="assertive" class="visually-hidden" aria-relevant="additions" aria-atomic="true"></div> <div id="polite-live-region" role="status" aria-live="polite" class="visually-hidden" aria-relevant="additions" aria-atomic="true"></div> <!-- </content> --> </main><!-- recommendations section --><!-- end recommendations section --> <!-- feedback section --><!-- end feedback section --> <!-- feedback report section --><!-- end feedback report section --><aside id="ms--additional-resources-mobile" aria-label="Additional resources" class="display-none-desktop display-none-print" > <hr class="hr" hidden /> <h2 id="ms--additional-resources-mobile-heading" class="title is-3" hidden>Additional resources</h2> <section id="right-rail-recommendations-mobile" data-bi-name="recommendations" hidden></section> <section id="right-rail-training-mobile" data-bi-name="learning-resources-card" hidden></section> <section id="right-rail-events-mobile" data-bi-name="events-card" hidden></section> <section id="right-rail-qna-mobile" data-bi-name="qna-link-card" hidden></section> </aside><div class="border-top is-visible-interactive has-default-focus margin-top-sm "><footer id="footer-interactive" data-bi-name="footer" class="footer-layout"><div class="display-flex gap-xs flex-wrap-wrap is-full-height padding-right-lg-desktop"><a data-mscc-ic="false" class="locale-selector-link button button-sm button-clear flex-shrink-0" href="#" data-bi-name="select-locale"> <span class="icon" aria-hidden="true"> <span class="docon docon-world"></span> </span> <span class="local-selector-link-text"></span></a><div class="ccpa-privacy-link" data-ccpa-privacy-link hidden> <a href="https://aka.ms/yourcaliforniaprivacychoices" class="button button-sm button-clear flex-shrink-0" data-mscc-ic="false" data-bi-name="your-privacy-choices" > <svg role="img" aria-label="California Consumer Privacy Act (CCPA) Opt-Out Icon" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 30 14" xml:space="preserve" height="16" width="43" focusable="false" > <title>California Consumer Privacy Act (CCPA) Opt-Out Icon</title> <path d="M7.4 12.8h6.8l3.1-11.6H7.4C4.2 1.2 1.6 3.8 1.6 7s2.6 5.8 5.8 5.8z" style="fill-rule:evenodd;clip-rule:evenodd;fill:#fff"></path> <path d="M22.6 0H7.4c-3.9 0-7 3.1-7 7s3.1 7 7 7h15.2c3.9 0 7-3.1 7-7s-3.2-7-7-7zm-21 7c0-3.2 2.6-5.8 5.8-5.8h9.9l-3.1 11.6H7.4c-3.2 0-5.8-2.6-5.8-5.8z" style="fill-rule:evenodd;clip-rule:evenodd;fill:#06f"></path> <path d="M24.6 4c.2.2.2.6 0 .8L22.5 7l2.2 2.2c.2.2.2.6 0 .8-.2.2-.6.2-.8 0l-2.2-2.2-2.2 2.2c-.2.2-.6.2-.8 0-.2-.2-.2-.6 0-.8L20.8 7l-2.2-2.2c-.2-.2-.2-.6 0-.8.2-.2.6-.2.8 0l2.2 2.2L23.8 4c.2-.2.6-.2.8 0z" style="fill:#fff"></path> <path d="M12.7 4.1c.2.2.3.6.1.8L8.6 9.8c-.1.1-.2.2-.3.2-.2.1-.5.1-.7-.1L5.4 7.7c-.2-.2-.2-.6 0-.8.2-.2.6-.2.8 0L8 8.6l3.8-4.5c.2-.2.6-.2.9 0z" style="fill:#06f"></path> </svg> <span>Your Privacy Choices</span> </a> </div> <div class="flex-shrink-0"> <div class="dropdown has-caret-up"> <button class="dropdown-trigger button button-clear button-sm has-inner-focus theme-dropdown-trigger" aria-controls="theme-menu-interactive" aria-expanded="false" title="Theme" data-bi-name="theme"> <span class="icon"> <span class="docon docon-sun" aria-hidden="true"></span> </span> <span>Theme</span> <span class="icon expanded-indicator" aria-hidden="true"> <span class="docon docon-chevron-down-light"></span> </span> </button> <div class="dropdown-menu" id="theme-menu-interactive" role="menu"> <ul class="theme-selector padding-xxs" role="none"> <li class="theme display-block" role="menuitem"> <button class="button button-clear button-sm theme-control button-block justify-content-flex-start" data-theme-to="light"> <span class="theme-light margin-right-xxs"> <span class="theme-selector-icon border display-inline-block has-body-background" aria-hidden="true"> <svg class="svg" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 22 14"> <rect width="22" height="14" class="has-fill-body-background" /> <rect x="5" y="5" width="12" height="4" class="has-fill-secondary" /> <rect x="5" y="2" width="2" height="1" class="has-fill-secondary" /> <rect x="8" y="2" width="2" height="1" class="has-fill-secondary" /> <rect x="11" y="2" width="3" height="1" class="has-fill-secondary" /> <rect x="1" y="1" width="2" height="2" class="has-fill-secondary" /> <rect x="5" y="10" width="7" height="2" rx="0.3" class="has-fill-primary" /> <rect x="19" y="1" width="2" height="2" rx="1" class="has-fill-secondary" /> </svg> </span> </span> <span>Light</span> </button> </li> <li class="theme display-block" role="menuitem"> <button class="button button-clear button-sm theme-control button-block justify-content-flex-start" data-theme-to="dark"> <span class="theme-dark margin-right-xxs"> <span class="border theme-selector-icon display-inline-block has-body-background" aria-hidden="true"> <svg class="svg" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 22 14"> <rect width="22" height="14" class="has-fill-body-background" /> <rect x="5" y="5" width="12" height="4" class="has-fill-secondary" /> <rect x="5" y="2" width="2" height="1" class="has-fill-secondary" /> <rect x="8" y="2" width="2" height="1" class="has-fill-secondary" /> <rect x="11" y="2" width="3" height="1" class="has-fill-secondary" /> <rect x="1" y="1" width="2" height="2" class="has-fill-secondary" /> <rect x="5" y="10" width="7" height="2" rx="0.3" class="has-fill-primary" /> <rect x="19" y="1" width="2" height="2" rx="1" class="has-fill-secondary" /> </svg> </span> </span> <span>Dark</span> </button> </li> <li class="theme display-block" role="menuitem"> <button class="button button-clear button-sm theme-control button-block justify-content-flex-start" data-theme-to="high-contrast"> <span class="theme-high-contrast margin-right-xxs"> <span class="border theme-selector-icon display-inline-block has-body-background" aria-hidden="true"> <svg class="svg" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 22 14"> <rect width="22" height="14" class="has-fill-body-background" /> <rect x="5" y="5" width="12" height="4" class="has-fill-secondary" /> <rect x="5" y="2" width="2" height="1" class="has-fill-secondary" /> <rect x="8" y="2" width="2" height="1" class="has-fill-secondary" /> <rect x="11" y="2" width="3" height="1" class="has-fill-secondary" /> <rect x="1" y="1" width="2" height="2" class="has-fill-secondary" /> <rect x="5" y="10" width="7" height="2" rx="0.3" class="has-fill-primary" /> <rect x="19" y="1" width="2" height="2" rx="1" class="has-fill-secondary" /> </svg> </span> </span> <span>High contrast</span> </button> </li> </ul> </div> </div> </div> </div> <ul class="links" data-bi-name="footerlinks"> <li class="manage-cookies-holder" hidden></li><li><a class="external-link-indicator" data-mscc-ic="false" href="/en-us/previous-versions/" data-bi-name="archivelink">Previous Versions</a></li> <li><a class="external-link-indicator" data-mscc-ic="false" href="https://techcommunity.microsoft.com/t5/microsoft-learn-blog/bg-p/MicrosoftLearnBlog" data-bi-name="bloglink">Blog</a></li> <li><a class="external-link-indicator" data-mscc-ic="false" href="/en-us/contribute/" data-bi-name="contributorGuide">Contribute</a></li><li><a class="external-link-indicator" data-mscc-ic="false" href="https://go.microsoft.com/fwlink/?LinkId=521839" data-bi-name="privacy">Privacy</a></li><li><a class="external-link-indicator" data-mscc-ic="false" href="/en-us/legal/termsofuse" data-bi-name="termsofuse">Terms of Use</a></li><li><a class="external-link-indicator" data-mscc-ic="false" href="https://www.microsoft.com/legal/intellectualproperty/Trademarks/" data-bi-name="trademarks">Trademarks</a></li><li>© Microsoft 2024</li> </ul> </footer></div></div><div id="ms--additional-resources" class="right-container column is-4-desktop display-none display-block-desktop" data-bi-name="pageactions" role="complementary" aria-label="Additional resources" > <div id="affixed-right-container" class="margin-top-sm-tablet" data-bi-name="right-column"> <h2 id="ms--additional-resources-heading" class="title is-6 margin-top-md" hidden>Additional resources</h2> <section id="right-rail-events" data-bi-name="events-card" hidden></section> <section id="right-rail-training" data-bi-name="learning-resources-card" hidden></section> <section id="right-rail-recommendations" data-bi-name="recommendations" hidden></section> <nav id="side-doc-outline" class="doc-outline" data-bi-name="intopic toc" aria-label="In this article"> <h3>In this article</h3> </nav> <section id="right-rail-qna" class="margin-top-xxs" data-bi-name="qna-link-card" hidden></section> </div> </div></div> <!--end of div.columns --> </section> <!--end of .primary-holder --> <!-- interactive container --> <aside id="interactive-container" class="interactive-container is-visible-interactive column has-body-background-dark "> </aside> <!-- end of interactive container --> </div> </div> <!--end of .mainContainer --> <section class="border-top has-default-focus is-hidden-interactive margin-top-sm "><footer id="footer" data-bi-name="footer" class="footer-layout uhf-container has-padding" role="contentinfo"><div class="display-flex gap-xs flex-wrap-wrap is-full-height padding-right-lg-desktop"><a data-mscc-ic="false" class="locale-selector-link button button-sm button-clear flex-shrink-0" href="#" data-bi-name="select-locale"> <span class="icon" aria-hidden="true"> <span class="docon docon-world"></span> </span> <span class="local-selector-link-text"></span></a><div class="ccpa-privacy-link" data-ccpa-privacy-link hidden> <a href="https://aka.ms/yourcaliforniaprivacychoices" class="button button-sm button-clear flex-shrink-0" data-mscc-ic="false" data-bi-name="your-privacy-choices" > <svg role="img" aria-label="California Consumer Privacy Act (CCPA) Opt-Out Icon" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 30 14" xml:space="preserve" height="16" width="43" focusable="false" > <title>California Consumer Privacy Act (CCPA) Opt-Out Icon</title> <path d="M7.4 12.8h6.8l3.1-11.6H7.4C4.2 1.2 1.6 3.8 1.6 7s2.6 5.8 5.8 5.8z" style="fill-rule:evenodd;clip-rule:evenodd;fill:#fff"></path> <path d="M22.6 0H7.4c-3.9 0-7 3.1-7 7s3.1 7 7 7h15.2c3.9 0 7-3.1 7-7s-3.2-7-7-7zm-21 7c0-3.2 2.6-5.8 5.8-5.8h9.9l-3.1 11.6H7.4c-3.2 0-5.8-2.6-5.8-5.8z" style="fill-rule:evenodd;clip-rule:evenodd;fill:#06f"></path> <path d="M24.6 4c.2.2.2.6 0 .8L22.5 7l2.2 2.2c.2.2.2.6 0 .8-.2.2-.6.2-.8 0l-2.2-2.2-2.2 2.2c-.2.2-.6.2-.8 0-.2-.2-.2-.6 0-.8L20.8 7l-2.2-2.2c-.2-.2-.2-.6 0-.8.2-.2.6-.2.8 0l2.2 2.2L23.8 4c.2-.2.6-.2.8 0z" style="fill:#fff"></path> <path d="M12.7 4.1c.2.2.3.6.1.8L8.6 9.8c-.1.1-.2.2-.3.2-.2.1-.5.1-.7-.1L5.4 7.7c-.2-.2-.2-.6 0-.8.2-.2.6-.2.8 0L8 8.6l3.8-4.5c.2-.2.6-.2.9 0z" style="fill:#06f"></path> </svg> <span>Your Privacy Choices</span> </a> </div> <div class="flex-shrink-0"> <div class="dropdown has-caret-up"> <button class="dropdown-trigger button button-clear button-sm has-inner-focus theme-dropdown-trigger" aria-controls="theme-menu" aria-expanded="false" title="Theme" data-bi-name="theme"> <span class="icon"> <span class="docon docon-sun" aria-hidden="true"></span> </span> <span>Theme</span> <span class="icon expanded-indicator" aria-hidden="true"> <span class="docon docon-chevron-down-light"></span> </span> </button> <div class="dropdown-menu" id="theme-menu" role="menu"> <ul class="theme-selector padding-xxs" role="none"> <li class="theme display-block" role="menuitem"> <button class="button button-clear button-sm theme-control button-block justify-content-flex-start" data-theme-to="light"> <span class="theme-light margin-right-xxs"> <span class="theme-selector-icon border display-inline-block has-body-background" aria-hidden="true"> <svg class="svg" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 22 14"> <rect width="22" height="14" class="has-fill-body-background" /> <rect x="5" y="5" width="12" height="4" class="has-fill-secondary" /> <rect x="5" y="2" width="2" height="1" class="has-fill-secondary" /> <rect x="8" y="2" width="2" height="1" class="has-fill-secondary" /> <rect x="11" y="2" width="3" height="1" class="has-fill-secondary" /> <rect x="1" y="1" width="2" height="2" class="has-fill-secondary" /> <rect x="5" y="10" width="7" height="2" rx="0.3" class="has-fill-primary" /> <rect x="19" y="1" width="2" height="2" rx="1" class="has-fill-secondary" /> </svg> </span> </span> <span>Light</span> </button> </li> <li class="theme display-block" role="menuitem"> <button class="button button-clear button-sm theme-control button-block justify-content-flex-start" data-theme-to="dark"> <span class="theme-dark margin-right-xxs"> <span class="border theme-selector-icon display-inline-block has-body-background" aria-hidden="true"> <svg class="svg" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 22 14"> <rect width="22" height="14" class="has-fill-body-background" /> <rect x="5" y="5" width="12" height="4" class="has-fill-secondary" /> <rect x="5" y="2" width="2" height="1" class="has-fill-secondary" /> <rect x="8" y="2" width="2" height="1" class="has-fill-secondary" /> <rect x="11" y="2" width="3" height="1" class="has-fill-secondary" /> <rect x="1" y="1" width="2" height="2" class="has-fill-secondary" /> <rect x="5" y="10" width="7" height="2" rx="0.3" class="has-fill-primary" /> <rect x="19" y="1" width="2" height="2" rx="1" class="has-fill-secondary" /> </svg> </span> </span> <span>Dark</span> </button> </li> <li class="theme display-block" role="menuitem"> <button class="button button-clear button-sm theme-control button-block justify-content-flex-start" data-theme-to="high-contrast"> <span class="theme-high-contrast margin-right-xxs"> <span class="border theme-selector-icon display-inline-block has-body-background" aria-hidden="true"> <svg class="svg" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 22 14"> <rect width="22" height="14" class="has-fill-body-background" /> <rect x="5" y="5" width="12" height="4" class="has-fill-secondary" /> <rect x="5" y="2" width="2" height="1" class="has-fill-secondary" /> <rect x="8" y="2" width="2" height="1" class="has-fill-secondary" /> <rect x="11" y="2" width="3" height="1" class="has-fill-secondary" /> <rect x="1" y="1" width="2" height="2" class="has-fill-secondary" /> <rect x="5" y="10" width="7" height="2" rx="0.3" class="has-fill-primary" /> <rect x="19" y="1" width="2" height="2" rx="1" class="has-fill-secondary" /> </svg> </span> </span> <span>High contrast</span> </button> </li> </ul> </div> </div> </div> </div> <ul class="links" data-bi-name="footerlinks"> <li class="manage-cookies-holder" hidden></li><li><a class="external-link-indicator" data-mscc-ic="false" href="/en-us/previous-versions/" data-bi-name="archivelink">Previous Versions</a></li> <li><a class="external-link-indicator" data-mscc-ic="false" href="https://techcommunity.microsoft.com/t5/microsoft-learn-blog/bg-p/MicrosoftLearnBlog" data-bi-name="bloglink">Blog</a></li> <li><a class="external-link-indicator" data-mscc-ic="false" href="/en-us/contribute/" data-bi-name="contributorGuide">Contribute</a></li><li><a class="external-link-indicator" data-mscc-ic="false" href="https://go.microsoft.com/fwlink/?LinkId=521839" data-bi-name="privacy">Privacy</a></li><li><a class="external-link-indicator" data-mscc-ic="false" href="/en-us/legal/termsofuse" data-bi-name="termsofuse">Terms of Use</a></li><li><a class="external-link-indicator" data-mscc-ic="false" href="https://www.microsoft.com/legal/intellectualproperty/Trademarks/" data-bi-name="trademarks">Trademarks</a></li><li>© Microsoft 2024</li> </ul> </footer> </section> <div id="action-panel" role="region" aria-label="Action Panel" class="action-panel has-default-focus" tabindex="-1"></div> </body> </html>