This commit is contained in:
JeremyVyska 2022-02-20 20:13:18 +00:00
parent 34af3362da
commit 2d866c6316
732 changed files with 136202 additions and 67025 deletions

View file

@ -0,0 +1,596 @@
<!doctype html><html lang=en class=no-js>
<head>
<meta charset=utf-8>
<meta name=viewport content="width=device-width,initial-scale=1,shrink-to-fit=no">
<meta name=generator content="Hugo 0.92.2">
<link rel=alternate type=application/rss+xml href=https://alguidelines.dev/docs/navpatterns/patterns/queries/index.xml>
<meta name=robots content="index, follow">
<link rel="shortcut icon" href=/favicons/favicon.ico>
<link rel=apple-touch-icon href=/favicons/apple-touch-icon-180x180.png sizes=180x180>
<link rel=icon type=image/png href=/favicons/favicon-16x16.png sizes=16x16>
<link rel=icon type=image/png href=/favicons/favicon-32x32.png sizes=32x32>
<link rel=icon type=image/png href=/favicons/android-36x36.png sizes=36x36>
<link rel=icon type=image/png href=/favicons/android-48x48.png sizes=48x48>
<link rel=icon type=image/png href=/favicons/android-72x72.png sizes=72x72>
<link rel=icon type=image/png href=/favicons/android-96x96.png sizes=96x96>
<link rel=icon type=image/png href=/favicons/android-144x144.png sizes=144x144>
<link rel=icon type=image/png href=/favicons/android-192x192.png sizes=192x192>
<title>Queries | alguidelines.dev - Business Central Design Patterns</title>
<meta name=description content="Expand to see NAV design patterns which use queries.
">
<meta property="og:title" content="Queries">
<meta property="og:description" content="Guidelines for when Developing AL for Microsoft Dynamics 365 Business Central">
<meta property="og:type" content="website">
<meta property="og:url" content="https://alguidelines.dev/docs/navpatterns/patterns/queries/"><meta property="og:image" content="https://alguidelines.dev/images/og-image-fission.png"><meta property="og:site_name" content="alguidelines.dev - Business Central Design Patterns">
<meta itemprop=name content="Queries">
<meta itemprop=description content="Guidelines for when Developing AL for Microsoft Dynamics 365 Business Central"><meta name=twitter:card content="summary_large_image">
<meta name=twitter:image content="https://alguidelines.dev/images/og-image-fission.png">
<meta name=twitter:title content="Queries">
<meta name=twitter:description content="Guidelines for when Developing AL for Microsoft Dynamics 365 Business Central">
<link rel=preload href=/scss/main.min.465d5fa0bd58415aee47bc5a1c5d8deee19fe158cff814bc698ee863ea6b68eb.css as=style>
<link href=/scss/main.min.465d5fa0bd58415aee47bc5a1c5d8deee19fe158cff814bc698ee863ea6b68eb.css rel=stylesheet integrity>
<script src=https://code.jquery.com/jquery-3.6.0.min.js integrity=sha384-vtXRMe3mGCbOeY7l30aIg8H9p3GdeSe4IFlP6G8JMa7o7lXvnz3GFKzPxzJdPfGK crossorigin=anonymous></script>
</head>
<body class=td-section>
<header>
<nav class="js-navbar-scroll navbar navbar-expand navbar-dark flex-column flex-md-row td-navbar">
<a class=navbar-brand href=/>
<img src=/images/alguidelines-bclogo-pattern-white.png height=32px>
<span class=font-weight-bold>alguidelines.dev - Business Central Design Patterns</span>
</a>
<div class="td-navbar-nav-scroll ml-md-auto" id=main_navbar>
<ul class="navbar-nav mt-2 mt-lg-0">
<li class="nav-item mr-4 mb-2 mb-lg-0">
<a class=nav-link href=/docs/><i class="fas fa-book"></i><span>Docs</span></a>
</li>
<li class="nav-item mr-4 mb-2 mb-lg-0">
<a class=nav-link href=https://github.com/microsoft/alguidelines/discussions/ target=_blank><i class="fas fa-comments"></i><span>Discussions</span></a>
</li>
<li class="nav-item mr-4 mb-2 mb-lg-0">
<a class=nav-link href=https://github.com/microsoft/alguidelines target=_blank><i class="fab fa-github"></i><span>GitHub</span></a>
</li>
<li class="nav-item mr-4 mb-2 mb-lg-0">
<a class=nav-link href=https://discord.gg/4wbfNv3 target=_blank><i class="fab fa-discord"></i><span>Discord</span></a>
</li>
</ul>
</div>
<div class="navbar-nav d-none d-lg-block"></div>
</nav>
</header>
<div class="container-fluid td-outer">
<div class=td-main>
<div class="row flex-xl-nowrap">
<aside class="col-12 col-md-3 col-xl-2 td-sidebar d-print-none">
<div id=td-sidebar-menu class=td-sidebar__inner>
<div id=content-mobile>
<form class="td-sidebar__search d-flex align-items-center">
<button class="btn btn-link td-sidebar__toggle d-md-none p-0 ml-3 fas fa-bars" type=button data-toggle=collapse data-target=#td-section-nav aria-controls=td-docs-nav aria-expanded=false aria-label="Toggle section navigation">
</button>
</form>
</div>
<div id=content-desktop></div>
<nav class="collapse td-sidebar-nav" id=td-section-nav>
<ul class="td-sidebar-nav__section pr-md-3 ul-0">
<li class="td-sidebar-nav__section-title td-sidebar-nav__section with-child active-path" id=m-docs-li>
<a href=/docs/ title="AL Guidelines" class="align-left pl-0 td-sidebar-link td-sidebar-link__section tree-root" id=m-docs><span>Docs</span></a>
<ul class=ul-1>
<li class="td-sidebar-nav__section-title td-sidebar-nav__section with-child" id=m-docspatterns-li>
<a href=/docs/patterns/ class="align-left pl-0 td-sidebar-link td-sidebar-link__section" id=m-docspatterns><span>Patterns</span></a>
<ul class="ul-2 foldable">
<li class="td-sidebar-nav__section-title td-sidebar-nav__section without-child collapse" id=m-docspatternsevent-bridge-pattern-li>
<a href=/docs/patterns/event-bridge-pattern/ class="align-left pl-0 td-sidebar-link td-sidebar-link__page" id=m-docspatternsevent-bridge-pattern><span>Event Bridge</span></a>
</li><li class="td-sidebar-nav__section-title td-sidebar-nav__section without-child collapse" id=m-docspatternsfacade-pattern-li>
<a href=/docs/patterns/facade-pattern/ class="align-left pl-0 td-sidebar-link td-sidebar-link__page" id=m-docspatternsfacade-pattern><span>Façade</span></a>
</li><li class="td-sidebar-nav__section-title td-sidebar-nav__section without-child collapse" id=m-docspatternsgeneric-method-pattern-li>
<a href=/docs/patterns/generic-method-pattern/ class="align-left pl-0 td-sidebar-link td-sidebar-link__page" id=m-docspatternsgeneric-method-pattern><span>Generic Method</span></a>
</li>
</ul>
</li><li class="td-sidebar-nav__section-title td-sidebar-nav__section with-child" id=m-docsbestpractices-li>
<a href=/docs/bestpractices/ class="align-left pl-0 td-sidebar-link td-sidebar-link__section" id=m-docsbestpractices><span>Best Practices</span></a>
<ul class="ul-2 foldable">
<li class="td-sidebar-nav__section-title td-sidebar-nav__section without-child collapse" id=m-docsbestpracticesbegin-as-an-afterword-li>
<a href=/docs/bestpractices/begin-as-an-afterword/ class="align-left pl-0 td-sidebar-link td-sidebar-link__page" id=m-docsbestpracticesbegin-as-an-afterword><span>begin as an afterword</span></a>
</li><li class="td-sidebar-nav__section-title td-sidebar-nav__section without-child collapse" id=m-docsbestpracticesbegin-end-li>
<a href=/docs/bestpractices/begin-end/ class="align-left pl-0 td-sidebar-link td-sidebar-link__page" id=m-docsbestpracticesbegin-end><span>Begin-End - Compound Only</span></a>
</li><li class="td-sidebar-nav__section-title td-sidebar-nav__section without-child collapse" id=m-docsbestpracticesbinary-operator-line-start-li>
<a href=/docs/bestpractices/binary-operator-line-start/ class="align-left pl-0 td-sidebar-link td-sidebar-link__page" id=m-docsbestpracticesbinary-operator-line-start><span>Binary Operator to Start Line</span></a>
</li><li class="td-sidebar-nav__section-title td-sidebar-nav__section without-child collapse" id=m-docsbestpracticescase-actions-li>
<a href=/docs/bestpractices/case-actions/ class="align-left pl-0 td-sidebar-link td-sidebar-link__page" id=m-docsbestpracticescase-actions><span>CASE Action on next line</span></a>
</li><li class="td-sidebar-nav__section-title td-sidebar-nav__section without-child collapse" id=m-docsbestpracticescomments-spacing-li>
<a href=/docs/bestpractices/comments-spacing/ class="align-left pl-0 td-sidebar-link td-sidebar-link__page" id=m-docsbestpracticescomments-spacing><span>Comment Spacing</span></a>
</li><li class="td-sidebar-nav__section-title td-sidebar-nav__section without-child collapse" id=m-docsbestpracticesdeleteall-li>
<a href=/docs/bestpractices/deleteall/ class="align-left pl-0 td-sidebar-link td-sidebar-link__page" id=m-docsbestpracticesdeleteall><span>DeleteAll</span></a>
</li><li class="td-sidebar-nav__section-title td-sidebar-nav__section without-child collapse" id=m-docsbestpracticesend-else-pair-li>
<a href=/docs/bestpractices/end-else-pair/ class="align-left pl-0 td-sidebar-link td-sidebar-link__page" id=m-docsbestpracticesend-else-pair><span>end else pair</span></a>
</li><li class="td-sidebar-nav__section-title td-sidebar-nav__section without-child collapse" id=m-docsbestpracticeskeyword-pairs-indentation-li>
<a href=/docs/bestpractices/keyword-pairs-indentation/ class="align-left pl-0 td-sidebar-link td-sidebar-link__page" id=m-docsbestpracticeskeyword-pairs-indentation><span>Keyword Pairs - Indentation</span></a>
</li><li class="td-sidebar-nav__section-title td-sidebar-nav__section without-child collapse" id=m-docsbestpracticesline-start-keywords-li>
<a href=/docs/bestpractices/line-start-keywords/ class="align-left pl-0 td-sidebar-link td-sidebar-link__page" id=m-docsbestpracticesline-start-keywords><span>Line Start Keywords</span></a>
</li><li class="td-sidebar-nav__section-title td-sidebar-nav__section without-child collapse" id=m-docsbestpracticeslonely-repeat-li>
<a href=/docs/bestpractices/lonely-repeat/ class="align-left pl-0 td-sidebar-link td-sidebar-link__page" id=m-docsbestpracticeslonely-repeat><span>Lonely Repeat</span></a>
</li><li class="td-sidebar-nav__section-title td-sidebar-nav__section without-child collapse" id=m-docsbestpracticesnamed-invocations-li>
<a href=/docs/bestpractices/named-invocations/ class="align-left pl-0 td-sidebar-link td-sidebar-link__page" id=m-docsbestpracticesnamed-invocations><span>Named Invocations</span></a>
</li><li class="td-sidebar-nav__section-title td-sidebar-nav__section without-child collapse" id=m-docsbestpracticesone-statement-per-line-li>
<a href=/docs/bestpractices/one-statement-per-line/ class="align-left pl-0 td-sidebar-link td-sidebar-link__page" id=m-docsbestpracticesone-statement-per-line><span>One Statement per Line</span></a>
</li><li class="td-sidebar-nav__section-title td-sidebar-nav__section without-child collapse" id=m-docsbestpracticesseparate-if-and-else-li>
<a href=/docs/bestpractices/separate-if-and-else/ class="align-left pl-0 td-sidebar-link td-sidebar-link__page" id=m-docsbestpracticesseparate-if-and-else><span>Seperate if and else</span></a>
</li><li class="td-sidebar-nav__section-title td-sidebar-nav__section without-child collapse" id=m-docsbestpracticesspacing-binary-operators-li>
<a href=/docs/bestpractices/spacing-binary-operators/ class="align-left pl-0 td-sidebar-link td-sidebar-link__page" id=m-docsbestpracticesspacing-binary-operators><span>Spacing Binary Operators</span></a>
</li><li class="td-sidebar-nav__section-title td-sidebar-nav__section without-child collapse" id=m-docsbestpracticessubscribercodeunits-li>
<a href=/docs/bestpractices/subscribercodeunits/ class="align-left pl-0 td-sidebar-link td-sidebar-link__page" id=m-docsbestpracticessubscribercodeunits><span>Subscriber Codeunits</span></a>
</li><li class="td-sidebar-nav__section-title td-sidebar-nav__section without-child collapse" id=m-docsbestpracticessuggested-abbreviations-li>
<a href=/docs/bestpractices/suggested-abbreviations/ class="align-left pl-0 td-sidebar-link td-sidebar-link__page" id=m-docsbestpracticessuggested-abbreviations><span>Suggested Abbreviations</span></a>
</li><li class="td-sidebar-nav__section-title td-sidebar-nav__section without-child collapse" id=m-docsbestpracticesunnecessary-else-li>
<a href=/docs/bestpractices/unnecessary-else/ class="align-left pl-0 td-sidebar-link td-sidebar-link__page" id=m-docsbestpracticesunnecessary-else><span>Unnecessary else</span></a>
</li><li class="td-sidebar-nav__section-title td-sidebar-nav__section without-child collapse" id=m-docsbestpracticesunnecessary-truefalse-li>
<a href=/docs/bestpractices/unnecessary-truefalse/ class="align-left pl-0 td-sidebar-link td-sidebar-link__page" id=m-docsbestpracticesunnecessary-truefalse><span>Unnecessary true/false</span></a>
</li><li class="td-sidebar-nav__section-title td-sidebar-nav__section without-child collapse" id=m-docsbestpracticesvariable-naming-li>
<a href=/docs/bestpractices/variable-naming/ class="align-left pl-0 td-sidebar-link td-sidebar-link__page" id=m-docsbestpracticesvariable-naming><span>Variable Naming</span></a>
</li><li class="td-sidebar-nav__section-title td-sidebar-nav__section without-child collapse" id=m-docsbestpracticesvariables-declarations-order-li>
<a href=/docs/bestpractices/variables-declarations-order/ class="align-left pl-0 td-sidebar-link td-sidebar-link__page" id=m-docsbestpracticesvariables-declarations-order><span>Variables Declarations Order</span></a>
</li>
</ul>
</li><li class="td-sidebar-nav__section-title td-sidebar-nav__section with-child active-path" id=m-docsnavpatterns-li>
<a href=/docs/navpatterns/ class="align-left pl-0 td-sidebar-link td-sidebar-link__section" id=m-docsnavpatterns><span>NAV Patterns Archive</span></a>
<ul class="ul-2 foldable">
<li class="td-sidebar-nav__section-title td-sidebar-nav__section with-child active-path" id=m-docsnavpatternspatterns-li>
<a href=/docs/navpatterns/patterns/ class="align-left pl-0 td-sidebar-link td-sidebar-link__section" id=m-docsnavpatternspatterns><span>Patterns</span></a>
<ul class="ul-3 foldable">
<li class="td-sidebar-nav__section-title td-sidebar-nav__section without-child" id=m-docsnavpatternspatternsactivity-log-li>
<a href=/docs/navpatterns/patterns/activity-log/ class="align-left pl-0 td-sidebar-link td-sidebar-link__page" id=m-docsnavpatternspatternsactivity-log><span>Activity Logs</span></a>
</li><li class="td-sidebar-nav__section-title td-sidebar-nav__section without-child" id=m-docsnavpatternspatternsargument-table-li>
<a href=/docs/navpatterns/patterns/argument-table/ class="align-left pl-0 td-sidebar-link td-sidebar-link__page" id=m-docsnavpatternspatternsargument-table><span>Argument Table</span></a>
</li><li class="td-sidebar-nav__section-title td-sidebar-nav__section with-child" id=m-docsnavpatternspatternsblocked-entity-li>
<a href=/docs/navpatterns/patterns/blocked-entity/ class="align-left pl-0 td-sidebar-link td-sidebar-link__section" id=m-docsnavpatternspatternsblocked-entity><span>Blocked Entity</span></a>
<ul class="ul-4 foldable">
<li class="td-sidebar-nav__section-title td-sidebar-nav__section without-child collapse" id=m-docsnavpatternspatternsblocked-entitydata-driven-blocked-entity-li>
<a href=/docs/navpatterns/patterns/blocked-entity/data-driven-blocked-entity/ class="align-left pl-0 td-sidebar-link td-sidebar-link__page" id=m-docsnavpatternspatternsblocked-entitydata-driven-blocked-entity><span>Data Driven Blocked Entity</span></a>
</li>
</ul>
</li><li class="td-sidebar-nav__section-title td-sidebar-nav__section without-child" id=m-docsnavpatternspatternscached-web-service-calls-li>
<a href=/docs/navpatterns/patterns/cached-web-service-calls/ class="align-left pl-0 td-sidebar-link td-sidebar-link__page" id=m-docsnavpatternspatternscached-web-service-calls><span>Cached Web Server Calls</span></a>
</li><li class="td-sidebar-nav__section-title td-sidebar-nav__section without-child" id=m-docsnavpatternspatternsconditional-cascading-update-li>
<a href=/docs/navpatterns/patterns/conditional-cascading-update/ class="align-left pl-0 td-sidebar-link td-sidebar-link__page" id=m-docsnavpatternspatternsconditional-cascading-update><span>Conditional Cascading Update</span></a>
</li><li class="td-sidebar-nav__section-title td-sidebar-nav__section without-child" id=m-docsnavpatternspatternscopy-document-li>
<a href=/docs/navpatterns/patterns/copy-document/ class="align-left pl-0 td-sidebar-link td-sidebar-link__page" id=m-docsnavpatternspatternscopy-document><span>Copy Document</span></a>
</li><li class="td-sidebar-nav__section-title td-sidebar-nav__section without-child" id=m-docsnavpatternspatternscreate-data-from-templates-li>
<a href=/docs/navpatterns/patterns/create-data-from-templates/ class="align-left pl-0 td-sidebar-link td-sidebar-link__page" id=m-docsnavpatternspatternscreate-data-from-templates><span>Create Data from Templates</span></a>
</li><li class="td-sidebar-nav__section-title td-sidebar-nav__section without-child" id=m-docsnavpatternspatternscreate-urls-to-nav-clients-li>
<a href=/docs/navpatterns/patterns/create-urls-to-nav-clients/ class="align-left pl-0 td-sidebar-link td-sidebar-link__page" id=m-docsnavpatternspatternscreate-urls-to-nav-clients><span>Create URLs to NAV Clients</span></a>
</li><li class="td-sidebar-nav__section-title td-sidebar-nav__section without-child" id=m-docsnavpatternspatternscreating-custom-charts-li>
<a href=/docs/navpatterns/patterns/creating-custom-charts/ class="align-left pl-0 td-sidebar-link td-sidebar-link__page" id=m-docsnavpatternspatternscreating-custom-charts><span>Creating Custom Charts</span></a>
</li><li class="td-sidebar-nav__section-title td-sidebar-nav__section without-child" id=m-docsnavpatternspatternscross-session-events-li>
<a href=/docs/navpatterns/patterns/cross-session-events/ class="align-left pl-0 td-sidebar-link td-sidebar-link__page" id=m-docsnavpatternspatternscross-session-events><span>Cross Session Events</span></a>
</li><li class="td-sidebar-nav__section-title td-sidebar-nav__section without-child" id=m-docsnavpatternspatternscurrently-active-record-li>
<a href=/docs/navpatterns/patterns/currently-active-record/ class="align-left pl-0 td-sidebar-link td-sidebar-link__page" id=m-docsnavpatternspatternscurrently-active-record><span>Currently Active Record</span></a>
</li><li class="td-sidebar-nav__section-title td-sidebar-nav__section without-child" id=m-docsnavpatternspatternsdata-migration-facade-li>
<a href=/docs/navpatterns/patterns/data-migration-facade/ class="align-left pl-0 td-sidebar-link td-sidebar-link__page" id=m-docsnavpatternspatternsdata-migration-facade><span>Data Migration Façade</span></a>
</li><li class="td-sidebar-nav__section-title td-sidebar-nav__section without-child" id=m-docsnavpatternspatternsdiscovery-event-li>
<a href=/docs/navpatterns/patterns/discovery-event/ class="align-left pl-0 td-sidebar-link td-sidebar-link__page" id=m-docsnavpatternspatternsdiscovery-event><span>Discovery Event</span></a>
</li><li class="td-sidebar-nav__section-title td-sidebar-nav__section without-child" id=m-docsnavpatternspatternsdocument-li>
<a href=/docs/navpatterns/patterns/document/ class="align-left pl-0 td-sidebar-link td-sidebar-link__page" id=m-docsnavpatternspatternsdocument><span>Document</span></a>
</li><li class="td-sidebar-nav__section-title td-sidebar-nav__section without-child" id=m-docsnavpatternspatternseasy-update-of-setup-or-supplementary-information-li>
<a href=/docs/navpatterns/patterns/easy-update-of-setup-or-supplementary-information/ class="align-left pl-0 td-sidebar-link td-sidebar-link__page" id=m-docsnavpatternspatternseasy-update-of-setup-or-supplementary-information><span>Easy Update Of Setup Or Supplementary Information</span></a>
</li><li class="td-sidebar-nav__section-title td-sidebar-nav__section without-child" id=m-docsnavpatternspatternserror-message-processing-li>
<a href=/docs/navpatterns/patterns/error-message-processing/ class="align-left pl-0 td-sidebar-link td-sidebar-link__page" id=m-docsnavpatternspatternserror-message-processing><span>Error Message Processing</span></a>
</li><li class="td-sidebar-nav__section-title td-sidebar-nav__section without-child" id=m-docsnavpatternspatternsextending-the-role-center-headlines-li>
<a href=/docs/navpatterns/patterns/extending-the-role-center-headlines/ class="align-left pl-0 td-sidebar-link td-sidebar-link__page" id=m-docsnavpatternspatternsextending-the-role-center-headlines><span>Extending the Role Center Headlines</span></a>
</li><li class="td-sidebar-nav__section-title td-sidebar-nav__section without-child" id=m-docsnavpatternspatternsfeature-localization-for-data-structures-li>
<a href=/docs/navpatterns/patterns/feature-localization-for-data-structures/ class="align-left pl-0 td-sidebar-link td-sidebar-link__page" id=m-docsnavpatternspatternsfeature-localization-for-data-structures><span>Feature Localization For Data Structures</span></a>
</li><li class="td-sidebar-nav__section-title td-sidebar-nav__section without-child" id=m-docsnavpatternspatternshooks-li>
<a href=/docs/navpatterns/patterns/hooks/ class="align-left pl-0 td-sidebar-link td-sidebar-link__page" id=m-docsnavpatternspatternshooks><span>Hooks</span></a>
</li><li class="td-sidebar-nav__section-title td-sidebar-nav__section without-child" id=m-docsnavpatternspatternsimplementation-of-surrogate-keys-using-autoincrement-pattern-li>
<a href=/docs/navpatterns/patterns/implementation-of-surrogate-keys-using-autoincrement-pattern/ class="align-left pl-0 td-sidebar-link td-sidebar-link__page" id=m-docsnavpatternspatternsimplementation-of-surrogate-keys-using-autoincrement-pattern><span>Surrogate keys using Autoincrement Pattern</span></a>
</li><li class="td-sidebar-nav__section-title td-sidebar-nav__section without-child" id=m-docsnavpatternspatternsinstructions-in-the-ui-li>
<a href=/docs/navpatterns/patterns/instructions-in-the-ui/ class="align-left pl-0 td-sidebar-link td-sidebar-link__page" id=m-docsnavpatternspatternsinstructions-in-the-ui><span>Instructions in the UI</span></a>
</li><li class="td-sidebar-nav__section-title td-sidebar-nav__section without-child" id=m-docsnavpatternspatternsintegration-of-addresses-li>
<a href=/docs/navpatterns/patterns/integration-of-addresses/ class="align-left pl-0 td-sidebar-link td-sidebar-link__page" id=m-docsnavpatternspatternsintegration-of-addresses><span>Integration of Addresses</span></a>
</li><li class="td-sidebar-nav__section-title td-sidebar-nav__section without-child" id=m-docsnavpatternspatternsjournal-error-processing-li>
<a href=/docs/navpatterns/patterns/journal-error-processing/ class="align-left pl-0 td-sidebar-link td-sidebar-link__page" id=m-docsnavpatternspatternsjournal-error-processing><span>Journal Error Processing</span></a>
</li><li class="td-sidebar-nav__section-title td-sidebar-nav__section without-child" id=m-docsnavpatternspatternsjournal-template-batch-line-li>
<a href=/docs/navpatterns/patterns/journal-template-batch-line/ class="align-left pl-0 td-sidebar-link td-sidebar-link__page" id=m-docsnavpatternspatternsjournal-template-batch-line><span>Journal Template Batch Line</span></a>
</li><li class="td-sidebar-nav__section-title td-sidebar-nav__section without-child" id=m-docsnavpatternspatternsmaster-data-li>
<a href=/docs/navpatterns/patterns/master-data/ class="align-left pl-0 td-sidebar-link td-sidebar-link__page" id=m-docsnavpatternspatternsmaster-data><span>Master Data</span></a>
</li><li class="td-sidebar-nav__section-title td-sidebar-nav__section without-child" id=m-docsnavpatternspatternsmulti-file-download-li>
<a href=/docs/navpatterns/patterns/multi-file-download/ class="align-left pl-0 td-sidebar-link td-sidebar-link__page" id=m-docsnavpatternspatternsmulti-file-download><span>Multi-file Download</span></a>
</li><li class="td-sidebar-nav__section-title td-sidebar-nav__section without-child" id=m-docsnavpatternspatternsmulti-page-list-li>
<a href=/docs/navpatterns/patterns/multi-page-list/ class="align-left pl-0 td-sidebar-link td-sidebar-link__page" id=m-docsnavpatternspatternsmulti-page-list><span>Multi-Page List</span></a>
</li><li class="td-sidebar-nav__section-title td-sidebar-nav__section without-child" id=m-docsnavpatternspatternsmultilanguage-application-data-li>
<a href=/docs/navpatterns/patterns/multilanguage-application-data/ class="align-left pl-0 td-sidebar-link td-sidebar-link__page" id=m-docsnavpatternspatternsmultilanguage-application-data><span>Multilanguage Application Data</span></a>
</li><li class="td-sidebar-nav__section-title td-sidebar-nav__section with-child" id=m-docsnavpatternspatternsnet-exception-handling-in-cal-li>
<a href=/docs/navpatterns/patterns/net-exception-handling-in-cal/ class="align-left pl-0 td-sidebar-link td-sidebar-link__section" id=m-docsnavpatternspatternsnet-exception-handling-in-cal><span>NET Exception Handling in CAL</span></a>
<ul class="ul-4 foldable">
<li class="td-sidebar-nav__section-title td-sidebar-nav__section without-child collapse" id=m-docsnavpatternspatternsnet-exception-handling-in-caltryfunction-net-exception-handling-in-cal-li>
<a href=/docs/navpatterns/patterns/net-exception-handling-in-cal/tryfunction-net-exception-handling-in-cal/ class="align-left pl-0 td-sidebar-link td-sidebar-link__page" id=m-docsnavpatternspatternsnet-exception-handling-in-caltryfunction-net-exception-handling-in-cal><span>TryFunction NET Exception Handling in CAL</span></a>
</li>
</ul>
</li><li class="td-sidebar-nav__section-title td-sidebar-nav__section without-child" id=m-docsnavpatternspatternsno-series-li>
<a href=/docs/navpatterns/patterns/no-series/ class="align-left pl-0 td-sidebar-link td-sidebar-link__page" id=m-docsnavpatternspatternsno-series><span>No Series</span></a>
</li><li class="td-sidebar-nav__section-title td-sidebar-nav__section with-child" id=m-docsnavpatternspatternsnotifications-li>
<a href=/docs/navpatterns/patterns/notifications/ class="align-left pl-0 td-sidebar-link td-sidebar-link__section" id=m-docsnavpatternspatternsnotifications><span>Notifications</span></a>
<ul class="ul-4 foldable">
<li class="td-sidebar-nav__section-title td-sidebar-nav__section without-child collapse" id=m-docsnavpatternspatternsnotificationsin-context-notifications-li>
<a href=/docs/navpatterns/patterns/notifications/in-context-notifications/ class="align-left pl-0 td-sidebar-link td-sidebar-link__page" id=m-docsnavpatternspatternsnotificationsin-context-notifications><span>In-context Notifications</span></a>
</li><li class="td-sidebar-nav__section-title td-sidebar-nav__section without-child collapse" id=m-docsnavpatternspatternsnotificationsnotification-lifecycle-management-pattern-li>
<a href=/docs/navpatterns/patterns/notifications/notification-lifecycle-management-pattern/ class="align-left pl-0 td-sidebar-link td-sidebar-link__page" id=m-docsnavpatternspatternsnotificationsnotification-lifecycle-management-pattern><span>Notification Lifecycle Management Pattern</span></a>
</li>
</ul>
</li><li class="td-sidebar-nav__section-title td-sidebar-nav__section without-child" id=m-docsnavpatternspatternsobserver-li>
<a href=/docs/navpatterns/patterns/observer/ class="align-left pl-0 td-sidebar-link td-sidebar-link__page" id=m-docsnavpatternspatternsobserver><span>Observer</span></a>
</li><li class="td-sidebar-nav__section-title td-sidebar-nav__section without-child" id=m-docsnavpatternspatternsposting-routine-select-behavior-li>
<a href=/docs/navpatterns/patterns/posting-routine-select-behavior/ class="align-left pl-0 td-sidebar-link td-sidebar-link__page" id=m-docsnavpatternspatternsposting-routine-select-behavior><span>Posting Routine - Select Behavior</span></a>
</li><li class="td-sidebar-nav__section-title td-sidebar-nav__section without-child" id=m-docsnavpatternspatternsproduct-name-li>
<a href=/docs/navpatterns/patterns/product-name/ class="align-left pl-0 td-sidebar-link td-sidebar-link__page" id=m-docsnavpatternspatternsproduct-name><span>Product Name</span></a>
</li><li class="td-sidebar-nav__section-title td-sidebar-nav__section with-child active-path" id=m-docsnavpatternspatternsqueries-li>
<a href=/docs/navpatterns/patterns/queries/ class="align-left pl-0 active td-sidebar-link td-sidebar-link__section" id=m-docsnavpatternspatternsqueries><span class=td-sidebar-nav-active-item>Queries</span></a>
<ul class="ul-4 foldable">
<li class="td-sidebar-nav__section-title td-sidebar-nav__section without-child" id=m-docsnavpatternspatternsqueriesselect-distinct-with-queries-li>
<a href=/docs/navpatterns/patterns/queries/select-distinct-with-queries/ class="align-left pl-0 td-sidebar-link td-sidebar-link__page" id=m-docsnavpatternspatternsqueriesselect-distinct-with-queries><span>SELECT DISTINCT with Queries</span></a>
</li><li class="td-sidebar-nav__section-title td-sidebar-nav__section without-child" id=m-docsnavpatternspatternsqueriesuse-queries-to-detect-duplicate-records-li>
<a href=/docs/navpatterns/patterns/queries/use-queries-to-detect-duplicate-records/ class="align-left pl-0 td-sidebar-link td-sidebar-link__page" id=m-docsnavpatternspatternsqueriesuse-queries-to-detect-duplicate-records><span>Use Queries to Detect Duplicate Records</span></a>
</li><li class="td-sidebar-nav__section-title td-sidebar-nav__section without-child" id=m-docsnavpatternspatternsqueriesuse-queries-to-replace-nested-loops-li>
<a href=/docs/navpatterns/patterns/queries/use-queries-to-replace-nested-loops/ class="align-left pl-0 td-sidebar-link td-sidebar-link__page" id=m-docsnavpatternspatternsqueriesuse-queries-to-replace-nested-loops><span>Use Queries to Replace Nested Loops</span></a>
</li>
</ul>
</li><li class="td-sidebar-nav__section-title td-sidebar-nav__section without-child" id=m-docsnavpatternspatternsread-once-initialization-and-validation-li>
<a href=/docs/navpatterns/patterns/read-once-initialization-and-validation/ class="align-left pl-0 td-sidebar-link td-sidebar-link__page" id=m-docsnavpatternspatternsread-once-initialization-and-validation><span>Read-once Initialization and Validation</span></a>
</li><li class="td-sidebar-nav__section-title td-sidebar-nav__section without-child" id=m-docsnavpatternspatternsreleased-entity-li>
<a href=/docs/navpatterns/patterns/released-entity/ class="align-left pl-0 td-sidebar-link td-sidebar-link__page" id=m-docsnavpatternspatternsreleased-entity><span>Released Entity</span></a>
</li><li class="td-sidebar-nav__section-title td-sidebar-nav__section without-child" id=m-docsnavpatternspatternsreport-selection-li>
<a href=/docs/navpatterns/patterns/report-selection/ class="align-left pl-0 td-sidebar-link td-sidebar-link__page" id=m-docsnavpatternspatternsreport-selection><span>Report Selection</span></a>
</li><li class="td-sidebar-nav__section-title td-sidebar-nav__section with-child" id=m-docsnavpatternspatternssecurity-li>
<a href=/docs/navpatterns/patterns/security/ class="align-left pl-0 td-sidebar-link td-sidebar-link__section" id=m-docsnavpatternspatternssecurity><span>Security</span></a>
<ul class="ul-4 foldable">
<li class="td-sidebar-nav__section-title td-sidebar-nav__section without-child collapse" id=m-docsnavpatternspatternssecurity1-sensitive-data-encapsulation-li>
<a href=/docs/navpatterns/patterns/security/1-sensitive-data-encapsulation/ class="align-left pl-0 td-sidebar-link td-sidebar-link__page" id=m-docsnavpatternspatternssecurity1-sensitive-data-encapsulation><span>Sensitive Data Encapsulation</span></a>
</li><li class="td-sidebar-nav__section-title td-sidebar-nav__section without-child collapse" id=m-docsnavpatternspatternssecurity2-data-encryption-li>
<a href=/docs/navpatterns/patterns/security/2-data-encryption/ class="align-left pl-0 td-sidebar-link td-sidebar-link__page" id=m-docsnavpatternspatternssecurity2-data-encryption><span>Data Encryption</span></a>
</li><li class="td-sidebar-nav__section-title td-sidebar-nav__section without-child collapse" id=m-docsnavpatternspatternssecurity3-single-point-of-access-li>
<a href=/docs/navpatterns/patterns/security/3-single-point-of-access/ class="align-left pl-0 td-sidebar-link td-sidebar-link__page" id=m-docsnavpatternspatternssecurity3-single-point-of-access><span>Single Point of Access</span></a>
</li><li class="td-sidebar-nav__section-title td-sidebar-nav__section without-child collapse" id=m-docsnavpatternspatternssecurity4-masked-text-li>
<a href=/docs/navpatterns/patterns/security/4-masked-text/ class="align-left pl-0 td-sidebar-link td-sidebar-link__page" id=m-docsnavpatternspatternssecurity4-masked-text><span>Masked Text</span></a>
</li><li class="td-sidebar-nav__section-title td-sidebar-nav__section without-child collapse" id=m-docsnavpatternspatternssecurity5-ssl-in-nav-li>
<a href=/docs/navpatterns/patterns/security/5-ssl-in-nav/ class="align-left pl-0 td-sidebar-link td-sidebar-link__page" id=m-docsnavpatternspatternssecurity5-ssl-in-nav><span>SSL in NAV</span></a>
</li>
</ul>
</li><li class="td-sidebar-nav__section-title td-sidebar-nav__section without-child" id=m-docsnavpatternspatternssetup-specificity-fallback-li>
<a href=/docs/navpatterns/patterns/setup-specificity-fallback/ class="align-left pl-0 td-sidebar-link td-sidebar-link__page" id=m-docsnavpatternspatternssetup-specificity-fallback><span>Setup Specificity Fallback</span></a>
</li><li class="td-sidebar-nav__section-title td-sidebar-nav__section without-child" id=m-docsnavpatternspatternssilent-file-upload-and-download-li>
<a href=/docs/navpatterns/patterns/silent-file-upload-and-download/ class="align-left pl-0 td-sidebar-link td-sidebar-link__page" id=m-docsnavpatternspatternssilent-file-upload-and-download><span>Silent File Upload and Download</span></a>
</li><li class="td-sidebar-nav__section-title td-sidebar-nav__section with-child" id=m-docsnavpatternspatternssingleton-li>
<a href=/docs/navpatterns/patterns/singleton/ class="align-left pl-0 td-sidebar-link td-sidebar-link__section" id=m-docsnavpatternspatternssingleton><span>Singleton</span></a>
<ul class="ul-4 foldable">
<li class="td-sidebar-nav__section-title td-sidebar-nav__section without-child collapse" id=m-docsnavpatternspatternssingletonsingleton-codeunit-li>
<a href=/docs/navpatterns/patterns/singleton/singleton-codeunit/ class="align-left pl-0 td-sidebar-link td-sidebar-link__page" id=m-docsnavpatternspatternssingletonsingleton-codeunit><span>Singleton Codeunit</span></a>
</li><li class="td-sidebar-nav__section-title td-sidebar-nav__section with-child collapse" id=m-docsnavpatternspatternssingletonsingleton-table-li>
<a href=/docs/navpatterns/patterns/singleton/singleton-table/ class="align-left pl-0 td-sidebar-link td-sidebar-link__section" id=m-docsnavpatternspatternssingletonsingleton-table><span>Singleton Table</span></a>
<ul class="ul-5 foldable">
<li class="td-sidebar-nav__section-title td-sidebar-nav__section without-child collapse" id=m-docsnavpatternspatternssingletonsingleton-tablecue-table-li>
<a href=/docs/navpatterns/patterns/singleton/singleton-table/cue-table/ class="align-left pl-0 td-sidebar-link td-sidebar-link__page" id=m-docsnavpatternspatternssingletonsingleton-tablecue-table><span>Cue Table</span></a>
</li><li class="td-sidebar-nav__section-title td-sidebar-nav__section without-child collapse" id=m-docsnavpatternspatternssingletonsingleton-tablesetup-table-li>
<a href=/docs/navpatterns/patterns/singleton/singleton-table/setup-table/ class="align-left pl-0 td-sidebar-link td-sidebar-link__page" id=m-docsnavpatternspatternssingletonsingleton-tablesetup-table><span>Setup Table</span></a>
</li>
</ul>
</li>
</ul>
</li><li class="td-sidebar-nav__section-title td-sidebar-nav__section without-child" id=m-docsnavpatternspatternsstandard-journal-li>
<a href=/docs/navpatterns/patterns/standard-journal/ class="align-left pl-0 td-sidebar-link td-sidebar-link__page" id=m-docsnavpatternspatternsstandard-journal><span>Standard Journal</span></a>
</li><li class="td-sidebar-nav__section-title td-sidebar-nav__section without-child" id=m-docsnavpatternspatternstemporary-dataset-report-li>
<a href=/docs/navpatterns/patterns/temporary-dataset-report/ class="align-left pl-0 td-sidebar-link td-sidebar-link__page" id=m-docsnavpatternspatternstemporary-dataset-report><span>Temporary Dataset Report</span></a>
</li><li class="td-sidebar-nav__section-title td-sidebar-nav__section without-child" id=m-docsnavpatternspatternstotals-and-discounts-on-subpages-sales-and-purchases-li>
<a href=/docs/navpatterns/patterns/totals-and-discounts-on-subpages-sales-and-purchases/ class="align-left pl-0 td-sidebar-link td-sidebar-link__page" id=m-docsnavpatternspatternstotals-and-discounts-on-subpages-sales-and-purchases><span>Totals and Discounts on Subpages Sales and Purchases</span></a>
</li><li class="td-sidebar-nav__section-title td-sidebar-nav__section without-child" id=m-docsnavpatternspatternstransfer-custom-fields-li>
<a href=/docs/navpatterns/patterns/transfer-custom-fields/ class="align-left pl-0 td-sidebar-link td-sidebar-link__page" id=m-docsnavpatternspatternstransfer-custom-fields><span>Transfer Custom Fields</span></a>
</li><li class="td-sidebar-nav__section-title td-sidebar-nav__section without-child" id=m-docsnavpatternspatternsvariant-facade-li>
<a href=/docs/navpatterns/patterns/variant-facade/ class="align-left pl-0 td-sidebar-link td-sidebar-link__page" id=m-docsnavpatternspatternsvariant-facade><span>Variant Facade</span></a>
</li>
</ul>
</li><li class="td-sidebar-nav__section-title td-sidebar-nav__section with-child" id=m-docsnavpatterns2-anti-patterns-li>
<a href=/docs/navpatterns/2-anti-patterns/ class="align-left pl-0 td-sidebar-link td-sidebar-link__section" id=m-docsnavpatterns2-anti-patterns><span>2. Anti-Patterns</span></a>
<ul class="ul-3 foldable">
<li class="td-sidebar-nav__section-title td-sidebar-nav__section without-child collapse" id=m-docsnavpatterns2-anti-patternsnav-upgrade-li>
<a href=/docs/navpatterns/2-anti-patterns/nav-upgrade/ class="align-left pl-0 td-sidebar-link td-sidebar-link__page" id=m-docsnavpatterns2-anti-patternsnav-upgrade><span>Nav Upgrade</span></a>
</li><li class="td-sidebar-nav__section-title td-sidebar-nav__section without-child collapse" id=m-docsnavpatterns2-anti-patternsreusable-bugs-li>
<a href=/docs/navpatterns/2-anti-patterns/reusable-bugs/ class="align-left pl-0 td-sidebar-link td-sidebar-link__page" id=m-docsnavpatterns2-anti-patternsreusable-bugs><span>Reusable Bugs</span></a>
</li>
</ul>
</li><li class="td-sidebar-nav__section-title td-sidebar-nav__section with-child" id=m-docsnavpatterns3-cal-coding-guidelines-li>
<a href=/docs/navpatterns/3-cal-coding-guidelines/ class="align-left pl-0 td-sidebar-link td-sidebar-link__section" id=m-docsnavpatterns3-cal-coding-guidelines><span>3. CAL Coding Guidelines</span></a>
<ul class="ul-3 foldable">
<li class="td-sidebar-nav__section-title td-sidebar-nav__section with-child collapse" id=m-docsnavpatterns3-cal-coding-guidelinesdesign-li>
<a href=/docs/navpatterns/3-cal-coding-guidelines/design/ class="align-left pl-0 td-sidebar-link td-sidebar-link__section" id=m-docsnavpatterns3-cal-coding-guidelinesdesign><span>Design</span></a>
<ul class="ul-4 foldable">
<li class="td-sidebar-nav__section-title td-sidebar-nav__section without-child collapse" id=m-docsnavpatterns3-cal-coding-guidelinesdesignby-reference-parameters-li>
<a href=/docs/navpatterns/3-cal-coding-guidelines/design/by-reference-parameters/ class="align-left pl-0 td-sidebar-link td-sidebar-link__page" id=m-docsnavpatterns3-cal-coding-guidelinesdesignby-reference-parameters><span>By Reference Parameters</span></a>
</li><li class="td-sidebar-nav__section-title td-sidebar-nav__section without-child collapse" id=m-docsnavpatterns3-cal-coding-guidelinesdesignclass-coupling-li>
<a href=/docs/navpatterns/3-cal-coding-guidelines/design/class-coupling/ class="align-left pl-0 td-sidebar-link td-sidebar-link__page" id=m-docsnavpatterns3-cal-coding-guidelinesdesignclass-coupling><span>Class Coupling</span></a>
</li><li class="td-sidebar-nav__section-title td-sidebar-nav__section without-child collapse" id=m-docsnavpatterns3-cal-coding-guidelinesdesigncyclomatic-complexity-li>
<a href=/docs/navpatterns/3-cal-coding-guidelines/design/cyclomatic-complexity/ class="align-left pl-0 td-sidebar-link td-sidebar-link__page" id=m-docsnavpatterns3-cal-coding-guidelinesdesigncyclomatic-complexity><span>Cyclomatic Complexity</span></a>
</li><li class="td-sidebar-nav__section-title td-sidebar-nav__section without-child collapse" id=m-docsnavpatterns3-cal-coding-guidelinesdesignencapsulate-local-functionality-li>
<a href=/docs/navpatterns/3-cal-coding-guidelines/design/encapsulate-local-functionality/ class="align-left pl-0 td-sidebar-link td-sidebar-link__page" id=m-docsnavpatterns3-cal-coding-guidelinesdesignencapsulate-local-functionality><span>Encapsulate Local Functionality</span></a>
</li><li class="td-sidebar-nav__section-title td-sidebar-nav__section without-child collapse" id=m-docsnavpatterns3-cal-coding-guidelinesdesignfindset-findfirst-findlast-li>
<a href=/docs/navpatterns/3-cal-coding-guidelines/design/findset-findfirst-findlast/ class="align-left pl-0 td-sidebar-link td-sidebar-link__page" id=m-docsnavpatterns3-cal-coding-guidelinesdesignfindset-findfirst-findlast><span>FINDSET FINDFIRST FINDLAST</span></a>
</li><li class="td-sidebar-nav__section-title td-sidebar-nav__section without-child collapse" id=m-docsnavpatterns3-cal-coding-guidelinesdesigninitialized-variables-li>
<a href=/docs/navpatterns/3-cal-coding-guidelines/design/initialized-variables/ class="align-left pl-0 td-sidebar-link td-sidebar-link__page" id=m-docsnavpatterns3-cal-coding-guidelinesdesigninitialized-variables><span>Initialized Variables</span></a>
</li><li class="td-sidebar-nav__section-title td-sidebar-nav__section without-child collapse" id=m-docsnavpatterns3-cal-coding-guidelinesdesignmaintainability-index-li>
<a href=/docs/navpatterns/3-cal-coding-guidelines/design/maintainability-index/ class="align-left pl-0 td-sidebar-link td-sidebar-link__page" id=m-docsnavpatterns3-cal-coding-guidelinesdesignmaintainability-index><span>Maintainability Index</span></a>
</li><li class="td-sidebar-nav__section-title td-sidebar-nav__section without-child collapse" id=m-docsnavpatterns3-cal-coding-guidelinesdesignparameter-placeholders-li>
<a href=/docs/navpatterns/3-cal-coding-guidelines/design/parameter-placeholders/ class="align-left pl-0 td-sidebar-link td-sidebar-link__page" id=m-docsnavpatterns3-cal-coding-guidelinesdesignparameter-placeholders><span>Parameter Placeholders</span></a>
</li><li class="td-sidebar-nav__section-title td-sidebar-nav__section without-child collapse" id=m-docsnavpatterns3-cal-coding-guidelinesdesignstatic-object-invocation-li>
<a href=/docs/navpatterns/3-cal-coding-guidelines/design/static-object-invocation/ class="align-left pl-0 td-sidebar-link td-sidebar-link__page" id=m-docsnavpatterns3-cal-coding-guidelinesdesignstatic-object-invocation><span>Static Object Invocation</span></a>
</li><li class="td-sidebar-nav__section-title td-sidebar-nav__section without-child collapse" id=m-docsnavpatterns3-cal-coding-guidelinesdesignunreachable-code-li>
<a href=/docs/navpatterns/3-cal-coding-guidelines/design/unreachable-code/ class="align-left pl-0 td-sidebar-link td-sidebar-link__page" id=m-docsnavpatterns3-cal-coding-guidelinesdesignunreachable-code><span>Unreachable Code</span></a>
</li><li class="td-sidebar-nav__section-title td-sidebar-nav__section without-child collapse" id=m-docsnavpatterns3-cal-coding-guidelinesdesignunused-initialized-variables-li>
<a href=/docs/navpatterns/3-cal-coding-guidelines/design/unused-initialized-variables/ class="align-left pl-0 td-sidebar-link td-sidebar-link__page" id=m-docsnavpatterns3-cal-coding-guidelinesdesignunused-initialized-variables><span>Unused Initialized Variables</span></a>
</li><li class="td-sidebar-nav__section-title td-sidebar-nav__section without-child collapse" id=m-docsnavpatterns3-cal-coding-guidelinesdesignunused-variables-li>
<a href=/docs/navpatterns/3-cal-coding-guidelines/design/unused-variables/ class="align-left pl-0 td-sidebar-link td-sidebar-link__page" id=m-docsnavpatterns3-cal-coding-guidelinesdesignunused-variables><span>Unused Variables</span></a>
</li><li class="td-sidebar-nav__section-title td-sidebar-nav__section without-child collapse" id=m-docsnavpatterns3-cal-coding-guidelinesdesignvariable-capacity-mismatch-li>
<a href=/docs/navpatterns/3-cal-coding-guidelines/design/variable-capacity-mismatch/ class="align-left pl-0 td-sidebar-link td-sidebar-link__page" id=m-docsnavpatterns3-cal-coding-guidelinesdesignvariable-capacity-mismatch><span>Variable Capacity Mismatch</span></a>
</li><li class="td-sidebar-nav__section-title td-sidebar-nav__section without-child collapse" id=m-docsnavpatterns3-cal-coding-guidelinesdesignwith-scope-name-collision-li>
<a href=/docs/navpatterns/3-cal-coding-guidelines/design/with-scope-name-collision/ class="align-left pl-0 td-sidebar-link td-sidebar-link__page" id=m-docsnavpatterns3-cal-coding-guidelinesdesignwith-scope-name-collision><span>WITH Scope Name Collision</span></a>
</li>
</ul>
</li><li class="td-sidebar-nav__section-title td-sidebar-nav__section without-child collapse" id=m-docsnavpatterns3-cal-coding-guidelinesinternally-used-dot-net-types-li>
<a href=/docs/navpatterns/3-cal-coding-guidelines/internally-used-dot-net-types/ class="align-left pl-0 td-sidebar-link td-sidebar-link__page" id=m-docsnavpatterns3-cal-coding-guidelinesinternally-used-dot-net-types><span>Internally used DotNet Types</span></a>
</li><li class="td-sidebar-nav__section-title td-sidebar-nav__section with-child collapse" id=m-docsnavpatterns3-cal-coding-guidelinesinternationalization-li>
<a href=/docs/navpatterns/3-cal-coding-guidelines/internationalization/ class="align-left pl-0 td-sidebar-link td-sidebar-link__section" id=m-docsnavpatterns3-cal-coding-guidelinesinternationalization><span>Internationalization</span></a>
<ul class="ul-4 foldable">
<li class="td-sidebar-nav__section-title td-sidebar-nav__section without-child collapse" id=m-docsnavpatterns3-cal-coding-guidelinesinternationalizationusing-calcdate-li>
<a href=/docs/navpatterns/3-cal-coding-guidelines/internationalization/using-calcdate/ class="align-left pl-0 td-sidebar-link td-sidebar-link__page" id=m-docsnavpatterns3-cal-coding-guidelinesinternationalizationusing-calcdate><span>Using Calcdate</span></a>
</li>
</ul>
</li><li class="td-sidebar-nav__section-title td-sidebar-nav__section with-child collapse" id=m-docsnavpatterns3-cal-coding-guidelineslocalizability-li>
<a href=/docs/navpatterns/3-cal-coding-guidelines/localizability/ class="align-left pl-0 td-sidebar-link td-sidebar-link__section" id=m-docsnavpatterns3-cal-coding-guidelineslocalizability><span>Localizability</span></a>
<ul class="ul-4 foldable">
<li class="td-sidebar-nav__section-title td-sidebar-nav__section without-child collapse" id=m-docsnavpatterns3-cal-coding-guidelineslocalizabilitycaptionml-for-system-tables-li>
<a href=/docs/navpatterns/3-cal-coding-guidelines/localizability/captionml-for-system-tables/ class="align-left pl-0 td-sidebar-link td-sidebar-link__page" id=m-docsnavpatterns3-cal-coding-guidelineslocalizabilitycaptionml-for-system-tables><span>CaptionML on System Pages</span></a>
</li><li class="td-sidebar-nav__section-title td-sidebar-nav__section without-child collapse" id=m-docsnavpatterns3-cal-coding-guidelineslocalizabilityfieldcaption-and-tablecaption-li>
<a href=/docs/navpatterns/3-cal-coding-guidelines/localizability/fieldcaption-and-tablecaption/ class="align-left pl-0 td-sidebar-link td-sidebar-link__page" id=m-docsnavpatterns3-cal-coding-guidelineslocalizabilityfieldcaption-and-tablecaption><span>FIELDCAPTION and TABLECAPTION</span></a>
</li><li class="td-sidebar-nav__section-title td-sidebar-nav__section without-child collapse" id=m-docsnavpatterns3-cal-coding-guidelineslocalizabilityglobal-text-constants-li>
<a href=/docs/navpatterns/3-cal-coding-guidelines/localizability/global-text-constants/ class="align-left pl-0 td-sidebar-link td-sidebar-link__page" id=m-docsnavpatterns3-cal-coding-guidelineslocalizabilityglobal-text-constants><span>Global Text Constants</span></a>
</li><li class="td-sidebar-nav__section-title td-sidebar-nav__section without-child collapse" id=m-docsnavpatterns3-cal-coding-guidelineslocalizabilityuse-text-constants-li>
<a href=/docs/navpatterns/3-cal-coding-guidelines/localizability/use-text-constants/ class="align-left pl-0 td-sidebar-link td-sidebar-link__page" id=m-docsnavpatterns3-cal-coding-guidelineslocalizabilityuse-text-constants><span>Use Text Constants</span></a>
</li><li class="td-sidebar-nav__section-title td-sidebar-nav__section without-child collapse" id=m-docsnavpatterns3-cal-coding-guidelineslocalizabilityusing-optioncaptionml-li>
<a href=/docs/navpatterns/3-cal-coding-guidelines/localizability/using-optioncaptionml/ class="align-left pl-0 td-sidebar-link td-sidebar-link__page" id=m-docsnavpatterns3-cal-coding-guidelineslocalizabilityusing-optioncaptionml><span>Using OptionCaptionML</span></a>
</li>
</ul>
</li><li class="td-sidebar-nav__section-title td-sidebar-nav__section with-child collapse" id=m-docsnavpatterns3-cal-coding-guidelinesreadability-li>
<a href=/docs/navpatterns/3-cal-coding-guidelines/readability/ class="align-left pl-0 td-sidebar-link td-sidebar-link__section" id=m-docsnavpatterns3-cal-coding-guidelinesreadability><span>Readability</span></a>
<ul class="ul-4 foldable">
<li class="td-sidebar-nav__section-title td-sidebar-nav__section without-child collapse" id=m-docsnavpatterns3-cal-coding-guidelinesreadabilitybegin-as-an-afterword-li>
<a href=/docs/navpatterns/3-cal-coding-guidelines/readability/begin-as-an-afterword/ class="align-left pl-0 td-sidebar-link td-sidebar-link__page" id=m-docsnavpatterns3-cal-coding-guidelinesreadabilitybegin-as-an-afterword><span>Begin as an 'After Word'</span></a>
</li><li class="td-sidebar-nav__section-title td-sidebar-nav__section without-child collapse" id=m-docsnavpatterns3-cal-coding-guidelinesreadabilitybegin-end-li>
<a href=/docs/navpatterns/3-cal-coding-guidelines/readability/begin-end/ class="align-left pl-0 td-sidebar-link td-sidebar-link__page" id=m-docsnavpatterns3-cal-coding-guidelinesreadabilitybegin-end><span>Begin-End - Compound Only</span></a>
</li><li class="td-sidebar-nav__section-title td-sidebar-nav__section without-child collapse" id=m-docsnavpatterns3-cal-coding-guidelinesreadabilitybinary-operator-line-start-li>
<a href=/docs/navpatterns/3-cal-coding-guidelines/readability/binary-operator-line-start/ class="align-left pl-0 td-sidebar-link td-sidebar-link__page" id=m-docsnavpatterns3-cal-coding-guidelinesreadabilitybinary-operator-line-start><span>Binary Operator to Start Line</span></a>
</li><li class="td-sidebar-nav__section-title td-sidebar-nav__section without-child collapse" id=m-docsnavpatterns3-cal-coding-guidelinesreadabilityblank-lines-li>
<a href=/docs/navpatterns/3-cal-coding-guidelines/readability/blank-lines/ class="align-left pl-0 td-sidebar-link td-sidebar-link__page" id=m-docsnavpatterns3-cal-coding-guidelinesreadabilityblank-lines><span>Blank Lines</span></a>
</li><li class="td-sidebar-nav__section-title td-sidebar-nav__section without-child collapse" id=m-docsnavpatterns3-cal-coding-guidelinesreadabilitycase-actions-li>
<a href=/docs/navpatterns/3-cal-coding-guidelines/readability/case-actions/ class="align-left pl-0 td-sidebar-link td-sidebar-link__page" id=m-docsnavpatterns3-cal-coding-guidelinesreadabilitycase-actions><span>CASE Action</span></a>
</li><li class="td-sidebar-nav__section-title td-sidebar-nav__section without-child collapse" id=m-docsnavpatterns3-cal-coding-guidelinesreadabilitycolon-usage-in-case-li>
<a href=/docs/navpatterns/3-cal-coding-guidelines/readability/colon-usage-in-case/ class="align-left pl-0 td-sidebar-link td-sidebar-link__page" id=m-docsnavpatterns3-cal-coding-guidelinesreadabilitycolon-usage-in-case><span>Colon usage in CASE</span></a>
</li><li class="td-sidebar-nav__section-title td-sidebar-nav__section without-child collapse" id=m-docsnavpatterns3-cal-coding-guidelinesreadabilitycomments-curly-brackets-li>
<a href=/docs/navpatterns/3-cal-coding-guidelines/readability/comments-curly-brackets/ class="align-left pl-0 td-sidebar-link td-sidebar-link__page" id=m-docsnavpatterns3-cal-coding-guidelinesreadabilitycomments-curly-brackets><span>Comments inside Curly Brackets</span></a>
</li><li class="td-sidebar-nav__section-title td-sidebar-nav__section without-child collapse" id=m-docsnavpatterns3-cal-coding-guidelinesreadabilitycomments-spacing-li>
<a href=/docs/navpatterns/3-cal-coding-guidelines/readability/comments-spacing/ class="align-left pl-0 td-sidebar-link td-sidebar-link__page" id=m-docsnavpatterns3-cal-coding-guidelinesreadabilitycomments-spacing><span>Comment Spacing</span></a>
</li><li class="td-sidebar-nav__section-title td-sidebar-nav__section without-child collapse" id=m-docsnavpatterns3-cal-coding-guidelinesreadabilityend-else-pair-li>
<a href=/docs/navpatterns/3-cal-coding-guidelines/readability/end-else-pair/ class="align-left pl-0 td-sidebar-link td-sidebar-link__page" id=m-docsnavpatterns3-cal-coding-guidelinesreadabilityend-else-pair><span>END ELSE Pair</span></a>
</li><li class="td-sidebar-nav__section-title td-sidebar-nav__section without-child collapse" id=m-docsnavpatterns3-cal-coding-guidelinesreadabilityindentation-li>
<a href=/docs/navpatterns/3-cal-coding-guidelines/readability/indentation/ class="align-left pl-0 td-sidebar-link td-sidebar-link__page" id=m-docsnavpatterns3-cal-coding-guidelinesreadabilityindentation><span>Indentation</span></a>
</li><li class="td-sidebar-nav__section-title td-sidebar-nav__section without-child collapse" id=m-docsnavpatterns3-cal-coding-guidelinesreadabilitykeyword-pairs-indentation-li>
<a href=/docs/navpatterns/3-cal-coding-guidelines/readability/keyword-pairs-indentation/ class="align-left pl-0 td-sidebar-link td-sidebar-link__page" id=m-docsnavpatterns3-cal-coding-guidelinesreadabilitykeyword-pairs-indentation><span>Keyword Pairs - Indentation</span></a>
</li><li class="td-sidebar-nav__section-title td-sidebar-nav__section without-child collapse" id=m-docsnavpatterns3-cal-coding-guidelinesreadabilityline-start-keywords-li>
<a href=/docs/navpatterns/3-cal-coding-guidelines/readability/line-start-keywords/ class="align-left pl-0 td-sidebar-link td-sidebar-link__page" id=m-docsnavpatterns3-cal-coding-guidelinesreadabilityline-start-keywords><span>Line Start Keywords</span></a>
</li><li class="td-sidebar-nav__section-title td-sidebar-nav__section without-child collapse" id=m-docsnavpatterns3-cal-coding-guidelinesreadabilitylonely-repeat-li>
<a href=/docs/navpatterns/3-cal-coding-guidelines/readability/lonely-repeat/ class="align-left pl-0 td-sidebar-link td-sidebar-link__page" id=m-docsnavpatterns3-cal-coding-guidelinesreadabilitylonely-repeat><span>Lonely Repeat</span></a>
</li><li class="td-sidebar-nav__section-title td-sidebar-nav__section without-child collapse" id=m-docsnavpatterns3-cal-coding-guidelinesreadabilitynamed-invocations-li>
<a href=/docs/navpatterns/3-cal-coding-guidelines/readability/named-invocations/ class="align-left pl-0 td-sidebar-link td-sidebar-link__page" id=m-docsnavpatterns3-cal-coding-guidelinesreadabilitynamed-invocations><span>Named Invocations</span></a>
</li><li class="td-sidebar-nav__section-title td-sidebar-nav__section without-child collapse" id=m-docsnavpatterns3-cal-coding-guidelinesreadabilitynested-withs-li>
<a href=/docs/navpatterns/3-cal-coding-guidelines/readability/nested-withs/ class="align-left pl-0 td-sidebar-link td-sidebar-link__page" id=m-docsnavpatterns3-cal-coding-guidelinesreadabilitynested-withs><span>Nested WITHs</span></a>
</li><li class="td-sidebar-nav__section-title td-sidebar-nav__section without-child collapse" id=m-docsnavpatterns3-cal-coding-guidelinesreadabilityone-statement-per-line-li>
<a href=/docs/navpatterns/3-cal-coding-guidelines/readability/one-statement-per-line/ class="align-left pl-0 td-sidebar-link td-sidebar-link__page" id=m-docsnavpatterns3-cal-coding-guidelinesreadabilityone-statement-per-line><span>One Statement Per Line</span></a>
</li><li class="td-sidebar-nav__section-title td-sidebar-nav__section without-child collapse" id=m-docsnavpatterns3-cal-coding-guidelinesreadabilityseparate-if-and-else-li>
<a href=/docs/navpatterns/3-cal-coding-guidelines/readability/separate-if-and-else/ class="align-left pl-0 td-sidebar-link td-sidebar-link__page" id=m-docsnavpatterns3-cal-coding-guidelinesreadabilityseparate-if-and-else><span>Separate IF and ELSE</span></a>
</li><li class="td-sidebar-nav__section-title td-sidebar-nav__section without-child collapse" id=m-docsnavpatterns3-cal-coding-guidelinesreadabilityspacing-binary-operators-li>
<a href=/docs/navpatterns/3-cal-coding-guidelines/readability/spacing-binary-operators/ class="align-left pl-0 td-sidebar-link td-sidebar-link__page" id=m-docsnavpatterns3-cal-coding-guidelinesreadabilityspacing-binary-operators><span>Spacing Binary Operators</span></a>
</li><li class="td-sidebar-nav__section-title td-sidebar-nav__section without-child collapse" id=m-docsnavpatterns3-cal-coding-guidelinesreadabilityspacing-brackets-and-li>
<a href=/docs/navpatterns/3-cal-coding-guidelines/readability/spacing-brackets-and/ class="align-left pl-0 td-sidebar-link td-sidebar-link__page" id=m-docsnavpatterns3-cal-coding-guidelinesreadabilityspacing-brackets-and><span>Spacing Brackets and ::</span></a>
</li><li class="td-sidebar-nav__section-title td-sidebar-nav__section without-child collapse" id=m-docsnavpatterns3-cal-coding-guidelinesreadabilityspacing-unary-operators-li>
<a href=/docs/navpatterns/3-cal-coding-guidelines/readability/spacing-unary-operators/ class="align-left pl-0 td-sidebar-link td-sidebar-link__page" id=m-docsnavpatterns3-cal-coding-guidelinesreadabilityspacing-unary-operators><span>Spacing Unary Operators</span></a>
</li><li class="td-sidebar-nav__section-title td-sidebar-nav__section without-child collapse" id=m-docsnavpatterns3-cal-coding-guidelinesreadabilitysuggested-abbreviations-li>
<a href=/docs/navpatterns/3-cal-coding-guidelines/readability/suggested-abbreviations/ class="align-left pl-0 td-sidebar-link td-sidebar-link__page" id=m-docsnavpatterns3-cal-coding-guidelinesreadabilitysuggested-abbreviations><span>Suggested Abbreviations</span></a>
</li><li class="td-sidebar-nav__section-title td-sidebar-nav__section without-child collapse" id=m-docsnavpatterns3-cal-coding-guidelinesreadabilitytemporary-variable-naming-li>
<a href=/docs/navpatterns/3-cal-coding-guidelines/readability/temporary-variable-naming/ class="align-left pl-0 td-sidebar-link td-sidebar-link__page" id=m-docsnavpatterns3-cal-coding-guidelinesreadabilitytemporary-variable-naming><span>Temporary Variable Naming</span></a>
</li><li class="td-sidebar-nav__section-title td-sidebar-nav__section without-child collapse" id=m-docsnavpatterns3-cal-coding-guidelinesreadabilitytextconst-suffixes-li>
<a href=/docs/navpatterns/3-cal-coding-guidelines/readability/textconst-suffixes/ class="align-left pl-0 td-sidebar-link td-sidebar-link__page" id=m-docsnavpatterns3-cal-coding-guidelinesreadabilitytextconst-suffixes><span>TextConst Suffixes</span></a>
</li><li class="td-sidebar-nav__section-title td-sidebar-nav__section without-child collapse" id=m-docsnavpatterns3-cal-coding-guidelinesreadabilityunary-operator-line-end-li>
<a href=/docs/navpatterns/3-cal-coding-guidelines/readability/unary-operator-line-end/ class="align-left pl-0 td-sidebar-link td-sidebar-link__page" id=m-docsnavpatterns3-cal-coding-guidelinesreadabilityunary-operator-line-end><span>Unary Operator Line End</span></a>
</li><li class="td-sidebar-nav__section-title td-sidebar-nav__section without-child collapse" id=m-docsnavpatterns3-cal-coding-guidelinesreadabilityunnecessary-compound-parenthesis-li>
<a href=/docs/navpatterns/3-cal-coding-guidelines/readability/unnecessary-compound-parenthesis/ class="align-left pl-0 td-sidebar-link td-sidebar-link__page" id=m-docsnavpatterns3-cal-coding-guidelinesreadabilityunnecessary-compound-parenthesis><span>Unnecessary Compound Parenthesis</span></a>
</li><li class="td-sidebar-nav__section-title td-sidebar-nav__section without-child collapse" id=m-docsnavpatterns3-cal-coding-guidelinesreadabilityunnecessary-else-li>
<a href=/docs/navpatterns/3-cal-coding-guidelines/readability/unnecessary-else/ class="align-left pl-0 td-sidebar-link td-sidebar-link__page" id=m-docsnavpatterns3-cal-coding-guidelinesreadabilityunnecessary-else><span>Unnecessary ELSE</span></a>
</li><li class="td-sidebar-nav__section-title td-sidebar-nav__section without-child collapse" id=m-docsnavpatterns3-cal-coding-guidelinesreadabilityunnecessary-function-parenthesis-li>
<a href=/docs/navpatterns/3-cal-coding-guidelines/readability/unnecessary-function-parenthesis/ class="align-left pl-0 td-sidebar-link td-sidebar-link__page" id=m-docsnavpatterns3-cal-coding-guidelinesreadabilityunnecessary-function-parenthesis><span>Unnecessary Function Parenthesis</span></a>
</li><li class="td-sidebar-nav__section-title td-sidebar-nav__section without-child collapse" id=m-docsnavpatterns3-cal-coding-guidelinesreadabilityunnecessary-separators-li>
<a href=/docs/navpatterns/3-cal-coding-guidelines/readability/unnecessary-separators/ class="align-left pl-0 td-sidebar-link td-sidebar-link__page" id=m-docsnavpatterns3-cal-coding-guidelinesreadabilityunnecessary-separators><span>Unnecessary Separators</span></a>
</li><li class="td-sidebar-nav__section-title td-sidebar-nav__section without-child collapse" id=m-docsnavpatterns3-cal-coding-guidelinesreadabilityunnecessary-truefalse-li>
<a href=/docs/navpatterns/3-cal-coding-guidelines/readability/unnecessary-truefalse/ class="align-left pl-0 td-sidebar-link td-sidebar-link__page" id=m-docsnavpatterns3-cal-coding-guidelinesreadabilityunnecessary-truefalse><span>Unnecessary TRUE/FALSE</span></a>
</li><li class="td-sidebar-nav__section-title td-sidebar-nav__section without-child collapse" id=m-docsnavpatterns3-cal-coding-guidelinesreadabilityvariable-already-scoped-li>
<a href=/docs/navpatterns/3-cal-coding-guidelines/readability/variable-already-scoped/ class="align-left pl-0 td-sidebar-link td-sidebar-link__page" id=m-docsnavpatterns3-cal-coding-guidelinesreadabilityvariable-already-scoped><span>Variable Already Scoped</span></a>
</li><li class="td-sidebar-nav__section-title td-sidebar-nav__section without-child collapse" id=m-docsnavpatterns3-cal-coding-guidelinesreadabilityvariable-naming-li>
<a href=/docs/navpatterns/3-cal-coding-guidelines/readability/variable-naming/ class="align-left pl-0 td-sidebar-link td-sidebar-link__page" id=m-docsnavpatterns3-cal-coding-guidelinesreadabilityvariable-naming><span>Variable Naming</span></a>
</li><li class="td-sidebar-nav__section-title td-sidebar-nav__section without-child collapse" id=m-docsnavpatterns3-cal-coding-guidelinesreadabilityvariables-declarations-order-li>
<a href=/docs/navpatterns/3-cal-coding-guidelines/readability/variables-declarations-order/ class="align-left pl-0 td-sidebar-link td-sidebar-link__page" id=m-docsnavpatterns3-cal-coding-guidelinesreadabilityvariables-declarations-order><span>Variables Declarations Order</span></a>
</li>
</ul>
</li><li class="td-sidebar-nav__section-title td-sidebar-nav__section with-child collapse" id=m-docsnavpatterns3-cal-coding-guidelinesux-li>
<a href=/docs/navpatterns/3-cal-coding-guidelines/ux/ class="align-left pl-0 td-sidebar-link td-sidebar-link__section" id=m-docsnavpatterns3-cal-coding-guidelinesux><span>UX</span></a>
<ul class="ul-4 foldable">
<li class="td-sidebar-nav__section-title td-sidebar-nav__section without-child collapse" id=m-docsnavpatterns3-cal-coding-guidelinesuxactions-images-li>
<a href=/docs/navpatterns/3-cal-coding-guidelines/ux/actions-images/ class="align-left pl-0 td-sidebar-link td-sidebar-link__page" id=m-docsnavpatterns3-cal-coding-guidelinesuxactions-images><span>Actions - Images</span></a>
</li><li class="td-sidebar-nav__section-title td-sidebar-nav__section without-child collapse" id=m-docsnavpatterns3-cal-coding-guidelinesuxconfirm-li>
<a href=/docs/navpatterns/3-cal-coding-guidelines/ux/confirm/ class="align-left pl-0 td-sidebar-link td-sidebar-link__page" id=m-docsnavpatterns3-cal-coding-guidelinesuxconfirm><span>CONFIRM</span></a>
</li><li class="td-sidebar-nav__section-title td-sidebar-nav__section without-child collapse" id=m-docsnavpatterns3-cal-coding-guidelinesuxfielderror-li>
<a href=/docs/navpatterns/3-cal-coding-guidelines/ux/fielderror/ class="align-left pl-0 td-sidebar-link td-sidebar-link__page" id=m-docsnavpatterns3-cal-coding-guidelinesuxfielderror><span>FIELDERROR</span></a>
</li><li class="td-sidebar-nav__section-title td-sidebar-nav__section without-child collapse" id=m-docsnavpatterns3-cal-coding-guidelinesuxmessage-and-error-li>
<a href=/docs/navpatterns/3-cal-coding-guidelines/ux/message-and-error/ class="align-left pl-0 td-sidebar-link td-sidebar-link__page" id=m-docsnavpatterns3-cal-coding-guidelinesuxmessage-and-error><span>MESSAGE and ERROR</span></a>
</li>
</ul>
</li>
</ul>
</li><li class="td-sidebar-nav__section-title td-sidebar-nav__section with-child" id=m-docsnavpatterns4-get-involved-li>
<a href=/docs/navpatterns/4-get-involved/ class="align-left pl-0 td-sidebar-link td-sidebar-link__section" id=m-docsnavpatterns4-get-involved><span>(OLD) Get Involved</span></a>
<ul class="ul-3 foldable">
<li class="td-sidebar-nav__section-title td-sidebar-nav__section without-child collapse" id=m-docsnavpatterns4-get-involvedcode-of-conduct-li>
<a href=/docs/navpatterns/4-get-involved/code-of-conduct/ class="align-left pl-0 td-sidebar-link td-sidebar-link__page" id=m-docsnavpatterns4-get-involvedcode-of-conduct><span>Code of Conduct</span></a>
</li><li class="td-sidebar-nav__section-title td-sidebar-nav__section without-child collapse" id=m-docsnavpatterns4-get-involvedpatterns-authors-li>
<a href=/docs/navpatterns/4-get-involved/patterns-authors/ class="align-left pl-0 td-sidebar-link td-sidebar-link__page" id=m-docsnavpatterns4-get-involvedpatterns-authors><span>Patterns Authors</span></a>
</li><li class="td-sidebar-nav__section-title td-sidebar-nav__section without-child collapse" id=m-docsnavpatterns4-get-involvedtemplate-for-writing-nav-design-patterns-li>
<a href=/docs/navpatterns/4-get-involved/template-for-writing-nav-design-patterns/ class="align-left pl-0 td-sidebar-link td-sidebar-link__page" id=m-docsnavpatterns4-get-involvedtemplate-for-writing-nav-design-patterns><span>Template for writing Nav Design Patterns</span></a>
</li>
</ul>
</li><li class="td-sidebar-nav__section-title td-sidebar-nav__section without-child" id=m-docsnavpatternsrelated-links-li>
<a href=/docs/navpatterns/related-links/ class="align-left pl-0 td-sidebar-link td-sidebar-link__page" id=m-docsnavpatternsrelated-links><span>Related Links</span></a>
</li>
</ul>
</li><li class="td-sidebar-nav__section-title td-sidebar-nav__section with-child" id=m-docscontributing-li>
<a href=/docs/contributing/ class="align-left pl-0 td-sidebar-link td-sidebar-link__section" id=m-docscontributing><span>Contributing</span></a>
<ul class="ul-2 foldable">
<li class="td-sidebar-nav__section-title td-sidebar-nav__section without-child collapse" id=m-docscontributingformattingtips-li>
<a href=/docs/contributing/formattingtips/ class="align-left pl-0 td-sidebar-link td-sidebar-link__page" id=m-docscontributingformattingtips><span>Formatting tips</span></a>
</li><li class="td-sidebar-nav__section-title td-sidebar-nav__section without-child collapse" id=m-docscontributingforkandpr-li>
<a href=/docs/contributing/forkandpr/ class="align-left pl-0 td-sidebar-link td-sidebar-link__page" id=m-docscontributingforkandpr><span>Guide to Fork & PR</span></a>
</li><li class="td-sidebar-nav__section-title td-sidebar-nav__section with-child collapse" id=m-docscontributingtemplates-li>
<a href=/docs/contributing/templates/ class="align-left pl-0 td-sidebar-link td-sidebar-link__section" id=m-docscontributingtemplates><span>Templates</span></a>
<ul class="ul-3 foldable">
<li class="td-sidebar-nav__section-title td-sidebar-nav__section without-child collapse" id=m-docscontributingtemplatesguidelines-li>
<a href=/docs/contributing/templates/guidelines/ class="align-left pl-0 td-sidebar-link td-sidebar-link__page" id=m-docscontributingtemplatesguidelines><span>Title of the Guideline</span></a>
</li><li class="td-sidebar-nav__section-title td-sidebar-nav__section without-child collapse" id=m-docscontributingtemplatespatterns-li>
<a href=/docs/contributing/templates/patterns/ class="align-left pl-0 td-sidebar-link td-sidebar-link__page" id=m-docscontributingtemplatespatterns><span>Title of the pattern</span></a>
</li>
</ul>
</li><li class="td-sidebar-nav__section-title td-sidebar-nav__section without-child collapse" id=m-docscontributingtheapprovalprocess-li>
<a href=/docs/contributing/theapprovalprocess/ class="align-left pl-0 td-sidebar-link td-sidebar-link__page" id=m-docscontributingtheapprovalprocess><span>Understanding the Approval Process</span></a>
</li>
</ul>
</li>
</ul>
</li>
</ul>
</nav>
</div>
</aside>
<aside class="d-none d-xl-block col-xl-2 td-sidebar-toc d-print-none">
<div class="td-page-meta ml-2 pb-1 pt-2 mb-0">
<a href=https://github.com/microsoft/alguidelines/tree/master/content/en/docs/NAVPatterns/patterns/queries/_index.md class=td-page-meta--view target=_blank rel=noopener><i class="fa fa-file-alt fa-fw"></i> View page source</a>
<a href=https://github.com/microsoft/alguidelines/edit/master/content/en/docs/NAVPatterns/patterns/queries/_index.md class=td-page-meta--edit target=_blank rel=noopener><i class="fa fa-edit fa-fw"></i> Edit this page</a>
<a href="https://github.com/microsoft/alguidelines/new/master/content/en/docs/NAVPatterns/patterns/queries/_index.md?filename=change-me.md&value=---%0Atitle%3A+%22Long+Page+Title%22%0AlinkTitle%3A+%22Short+Nav+Title%22%0Aweight%3A+100%0Adescription%3A+%3E-%0A+++++Page+description+for+heading+and+indexes.%0A---%0A%0A%23%23+Heading%0A%0AEdit+this+template+to+create+your+new+page.%0A%0A%2A+Give+it+a+good+name%2C+ending+in+%60.md%60+-+e.g.+%60getting-started.md%60%0A%2A+Edit+the+%22front+matter%22+section+at+the+top+of+the+page+%28weight+controls+how+its+ordered+amongst+other+pages+in+the+same+directory%3B+lowest+number+first%29.%0A%2A+Add+a+good+commit+message+at+the+bottom+of+the+page+%28%3C80+characters%3B+use+the+extended+description+field+for+more+detail%29.%0A%2A+Create+a+new+branch+so+you+can+preview+your+new+file+and+request+a+review+via+Pull+Request.%0A" class=td-page-meta--child target=_blank rel=noopener><i class="fa fa-edit fa-fw"></i> Create child page</a>
<a href="https://github.com/microsoft/alguidelines/issues/new?title=Queries" class=td-page-meta--issue target=_blank rel=noopener><i class="fab fa-github fa-fw"></i> Create documentation issue</a>
<a href=https://github.com/microsoft/alguidelines/issues/new class=td-page-meta--project-issue target=_blank rel=noopener><i class="fas fa-tasks fa-fw"></i> Create project issue</a>
</div>
<div class="taxonomy taxonomy-terms-cloud taxo-tags">
<h5 class=taxonomy-title>Tag Cloud</h5>
<ul class=taxonomy-terms>
<li><a class=taxonomy-term href=https://alguidelines.dev/tags/c/al/ data-taxonomy-term=c/al><span class=taxonomy-label>C/AL</span><span class=taxonomy-count>1</span></a></li>
<li><a class=taxonomy-term href=https://alguidelines.dev/tags/interface/ data-taxonomy-term=interface><span class=taxonomy-label>Interface</span><span class=taxonomy-count>1</span></a></li>
<li><a class=taxonomy-term href=https://alguidelines.dev/tags/nav/ data-taxonomy-term=nav><span class=taxonomy-label>NAV</span><span class=taxonomy-count>1</span></a></li>
<li><a class=taxonomy-term href=https://alguidelines.dev/tags/performance/ data-taxonomy-term=performance><span class=taxonomy-label>Performance</span><span class=taxonomy-count>2</span></a></li>
<li><a class=taxonomy-term href=https://alguidelines.dev/tags/readability/ data-taxonomy-term=readability><span class=taxonomy-label>Readability</span><span class=taxonomy-count>18</span></a></li>
</ul>
</div>
<div class="taxonomy taxonomy-terms-cloud taxo-categories">
<h5 class=taxonomy-title>Categories</h5>
<ul class=taxonomy-terms>
<li><a class=taxonomy-term href=https://alguidelines.dev/categories/archived-pattern/ data-taxonomy-term=archived-pattern><span class=taxonomy-label>Archived Pattern</span><span class=taxonomy-count>1</span></a></li>
<li><a class=taxonomy-term href=https://alguidelines.dev/categories/best-practice/ data-taxonomy-term=best-practice><span class=taxonomy-label>Best Practice</span><span class=taxonomy-count>20</span></a></li>
<li><a class=taxonomy-term href=https://alguidelines.dev/categories/pattern/ data-taxonomy-term=pattern><span class=taxonomy-label>Pattern</span><span class=taxonomy-count>3</span></a></li>
</ul>
</div>
</aside>
<main class="col-12 col-md-9 col-xl-8 pl-md-5" role=main>
<nav aria-label=breadcrumb class=td-breadcrumbs>
<ol class=breadcrumb>
<li class=breadcrumb-item>
<a href=https://alguidelines.dev/docs/>Docs</a>
</li>
<li class=breadcrumb-item>
<a href=https://alguidelines.dev/docs/navpatterns/>NAV Patterns Archive</a>
</li>
<li class=breadcrumb-item>
<a href=https://alguidelines.dev/docs/navpatterns/patterns/>Patterns</a>
</li>
<li class="breadcrumb-item active" aria-current=page>
<a href=https://alguidelines.dev/docs/navpatterns/patterns/queries/>Queries</a>
</li>
</ol>
</nav>
<div class=td-content>
<h1>Queries</h1>
<header class=article-meta>
</header>
<p>Expand to see NAV design patterns which use queries.</p>
<div class=section-index>
<hr class=panel-line>
<div class=entry>
<h5>
<a href=/docs/navpatterns/patterns/queries/select-distinct-with-queries/>SELECT DISTINCT with Queries</a>
</h5>
<p></p>
</div>
<div class=entry>
<h5>
<a href=/docs/navpatterns/patterns/queries/use-queries-to-detect-duplicate-records/>Use Queries to Detect Duplicate Records</a>
</h5>
<p></p>
</div>
<div class=entry>
<h5>
<a href=/docs/navpatterns/patterns/queries/use-queries-to-replace-nested-loops/>Use Queries to Replace Nested Loops</a>
</h5>
<p></p>
</div>
</div>
<div class="text-muted mt-5 pt-3 border-top">
Last modified February 20, 2022: <a href=https://github.com/microsoft/alguidelines/commit/cceb0c945e0383599f497350ca254d5755edda65>Restructure for Docsy theme (cceb0c94)</a>
</div>
</div>
</main>
</div>
</div>
<footer class="bg-dark py-5 row d-print-none">
<div class="container-fluid mx-sm-5">
<div class=row>
<div class="col-6 col-sm-4 text-xs-center order-sm-2">
<ul class="list-inline mb-0">
<li class="list-inline-item mx-2 h3" data-toggle=tooltip data-placement=top title=GitHub aria-label=GitHub>
<a class=text-white target=_blank rel=noopener href=https://github.com/microsoft/alguidelines aria-label=GitHub>
<i class="fab fa-github"></i>
</a>
</li>
<li class="list-inline-item mx-2 h3" data-toggle=tooltip data-placement=top title=Twitter aria-label=Twitter>
<a class=text-white target=_blank rel=noopener href="https://twitter.com/search?q=%23bcalhelp" aria-label=Twitter>
<i class="fab fa-twitter"></i>
</a>
</li>
<li class="list-inline-item mx-2 h3" data-toggle=tooltip data-placement=top title=Discord aria-label=Discord>
<a class=text-white target=_blank rel=noopener href=https://discord.gg/4wbfNv3 aria-label=Discord>
<i class="fab fa-discord"></i>
</a>
</li>
</ul>
</div>
<div class="col-6 col-sm-4 text-right text-xs-center order-sm-3">
</div>
<div class="col-12 col-sm-4 text-center py-2 order-sm-2">
<small class=text-white>&copy; 2022 alguidelines.dev Project All Rights Reserved</small>
</div>
</div>
</div>
</footer>
</div>
<script src=https://cdn.jsdelivr.net/npm/popper.js@1.16.1/dist/umd/popper.min.js integrity=sha384-9/reFTGAW83EW2RDu2S0VKaIzap3H66lZH81PoYlFhbGU+6BZp6G7niu735Sk7lN crossorigin=anonymous></script>
<script src=https://cdn.jsdelivr.net/npm/bootstrap@4.6.1/dist/js/bootstrap.min.js integrity="sha512-UR25UO94eTnCVwjbXozyeVd6ZqpaAE9naiEUBK/A+QDbfSTQFhPGj5lOR6d8tsgbBk84Ggb5A3EkjsOgPRPcKA==" crossorigin=anonymous></script>
<script src=/js/tabpane-persist.js></script>
<script src=/js/main.min.46b25eb30e292e80e9e18facc285e194199cf26288c5a1735cda89fb827eba54.js integrity="sha256-RrJesw4pLoDp4Y+swoXhlBmc8mKIxaFzXNqJ+4J+ulQ=" crossorigin=anonymous></script>
</body>
</html>

View file

@ -0,0 +1,253 @@
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom"><channel><title>alguidelines.dev - Business Central Design Patterns Queries</title><link>https://alguidelines.dev/docs/navpatterns/patterns/queries/</link><description>Recent content in Queries on alguidelines.dev - Business Central Design Patterns</description><generator>Hugo -- gohugo.io</generator><language>en-us</language><atom:link href="https://alguidelines.dev/docs/navpatterns/patterns/queries/index.xml" rel="self" type="application/rss+xml"/><item><title>Docs: SELECT DISTINCT with Queries</title><link>https://alguidelines.dev/docs/navpatterns/patterns/queries/select-distinct-with-queries/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://alguidelines.dev/docs/navpatterns/patterns/queries/select-distinct-with-queries/</guid><description>
&lt;p>&lt;em>By Bogdana Botez, at Microsoft Development Center Copenhagen&lt;/em>&lt;/p>
&lt;h3 id="abstract">Abstract&lt;/h3>
&lt;p>This pattern explains how to perform SELECT DISTINCT by using queries in Dynamics NAV.&lt;/p>
&lt;p>&lt;strong>Description&lt;/strong>&lt;/p>
&lt;p>When working with tables, sometimes a developer needs to perform a SELECT DISTINCT (also known as SELECT UNIQUE) from a table. As NAV does not provide this out of the box, we present below a way to select unique records by using queries.&lt;/p>
&lt;p>&lt;strong>Problem statement&lt;/strong>&lt;/p>
&lt;p>Let&amp;rsquo;s consider the &lt;strong>VAT Entry&lt;/strong> table as below: &lt;a href="https://microsoft.sharepoint.com/teams/DynamicsNAV/Wiki/Nav%20Wiki%20Documents/NAV%20App%20Patterns/NAV%20App%20Patterns%20for%20Review/Table%20Select%20Distinct.docx#_msocom_1"> &lt;/a>&lt;/p>
&lt;p>&lt;a href="6521.clip_5F00_image001.png">&lt;img src="6521.clip_5F00_image001.png" alt=" ">&lt;/a>&lt;/p>
&lt;p>The goal is to select one line for each separate document that produced VAT Entries. In other words, we want records grouped by &lt;strong>Type, Document Type&lt;/strong> and &lt;strong>Document No.&lt;/strong>. However, if there are multiple lines with the same value of the triad &lt;strong>Type, Document Type&lt;/strong> and &lt;strong>Document No.&lt;/strong> in the &lt;strong>VAT Entry&lt;/strong> table, we only want to see one of them.&lt;/p>
&lt;h4 id="solution">Solution&lt;/h4>
&lt;p>Create a new query object &lt;strong>VAT Entry Distinct Document No.&lt;/strong>, with a single DataItem sourced from &lt;strong>VAT Entry&lt;/strong> table. Add the three desired group-by fields &lt;strong>Type, Document Type&lt;/strong> and &lt;strong>Document No.&lt;/strong> as columns.&lt;/p>
&lt;p>&lt;a href="clip_5F00_image002.png">&lt;img src="clip_5F00_image002.png" alt=" ">&lt;/a>&lt;/p>
&lt;p>To enable grouping, add one more column, with &lt;strong>Method Type&lt;/strong> = &lt;strong>Totals&lt;/strong>. This will automatically set the &lt;strong>Group By&lt;/strong> checkbox to TRUE on the three precedent fields.&lt;/p>
&lt;p>Note that the &lt;strong>Group By&lt;/strong> field is read-only and trying to set it by hand will clarify that:&lt;/p>
&lt;p>&lt;a href="clip_5F00_image003.png">&lt;img src="clip_5F00_image003.png" alt=" ">&lt;/a>&lt;/p>
&lt;p>Running the query yields a single record per document. You can notice in the second line below for example, how the sales invoice number 103001 had 2 VAT Entries, but it shows up only once in the query:&lt;/p>
&lt;p>&lt;a href="clip_5F00_image004.png">&lt;img src="clip_5F00_image004.png" alt=" ">&lt;/a>&lt;/p>
&lt;h3 id="example">Example&lt;/h3>
&lt;p>One thing is to be noted: there is a limitation to how much information you can take out from the records. For example, if we need to extract more information than just the one we already have in the columns, then the following apply: adding one more column of &lt;strong>Method Type&lt;/strong> = &lt;strong>None&lt;/strong> will indeed show more information, but it &lt;em>might&lt;/em> affect the grouping. More details below.&lt;/p>
&lt;p>&lt;strong>The grouping is affected&lt;/strong> for example when the additional column is the &lt;strong>VAT Entry No&lt;/strong>. In this case, this column brings up additional grouping criteria and one group for each entry number will end up being created.&lt;/p>
&lt;p>&lt;a href="clip_5F00_image005.png">&lt;img src="clip_5F00_image005.png" alt=" ">&lt;/a>&lt;/p>
&lt;p>You can notice that both lines of document 103001 are not visible, which contradicts the goal of SELECT DISTINCT.&lt;/p>
&lt;p>&lt;a href="clip_5F00_image006.png">&lt;img src="clip_5F00_image006.png" alt=" ">&lt;/a>&lt;/p>
&lt;p>&lt;strong>The grouping is not affected&lt;/strong> when the additional column does not influence grouping (has variation identical with one of the other existing columns). For example, adding &lt;strong>Posting Date&lt;/strong> as a new column, does not change anything because posting date is the same for all lines of a document, so the query result is identical with the initial one:&lt;/p>
&lt;p>&lt;a href="clip_5F00_image007.png">&lt;img src="clip_5F00_image007.png" alt=" ">&lt;/a>&lt;/p>
&lt;p>Below is the result of this query, where you can notice that the initial grouping is preserved and correct. Bonus, we can now read the &lt;strong>Posting Date&lt;/strong> of the document too.&lt;/p>
&lt;p>&lt;a href="clip_5F00_image008.png">&lt;img src="clip_5F00_image008.png" alt=" ">&lt;/a>&lt;/p>
&lt;p>&lt;strong>The grouping is also not affected&lt;/strong> when adding more columns of &lt;strong>Method Type&lt;/strong> = &lt;strong>Totals&lt;/strong>. However, this can only be done with columns of Decimal data type.&lt;/p>
&lt;h3 id="nav-usages">&lt;strong>NAV Usages&lt;/strong>&lt;/h3>
&lt;p>This pattern is used in Query 19: &lt;strong>VAT Entries Base Amt. Sum&lt;/strong>. This query is used in Report 19: &lt;strong>VAT- VIES Declaration Tax Auth&lt;/strong>.&lt;/p>
&lt;p>&lt;a href="Untitled-picture.png">&lt;img src="Untitled-picture.png" alt=" ">&lt;/a>&lt;/p>
&lt;p>The pattern is also used in Query 1511: &lt;strong>User IDs by Notification Type&lt;/strong>.&lt;/p>
&lt;h3 id="related-topics">&lt;strong>Related Topics&lt;/strong>&lt;/h3>
&lt;p>A variation using loops could be described, for C/AL development on NAV 6 where query objects are not available.&lt;/p></description></item><item><title>Docs: Use Queries to Detect Duplicate Records</title><link>https://alguidelines.dev/docs/navpatterns/patterns/queries/use-queries-to-detect-duplicate-records/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://alguidelines.dev/docs/navpatterns/patterns/queries/use-queries-to-detect-duplicate-records/</guid><description>
&lt;p>&lt;em>Originally by Abshishek Ghosh and Bogdan Sturzoiu at Microsoft Development Center Copenhagen&lt;/em>&lt;/p>
&lt;h2 id="abstract">Abstract&lt;/h2>
&lt;p>This pattern uses queries to create an efficient way to detect duplicate entries in a table. This is, for example, useful when trying to find out which customers or contacts have the same names, so we can merge them later.&lt;/p>
&lt;h2 id="description">Description&lt;/h2>
&lt;p>Duplicate detection has several requirements in Microsoft Dynamics NAV. One method to eliminate duplication is by defining the relevant field as the primary key. However, this method is not always practical either due to the size of the field or due to business requirements that dictate how duplicates are detected but not necessarily how they are eliminated. An example of this method is to detect contacts with the same name and take action to merge them if they are.&lt;/p>
&lt;p>Before Dynamics NAV 2013, the only possibility was to iterate through the table in a loop and then create a sub-loop where another instance of the same table is filtered to check for duplicates. For example, to check for duplicate names in the Customer table, the code would look like this:&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" style="background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4">&lt;code class="language-al" data-lang="al">&lt;span style="color:#204a87;font-weight:bold">PROCEDURE&lt;/span>&lt;span style="color:#f8f8f8;text-decoration:underline"> &lt;/span>HasDuplicateCustomers@&lt;span style="color:#0000cf;font-weight:bold">26&lt;/span>&lt;span style="color:#ce5c00;font-weight:bold">() &lt;/span>&lt;span style="color:#000;font-weight:bold">:&lt;/span>&lt;span style="color:#f8f8f8;text-decoration:underline"> &lt;/span>&lt;span style="color:#204a87;font-weight:bold">Boolean&lt;/span>&lt;span style="color:#000;font-weight:bold">;&lt;/span>&lt;span style="color:#f8f8f8;text-decoration:underline">
&lt;/span>&lt;span style="color:#f8f8f8;text-decoration:underline">&lt;/span>&lt;span style="color:#204a87;font-weight:bold">VAR&lt;/span>&lt;span style="color:#f8f8f8;text-decoration:underline">
&lt;/span>&lt;span style="color:#f8f8f8;text-decoration:underline"> &lt;/span>Customer@&lt;span style="color:#0000cf;font-weight:bold">1000&lt;/span>&lt;span style="color:#f8f8f8;text-decoration:underline"> &lt;/span>&lt;span style="color:#000;font-weight:bold">:&lt;/span>&lt;span style="color:#f8f8f8;text-decoration:underline"> &lt;/span>&lt;span style="color:#204a87;font-weight:bold">Record&lt;/span>&lt;span style="color:#f8f8f8;text-decoration:underline"> &lt;/span>&lt;span style="color:#0000cf;font-weight:bold">18&lt;/span>&lt;span style="color:#000;font-weight:bold">;&lt;/span>&lt;span style="color:#f8f8f8;text-decoration:underline">
&lt;/span>&lt;span style="color:#f8f8f8;text-decoration:underline"> &lt;/span>Customer2@&lt;span style="color:#0000cf;font-weight:bold">1001&lt;/span>&lt;span style="color:#f8f8f8;text-decoration:underline"> &lt;/span>&lt;span style="color:#000;font-weight:bold">:&lt;/span>&lt;span style="color:#f8f8f8;text-decoration:underline"> &lt;/span>&lt;span style="color:#204a87;font-weight:bold">Record&lt;/span>&lt;span style="color:#f8f8f8;text-decoration:underline"> &lt;/span>&lt;span style="color:#0000cf;font-weight:bold">18&lt;/span>&lt;span style="color:#000;font-weight:bold">;&lt;/span>&lt;span style="color:#f8f8f8;text-decoration:underline">
&lt;/span>&lt;span style="color:#f8f8f8;text-decoration:underline">&lt;/span>&lt;span style="color:#204a87;font-weight:bold">BEGIN&lt;/span>&lt;span style="color:#f8f8f8;text-decoration:underline">
&lt;/span>&lt;span style="color:#f8f8f8;text-decoration:underline"> &lt;/span>&lt;span style="color:#204a87;font-weight:bold">IF&lt;/span>&lt;span style="color:#f8f8f8;text-decoration:underline"> &lt;/span>Customer&lt;span style="color:#ce5c00;font-weight:bold">.&lt;/span>FINDSET&lt;span style="color:#f8f8f8;text-decoration:underline"> &lt;/span>&lt;span style="color:#204a87;font-weight:bold">THEN&lt;/span>&lt;span style="color:#f8f8f8;text-decoration:underline">
&lt;/span>&lt;span style="color:#f8f8f8;text-decoration:underline"> &lt;/span>&lt;span style="color:#204a87;font-weight:bold">REPEAT&lt;/span>&lt;span style="color:#f8f8f8;text-decoration:underline">
&lt;/span>&lt;span style="color:#f8f8f8;text-decoration:underline"> &lt;/span>Customer2&lt;span style="color:#ce5c00;font-weight:bold">.&lt;/span>SETRANGE&lt;span style="color:#ce5c00;font-weight:bold">(&lt;/span>Name&lt;span style="color:#000;font-weight:bold">,&lt;/span>Customer&lt;span style="color:#ce5c00;font-weight:bold">.&lt;/span>Name&lt;span style="color:#ce5c00;font-weight:bold">)&lt;/span>&lt;span style="color:#000;font-weight:bold">;&lt;/span>&lt;span style="color:#f8f8f8;text-decoration:underline">
&lt;/span>&lt;span style="color:#f8f8f8;text-decoration:underline"> &lt;/span>&lt;span style="color:#204a87;font-weight:bold">IF&lt;/span>&lt;span style="color:#f8f8f8;text-decoration:underline"> &lt;/span>Customer2&lt;span style="color:#ce5c00;font-weight:bold">.&lt;/span>&lt;span style="color:#204a87;font-weight:bold">COUNT&lt;/span>&lt;span style="color:#f8f8f8;text-decoration:underline"> &lt;/span>\&amp;gt;&lt;span style="color:#f8f8f8;text-decoration:underline"> &lt;/span>&lt;span style="color:#0000cf;font-weight:bold">1&lt;/span>&lt;span style="color:#f8f8f8;text-decoration:underline"> &lt;/span>&lt;span style="color:#204a87;font-weight:bold">THEN&lt;/span>&lt;span style="color:#f8f8f8;text-decoration:underline">
&lt;/span>&lt;span style="color:#f8f8f8;text-decoration:underline"> &lt;/span>&lt;span style="color:#204a87;font-weight:bold">EXIT&lt;/span>&lt;span style="color:#ce5c00;font-weight:bold">(&lt;/span>TRUE&lt;span style="color:#ce5c00;font-weight:bold">)&lt;/span>&lt;span style="color:#000;font-weight:bold">;&lt;/span>&lt;span style="color:#f8f8f8;text-decoration:underline">
&lt;/span>&lt;span style="color:#f8f8f8;text-decoration:underline"> &lt;/span>&lt;span style="color:#204a87;font-weight:bold">UNTIL&lt;/span>&lt;span style="color:#f8f8f8;text-decoration:underline"> &lt;/span>Customer&lt;span style="color:#ce5c00;font-weight:bold">.&lt;/span>NEXT&lt;span style="color:#f8f8f8;text-decoration:underline"> &lt;/span>=&lt;span style="color:#f8f8f8;text-decoration:underline"> &lt;/span>&lt;span style="color:#0000cf;font-weight:bold">0&lt;/span>&lt;span style="color:#000;font-weight:bold">;&lt;/span>&lt;span style="color:#f8f8f8;text-decoration:underline">
&lt;/span>&lt;span style="color:#f8f8f8;text-decoration:underline"> &lt;/span>&lt;span style="color:#204a87;font-weight:bold">EXIT&lt;/span>&lt;span style="color:#ce5c00;font-weight:bold">(&lt;/span>FALSE&lt;span style="color:#ce5c00;font-weight:bold">)&lt;/span>&lt;span style="color:#000;font-weight:bold">;&lt;/span>&lt;span style="color:#f8f8f8;text-decoration:underline">
&lt;/span>&lt;span style="color:#f8f8f8;text-decoration:underline">&lt;/span>&lt;span style="color:#204a87;font-weight:bold">END&lt;/span>&lt;span style="color:#000;font-weight:bold">;&lt;/span>&lt;span style="color:#f8f8f8;text-decoration:underline">
&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>This code would involve setting filters on the &lt;strong>Customer&lt;/strong> table as many times as there are records in the table. This is an expensive operation.&lt;/p>
&lt;p>Starting with Dynamics NAV 2013, we can use queries to create a more efficient implementation of the same logic.&lt;/p>
&lt;h2 id="usage">Usage&lt;/h2>
&lt;p>The solution involves that you create a query to return duplicates, and then invoke it from a method that would test the value of the query to identify if duplicates were found.&lt;/p>
&lt;p>&lt;strong>Step 1&lt;/strong> &amp;ndash; &lt;strong>Creating the Query&lt;/strong>&lt;/p>
&lt;ul>
&lt;li>The query must be created with the table we want to search in as the dataitem.&lt;/li>
&lt;li>The field we want to search for must be created as a grouped field.&lt;/li>
&lt;li>Create a totaling field on the count, and add a filter for Count &amp;gt; 1. This ensures that only records with more than one instance of the field that we selected in the previous step are included in the query result.&lt;/li>
&lt;/ul>
&lt;p>Continuing with our Customer Name example, here is how the query would look:&lt;/p>
&lt;p>&lt;a href="clip_5F00_image002.jpg">&lt;img src="clip_5F00_image002.jpg" alt=" ">&lt;/a>&lt;/p>
&lt;h4 id="heading">&lt;/h4>
&lt;pre>&lt;code>ELEMENTS
{
{ 1 ; ;DataItem; ;
DataItemTable=Table18 }
{ 2 ;1 ;Column ; ;
DataSource=Name }
{ 3 ;1 ;Column ; ;
ColumnFilter=Count_=FILTER(\&amp;gt;1);
MethodType=Totals;
Method=Count }
}
&lt;/code>&lt;/pre>
&lt;p>&lt;strong>Step 2 &amp;ndash; Invoking the Query to Check for Duplicates&lt;/strong>&lt;/p>
&lt;p>Now that the query is created, all we need to do is to invoke the query and check if any records are returned, which would mean that there are duplicates.&lt;/p>
&lt;p>Here is an alternate implementation of the &lt;strong>HasDuplicateCustomers&lt;/strong> method using the query that we created:&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" style="background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4">&lt;code class="language-al" data-lang="al">&lt;span style="color:#204a87;font-weight:bold">PROCEDURE&lt;/span>&lt;span style="color:#f8f8f8;text-decoration:underline"> &lt;/span>HasDuplicateCustomersWithQuery@&lt;span style="color:#0000cf;font-weight:bold">27&lt;/span>&lt;span style="color:#ce5c00;font-weight:bold">() &lt;/span>&lt;span style="color:#000;font-weight:bold">:&lt;/span>&lt;span style="color:#f8f8f8;text-decoration:underline"> &lt;/span>&lt;span style="color:#204a87;font-weight:bold">Boolean&lt;/span>&lt;span style="color:#000;font-weight:bold">;&lt;/span>&lt;span style="color:#f8f8f8;text-decoration:underline">
&lt;/span>&lt;span style="color:#f8f8f8;text-decoration:underline">&lt;/span>&lt;span style="color:#204a87;font-weight:bold">VAR&lt;/span>&lt;span style="color:#f8f8f8;text-decoration:underline">
&lt;/span>&lt;span style="color:#f8f8f8;text-decoration:underline"> &lt;/span>CustomerDuplicate@&lt;span style="color:#0000cf;font-weight:bold">1000&lt;/span>&lt;span style="color:#f8f8f8;text-decoration:underline"> &lt;/span>&lt;span style="color:#000;font-weight:bold">:&lt;/span>&lt;span style="color:#f8f8f8;text-decoration:underline"> &lt;/span>&lt;span style="color:#204a87;font-weight:bold">Query&lt;/span>&lt;span style="color:#f8f8f8;text-decoration:underline"> &lt;/span>&lt;span style="color:#0000cf;font-weight:bold">70000&lt;/span>&lt;span style="color:#000;font-weight:bold">;&lt;/span>&lt;span style="color:#f8f8f8;text-decoration:underline">
&lt;/span>&lt;span style="color:#f8f8f8;text-decoration:underline">&lt;/span>&lt;span style="color:#204a87;font-weight:bold">BEGIN&lt;/span>&lt;span style="color:#f8f8f8;text-decoration:underline">
&lt;/span>&lt;span style="color:#f8f8f8;text-decoration:underline"> &lt;/span>CustomerDuplicate&lt;span style="color:#ce5c00;font-weight:bold">.&lt;/span>OPEN&lt;span style="color:#000;font-weight:bold">;&lt;/span>&lt;span style="color:#f8f8f8;text-decoration:underline">
&lt;/span>&lt;span style="color:#f8f8f8;text-decoration:underline"> &lt;/span>&lt;span style="color:#204a87;font-weight:bold">EXIT&lt;/span>&lt;span style="color:#ce5c00;font-weight:bold">(&lt;/span>CustomerDuplicate&lt;span style="color:#ce5c00;font-weight:bold">.&lt;/span>READ&lt;span style="color:#ce5c00;font-weight:bold">)&lt;/span>&lt;span style="color:#000;font-weight:bold">;&lt;/span>&lt;span style="color:#f8f8f8;text-decoration:underline">
&lt;/span>&lt;span style="color:#f8f8f8;text-decoration:underline">&lt;/span>&lt;span style="color:#204a87;font-weight:bold">END&lt;/span>&lt;span style="color:#000;font-weight:bold">;&lt;/span>&lt;span style="color:#f8f8f8;text-decoration:underline">
&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>&lt;strong>Examples&lt;/strong>&lt;/p>
&lt;ul>
&lt;li>&lt;strong>Acc. Sched. Chart Management&lt;/strong> codeunit (762),&lt;br>
methods CheckDuplicateAccScheduleLineDescription and CheckDuplicateColumnLayoutColumnHeader&lt;/li>
&lt;li>&lt;strong>Analysis Report Chart Mgt.&lt;/strong> codeunit (770),&lt;br>
methods CheckDuplicateAnalysisLineDescription and CheckDuplicateAnalysisColumnHeader&lt;/li>
&lt;/ul>
&lt;h2 id="consequences">&lt;strong>Consequences&lt;/strong>&lt;/h2>
&lt;p>A new query object is needed for every type of duplicate check. This could easily explode and create a maintenance problem.&lt;/p></description></item><item><title>Docs: Use Queries to Replace Nested Loops</title><link>https://alguidelines.dev/docs/navpatterns/patterns/queries/use-queries-to-replace-nested-loops/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://alguidelines.dev/docs/navpatterns/patterns/queries/use-queries-to-replace-nested-loops/</guid><description>
&lt;p>&lt;em>Originally by Bogdan Sturzoiu, Microsoft Development Center Copenhagen&lt;/em>&lt;/p>
&lt;h2 id="abstract">Abstract&lt;/h2>
&lt;p>This pattern shows how the new query object type introduced in NAV 2013 allows you to replace costly loops when inspecting data from two or more tables.&lt;/p>
&lt;h3 id="description">Description&lt;/h3>
&lt;p>One of the core operations in a relational database is joining two or more tables. For example, you might need to extract all sales lines in the database together with information regarding the related sales header. This requires joining the Sales Header and Sales Line tables using Sales Header No. as the connecting field.;&lt;/p>
&lt;p>The join operation has traditionally been done in C/AL by record looping. When NAV 2013 introduced the query object, it allowed us to produce a data set that is the result of a join operation between two or more tables. This simplifies the problem of finding related records in two tables linked through a foreign key.&lt;/p>
&lt;h4 id="pattern-elements">Pattern Elements&lt;/h4>
&lt;ol>
&lt;li>Two or more tables that contain records linked through a foreign key: Table 1, Table 2, Table n.&lt;/li>
&lt;li>A query object Query X, that joins Table 1, Table 2, etc. based on the connecting key.&lt;/li>
&lt;li>A processing codeunit that loops through the query records (or any other code-bearing object).&lt;/li>
&lt;/ol>
&lt;h4 id="pattern-steps">Pattern Steps&lt;/h4>
&lt;ol>
&lt;li>Run the query on the connected tables.&lt;/li>
&lt;li>Loop through the records returned by the query.&lt;/li>
&lt;li>Process the records.&lt;/li>
&lt;/ol>
&lt;p>&lt;a href="5040.clip_5F00_image002.png">&lt;img src="5040.clip_5F00_image002.png" alt=" ">&lt;/a>&lt;/p>
&lt;p>&lt;em>Figure 1. The pattern elements&lt;/em>&lt;/p>
&lt;h3 id="usage">Usage&lt;/h3>
&lt;h4 id="sample-problem">Sample Problem&lt;/h4>
&lt;p>The Bank Acc. Reconciliation Line table (274) and the Bank Account Ledger Entry table (271) are connected through the Bank Account No. field. Identify the matching pairs of records based on having the same remaining amount and transaction date.&lt;/p>
&lt;h4 id="solution-using-nested-loops">Solution Using Nested Loops&lt;/h4>
&lt;p>The classic C/AL approach is to:&lt;/p>
&lt;ol>
&lt;li>Set the necessary filters on the left table, i.e. table 274.&lt;/li>
&lt;li>Loop through the filtered records.&lt;/li>
&lt;li>For each record in the filter, find the related records in the right table (table 271) and set the required filters on it.&lt;/li>
&lt;li>For each pair of records from the left and right table, decide if they are a solution and if so, apply them to each other.&lt;/li>
&lt;/ol>
&lt;div class="highlight">&lt;pre tabindex="0" style="background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4">&lt;code class="language-al" data-lang="al">&lt;span style="color:#204a87;font-weight:bold">PROCEDURE&lt;/span>&lt;span style="color:#f8f8f8;text-decoration:underline"> &lt;/span>MatchSingle@&lt;span style="color:#0000cf;font-weight:bold">5&lt;/span>&lt;span style="color:#ce5c00;font-weight:bold">(&lt;/span>BankAccReconciliation@&lt;span style="color:#0000cf;font-weight:bold">1003&lt;/span>&lt;span style="color:#f8f8f8;text-decoration:underline"> &lt;/span>&lt;span style="color:#000;font-weight:bold">:&lt;/span>&lt;span style="color:#f8f8f8;text-decoration:underline"> &lt;/span>&lt;span style="color:#204a87;font-weight:bold">Record&lt;/span>&lt;span style="color:#f8f8f8;text-decoration:underline"> &lt;/span>&lt;span style="color:#0000cf;font-weight:bold">273&lt;/span>&lt;span style="color:#ce5c00;font-weight:bold">)&lt;/span>&lt;span style="color:#000;font-weight:bold">;&lt;/span>&lt;span style="color:#f8f8f8;text-decoration:underline">
&lt;/span>&lt;span style="color:#f8f8f8;text-decoration:underline">&lt;/span>&lt;span style="color:#204a87;font-weight:bold">VAR&lt;/span>&lt;span style="color:#f8f8f8;text-decoration:underline">
&lt;/span>&lt;span style="color:#f8f8f8;text-decoration:underline"> &lt;/span>BankAccRecLine@&lt;span style="color:#0000cf;font-weight:bold">1005&lt;/span>&lt;span style="color:#f8f8f8;text-decoration:underline"> &lt;/span>&lt;span style="color:#000;font-weight:bold">:&lt;/span>&lt;span style="color:#f8f8f8;text-decoration:underline"> &lt;/span>&lt;span style="color:#204a87;font-weight:bold">Record&lt;/span>&lt;span style="color:#f8f8f8;text-decoration:underline"> &lt;/span>&lt;span style="color:#0000cf;font-weight:bold">274&lt;/span>&lt;span style="color:#000;font-weight:bold">;&lt;/span>&lt;span style="color:#f8f8f8;text-decoration:underline">
&lt;/span>&lt;span style="color:#f8f8f8;text-decoration:underline"> &lt;/span>BankAccLedgerEntry@&lt;span style="color:#0000cf;font-weight:bold">1006&lt;/span>&lt;span style="color:#f8f8f8;text-decoration:underline"> &lt;/span>&lt;span style="color:#000;font-weight:bold">:&lt;/span>&lt;span style="color:#f8f8f8;text-decoration:underline"> &lt;/span>&lt;span style="color:#204a87;font-weight:bold">Record&lt;/span>&lt;span style="color:#f8f8f8;text-decoration:underline"> &lt;/span>&lt;span style="color:#0000cf;font-weight:bold">271&lt;/span>&lt;span style="color:#000;font-weight:bold">;&lt;/span>&lt;span style="color:#f8f8f8;text-decoration:underline">
&lt;/span>&lt;span style="color:#f8f8f8;text-decoration:underline"> &lt;/span>BankAccEntrySetReconNo@&lt;span style="color:#0000cf;font-weight:bold">1007&lt;/span>&lt;span style="color:#f8f8f8;text-decoration:underline"> &lt;/span>&lt;span style="color:#000;font-weight:bold">:&lt;/span>&lt;span style="color:#f8f8f8;text-decoration:underline"> &lt;/span>&lt;span style="color:#204a87;font-weight:bold">Codeunit&lt;/span>&lt;span style="color:#f8f8f8;text-decoration:underline"> &lt;/span>&lt;span style="color:#0000cf;font-weight:bold">375&lt;/span>&lt;span style="color:#000;font-weight:bold">;&lt;/span>&lt;span style="color:#f8f8f8;text-decoration:underline">
&lt;/span>&lt;span style="color:#f8f8f8;text-decoration:underline">&lt;/span>&lt;span style="color:#204a87;font-weight:bold">BEGIN&lt;/span>&lt;span style="color:#f8f8f8;text-decoration:underline">
&lt;/span>&lt;span style="color:#f8f8f8;text-decoration:underline"> &lt;/span>BankAccRecLine&lt;span style="color:#ce5c00;font-weight:bold">.&lt;/span>SETRANGE&lt;span style="color:#ce5c00;font-weight:bold">(&lt;/span>&amp;#34;Bank Account No.&amp;#34;&lt;span style="color:#000;font-weight:bold">,&lt;/span>BankAccReconciliation&lt;span style="color:#ce5c00;font-weight:bold">.&lt;/span>&amp;#34;Bank Account No.&amp;#34;&lt;span style="color:#ce5c00;font-weight:bold">)&lt;/span>&lt;span style="color:#000;font-weight:bold">;&lt;/span>&lt;span style="color:#f8f8f8;text-decoration:underline">
&lt;/span>&lt;span style="color:#f8f8f8;text-decoration:underline"> &lt;/span>BankAccRecLine&lt;span style="color:#ce5c00;font-weight:bold">.&lt;/span>SETRANGE&lt;span style="color:#ce5c00;font-weight:bold">(&lt;/span>&amp;#34;Statement No.&amp;#34;&lt;span style="color:#000;font-weight:bold">,&lt;/span>BankAccReconciliation&lt;span style="color:#ce5c00;font-weight:bold">.&lt;/span>&amp;#34;Statement No.&amp;#34;&lt;span style="color:#ce5c00;font-weight:bold">)&lt;/span>&lt;span style="color:#000;font-weight:bold">;&lt;/span>&lt;span style="color:#f8f8f8;text-decoration:underline">
&lt;/span>&lt;span style="color:#f8f8f8;text-decoration:underline"> &lt;/span>BankAccRecLine&lt;span style="color:#ce5c00;font-weight:bold">.&lt;/span>SETFILTER&lt;span style="color:#ce5c00;font-weight:bold">(&lt;/span>Difference&lt;span style="color:#000;font-weight:bold">,&lt;/span>&lt;span style="color:#4e9a06">&amp;#39;&amp;lt;&amp;gt;%1&amp;#39;&lt;/span>&lt;span style="color:#000;font-weight:bold">,&lt;/span>&lt;span style="color:#0000cf;font-weight:bold">0&lt;/span>&lt;span style="color:#ce5c00;font-weight:bold">)&lt;/span>&lt;span style="color:#000;font-weight:bold">;&lt;/span>&lt;span style="color:#f8f8f8;text-decoration:underline">
&lt;/span>&lt;span style="color:#f8f8f8;text-decoration:underline"> &lt;/span>BankAccRecLine&lt;span style="color:#ce5c00;font-weight:bold">.&lt;/span>SETRANGE&lt;span style="color:#ce5c00;font-weight:bold">(&lt;/span>&lt;span style="color:#204a87;font-weight:bold">Type&lt;/span>&lt;span style="color:#000;font-weight:bold">,&lt;/span>BankAccRecLine&lt;span style="color:#ce5c00;font-weight:bold">.&lt;/span>&lt;span style="color:#204a87;font-weight:bold">Type&lt;/span>&lt;span style="color:#000;font-weight:bold">::&lt;/span>&amp;#34;Bank Account Ledger Entry&amp;#34;&lt;span style="color:#ce5c00;font-weight:bold">)&lt;/span>&lt;span style="color:#000;font-weight:bold">;&lt;/span>&lt;span style="color:#f8f8f8;text-decoration:underline">
&lt;/span>&lt;span style="color:#f8f8f8;text-decoration:underline">
&lt;/span>&lt;span style="color:#f8f8f8;text-decoration:underline"> &lt;/span>&lt;span style="color:#204a87;font-weight:bold">IF&lt;/span>&lt;span style="color:#f8f8f8;text-decoration:underline"> &lt;/span>BankAccRecLine&lt;span style="color:#ce5c00;font-weight:bold">.&lt;/span>FINDSET&lt;span style="color:#f8f8f8;text-decoration:underline"> &lt;/span>&lt;span style="color:#204a87;font-weight:bold">THEN&lt;/span>&lt;span style="color:#f8f8f8;text-decoration:underline">
&lt;/span>&lt;span style="color:#f8f8f8;text-decoration:underline"> &lt;/span>&lt;span style="color:#204a87;font-weight:bold">REPEAT&lt;/span>&lt;span style="color:#f8f8f8;text-decoration:underline">
&lt;/span>&lt;span style="color:#f8f8f8;text-decoration:underline"> &lt;/span>BankAccLedgerEntry&lt;span style="color:#ce5c00;font-weight:bold">.&lt;/span>SETRANGE&lt;span style="color:#ce5c00;font-weight:bold">(&lt;/span>&amp;#34;Bank Account No.&amp;#34;&lt;span style="color:#000;font-weight:bold">,&lt;/span>BankAccRecLine&lt;span style="color:#ce5c00;font-weight:bold">.&lt;/span>&amp;#34;Bank Account No.&amp;#34;&lt;span style="color:#ce5c00;font-weight:bold">)&lt;/span>&lt;span style="color:#000;font-weight:bold">;&lt;/span>&lt;span style="color:#f8f8f8;text-decoration:underline">
&lt;/span>&lt;span style="color:#f8f8f8;text-decoration:underline"> &lt;/span>BankAccLedgerEntry&lt;span style="color:#ce5c00;font-weight:bold">.&lt;/span>SETRANGE&lt;span style="color:#ce5c00;font-weight:bold">(&lt;/span>Open&lt;span style="color:#000;font-weight:bold">,&lt;/span>TRUE&lt;span style="color:#ce5c00;font-weight:bold">)&lt;/span>&lt;span style="color:#000;font-weight:bold">;&lt;/span>&lt;span style="color:#f8f8f8;text-decoration:underline">
&lt;/span>&lt;span style="color:#f8f8f8;text-decoration:underline"> &lt;/span>BankAccLedgerEntry&lt;span style="color:#ce5c00;font-weight:bold">.&lt;/span>SETRANGE&lt;span style="color:#ce5c00;font-weight:bold">(&lt;/span>&amp;#34;Statement Status&amp;#34;&lt;span style="color:#000;font-weight:bold">,&lt;/span>BankAccLedgerEntry&lt;span style="color:#ce5c00;font-weight:bold">.&lt;/span>&amp;#34;Statement Status&amp;#34;&lt;span style="color:#000;font-weight:bold">::&lt;/span>Open&lt;span style="color:#ce5c00;font-weight:bold">)&lt;/span>&lt;span style="color:#000;font-weight:bold">;&lt;/span>&lt;span style="color:#f8f8f8;text-decoration:underline">
&lt;/span>&lt;span style="color:#f8f8f8;text-decoration:underline"> &lt;/span>BankAccLedgerEntry&lt;span style="color:#ce5c00;font-weight:bold">.&lt;/span>SETFILTER&lt;span style="color:#ce5c00;font-weight:bold">(&lt;/span>&amp;#34;Remaining Amount&amp;#34;&lt;span style="color:#000;font-weight:bold">,&lt;/span>&lt;span style="color:#4e9a06">&amp;#39;&amp;lt;&amp;gt;%1&amp;#39;&lt;/span>&lt;span style="color:#000;font-weight:bold">,&lt;/span>&lt;span style="color:#0000cf;font-weight:bold">0&lt;/span>&lt;span style="color:#ce5c00;font-weight:bold">)&lt;/span>&lt;span style="color:#000;font-weight:bold">;&lt;/span>&lt;span style="color:#f8f8f8;text-decoration:underline">
&lt;/span>&lt;span style="color:#f8f8f8;text-decoration:underline"> &lt;/span>&lt;span style="color:#204a87;font-weight:bold">IF&lt;/span>&lt;span style="color:#f8f8f8;text-decoration:underline"> &lt;/span>BankAccLedgerEntry&lt;span style="color:#ce5c00;font-weight:bold">.&lt;/span>FINDSET&lt;span style="color:#f8f8f8;text-decoration:underline"> &lt;/span>&lt;span style="color:#204a87;font-weight:bold">THEN&lt;/span>&lt;span style="color:#f8f8f8;text-decoration:underline">
&lt;/span>&lt;span style="color:#f8f8f8;text-decoration:underline"> &lt;/span>&lt;span style="color:#204a87;font-weight:bold">REPEAT&lt;/span>&lt;span style="color:#f8f8f8;text-decoration:underline">
&lt;/span>&lt;span style="color:#f8f8f8;text-decoration:underline"> &lt;/span>&lt;span style="color:#204a87;font-weight:bold">IF&lt;/span>&lt;span style="color:#f8f8f8;text-decoration:underline"> &lt;/span>&lt;span style="color:#ce5c00;font-weight:bold">(&lt;/span>BankAccRecLine&lt;span style="color:#ce5c00;font-weight:bold">.&lt;/span>Difference&lt;span style="color:#f8f8f8;text-decoration:underline"> &lt;/span>=&lt;span style="color:#f8f8f8;text-decoration:underline"> &lt;/span>BankAccLedgerEntry&lt;span style="color:#ce5c00;font-weight:bold">.&lt;/span>&amp;#34;Remaining Amount&amp;#34;&lt;span style="color:#ce5c00;font-weight:bold">) &lt;/span>&lt;span style="color:#204a87;font-weight:bold">AND&lt;/span>&lt;span style="color:#f8f8f8;text-decoration:underline">
&lt;/span>&lt;span style="color:#f8f8f8;text-decoration:underline"> &lt;/span>&lt;span style="color:#ce5c00;font-weight:bold">(&lt;/span>BankAccRecLine&lt;span style="color:#ce5c00;font-weight:bold">.&lt;/span>&amp;#34;Transaction Date&amp;#34;&lt;span style="color:#f8f8f8;text-decoration:underline"> &lt;/span>=&lt;span style="color:#f8f8f8;text-decoration:underline"> &lt;/span>BankAccLedgerEntry&lt;span style="color:#ce5c00;font-weight:bold">.&lt;/span>&amp;#34;Posting Date&amp;#34;&lt;span style="color:#ce5c00;font-weight:bold">) &lt;/span>&lt;span style="color:#204a87;font-weight:bold">THEN&lt;/span>&lt;span style="color:#f8f8f8;text-decoration:underline">
&lt;/span>&lt;span style="color:#f8f8f8;text-decoration:underline"> &lt;/span>BankAccEntrySetReconNo&lt;span style="color:#ce5c00;font-weight:bold">.&lt;/span>ApplyEntries&lt;span style="color:#ce5c00;font-weight:bold">(
&lt;/span>&lt;span style="color:#ce5c00;font-weight:bold"> &lt;/span>BankAccRecLine&lt;span style="color:#000;font-weight:bold">,&lt;/span>BankAccLedgerEntry&lt;span style="color:#000;font-weight:bold">,&lt;/span>&lt;span style="color:#f8f8f8;text-decoration:underline"> &lt;/span>Relation&lt;span style="color:#000;font-weight:bold">::&lt;/span>&amp;#34;One-to-One&amp;#34;&lt;span style="color:#ce5c00;font-weight:bold">)&lt;/span>&lt;span style="color:#000;font-weight:bold">;&lt;/span>&lt;span style="color:#f8f8f8;text-decoration:underline">
&lt;/span>&lt;span style="color:#f8f8f8;text-decoration:underline"> &lt;/span>&lt;span style="color:#204a87;font-weight:bold">UNTIL&lt;/span>&lt;span style="color:#f8f8f8;text-decoration:underline"> &lt;/span>BankAccLedgerEntry&lt;span style="color:#ce5c00;font-weight:bold">.&lt;/span>NEXT&lt;span style="color:#f8f8f8;text-decoration:underline"> &lt;/span>=&lt;span style="color:#f8f8f8;text-decoration:underline"> &lt;/span>&lt;span style="color:#0000cf;font-weight:bold">0&lt;/span>&lt;span style="color:#000;font-weight:bold">;&lt;/span>&lt;span style="color:#f8f8f8;text-decoration:underline">
&lt;/span>&lt;span style="color:#f8f8f8;text-decoration:underline"> &lt;/span>&lt;span style="color:#204a87;font-weight:bold">UNTIL&lt;/span>&lt;span style="color:#f8f8f8;text-decoration:underline"> &lt;/span>BankAccRecLine&lt;span style="color:#ce5c00;font-weight:bold">.&lt;/span>NEXT&lt;span style="color:#f8f8f8;text-decoration:underline"> &lt;/span>=&lt;span style="color:#f8f8f8;text-decoration:underline"> &lt;/span>&lt;span style="color:#0000cf;font-weight:bold">0&lt;/span>&lt;span style="color:#000;font-weight:bold">;&lt;/span>&lt;span style="color:#f8f8f8;text-decoration:underline">
&lt;/span>&lt;span style="color:#f8f8f8;text-decoration:underline">&lt;/span>&lt;span style="color:#204a87;font-weight:bold">END&lt;/span>&lt;span style="color:#000;font-weight:bold">;&lt;/span>&lt;span style="color:#f8f8f8;text-decoration:underline">
&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>&lt;strong>Solution Using Query&lt;/strong>&lt;/p>
&lt;p>The new query-based approach involves:&lt;/p>
&lt;ol>
&lt;li>Define a query that returns the full filtered join of tables 271 and 274.&lt;/li>
&lt;li>Loop through the records returned by the query.&lt;/li>
&lt;li>For each query record, decide if it represents a solution and then connect the two table records that formed it through an application.&lt;/li>
&lt;/ol>
&lt;div class="highlight">&lt;pre tabindex="0" style="background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4">&lt;code class="language-al" data-lang="al">&lt;span style="color:#204a87;font-weight:bold">PROCEDURE&lt;/span>&lt;span style="color:#f8f8f8;text-decoration:underline"> &lt;/span>MatchSingle@&lt;span style="color:#0000cf;font-weight:bold">5&lt;/span>&lt;span style="color:#ce5c00;font-weight:bold">(&lt;/span>BankAccReconciliation@&lt;span style="color:#0000cf;font-weight:bold">1003&lt;/span>&lt;span style="color:#f8f8f8;text-decoration:underline"> &lt;/span>&lt;span style="color:#000;font-weight:bold">:&lt;/span>&lt;span style="color:#f8f8f8;text-decoration:underline"> &lt;/span>&lt;span style="color:#204a87;font-weight:bold">Record&lt;/span>&lt;span style="color:#f8f8f8;text-decoration:underline"> &lt;/span>&lt;span style="color:#0000cf;font-weight:bold">273&lt;/span>&lt;span style="color:#ce5c00;font-weight:bold">)&lt;/span>&lt;span style="color:#000;font-weight:bold">;&lt;/span>&lt;span style="color:#f8f8f8;text-decoration:underline">
&lt;/span>&lt;span style="color:#f8f8f8;text-decoration:underline">&lt;/span>&lt;span style="color:#204a87;font-weight:bold">VAR&lt;/span>&lt;span style="color:#f8f8f8;text-decoration:underline">
&lt;/span>&lt;span style="color:#f8f8f8;text-decoration:underline"> &lt;/span>BankRecMatchCandidates@&lt;span style="color:#0000cf;font-weight:bold">1001&lt;/span>&lt;span style="color:#f8f8f8;text-decoration:underline"> &lt;/span>&lt;span style="color:#000;font-weight:bold">:&lt;/span>&lt;span style="color:#f8f8f8;text-decoration:underline"> &lt;/span>&lt;span style="color:#204a87;font-weight:bold">Query&lt;/span>&lt;span style="color:#f8f8f8;text-decoration:underline"> &lt;/span>&lt;span style="color:#0000cf;font-weight:bold">1252&lt;/span>&lt;span style="color:#000;font-weight:bold">;&lt;/span>&lt;span style="color:#f8f8f8;text-decoration:underline">
&lt;/span>&lt;span style="color:#f8f8f8;text-decoration:underline"> &lt;/span>BankAccEntrySetReconNo@&lt;span style="color:#0000cf;font-weight:bold">1007&lt;/span>&lt;span style="color:#f8f8f8;text-decoration:underline"> &lt;/span>&lt;span style="color:#000;font-weight:bold">:&lt;/span>&lt;span style="color:#f8f8f8;text-decoration:underline"> &lt;/span>&lt;span style="color:#204a87;font-weight:bold">Codeunit&lt;/span>&lt;span style="color:#f8f8f8;text-decoration:underline"> &lt;/span>&lt;span style="color:#0000cf;font-weight:bold">375&lt;/span>&lt;span style="color:#000;font-weight:bold">;&lt;/span>&lt;span style="color:#f8f8f8;text-decoration:underline">
&lt;/span>&lt;span style="color:#f8f8f8;text-decoration:underline">&lt;/span>&lt;span style="color:#204a87;font-weight:bold">BEGIN&lt;/span>&lt;span style="color:#f8f8f8;text-decoration:underline">
&lt;/span>&lt;span style="color:#f8f8f8;text-decoration:underline"> &lt;/span>BankRecMatchCandidates&lt;span style="color:#ce5c00;font-weight:bold">.&lt;/span>SETRANGE&lt;span style="color:#ce5c00;font-weight:bold">(&lt;/span>Rec_Line_Bank_Account_No&lt;span style="color:#000;font-weight:bold">,&lt;/span>&lt;span style="color:#f8f8f8;text-decoration:underline">
&lt;/span>&lt;span style="color:#f8f8f8;text-decoration:underline"> &lt;/span>BankAccReconciliation&lt;span style="color:#ce5c00;font-weight:bold">.&lt;/span>&amp;#34;Bank Account No.&amp;#34;&lt;span style="color:#ce5c00;font-weight:bold">)&lt;/span>&lt;span style="color:#000;font-weight:bold">;&lt;/span>&lt;span style="color:#f8f8f8;text-decoration:underline">
&lt;/span>&lt;span style="color:#f8f8f8;text-decoration:underline"> &lt;/span>BankRecMatchCandidates&lt;span style="color:#ce5c00;font-weight:bold">.&lt;/span>SETRANGE&lt;span style="color:#ce5c00;font-weight:bold">(&lt;/span>Rec_Line_Statement_No&lt;span style="color:#000;font-weight:bold">,&lt;/span>&lt;span style="color:#f8f8f8;text-decoration:underline">
&lt;/span>&lt;span style="color:#f8f8f8;text-decoration:underline"> &lt;/span>BankAccReconciliation&lt;span style="color:#ce5c00;font-weight:bold">.&lt;/span>&amp;#34;Statement No.&amp;#34;&lt;span style="color:#ce5c00;font-weight:bold">)&lt;/span>&lt;span style="color:#000;font-weight:bold">;&lt;/span>&lt;span style="color:#f8f8f8;text-decoration:underline">
&lt;/span>&lt;span style="color:#f8f8f8;text-decoration:underline">
&lt;/span>&lt;span style="color:#f8f8f8;text-decoration:underline"> &lt;/span>&lt;span style="color:#204a87;font-weight:bold">IF&lt;/span>&lt;span style="color:#f8f8f8;text-decoration:underline"> &lt;/span>&lt;span style="color:#204a87;font-weight:bold">NOT&lt;/span>&lt;span style="color:#f8f8f8;text-decoration:underline"> &lt;/span>BankRecMatchCandidates&lt;span style="color:#ce5c00;font-weight:bold">.&lt;/span>OPEN&lt;span style="color:#f8f8f8;text-decoration:underline"> &lt;/span>&lt;span style="color:#204a87;font-weight:bold">THEN&lt;/span>&lt;span style="color:#f8f8f8;text-decoration:underline">
&lt;/span>&lt;span style="color:#f8f8f8;text-decoration:underline"> &lt;/span>&lt;span style="color:#204a87;font-weight:bold">EXIT&lt;/span>&lt;span style="color:#000;font-weight:bold">;&lt;/span>&lt;span style="color:#f8f8f8;text-decoration:underline">
&lt;/span>&lt;span style="color:#f8f8f8;text-decoration:underline">
&lt;/span>&lt;span style="color:#f8f8f8;text-decoration:underline"> &lt;/span>&lt;span style="color:#204a87;font-weight:bold">WHILE&lt;/span>&lt;span style="color:#f8f8f8;text-decoration:underline"> &lt;/span>BankRecMatchCandidates&lt;span style="color:#ce5c00;font-weight:bold">.&lt;/span>READ&lt;span style="color:#f8f8f8;text-decoration:underline"> &lt;/span>&lt;span style="color:#204a87;font-weight:bold">DO&lt;/span>&lt;span style="color:#f8f8f8;text-decoration:underline"> &lt;/span>&lt;span style="color:#204a87;font-weight:bold">BEGIN&lt;/span>&lt;span style="color:#f8f8f8;text-decoration:underline">
&lt;/span>&lt;span style="color:#f8f8f8;text-decoration:underline"> &lt;/span>BankAccLedgerEntry&lt;span style="color:#ce5c00;font-weight:bold">.&lt;/span>GET&lt;span style="color:#ce5c00;font-weight:bold">(&lt;/span>BankRecMatchCandidates&lt;span style="color:#ce5c00;font-weight:bold">.&lt;/span>Entry_No&lt;span style="color:#ce5c00;font-weight:bold">)&lt;/span>&lt;span style="color:#000;font-weight:bold">;&lt;/span>&lt;span style="color:#f8f8f8;text-decoration:underline">
&lt;/span>&lt;span style="color:#f8f8f8;text-decoration:underline"> &lt;/span>BankAccRecLine&lt;span style="color:#ce5c00;font-weight:bold">.&lt;/span>GET&lt;span style="color:#ce5c00;font-weight:bold">(&lt;/span>BankAccRecLine&lt;span style="color:#ce5c00;font-weight:bold">.&lt;/span>&amp;#34;Statement Type&amp;#34;&lt;span style="color:#000;font-weight:bold">::&lt;/span>&amp;#34;Bank Reconciliation&amp;#34;&lt;span style="color:#000;font-weight:bold">,&lt;/span>&lt;span style="color:#f8f8f8;text-decoration:underline">
&lt;/span>&lt;span style="color:#f8f8f8;text-decoration:underline"> &lt;/span>BankRecMatchCandidates&lt;span style="color:#ce5c00;font-weight:bold">.&lt;/span>Rec_Line_Bank_Account_No&lt;span style="color:#000;font-weight:bold">,&lt;/span>&lt;span style="color:#f8f8f8;text-decoration:underline">
&lt;/span>&lt;span style="color:#f8f8f8;text-decoration:underline"> &lt;/span>BankRecMatchCandidates&lt;span style="color:#ce5c00;font-weight:bold">.&lt;/span>Rec_Line_Statement_No&lt;span style="color:#000;font-weight:bold">,&lt;/span>&lt;span style="color:#f8f8f8;text-decoration:underline">
&lt;/span>&lt;span style="color:#f8f8f8;text-decoration:underline"> &lt;/span>BankRecMatchCandidates&lt;span style="color:#ce5c00;font-weight:bold">.&lt;/span>Rec_Line_Statement_Line_No&lt;span style="color:#ce5c00;font-weight:bold">)&lt;/span>&lt;span style="color:#000;font-weight:bold">;&lt;/span>&lt;span style="color:#f8f8f8;text-decoration:underline">
&lt;/span>&lt;span style="color:#f8f8f8;text-decoration:underline"> &lt;/span>BankAccEntrySetReconNo&lt;span style="color:#ce5c00;font-weight:bold">.&lt;/span>ApplyEntries&lt;span style="color:#ce5c00;font-weight:bold">(&lt;/span>BankAccRecLine&lt;span style="color:#000;font-weight:bold">,&lt;/span>BankAccLedgerEntry&lt;span style="color:#000;font-weight:bold">,&lt;/span>&lt;span style="color:#f8f8f8;text-decoration:underline">
&lt;/span>&lt;span style="color:#f8f8f8;text-decoration:underline"> &lt;/span>Relation&lt;span style="color:#000;font-weight:bold">::&lt;/span>&amp;#34;One-to-One&amp;#34;&lt;span style="color:#ce5c00;font-weight:bold">)&lt;/span>&lt;span style="color:#000;font-weight:bold">;&lt;/span>&lt;span style="color:#f8f8f8;text-decoration:underline">
&lt;/span>&lt;span style="color:#f8f8f8;text-decoration:underline"> &lt;/span>&lt;span style="color:#204a87;font-weight:bold">END&lt;/span>&lt;span style="color:#000;font-weight:bold">;&lt;/span>&lt;span style="color:#f8f8f8;text-decoration:underline">
&lt;/span>&lt;span style="color:#f8f8f8;text-decoration:underline">&lt;/span>&lt;span style="color:#204a87;font-weight:bold">END&lt;/span>&lt;span style="color:#000;font-weight:bold">;&lt;/span>&lt;span style="color:#f8f8f8;text-decoration:underline">
&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>where the query 1252 is defined as:&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" style="background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4">&lt;code class="language-al" data-lang="al">OBJECT&lt;span style="color:#f8f8f8;text-decoration:underline"> &lt;/span>&lt;span style="color:#204a87;font-weight:bold">Query&lt;/span>&lt;span style="color:#f8f8f8;text-decoration:underline"> &lt;/span>&lt;span style="color:#0000cf;font-weight:bold">1252&lt;/span>&lt;span style="color:#f8f8f8;text-decoration:underline"> &lt;/span>Bank&lt;span style="color:#f8f8f8;text-decoration:underline"> &lt;/span>Rec&lt;span style="color:#ce5c00;font-weight:bold">. &lt;/span>Match&lt;span style="color:#f8f8f8;text-decoration:underline"> &lt;/span>Candidates&lt;span style="color:#f8f8f8;text-decoration:underline">
&lt;/span>&lt;span style="color:#f8f8f8;text-decoration:underline">&lt;/span>{&lt;span style="color:#f8f8f8;text-decoration:underline">
&lt;/span>&lt;span style="color:#f8f8f8;text-decoration:underline"> &lt;/span>OBJECT&lt;span style="color:#ce5c00;font-weight:bold">-&lt;/span>PROPERTIES&lt;span style="color:#f8f8f8;text-decoration:underline">
&lt;/span>&lt;span style="color:#f8f8f8;text-decoration:underline"> &lt;/span>{&lt;span style="color:#f8f8f8;text-decoration:underline">
&lt;/span>&lt;span style="color:#f8f8f8;text-decoration:underline"> &lt;/span>&lt;span style="color:#204a87;font-weight:bold">Date&lt;/span>=&lt;span style="color:#000;font-weight:bold">;&lt;/span>&lt;span style="color:#f8f8f8;text-decoration:underline">
&lt;/span>&lt;span style="color:#f8f8f8;text-decoration:underline"> &lt;/span>&lt;span style="color:#204a87;font-weight:bold">Time&lt;/span>=&lt;span style="color:#000;font-weight:bold">;&lt;/span>&lt;span style="color:#f8f8f8;text-decoration:underline">
&lt;/span>&lt;span style="color:#f8f8f8;text-decoration:underline"> &lt;/span>&lt;span style="color:#204a87;font-weight:bold">Version&lt;/span>&lt;span style="color:#f8f8f8;text-decoration:underline"> &lt;/span>&lt;span style="color:#204a87;font-weight:bold">List&lt;/span>=&lt;span style="color:#000;font-weight:bold">;&lt;/span>&lt;span style="color:#f8f8f8;text-decoration:underline">
&lt;/span>&lt;span style="color:#f8f8f8;text-decoration:underline"> &lt;/span>}&lt;span style="color:#f8f8f8;text-decoration:underline">
&lt;/span>&lt;span style="color:#f8f8f8;text-decoration:underline"> &lt;/span>PROPERTIES&lt;span style="color:#f8f8f8;text-decoration:underline">
&lt;/span>&lt;span style="color:#f8f8f8;text-decoration:underline"> &lt;/span>{&lt;span style="color:#f8f8f8;text-decoration:underline">
&lt;/span>&lt;span style="color:#f8f8f8;text-decoration:underline"> &lt;/span>}&lt;span style="color:#f8f8f8;text-decoration:underline">
&lt;/span>&lt;span style="color:#f8f8f8;text-decoration:underline"> &lt;/span>&lt;span style="color:#204a87;font-weight:bold">ELEMENTS&lt;/span>&lt;span style="color:#f8f8f8;text-decoration:underline">
&lt;/span>&lt;span style="color:#f8f8f8;text-decoration:underline"> &lt;/span>{&lt;span style="color:#f8f8f8;text-decoration:underline">
&lt;/span>&lt;span style="color:#f8f8f8;text-decoration:underline"> &lt;/span>{&lt;span style="color:#f8f8f8;text-decoration:underline"> &lt;/span>&lt;span style="color:#0000cf;font-weight:bold">1&lt;/span>&lt;span style="color:#f8f8f8;text-decoration:underline"> &lt;/span>&lt;span style="color:#000;font-weight:bold">;&lt;/span>&lt;span style="color:#f8f8f8;text-decoration:underline"> &lt;/span>&lt;span style="color:#000;font-weight:bold">;&lt;/span>&lt;span style="color:#204a87;font-weight:bold">DataItem&lt;/span>&lt;span style="color:#000;font-weight:bold">;&lt;/span>&lt;span style="color:#f8f8f8;text-decoration:underline"> &lt;/span>&lt;span style="color:#000;font-weight:bold">;&lt;/span>&lt;span style="color:#f8f8f8;text-decoration:underline">
&lt;/span>&lt;span style="color:#f8f8f8;text-decoration:underline"> &lt;/span>DataItemTable=Table274&lt;span style="color:#000;font-weight:bold">;&lt;/span>&lt;span style="color:#f8f8f8;text-decoration:underline">
&lt;/span>&lt;span style="color:#f8f8f8;text-decoration:underline"> &lt;/span>DataItemTableFilter=Difference=&lt;span style="color:#204a87;font-weight:bold">FILTER&lt;/span>&lt;span style="color:#ce5c00;font-weight:bold">(&lt;/span>&amp;lt;&amp;gt;&lt;span style="color:#0000cf;font-weight:bold">0&lt;/span>&lt;span style="color:#ce5c00;font-weight:bold">)&lt;/span>&lt;span style="color:#000;font-weight:bold">,&lt;/span>&lt;span style="color:#f8f8f8;text-decoration:underline">
&lt;/span>&lt;span style="color:#f8f8f8;text-decoration:underline"> &lt;/span>&lt;span style="color:#204a87;font-weight:bold">Type&lt;/span>=&lt;span style="color:#204a87;font-weight:bold">FILTER&lt;/span>&lt;span style="color:#ce5c00;font-weight:bold">(&lt;/span>=Bank&lt;span style="color:#f8f8f8;text-decoration:underline"> &lt;/span>Account&lt;span style="color:#f8f8f8;text-decoration:underline"> &lt;/span>Ledger&lt;span style="color:#f8f8f8;text-decoration:underline"> &lt;/span>Entry&lt;span style="color:#ce5c00;font-weight:bold">) &lt;/span>}&lt;span style="color:#f8f8f8;text-decoration:underline">
&lt;/span>&lt;span style="color:#f8f8f8;text-decoration:underline"> &lt;/span>{&lt;span style="color:#f8f8f8;text-decoration:underline"> &lt;/span>&lt;span style="color:#0000cf;font-weight:bold">2&lt;/span>&lt;span style="color:#f8f8f8;text-decoration:underline"> &lt;/span>&lt;span style="color:#000;font-weight:bold">;&lt;/span>&lt;span style="color:#0000cf;font-weight:bold">1&lt;/span>&lt;span style="color:#f8f8f8;text-decoration:underline"> &lt;/span>&lt;span style="color:#000;font-weight:bold">;&lt;/span>&lt;span style="color:#204a87;font-weight:bold">Column&lt;/span>&lt;span style="color:#f8f8f8;text-decoration:underline"> &lt;/span>&lt;span style="color:#000;font-weight:bold">;&lt;/span>Rec_Line_Bank_Account_No&lt;span style="color:#000;font-weight:bold">;&lt;/span>&lt;span style="color:#f8f8f8;text-decoration:underline">
&lt;/span>&lt;span style="color:#f8f8f8;text-decoration:underline"> &lt;/span>DataSource=Bank&lt;span style="color:#f8f8f8;text-decoration:underline"> &lt;/span>Account&lt;span style="color:#f8f8f8;text-decoration:underline"> &lt;/span>No&lt;span style="color:#ce5c00;font-weight:bold">. &lt;/span>}&lt;span style="color:#f8f8f8;text-decoration:underline">
&lt;/span>&lt;span style="color:#f8f8f8;text-decoration:underline"> &lt;/span>{&lt;span style="color:#f8f8f8;text-decoration:underline"> &lt;/span>&lt;span style="color:#0000cf;font-weight:bold">3&lt;/span>&lt;span style="color:#f8f8f8;text-decoration:underline"> &lt;/span>&lt;span style="color:#000;font-weight:bold">;&lt;/span>&lt;span style="color:#0000cf;font-weight:bold">1&lt;/span>&lt;span style="color:#f8f8f8;text-decoration:underline"> &lt;/span>&lt;span style="color:#000;font-weight:bold">;&lt;/span>&lt;span style="color:#204a87;font-weight:bold">Column&lt;/span>&lt;span style="color:#f8f8f8;text-decoration:underline"> &lt;/span>&lt;span style="color:#000;font-weight:bold">;&lt;/span>Rec_Line_Statement_No&lt;span style="color:#000;font-weight:bold">;&lt;/span>&lt;span style="color:#f8f8f8;text-decoration:underline">
&lt;/span>&lt;span style="color:#f8f8f8;text-decoration:underline"> &lt;/span>DataSource=Statement&lt;span style="color:#f8f8f8;text-decoration:underline"> &lt;/span>No&lt;span style="color:#ce5c00;font-weight:bold">. &lt;/span>}&lt;span style="color:#f8f8f8;text-decoration:underline">
&lt;/span>&lt;span style="color:#f8f8f8;text-decoration:underline"> &lt;/span>{&lt;span style="color:#f8f8f8;text-decoration:underline"> &lt;/span>&lt;span style="color:#0000cf;font-weight:bold">4&lt;/span>&lt;span style="color:#f8f8f8;text-decoration:underline"> &lt;/span>&lt;span style="color:#000;font-weight:bold">;&lt;/span>&lt;span style="color:#0000cf;font-weight:bold">1&lt;/span>&lt;span style="color:#f8f8f8;text-decoration:underline"> &lt;/span>&lt;span style="color:#000;font-weight:bold">;&lt;/span>&lt;span style="color:#204a87;font-weight:bold">Column&lt;/span>&lt;span style="color:#f8f8f8;text-decoration:underline"> &lt;/span>&lt;span style="color:#000;font-weight:bold">;&lt;/span>Rec_Line_Statement_Line_No&lt;span style="color:#000;font-weight:bold">;&lt;/span>&lt;span style="color:#f8f8f8;text-decoration:underline">
&lt;/span>&lt;span style="color:#f8f8f8;text-decoration:underline"> &lt;/span>DataSource=Statement&lt;span style="color:#f8f8f8;text-decoration:underline"> &lt;/span>Line&lt;span style="color:#f8f8f8;text-decoration:underline"> &lt;/span>No&lt;span style="color:#ce5c00;font-weight:bold">. &lt;/span>}&lt;span style="color:#f8f8f8;text-decoration:underline">
&lt;/span>&lt;span style="color:#f8f8f8;text-decoration:underline"> &lt;/span>{&lt;span style="color:#f8f8f8;text-decoration:underline"> &lt;/span>&lt;span style="color:#0000cf;font-weight:bold">5&lt;/span>&lt;span style="color:#f8f8f8;text-decoration:underline"> &lt;/span>&lt;span style="color:#000;font-weight:bold">;&lt;/span>&lt;span style="color:#0000cf;font-weight:bold">1&lt;/span>&lt;span style="color:#f8f8f8;text-decoration:underline"> &lt;/span>&lt;span style="color:#000;font-weight:bold">;&lt;/span>&lt;span style="color:#204a87;font-weight:bold">Column&lt;/span>&lt;span style="color:#f8f8f8;text-decoration:underline"> &lt;/span>&lt;span style="color:#000;font-weight:bold">;&lt;/span>Rec_Line_Transaction_Date&lt;span style="color:#000;font-weight:bold">;&lt;/span>&lt;span style="color:#f8f8f8;text-decoration:underline">
&lt;/span>&lt;span style="color:#f8f8f8;text-decoration:underline"> &lt;/span>DataSource=Transaction&lt;span style="color:#f8f8f8;text-decoration:underline"> &lt;/span>&lt;span style="color:#204a87;font-weight:bold">Date&lt;/span>&lt;span style="color:#f8f8f8;text-decoration:underline"> &lt;/span>}&lt;span style="color:#f8f8f8;text-decoration:underline">
&lt;/span>&lt;span style="color:#f8f8f8;text-decoration:underline"> &lt;/span>{&lt;span style="color:#f8f8f8;text-decoration:underline"> &lt;/span>&lt;span style="color:#0000cf;font-weight:bold">6&lt;/span>&lt;span style="color:#f8f8f8;text-decoration:underline"> &lt;/span>&lt;span style="color:#000;font-weight:bold">;&lt;/span>&lt;span style="color:#0000cf;font-weight:bold">1&lt;/span>&lt;span style="color:#f8f8f8;text-decoration:underline"> &lt;/span>&lt;span style="color:#000;font-weight:bold">;&lt;/span>&lt;span style="color:#204a87;font-weight:bold">Column&lt;/span>&lt;span style="color:#f8f8f8;text-decoration:underline"> &lt;/span>&lt;span style="color:#000;font-weight:bold">;&lt;/span>Rec_Line_Difference&lt;span style="color:#f8f8f8;text-decoration:underline"> &lt;/span>&lt;span style="color:#000;font-weight:bold">;&lt;/span>&lt;span style="color:#f8f8f8;text-decoration:underline">
&lt;/span>&lt;span style="color:#f8f8f8;text-decoration:underline"> &lt;/span>DataSource=Difference&lt;span style="color:#f8f8f8;text-decoration:underline"> &lt;/span>}&lt;span style="color:#f8f8f8;text-decoration:underline">
&lt;/span>&lt;span style="color:#f8f8f8;text-decoration:underline"> &lt;/span>{&lt;span style="color:#f8f8f8;text-decoration:underline"> &lt;/span>&lt;span style="color:#0000cf;font-weight:bold">7&lt;/span>&lt;span style="color:#f8f8f8;text-decoration:underline"> &lt;/span>&lt;span style="color:#000;font-weight:bold">;&lt;/span>&lt;span style="color:#0000cf;font-weight:bold">1&lt;/span>&lt;span style="color:#f8f8f8;text-decoration:underline"> &lt;/span>&lt;span style="color:#000;font-weight:bold">;&lt;/span>&lt;span style="color:#204a87;font-weight:bold">DataItem&lt;/span>&lt;span style="color:#000;font-weight:bold">;&lt;/span>&lt;span style="color:#f8f8f8;text-decoration:underline"> &lt;/span>&lt;span style="color:#000;font-weight:bold">;&lt;/span>&lt;span style="color:#f8f8f8;text-decoration:underline">
&lt;/span>&lt;span style="color:#f8f8f8;text-decoration:underline"> &lt;/span>DataItemTable=Table271&lt;span style="color:#000;font-weight:bold">;&lt;/span>&lt;span style="color:#f8f8f8;text-decoration:underline">
&lt;/span>&lt;span style="color:#f8f8f8;text-decoration:underline"> &lt;/span>DataItemTableFilter=Remaining&lt;span style="color:#f8f8f8;text-decoration:underline"> &lt;/span>Amount=&lt;span style="color:#204a87;font-weight:bold">FILTER&lt;/span>&lt;span style="color:#ce5c00;font-weight:bold">(&lt;/span>&amp;lt;&amp;gt;&lt;span style="color:#0000cf;font-weight:bold">0&lt;/span>&lt;span style="color:#ce5c00;font-weight:bold">)&lt;/span>&lt;span style="color:#000;font-weight:bold">,&lt;/span>&lt;span style="color:#f8f8f8;text-decoration:underline">
&lt;/span>&lt;span style="color:#f8f8f8;text-decoration:underline"> &lt;/span>Open=&lt;span style="color:#204a87;font-weight:bold">CONST&lt;/span>&lt;span style="color:#ce5c00;font-weight:bold">(&lt;/span>Yes&lt;span style="color:#ce5c00;font-weight:bold">)&lt;/span>&lt;span style="color:#000;font-weight:bold">,&lt;/span>&lt;span style="color:#f8f8f8;text-decoration:underline">
&lt;/span>&lt;span style="color:#f8f8f8;text-decoration:underline"> &lt;/span>Statement&lt;span style="color:#f8f8f8;text-decoration:underline"> &lt;/span>Status=&lt;span style="color:#204a87;font-weight:bold">FILTER&lt;/span>&lt;span style="color:#ce5c00;font-weight:bold">(&lt;/span>Open&lt;span style="color:#ce5c00;font-weight:bold">)&lt;/span>&lt;span style="color:#000;font-weight:bold">;&lt;/span>&lt;span style="color:#f8f8f8;text-decoration:underline">
&lt;/span>&lt;span style="color:#f8f8f8;text-decoration:underline"> &lt;/span>DataItemLink=Bank&lt;span style="color:#f8f8f8;text-decoration:underline"> &lt;/span>Account&lt;span style="color:#f8f8f8;text-decoration:underline"> &lt;/span>No&lt;span style="color:#ce5c00;font-weight:bold">.&lt;/span>=Bank_Acc_Reconciliation_Line&lt;span style="color:#ce5c00;font-weight:bold">.&lt;/span>&amp;#34;Bank Account o.&amp;#34;&lt;span style="color:#000;font-weight:bold">,&lt;/span>&lt;span style="color:#f8f8f8;text-decoration:underline">
&lt;/span>&lt;span style="color:#f8f8f8;text-decoration:underline"> &lt;/span>Remaining&lt;span style="color:#f8f8f8;text-decoration:underline"> &lt;/span>Amount=Bank_Acc_Reconciliation_Line&lt;span style="color:#ce5c00;font-weight:bold">.&lt;/span>Difference&lt;span style="color:#000;font-weight:bold">,&lt;/span>&lt;span style="color:#f8f8f8;text-decoration:underline">
&lt;/span>&lt;span style="color:#f8f8f8;text-decoration:underline"> &lt;/span>Posting&lt;span style="color:#f8f8f8;text-decoration:underline"> &lt;/span>&lt;span style="color:#204a87;font-weight:bold">Date&lt;/span>=Bank_Acc_Reconciliation_Line&lt;span style="color:#ce5c00;font-weight:bold">.&lt;/span>&amp;#34;Transaction Date&amp;#34;&lt;span style="color:#f8f8f8;text-decoration:underline"> &lt;/span>}&lt;span style="color:#f8f8f8;text-decoration:underline">
&lt;/span>&lt;span style="color:#f8f8f8;text-decoration:underline"> &lt;/span>{&lt;span style="color:#f8f8f8;text-decoration:underline"> &lt;/span>&lt;span style="color:#0000cf;font-weight:bold">8&lt;/span>&lt;span style="color:#f8f8f8;text-decoration:underline"> &lt;/span>&lt;span style="color:#000;font-weight:bold">;&lt;/span>&lt;span style="color:#0000cf;font-weight:bold">2&lt;/span>&lt;span style="color:#f8f8f8;text-decoration:underline"> &lt;/span>&lt;span style="color:#000;font-weight:bold">;&lt;/span>&lt;span style="color:#204a87;font-weight:bold">Column&lt;/span>&lt;span style="color:#f8f8f8;text-decoration:underline"> &lt;/span>&lt;span style="color:#000;font-weight:bold">;&lt;/span>&lt;span style="color:#f8f8f8;text-decoration:underline"> &lt;/span>&lt;span style="color:#000;font-weight:bold">;&lt;/span>&lt;span style="color:#f8f8f8;text-decoration:underline">
&lt;/span>&lt;span style="color:#f8f8f8;text-decoration:underline"> &lt;/span>DataSource=Entry&lt;span style="color:#f8f8f8;text-decoration:underline"> &lt;/span>No&lt;span style="color:#ce5c00;font-weight:bold">. &lt;/span>}&lt;span style="color:#f8f8f8;text-decoration:underline">
&lt;/span>&lt;span style="color:#f8f8f8;text-decoration:underline"> &lt;/span>{&lt;span style="color:#f8f8f8;text-decoration:underline"> &lt;/span>&lt;span style="color:#0000cf;font-weight:bold">9&lt;/span>&lt;span style="color:#f8f8f8;text-decoration:underline"> &lt;/span>&lt;span style="color:#000;font-weight:bold">;&lt;/span>&lt;span style="color:#0000cf;font-weight:bold">2&lt;/span>&lt;span style="color:#f8f8f8;text-decoration:underline"> &lt;/span>&lt;span style="color:#000;font-weight:bold">;&lt;/span>&lt;span style="color:#204a87;font-weight:bold">Column&lt;/span>&lt;span style="color:#f8f8f8;text-decoration:underline"> &lt;/span>&lt;span style="color:#000;font-weight:bold">;&lt;/span>Bank_Account_No&lt;span style="color:#f8f8f8;text-decoration:underline"> &lt;/span>&lt;span style="color:#000;font-weight:bold">;&lt;/span>&lt;span style="color:#f8f8f8;text-decoration:underline">
&lt;/span>&lt;span style="color:#f8f8f8;text-decoration:underline"> &lt;/span>DataSource=Bank&lt;span style="color:#f8f8f8;text-decoration:underline"> &lt;/span>Account&lt;span style="color:#f8f8f8;text-decoration:underline"> &lt;/span>No&lt;span style="color:#ce5c00;font-weight:bold">. &lt;/span>}&lt;span style="color:#f8f8f8;text-decoration:underline">
&lt;/span>&lt;span style="color:#f8f8f8;text-decoration:underline"> &lt;/span>{&lt;span style="color:#f8f8f8;text-decoration:underline"> &lt;/span>&lt;span style="color:#0000cf;font-weight:bold">10&lt;/span>&lt;span style="color:#f8f8f8;text-decoration:underline"> &lt;/span>&lt;span style="color:#000;font-weight:bold">;&lt;/span>&lt;span style="color:#0000cf;font-weight:bold">2&lt;/span>&lt;span style="color:#f8f8f8;text-decoration:underline"> &lt;/span>&lt;span style="color:#000;font-weight:bold">;&lt;/span>&lt;span style="color:#204a87;font-weight:bold">Column&lt;/span>&lt;span style="color:#f8f8f8;text-decoration:underline"> &lt;/span>&lt;span style="color:#000;font-weight:bold">;&lt;/span>&lt;span style="color:#f8f8f8;text-decoration:underline"> &lt;/span>&lt;span style="color:#000;font-weight:bold">;&lt;/span>&lt;span style="color:#f8f8f8;text-decoration:underline">
&lt;/span>&lt;span style="color:#f8f8f8;text-decoration:underline"> &lt;/span>DataSource=Posting&lt;span style="color:#f8f8f8;text-decoration:underline"> &lt;/span>&lt;span style="color:#204a87;font-weight:bold">Date&lt;/span>&lt;span style="color:#f8f8f8;text-decoration:underline"> &lt;/span>}&lt;span style="color:#f8f8f8;text-decoration:underline">
&lt;/span>&lt;span style="color:#f8f8f8;text-decoration:underline"> &lt;/span>{&lt;span style="color:#f8f8f8;text-decoration:underline"> &lt;/span>&lt;span style="color:#0000cf;font-weight:bold">11&lt;/span>&lt;span style="color:#f8f8f8;text-decoration:underline"> &lt;/span>&lt;span style="color:#000;font-weight:bold">;&lt;/span>&lt;span style="color:#0000cf;font-weight:bold">2&lt;/span>&lt;span style="color:#f8f8f8;text-decoration:underline"> &lt;/span>&lt;span style="color:#000;font-weight:bold">;&lt;/span>&lt;span style="color:#204a87;font-weight:bold">Column&lt;/span>&lt;span style="color:#f8f8f8;text-decoration:underline"> &lt;/span>&lt;span style="color:#000;font-weight:bold">;&lt;/span>&lt;span style="color:#f8f8f8;text-decoration:underline"> &lt;/span>&lt;span style="color:#000;font-weight:bold">;&lt;/span>&lt;span style="color:#f8f8f8;text-decoration:underline">
&lt;/span>&lt;span style="color:#f8f8f8;text-decoration:underline"> &lt;/span>DataSource=Remaining&lt;span style="color:#f8f8f8;text-decoration:underline"> &lt;/span>Amount&lt;span style="color:#f8f8f8;text-decoration:underline"> &lt;/span>}&lt;span style="color:#f8f8f8;text-decoration:underline">
&lt;/span>&lt;span style="color:#f8f8f8;text-decoration:underline"> &lt;/span>{&lt;span style="color:#f8f8f8;text-decoration:underline"> &lt;/span>&lt;span style="color:#0000cf;font-weight:bold">12&lt;/span>&lt;span style="color:#f8f8f8;text-decoration:underline"> &lt;/span>&lt;span style="color:#000;font-weight:bold">;&lt;/span>&lt;span style="color:#0000cf;font-weight:bold">2&lt;/span>&lt;span style="color:#f8f8f8;text-decoration:underline"> &lt;/span>&lt;span style="color:#000;font-weight:bold">;&lt;/span>&lt;span style="color:#204a87;font-weight:bold">Column&lt;/span>&lt;span style="color:#f8f8f8;text-decoration:underline"> &lt;/span>&lt;span style="color:#000;font-weight:bold">;&lt;/span>Bank_Ledger_Entry_Open&lt;span style="color:#000;font-weight:bold">;&lt;/span>&lt;span style="color:#f8f8f8;text-decoration:underline">
&lt;/span>&lt;span style="color:#f8f8f8;text-decoration:underline"> &lt;/span>DataSource=Open&lt;span style="color:#f8f8f8;text-decoration:underline"> &lt;/span>}&lt;span style="color:#f8f8f8;text-decoration:underline">
&lt;/span>&lt;span style="color:#f8f8f8;text-decoration:underline"> &lt;/span>{&lt;span style="color:#f8f8f8;text-decoration:underline"> &lt;/span>&lt;span style="color:#0000cf;font-weight:bold">13&lt;/span>&lt;span style="color:#f8f8f8;text-decoration:underline"> &lt;/span>&lt;span style="color:#000;font-weight:bold">;&lt;/span>&lt;span style="color:#0000cf;font-weight:bold">2&lt;/span>&lt;span style="color:#f8f8f8;text-decoration:underline"> &lt;/span>&lt;span style="color:#000;font-weight:bold">;&lt;/span>&lt;span style="color:#204a87;font-weight:bold">Column&lt;/span>&lt;span style="color:#f8f8f8;text-decoration:underline"> &lt;/span>&lt;span style="color:#000;font-weight:bold">;&lt;/span>&lt;span style="color:#f8f8f8;text-decoration:underline"> &lt;/span>&lt;span style="color:#000;font-weight:bold">;&lt;/span>&lt;span style="color:#f8f8f8;text-decoration:underline">
&lt;/span>&lt;span style="color:#f8f8f8;text-decoration:underline"> &lt;/span>DataSource=Statement&lt;span style="color:#f8f8f8;text-decoration:underline"> &lt;/span>Status&lt;span style="color:#f8f8f8;text-decoration:underline"> &lt;/span>}&lt;span style="color:#f8f8f8;text-decoration:underline">
&lt;/span>&lt;span style="color:#f8f8f8;text-decoration:underline"> &lt;/span>}&lt;span style="color:#f8f8f8;text-decoration:underline">
&lt;/span>&lt;span style="color:#f8f8f8;text-decoration:underline"> &lt;/span>&lt;span style="color:#204a87;font-weight:bold">CODE&lt;/span>&lt;span style="color:#f8f8f8;text-decoration:underline">
&lt;/span>&lt;span style="color:#f8f8f8;text-decoration:underline"> &lt;/span>{&lt;span style="color:#f8f8f8;text-decoration:underline">
&lt;/span>&lt;span style="color:#f8f8f8;text-decoration:underline"> &lt;/span>&lt;span style="color:#204a87;font-weight:bold">BEGIN&lt;/span>&lt;span style="color:#f8f8f8;text-decoration:underline">
&lt;/span>&lt;span style="color:#f8f8f8;text-decoration:underline"> &lt;/span>&lt;span style="color:#204a87;font-weight:bold">END&lt;/span>&lt;span style="color:#ce5c00;font-weight:bold">.
&lt;/span>&lt;span style="color:#ce5c00;font-weight:bold"> &lt;/span>}&lt;span style="color:#f8f8f8;text-decoration:underline">
&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>When comparing the two implementations, we notice the following advantages of using a query instead of two loops:Comparison&lt;/p>
&lt;ol>
&lt;li>A query produces the Cartesian product of tables 1 and 2 faster than by looping through both of them. The advantage grows as there are more tables linked.&lt;/li>
&lt;/ol>
&lt;p>The query object leverages the power of SQL Server (as it basically executes a SQL query directly against the database server), and as such it only requires one trip to the database to fetch the data, instead of getting the related records on the right side of the join one by one.&lt;/p>
&lt;ol>
&lt;li>A query is scalable in the sense that it allows reusing its definition by applying filters when looping through its dataset. So a generic query can be reused for a variety of purposes just by adapting the filters to the programming need. Duplicating traditional record loops in different functions, on the other side, requires extensive code copy-pasting, which can introduce code defects.&lt;/li>
&lt;li>Using a query only requires one loop, whereas joining two or more tables requires multiple code loops that quickly become difficult to read and follow.&lt;/li>
&lt;li>Queries are easy to create and maintain and generally provide a cleaner design.&lt;/li>
&lt;/ol>
&lt;h3 id="nav-specific-examples">NAV Specific Examples&lt;/h3>
&lt;p>In Microsoft Dynamics NAV 2013 R2, we can see the query object used in the bank account reconciliation matching algorithm. The object is query Bank Rec. Match Candidates query (1252), and it is called by the matching engine in the Match Bank Rec. Lines codeunit (1252).&lt;/p>
&lt;h3 id="ideas-for-improvement">Ideas for Improvement&lt;/h3>
&lt;p>The query object type could be improved to allow the passing of parameters at runtime, or, in general, being built dynamically at runtime. This will remove the need for multiple static definitions of the same base query used in slightly different contexts.&lt;/p></description></item></channel></rss>

Binary file not shown.

After

Width:  |  Height:  |  Size: 5 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 49 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 28 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 3 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 6.5 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 33 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 6.6 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 32 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 8 KiB

View file

@ -0,0 +1,642 @@
<!doctype html><html lang=en class=no-js>
<head>
<meta charset=utf-8>
<meta name=viewport content="width=device-width,initial-scale=1,shrink-to-fit=no">
<meta name=generator content="Hugo 0.92.2">
<meta name=robots content="index, follow">
<link rel="shortcut icon" href=/favicons/favicon.ico>
<link rel=apple-touch-icon href=/favicons/apple-touch-icon-180x180.png sizes=180x180>
<link rel=icon type=image/png href=/favicons/favicon-16x16.png sizes=16x16>
<link rel=icon type=image/png href=/favicons/favicon-32x32.png sizes=32x32>
<link rel=icon type=image/png href=/favicons/android-36x36.png sizes=36x36>
<link rel=icon type=image/png href=/favicons/android-48x48.png sizes=48x48>
<link rel=icon type=image/png href=/favicons/android-72x72.png sizes=72x72>
<link rel=icon type=image/png href=/favicons/android-96x96.png sizes=96x96>
<link rel=icon type=image/png href=/favicons/android-144x144.png sizes=144x144>
<link rel=icon type=image/png href=/favicons/android-192x192.png sizes=192x192>
<title>SELECT DISTINCT with Queries | alguidelines.dev - Business Central Design Patterns</title>
<meta name=description content="By Bogdana Botez, at Microsoft Development Center Copenhagen
Abstract
This pattern explains how to perform SELECT DISTINCT by using queries in …">
<meta property="og:title" content="SELECT DISTINCT with Queries">
<meta property="og:description" content="By Bogdana Botez, at Microsoft Development Center Copenhagen
Abstract This pattern explains how to perform SELECT DISTINCT by using queries in Dynamics NAV.
Description
When working with tables, sometimes a developer needs to perform a SELECT DISTINCT (also known as SELECT UNIQUE) from a table. As NAV does not provide this out of the box, we present below a way to select unique records by using queries.
Problem statement
Let&rsquo;s consider the VAT Entry table as below:">
<meta property="og:type" content="article">
<meta property="og:url" content="https://alguidelines.dev/docs/navpatterns/patterns/queries/select-distinct-with-queries/"><meta property="og:image" content="https://alguidelines.dev/images/og-image-fission.png"><meta property="article:section" content="docs">
<meta property="article:modified_time" content="2022-02-20T13:18:49+01:00"><meta property="og:site_name" content="alguidelines.dev - Business Central Design Patterns">
<meta itemprop=name content="SELECT DISTINCT with Queries">
<meta itemprop=description content="By Bogdana Botez, at Microsoft Development Center Copenhagen
Abstract This pattern explains how to perform SELECT DISTINCT by using queries in Dynamics NAV.
Description
When working with tables, sometimes a developer needs to perform a SELECT DISTINCT (also known as SELECT UNIQUE) from a table. As NAV does not provide this out of the box, we present below a way to select unique records by using queries.
Problem statement
Let&rsquo;s consider the VAT Entry table as below:">
<meta itemprop=dateModified content="2022-02-20T13:18:49+01:00">
<meta itemprop=wordCount content="555"><meta itemprop=image content="https://alguidelines.dev/images/og-image-fission.png">
<meta itemprop=keywords content><meta name=twitter:card content="summary_large_image">
<meta name=twitter:image content="https://alguidelines.dev/images/og-image-fission.png">
<meta name=twitter:title content="SELECT DISTINCT with Queries">
<meta name=twitter:description content="By Bogdana Botez, at Microsoft Development Center Copenhagen
Abstract This pattern explains how to perform SELECT DISTINCT by using queries in Dynamics NAV.
Description
When working with tables, sometimes a developer needs to perform a SELECT DISTINCT (also known as SELECT UNIQUE) from a table. As NAV does not provide this out of the box, we present below a way to select unique records by using queries.
Problem statement
Let&rsquo;s consider the VAT Entry table as below:">
<link rel=preload href=/scss/main.min.465d5fa0bd58415aee47bc5a1c5d8deee19fe158cff814bc698ee863ea6b68eb.css as=style>
<link href=/scss/main.min.465d5fa0bd58415aee47bc5a1c5d8deee19fe158cff814bc698ee863ea6b68eb.css rel=stylesheet integrity>
<script src=https://code.jquery.com/jquery-3.6.0.min.js integrity=sha384-vtXRMe3mGCbOeY7l30aIg8H9p3GdeSe4IFlP6G8JMa7o7lXvnz3GFKzPxzJdPfGK crossorigin=anonymous></script>
</head>
<body class=td-page>
<header>
<nav class="js-navbar-scroll navbar navbar-expand navbar-dark flex-column flex-md-row td-navbar">
<a class=navbar-brand href=/>
<img src=/images/alguidelines-bclogo-pattern-white.png height=32px>
<span class=font-weight-bold>alguidelines.dev - Business Central Design Patterns</span>
</a>
<div class="td-navbar-nav-scroll ml-md-auto" id=main_navbar>
<ul class="navbar-nav mt-2 mt-lg-0">
<li class="nav-item mr-4 mb-2 mb-lg-0">
<a class=nav-link href=/docs/><i class="fas fa-book"></i><span>Docs</span></a>
</li>
<li class="nav-item mr-4 mb-2 mb-lg-0">
<a class=nav-link href=https://github.com/microsoft/alguidelines/discussions/ target=_blank><i class="fas fa-comments"></i><span>Discussions</span></a>
</li>
<li class="nav-item mr-4 mb-2 mb-lg-0">
<a class=nav-link href=https://github.com/microsoft/alguidelines target=_blank><i class="fab fa-github"></i><span>GitHub</span></a>
</li>
<li class="nav-item mr-4 mb-2 mb-lg-0">
<a class=nav-link href=https://discord.gg/4wbfNv3 target=_blank><i class="fab fa-discord"></i><span>Discord</span></a>
</li>
</ul>
</div>
<div class="navbar-nav d-none d-lg-block"></div>
</nav>
</header>
<div class="container-fluid td-outer">
<div class=td-main>
<div class="row flex-xl-nowrap">
<aside class="col-12 col-md-3 col-xl-2 td-sidebar d-print-none">
<div id=td-sidebar-menu class=td-sidebar__inner>
<div id=content-mobile>
<form class="td-sidebar__search d-flex align-items-center">
<button class="btn btn-link td-sidebar__toggle d-md-none p-0 ml-3 fas fa-bars" type=button data-toggle=collapse data-target=#td-section-nav aria-controls=td-docs-nav aria-expanded=false aria-label="Toggle section navigation">
</button>
</form>
</div>
<div id=content-desktop></div>
<nav class="collapse td-sidebar-nav" id=td-section-nav>
<ul class="td-sidebar-nav__section pr-md-3 ul-0">
<li class="td-sidebar-nav__section-title td-sidebar-nav__section with-child active-path" id=m-docs-li>
<a href=/docs/ title="AL Guidelines" class="align-left pl-0 td-sidebar-link td-sidebar-link__section tree-root" id=m-docs><span>Docs</span></a>
<ul class=ul-1>
<li class="td-sidebar-nav__section-title td-sidebar-nav__section with-child" id=m-docspatterns-li>
<a href=/docs/patterns/ class="align-left pl-0 td-sidebar-link td-sidebar-link__section" id=m-docspatterns><span>Patterns</span></a>
<ul class="ul-2 foldable">
<li class="td-sidebar-nav__section-title td-sidebar-nav__section without-child collapse" id=m-docspatternsevent-bridge-pattern-li>
<a href=/docs/patterns/event-bridge-pattern/ class="align-left pl-0 td-sidebar-link td-sidebar-link__page" id=m-docspatternsevent-bridge-pattern><span>Event Bridge</span></a>
</li><li class="td-sidebar-nav__section-title td-sidebar-nav__section without-child collapse" id=m-docspatternsfacade-pattern-li>
<a href=/docs/patterns/facade-pattern/ class="align-left pl-0 td-sidebar-link td-sidebar-link__page" id=m-docspatternsfacade-pattern><span>Façade</span></a>
</li><li class="td-sidebar-nav__section-title td-sidebar-nav__section without-child collapse" id=m-docspatternsgeneric-method-pattern-li>
<a href=/docs/patterns/generic-method-pattern/ class="align-left pl-0 td-sidebar-link td-sidebar-link__page" id=m-docspatternsgeneric-method-pattern><span>Generic Method</span></a>
</li>
</ul>
</li><li class="td-sidebar-nav__section-title td-sidebar-nav__section with-child" id=m-docsbestpractices-li>
<a href=/docs/bestpractices/ class="align-left pl-0 td-sidebar-link td-sidebar-link__section" id=m-docsbestpractices><span>Best Practices</span></a>
<ul class="ul-2 foldable">
<li class="td-sidebar-nav__section-title td-sidebar-nav__section without-child collapse" id=m-docsbestpracticesbegin-as-an-afterword-li>
<a href=/docs/bestpractices/begin-as-an-afterword/ class="align-left pl-0 td-sidebar-link td-sidebar-link__page" id=m-docsbestpracticesbegin-as-an-afterword><span>begin as an afterword</span></a>
</li><li class="td-sidebar-nav__section-title td-sidebar-nav__section without-child collapse" id=m-docsbestpracticesbegin-end-li>
<a href=/docs/bestpractices/begin-end/ class="align-left pl-0 td-sidebar-link td-sidebar-link__page" id=m-docsbestpracticesbegin-end><span>Begin-End - Compound Only</span></a>
</li><li class="td-sidebar-nav__section-title td-sidebar-nav__section without-child collapse" id=m-docsbestpracticesbinary-operator-line-start-li>
<a href=/docs/bestpractices/binary-operator-line-start/ class="align-left pl-0 td-sidebar-link td-sidebar-link__page" id=m-docsbestpracticesbinary-operator-line-start><span>Binary Operator to Start Line</span></a>
</li><li class="td-sidebar-nav__section-title td-sidebar-nav__section without-child collapse" id=m-docsbestpracticescase-actions-li>
<a href=/docs/bestpractices/case-actions/ class="align-left pl-0 td-sidebar-link td-sidebar-link__page" id=m-docsbestpracticescase-actions><span>CASE Action on next line</span></a>
</li><li class="td-sidebar-nav__section-title td-sidebar-nav__section without-child collapse" id=m-docsbestpracticescomments-spacing-li>
<a href=/docs/bestpractices/comments-spacing/ class="align-left pl-0 td-sidebar-link td-sidebar-link__page" id=m-docsbestpracticescomments-spacing><span>Comment Spacing</span></a>
</li><li class="td-sidebar-nav__section-title td-sidebar-nav__section without-child collapse" id=m-docsbestpracticesdeleteall-li>
<a href=/docs/bestpractices/deleteall/ class="align-left pl-0 td-sidebar-link td-sidebar-link__page" id=m-docsbestpracticesdeleteall><span>DeleteAll</span></a>
</li><li class="td-sidebar-nav__section-title td-sidebar-nav__section without-child collapse" id=m-docsbestpracticesend-else-pair-li>
<a href=/docs/bestpractices/end-else-pair/ class="align-left pl-0 td-sidebar-link td-sidebar-link__page" id=m-docsbestpracticesend-else-pair><span>end else pair</span></a>
</li><li class="td-sidebar-nav__section-title td-sidebar-nav__section without-child collapse" id=m-docsbestpracticeskeyword-pairs-indentation-li>
<a href=/docs/bestpractices/keyword-pairs-indentation/ class="align-left pl-0 td-sidebar-link td-sidebar-link__page" id=m-docsbestpracticeskeyword-pairs-indentation><span>Keyword Pairs - Indentation</span></a>
</li><li class="td-sidebar-nav__section-title td-sidebar-nav__section without-child collapse" id=m-docsbestpracticesline-start-keywords-li>
<a href=/docs/bestpractices/line-start-keywords/ class="align-left pl-0 td-sidebar-link td-sidebar-link__page" id=m-docsbestpracticesline-start-keywords><span>Line Start Keywords</span></a>
</li><li class="td-sidebar-nav__section-title td-sidebar-nav__section without-child collapse" id=m-docsbestpracticeslonely-repeat-li>
<a href=/docs/bestpractices/lonely-repeat/ class="align-left pl-0 td-sidebar-link td-sidebar-link__page" id=m-docsbestpracticeslonely-repeat><span>Lonely Repeat</span></a>
</li><li class="td-sidebar-nav__section-title td-sidebar-nav__section without-child collapse" id=m-docsbestpracticesnamed-invocations-li>
<a href=/docs/bestpractices/named-invocations/ class="align-left pl-0 td-sidebar-link td-sidebar-link__page" id=m-docsbestpracticesnamed-invocations><span>Named Invocations</span></a>
</li><li class="td-sidebar-nav__section-title td-sidebar-nav__section without-child collapse" id=m-docsbestpracticesone-statement-per-line-li>
<a href=/docs/bestpractices/one-statement-per-line/ class="align-left pl-0 td-sidebar-link td-sidebar-link__page" id=m-docsbestpracticesone-statement-per-line><span>One Statement per Line</span></a>
</li><li class="td-sidebar-nav__section-title td-sidebar-nav__section without-child collapse" id=m-docsbestpracticesseparate-if-and-else-li>
<a href=/docs/bestpractices/separate-if-and-else/ class="align-left pl-0 td-sidebar-link td-sidebar-link__page" id=m-docsbestpracticesseparate-if-and-else><span>Seperate if and else</span></a>
</li><li class="td-sidebar-nav__section-title td-sidebar-nav__section without-child collapse" id=m-docsbestpracticesspacing-binary-operators-li>
<a href=/docs/bestpractices/spacing-binary-operators/ class="align-left pl-0 td-sidebar-link td-sidebar-link__page" id=m-docsbestpracticesspacing-binary-operators><span>Spacing Binary Operators</span></a>
</li><li class="td-sidebar-nav__section-title td-sidebar-nav__section without-child collapse" id=m-docsbestpracticessubscribercodeunits-li>
<a href=/docs/bestpractices/subscribercodeunits/ class="align-left pl-0 td-sidebar-link td-sidebar-link__page" id=m-docsbestpracticessubscribercodeunits><span>Subscriber Codeunits</span></a>
</li><li class="td-sidebar-nav__section-title td-sidebar-nav__section without-child collapse" id=m-docsbestpracticessuggested-abbreviations-li>
<a href=/docs/bestpractices/suggested-abbreviations/ class="align-left pl-0 td-sidebar-link td-sidebar-link__page" id=m-docsbestpracticessuggested-abbreviations><span>Suggested Abbreviations</span></a>
</li><li class="td-sidebar-nav__section-title td-sidebar-nav__section without-child collapse" id=m-docsbestpracticesunnecessary-else-li>
<a href=/docs/bestpractices/unnecessary-else/ class="align-left pl-0 td-sidebar-link td-sidebar-link__page" id=m-docsbestpracticesunnecessary-else><span>Unnecessary else</span></a>
</li><li class="td-sidebar-nav__section-title td-sidebar-nav__section without-child collapse" id=m-docsbestpracticesunnecessary-truefalse-li>
<a href=/docs/bestpractices/unnecessary-truefalse/ class="align-left pl-0 td-sidebar-link td-sidebar-link__page" id=m-docsbestpracticesunnecessary-truefalse><span>Unnecessary true/false</span></a>
</li><li class="td-sidebar-nav__section-title td-sidebar-nav__section without-child collapse" id=m-docsbestpracticesvariable-naming-li>
<a href=/docs/bestpractices/variable-naming/ class="align-left pl-0 td-sidebar-link td-sidebar-link__page" id=m-docsbestpracticesvariable-naming><span>Variable Naming</span></a>
</li><li class="td-sidebar-nav__section-title td-sidebar-nav__section without-child collapse" id=m-docsbestpracticesvariables-declarations-order-li>
<a href=/docs/bestpractices/variables-declarations-order/ class="align-left pl-0 td-sidebar-link td-sidebar-link__page" id=m-docsbestpracticesvariables-declarations-order><span>Variables Declarations Order</span></a>
</li>
</ul>
</li><li class="td-sidebar-nav__section-title td-sidebar-nav__section with-child active-path" id=m-docsnavpatterns-li>
<a href=/docs/navpatterns/ class="align-left pl-0 td-sidebar-link td-sidebar-link__section" id=m-docsnavpatterns><span>NAV Patterns Archive</span></a>
<ul class="ul-2 foldable">
<li class="td-sidebar-nav__section-title td-sidebar-nav__section with-child active-path" id=m-docsnavpatternspatterns-li>
<a href=/docs/navpatterns/patterns/ class="align-left pl-0 td-sidebar-link td-sidebar-link__section" id=m-docsnavpatternspatterns><span>Patterns</span></a>
<ul class="ul-3 foldable">
<li class="td-sidebar-nav__section-title td-sidebar-nav__section without-child" id=m-docsnavpatternspatternsactivity-log-li>
<a href=/docs/navpatterns/patterns/activity-log/ class="align-left pl-0 td-sidebar-link td-sidebar-link__page" id=m-docsnavpatternspatternsactivity-log><span>Activity Logs</span></a>
</li><li class="td-sidebar-nav__section-title td-sidebar-nav__section without-child" id=m-docsnavpatternspatternsargument-table-li>
<a href=/docs/navpatterns/patterns/argument-table/ class="align-left pl-0 td-sidebar-link td-sidebar-link__page" id=m-docsnavpatternspatternsargument-table><span>Argument Table</span></a>
</li><li class="td-sidebar-nav__section-title td-sidebar-nav__section with-child" id=m-docsnavpatternspatternsblocked-entity-li>
<a href=/docs/navpatterns/patterns/blocked-entity/ class="align-left pl-0 td-sidebar-link td-sidebar-link__section" id=m-docsnavpatternspatternsblocked-entity><span>Blocked Entity</span></a>
<ul class="ul-4 foldable">
<li class="td-sidebar-nav__section-title td-sidebar-nav__section without-child collapse" id=m-docsnavpatternspatternsblocked-entitydata-driven-blocked-entity-li>
<a href=/docs/navpatterns/patterns/blocked-entity/data-driven-blocked-entity/ class="align-left pl-0 td-sidebar-link td-sidebar-link__page" id=m-docsnavpatternspatternsblocked-entitydata-driven-blocked-entity><span>Data Driven Blocked Entity</span></a>
</li>
</ul>
</li><li class="td-sidebar-nav__section-title td-sidebar-nav__section without-child" id=m-docsnavpatternspatternscached-web-service-calls-li>
<a href=/docs/navpatterns/patterns/cached-web-service-calls/ class="align-left pl-0 td-sidebar-link td-sidebar-link__page" id=m-docsnavpatternspatternscached-web-service-calls><span>Cached Web Server Calls</span></a>
</li><li class="td-sidebar-nav__section-title td-sidebar-nav__section without-child" id=m-docsnavpatternspatternsconditional-cascading-update-li>
<a href=/docs/navpatterns/patterns/conditional-cascading-update/ class="align-left pl-0 td-sidebar-link td-sidebar-link__page" id=m-docsnavpatternspatternsconditional-cascading-update><span>Conditional Cascading Update</span></a>
</li><li class="td-sidebar-nav__section-title td-sidebar-nav__section without-child" id=m-docsnavpatternspatternscopy-document-li>
<a href=/docs/navpatterns/patterns/copy-document/ class="align-left pl-0 td-sidebar-link td-sidebar-link__page" id=m-docsnavpatternspatternscopy-document><span>Copy Document</span></a>
</li><li class="td-sidebar-nav__section-title td-sidebar-nav__section without-child" id=m-docsnavpatternspatternscreate-data-from-templates-li>
<a href=/docs/navpatterns/patterns/create-data-from-templates/ class="align-left pl-0 td-sidebar-link td-sidebar-link__page" id=m-docsnavpatternspatternscreate-data-from-templates><span>Create Data from Templates</span></a>
</li><li class="td-sidebar-nav__section-title td-sidebar-nav__section without-child" id=m-docsnavpatternspatternscreate-urls-to-nav-clients-li>
<a href=/docs/navpatterns/patterns/create-urls-to-nav-clients/ class="align-left pl-0 td-sidebar-link td-sidebar-link__page" id=m-docsnavpatternspatternscreate-urls-to-nav-clients><span>Create URLs to NAV Clients</span></a>
</li><li class="td-sidebar-nav__section-title td-sidebar-nav__section without-child" id=m-docsnavpatternspatternscreating-custom-charts-li>
<a href=/docs/navpatterns/patterns/creating-custom-charts/ class="align-left pl-0 td-sidebar-link td-sidebar-link__page" id=m-docsnavpatternspatternscreating-custom-charts><span>Creating Custom Charts</span></a>
</li><li class="td-sidebar-nav__section-title td-sidebar-nav__section without-child" id=m-docsnavpatternspatternscross-session-events-li>
<a href=/docs/navpatterns/patterns/cross-session-events/ class="align-left pl-0 td-sidebar-link td-sidebar-link__page" id=m-docsnavpatternspatternscross-session-events><span>Cross Session Events</span></a>
</li><li class="td-sidebar-nav__section-title td-sidebar-nav__section without-child" id=m-docsnavpatternspatternscurrently-active-record-li>
<a href=/docs/navpatterns/patterns/currently-active-record/ class="align-left pl-0 td-sidebar-link td-sidebar-link__page" id=m-docsnavpatternspatternscurrently-active-record><span>Currently Active Record</span></a>
</li><li class="td-sidebar-nav__section-title td-sidebar-nav__section without-child" id=m-docsnavpatternspatternsdata-migration-facade-li>
<a href=/docs/navpatterns/patterns/data-migration-facade/ class="align-left pl-0 td-sidebar-link td-sidebar-link__page" id=m-docsnavpatternspatternsdata-migration-facade><span>Data Migration Façade</span></a>
</li><li class="td-sidebar-nav__section-title td-sidebar-nav__section without-child" id=m-docsnavpatternspatternsdiscovery-event-li>
<a href=/docs/navpatterns/patterns/discovery-event/ class="align-left pl-0 td-sidebar-link td-sidebar-link__page" id=m-docsnavpatternspatternsdiscovery-event><span>Discovery Event</span></a>
</li><li class="td-sidebar-nav__section-title td-sidebar-nav__section without-child" id=m-docsnavpatternspatternsdocument-li>
<a href=/docs/navpatterns/patterns/document/ class="align-left pl-0 td-sidebar-link td-sidebar-link__page" id=m-docsnavpatternspatternsdocument><span>Document</span></a>
</li><li class="td-sidebar-nav__section-title td-sidebar-nav__section without-child" id=m-docsnavpatternspatternseasy-update-of-setup-or-supplementary-information-li>
<a href=/docs/navpatterns/patterns/easy-update-of-setup-or-supplementary-information/ class="align-left pl-0 td-sidebar-link td-sidebar-link__page" id=m-docsnavpatternspatternseasy-update-of-setup-or-supplementary-information><span>Easy Update Of Setup Or Supplementary Information</span></a>
</li><li class="td-sidebar-nav__section-title td-sidebar-nav__section without-child" id=m-docsnavpatternspatternserror-message-processing-li>
<a href=/docs/navpatterns/patterns/error-message-processing/ class="align-left pl-0 td-sidebar-link td-sidebar-link__page" id=m-docsnavpatternspatternserror-message-processing><span>Error Message Processing</span></a>
</li><li class="td-sidebar-nav__section-title td-sidebar-nav__section without-child" id=m-docsnavpatternspatternsextending-the-role-center-headlines-li>
<a href=/docs/navpatterns/patterns/extending-the-role-center-headlines/ class="align-left pl-0 td-sidebar-link td-sidebar-link__page" id=m-docsnavpatternspatternsextending-the-role-center-headlines><span>Extending the Role Center Headlines</span></a>
</li><li class="td-sidebar-nav__section-title td-sidebar-nav__section without-child" id=m-docsnavpatternspatternsfeature-localization-for-data-structures-li>
<a href=/docs/navpatterns/patterns/feature-localization-for-data-structures/ class="align-left pl-0 td-sidebar-link td-sidebar-link__page" id=m-docsnavpatternspatternsfeature-localization-for-data-structures><span>Feature Localization For Data Structures</span></a>
</li><li class="td-sidebar-nav__section-title td-sidebar-nav__section without-child" id=m-docsnavpatternspatternshooks-li>
<a href=/docs/navpatterns/patterns/hooks/ class="align-left pl-0 td-sidebar-link td-sidebar-link__page" id=m-docsnavpatternspatternshooks><span>Hooks</span></a>
</li><li class="td-sidebar-nav__section-title td-sidebar-nav__section without-child" id=m-docsnavpatternspatternsimplementation-of-surrogate-keys-using-autoincrement-pattern-li>
<a href=/docs/navpatterns/patterns/implementation-of-surrogate-keys-using-autoincrement-pattern/ class="align-left pl-0 td-sidebar-link td-sidebar-link__page" id=m-docsnavpatternspatternsimplementation-of-surrogate-keys-using-autoincrement-pattern><span>Surrogate keys using Autoincrement Pattern</span></a>
</li><li class="td-sidebar-nav__section-title td-sidebar-nav__section without-child" id=m-docsnavpatternspatternsinstructions-in-the-ui-li>
<a href=/docs/navpatterns/patterns/instructions-in-the-ui/ class="align-left pl-0 td-sidebar-link td-sidebar-link__page" id=m-docsnavpatternspatternsinstructions-in-the-ui><span>Instructions in the UI</span></a>
</li><li class="td-sidebar-nav__section-title td-sidebar-nav__section without-child" id=m-docsnavpatternspatternsintegration-of-addresses-li>
<a href=/docs/navpatterns/patterns/integration-of-addresses/ class="align-left pl-0 td-sidebar-link td-sidebar-link__page" id=m-docsnavpatternspatternsintegration-of-addresses><span>Integration of Addresses</span></a>
</li><li class="td-sidebar-nav__section-title td-sidebar-nav__section without-child" id=m-docsnavpatternspatternsjournal-error-processing-li>
<a href=/docs/navpatterns/patterns/journal-error-processing/ class="align-left pl-0 td-sidebar-link td-sidebar-link__page" id=m-docsnavpatternspatternsjournal-error-processing><span>Journal Error Processing</span></a>
</li><li class="td-sidebar-nav__section-title td-sidebar-nav__section without-child" id=m-docsnavpatternspatternsjournal-template-batch-line-li>
<a href=/docs/navpatterns/patterns/journal-template-batch-line/ class="align-left pl-0 td-sidebar-link td-sidebar-link__page" id=m-docsnavpatternspatternsjournal-template-batch-line><span>Journal Template Batch Line</span></a>
</li><li class="td-sidebar-nav__section-title td-sidebar-nav__section without-child" id=m-docsnavpatternspatternsmaster-data-li>
<a href=/docs/navpatterns/patterns/master-data/ class="align-left pl-0 td-sidebar-link td-sidebar-link__page" id=m-docsnavpatternspatternsmaster-data><span>Master Data</span></a>
</li><li class="td-sidebar-nav__section-title td-sidebar-nav__section without-child" id=m-docsnavpatternspatternsmulti-file-download-li>
<a href=/docs/navpatterns/patterns/multi-file-download/ class="align-left pl-0 td-sidebar-link td-sidebar-link__page" id=m-docsnavpatternspatternsmulti-file-download><span>Multi-file Download</span></a>
</li><li class="td-sidebar-nav__section-title td-sidebar-nav__section without-child" id=m-docsnavpatternspatternsmulti-page-list-li>
<a href=/docs/navpatterns/patterns/multi-page-list/ class="align-left pl-0 td-sidebar-link td-sidebar-link__page" id=m-docsnavpatternspatternsmulti-page-list><span>Multi-Page List</span></a>
</li><li class="td-sidebar-nav__section-title td-sidebar-nav__section without-child" id=m-docsnavpatternspatternsmultilanguage-application-data-li>
<a href=/docs/navpatterns/patterns/multilanguage-application-data/ class="align-left pl-0 td-sidebar-link td-sidebar-link__page" id=m-docsnavpatternspatternsmultilanguage-application-data><span>Multilanguage Application Data</span></a>
</li><li class="td-sidebar-nav__section-title td-sidebar-nav__section with-child" id=m-docsnavpatternspatternsnet-exception-handling-in-cal-li>
<a href=/docs/navpatterns/patterns/net-exception-handling-in-cal/ class="align-left pl-0 td-sidebar-link td-sidebar-link__section" id=m-docsnavpatternspatternsnet-exception-handling-in-cal><span>NET Exception Handling in CAL</span></a>
<ul class="ul-4 foldable">
<li class="td-sidebar-nav__section-title td-sidebar-nav__section without-child collapse" id=m-docsnavpatternspatternsnet-exception-handling-in-caltryfunction-net-exception-handling-in-cal-li>
<a href=/docs/navpatterns/patterns/net-exception-handling-in-cal/tryfunction-net-exception-handling-in-cal/ class="align-left pl-0 td-sidebar-link td-sidebar-link__page" id=m-docsnavpatternspatternsnet-exception-handling-in-caltryfunction-net-exception-handling-in-cal><span>TryFunction NET Exception Handling in CAL</span></a>
</li>
</ul>
</li><li class="td-sidebar-nav__section-title td-sidebar-nav__section without-child" id=m-docsnavpatternspatternsno-series-li>
<a href=/docs/navpatterns/patterns/no-series/ class="align-left pl-0 td-sidebar-link td-sidebar-link__page" id=m-docsnavpatternspatternsno-series><span>No Series</span></a>
</li><li class="td-sidebar-nav__section-title td-sidebar-nav__section with-child" id=m-docsnavpatternspatternsnotifications-li>
<a href=/docs/navpatterns/patterns/notifications/ class="align-left pl-0 td-sidebar-link td-sidebar-link__section" id=m-docsnavpatternspatternsnotifications><span>Notifications</span></a>
<ul class="ul-4 foldable">
<li class="td-sidebar-nav__section-title td-sidebar-nav__section without-child collapse" id=m-docsnavpatternspatternsnotificationsin-context-notifications-li>
<a href=/docs/navpatterns/patterns/notifications/in-context-notifications/ class="align-left pl-0 td-sidebar-link td-sidebar-link__page" id=m-docsnavpatternspatternsnotificationsin-context-notifications><span>In-context Notifications</span></a>
</li><li class="td-sidebar-nav__section-title td-sidebar-nav__section without-child collapse" id=m-docsnavpatternspatternsnotificationsnotification-lifecycle-management-pattern-li>
<a href=/docs/navpatterns/patterns/notifications/notification-lifecycle-management-pattern/ class="align-left pl-0 td-sidebar-link td-sidebar-link__page" id=m-docsnavpatternspatternsnotificationsnotification-lifecycle-management-pattern><span>Notification Lifecycle Management Pattern</span></a>
</li>
</ul>
</li><li class="td-sidebar-nav__section-title td-sidebar-nav__section without-child" id=m-docsnavpatternspatternsobserver-li>
<a href=/docs/navpatterns/patterns/observer/ class="align-left pl-0 td-sidebar-link td-sidebar-link__page" id=m-docsnavpatternspatternsobserver><span>Observer</span></a>
</li><li class="td-sidebar-nav__section-title td-sidebar-nav__section without-child" id=m-docsnavpatternspatternsposting-routine-select-behavior-li>
<a href=/docs/navpatterns/patterns/posting-routine-select-behavior/ class="align-left pl-0 td-sidebar-link td-sidebar-link__page" id=m-docsnavpatternspatternsposting-routine-select-behavior><span>Posting Routine - Select Behavior</span></a>
</li><li class="td-sidebar-nav__section-title td-sidebar-nav__section without-child" id=m-docsnavpatternspatternsproduct-name-li>
<a href=/docs/navpatterns/patterns/product-name/ class="align-left pl-0 td-sidebar-link td-sidebar-link__page" id=m-docsnavpatternspatternsproduct-name><span>Product Name</span></a>
</li><li class="td-sidebar-nav__section-title td-sidebar-nav__section with-child active-path" id=m-docsnavpatternspatternsqueries-li>
<a href=/docs/navpatterns/patterns/queries/ class="align-left pl-0 td-sidebar-link td-sidebar-link__section" id=m-docsnavpatternspatternsqueries><span>Queries</span></a>
<ul class="ul-4 foldable">
<li class="td-sidebar-nav__section-title td-sidebar-nav__section without-child active-path" id=m-docsnavpatternspatternsqueriesselect-distinct-with-queries-li>
<a href=/docs/navpatterns/patterns/queries/select-distinct-with-queries/ class="align-left pl-0 active td-sidebar-link td-sidebar-link__page" id=m-docsnavpatternspatternsqueriesselect-distinct-with-queries><span class=td-sidebar-nav-active-item>SELECT DISTINCT with Queries</span></a>
</li><li class="td-sidebar-nav__section-title td-sidebar-nav__section without-child" id=m-docsnavpatternspatternsqueriesuse-queries-to-detect-duplicate-records-li>
<a href=/docs/navpatterns/patterns/queries/use-queries-to-detect-duplicate-records/ class="align-left pl-0 td-sidebar-link td-sidebar-link__page" id=m-docsnavpatternspatternsqueriesuse-queries-to-detect-duplicate-records><span>Use Queries to Detect Duplicate Records</span></a>
</li><li class="td-sidebar-nav__section-title td-sidebar-nav__section without-child" id=m-docsnavpatternspatternsqueriesuse-queries-to-replace-nested-loops-li>
<a href=/docs/navpatterns/patterns/queries/use-queries-to-replace-nested-loops/ class="align-left pl-0 td-sidebar-link td-sidebar-link__page" id=m-docsnavpatternspatternsqueriesuse-queries-to-replace-nested-loops><span>Use Queries to Replace Nested Loops</span></a>
</li>
</ul>
</li><li class="td-sidebar-nav__section-title td-sidebar-nav__section without-child" id=m-docsnavpatternspatternsread-once-initialization-and-validation-li>
<a href=/docs/navpatterns/patterns/read-once-initialization-and-validation/ class="align-left pl-0 td-sidebar-link td-sidebar-link__page" id=m-docsnavpatternspatternsread-once-initialization-and-validation><span>Read-once Initialization and Validation</span></a>
</li><li class="td-sidebar-nav__section-title td-sidebar-nav__section without-child" id=m-docsnavpatternspatternsreleased-entity-li>
<a href=/docs/navpatterns/patterns/released-entity/ class="align-left pl-0 td-sidebar-link td-sidebar-link__page" id=m-docsnavpatternspatternsreleased-entity><span>Released Entity</span></a>
</li><li class="td-sidebar-nav__section-title td-sidebar-nav__section without-child" id=m-docsnavpatternspatternsreport-selection-li>
<a href=/docs/navpatterns/patterns/report-selection/ class="align-left pl-0 td-sidebar-link td-sidebar-link__page" id=m-docsnavpatternspatternsreport-selection><span>Report Selection</span></a>
</li><li class="td-sidebar-nav__section-title td-sidebar-nav__section with-child" id=m-docsnavpatternspatternssecurity-li>
<a href=/docs/navpatterns/patterns/security/ class="align-left pl-0 td-sidebar-link td-sidebar-link__section" id=m-docsnavpatternspatternssecurity><span>Security</span></a>
<ul class="ul-4 foldable">
<li class="td-sidebar-nav__section-title td-sidebar-nav__section without-child collapse" id=m-docsnavpatternspatternssecurity1-sensitive-data-encapsulation-li>
<a href=/docs/navpatterns/patterns/security/1-sensitive-data-encapsulation/ class="align-left pl-0 td-sidebar-link td-sidebar-link__page" id=m-docsnavpatternspatternssecurity1-sensitive-data-encapsulation><span>Sensitive Data Encapsulation</span></a>
</li><li class="td-sidebar-nav__section-title td-sidebar-nav__section without-child collapse" id=m-docsnavpatternspatternssecurity2-data-encryption-li>
<a href=/docs/navpatterns/patterns/security/2-data-encryption/ class="align-left pl-0 td-sidebar-link td-sidebar-link__page" id=m-docsnavpatternspatternssecurity2-data-encryption><span>Data Encryption</span></a>
</li><li class="td-sidebar-nav__section-title td-sidebar-nav__section without-child collapse" id=m-docsnavpatternspatternssecurity3-single-point-of-access-li>
<a href=/docs/navpatterns/patterns/security/3-single-point-of-access/ class="align-left pl-0 td-sidebar-link td-sidebar-link__page" id=m-docsnavpatternspatternssecurity3-single-point-of-access><span>Single Point of Access</span></a>
</li><li class="td-sidebar-nav__section-title td-sidebar-nav__section without-child collapse" id=m-docsnavpatternspatternssecurity4-masked-text-li>
<a href=/docs/navpatterns/patterns/security/4-masked-text/ class="align-left pl-0 td-sidebar-link td-sidebar-link__page" id=m-docsnavpatternspatternssecurity4-masked-text><span>Masked Text</span></a>
</li><li class="td-sidebar-nav__section-title td-sidebar-nav__section without-child collapse" id=m-docsnavpatternspatternssecurity5-ssl-in-nav-li>
<a href=/docs/navpatterns/patterns/security/5-ssl-in-nav/ class="align-left pl-0 td-sidebar-link td-sidebar-link__page" id=m-docsnavpatternspatternssecurity5-ssl-in-nav><span>SSL in NAV</span></a>
</li>
</ul>
</li><li class="td-sidebar-nav__section-title td-sidebar-nav__section without-child" id=m-docsnavpatternspatternssetup-specificity-fallback-li>
<a href=/docs/navpatterns/patterns/setup-specificity-fallback/ class="align-left pl-0 td-sidebar-link td-sidebar-link__page" id=m-docsnavpatternspatternssetup-specificity-fallback><span>Setup Specificity Fallback</span></a>
</li><li class="td-sidebar-nav__section-title td-sidebar-nav__section without-child" id=m-docsnavpatternspatternssilent-file-upload-and-download-li>
<a href=/docs/navpatterns/patterns/silent-file-upload-and-download/ class="align-left pl-0 td-sidebar-link td-sidebar-link__page" id=m-docsnavpatternspatternssilent-file-upload-and-download><span>Silent File Upload and Download</span></a>
</li><li class="td-sidebar-nav__section-title td-sidebar-nav__section with-child" id=m-docsnavpatternspatternssingleton-li>
<a href=/docs/navpatterns/patterns/singleton/ class="align-left pl-0 td-sidebar-link td-sidebar-link__section" id=m-docsnavpatternspatternssingleton><span>Singleton</span></a>
<ul class="ul-4 foldable">
<li class="td-sidebar-nav__section-title td-sidebar-nav__section without-child collapse" id=m-docsnavpatternspatternssingletonsingleton-codeunit-li>
<a href=/docs/navpatterns/patterns/singleton/singleton-codeunit/ class="align-left pl-0 td-sidebar-link td-sidebar-link__page" id=m-docsnavpatternspatternssingletonsingleton-codeunit><span>Singleton Codeunit</span></a>
</li><li class="td-sidebar-nav__section-title td-sidebar-nav__section with-child collapse" id=m-docsnavpatternspatternssingletonsingleton-table-li>
<a href=/docs/navpatterns/patterns/singleton/singleton-table/ class="align-left pl-0 td-sidebar-link td-sidebar-link__section" id=m-docsnavpatternspatternssingletonsingleton-table><span>Singleton Table</span></a>
<ul class="ul-5 foldable">
<li class="td-sidebar-nav__section-title td-sidebar-nav__section without-child collapse" id=m-docsnavpatternspatternssingletonsingleton-tablecue-table-li>
<a href=/docs/navpatterns/patterns/singleton/singleton-table/cue-table/ class="align-left pl-0 td-sidebar-link td-sidebar-link__page" id=m-docsnavpatternspatternssingletonsingleton-tablecue-table><span>Cue Table</span></a>
</li><li class="td-sidebar-nav__section-title td-sidebar-nav__section without-child collapse" id=m-docsnavpatternspatternssingletonsingleton-tablesetup-table-li>
<a href=/docs/navpatterns/patterns/singleton/singleton-table/setup-table/ class="align-left pl-0 td-sidebar-link td-sidebar-link__page" id=m-docsnavpatternspatternssingletonsingleton-tablesetup-table><span>Setup Table</span></a>
</li>
</ul>
</li>
</ul>
</li><li class="td-sidebar-nav__section-title td-sidebar-nav__section without-child" id=m-docsnavpatternspatternsstandard-journal-li>
<a href=/docs/navpatterns/patterns/standard-journal/ class="align-left pl-0 td-sidebar-link td-sidebar-link__page" id=m-docsnavpatternspatternsstandard-journal><span>Standard Journal</span></a>
</li><li class="td-sidebar-nav__section-title td-sidebar-nav__section without-child" id=m-docsnavpatternspatternstemporary-dataset-report-li>
<a href=/docs/navpatterns/patterns/temporary-dataset-report/ class="align-left pl-0 td-sidebar-link td-sidebar-link__page" id=m-docsnavpatternspatternstemporary-dataset-report><span>Temporary Dataset Report</span></a>
</li><li class="td-sidebar-nav__section-title td-sidebar-nav__section without-child" id=m-docsnavpatternspatternstotals-and-discounts-on-subpages-sales-and-purchases-li>
<a href=/docs/navpatterns/patterns/totals-and-discounts-on-subpages-sales-and-purchases/ class="align-left pl-0 td-sidebar-link td-sidebar-link__page" id=m-docsnavpatternspatternstotals-and-discounts-on-subpages-sales-and-purchases><span>Totals and Discounts on Subpages Sales and Purchases</span></a>
</li><li class="td-sidebar-nav__section-title td-sidebar-nav__section without-child" id=m-docsnavpatternspatternstransfer-custom-fields-li>
<a href=/docs/navpatterns/patterns/transfer-custom-fields/ class="align-left pl-0 td-sidebar-link td-sidebar-link__page" id=m-docsnavpatternspatternstransfer-custom-fields><span>Transfer Custom Fields</span></a>
</li><li class="td-sidebar-nav__section-title td-sidebar-nav__section without-child" id=m-docsnavpatternspatternsvariant-facade-li>
<a href=/docs/navpatterns/patterns/variant-facade/ class="align-left pl-0 td-sidebar-link td-sidebar-link__page" id=m-docsnavpatternspatternsvariant-facade><span>Variant Facade</span></a>
</li>
</ul>
</li><li class="td-sidebar-nav__section-title td-sidebar-nav__section with-child" id=m-docsnavpatterns2-anti-patterns-li>
<a href=/docs/navpatterns/2-anti-patterns/ class="align-left pl-0 td-sidebar-link td-sidebar-link__section" id=m-docsnavpatterns2-anti-patterns><span>2. Anti-Patterns</span></a>
<ul class="ul-3 foldable">
<li class="td-sidebar-nav__section-title td-sidebar-nav__section without-child collapse" id=m-docsnavpatterns2-anti-patternsnav-upgrade-li>
<a href=/docs/navpatterns/2-anti-patterns/nav-upgrade/ class="align-left pl-0 td-sidebar-link td-sidebar-link__page" id=m-docsnavpatterns2-anti-patternsnav-upgrade><span>Nav Upgrade</span></a>
</li><li class="td-sidebar-nav__section-title td-sidebar-nav__section without-child collapse" id=m-docsnavpatterns2-anti-patternsreusable-bugs-li>
<a href=/docs/navpatterns/2-anti-patterns/reusable-bugs/ class="align-left pl-0 td-sidebar-link td-sidebar-link__page" id=m-docsnavpatterns2-anti-patternsreusable-bugs><span>Reusable Bugs</span></a>
</li>
</ul>
</li><li class="td-sidebar-nav__section-title td-sidebar-nav__section with-child" id=m-docsnavpatterns3-cal-coding-guidelines-li>
<a href=/docs/navpatterns/3-cal-coding-guidelines/ class="align-left pl-0 td-sidebar-link td-sidebar-link__section" id=m-docsnavpatterns3-cal-coding-guidelines><span>3. CAL Coding Guidelines</span></a>
<ul class="ul-3 foldable">
<li class="td-sidebar-nav__section-title td-sidebar-nav__section with-child collapse" id=m-docsnavpatterns3-cal-coding-guidelinesdesign-li>
<a href=/docs/navpatterns/3-cal-coding-guidelines/design/ class="align-left pl-0 td-sidebar-link td-sidebar-link__section" id=m-docsnavpatterns3-cal-coding-guidelinesdesign><span>Design</span></a>
<ul class="ul-4 foldable">
<li class="td-sidebar-nav__section-title td-sidebar-nav__section without-child collapse" id=m-docsnavpatterns3-cal-coding-guidelinesdesignby-reference-parameters-li>
<a href=/docs/navpatterns/3-cal-coding-guidelines/design/by-reference-parameters/ class="align-left pl-0 td-sidebar-link td-sidebar-link__page" id=m-docsnavpatterns3-cal-coding-guidelinesdesignby-reference-parameters><span>By Reference Parameters</span></a>
</li><li class="td-sidebar-nav__section-title td-sidebar-nav__section without-child collapse" id=m-docsnavpatterns3-cal-coding-guidelinesdesignclass-coupling-li>
<a href=/docs/navpatterns/3-cal-coding-guidelines/design/class-coupling/ class="align-left pl-0 td-sidebar-link td-sidebar-link__page" id=m-docsnavpatterns3-cal-coding-guidelinesdesignclass-coupling><span>Class Coupling</span></a>
</li><li class="td-sidebar-nav__section-title td-sidebar-nav__section without-child collapse" id=m-docsnavpatterns3-cal-coding-guidelinesdesigncyclomatic-complexity-li>
<a href=/docs/navpatterns/3-cal-coding-guidelines/design/cyclomatic-complexity/ class="align-left pl-0 td-sidebar-link td-sidebar-link__page" id=m-docsnavpatterns3-cal-coding-guidelinesdesigncyclomatic-complexity><span>Cyclomatic Complexity</span></a>
</li><li class="td-sidebar-nav__section-title td-sidebar-nav__section without-child collapse" id=m-docsnavpatterns3-cal-coding-guidelinesdesignencapsulate-local-functionality-li>
<a href=/docs/navpatterns/3-cal-coding-guidelines/design/encapsulate-local-functionality/ class="align-left pl-0 td-sidebar-link td-sidebar-link__page" id=m-docsnavpatterns3-cal-coding-guidelinesdesignencapsulate-local-functionality><span>Encapsulate Local Functionality</span></a>
</li><li class="td-sidebar-nav__section-title td-sidebar-nav__section without-child collapse" id=m-docsnavpatterns3-cal-coding-guidelinesdesignfindset-findfirst-findlast-li>
<a href=/docs/navpatterns/3-cal-coding-guidelines/design/findset-findfirst-findlast/ class="align-left pl-0 td-sidebar-link td-sidebar-link__page" id=m-docsnavpatterns3-cal-coding-guidelinesdesignfindset-findfirst-findlast><span>FINDSET FINDFIRST FINDLAST</span></a>
</li><li class="td-sidebar-nav__section-title td-sidebar-nav__section without-child collapse" id=m-docsnavpatterns3-cal-coding-guidelinesdesigninitialized-variables-li>
<a href=/docs/navpatterns/3-cal-coding-guidelines/design/initialized-variables/ class="align-left pl-0 td-sidebar-link td-sidebar-link__page" id=m-docsnavpatterns3-cal-coding-guidelinesdesigninitialized-variables><span>Initialized Variables</span></a>
</li><li class="td-sidebar-nav__section-title td-sidebar-nav__section without-child collapse" id=m-docsnavpatterns3-cal-coding-guidelinesdesignmaintainability-index-li>
<a href=/docs/navpatterns/3-cal-coding-guidelines/design/maintainability-index/ class="align-left pl-0 td-sidebar-link td-sidebar-link__page" id=m-docsnavpatterns3-cal-coding-guidelinesdesignmaintainability-index><span>Maintainability Index</span></a>
</li><li class="td-sidebar-nav__section-title td-sidebar-nav__section without-child collapse" id=m-docsnavpatterns3-cal-coding-guidelinesdesignparameter-placeholders-li>
<a href=/docs/navpatterns/3-cal-coding-guidelines/design/parameter-placeholders/ class="align-left pl-0 td-sidebar-link td-sidebar-link__page" id=m-docsnavpatterns3-cal-coding-guidelinesdesignparameter-placeholders><span>Parameter Placeholders</span></a>
</li><li class="td-sidebar-nav__section-title td-sidebar-nav__section without-child collapse" id=m-docsnavpatterns3-cal-coding-guidelinesdesignstatic-object-invocation-li>
<a href=/docs/navpatterns/3-cal-coding-guidelines/design/static-object-invocation/ class="align-left pl-0 td-sidebar-link td-sidebar-link__page" id=m-docsnavpatterns3-cal-coding-guidelinesdesignstatic-object-invocation><span>Static Object Invocation</span></a>
</li><li class="td-sidebar-nav__section-title td-sidebar-nav__section without-child collapse" id=m-docsnavpatterns3-cal-coding-guidelinesdesignunreachable-code-li>
<a href=/docs/navpatterns/3-cal-coding-guidelines/design/unreachable-code/ class="align-left pl-0 td-sidebar-link td-sidebar-link__page" id=m-docsnavpatterns3-cal-coding-guidelinesdesignunreachable-code><span>Unreachable Code</span></a>
</li><li class="td-sidebar-nav__section-title td-sidebar-nav__section without-child collapse" id=m-docsnavpatterns3-cal-coding-guidelinesdesignunused-initialized-variables-li>
<a href=/docs/navpatterns/3-cal-coding-guidelines/design/unused-initialized-variables/ class="align-left pl-0 td-sidebar-link td-sidebar-link__page" id=m-docsnavpatterns3-cal-coding-guidelinesdesignunused-initialized-variables><span>Unused Initialized Variables</span></a>
</li><li class="td-sidebar-nav__section-title td-sidebar-nav__section without-child collapse" id=m-docsnavpatterns3-cal-coding-guidelinesdesignunused-variables-li>
<a href=/docs/navpatterns/3-cal-coding-guidelines/design/unused-variables/ class="align-left pl-0 td-sidebar-link td-sidebar-link__page" id=m-docsnavpatterns3-cal-coding-guidelinesdesignunused-variables><span>Unused Variables</span></a>
</li><li class="td-sidebar-nav__section-title td-sidebar-nav__section without-child collapse" id=m-docsnavpatterns3-cal-coding-guidelinesdesignvariable-capacity-mismatch-li>
<a href=/docs/navpatterns/3-cal-coding-guidelines/design/variable-capacity-mismatch/ class="align-left pl-0 td-sidebar-link td-sidebar-link__page" id=m-docsnavpatterns3-cal-coding-guidelinesdesignvariable-capacity-mismatch><span>Variable Capacity Mismatch</span></a>
</li><li class="td-sidebar-nav__section-title td-sidebar-nav__section without-child collapse" id=m-docsnavpatterns3-cal-coding-guidelinesdesignwith-scope-name-collision-li>
<a href=/docs/navpatterns/3-cal-coding-guidelines/design/with-scope-name-collision/ class="align-left pl-0 td-sidebar-link td-sidebar-link__page" id=m-docsnavpatterns3-cal-coding-guidelinesdesignwith-scope-name-collision><span>WITH Scope Name Collision</span></a>
</li>
</ul>
</li><li class="td-sidebar-nav__section-title td-sidebar-nav__section without-child collapse" id=m-docsnavpatterns3-cal-coding-guidelinesinternally-used-dot-net-types-li>
<a href=/docs/navpatterns/3-cal-coding-guidelines/internally-used-dot-net-types/ class="align-left pl-0 td-sidebar-link td-sidebar-link__page" id=m-docsnavpatterns3-cal-coding-guidelinesinternally-used-dot-net-types><span>Internally used DotNet Types</span></a>
</li><li class="td-sidebar-nav__section-title td-sidebar-nav__section with-child collapse" id=m-docsnavpatterns3-cal-coding-guidelinesinternationalization-li>
<a href=/docs/navpatterns/3-cal-coding-guidelines/internationalization/ class="align-left pl-0 td-sidebar-link td-sidebar-link__section" id=m-docsnavpatterns3-cal-coding-guidelinesinternationalization><span>Internationalization</span></a>
<ul class="ul-4 foldable">
<li class="td-sidebar-nav__section-title td-sidebar-nav__section without-child collapse" id=m-docsnavpatterns3-cal-coding-guidelinesinternationalizationusing-calcdate-li>
<a href=/docs/navpatterns/3-cal-coding-guidelines/internationalization/using-calcdate/ class="align-left pl-0 td-sidebar-link td-sidebar-link__page" id=m-docsnavpatterns3-cal-coding-guidelinesinternationalizationusing-calcdate><span>Using Calcdate</span></a>
</li>
</ul>
</li><li class="td-sidebar-nav__section-title td-sidebar-nav__section with-child collapse" id=m-docsnavpatterns3-cal-coding-guidelineslocalizability-li>
<a href=/docs/navpatterns/3-cal-coding-guidelines/localizability/ class="align-left pl-0 td-sidebar-link td-sidebar-link__section" id=m-docsnavpatterns3-cal-coding-guidelineslocalizability><span>Localizability</span></a>
<ul class="ul-4 foldable">
<li class="td-sidebar-nav__section-title td-sidebar-nav__section without-child collapse" id=m-docsnavpatterns3-cal-coding-guidelineslocalizabilitycaptionml-for-system-tables-li>
<a href=/docs/navpatterns/3-cal-coding-guidelines/localizability/captionml-for-system-tables/ class="align-left pl-0 td-sidebar-link td-sidebar-link__page" id=m-docsnavpatterns3-cal-coding-guidelineslocalizabilitycaptionml-for-system-tables><span>CaptionML on System Pages</span></a>
</li><li class="td-sidebar-nav__section-title td-sidebar-nav__section without-child collapse" id=m-docsnavpatterns3-cal-coding-guidelineslocalizabilityfieldcaption-and-tablecaption-li>
<a href=/docs/navpatterns/3-cal-coding-guidelines/localizability/fieldcaption-and-tablecaption/ class="align-left pl-0 td-sidebar-link td-sidebar-link__page" id=m-docsnavpatterns3-cal-coding-guidelineslocalizabilityfieldcaption-and-tablecaption><span>FIELDCAPTION and TABLECAPTION</span></a>
</li><li class="td-sidebar-nav__section-title td-sidebar-nav__section without-child collapse" id=m-docsnavpatterns3-cal-coding-guidelineslocalizabilityglobal-text-constants-li>
<a href=/docs/navpatterns/3-cal-coding-guidelines/localizability/global-text-constants/ class="align-left pl-0 td-sidebar-link td-sidebar-link__page" id=m-docsnavpatterns3-cal-coding-guidelineslocalizabilityglobal-text-constants><span>Global Text Constants</span></a>
</li><li class="td-sidebar-nav__section-title td-sidebar-nav__section without-child collapse" id=m-docsnavpatterns3-cal-coding-guidelineslocalizabilityuse-text-constants-li>
<a href=/docs/navpatterns/3-cal-coding-guidelines/localizability/use-text-constants/ class="align-left pl-0 td-sidebar-link td-sidebar-link__page" id=m-docsnavpatterns3-cal-coding-guidelineslocalizabilityuse-text-constants><span>Use Text Constants</span></a>
</li><li class="td-sidebar-nav__section-title td-sidebar-nav__section without-child collapse" id=m-docsnavpatterns3-cal-coding-guidelineslocalizabilityusing-optioncaptionml-li>
<a href=/docs/navpatterns/3-cal-coding-guidelines/localizability/using-optioncaptionml/ class="align-left pl-0 td-sidebar-link td-sidebar-link__page" id=m-docsnavpatterns3-cal-coding-guidelineslocalizabilityusing-optioncaptionml><span>Using OptionCaptionML</span></a>
</li>
</ul>
</li><li class="td-sidebar-nav__section-title td-sidebar-nav__section with-child collapse" id=m-docsnavpatterns3-cal-coding-guidelinesreadability-li>
<a href=/docs/navpatterns/3-cal-coding-guidelines/readability/ class="align-left pl-0 td-sidebar-link td-sidebar-link__section" id=m-docsnavpatterns3-cal-coding-guidelinesreadability><span>Readability</span></a>
<ul class="ul-4 foldable">
<li class="td-sidebar-nav__section-title td-sidebar-nav__section without-child collapse" id=m-docsnavpatterns3-cal-coding-guidelinesreadabilitybegin-as-an-afterword-li>
<a href=/docs/navpatterns/3-cal-coding-guidelines/readability/begin-as-an-afterword/ class="align-left pl-0 td-sidebar-link td-sidebar-link__page" id=m-docsnavpatterns3-cal-coding-guidelinesreadabilitybegin-as-an-afterword><span>Begin as an 'After Word'</span></a>
</li><li class="td-sidebar-nav__section-title td-sidebar-nav__section without-child collapse" id=m-docsnavpatterns3-cal-coding-guidelinesreadabilitybegin-end-li>
<a href=/docs/navpatterns/3-cal-coding-guidelines/readability/begin-end/ class="align-left pl-0 td-sidebar-link td-sidebar-link__page" id=m-docsnavpatterns3-cal-coding-guidelinesreadabilitybegin-end><span>Begin-End - Compound Only</span></a>
</li><li class="td-sidebar-nav__section-title td-sidebar-nav__section without-child collapse" id=m-docsnavpatterns3-cal-coding-guidelinesreadabilitybinary-operator-line-start-li>
<a href=/docs/navpatterns/3-cal-coding-guidelines/readability/binary-operator-line-start/ class="align-left pl-0 td-sidebar-link td-sidebar-link__page" id=m-docsnavpatterns3-cal-coding-guidelinesreadabilitybinary-operator-line-start><span>Binary Operator to Start Line</span></a>
</li><li class="td-sidebar-nav__section-title td-sidebar-nav__section without-child collapse" id=m-docsnavpatterns3-cal-coding-guidelinesreadabilityblank-lines-li>
<a href=/docs/navpatterns/3-cal-coding-guidelines/readability/blank-lines/ class="align-left pl-0 td-sidebar-link td-sidebar-link__page" id=m-docsnavpatterns3-cal-coding-guidelinesreadabilityblank-lines><span>Blank Lines</span></a>
</li><li class="td-sidebar-nav__section-title td-sidebar-nav__section without-child collapse" id=m-docsnavpatterns3-cal-coding-guidelinesreadabilitycase-actions-li>
<a href=/docs/navpatterns/3-cal-coding-guidelines/readability/case-actions/ class="align-left pl-0 td-sidebar-link td-sidebar-link__page" id=m-docsnavpatterns3-cal-coding-guidelinesreadabilitycase-actions><span>CASE Action</span></a>
</li><li class="td-sidebar-nav__section-title td-sidebar-nav__section without-child collapse" id=m-docsnavpatterns3-cal-coding-guidelinesreadabilitycolon-usage-in-case-li>
<a href=/docs/navpatterns/3-cal-coding-guidelines/readability/colon-usage-in-case/ class="align-left pl-0 td-sidebar-link td-sidebar-link__page" id=m-docsnavpatterns3-cal-coding-guidelinesreadabilitycolon-usage-in-case><span>Colon usage in CASE</span></a>
</li><li class="td-sidebar-nav__section-title td-sidebar-nav__section without-child collapse" id=m-docsnavpatterns3-cal-coding-guidelinesreadabilitycomments-curly-brackets-li>
<a href=/docs/navpatterns/3-cal-coding-guidelines/readability/comments-curly-brackets/ class="align-left pl-0 td-sidebar-link td-sidebar-link__page" id=m-docsnavpatterns3-cal-coding-guidelinesreadabilitycomments-curly-brackets><span>Comments inside Curly Brackets</span></a>
</li><li class="td-sidebar-nav__section-title td-sidebar-nav__section without-child collapse" id=m-docsnavpatterns3-cal-coding-guidelinesreadabilitycomments-spacing-li>
<a href=/docs/navpatterns/3-cal-coding-guidelines/readability/comments-spacing/ class="align-left pl-0 td-sidebar-link td-sidebar-link__page" id=m-docsnavpatterns3-cal-coding-guidelinesreadabilitycomments-spacing><span>Comment Spacing</span></a>
</li><li class="td-sidebar-nav__section-title td-sidebar-nav__section without-child collapse" id=m-docsnavpatterns3-cal-coding-guidelinesreadabilityend-else-pair-li>
<a href=/docs/navpatterns/3-cal-coding-guidelines/readability/end-else-pair/ class="align-left pl-0 td-sidebar-link td-sidebar-link__page" id=m-docsnavpatterns3-cal-coding-guidelinesreadabilityend-else-pair><span>END ELSE Pair</span></a>
</li><li class="td-sidebar-nav__section-title td-sidebar-nav__section without-child collapse" id=m-docsnavpatterns3-cal-coding-guidelinesreadabilityindentation-li>
<a href=/docs/navpatterns/3-cal-coding-guidelines/readability/indentation/ class="align-left pl-0 td-sidebar-link td-sidebar-link__page" id=m-docsnavpatterns3-cal-coding-guidelinesreadabilityindentation><span>Indentation</span></a>
</li><li class="td-sidebar-nav__section-title td-sidebar-nav__section without-child collapse" id=m-docsnavpatterns3-cal-coding-guidelinesreadabilitykeyword-pairs-indentation-li>
<a href=/docs/navpatterns/3-cal-coding-guidelines/readability/keyword-pairs-indentation/ class="align-left pl-0 td-sidebar-link td-sidebar-link__page" id=m-docsnavpatterns3-cal-coding-guidelinesreadabilitykeyword-pairs-indentation><span>Keyword Pairs - Indentation</span></a>
</li><li class="td-sidebar-nav__section-title td-sidebar-nav__section without-child collapse" id=m-docsnavpatterns3-cal-coding-guidelinesreadabilityline-start-keywords-li>
<a href=/docs/navpatterns/3-cal-coding-guidelines/readability/line-start-keywords/ class="align-left pl-0 td-sidebar-link td-sidebar-link__page" id=m-docsnavpatterns3-cal-coding-guidelinesreadabilityline-start-keywords><span>Line Start Keywords</span></a>
</li><li class="td-sidebar-nav__section-title td-sidebar-nav__section without-child collapse" id=m-docsnavpatterns3-cal-coding-guidelinesreadabilitylonely-repeat-li>
<a href=/docs/navpatterns/3-cal-coding-guidelines/readability/lonely-repeat/ class="align-left pl-0 td-sidebar-link td-sidebar-link__page" id=m-docsnavpatterns3-cal-coding-guidelinesreadabilitylonely-repeat><span>Lonely Repeat</span></a>
</li><li class="td-sidebar-nav__section-title td-sidebar-nav__section without-child collapse" id=m-docsnavpatterns3-cal-coding-guidelinesreadabilitynamed-invocations-li>
<a href=/docs/navpatterns/3-cal-coding-guidelines/readability/named-invocations/ class="align-left pl-0 td-sidebar-link td-sidebar-link__page" id=m-docsnavpatterns3-cal-coding-guidelinesreadabilitynamed-invocations><span>Named Invocations</span></a>
</li><li class="td-sidebar-nav__section-title td-sidebar-nav__section without-child collapse" id=m-docsnavpatterns3-cal-coding-guidelinesreadabilitynested-withs-li>
<a href=/docs/navpatterns/3-cal-coding-guidelines/readability/nested-withs/ class="align-left pl-0 td-sidebar-link td-sidebar-link__page" id=m-docsnavpatterns3-cal-coding-guidelinesreadabilitynested-withs><span>Nested WITHs</span></a>
</li><li class="td-sidebar-nav__section-title td-sidebar-nav__section without-child collapse" id=m-docsnavpatterns3-cal-coding-guidelinesreadabilityone-statement-per-line-li>
<a href=/docs/navpatterns/3-cal-coding-guidelines/readability/one-statement-per-line/ class="align-left pl-0 td-sidebar-link td-sidebar-link__page" id=m-docsnavpatterns3-cal-coding-guidelinesreadabilityone-statement-per-line><span>One Statement Per Line</span></a>
</li><li class="td-sidebar-nav__section-title td-sidebar-nav__section without-child collapse" id=m-docsnavpatterns3-cal-coding-guidelinesreadabilityseparate-if-and-else-li>
<a href=/docs/navpatterns/3-cal-coding-guidelines/readability/separate-if-and-else/ class="align-left pl-0 td-sidebar-link td-sidebar-link__page" id=m-docsnavpatterns3-cal-coding-guidelinesreadabilityseparate-if-and-else><span>Separate IF and ELSE</span></a>
</li><li class="td-sidebar-nav__section-title td-sidebar-nav__section without-child collapse" id=m-docsnavpatterns3-cal-coding-guidelinesreadabilityspacing-binary-operators-li>
<a href=/docs/navpatterns/3-cal-coding-guidelines/readability/spacing-binary-operators/ class="align-left pl-0 td-sidebar-link td-sidebar-link__page" id=m-docsnavpatterns3-cal-coding-guidelinesreadabilityspacing-binary-operators><span>Spacing Binary Operators</span></a>
</li><li class="td-sidebar-nav__section-title td-sidebar-nav__section without-child collapse" id=m-docsnavpatterns3-cal-coding-guidelinesreadabilityspacing-brackets-and-li>
<a href=/docs/navpatterns/3-cal-coding-guidelines/readability/spacing-brackets-and/ class="align-left pl-0 td-sidebar-link td-sidebar-link__page" id=m-docsnavpatterns3-cal-coding-guidelinesreadabilityspacing-brackets-and><span>Spacing Brackets and ::</span></a>
</li><li class="td-sidebar-nav__section-title td-sidebar-nav__section without-child collapse" id=m-docsnavpatterns3-cal-coding-guidelinesreadabilityspacing-unary-operators-li>
<a href=/docs/navpatterns/3-cal-coding-guidelines/readability/spacing-unary-operators/ class="align-left pl-0 td-sidebar-link td-sidebar-link__page" id=m-docsnavpatterns3-cal-coding-guidelinesreadabilityspacing-unary-operators><span>Spacing Unary Operators</span></a>
</li><li class="td-sidebar-nav__section-title td-sidebar-nav__section without-child collapse" id=m-docsnavpatterns3-cal-coding-guidelinesreadabilitysuggested-abbreviations-li>
<a href=/docs/navpatterns/3-cal-coding-guidelines/readability/suggested-abbreviations/ class="align-left pl-0 td-sidebar-link td-sidebar-link__page" id=m-docsnavpatterns3-cal-coding-guidelinesreadabilitysuggested-abbreviations><span>Suggested Abbreviations</span></a>
</li><li class="td-sidebar-nav__section-title td-sidebar-nav__section without-child collapse" id=m-docsnavpatterns3-cal-coding-guidelinesreadabilitytemporary-variable-naming-li>
<a href=/docs/navpatterns/3-cal-coding-guidelines/readability/temporary-variable-naming/ class="align-left pl-0 td-sidebar-link td-sidebar-link__page" id=m-docsnavpatterns3-cal-coding-guidelinesreadabilitytemporary-variable-naming><span>Temporary Variable Naming</span></a>
</li><li class="td-sidebar-nav__section-title td-sidebar-nav__section without-child collapse" id=m-docsnavpatterns3-cal-coding-guidelinesreadabilitytextconst-suffixes-li>
<a href=/docs/navpatterns/3-cal-coding-guidelines/readability/textconst-suffixes/ class="align-left pl-0 td-sidebar-link td-sidebar-link__page" id=m-docsnavpatterns3-cal-coding-guidelinesreadabilitytextconst-suffixes><span>TextConst Suffixes</span></a>
</li><li class="td-sidebar-nav__section-title td-sidebar-nav__section without-child collapse" id=m-docsnavpatterns3-cal-coding-guidelinesreadabilityunary-operator-line-end-li>
<a href=/docs/navpatterns/3-cal-coding-guidelines/readability/unary-operator-line-end/ class="align-left pl-0 td-sidebar-link td-sidebar-link__page" id=m-docsnavpatterns3-cal-coding-guidelinesreadabilityunary-operator-line-end><span>Unary Operator Line End</span></a>
</li><li class="td-sidebar-nav__section-title td-sidebar-nav__section without-child collapse" id=m-docsnavpatterns3-cal-coding-guidelinesreadabilityunnecessary-compound-parenthesis-li>
<a href=/docs/navpatterns/3-cal-coding-guidelines/readability/unnecessary-compound-parenthesis/ class="align-left pl-0 td-sidebar-link td-sidebar-link__page" id=m-docsnavpatterns3-cal-coding-guidelinesreadabilityunnecessary-compound-parenthesis><span>Unnecessary Compound Parenthesis</span></a>
</li><li class="td-sidebar-nav__section-title td-sidebar-nav__section without-child collapse" id=m-docsnavpatterns3-cal-coding-guidelinesreadabilityunnecessary-else-li>
<a href=/docs/navpatterns/3-cal-coding-guidelines/readability/unnecessary-else/ class="align-left pl-0 td-sidebar-link td-sidebar-link__page" id=m-docsnavpatterns3-cal-coding-guidelinesreadabilityunnecessary-else><span>Unnecessary ELSE</span></a>
</li><li class="td-sidebar-nav__section-title td-sidebar-nav__section without-child collapse" id=m-docsnavpatterns3-cal-coding-guidelinesreadabilityunnecessary-function-parenthesis-li>
<a href=/docs/navpatterns/3-cal-coding-guidelines/readability/unnecessary-function-parenthesis/ class="align-left pl-0 td-sidebar-link td-sidebar-link__page" id=m-docsnavpatterns3-cal-coding-guidelinesreadabilityunnecessary-function-parenthesis><span>Unnecessary Function Parenthesis</span></a>
</li><li class="td-sidebar-nav__section-title td-sidebar-nav__section without-child collapse" id=m-docsnavpatterns3-cal-coding-guidelinesreadabilityunnecessary-separators-li>
<a href=/docs/navpatterns/3-cal-coding-guidelines/readability/unnecessary-separators/ class="align-left pl-0 td-sidebar-link td-sidebar-link__page" id=m-docsnavpatterns3-cal-coding-guidelinesreadabilityunnecessary-separators><span>Unnecessary Separators</span></a>
</li><li class="td-sidebar-nav__section-title td-sidebar-nav__section without-child collapse" id=m-docsnavpatterns3-cal-coding-guidelinesreadabilityunnecessary-truefalse-li>
<a href=/docs/navpatterns/3-cal-coding-guidelines/readability/unnecessary-truefalse/ class="align-left pl-0 td-sidebar-link td-sidebar-link__page" id=m-docsnavpatterns3-cal-coding-guidelinesreadabilityunnecessary-truefalse><span>Unnecessary TRUE/FALSE</span></a>
</li><li class="td-sidebar-nav__section-title td-sidebar-nav__section without-child collapse" id=m-docsnavpatterns3-cal-coding-guidelinesreadabilityvariable-already-scoped-li>
<a href=/docs/navpatterns/3-cal-coding-guidelines/readability/variable-already-scoped/ class="align-left pl-0 td-sidebar-link td-sidebar-link__page" id=m-docsnavpatterns3-cal-coding-guidelinesreadabilityvariable-already-scoped><span>Variable Already Scoped</span></a>
</li><li class="td-sidebar-nav__section-title td-sidebar-nav__section without-child collapse" id=m-docsnavpatterns3-cal-coding-guidelinesreadabilityvariable-naming-li>
<a href=/docs/navpatterns/3-cal-coding-guidelines/readability/variable-naming/ class="align-left pl-0 td-sidebar-link td-sidebar-link__page" id=m-docsnavpatterns3-cal-coding-guidelinesreadabilityvariable-naming><span>Variable Naming</span></a>
</li><li class="td-sidebar-nav__section-title td-sidebar-nav__section without-child collapse" id=m-docsnavpatterns3-cal-coding-guidelinesreadabilityvariables-declarations-order-li>
<a href=/docs/navpatterns/3-cal-coding-guidelines/readability/variables-declarations-order/ class="align-left pl-0 td-sidebar-link td-sidebar-link__page" id=m-docsnavpatterns3-cal-coding-guidelinesreadabilityvariables-declarations-order><span>Variables Declarations Order</span></a>
</li>
</ul>
</li><li class="td-sidebar-nav__section-title td-sidebar-nav__section with-child collapse" id=m-docsnavpatterns3-cal-coding-guidelinesux-li>
<a href=/docs/navpatterns/3-cal-coding-guidelines/ux/ class="align-left pl-0 td-sidebar-link td-sidebar-link__section" id=m-docsnavpatterns3-cal-coding-guidelinesux><span>UX</span></a>
<ul class="ul-4 foldable">
<li class="td-sidebar-nav__section-title td-sidebar-nav__section without-child collapse" id=m-docsnavpatterns3-cal-coding-guidelinesuxactions-images-li>
<a href=/docs/navpatterns/3-cal-coding-guidelines/ux/actions-images/ class="align-left pl-0 td-sidebar-link td-sidebar-link__page" id=m-docsnavpatterns3-cal-coding-guidelinesuxactions-images><span>Actions - Images</span></a>
</li><li class="td-sidebar-nav__section-title td-sidebar-nav__section without-child collapse" id=m-docsnavpatterns3-cal-coding-guidelinesuxconfirm-li>
<a href=/docs/navpatterns/3-cal-coding-guidelines/ux/confirm/ class="align-left pl-0 td-sidebar-link td-sidebar-link__page" id=m-docsnavpatterns3-cal-coding-guidelinesuxconfirm><span>CONFIRM</span></a>
</li><li class="td-sidebar-nav__section-title td-sidebar-nav__section without-child collapse" id=m-docsnavpatterns3-cal-coding-guidelinesuxfielderror-li>
<a href=/docs/navpatterns/3-cal-coding-guidelines/ux/fielderror/ class="align-left pl-0 td-sidebar-link td-sidebar-link__page" id=m-docsnavpatterns3-cal-coding-guidelinesuxfielderror><span>FIELDERROR</span></a>
</li><li class="td-sidebar-nav__section-title td-sidebar-nav__section without-child collapse" id=m-docsnavpatterns3-cal-coding-guidelinesuxmessage-and-error-li>
<a href=/docs/navpatterns/3-cal-coding-guidelines/ux/message-and-error/ class="align-left pl-0 td-sidebar-link td-sidebar-link__page" id=m-docsnavpatterns3-cal-coding-guidelinesuxmessage-and-error><span>MESSAGE and ERROR</span></a>
</li>
</ul>
</li>
</ul>
</li><li class="td-sidebar-nav__section-title td-sidebar-nav__section with-child" id=m-docsnavpatterns4-get-involved-li>
<a href=/docs/navpatterns/4-get-involved/ class="align-left pl-0 td-sidebar-link td-sidebar-link__section" id=m-docsnavpatterns4-get-involved><span>(OLD) Get Involved</span></a>
<ul class="ul-3 foldable">
<li class="td-sidebar-nav__section-title td-sidebar-nav__section without-child collapse" id=m-docsnavpatterns4-get-involvedcode-of-conduct-li>
<a href=/docs/navpatterns/4-get-involved/code-of-conduct/ class="align-left pl-0 td-sidebar-link td-sidebar-link__page" id=m-docsnavpatterns4-get-involvedcode-of-conduct><span>Code of Conduct</span></a>
</li><li class="td-sidebar-nav__section-title td-sidebar-nav__section without-child collapse" id=m-docsnavpatterns4-get-involvedpatterns-authors-li>
<a href=/docs/navpatterns/4-get-involved/patterns-authors/ class="align-left pl-0 td-sidebar-link td-sidebar-link__page" id=m-docsnavpatterns4-get-involvedpatterns-authors><span>Patterns Authors</span></a>
</li><li class="td-sidebar-nav__section-title td-sidebar-nav__section without-child collapse" id=m-docsnavpatterns4-get-involvedtemplate-for-writing-nav-design-patterns-li>
<a href=/docs/navpatterns/4-get-involved/template-for-writing-nav-design-patterns/ class="align-left pl-0 td-sidebar-link td-sidebar-link__page" id=m-docsnavpatterns4-get-involvedtemplate-for-writing-nav-design-patterns><span>Template for writing Nav Design Patterns</span></a>
</li>
</ul>
</li><li class="td-sidebar-nav__section-title td-sidebar-nav__section without-child" id=m-docsnavpatternsrelated-links-li>
<a href=/docs/navpatterns/related-links/ class="align-left pl-0 td-sidebar-link td-sidebar-link__page" id=m-docsnavpatternsrelated-links><span>Related Links</span></a>
</li>
</ul>
</li><li class="td-sidebar-nav__section-title td-sidebar-nav__section with-child" id=m-docscontributing-li>
<a href=/docs/contributing/ class="align-left pl-0 td-sidebar-link td-sidebar-link__section" id=m-docscontributing><span>Contributing</span></a>
<ul class="ul-2 foldable">
<li class="td-sidebar-nav__section-title td-sidebar-nav__section without-child collapse" id=m-docscontributingformattingtips-li>
<a href=/docs/contributing/formattingtips/ class="align-left pl-0 td-sidebar-link td-sidebar-link__page" id=m-docscontributingformattingtips><span>Formatting tips</span></a>
</li><li class="td-sidebar-nav__section-title td-sidebar-nav__section without-child collapse" id=m-docscontributingforkandpr-li>
<a href=/docs/contributing/forkandpr/ class="align-left pl-0 td-sidebar-link td-sidebar-link__page" id=m-docscontributingforkandpr><span>Guide to Fork & PR</span></a>
</li><li class="td-sidebar-nav__section-title td-sidebar-nav__section with-child collapse" id=m-docscontributingtemplates-li>
<a href=/docs/contributing/templates/ class="align-left pl-0 td-sidebar-link td-sidebar-link__section" id=m-docscontributingtemplates><span>Templates</span></a>
<ul class="ul-3 foldable">
<li class="td-sidebar-nav__section-title td-sidebar-nav__section without-child collapse" id=m-docscontributingtemplatesguidelines-li>
<a href=/docs/contributing/templates/guidelines/ class="align-left pl-0 td-sidebar-link td-sidebar-link__page" id=m-docscontributingtemplatesguidelines><span>Title of the Guideline</span></a>
</li><li class="td-sidebar-nav__section-title td-sidebar-nav__section without-child collapse" id=m-docscontributingtemplatespatterns-li>
<a href=/docs/contributing/templates/patterns/ class="align-left pl-0 td-sidebar-link td-sidebar-link__page" id=m-docscontributingtemplatespatterns><span>Title of the pattern</span></a>
</li>
</ul>
</li><li class="td-sidebar-nav__section-title td-sidebar-nav__section without-child collapse" id=m-docscontributingtheapprovalprocess-li>
<a href=/docs/contributing/theapprovalprocess/ class="align-left pl-0 td-sidebar-link td-sidebar-link__page" id=m-docscontributingtheapprovalprocess><span>Understanding the Approval Process</span></a>
</li>
</ul>
</li>
</ul>
</li>
</ul>
</nav>
</div>
</aside>
<aside class="d-none d-xl-block col-xl-2 td-sidebar-toc d-print-none">
<div class="td-page-meta ml-2 pb-1 pt-2 mb-0">
<a href=https://github.com/microsoft/alguidelines/tree/master/content/en/docs/NAVPatterns/patterns/queries/select-distinct-with-queries/index.md class=td-page-meta--view target=_blank rel=noopener><i class="fa fa-file-alt fa-fw"></i> View page source</a>
<a href=https://github.com/microsoft/alguidelines/edit/master/content/en/docs/NAVPatterns/patterns/queries/select-distinct-with-queries/index.md class=td-page-meta--edit target=_blank rel=noopener><i class="fa fa-edit fa-fw"></i> Edit this page</a>
<a href="https://github.com/microsoft/alguidelines/new/master/content/en/docs/NAVPatterns/patterns/queries/select-distinct-with-queries/index.md?filename=change-me.md&value=---%0Atitle%3A+%22Long+Page+Title%22%0AlinkTitle%3A+%22Short+Nav+Title%22%0Aweight%3A+100%0Adescription%3A+%3E-%0A+++++Page+description+for+heading+and+indexes.%0A---%0A%0A%23%23+Heading%0A%0AEdit+this+template+to+create+your+new+page.%0A%0A%2A+Give+it+a+good+name%2C+ending+in+%60.md%60+-+e.g.+%60getting-started.md%60%0A%2A+Edit+the+%22front+matter%22+section+at+the+top+of+the+page+%28weight+controls+how+its+ordered+amongst+other+pages+in+the+same+directory%3B+lowest+number+first%29.%0A%2A+Add+a+good+commit+message+at+the+bottom+of+the+page+%28%3C80+characters%3B+use+the+extended+description+field+for+more+detail%29.%0A%2A+Create+a+new+branch+so+you+can+preview+your+new+file+and+request+a+review+via+Pull+Request.%0A" class=td-page-meta--child target=_blank rel=noopener><i class="fa fa-edit fa-fw"></i> Create child page</a>
<a href="https://github.com/microsoft/alguidelines/issues/new?title=SELECT%20DISTINCT%20with%20Queries" class=td-page-meta--issue target=_blank rel=noopener><i class="fab fa-github fa-fw"></i> Create documentation issue</a>
<a href=https://github.com/microsoft/alguidelines/issues/new class=td-page-meta--project-issue target=_blank rel=noopener><i class="fas fa-tasks fa-fw"></i> Create project issue</a>
</div>
<div class=td-toc><nav id=TableOfContents>
<ul>
<li>
<ul>
<li><a href=#abstract>Abstract</a></li>
<li><a href=#example>Example</a></li>
<li><a href=#nav-usages><strong>NAV Usages</strong></a></li>
<li><a href=#related-topics><strong>Related Topics</strong></a></li>
</ul>
</li>
</ul>
</nav></div>
<div class="taxonomy taxonomy-terms-cloud taxo-tags">
<h5 class=taxonomy-title>Tag Cloud</h5>
<ul class=taxonomy-terms>
<li><a class=taxonomy-term href=https://alguidelines.dev/tags/c/al/ data-taxonomy-term=c/al><span class=taxonomy-label>C/AL</span><span class=taxonomy-count>1</span></a></li>
<li><a class=taxonomy-term href=https://alguidelines.dev/tags/interface/ data-taxonomy-term=interface><span class=taxonomy-label>Interface</span><span class=taxonomy-count>1</span></a></li>
<li><a class=taxonomy-term href=https://alguidelines.dev/tags/nav/ data-taxonomy-term=nav><span class=taxonomy-label>NAV</span><span class=taxonomy-count>1</span></a></li>
<li><a class=taxonomy-term href=https://alguidelines.dev/tags/performance/ data-taxonomy-term=performance><span class=taxonomy-label>Performance</span><span class=taxonomy-count>2</span></a></li>
<li><a class=taxonomy-term href=https://alguidelines.dev/tags/readability/ data-taxonomy-term=readability><span class=taxonomy-label>Readability</span><span class=taxonomy-count>18</span></a></li>
</ul>
</div>
<div class="taxonomy taxonomy-terms-cloud taxo-categories">
<h5 class=taxonomy-title>Categories</h5>
<ul class=taxonomy-terms>
<li><a class=taxonomy-term href=https://alguidelines.dev/categories/archived-pattern/ data-taxonomy-term=archived-pattern><span class=taxonomy-label>Archived Pattern</span><span class=taxonomy-count>1</span></a></li>
<li><a class=taxonomy-term href=https://alguidelines.dev/categories/best-practice/ data-taxonomy-term=best-practice><span class=taxonomy-label>Best Practice</span><span class=taxonomy-count>20</span></a></li>
<li><a class=taxonomy-term href=https://alguidelines.dev/categories/pattern/ data-taxonomy-term=pattern><span class=taxonomy-label>Pattern</span><span class=taxonomy-count>3</span></a></li>
</ul>
</div>
</aside>
<main class="col-12 col-md-9 col-xl-8 pl-md-5" role=main>
<nav aria-label=breadcrumb class=td-breadcrumbs>
<ol class=breadcrumb>
<li class=breadcrumb-item>
<a href=https://alguidelines.dev/docs/>Docs</a>
</li>
<li class=breadcrumb-item>
<a href=https://alguidelines.dev/docs/navpatterns/>NAV Patterns Archive</a>
</li>
<li class=breadcrumb-item>
<a href=https://alguidelines.dev/docs/navpatterns/patterns/>Patterns</a>
</li>
<li class=breadcrumb-item>
<a href=https://alguidelines.dev/docs/navpatterns/patterns/queries/>Queries</a>
</li>
<li class="breadcrumb-item active" aria-current=page>
<a href=https://alguidelines.dev/docs/navpatterns/patterns/queries/select-distinct-with-queries/>SELECT DISTINCT with Queries</a>
</li>
</ol>
</nav>
<div class=td-content>
<h1>SELECT DISTINCT with Queries</h1>
<header class=article-meta>
</header>
<p><em>By Bogdana Botez, at Microsoft Development Center Copenhagen</em></p>
<h3 id=abstract>Abstract</h3>
<p>This pattern explains how to perform SELECT DISTINCT by using queries in Dynamics NAV.</p>
<p><strong>Description</strong></p>
<p>When working with tables, sometimes a developer needs to perform a SELECT DISTINCT (also known as SELECT UNIQUE) from a table. As NAV does not provide this out of the box, we present below a way to select unique records by using queries.</p>
<p><strong>Problem statement</strong></p>
<p>Let&rsquo;s consider the <strong>VAT Entry</strong> table as below: <a href=https://microsoft.sharepoint.com/teams/DynamicsNAV/Wiki/Nav%20Wiki%20Documents/NAV%20App%20Patterns/NAV%20App%20Patterns%20for%20Review/Table%20Select%20Distinct.docx#_msocom_1> </a></p>
<p><a href=6521.clip_5F00_image001.png><img src=6521.clip_5F00_image001.png alt=" "></a></p>
<p>The goal is to select one line for each separate document that produced VAT Entries. In other words, we want records grouped by <strong>Type, Document Type</strong> and <strong>Document No.</strong>. However, if there are multiple lines with the same value of the triad <strong>Type, Document Type</strong> and <strong>Document No.</strong> in the <strong>VAT Entry</strong> table, we only want to see one of them.</p>
<h4 id=solution>Solution</h4>
<p>Create a new query object <strong>VAT Entry Distinct Document No.</strong>, with a single DataItem sourced from <strong>VAT Entry</strong> table. Add the three desired group-by fields <strong>Type, Document Type</strong> and <strong>Document No.</strong> as columns.</p>
<p><a href=clip_5F00_image002.png><img src=clip_5F00_image002.png alt=" "></a></p>
<p>To enable grouping, add one more column, with <strong>Method Type</strong> = <strong>Totals</strong>. This will automatically set the <strong>Group By</strong> checkbox to TRUE on the three precedent fields.</p>
<p>Note that the <strong>Group By</strong> field is read-only and trying to set it by hand will clarify that:</p>
<p><a href=clip_5F00_image003.png><img src=clip_5F00_image003.png alt=" "></a></p>
<p>Running the query yields a single record per document. You can notice in the second line below for example, how the sales invoice number 103001 had 2 VAT Entries, but it shows up only once in the query:</p>
<p><a href=clip_5F00_image004.png><img src=clip_5F00_image004.png alt=" "></a></p>
<h3 id=example>Example</h3>
<p>One thing is to be noted: there is a limitation to how much information you can take out from the records. For example, if we need to extract more information than just the one we already have in the columns, then the following apply: adding one more column of <strong>Method Type</strong> = <strong>None</strong> will indeed show more information, but it <em>might</em> affect the grouping. More details below.</p>
<p><strong>The grouping is affected</strong> for example when the additional column is the <strong>VAT Entry No</strong>. In this case, this column brings up additional grouping criteria and one group for each entry number will end up being created.</p>
<p><a href=clip_5F00_image005.png><img src=clip_5F00_image005.png alt=" "></a></p>
<p>You can notice that both lines of document 103001 are not visible, which contradicts the goal of SELECT DISTINCT.</p>
<p><a href=clip_5F00_image006.png><img src=clip_5F00_image006.png alt=" "></a></p>
<p><strong>The grouping is not affected</strong> when the additional column does not influence grouping (has variation identical with one of the other existing columns). For example, adding <strong>Posting Date</strong> as a new column, does not change anything because posting date is the same for all lines of a document, so the query result is identical with the initial one:</p>
<p><a href=clip_5F00_image007.png><img src=clip_5F00_image007.png alt=" "></a></p>
<p>Below is the result of this query, where you can notice that the initial grouping is preserved and correct. Bonus, we can now read the <strong>Posting Date</strong> of the document too.</p>
<p><a href=clip_5F00_image008.png><img src=clip_5F00_image008.png alt=" "></a></p>
<p><strong>The grouping is also not affected</strong> when adding more columns of <strong>Method Type</strong> = <strong>Totals</strong>. However, this can only be done with columns of Decimal data type.</p>
<h3 id=nav-usages><strong>NAV Usages</strong></h3>
<p>This pattern is used in Query 19: <strong>VAT Entries Base Amt. Sum</strong>. This query is used in Report 19: <strong>VAT- VIES Declaration Tax Auth</strong>.</p>
<p><a href=Untitled-picture.png><img src=Untitled-picture.png alt=" "></a></p>
<p>The pattern is also used in Query 1511: <strong>User IDs by Notification Type</strong>.</p>
<h3 id=related-topics><strong>Related Topics</strong></h3>
<p>A variation using loops could be described, for C/AL development on NAV 6 where query objects are not available.</p>
<div class="text-muted mt-5 pt-3 border-top">
Last modified February 20, 2022: <a href=https://github.com/microsoft/alguidelines/commit/cceb0c945e0383599f497350ca254d5755edda65>Restructure for Docsy theme (cceb0c94)</a>
</div>
</div>
</main>
</div>
</div>
<footer class="bg-dark py-5 row d-print-none">
<div class="container-fluid mx-sm-5">
<div class=row>
<div class="col-6 col-sm-4 text-xs-center order-sm-2">
<ul class="list-inline mb-0">
<li class="list-inline-item mx-2 h3" data-toggle=tooltip data-placement=top title=GitHub aria-label=GitHub>
<a class=text-white target=_blank rel=noopener href=https://github.com/microsoft/alguidelines aria-label=GitHub>
<i class="fab fa-github"></i>
</a>
</li>
<li class="list-inline-item mx-2 h3" data-toggle=tooltip data-placement=top title=Twitter aria-label=Twitter>
<a class=text-white target=_blank rel=noopener href="https://twitter.com/search?q=%23bcalhelp" aria-label=Twitter>
<i class="fab fa-twitter"></i>
</a>
</li>
<li class="list-inline-item mx-2 h3" data-toggle=tooltip data-placement=top title=Discord aria-label=Discord>
<a class=text-white target=_blank rel=noopener href=https://discord.gg/4wbfNv3 aria-label=Discord>
<i class="fab fa-discord"></i>
</a>
</li>
</ul>
</div>
<div class="col-6 col-sm-4 text-right text-xs-center order-sm-3">
</div>
<div class="col-12 col-sm-4 text-center py-2 order-sm-2">
<small class=text-white>&copy; 2022 alguidelines.dev Project All Rights Reserved</small>
</div>
</div>
</div>
</footer>
</div>
<script src=https://cdn.jsdelivr.net/npm/popper.js@1.16.1/dist/umd/popper.min.js integrity=sha384-9/reFTGAW83EW2RDu2S0VKaIzap3H66lZH81PoYlFhbGU+6BZp6G7niu735Sk7lN crossorigin=anonymous></script>
<script src=https://cdn.jsdelivr.net/npm/bootstrap@4.6.1/dist/js/bootstrap.min.js integrity="sha512-UR25UO94eTnCVwjbXozyeVd6ZqpaAE9naiEUBK/A+QDbfSTQFhPGj5lOR6d8tsgbBk84Ggb5A3EkjsOgPRPcKA==" crossorigin=anonymous></script>
<script src=/js/tabpane-persist.js></script>
<script src=/js/main.min.46b25eb30e292e80e9e18facc285e194199cf26288c5a1735cda89fb827eba54.js integrity="sha256-RrJesw4pLoDp4Y+swoXhlBmc8mKIxaFzXNqJ+4J+ulQ=" crossorigin=anonymous></script>
</body>
</html>

Binary file not shown.

After

Width:  |  Height:  |  Size: 28 KiB

View file

@ -0,0 +1,662 @@
<!doctype html><html lang=en class=no-js>
<head>
<meta charset=utf-8>
<meta name=viewport content="width=device-width,initial-scale=1,shrink-to-fit=no">
<meta name=generator content="Hugo 0.92.2">
<meta name=robots content="index, follow">
<link rel="shortcut icon" href=/favicons/favicon.ico>
<link rel=apple-touch-icon href=/favicons/apple-touch-icon-180x180.png sizes=180x180>
<link rel=icon type=image/png href=/favicons/favicon-16x16.png sizes=16x16>
<link rel=icon type=image/png href=/favicons/favicon-32x32.png sizes=32x32>
<link rel=icon type=image/png href=/favicons/android-36x36.png sizes=36x36>
<link rel=icon type=image/png href=/favicons/android-48x48.png sizes=48x48>
<link rel=icon type=image/png href=/favicons/android-72x72.png sizes=72x72>
<link rel=icon type=image/png href=/favicons/android-96x96.png sizes=96x96>
<link rel=icon type=image/png href=/favicons/android-144x144.png sizes=144x144>
<link rel=icon type=image/png href=/favicons/android-192x192.png sizes=192x192>
<title>Use Queries to Detect Duplicate Records | alguidelines.dev - Business Central Design Patterns</title>
<meta name=description content="Originally by Abshishek Ghosh and Bogdan Sturzoiu at Microsoft Development Center Copenhagen
Abstract
This pattern uses queries to create an efficient …">
<meta property="og:title" content="Use Queries to Detect Duplicate Records">
<meta property="og:description" content="Originally by Abshishek Ghosh and Bogdan Sturzoiu at Microsoft Development Center Copenhagen
Abstract This pattern uses queries to create an efficient way to detect duplicate entries in a table. This is, for example, useful when trying to find out which customers or contacts have the same names, so we can merge them later.
Description Duplicate detection has several requirements in Microsoft Dynamics NAV. One method to eliminate duplication is by defining the relevant field as the primary key.">
<meta property="og:type" content="article">
<meta property="og:url" content="https://alguidelines.dev/docs/navpatterns/patterns/queries/use-queries-to-detect-duplicate-records/"><meta property="og:image" content="https://alguidelines.dev/images/og-image-fission.png"><meta property="article:section" content="docs">
<meta property="article:modified_time" content="2022-02-20T13:18:49+01:00"><meta property="og:site_name" content="alguidelines.dev - Business Central Design Patterns">
<meta itemprop=name content="Use Queries to Detect Duplicate Records">
<meta itemprop=description content="Originally by Abshishek Ghosh and Bogdan Sturzoiu at Microsoft Development Center Copenhagen
Abstract This pattern uses queries to create an efficient way to detect duplicate entries in a table. This is, for example, useful when trying to find out which customers or contacts have the same names, so we can merge them later.
Description Duplicate detection has several requirements in Microsoft Dynamics NAV. One method to eliminate duplication is by defining the relevant field as the primary key.">
<meta itemprop=dateModified content="2022-02-20T13:18:49+01:00">
<meta itemprop=wordCount content="479"><meta itemprop=image content="https://alguidelines.dev/images/og-image-fission.png">
<meta itemprop=keywords content><meta name=twitter:card content="summary_large_image">
<meta name=twitter:image content="https://alguidelines.dev/images/og-image-fission.png">
<meta name=twitter:title content="Use Queries to Detect Duplicate Records">
<meta name=twitter:description content="Originally by Abshishek Ghosh and Bogdan Sturzoiu at Microsoft Development Center Copenhagen
Abstract This pattern uses queries to create an efficient way to detect duplicate entries in a table. This is, for example, useful when trying to find out which customers or contacts have the same names, so we can merge them later.
Description Duplicate detection has several requirements in Microsoft Dynamics NAV. One method to eliminate duplication is by defining the relevant field as the primary key.">
<link rel=preload href=/scss/main.min.465d5fa0bd58415aee47bc5a1c5d8deee19fe158cff814bc698ee863ea6b68eb.css as=style>
<link href=/scss/main.min.465d5fa0bd58415aee47bc5a1c5d8deee19fe158cff814bc698ee863ea6b68eb.css rel=stylesheet integrity>
<script src=https://code.jquery.com/jquery-3.6.0.min.js integrity=sha384-vtXRMe3mGCbOeY7l30aIg8H9p3GdeSe4IFlP6G8JMa7o7lXvnz3GFKzPxzJdPfGK crossorigin=anonymous></script>
</head>
<body class=td-page>
<header>
<nav class="js-navbar-scroll navbar navbar-expand navbar-dark flex-column flex-md-row td-navbar">
<a class=navbar-brand href=/>
<img src=/images/alguidelines-bclogo-pattern-white.png height=32px>
<span class=font-weight-bold>alguidelines.dev - Business Central Design Patterns</span>
</a>
<div class="td-navbar-nav-scroll ml-md-auto" id=main_navbar>
<ul class="navbar-nav mt-2 mt-lg-0">
<li class="nav-item mr-4 mb-2 mb-lg-0">
<a class=nav-link href=/docs/><i class="fas fa-book"></i><span>Docs</span></a>
</li>
<li class="nav-item mr-4 mb-2 mb-lg-0">
<a class=nav-link href=https://github.com/microsoft/alguidelines/discussions/ target=_blank><i class="fas fa-comments"></i><span>Discussions</span></a>
</li>
<li class="nav-item mr-4 mb-2 mb-lg-0">
<a class=nav-link href=https://github.com/microsoft/alguidelines target=_blank><i class="fab fa-github"></i><span>GitHub</span></a>
</li>
<li class="nav-item mr-4 mb-2 mb-lg-0">
<a class=nav-link href=https://discord.gg/4wbfNv3 target=_blank><i class="fab fa-discord"></i><span>Discord</span></a>
</li>
</ul>
</div>
<div class="navbar-nav d-none d-lg-block"></div>
</nav>
</header>
<div class="container-fluid td-outer">
<div class=td-main>
<div class="row flex-xl-nowrap">
<aside class="col-12 col-md-3 col-xl-2 td-sidebar d-print-none">
<div id=td-sidebar-menu class=td-sidebar__inner>
<div id=content-mobile>
<form class="td-sidebar__search d-flex align-items-center">
<button class="btn btn-link td-sidebar__toggle d-md-none p-0 ml-3 fas fa-bars" type=button data-toggle=collapse data-target=#td-section-nav aria-controls=td-docs-nav aria-expanded=false aria-label="Toggle section navigation">
</button>
</form>
</div>
<div id=content-desktop></div>
<nav class="collapse td-sidebar-nav" id=td-section-nav>
<ul class="td-sidebar-nav__section pr-md-3 ul-0">
<li class="td-sidebar-nav__section-title td-sidebar-nav__section with-child active-path" id=m-docs-li>
<a href=/docs/ title="AL Guidelines" class="align-left pl-0 td-sidebar-link td-sidebar-link__section tree-root" id=m-docs><span>Docs</span></a>
<ul class=ul-1>
<li class="td-sidebar-nav__section-title td-sidebar-nav__section with-child" id=m-docspatterns-li>
<a href=/docs/patterns/ class="align-left pl-0 td-sidebar-link td-sidebar-link__section" id=m-docspatterns><span>Patterns</span></a>
<ul class="ul-2 foldable">
<li class="td-sidebar-nav__section-title td-sidebar-nav__section without-child collapse" id=m-docspatternsevent-bridge-pattern-li>
<a href=/docs/patterns/event-bridge-pattern/ class="align-left pl-0 td-sidebar-link td-sidebar-link__page" id=m-docspatternsevent-bridge-pattern><span>Event Bridge</span></a>
</li><li class="td-sidebar-nav__section-title td-sidebar-nav__section without-child collapse" id=m-docspatternsfacade-pattern-li>
<a href=/docs/patterns/facade-pattern/ class="align-left pl-0 td-sidebar-link td-sidebar-link__page" id=m-docspatternsfacade-pattern><span>Façade</span></a>
</li><li class="td-sidebar-nav__section-title td-sidebar-nav__section without-child collapse" id=m-docspatternsgeneric-method-pattern-li>
<a href=/docs/patterns/generic-method-pattern/ class="align-left pl-0 td-sidebar-link td-sidebar-link__page" id=m-docspatternsgeneric-method-pattern><span>Generic Method</span></a>
</li>
</ul>
</li><li class="td-sidebar-nav__section-title td-sidebar-nav__section with-child" id=m-docsbestpractices-li>
<a href=/docs/bestpractices/ class="align-left pl-0 td-sidebar-link td-sidebar-link__section" id=m-docsbestpractices><span>Best Practices</span></a>
<ul class="ul-2 foldable">
<li class="td-sidebar-nav__section-title td-sidebar-nav__section without-child collapse" id=m-docsbestpracticesbegin-as-an-afterword-li>
<a href=/docs/bestpractices/begin-as-an-afterword/ class="align-left pl-0 td-sidebar-link td-sidebar-link__page" id=m-docsbestpracticesbegin-as-an-afterword><span>begin as an afterword</span></a>
</li><li class="td-sidebar-nav__section-title td-sidebar-nav__section without-child collapse" id=m-docsbestpracticesbegin-end-li>
<a href=/docs/bestpractices/begin-end/ class="align-left pl-0 td-sidebar-link td-sidebar-link__page" id=m-docsbestpracticesbegin-end><span>Begin-End - Compound Only</span></a>
</li><li class="td-sidebar-nav__section-title td-sidebar-nav__section without-child collapse" id=m-docsbestpracticesbinary-operator-line-start-li>
<a href=/docs/bestpractices/binary-operator-line-start/ class="align-left pl-0 td-sidebar-link td-sidebar-link__page" id=m-docsbestpracticesbinary-operator-line-start><span>Binary Operator to Start Line</span></a>
</li><li class="td-sidebar-nav__section-title td-sidebar-nav__section without-child collapse" id=m-docsbestpracticescase-actions-li>
<a href=/docs/bestpractices/case-actions/ class="align-left pl-0 td-sidebar-link td-sidebar-link__page" id=m-docsbestpracticescase-actions><span>CASE Action on next line</span></a>
</li><li class="td-sidebar-nav__section-title td-sidebar-nav__section without-child collapse" id=m-docsbestpracticescomments-spacing-li>
<a href=/docs/bestpractices/comments-spacing/ class="align-left pl-0 td-sidebar-link td-sidebar-link__page" id=m-docsbestpracticescomments-spacing><span>Comment Spacing</span></a>
</li><li class="td-sidebar-nav__section-title td-sidebar-nav__section without-child collapse" id=m-docsbestpracticesdeleteall-li>
<a href=/docs/bestpractices/deleteall/ class="align-left pl-0 td-sidebar-link td-sidebar-link__page" id=m-docsbestpracticesdeleteall><span>DeleteAll</span></a>
</li><li class="td-sidebar-nav__section-title td-sidebar-nav__section without-child collapse" id=m-docsbestpracticesend-else-pair-li>
<a href=/docs/bestpractices/end-else-pair/ class="align-left pl-0 td-sidebar-link td-sidebar-link__page" id=m-docsbestpracticesend-else-pair><span>end else pair</span></a>
</li><li class="td-sidebar-nav__section-title td-sidebar-nav__section without-child collapse" id=m-docsbestpracticeskeyword-pairs-indentation-li>
<a href=/docs/bestpractices/keyword-pairs-indentation/ class="align-left pl-0 td-sidebar-link td-sidebar-link__page" id=m-docsbestpracticeskeyword-pairs-indentation><span>Keyword Pairs - Indentation</span></a>
</li><li class="td-sidebar-nav__section-title td-sidebar-nav__section without-child collapse" id=m-docsbestpracticesline-start-keywords-li>
<a href=/docs/bestpractices/line-start-keywords/ class="align-left pl-0 td-sidebar-link td-sidebar-link__page" id=m-docsbestpracticesline-start-keywords><span>Line Start Keywords</span></a>
</li><li class="td-sidebar-nav__section-title td-sidebar-nav__section without-child collapse" id=m-docsbestpracticeslonely-repeat-li>
<a href=/docs/bestpractices/lonely-repeat/ class="align-left pl-0 td-sidebar-link td-sidebar-link__page" id=m-docsbestpracticeslonely-repeat><span>Lonely Repeat</span></a>
</li><li class="td-sidebar-nav__section-title td-sidebar-nav__section without-child collapse" id=m-docsbestpracticesnamed-invocations-li>
<a href=/docs/bestpractices/named-invocations/ class="align-left pl-0 td-sidebar-link td-sidebar-link__page" id=m-docsbestpracticesnamed-invocations><span>Named Invocations</span></a>
</li><li class="td-sidebar-nav__section-title td-sidebar-nav__section without-child collapse" id=m-docsbestpracticesone-statement-per-line-li>
<a href=/docs/bestpractices/one-statement-per-line/ class="align-left pl-0 td-sidebar-link td-sidebar-link__page" id=m-docsbestpracticesone-statement-per-line><span>One Statement per Line</span></a>
</li><li class="td-sidebar-nav__section-title td-sidebar-nav__section without-child collapse" id=m-docsbestpracticesseparate-if-and-else-li>
<a href=/docs/bestpractices/separate-if-and-else/ class="align-left pl-0 td-sidebar-link td-sidebar-link__page" id=m-docsbestpracticesseparate-if-and-else><span>Seperate if and else</span></a>
</li><li class="td-sidebar-nav__section-title td-sidebar-nav__section without-child collapse" id=m-docsbestpracticesspacing-binary-operators-li>
<a href=/docs/bestpractices/spacing-binary-operators/ class="align-left pl-0 td-sidebar-link td-sidebar-link__page" id=m-docsbestpracticesspacing-binary-operators><span>Spacing Binary Operators</span></a>
</li><li class="td-sidebar-nav__section-title td-sidebar-nav__section without-child collapse" id=m-docsbestpracticessubscribercodeunits-li>
<a href=/docs/bestpractices/subscribercodeunits/ class="align-left pl-0 td-sidebar-link td-sidebar-link__page" id=m-docsbestpracticessubscribercodeunits><span>Subscriber Codeunits</span></a>
</li><li class="td-sidebar-nav__section-title td-sidebar-nav__section without-child collapse" id=m-docsbestpracticessuggested-abbreviations-li>
<a href=/docs/bestpractices/suggested-abbreviations/ class="align-left pl-0 td-sidebar-link td-sidebar-link__page" id=m-docsbestpracticessuggested-abbreviations><span>Suggested Abbreviations</span></a>
</li><li class="td-sidebar-nav__section-title td-sidebar-nav__section without-child collapse" id=m-docsbestpracticesunnecessary-else-li>
<a href=/docs/bestpractices/unnecessary-else/ class="align-left pl-0 td-sidebar-link td-sidebar-link__page" id=m-docsbestpracticesunnecessary-else><span>Unnecessary else</span></a>
</li><li class="td-sidebar-nav__section-title td-sidebar-nav__section without-child collapse" id=m-docsbestpracticesunnecessary-truefalse-li>
<a href=/docs/bestpractices/unnecessary-truefalse/ class="align-left pl-0 td-sidebar-link td-sidebar-link__page" id=m-docsbestpracticesunnecessary-truefalse><span>Unnecessary true/false</span></a>
</li><li class="td-sidebar-nav__section-title td-sidebar-nav__section without-child collapse" id=m-docsbestpracticesvariable-naming-li>
<a href=/docs/bestpractices/variable-naming/ class="align-left pl-0 td-sidebar-link td-sidebar-link__page" id=m-docsbestpracticesvariable-naming><span>Variable Naming</span></a>
</li><li class="td-sidebar-nav__section-title td-sidebar-nav__section without-child collapse" id=m-docsbestpracticesvariables-declarations-order-li>
<a href=/docs/bestpractices/variables-declarations-order/ class="align-left pl-0 td-sidebar-link td-sidebar-link__page" id=m-docsbestpracticesvariables-declarations-order><span>Variables Declarations Order</span></a>
</li>
</ul>
</li><li class="td-sidebar-nav__section-title td-sidebar-nav__section with-child active-path" id=m-docsnavpatterns-li>
<a href=/docs/navpatterns/ class="align-left pl-0 td-sidebar-link td-sidebar-link__section" id=m-docsnavpatterns><span>NAV Patterns Archive</span></a>
<ul class="ul-2 foldable">
<li class="td-sidebar-nav__section-title td-sidebar-nav__section with-child active-path" id=m-docsnavpatternspatterns-li>
<a href=/docs/navpatterns/patterns/ class="align-left pl-0 td-sidebar-link td-sidebar-link__section" id=m-docsnavpatternspatterns><span>Patterns</span></a>
<ul class="ul-3 foldable">
<li class="td-sidebar-nav__section-title td-sidebar-nav__section without-child" id=m-docsnavpatternspatternsactivity-log-li>
<a href=/docs/navpatterns/patterns/activity-log/ class="align-left pl-0 td-sidebar-link td-sidebar-link__page" id=m-docsnavpatternspatternsactivity-log><span>Activity Logs</span></a>
</li><li class="td-sidebar-nav__section-title td-sidebar-nav__section without-child" id=m-docsnavpatternspatternsargument-table-li>
<a href=/docs/navpatterns/patterns/argument-table/ class="align-left pl-0 td-sidebar-link td-sidebar-link__page" id=m-docsnavpatternspatternsargument-table><span>Argument Table</span></a>
</li><li class="td-sidebar-nav__section-title td-sidebar-nav__section with-child" id=m-docsnavpatternspatternsblocked-entity-li>
<a href=/docs/navpatterns/patterns/blocked-entity/ class="align-left pl-0 td-sidebar-link td-sidebar-link__section" id=m-docsnavpatternspatternsblocked-entity><span>Blocked Entity</span></a>
<ul class="ul-4 foldable">
<li class="td-sidebar-nav__section-title td-sidebar-nav__section without-child collapse" id=m-docsnavpatternspatternsblocked-entitydata-driven-blocked-entity-li>
<a href=/docs/navpatterns/patterns/blocked-entity/data-driven-blocked-entity/ class="align-left pl-0 td-sidebar-link td-sidebar-link__page" id=m-docsnavpatternspatternsblocked-entitydata-driven-blocked-entity><span>Data Driven Blocked Entity</span></a>
</li>
</ul>
</li><li class="td-sidebar-nav__section-title td-sidebar-nav__section without-child" id=m-docsnavpatternspatternscached-web-service-calls-li>
<a href=/docs/navpatterns/patterns/cached-web-service-calls/ class="align-left pl-0 td-sidebar-link td-sidebar-link__page" id=m-docsnavpatternspatternscached-web-service-calls><span>Cached Web Server Calls</span></a>
</li><li class="td-sidebar-nav__section-title td-sidebar-nav__section without-child" id=m-docsnavpatternspatternsconditional-cascading-update-li>
<a href=/docs/navpatterns/patterns/conditional-cascading-update/ class="align-left pl-0 td-sidebar-link td-sidebar-link__page" id=m-docsnavpatternspatternsconditional-cascading-update><span>Conditional Cascading Update</span></a>
</li><li class="td-sidebar-nav__section-title td-sidebar-nav__section without-child" id=m-docsnavpatternspatternscopy-document-li>
<a href=/docs/navpatterns/patterns/copy-document/ class="align-left pl-0 td-sidebar-link td-sidebar-link__page" id=m-docsnavpatternspatternscopy-document><span>Copy Document</span></a>
</li><li class="td-sidebar-nav__section-title td-sidebar-nav__section without-child" id=m-docsnavpatternspatternscreate-data-from-templates-li>
<a href=/docs/navpatterns/patterns/create-data-from-templates/ class="align-left pl-0 td-sidebar-link td-sidebar-link__page" id=m-docsnavpatternspatternscreate-data-from-templates><span>Create Data from Templates</span></a>
</li><li class="td-sidebar-nav__section-title td-sidebar-nav__section without-child" id=m-docsnavpatternspatternscreate-urls-to-nav-clients-li>
<a href=/docs/navpatterns/patterns/create-urls-to-nav-clients/ class="align-left pl-0 td-sidebar-link td-sidebar-link__page" id=m-docsnavpatternspatternscreate-urls-to-nav-clients><span>Create URLs to NAV Clients</span></a>
</li><li class="td-sidebar-nav__section-title td-sidebar-nav__section without-child" id=m-docsnavpatternspatternscreating-custom-charts-li>
<a href=/docs/navpatterns/patterns/creating-custom-charts/ class="align-left pl-0 td-sidebar-link td-sidebar-link__page" id=m-docsnavpatternspatternscreating-custom-charts><span>Creating Custom Charts</span></a>
</li><li class="td-sidebar-nav__section-title td-sidebar-nav__section without-child" id=m-docsnavpatternspatternscross-session-events-li>
<a href=/docs/navpatterns/patterns/cross-session-events/ class="align-left pl-0 td-sidebar-link td-sidebar-link__page" id=m-docsnavpatternspatternscross-session-events><span>Cross Session Events</span></a>
</li><li class="td-sidebar-nav__section-title td-sidebar-nav__section without-child" id=m-docsnavpatternspatternscurrently-active-record-li>
<a href=/docs/navpatterns/patterns/currently-active-record/ class="align-left pl-0 td-sidebar-link td-sidebar-link__page" id=m-docsnavpatternspatternscurrently-active-record><span>Currently Active Record</span></a>
</li><li class="td-sidebar-nav__section-title td-sidebar-nav__section without-child" id=m-docsnavpatternspatternsdata-migration-facade-li>
<a href=/docs/navpatterns/patterns/data-migration-facade/ class="align-left pl-0 td-sidebar-link td-sidebar-link__page" id=m-docsnavpatternspatternsdata-migration-facade><span>Data Migration Façade</span></a>
</li><li class="td-sidebar-nav__section-title td-sidebar-nav__section without-child" id=m-docsnavpatternspatternsdiscovery-event-li>
<a href=/docs/navpatterns/patterns/discovery-event/ class="align-left pl-0 td-sidebar-link td-sidebar-link__page" id=m-docsnavpatternspatternsdiscovery-event><span>Discovery Event</span></a>
</li><li class="td-sidebar-nav__section-title td-sidebar-nav__section without-child" id=m-docsnavpatternspatternsdocument-li>
<a href=/docs/navpatterns/patterns/document/ class="align-left pl-0 td-sidebar-link td-sidebar-link__page" id=m-docsnavpatternspatternsdocument><span>Document</span></a>
</li><li class="td-sidebar-nav__section-title td-sidebar-nav__section without-child" id=m-docsnavpatternspatternseasy-update-of-setup-or-supplementary-information-li>
<a href=/docs/navpatterns/patterns/easy-update-of-setup-or-supplementary-information/ class="align-left pl-0 td-sidebar-link td-sidebar-link__page" id=m-docsnavpatternspatternseasy-update-of-setup-or-supplementary-information><span>Easy Update Of Setup Or Supplementary Information</span></a>
</li><li class="td-sidebar-nav__section-title td-sidebar-nav__section without-child" id=m-docsnavpatternspatternserror-message-processing-li>
<a href=/docs/navpatterns/patterns/error-message-processing/ class="align-left pl-0 td-sidebar-link td-sidebar-link__page" id=m-docsnavpatternspatternserror-message-processing><span>Error Message Processing</span></a>
</li><li class="td-sidebar-nav__section-title td-sidebar-nav__section without-child" id=m-docsnavpatternspatternsextending-the-role-center-headlines-li>
<a href=/docs/navpatterns/patterns/extending-the-role-center-headlines/ class="align-left pl-0 td-sidebar-link td-sidebar-link__page" id=m-docsnavpatternspatternsextending-the-role-center-headlines><span>Extending the Role Center Headlines</span></a>
</li><li class="td-sidebar-nav__section-title td-sidebar-nav__section without-child" id=m-docsnavpatternspatternsfeature-localization-for-data-structures-li>
<a href=/docs/navpatterns/patterns/feature-localization-for-data-structures/ class="align-left pl-0 td-sidebar-link td-sidebar-link__page" id=m-docsnavpatternspatternsfeature-localization-for-data-structures><span>Feature Localization For Data Structures</span></a>
</li><li class="td-sidebar-nav__section-title td-sidebar-nav__section without-child" id=m-docsnavpatternspatternshooks-li>
<a href=/docs/navpatterns/patterns/hooks/ class="align-left pl-0 td-sidebar-link td-sidebar-link__page" id=m-docsnavpatternspatternshooks><span>Hooks</span></a>
</li><li class="td-sidebar-nav__section-title td-sidebar-nav__section without-child" id=m-docsnavpatternspatternsimplementation-of-surrogate-keys-using-autoincrement-pattern-li>
<a href=/docs/navpatterns/patterns/implementation-of-surrogate-keys-using-autoincrement-pattern/ class="align-left pl-0 td-sidebar-link td-sidebar-link__page" id=m-docsnavpatternspatternsimplementation-of-surrogate-keys-using-autoincrement-pattern><span>Surrogate keys using Autoincrement Pattern</span></a>
</li><li class="td-sidebar-nav__section-title td-sidebar-nav__section without-child" id=m-docsnavpatternspatternsinstructions-in-the-ui-li>
<a href=/docs/navpatterns/patterns/instructions-in-the-ui/ class="align-left pl-0 td-sidebar-link td-sidebar-link__page" id=m-docsnavpatternspatternsinstructions-in-the-ui><span>Instructions in the UI</span></a>
</li><li class="td-sidebar-nav__section-title td-sidebar-nav__section without-child" id=m-docsnavpatternspatternsintegration-of-addresses-li>
<a href=/docs/navpatterns/patterns/integration-of-addresses/ class="align-left pl-0 td-sidebar-link td-sidebar-link__page" id=m-docsnavpatternspatternsintegration-of-addresses><span>Integration of Addresses</span></a>
</li><li class="td-sidebar-nav__section-title td-sidebar-nav__section without-child" id=m-docsnavpatternspatternsjournal-error-processing-li>
<a href=/docs/navpatterns/patterns/journal-error-processing/ class="align-left pl-0 td-sidebar-link td-sidebar-link__page" id=m-docsnavpatternspatternsjournal-error-processing><span>Journal Error Processing</span></a>
</li><li class="td-sidebar-nav__section-title td-sidebar-nav__section without-child" id=m-docsnavpatternspatternsjournal-template-batch-line-li>
<a href=/docs/navpatterns/patterns/journal-template-batch-line/ class="align-left pl-0 td-sidebar-link td-sidebar-link__page" id=m-docsnavpatternspatternsjournal-template-batch-line><span>Journal Template Batch Line</span></a>
</li><li class="td-sidebar-nav__section-title td-sidebar-nav__section without-child" id=m-docsnavpatternspatternsmaster-data-li>
<a href=/docs/navpatterns/patterns/master-data/ class="align-left pl-0 td-sidebar-link td-sidebar-link__page" id=m-docsnavpatternspatternsmaster-data><span>Master Data</span></a>
</li><li class="td-sidebar-nav__section-title td-sidebar-nav__section without-child" id=m-docsnavpatternspatternsmulti-file-download-li>
<a href=/docs/navpatterns/patterns/multi-file-download/ class="align-left pl-0 td-sidebar-link td-sidebar-link__page" id=m-docsnavpatternspatternsmulti-file-download><span>Multi-file Download</span></a>
</li><li class="td-sidebar-nav__section-title td-sidebar-nav__section without-child" id=m-docsnavpatternspatternsmulti-page-list-li>
<a href=/docs/navpatterns/patterns/multi-page-list/ class="align-left pl-0 td-sidebar-link td-sidebar-link__page" id=m-docsnavpatternspatternsmulti-page-list><span>Multi-Page List</span></a>
</li><li class="td-sidebar-nav__section-title td-sidebar-nav__section without-child" id=m-docsnavpatternspatternsmultilanguage-application-data-li>
<a href=/docs/navpatterns/patterns/multilanguage-application-data/ class="align-left pl-0 td-sidebar-link td-sidebar-link__page" id=m-docsnavpatternspatternsmultilanguage-application-data><span>Multilanguage Application Data</span></a>
</li><li class="td-sidebar-nav__section-title td-sidebar-nav__section with-child" id=m-docsnavpatternspatternsnet-exception-handling-in-cal-li>
<a href=/docs/navpatterns/patterns/net-exception-handling-in-cal/ class="align-left pl-0 td-sidebar-link td-sidebar-link__section" id=m-docsnavpatternspatternsnet-exception-handling-in-cal><span>NET Exception Handling in CAL</span></a>
<ul class="ul-4 foldable">
<li class="td-sidebar-nav__section-title td-sidebar-nav__section without-child collapse" id=m-docsnavpatternspatternsnet-exception-handling-in-caltryfunction-net-exception-handling-in-cal-li>
<a href=/docs/navpatterns/patterns/net-exception-handling-in-cal/tryfunction-net-exception-handling-in-cal/ class="align-left pl-0 td-sidebar-link td-sidebar-link__page" id=m-docsnavpatternspatternsnet-exception-handling-in-caltryfunction-net-exception-handling-in-cal><span>TryFunction NET Exception Handling in CAL</span></a>
</li>
</ul>
</li><li class="td-sidebar-nav__section-title td-sidebar-nav__section without-child" id=m-docsnavpatternspatternsno-series-li>
<a href=/docs/navpatterns/patterns/no-series/ class="align-left pl-0 td-sidebar-link td-sidebar-link__page" id=m-docsnavpatternspatternsno-series><span>No Series</span></a>
</li><li class="td-sidebar-nav__section-title td-sidebar-nav__section with-child" id=m-docsnavpatternspatternsnotifications-li>
<a href=/docs/navpatterns/patterns/notifications/ class="align-left pl-0 td-sidebar-link td-sidebar-link__section" id=m-docsnavpatternspatternsnotifications><span>Notifications</span></a>
<ul class="ul-4 foldable">
<li class="td-sidebar-nav__section-title td-sidebar-nav__section without-child collapse" id=m-docsnavpatternspatternsnotificationsin-context-notifications-li>
<a href=/docs/navpatterns/patterns/notifications/in-context-notifications/ class="align-left pl-0 td-sidebar-link td-sidebar-link__page" id=m-docsnavpatternspatternsnotificationsin-context-notifications><span>In-context Notifications</span></a>
</li><li class="td-sidebar-nav__section-title td-sidebar-nav__section without-child collapse" id=m-docsnavpatternspatternsnotificationsnotification-lifecycle-management-pattern-li>
<a href=/docs/navpatterns/patterns/notifications/notification-lifecycle-management-pattern/ class="align-left pl-0 td-sidebar-link td-sidebar-link__page" id=m-docsnavpatternspatternsnotificationsnotification-lifecycle-management-pattern><span>Notification Lifecycle Management Pattern</span></a>
</li>
</ul>
</li><li class="td-sidebar-nav__section-title td-sidebar-nav__section without-child" id=m-docsnavpatternspatternsobserver-li>
<a href=/docs/navpatterns/patterns/observer/ class="align-left pl-0 td-sidebar-link td-sidebar-link__page" id=m-docsnavpatternspatternsobserver><span>Observer</span></a>
</li><li class="td-sidebar-nav__section-title td-sidebar-nav__section without-child" id=m-docsnavpatternspatternsposting-routine-select-behavior-li>
<a href=/docs/navpatterns/patterns/posting-routine-select-behavior/ class="align-left pl-0 td-sidebar-link td-sidebar-link__page" id=m-docsnavpatternspatternsposting-routine-select-behavior><span>Posting Routine - Select Behavior</span></a>
</li><li class="td-sidebar-nav__section-title td-sidebar-nav__section without-child" id=m-docsnavpatternspatternsproduct-name-li>
<a href=/docs/navpatterns/patterns/product-name/ class="align-left pl-0 td-sidebar-link td-sidebar-link__page" id=m-docsnavpatternspatternsproduct-name><span>Product Name</span></a>
</li><li class="td-sidebar-nav__section-title td-sidebar-nav__section with-child active-path" id=m-docsnavpatternspatternsqueries-li>
<a href=/docs/navpatterns/patterns/queries/ class="align-left pl-0 td-sidebar-link td-sidebar-link__section" id=m-docsnavpatternspatternsqueries><span>Queries</span></a>
<ul class="ul-4 foldable">
<li class="td-sidebar-nav__section-title td-sidebar-nav__section without-child" id=m-docsnavpatternspatternsqueriesselect-distinct-with-queries-li>
<a href=/docs/navpatterns/patterns/queries/select-distinct-with-queries/ class="align-left pl-0 td-sidebar-link td-sidebar-link__page" id=m-docsnavpatternspatternsqueriesselect-distinct-with-queries><span>SELECT DISTINCT with Queries</span></a>
</li><li class="td-sidebar-nav__section-title td-sidebar-nav__section without-child active-path" id=m-docsnavpatternspatternsqueriesuse-queries-to-detect-duplicate-records-li>
<a href=/docs/navpatterns/patterns/queries/use-queries-to-detect-duplicate-records/ class="align-left pl-0 active td-sidebar-link td-sidebar-link__page" id=m-docsnavpatternspatternsqueriesuse-queries-to-detect-duplicate-records><span class=td-sidebar-nav-active-item>Use Queries to Detect Duplicate Records</span></a>
</li><li class="td-sidebar-nav__section-title td-sidebar-nav__section without-child" id=m-docsnavpatternspatternsqueriesuse-queries-to-replace-nested-loops-li>
<a href=/docs/navpatterns/patterns/queries/use-queries-to-replace-nested-loops/ class="align-left pl-0 td-sidebar-link td-sidebar-link__page" id=m-docsnavpatternspatternsqueriesuse-queries-to-replace-nested-loops><span>Use Queries to Replace Nested Loops</span></a>
</li>
</ul>
</li><li class="td-sidebar-nav__section-title td-sidebar-nav__section without-child" id=m-docsnavpatternspatternsread-once-initialization-and-validation-li>
<a href=/docs/navpatterns/patterns/read-once-initialization-and-validation/ class="align-left pl-0 td-sidebar-link td-sidebar-link__page" id=m-docsnavpatternspatternsread-once-initialization-and-validation><span>Read-once Initialization and Validation</span></a>
</li><li class="td-sidebar-nav__section-title td-sidebar-nav__section without-child" id=m-docsnavpatternspatternsreleased-entity-li>
<a href=/docs/navpatterns/patterns/released-entity/ class="align-left pl-0 td-sidebar-link td-sidebar-link__page" id=m-docsnavpatternspatternsreleased-entity><span>Released Entity</span></a>
</li><li class="td-sidebar-nav__section-title td-sidebar-nav__section without-child" id=m-docsnavpatternspatternsreport-selection-li>
<a href=/docs/navpatterns/patterns/report-selection/ class="align-left pl-0 td-sidebar-link td-sidebar-link__page" id=m-docsnavpatternspatternsreport-selection><span>Report Selection</span></a>
</li><li class="td-sidebar-nav__section-title td-sidebar-nav__section with-child" id=m-docsnavpatternspatternssecurity-li>
<a href=/docs/navpatterns/patterns/security/ class="align-left pl-0 td-sidebar-link td-sidebar-link__section" id=m-docsnavpatternspatternssecurity><span>Security</span></a>
<ul class="ul-4 foldable">
<li class="td-sidebar-nav__section-title td-sidebar-nav__section without-child collapse" id=m-docsnavpatternspatternssecurity1-sensitive-data-encapsulation-li>
<a href=/docs/navpatterns/patterns/security/1-sensitive-data-encapsulation/ class="align-left pl-0 td-sidebar-link td-sidebar-link__page" id=m-docsnavpatternspatternssecurity1-sensitive-data-encapsulation><span>Sensitive Data Encapsulation</span></a>
</li><li class="td-sidebar-nav__section-title td-sidebar-nav__section without-child collapse" id=m-docsnavpatternspatternssecurity2-data-encryption-li>
<a href=/docs/navpatterns/patterns/security/2-data-encryption/ class="align-left pl-0 td-sidebar-link td-sidebar-link__page" id=m-docsnavpatternspatternssecurity2-data-encryption><span>Data Encryption</span></a>
</li><li class="td-sidebar-nav__section-title td-sidebar-nav__section without-child collapse" id=m-docsnavpatternspatternssecurity3-single-point-of-access-li>
<a href=/docs/navpatterns/patterns/security/3-single-point-of-access/ class="align-left pl-0 td-sidebar-link td-sidebar-link__page" id=m-docsnavpatternspatternssecurity3-single-point-of-access><span>Single Point of Access</span></a>
</li><li class="td-sidebar-nav__section-title td-sidebar-nav__section without-child collapse" id=m-docsnavpatternspatternssecurity4-masked-text-li>
<a href=/docs/navpatterns/patterns/security/4-masked-text/ class="align-left pl-0 td-sidebar-link td-sidebar-link__page" id=m-docsnavpatternspatternssecurity4-masked-text><span>Masked Text</span></a>
</li><li class="td-sidebar-nav__section-title td-sidebar-nav__section without-child collapse" id=m-docsnavpatternspatternssecurity5-ssl-in-nav-li>
<a href=/docs/navpatterns/patterns/security/5-ssl-in-nav/ class="align-left pl-0 td-sidebar-link td-sidebar-link__page" id=m-docsnavpatternspatternssecurity5-ssl-in-nav><span>SSL in NAV</span></a>
</li>
</ul>
</li><li class="td-sidebar-nav__section-title td-sidebar-nav__section without-child" id=m-docsnavpatternspatternssetup-specificity-fallback-li>
<a href=/docs/navpatterns/patterns/setup-specificity-fallback/ class="align-left pl-0 td-sidebar-link td-sidebar-link__page" id=m-docsnavpatternspatternssetup-specificity-fallback><span>Setup Specificity Fallback</span></a>
</li><li class="td-sidebar-nav__section-title td-sidebar-nav__section without-child" id=m-docsnavpatternspatternssilent-file-upload-and-download-li>
<a href=/docs/navpatterns/patterns/silent-file-upload-and-download/ class="align-left pl-0 td-sidebar-link td-sidebar-link__page" id=m-docsnavpatternspatternssilent-file-upload-and-download><span>Silent File Upload and Download</span></a>
</li><li class="td-sidebar-nav__section-title td-sidebar-nav__section with-child" id=m-docsnavpatternspatternssingleton-li>
<a href=/docs/navpatterns/patterns/singleton/ class="align-left pl-0 td-sidebar-link td-sidebar-link__section" id=m-docsnavpatternspatternssingleton><span>Singleton</span></a>
<ul class="ul-4 foldable">
<li class="td-sidebar-nav__section-title td-sidebar-nav__section without-child collapse" id=m-docsnavpatternspatternssingletonsingleton-codeunit-li>
<a href=/docs/navpatterns/patterns/singleton/singleton-codeunit/ class="align-left pl-0 td-sidebar-link td-sidebar-link__page" id=m-docsnavpatternspatternssingletonsingleton-codeunit><span>Singleton Codeunit</span></a>
</li><li class="td-sidebar-nav__section-title td-sidebar-nav__section with-child collapse" id=m-docsnavpatternspatternssingletonsingleton-table-li>
<a href=/docs/navpatterns/patterns/singleton/singleton-table/ class="align-left pl-0 td-sidebar-link td-sidebar-link__section" id=m-docsnavpatternspatternssingletonsingleton-table><span>Singleton Table</span></a>
<ul class="ul-5 foldable">
<li class="td-sidebar-nav__section-title td-sidebar-nav__section without-child collapse" id=m-docsnavpatternspatternssingletonsingleton-tablecue-table-li>
<a href=/docs/navpatterns/patterns/singleton/singleton-table/cue-table/ class="align-left pl-0 td-sidebar-link td-sidebar-link__page" id=m-docsnavpatternspatternssingletonsingleton-tablecue-table><span>Cue Table</span></a>
</li><li class="td-sidebar-nav__section-title td-sidebar-nav__section without-child collapse" id=m-docsnavpatternspatternssingletonsingleton-tablesetup-table-li>
<a href=/docs/navpatterns/patterns/singleton/singleton-table/setup-table/ class="align-left pl-0 td-sidebar-link td-sidebar-link__page" id=m-docsnavpatternspatternssingletonsingleton-tablesetup-table><span>Setup Table</span></a>
</li>
</ul>
</li>
</ul>
</li><li class="td-sidebar-nav__section-title td-sidebar-nav__section without-child" id=m-docsnavpatternspatternsstandard-journal-li>
<a href=/docs/navpatterns/patterns/standard-journal/ class="align-left pl-0 td-sidebar-link td-sidebar-link__page" id=m-docsnavpatternspatternsstandard-journal><span>Standard Journal</span></a>
</li><li class="td-sidebar-nav__section-title td-sidebar-nav__section without-child" id=m-docsnavpatternspatternstemporary-dataset-report-li>
<a href=/docs/navpatterns/patterns/temporary-dataset-report/ class="align-left pl-0 td-sidebar-link td-sidebar-link__page" id=m-docsnavpatternspatternstemporary-dataset-report><span>Temporary Dataset Report</span></a>
</li><li class="td-sidebar-nav__section-title td-sidebar-nav__section without-child" id=m-docsnavpatternspatternstotals-and-discounts-on-subpages-sales-and-purchases-li>
<a href=/docs/navpatterns/patterns/totals-and-discounts-on-subpages-sales-and-purchases/ class="align-left pl-0 td-sidebar-link td-sidebar-link__page" id=m-docsnavpatternspatternstotals-and-discounts-on-subpages-sales-and-purchases><span>Totals and Discounts on Subpages Sales and Purchases</span></a>
</li><li class="td-sidebar-nav__section-title td-sidebar-nav__section without-child" id=m-docsnavpatternspatternstransfer-custom-fields-li>
<a href=/docs/navpatterns/patterns/transfer-custom-fields/ class="align-left pl-0 td-sidebar-link td-sidebar-link__page" id=m-docsnavpatternspatternstransfer-custom-fields><span>Transfer Custom Fields</span></a>
</li><li class="td-sidebar-nav__section-title td-sidebar-nav__section without-child" id=m-docsnavpatternspatternsvariant-facade-li>
<a href=/docs/navpatterns/patterns/variant-facade/ class="align-left pl-0 td-sidebar-link td-sidebar-link__page" id=m-docsnavpatternspatternsvariant-facade><span>Variant Facade</span></a>
</li>
</ul>
</li><li class="td-sidebar-nav__section-title td-sidebar-nav__section with-child" id=m-docsnavpatterns2-anti-patterns-li>
<a href=/docs/navpatterns/2-anti-patterns/ class="align-left pl-0 td-sidebar-link td-sidebar-link__section" id=m-docsnavpatterns2-anti-patterns><span>2. Anti-Patterns</span></a>
<ul class="ul-3 foldable">
<li class="td-sidebar-nav__section-title td-sidebar-nav__section without-child collapse" id=m-docsnavpatterns2-anti-patternsnav-upgrade-li>
<a href=/docs/navpatterns/2-anti-patterns/nav-upgrade/ class="align-left pl-0 td-sidebar-link td-sidebar-link__page" id=m-docsnavpatterns2-anti-patternsnav-upgrade><span>Nav Upgrade</span></a>
</li><li class="td-sidebar-nav__section-title td-sidebar-nav__section without-child collapse" id=m-docsnavpatterns2-anti-patternsreusable-bugs-li>
<a href=/docs/navpatterns/2-anti-patterns/reusable-bugs/ class="align-left pl-0 td-sidebar-link td-sidebar-link__page" id=m-docsnavpatterns2-anti-patternsreusable-bugs><span>Reusable Bugs</span></a>
</li>
</ul>
</li><li class="td-sidebar-nav__section-title td-sidebar-nav__section with-child" id=m-docsnavpatterns3-cal-coding-guidelines-li>
<a href=/docs/navpatterns/3-cal-coding-guidelines/ class="align-left pl-0 td-sidebar-link td-sidebar-link__section" id=m-docsnavpatterns3-cal-coding-guidelines><span>3. CAL Coding Guidelines</span></a>
<ul class="ul-3 foldable">
<li class="td-sidebar-nav__section-title td-sidebar-nav__section with-child collapse" id=m-docsnavpatterns3-cal-coding-guidelinesdesign-li>
<a href=/docs/navpatterns/3-cal-coding-guidelines/design/ class="align-left pl-0 td-sidebar-link td-sidebar-link__section" id=m-docsnavpatterns3-cal-coding-guidelinesdesign><span>Design</span></a>
<ul class="ul-4 foldable">
<li class="td-sidebar-nav__section-title td-sidebar-nav__section without-child collapse" id=m-docsnavpatterns3-cal-coding-guidelinesdesignby-reference-parameters-li>
<a href=/docs/navpatterns/3-cal-coding-guidelines/design/by-reference-parameters/ class="align-left pl-0 td-sidebar-link td-sidebar-link__page" id=m-docsnavpatterns3-cal-coding-guidelinesdesignby-reference-parameters><span>By Reference Parameters</span></a>
</li><li class="td-sidebar-nav__section-title td-sidebar-nav__section without-child collapse" id=m-docsnavpatterns3-cal-coding-guidelinesdesignclass-coupling-li>
<a href=/docs/navpatterns/3-cal-coding-guidelines/design/class-coupling/ class="align-left pl-0 td-sidebar-link td-sidebar-link__page" id=m-docsnavpatterns3-cal-coding-guidelinesdesignclass-coupling><span>Class Coupling</span></a>
</li><li class="td-sidebar-nav__section-title td-sidebar-nav__section without-child collapse" id=m-docsnavpatterns3-cal-coding-guidelinesdesigncyclomatic-complexity-li>
<a href=/docs/navpatterns/3-cal-coding-guidelines/design/cyclomatic-complexity/ class="align-left pl-0 td-sidebar-link td-sidebar-link__page" id=m-docsnavpatterns3-cal-coding-guidelinesdesigncyclomatic-complexity><span>Cyclomatic Complexity</span></a>
</li><li class="td-sidebar-nav__section-title td-sidebar-nav__section without-child collapse" id=m-docsnavpatterns3-cal-coding-guidelinesdesignencapsulate-local-functionality-li>
<a href=/docs/navpatterns/3-cal-coding-guidelines/design/encapsulate-local-functionality/ class="align-left pl-0 td-sidebar-link td-sidebar-link__page" id=m-docsnavpatterns3-cal-coding-guidelinesdesignencapsulate-local-functionality><span>Encapsulate Local Functionality</span></a>
</li><li class="td-sidebar-nav__section-title td-sidebar-nav__section without-child collapse" id=m-docsnavpatterns3-cal-coding-guidelinesdesignfindset-findfirst-findlast-li>
<a href=/docs/navpatterns/3-cal-coding-guidelines/design/findset-findfirst-findlast/ class="align-left pl-0 td-sidebar-link td-sidebar-link__page" id=m-docsnavpatterns3-cal-coding-guidelinesdesignfindset-findfirst-findlast><span>FINDSET FINDFIRST FINDLAST</span></a>
</li><li class="td-sidebar-nav__section-title td-sidebar-nav__section without-child collapse" id=m-docsnavpatterns3-cal-coding-guidelinesdesigninitialized-variables-li>
<a href=/docs/navpatterns/3-cal-coding-guidelines/design/initialized-variables/ class="align-left pl-0 td-sidebar-link td-sidebar-link__page" id=m-docsnavpatterns3-cal-coding-guidelinesdesigninitialized-variables><span>Initialized Variables</span></a>
</li><li class="td-sidebar-nav__section-title td-sidebar-nav__section without-child collapse" id=m-docsnavpatterns3-cal-coding-guidelinesdesignmaintainability-index-li>
<a href=/docs/navpatterns/3-cal-coding-guidelines/design/maintainability-index/ class="align-left pl-0 td-sidebar-link td-sidebar-link__page" id=m-docsnavpatterns3-cal-coding-guidelinesdesignmaintainability-index><span>Maintainability Index</span></a>
</li><li class="td-sidebar-nav__section-title td-sidebar-nav__section without-child collapse" id=m-docsnavpatterns3-cal-coding-guidelinesdesignparameter-placeholders-li>
<a href=/docs/navpatterns/3-cal-coding-guidelines/design/parameter-placeholders/ class="align-left pl-0 td-sidebar-link td-sidebar-link__page" id=m-docsnavpatterns3-cal-coding-guidelinesdesignparameter-placeholders><span>Parameter Placeholders</span></a>
</li><li class="td-sidebar-nav__section-title td-sidebar-nav__section without-child collapse" id=m-docsnavpatterns3-cal-coding-guidelinesdesignstatic-object-invocation-li>
<a href=/docs/navpatterns/3-cal-coding-guidelines/design/static-object-invocation/ class="align-left pl-0 td-sidebar-link td-sidebar-link__page" id=m-docsnavpatterns3-cal-coding-guidelinesdesignstatic-object-invocation><span>Static Object Invocation</span></a>
</li><li class="td-sidebar-nav__section-title td-sidebar-nav__section without-child collapse" id=m-docsnavpatterns3-cal-coding-guidelinesdesignunreachable-code-li>
<a href=/docs/navpatterns/3-cal-coding-guidelines/design/unreachable-code/ class="align-left pl-0 td-sidebar-link td-sidebar-link__page" id=m-docsnavpatterns3-cal-coding-guidelinesdesignunreachable-code><span>Unreachable Code</span></a>
</li><li class="td-sidebar-nav__section-title td-sidebar-nav__section without-child collapse" id=m-docsnavpatterns3-cal-coding-guidelinesdesignunused-initialized-variables-li>
<a href=/docs/navpatterns/3-cal-coding-guidelines/design/unused-initialized-variables/ class="align-left pl-0 td-sidebar-link td-sidebar-link__page" id=m-docsnavpatterns3-cal-coding-guidelinesdesignunused-initialized-variables><span>Unused Initialized Variables</span></a>
</li><li class="td-sidebar-nav__section-title td-sidebar-nav__section without-child collapse" id=m-docsnavpatterns3-cal-coding-guidelinesdesignunused-variables-li>
<a href=/docs/navpatterns/3-cal-coding-guidelines/design/unused-variables/ class="align-left pl-0 td-sidebar-link td-sidebar-link__page" id=m-docsnavpatterns3-cal-coding-guidelinesdesignunused-variables><span>Unused Variables</span></a>
</li><li class="td-sidebar-nav__section-title td-sidebar-nav__section without-child collapse" id=m-docsnavpatterns3-cal-coding-guidelinesdesignvariable-capacity-mismatch-li>
<a href=/docs/navpatterns/3-cal-coding-guidelines/design/variable-capacity-mismatch/ class="align-left pl-0 td-sidebar-link td-sidebar-link__page" id=m-docsnavpatterns3-cal-coding-guidelinesdesignvariable-capacity-mismatch><span>Variable Capacity Mismatch</span></a>
</li><li class="td-sidebar-nav__section-title td-sidebar-nav__section without-child collapse" id=m-docsnavpatterns3-cal-coding-guidelinesdesignwith-scope-name-collision-li>
<a href=/docs/navpatterns/3-cal-coding-guidelines/design/with-scope-name-collision/ class="align-left pl-0 td-sidebar-link td-sidebar-link__page" id=m-docsnavpatterns3-cal-coding-guidelinesdesignwith-scope-name-collision><span>WITH Scope Name Collision</span></a>
</li>
</ul>
</li><li class="td-sidebar-nav__section-title td-sidebar-nav__section without-child collapse" id=m-docsnavpatterns3-cal-coding-guidelinesinternally-used-dot-net-types-li>
<a href=/docs/navpatterns/3-cal-coding-guidelines/internally-used-dot-net-types/ class="align-left pl-0 td-sidebar-link td-sidebar-link__page" id=m-docsnavpatterns3-cal-coding-guidelinesinternally-used-dot-net-types><span>Internally used DotNet Types</span></a>
</li><li class="td-sidebar-nav__section-title td-sidebar-nav__section with-child collapse" id=m-docsnavpatterns3-cal-coding-guidelinesinternationalization-li>
<a href=/docs/navpatterns/3-cal-coding-guidelines/internationalization/ class="align-left pl-0 td-sidebar-link td-sidebar-link__section" id=m-docsnavpatterns3-cal-coding-guidelinesinternationalization><span>Internationalization</span></a>
<ul class="ul-4 foldable">
<li class="td-sidebar-nav__section-title td-sidebar-nav__section without-child collapse" id=m-docsnavpatterns3-cal-coding-guidelinesinternationalizationusing-calcdate-li>
<a href=/docs/navpatterns/3-cal-coding-guidelines/internationalization/using-calcdate/ class="align-left pl-0 td-sidebar-link td-sidebar-link__page" id=m-docsnavpatterns3-cal-coding-guidelinesinternationalizationusing-calcdate><span>Using Calcdate</span></a>
</li>
</ul>
</li><li class="td-sidebar-nav__section-title td-sidebar-nav__section with-child collapse" id=m-docsnavpatterns3-cal-coding-guidelineslocalizability-li>
<a href=/docs/navpatterns/3-cal-coding-guidelines/localizability/ class="align-left pl-0 td-sidebar-link td-sidebar-link__section" id=m-docsnavpatterns3-cal-coding-guidelineslocalizability><span>Localizability</span></a>
<ul class="ul-4 foldable">
<li class="td-sidebar-nav__section-title td-sidebar-nav__section without-child collapse" id=m-docsnavpatterns3-cal-coding-guidelineslocalizabilitycaptionml-for-system-tables-li>
<a href=/docs/navpatterns/3-cal-coding-guidelines/localizability/captionml-for-system-tables/ class="align-left pl-0 td-sidebar-link td-sidebar-link__page" id=m-docsnavpatterns3-cal-coding-guidelineslocalizabilitycaptionml-for-system-tables><span>CaptionML on System Pages</span></a>
</li><li class="td-sidebar-nav__section-title td-sidebar-nav__section without-child collapse" id=m-docsnavpatterns3-cal-coding-guidelineslocalizabilityfieldcaption-and-tablecaption-li>
<a href=/docs/navpatterns/3-cal-coding-guidelines/localizability/fieldcaption-and-tablecaption/ class="align-left pl-0 td-sidebar-link td-sidebar-link__page" id=m-docsnavpatterns3-cal-coding-guidelineslocalizabilityfieldcaption-and-tablecaption><span>FIELDCAPTION and TABLECAPTION</span></a>
</li><li class="td-sidebar-nav__section-title td-sidebar-nav__section without-child collapse" id=m-docsnavpatterns3-cal-coding-guidelineslocalizabilityglobal-text-constants-li>
<a href=/docs/navpatterns/3-cal-coding-guidelines/localizability/global-text-constants/ class="align-left pl-0 td-sidebar-link td-sidebar-link__page" id=m-docsnavpatterns3-cal-coding-guidelineslocalizabilityglobal-text-constants><span>Global Text Constants</span></a>
</li><li class="td-sidebar-nav__section-title td-sidebar-nav__section without-child collapse" id=m-docsnavpatterns3-cal-coding-guidelineslocalizabilityuse-text-constants-li>
<a href=/docs/navpatterns/3-cal-coding-guidelines/localizability/use-text-constants/ class="align-left pl-0 td-sidebar-link td-sidebar-link__page" id=m-docsnavpatterns3-cal-coding-guidelineslocalizabilityuse-text-constants><span>Use Text Constants</span></a>
</li><li class="td-sidebar-nav__section-title td-sidebar-nav__section without-child collapse" id=m-docsnavpatterns3-cal-coding-guidelineslocalizabilityusing-optioncaptionml-li>
<a href=/docs/navpatterns/3-cal-coding-guidelines/localizability/using-optioncaptionml/ class="align-left pl-0 td-sidebar-link td-sidebar-link__page" id=m-docsnavpatterns3-cal-coding-guidelineslocalizabilityusing-optioncaptionml><span>Using OptionCaptionML</span></a>
</li>
</ul>
</li><li class="td-sidebar-nav__section-title td-sidebar-nav__section with-child collapse" id=m-docsnavpatterns3-cal-coding-guidelinesreadability-li>
<a href=/docs/navpatterns/3-cal-coding-guidelines/readability/ class="align-left pl-0 td-sidebar-link td-sidebar-link__section" id=m-docsnavpatterns3-cal-coding-guidelinesreadability><span>Readability</span></a>
<ul class="ul-4 foldable">
<li class="td-sidebar-nav__section-title td-sidebar-nav__section without-child collapse" id=m-docsnavpatterns3-cal-coding-guidelinesreadabilitybegin-as-an-afterword-li>
<a href=/docs/navpatterns/3-cal-coding-guidelines/readability/begin-as-an-afterword/ class="align-left pl-0 td-sidebar-link td-sidebar-link__page" id=m-docsnavpatterns3-cal-coding-guidelinesreadabilitybegin-as-an-afterword><span>Begin as an 'After Word'</span></a>
</li><li class="td-sidebar-nav__section-title td-sidebar-nav__section without-child collapse" id=m-docsnavpatterns3-cal-coding-guidelinesreadabilitybegin-end-li>
<a href=/docs/navpatterns/3-cal-coding-guidelines/readability/begin-end/ class="align-left pl-0 td-sidebar-link td-sidebar-link__page" id=m-docsnavpatterns3-cal-coding-guidelinesreadabilitybegin-end><span>Begin-End - Compound Only</span></a>
</li><li class="td-sidebar-nav__section-title td-sidebar-nav__section without-child collapse" id=m-docsnavpatterns3-cal-coding-guidelinesreadabilitybinary-operator-line-start-li>
<a href=/docs/navpatterns/3-cal-coding-guidelines/readability/binary-operator-line-start/ class="align-left pl-0 td-sidebar-link td-sidebar-link__page" id=m-docsnavpatterns3-cal-coding-guidelinesreadabilitybinary-operator-line-start><span>Binary Operator to Start Line</span></a>
</li><li class="td-sidebar-nav__section-title td-sidebar-nav__section without-child collapse" id=m-docsnavpatterns3-cal-coding-guidelinesreadabilityblank-lines-li>
<a href=/docs/navpatterns/3-cal-coding-guidelines/readability/blank-lines/ class="align-left pl-0 td-sidebar-link td-sidebar-link__page" id=m-docsnavpatterns3-cal-coding-guidelinesreadabilityblank-lines><span>Blank Lines</span></a>
</li><li class="td-sidebar-nav__section-title td-sidebar-nav__section without-child collapse" id=m-docsnavpatterns3-cal-coding-guidelinesreadabilitycase-actions-li>
<a href=/docs/navpatterns/3-cal-coding-guidelines/readability/case-actions/ class="align-left pl-0 td-sidebar-link td-sidebar-link__page" id=m-docsnavpatterns3-cal-coding-guidelinesreadabilitycase-actions><span>CASE Action</span></a>
</li><li class="td-sidebar-nav__section-title td-sidebar-nav__section without-child collapse" id=m-docsnavpatterns3-cal-coding-guidelinesreadabilitycolon-usage-in-case-li>
<a href=/docs/navpatterns/3-cal-coding-guidelines/readability/colon-usage-in-case/ class="align-left pl-0 td-sidebar-link td-sidebar-link__page" id=m-docsnavpatterns3-cal-coding-guidelinesreadabilitycolon-usage-in-case><span>Colon usage in CASE</span></a>
</li><li class="td-sidebar-nav__section-title td-sidebar-nav__section without-child collapse" id=m-docsnavpatterns3-cal-coding-guidelinesreadabilitycomments-curly-brackets-li>
<a href=/docs/navpatterns/3-cal-coding-guidelines/readability/comments-curly-brackets/ class="align-left pl-0 td-sidebar-link td-sidebar-link__page" id=m-docsnavpatterns3-cal-coding-guidelinesreadabilitycomments-curly-brackets><span>Comments inside Curly Brackets</span></a>
</li><li class="td-sidebar-nav__section-title td-sidebar-nav__section without-child collapse" id=m-docsnavpatterns3-cal-coding-guidelinesreadabilitycomments-spacing-li>
<a href=/docs/navpatterns/3-cal-coding-guidelines/readability/comments-spacing/ class="align-left pl-0 td-sidebar-link td-sidebar-link__page" id=m-docsnavpatterns3-cal-coding-guidelinesreadabilitycomments-spacing><span>Comment Spacing</span></a>
</li><li class="td-sidebar-nav__section-title td-sidebar-nav__section without-child collapse" id=m-docsnavpatterns3-cal-coding-guidelinesreadabilityend-else-pair-li>
<a href=/docs/navpatterns/3-cal-coding-guidelines/readability/end-else-pair/ class="align-left pl-0 td-sidebar-link td-sidebar-link__page" id=m-docsnavpatterns3-cal-coding-guidelinesreadabilityend-else-pair><span>END ELSE Pair</span></a>
</li><li class="td-sidebar-nav__section-title td-sidebar-nav__section without-child collapse" id=m-docsnavpatterns3-cal-coding-guidelinesreadabilityindentation-li>
<a href=/docs/navpatterns/3-cal-coding-guidelines/readability/indentation/ class="align-left pl-0 td-sidebar-link td-sidebar-link__page" id=m-docsnavpatterns3-cal-coding-guidelinesreadabilityindentation><span>Indentation</span></a>
</li><li class="td-sidebar-nav__section-title td-sidebar-nav__section without-child collapse" id=m-docsnavpatterns3-cal-coding-guidelinesreadabilitykeyword-pairs-indentation-li>
<a href=/docs/navpatterns/3-cal-coding-guidelines/readability/keyword-pairs-indentation/ class="align-left pl-0 td-sidebar-link td-sidebar-link__page" id=m-docsnavpatterns3-cal-coding-guidelinesreadabilitykeyword-pairs-indentation><span>Keyword Pairs - Indentation</span></a>
</li><li class="td-sidebar-nav__section-title td-sidebar-nav__section without-child collapse" id=m-docsnavpatterns3-cal-coding-guidelinesreadabilityline-start-keywords-li>
<a href=/docs/navpatterns/3-cal-coding-guidelines/readability/line-start-keywords/ class="align-left pl-0 td-sidebar-link td-sidebar-link__page" id=m-docsnavpatterns3-cal-coding-guidelinesreadabilityline-start-keywords><span>Line Start Keywords</span></a>
</li><li class="td-sidebar-nav__section-title td-sidebar-nav__section without-child collapse" id=m-docsnavpatterns3-cal-coding-guidelinesreadabilitylonely-repeat-li>
<a href=/docs/navpatterns/3-cal-coding-guidelines/readability/lonely-repeat/ class="align-left pl-0 td-sidebar-link td-sidebar-link__page" id=m-docsnavpatterns3-cal-coding-guidelinesreadabilitylonely-repeat><span>Lonely Repeat</span></a>
</li><li class="td-sidebar-nav__section-title td-sidebar-nav__section without-child collapse" id=m-docsnavpatterns3-cal-coding-guidelinesreadabilitynamed-invocations-li>
<a href=/docs/navpatterns/3-cal-coding-guidelines/readability/named-invocations/ class="align-left pl-0 td-sidebar-link td-sidebar-link__page" id=m-docsnavpatterns3-cal-coding-guidelinesreadabilitynamed-invocations><span>Named Invocations</span></a>
</li><li class="td-sidebar-nav__section-title td-sidebar-nav__section without-child collapse" id=m-docsnavpatterns3-cal-coding-guidelinesreadabilitynested-withs-li>
<a href=/docs/navpatterns/3-cal-coding-guidelines/readability/nested-withs/ class="align-left pl-0 td-sidebar-link td-sidebar-link__page" id=m-docsnavpatterns3-cal-coding-guidelinesreadabilitynested-withs><span>Nested WITHs</span></a>
</li><li class="td-sidebar-nav__section-title td-sidebar-nav__section without-child collapse" id=m-docsnavpatterns3-cal-coding-guidelinesreadabilityone-statement-per-line-li>
<a href=/docs/navpatterns/3-cal-coding-guidelines/readability/one-statement-per-line/ class="align-left pl-0 td-sidebar-link td-sidebar-link__page" id=m-docsnavpatterns3-cal-coding-guidelinesreadabilityone-statement-per-line><span>One Statement Per Line</span></a>
</li><li class="td-sidebar-nav__section-title td-sidebar-nav__section without-child collapse" id=m-docsnavpatterns3-cal-coding-guidelinesreadabilityseparate-if-and-else-li>
<a href=/docs/navpatterns/3-cal-coding-guidelines/readability/separate-if-and-else/ class="align-left pl-0 td-sidebar-link td-sidebar-link__page" id=m-docsnavpatterns3-cal-coding-guidelinesreadabilityseparate-if-and-else><span>Separate IF and ELSE</span></a>
</li><li class="td-sidebar-nav__section-title td-sidebar-nav__section without-child collapse" id=m-docsnavpatterns3-cal-coding-guidelinesreadabilityspacing-binary-operators-li>
<a href=/docs/navpatterns/3-cal-coding-guidelines/readability/spacing-binary-operators/ class="align-left pl-0 td-sidebar-link td-sidebar-link__page" id=m-docsnavpatterns3-cal-coding-guidelinesreadabilityspacing-binary-operators><span>Spacing Binary Operators</span></a>
</li><li class="td-sidebar-nav__section-title td-sidebar-nav__section without-child collapse" id=m-docsnavpatterns3-cal-coding-guidelinesreadabilityspacing-brackets-and-li>
<a href=/docs/navpatterns/3-cal-coding-guidelines/readability/spacing-brackets-and/ class="align-left pl-0 td-sidebar-link td-sidebar-link__page" id=m-docsnavpatterns3-cal-coding-guidelinesreadabilityspacing-brackets-and><span>Spacing Brackets and ::</span></a>
</li><li class="td-sidebar-nav__section-title td-sidebar-nav__section without-child collapse" id=m-docsnavpatterns3-cal-coding-guidelinesreadabilityspacing-unary-operators-li>
<a href=/docs/navpatterns/3-cal-coding-guidelines/readability/spacing-unary-operators/ class="align-left pl-0 td-sidebar-link td-sidebar-link__page" id=m-docsnavpatterns3-cal-coding-guidelinesreadabilityspacing-unary-operators><span>Spacing Unary Operators</span></a>
</li><li class="td-sidebar-nav__section-title td-sidebar-nav__section without-child collapse" id=m-docsnavpatterns3-cal-coding-guidelinesreadabilitysuggested-abbreviations-li>
<a href=/docs/navpatterns/3-cal-coding-guidelines/readability/suggested-abbreviations/ class="align-left pl-0 td-sidebar-link td-sidebar-link__page" id=m-docsnavpatterns3-cal-coding-guidelinesreadabilitysuggested-abbreviations><span>Suggested Abbreviations</span></a>
</li><li class="td-sidebar-nav__section-title td-sidebar-nav__section without-child collapse" id=m-docsnavpatterns3-cal-coding-guidelinesreadabilitytemporary-variable-naming-li>
<a href=/docs/navpatterns/3-cal-coding-guidelines/readability/temporary-variable-naming/ class="align-left pl-0 td-sidebar-link td-sidebar-link__page" id=m-docsnavpatterns3-cal-coding-guidelinesreadabilitytemporary-variable-naming><span>Temporary Variable Naming</span></a>
</li><li class="td-sidebar-nav__section-title td-sidebar-nav__section without-child collapse" id=m-docsnavpatterns3-cal-coding-guidelinesreadabilitytextconst-suffixes-li>
<a href=/docs/navpatterns/3-cal-coding-guidelines/readability/textconst-suffixes/ class="align-left pl-0 td-sidebar-link td-sidebar-link__page" id=m-docsnavpatterns3-cal-coding-guidelinesreadabilitytextconst-suffixes><span>TextConst Suffixes</span></a>
</li><li class="td-sidebar-nav__section-title td-sidebar-nav__section without-child collapse" id=m-docsnavpatterns3-cal-coding-guidelinesreadabilityunary-operator-line-end-li>
<a href=/docs/navpatterns/3-cal-coding-guidelines/readability/unary-operator-line-end/ class="align-left pl-0 td-sidebar-link td-sidebar-link__page" id=m-docsnavpatterns3-cal-coding-guidelinesreadabilityunary-operator-line-end><span>Unary Operator Line End</span></a>
</li><li class="td-sidebar-nav__section-title td-sidebar-nav__section without-child collapse" id=m-docsnavpatterns3-cal-coding-guidelinesreadabilityunnecessary-compound-parenthesis-li>
<a href=/docs/navpatterns/3-cal-coding-guidelines/readability/unnecessary-compound-parenthesis/ class="align-left pl-0 td-sidebar-link td-sidebar-link__page" id=m-docsnavpatterns3-cal-coding-guidelinesreadabilityunnecessary-compound-parenthesis><span>Unnecessary Compound Parenthesis</span></a>
</li><li class="td-sidebar-nav__section-title td-sidebar-nav__section without-child collapse" id=m-docsnavpatterns3-cal-coding-guidelinesreadabilityunnecessary-else-li>
<a href=/docs/navpatterns/3-cal-coding-guidelines/readability/unnecessary-else/ class="align-left pl-0 td-sidebar-link td-sidebar-link__page" id=m-docsnavpatterns3-cal-coding-guidelinesreadabilityunnecessary-else><span>Unnecessary ELSE</span></a>
</li><li class="td-sidebar-nav__section-title td-sidebar-nav__section without-child collapse" id=m-docsnavpatterns3-cal-coding-guidelinesreadabilityunnecessary-function-parenthesis-li>
<a href=/docs/navpatterns/3-cal-coding-guidelines/readability/unnecessary-function-parenthesis/ class="align-left pl-0 td-sidebar-link td-sidebar-link__page" id=m-docsnavpatterns3-cal-coding-guidelinesreadabilityunnecessary-function-parenthesis><span>Unnecessary Function Parenthesis</span></a>
</li><li class="td-sidebar-nav__section-title td-sidebar-nav__section without-child collapse" id=m-docsnavpatterns3-cal-coding-guidelinesreadabilityunnecessary-separators-li>
<a href=/docs/navpatterns/3-cal-coding-guidelines/readability/unnecessary-separators/ class="align-left pl-0 td-sidebar-link td-sidebar-link__page" id=m-docsnavpatterns3-cal-coding-guidelinesreadabilityunnecessary-separators><span>Unnecessary Separators</span></a>
</li><li class="td-sidebar-nav__section-title td-sidebar-nav__section without-child collapse" id=m-docsnavpatterns3-cal-coding-guidelinesreadabilityunnecessary-truefalse-li>
<a href=/docs/navpatterns/3-cal-coding-guidelines/readability/unnecessary-truefalse/ class="align-left pl-0 td-sidebar-link td-sidebar-link__page" id=m-docsnavpatterns3-cal-coding-guidelinesreadabilityunnecessary-truefalse><span>Unnecessary TRUE/FALSE</span></a>
</li><li class="td-sidebar-nav__section-title td-sidebar-nav__section without-child collapse" id=m-docsnavpatterns3-cal-coding-guidelinesreadabilityvariable-already-scoped-li>
<a href=/docs/navpatterns/3-cal-coding-guidelines/readability/variable-already-scoped/ class="align-left pl-0 td-sidebar-link td-sidebar-link__page" id=m-docsnavpatterns3-cal-coding-guidelinesreadabilityvariable-already-scoped><span>Variable Already Scoped</span></a>
</li><li class="td-sidebar-nav__section-title td-sidebar-nav__section without-child collapse" id=m-docsnavpatterns3-cal-coding-guidelinesreadabilityvariable-naming-li>
<a href=/docs/navpatterns/3-cal-coding-guidelines/readability/variable-naming/ class="align-left pl-0 td-sidebar-link td-sidebar-link__page" id=m-docsnavpatterns3-cal-coding-guidelinesreadabilityvariable-naming><span>Variable Naming</span></a>
</li><li class="td-sidebar-nav__section-title td-sidebar-nav__section without-child collapse" id=m-docsnavpatterns3-cal-coding-guidelinesreadabilityvariables-declarations-order-li>
<a href=/docs/navpatterns/3-cal-coding-guidelines/readability/variables-declarations-order/ class="align-left pl-0 td-sidebar-link td-sidebar-link__page" id=m-docsnavpatterns3-cal-coding-guidelinesreadabilityvariables-declarations-order><span>Variables Declarations Order</span></a>
</li>
</ul>
</li><li class="td-sidebar-nav__section-title td-sidebar-nav__section with-child collapse" id=m-docsnavpatterns3-cal-coding-guidelinesux-li>
<a href=/docs/navpatterns/3-cal-coding-guidelines/ux/ class="align-left pl-0 td-sidebar-link td-sidebar-link__section" id=m-docsnavpatterns3-cal-coding-guidelinesux><span>UX</span></a>
<ul class="ul-4 foldable">
<li class="td-sidebar-nav__section-title td-sidebar-nav__section without-child collapse" id=m-docsnavpatterns3-cal-coding-guidelinesuxactions-images-li>
<a href=/docs/navpatterns/3-cal-coding-guidelines/ux/actions-images/ class="align-left pl-0 td-sidebar-link td-sidebar-link__page" id=m-docsnavpatterns3-cal-coding-guidelinesuxactions-images><span>Actions - Images</span></a>
</li><li class="td-sidebar-nav__section-title td-sidebar-nav__section without-child collapse" id=m-docsnavpatterns3-cal-coding-guidelinesuxconfirm-li>
<a href=/docs/navpatterns/3-cal-coding-guidelines/ux/confirm/ class="align-left pl-0 td-sidebar-link td-sidebar-link__page" id=m-docsnavpatterns3-cal-coding-guidelinesuxconfirm><span>CONFIRM</span></a>
</li><li class="td-sidebar-nav__section-title td-sidebar-nav__section without-child collapse" id=m-docsnavpatterns3-cal-coding-guidelinesuxfielderror-li>
<a href=/docs/navpatterns/3-cal-coding-guidelines/ux/fielderror/ class="align-left pl-0 td-sidebar-link td-sidebar-link__page" id=m-docsnavpatterns3-cal-coding-guidelinesuxfielderror><span>FIELDERROR</span></a>
</li><li class="td-sidebar-nav__section-title td-sidebar-nav__section without-child collapse" id=m-docsnavpatterns3-cal-coding-guidelinesuxmessage-and-error-li>
<a href=/docs/navpatterns/3-cal-coding-guidelines/ux/message-and-error/ class="align-left pl-0 td-sidebar-link td-sidebar-link__page" id=m-docsnavpatterns3-cal-coding-guidelinesuxmessage-and-error><span>MESSAGE and ERROR</span></a>
</li>
</ul>
</li>
</ul>
</li><li class="td-sidebar-nav__section-title td-sidebar-nav__section with-child" id=m-docsnavpatterns4-get-involved-li>
<a href=/docs/navpatterns/4-get-involved/ class="align-left pl-0 td-sidebar-link td-sidebar-link__section" id=m-docsnavpatterns4-get-involved><span>(OLD) Get Involved</span></a>
<ul class="ul-3 foldable">
<li class="td-sidebar-nav__section-title td-sidebar-nav__section without-child collapse" id=m-docsnavpatterns4-get-involvedcode-of-conduct-li>
<a href=/docs/navpatterns/4-get-involved/code-of-conduct/ class="align-left pl-0 td-sidebar-link td-sidebar-link__page" id=m-docsnavpatterns4-get-involvedcode-of-conduct><span>Code of Conduct</span></a>
</li><li class="td-sidebar-nav__section-title td-sidebar-nav__section without-child collapse" id=m-docsnavpatterns4-get-involvedpatterns-authors-li>
<a href=/docs/navpatterns/4-get-involved/patterns-authors/ class="align-left pl-0 td-sidebar-link td-sidebar-link__page" id=m-docsnavpatterns4-get-involvedpatterns-authors><span>Patterns Authors</span></a>
</li><li class="td-sidebar-nav__section-title td-sidebar-nav__section without-child collapse" id=m-docsnavpatterns4-get-involvedtemplate-for-writing-nav-design-patterns-li>
<a href=/docs/navpatterns/4-get-involved/template-for-writing-nav-design-patterns/ class="align-left pl-0 td-sidebar-link td-sidebar-link__page" id=m-docsnavpatterns4-get-involvedtemplate-for-writing-nav-design-patterns><span>Template for writing Nav Design Patterns</span></a>
</li>
</ul>
</li><li class="td-sidebar-nav__section-title td-sidebar-nav__section without-child" id=m-docsnavpatternsrelated-links-li>
<a href=/docs/navpatterns/related-links/ class="align-left pl-0 td-sidebar-link td-sidebar-link__page" id=m-docsnavpatternsrelated-links><span>Related Links</span></a>
</li>
</ul>
</li><li class="td-sidebar-nav__section-title td-sidebar-nav__section with-child" id=m-docscontributing-li>
<a href=/docs/contributing/ class="align-left pl-0 td-sidebar-link td-sidebar-link__section" id=m-docscontributing><span>Contributing</span></a>
<ul class="ul-2 foldable">
<li class="td-sidebar-nav__section-title td-sidebar-nav__section without-child collapse" id=m-docscontributingformattingtips-li>
<a href=/docs/contributing/formattingtips/ class="align-left pl-0 td-sidebar-link td-sidebar-link__page" id=m-docscontributingformattingtips><span>Formatting tips</span></a>
</li><li class="td-sidebar-nav__section-title td-sidebar-nav__section without-child collapse" id=m-docscontributingforkandpr-li>
<a href=/docs/contributing/forkandpr/ class="align-left pl-0 td-sidebar-link td-sidebar-link__page" id=m-docscontributingforkandpr><span>Guide to Fork & PR</span></a>
</li><li class="td-sidebar-nav__section-title td-sidebar-nav__section with-child collapse" id=m-docscontributingtemplates-li>
<a href=/docs/contributing/templates/ class="align-left pl-0 td-sidebar-link td-sidebar-link__section" id=m-docscontributingtemplates><span>Templates</span></a>
<ul class="ul-3 foldable">
<li class="td-sidebar-nav__section-title td-sidebar-nav__section without-child collapse" id=m-docscontributingtemplatesguidelines-li>
<a href=/docs/contributing/templates/guidelines/ class="align-left pl-0 td-sidebar-link td-sidebar-link__page" id=m-docscontributingtemplatesguidelines><span>Title of the Guideline</span></a>
</li><li class="td-sidebar-nav__section-title td-sidebar-nav__section without-child collapse" id=m-docscontributingtemplatespatterns-li>
<a href=/docs/contributing/templates/patterns/ class="align-left pl-0 td-sidebar-link td-sidebar-link__page" id=m-docscontributingtemplatespatterns><span>Title of the pattern</span></a>
</li>
</ul>
</li><li class="td-sidebar-nav__section-title td-sidebar-nav__section without-child collapse" id=m-docscontributingtheapprovalprocess-li>
<a href=/docs/contributing/theapprovalprocess/ class="align-left pl-0 td-sidebar-link td-sidebar-link__page" id=m-docscontributingtheapprovalprocess><span>Understanding the Approval Process</span></a>
</li>
</ul>
</li>
</ul>
</li>
</ul>
</nav>
</div>
</aside>
<aside class="d-none d-xl-block col-xl-2 td-sidebar-toc d-print-none">
<div class="td-page-meta ml-2 pb-1 pt-2 mb-0">
<a href=https://github.com/microsoft/alguidelines/tree/master/content/en/docs/NAVPatterns/patterns/queries/use-queries-to-detect-duplicate-records/index.md class=td-page-meta--view target=_blank rel=noopener><i class="fa fa-file-alt fa-fw"></i> View page source</a>
<a href=https://github.com/microsoft/alguidelines/edit/master/content/en/docs/NAVPatterns/patterns/queries/use-queries-to-detect-duplicate-records/index.md class=td-page-meta--edit target=_blank rel=noopener><i class="fa fa-edit fa-fw"></i> Edit this page</a>
<a href="https://github.com/microsoft/alguidelines/new/master/content/en/docs/NAVPatterns/patterns/queries/use-queries-to-detect-duplicate-records/index.md?filename=change-me.md&value=---%0Atitle%3A+%22Long+Page+Title%22%0AlinkTitle%3A+%22Short+Nav+Title%22%0Aweight%3A+100%0Adescription%3A+%3E-%0A+++++Page+description+for+heading+and+indexes.%0A---%0A%0A%23%23+Heading%0A%0AEdit+this+template+to+create+your+new+page.%0A%0A%2A+Give+it+a+good+name%2C+ending+in+%60.md%60+-+e.g.+%60getting-started.md%60%0A%2A+Edit+the+%22front+matter%22+section+at+the+top+of+the+page+%28weight+controls+how+its+ordered+amongst+other+pages+in+the+same+directory%3B+lowest+number+first%29.%0A%2A+Add+a+good+commit+message+at+the+bottom+of+the+page+%28%3C80+characters%3B+use+the+extended+description+field+for+more+detail%29.%0A%2A+Create+a+new+branch+so+you+can+preview+your+new+file+and+request+a+review+via+Pull+Request.%0A" class=td-page-meta--child target=_blank rel=noopener><i class="fa fa-edit fa-fw"></i> Create child page</a>
<a href="https://github.com/microsoft/alguidelines/issues/new?title=Use%20Queries%20to%20Detect%20Duplicate%20Records" class=td-page-meta--issue target=_blank rel=noopener><i class="fab fa-github fa-fw"></i> Create documentation issue</a>
<a href=https://github.com/microsoft/alguidelines/issues/new class=td-page-meta--project-issue target=_blank rel=noopener><i class="fas fa-tasks fa-fw"></i> Create project issue</a>
</div>
<div class=td-toc><nav id=TableOfContents>
<ul>
<li><a href=#abstract>Abstract</a></li>
<li><a href=#description>Description</a></li>
<li><a href=#usage>Usage</a>
<ul>
<li></li>
</ul>
</li>
<li><a href=#consequences><strong>Consequences</strong></a></li>
</ul>
</nav></div>
<div class="taxonomy taxonomy-terms-cloud taxo-tags">
<h5 class=taxonomy-title>Tag Cloud</h5>
<ul class=taxonomy-terms>
<li><a class=taxonomy-term href=https://alguidelines.dev/tags/c/al/ data-taxonomy-term=c/al><span class=taxonomy-label>C/AL</span><span class=taxonomy-count>1</span></a></li>
<li><a class=taxonomy-term href=https://alguidelines.dev/tags/interface/ data-taxonomy-term=interface><span class=taxonomy-label>Interface</span><span class=taxonomy-count>1</span></a></li>
<li><a class=taxonomy-term href=https://alguidelines.dev/tags/nav/ data-taxonomy-term=nav><span class=taxonomy-label>NAV</span><span class=taxonomy-count>1</span></a></li>
<li><a class=taxonomy-term href=https://alguidelines.dev/tags/performance/ data-taxonomy-term=performance><span class=taxonomy-label>Performance</span><span class=taxonomy-count>2</span></a></li>
<li><a class=taxonomy-term href=https://alguidelines.dev/tags/readability/ data-taxonomy-term=readability><span class=taxonomy-label>Readability</span><span class=taxonomy-count>18</span></a></li>
</ul>
</div>
<div class="taxonomy taxonomy-terms-cloud taxo-categories">
<h5 class=taxonomy-title>Categories</h5>
<ul class=taxonomy-terms>
<li><a class=taxonomy-term href=https://alguidelines.dev/categories/archived-pattern/ data-taxonomy-term=archived-pattern><span class=taxonomy-label>Archived Pattern</span><span class=taxonomy-count>1</span></a></li>
<li><a class=taxonomy-term href=https://alguidelines.dev/categories/best-practice/ data-taxonomy-term=best-practice><span class=taxonomy-label>Best Practice</span><span class=taxonomy-count>20</span></a></li>
<li><a class=taxonomy-term href=https://alguidelines.dev/categories/pattern/ data-taxonomy-term=pattern><span class=taxonomy-label>Pattern</span><span class=taxonomy-count>3</span></a></li>
</ul>
</div>
</aside>
<main class="col-12 col-md-9 col-xl-8 pl-md-5" role=main>
<nav aria-label=breadcrumb class=td-breadcrumbs>
<ol class=breadcrumb>
<li class=breadcrumb-item>
<a href=https://alguidelines.dev/docs/>Docs</a>
</li>
<li class=breadcrumb-item>
<a href=https://alguidelines.dev/docs/navpatterns/>NAV Patterns Archive</a>
</li>
<li class=breadcrumb-item>
<a href=https://alguidelines.dev/docs/navpatterns/patterns/>Patterns</a>
</li>
<li class=breadcrumb-item>
<a href=https://alguidelines.dev/docs/navpatterns/patterns/queries/>Queries</a>
</li>
<li class="breadcrumb-item active" aria-current=page>
<a href=https://alguidelines.dev/docs/navpatterns/patterns/queries/use-queries-to-detect-duplicate-records/>Use Queries to Detect Duplicate Records</a>
</li>
</ol>
</nav>
<div class=td-content>
<h1>Use Queries to Detect Duplicate Records</h1>
<header class=article-meta>
</header>
<p><em>Originally by Abshishek Ghosh and Bogdan Sturzoiu at Microsoft Development Center Copenhagen</em></p>
<h2 id=abstract>Abstract</h2>
<p>This pattern uses queries to create an efficient way to detect duplicate entries in a table. This is, for example, useful when trying to find out which customers or contacts have the same names, so we can merge them later.</p>
<h2 id=description>Description</h2>
<p>Duplicate detection has several requirements in Microsoft Dynamics NAV. One method to eliminate duplication is by defining the relevant field as the primary key. However, this method is not always practical either due to the size of the field or due to business requirements that dictate how duplicates are detected but not necessarily how they are eliminated. An example of this method is to detect contacts with the same name and take action to merge them if they are.</p>
<p>Before Dynamics NAV 2013, the only possibility was to iterate through the table in a loop and then create a sub-loop where another instance of the same table is filtered to check for duplicates. For example, to check for duplicate names in the Customer table, the code would look like this:</p>
<div class=highlight><pre tabindex=0 style=background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4><code class=language-al data-lang=al><span style=color:#204a87;font-weight:700>PROCEDURE</span><span style=color:#f8f8f8;text-decoration:underline> </span>HasDuplicateCustomers@<span style=color:#0000cf;font-weight:700>26</span><span style=color:#ce5c00;font-weight:700>() </span><span style=color:#000;font-weight:700>:</span><span style=color:#f8f8f8;text-decoration:underline> </span><span style=color:#204a87;font-weight:700>Boolean</span><span style=color:#000;font-weight:700>;</span><span style=color:#f8f8f8;text-decoration:underline>
</span><span style=color:#f8f8f8;text-decoration:underline></span><span style=color:#204a87;font-weight:700>VAR</span><span style=color:#f8f8f8;text-decoration:underline>
</span><span style=color:#f8f8f8;text-decoration:underline> </span>Customer@<span style=color:#0000cf;font-weight:700>1000</span><span style=color:#f8f8f8;text-decoration:underline> </span><span style=color:#000;font-weight:700>:</span><span style=color:#f8f8f8;text-decoration:underline> </span><span style=color:#204a87;font-weight:700>Record</span><span style=color:#f8f8f8;text-decoration:underline> </span><span style=color:#0000cf;font-weight:700>18</span><span style=color:#000;font-weight:700>;</span><span style=color:#f8f8f8;text-decoration:underline>
</span><span style=color:#f8f8f8;text-decoration:underline> </span>Customer2@<span style=color:#0000cf;font-weight:700>1001</span><span style=color:#f8f8f8;text-decoration:underline> </span><span style=color:#000;font-weight:700>:</span><span style=color:#f8f8f8;text-decoration:underline> </span><span style=color:#204a87;font-weight:700>Record</span><span style=color:#f8f8f8;text-decoration:underline> </span><span style=color:#0000cf;font-weight:700>18</span><span style=color:#000;font-weight:700>;</span><span style=color:#f8f8f8;text-decoration:underline>
</span><span style=color:#f8f8f8;text-decoration:underline></span><span style=color:#204a87;font-weight:700>BEGIN</span><span style=color:#f8f8f8;text-decoration:underline>
</span><span style=color:#f8f8f8;text-decoration:underline> </span><span style=color:#204a87;font-weight:700>IF</span><span style=color:#f8f8f8;text-decoration:underline> </span>Customer<span style=color:#ce5c00;font-weight:700>.</span>FINDSET<span style=color:#f8f8f8;text-decoration:underline> </span><span style=color:#204a87;font-weight:700>THEN</span><span style=color:#f8f8f8;text-decoration:underline>
</span><span style=color:#f8f8f8;text-decoration:underline> </span><span style=color:#204a87;font-weight:700>REPEAT</span><span style=color:#f8f8f8;text-decoration:underline>
</span><span style=color:#f8f8f8;text-decoration:underline> </span>Customer2<span style=color:#ce5c00;font-weight:700>.</span>SETRANGE<span style=color:#ce5c00;font-weight:700>(</span>Name<span style=color:#000;font-weight:700>,</span>Customer<span style=color:#ce5c00;font-weight:700>.</span>Name<span style=color:#ce5c00;font-weight:700>)</span><span style=color:#000;font-weight:700>;</span><span style=color:#f8f8f8;text-decoration:underline>
</span><span style=color:#f8f8f8;text-decoration:underline> </span><span style=color:#204a87;font-weight:700>IF</span><span style=color:#f8f8f8;text-decoration:underline> </span>Customer2<span style=color:#ce5c00;font-weight:700>.</span><span style=color:#204a87;font-weight:700>COUNT</span><span style=color:#f8f8f8;text-decoration:underline> </span>\&gt;<span style=color:#f8f8f8;text-decoration:underline> </span><span style=color:#0000cf;font-weight:700>1</span><span style=color:#f8f8f8;text-decoration:underline> </span><span style=color:#204a87;font-weight:700>THEN</span><span style=color:#f8f8f8;text-decoration:underline>
</span><span style=color:#f8f8f8;text-decoration:underline> </span><span style=color:#204a87;font-weight:700>EXIT</span><span style=color:#ce5c00;font-weight:700>(</span>TRUE<span style=color:#ce5c00;font-weight:700>)</span><span style=color:#000;font-weight:700>;</span><span style=color:#f8f8f8;text-decoration:underline>
</span><span style=color:#f8f8f8;text-decoration:underline> </span><span style=color:#204a87;font-weight:700>UNTIL</span><span style=color:#f8f8f8;text-decoration:underline> </span>Customer<span style=color:#ce5c00;font-weight:700>.</span>NEXT<span style=color:#f8f8f8;text-decoration:underline> </span>=<span style=color:#f8f8f8;text-decoration:underline> </span><span style=color:#0000cf;font-weight:700>0</span><span style=color:#000;font-weight:700>;</span><span style=color:#f8f8f8;text-decoration:underline>
</span><span style=color:#f8f8f8;text-decoration:underline> </span><span style=color:#204a87;font-weight:700>EXIT</span><span style=color:#ce5c00;font-weight:700>(</span>FALSE<span style=color:#ce5c00;font-weight:700>)</span><span style=color:#000;font-weight:700>;</span><span style=color:#f8f8f8;text-decoration:underline>
</span><span style=color:#f8f8f8;text-decoration:underline></span><span style=color:#204a87;font-weight:700>END</span><span style=color:#000;font-weight:700>;</span><span style=color:#f8f8f8;text-decoration:underline>
</span></code></pre></div><p>This code would involve setting filters on the <strong>Customer</strong> table as many times as there are records in the table. This is an expensive operation.</p>
<p>Starting with Dynamics NAV 2013, we can use queries to create a more efficient implementation of the same logic.</p>
<h2 id=usage>Usage</h2>
<p>The solution involves that you create a query to return duplicates, and then invoke it from a method that would test the value of the query to identify if duplicates were found.</p>
<p><strong>Step 1</strong> &ndash; <strong>Creating the Query</strong></p>
<ul>
<li>The query must be created with the table we want to search in as the dataitem.</li>
<li>The field we want to search for must be created as a grouped field.</li>
<li>Create a totaling field on the count, and add a filter for Count > 1. This ensures that only records with more than one instance of the field that we selected in the previous step are included in the query result.</li>
</ul>
<p>Continuing with our Customer Name example, here is how the query would look:</p>
<p><a href=clip_5F00_image002.jpg><img src=clip_5F00_image002.jpg alt=" "></a></p>
<h4 id=heading></h4>
<pre><code>ELEMENTS
{
{ 1 ; ;DataItem; ;
DataItemTable=Table18 }
{ 2 ;1 ;Column ; ;
DataSource=Name }
{ 3 ;1 ;Column ; ;
ColumnFilter=Count_=FILTER(\&gt;1);
MethodType=Totals;
Method=Count }
}
</code></pre>
<p><strong>Step 2 &ndash; Invoking the Query to Check for Duplicates</strong></p>
<p>Now that the query is created, all we need to do is to invoke the query and check if any records are returned, which would mean that there are duplicates.</p>
<p>Here is an alternate implementation of the <strong>HasDuplicateCustomers</strong> method using the query that we created:</p>
<div class=highlight><pre tabindex=0 style=background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4><code class=language-al data-lang=al><span style=color:#204a87;font-weight:700>PROCEDURE</span><span style=color:#f8f8f8;text-decoration:underline> </span>HasDuplicateCustomersWithQuery@<span style=color:#0000cf;font-weight:700>27</span><span style=color:#ce5c00;font-weight:700>() </span><span style=color:#000;font-weight:700>:</span><span style=color:#f8f8f8;text-decoration:underline> </span><span style=color:#204a87;font-weight:700>Boolean</span><span style=color:#000;font-weight:700>;</span><span style=color:#f8f8f8;text-decoration:underline>
</span><span style=color:#f8f8f8;text-decoration:underline></span><span style=color:#204a87;font-weight:700>VAR</span><span style=color:#f8f8f8;text-decoration:underline>
</span><span style=color:#f8f8f8;text-decoration:underline> </span>CustomerDuplicate@<span style=color:#0000cf;font-weight:700>1000</span><span style=color:#f8f8f8;text-decoration:underline> </span><span style=color:#000;font-weight:700>:</span><span style=color:#f8f8f8;text-decoration:underline> </span><span style=color:#204a87;font-weight:700>Query</span><span style=color:#f8f8f8;text-decoration:underline> </span><span style=color:#0000cf;font-weight:700>70000</span><span style=color:#000;font-weight:700>;</span><span style=color:#f8f8f8;text-decoration:underline>
</span><span style=color:#f8f8f8;text-decoration:underline></span><span style=color:#204a87;font-weight:700>BEGIN</span><span style=color:#f8f8f8;text-decoration:underline>
</span><span style=color:#f8f8f8;text-decoration:underline> </span>CustomerDuplicate<span style=color:#ce5c00;font-weight:700>.</span>OPEN<span style=color:#000;font-weight:700>;</span><span style=color:#f8f8f8;text-decoration:underline>
</span><span style=color:#f8f8f8;text-decoration:underline> </span><span style=color:#204a87;font-weight:700>EXIT</span><span style=color:#ce5c00;font-weight:700>(</span>CustomerDuplicate<span style=color:#ce5c00;font-weight:700>.</span>READ<span style=color:#ce5c00;font-weight:700>)</span><span style=color:#000;font-weight:700>;</span><span style=color:#f8f8f8;text-decoration:underline>
</span><span style=color:#f8f8f8;text-decoration:underline></span><span style=color:#204a87;font-weight:700>END</span><span style=color:#000;font-weight:700>;</span><span style=color:#f8f8f8;text-decoration:underline>
</span></code></pre></div><p><strong>Examples</strong></p>
<ul>
<li><strong>Acc. Sched. Chart Management</strong> codeunit (762),<br>
methods CheckDuplicateAccScheduleLineDescription and CheckDuplicateColumnLayoutColumnHeader</li>
<li><strong>Analysis Report Chart Mgt.</strong> codeunit (770),<br>
methods CheckDuplicateAnalysisLineDescription and CheckDuplicateAnalysisColumnHeader</li>
</ul>
<h2 id=consequences><strong>Consequences</strong></h2>
<p>A new query object is needed for every type of duplicate check. This could easily explode and create a maintenance problem.</p>
<div class="text-muted mt-5 pt-3 border-top">
Last modified February 20, 2022: <a href=https://github.com/microsoft/alguidelines/commit/cceb0c945e0383599f497350ca254d5755edda65>Restructure for Docsy theme (cceb0c94)</a>
</div>
</div>
</main>
</div>
</div>
<footer class="bg-dark py-5 row d-print-none">
<div class="container-fluid mx-sm-5">
<div class=row>
<div class="col-6 col-sm-4 text-xs-center order-sm-2">
<ul class="list-inline mb-0">
<li class="list-inline-item mx-2 h3" data-toggle=tooltip data-placement=top title=GitHub aria-label=GitHub>
<a class=text-white target=_blank rel=noopener href=https://github.com/microsoft/alguidelines aria-label=GitHub>
<i class="fab fa-github"></i>
</a>
</li>
<li class="list-inline-item mx-2 h3" data-toggle=tooltip data-placement=top title=Twitter aria-label=Twitter>
<a class=text-white target=_blank rel=noopener href="https://twitter.com/search?q=%23bcalhelp" aria-label=Twitter>
<i class="fab fa-twitter"></i>
</a>
</li>
<li class="list-inline-item mx-2 h3" data-toggle=tooltip data-placement=top title=Discord aria-label=Discord>
<a class=text-white target=_blank rel=noopener href=https://discord.gg/4wbfNv3 aria-label=Discord>
<i class="fab fa-discord"></i>
</a>
</li>
</ul>
</div>
<div class="col-6 col-sm-4 text-right text-xs-center order-sm-3">
</div>
<div class="col-12 col-sm-4 text-center py-2 order-sm-2">
<small class=text-white>&copy; 2022 alguidelines.dev Project All Rights Reserved</small>
</div>
</div>
</div>
</footer>
</div>
<script src=https://cdn.jsdelivr.net/npm/popper.js@1.16.1/dist/umd/popper.min.js integrity=sha384-9/reFTGAW83EW2RDu2S0VKaIzap3H66lZH81PoYlFhbGU+6BZp6G7niu735Sk7lN crossorigin=anonymous></script>
<script src=https://cdn.jsdelivr.net/npm/bootstrap@4.6.1/dist/js/bootstrap.min.js integrity="sha512-UR25UO94eTnCVwjbXozyeVd6ZqpaAE9naiEUBK/A+QDbfSTQFhPGj5lOR6d8tsgbBk84Ggb5A3EkjsOgPRPcKA==" crossorigin=anonymous></script>
<script src=/js/tabpane-persist.js></script>
<script src=/js/main.min.46b25eb30e292e80e9e18facc285e194199cf26288c5a1735cda89fb827eba54.js integrity="sha256-RrJesw4pLoDp4Y+swoXhlBmc8mKIxaFzXNqJ+4J+ulQ=" crossorigin=anonymous></script>
</body>
</html>

Binary file not shown.

After

Width:  |  Height:  |  Size: 29 KiB

View file

@ -0,0 +1,754 @@
<!doctype html><html lang=en class=no-js>
<head>
<meta charset=utf-8>
<meta name=viewport content="width=device-width,initial-scale=1,shrink-to-fit=no">
<meta name=generator content="Hugo 0.92.2">
<meta name=robots content="index, follow">
<link rel="shortcut icon" href=/favicons/favicon.ico>
<link rel=apple-touch-icon href=/favicons/apple-touch-icon-180x180.png sizes=180x180>
<link rel=icon type=image/png href=/favicons/favicon-16x16.png sizes=16x16>
<link rel=icon type=image/png href=/favicons/favicon-32x32.png sizes=32x32>
<link rel=icon type=image/png href=/favicons/android-36x36.png sizes=36x36>
<link rel=icon type=image/png href=/favicons/android-48x48.png sizes=48x48>
<link rel=icon type=image/png href=/favicons/android-72x72.png sizes=72x72>
<link rel=icon type=image/png href=/favicons/android-96x96.png sizes=96x96>
<link rel=icon type=image/png href=/favicons/android-144x144.png sizes=144x144>
<link rel=icon type=image/png href=/favicons/android-192x192.png sizes=192x192>
<title>Use Queries to Replace Nested Loops | alguidelines.dev - Business Central Design Patterns</title>
<meta name=description content="Originally by Bogdan Sturzoiu, Microsoft Development Center Copenhagen
Abstract
This pattern shows how the new query object type introduced in NAV …">
<meta property="og:title" content="Use Queries to Replace Nested Loops">
<meta property="og:description" content="Originally by Bogdan Sturzoiu, Microsoft Development Center Copenhagen
Abstract This pattern shows how the new query object type introduced in NAV 2013 allows you to replace costly loops when inspecting data from two or more tables.
Description One of the core operations in a relational database is joining two or more tables. For example, you might need to extract all sales lines in the database together with information regarding the related sales header.">
<meta property="og:type" content="article">
<meta property="og:url" content="https://alguidelines.dev/docs/navpatterns/patterns/queries/use-queries-to-replace-nested-loops/"><meta property="og:image" content="https://alguidelines.dev/images/og-image-fission.png"><meta property="article:section" content="docs">
<meta property="article:modified_time" content="2022-02-20T13:18:49+01:00"><meta property="og:site_name" content="alguidelines.dev - Business Central Design Patterns">
<meta itemprop=name content="Use Queries to Replace Nested Loops">
<meta itemprop=description content="Originally by Bogdan Sturzoiu, Microsoft Development Center Copenhagen
Abstract This pattern shows how the new query object type introduced in NAV 2013 allows you to replace costly loops when inspecting data from two or more tables.
Description One of the core operations in a relational database is joining two or more tables. For example, you might need to extract all sales lines in the database together with information regarding the related sales header.">
<meta itemprop=dateModified content="2022-02-20T13:18:49+01:00">
<meta itemprop=wordCount content="729"><meta itemprop=image content="https://alguidelines.dev/images/og-image-fission.png">
<meta itemprop=keywords content><meta name=twitter:card content="summary_large_image">
<meta name=twitter:image content="https://alguidelines.dev/images/og-image-fission.png">
<meta name=twitter:title content="Use Queries to Replace Nested Loops">
<meta name=twitter:description content="Originally by Bogdan Sturzoiu, Microsoft Development Center Copenhagen
Abstract This pattern shows how the new query object type introduced in NAV 2013 allows you to replace costly loops when inspecting data from two or more tables.
Description One of the core operations in a relational database is joining two or more tables. For example, you might need to extract all sales lines in the database together with information regarding the related sales header.">
<link rel=preload href=/scss/main.min.465d5fa0bd58415aee47bc5a1c5d8deee19fe158cff814bc698ee863ea6b68eb.css as=style>
<link href=/scss/main.min.465d5fa0bd58415aee47bc5a1c5d8deee19fe158cff814bc698ee863ea6b68eb.css rel=stylesheet integrity>
<script src=https://code.jquery.com/jquery-3.6.0.min.js integrity=sha384-vtXRMe3mGCbOeY7l30aIg8H9p3GdeSe4IFlP6G8JMa7o7lXvnz3GFKzPxzJdPfGK crossorigin=anonymous></script>
</head>
<body class=td-page>
<header>
<nav class="js-navbar-scroll navbar navbar-expand navbar-dark flex-column flex-md-row td-navbar">
<a class=navbar-brand href=/>
<img src=/images/alguidelines-bclogo-pattern-white.png height=32px>
<span class=font-weight-bold>alguidelines.dev - Business Central Design Patterns</span>
</a>
<div class="td-navbar-nav-scroll ml-md-auto" id=main_navbar>
<ul class="navbar-nav mt-2 mt-lg-0">
<li class="nav-item mr-4 mb-2 mb-lg-0">
<a class=nav-link href=/docs/><i class="fas fa-book"></i><span>Docs</span></a>
</li>
<li class="nav-item mr-4 mb-2 mb-lg-0">
<a class=nav-link href=https://github.com/microsoft/alguidelines/discussions/ target=_blank><i class="fas fa-comments"></i><span>Discussions</span></a>
</li>
<li class="nav-item mr-4 mb-2 mb-lg-0">
<a class=nav-link href=https://github.com/microsoft/alguidelines target=_blank><i class="fab fa-github"></i><span>GitHub</span></a>
</li>
<li class="nav-item mr-4 mb-2 mb-lg-0">
<a class=nav-link href=https://discord.gg/4wbfNv3 target=_blank><i class="fab fa-discord"></i><span>Discord</span></a>
</li>
</ul>
</div>
<div class="navbar-nav d-none d-lg-block"></div>
</nav>
</header>
<div class="container-fluid td-outer">
<div class=td-main>
<div class="row flex-xl-nowrap">
<aside class="col-12 col-md-3 col-xl-2 td-sidebar d-print-none">
<div id=td-sidebar-menu class=td-sidebar__inner>
<div id=content-mobile>
<form class="td-sidebar__search d-flex align-items-center">
<button class="btn btn-link td-sidebar__toggle d-md-none p-0 ml-3 fas fa-bars" type=button data-toggle=collapse data-target=#td-section-nav aria-controls=td-docs-nav aria-expanded=false aria-label="Toggle section navigation">
</button>
</form>
</div>
<div id=content-desktop></div>
<nav class="collapse td-sidebar-nav" id=td-section-nav>
<ul class="td-sidebar-nav__section pr-md-3 ul-0">
<li class="td-sidebar-nav__section-title td-sidebar-nav__section with-child active-path" id=m-docs-li>
<a href=/docs/ title="AL Guidelines" class="align-left pl-0 td-sidebar-link td-sidebar-link__section tree-root" id=m-docs><span>Docs</span></a>
<ul class=ul-1>
<li class="td-sidebar-nav__section-title td-sidebar-nav__section with-child" id=m-docspatterns-li>
<a href=/docs/patterns/ class="align-left pl-0 td-sidebar-link td-sidebar-link__section" id=m-docspatterns><span>Patterns</span></a>
<ul class="ul-2 foldable">
<li class="td-sidebar-nav__section-title td-sidebar-nav__section without-child collapse" id=m-docspatternsevent-bridge-pattern-li>
<a href=/docs/patterns/event-bridge-pattern/ class="align-left pl-0 td-sidebar-link td-sidebar-link__page" id=m-docspatternsevent-bridge-pattern><span>Event Bridge</span></a>
</li><li class="td-sidebar-nav__section-title td-sidebar-nav__section without-child collapse" id=m-docspatternsfacade-pattern-li>
<a href=/docs/patterns/facade-pattern/ class="align-left pl-0 td-sidebar-link td-sidebar-link__page" id=m-docspatternsfacade-pattern><span>Façade</span></a>
</li><li class="td-sidebar-nav__section-title td-sidebar-nav__section without-child collapse" id=m-docspatternsgeneric-method-pattern-li>
<a href=/docs/patterns/generic-method-pattern/ class="align-left pl-0 td-sidebar-link td-sidebar-link__page" id=m-docspatternsgeneric-method-pattern><span>Generic Method</span></a>
</li>
</ul>
</li><li class="td-sidebar-nav__section-title td-sidebar-nav__section with-child" id=m-docsbestpractices-li>
<a href=/docs/bestpractices/ class="align-left pl-0 td-sidebar-link td-sidebar-link__section" id=m-docsbestpractices><span>Best Practices</span></a>
<ul class="ul-2 foldable">
<li class="td-sidebar-nav__section-title td-sidebar-nav__section without-child collapse" id=m-docsbestpracticesbegin-as-an-afterword-li>
<a href=/docs/bestpractices/begin-as-an-afterword/ class="align-left pl-0 td-sidebar-link td-sidebar-link__page" id=m-docsbestpracticesbegin-as-an-afterword><span>begin as an afterword</span></a>
</li><li class="td-sidebar-nav__section-title td-sidebar-nav__section without-child collapse" id=m-docsbestpracticesbegin-end-li>
<a href=/docs/bestpractices/begin-end/ class="align-left pl-0 td-sidebar-link td-sidebar-link__page" id=m-docsbestpracticesbegin-end><span>Begin-End - Compound Only</span></a>
</li><li class="td-sidebar-nav__section-title td-sidebar-nav__section without-child collapse" id=m-docsbestpracticesbinary-operator-line-start-li>
<a href=/docs/bestpractices/binary-operator-line-start/ class="align-left pl-0 td-sidebar-link td-sidebar-link__page" id=m-docsbestpracticesbinary-operator-line-start><span>Binary Operator to Start Line</span></a>
</li><li class="td-sidebar-nav__section-title td-sidebar-nav__section without-child collapse" id=m-docsbestpracticescase-actions-li>
<a href=/docs/bestpractices/case-actions/ class="align-left pl-0 td-sidebar-link td-sidebar-link__page" id=m-docsbestpracticescase-actions><span>CASE Action on next line</span></a>
</li><li class="td-sidebar-nav__section-title td-sidebar-nav__section without-child collapse" id=m-docsbestpracticescomments-spacing-li>
<a href=/docs/bestpractices/comments-spacing/ class="align-left pl-0 td-sidebar-link td-sidebar-link__page" id=m-docsbestpracticescomments-spacing><span>Comment Spacing</span></a>
</li><li class="td-sidebar-nav__section-title td-sidebar-nav__section without-child collapse" id=m-docsbestpracticesdeleteall-li>
<a href=/docs/bestpractices/deleteall/ class="align-left pl-0 td-sidebar-link td-sidebar-link__page" id=m-docsbestpracticesdeleteall><span>DeleteAll</span></a>
</li><li class="td-sidebar-nav__section-title td-sidebar-nav__section without-child collapse" id=m-docsbestpracticesend-else-pair-li>
<a href=/docs/bestpractices/end-else-pair/ class="align-left pl-0 td-sidebar-link td-sidebar-link__page" id=m-docsbestpracticesend-else-pair><span>end else pair</span></a>
</li><li class="td-sidebar-nav__section-title td-sidebar-nav__section without-child collapse" id=m-docsbestpracticeskeyword-pairs-indentation-li>
<a href=/docs/bestpractices/keyword-pairs-indentation/ class="align-left pl-0 td-sidebar-link td-sidebar-link__page" id=m-docsbestpracticeskeyword-pairs-indentation><span>Keyword Pairs - Indentation</span></a>
</li><li class="td-sidebar-nav__section-title td-sidebar-nav__section without-child collapse" id=m-docsbestpracticesline-start-keywords-li>
<a href=/docs/bestpractices/line-start-keywords/ class="align-left pl-0 td-sidebar-link td-sidebar-link__page" id=m-docsbestpracticesline-start-keywords><span>Line Start Keywords</span></a>
</li><li class="td-sidebar-nav__section-title td-sidebar-nav__section without-child collapse" id=m-docsbestpracticeslonely-repeat-li>
<a href=/docs/bestpractices/lonely-repeat/ class="align-left pl-0 td-sidebar-link td-sidebar-link__page" id=m-docsbestpracticeslonely-repeat><span>Lonely Repeat</span></a>
</li><li class="td-sidebar-nav__section-title td-sidebar-nav__section without-child collapse" id=m-docsbestpracticesnamed-invocations-li>
<a href=/docs/bestpractices/named-invocations/ class="align-left pl-0 td-sidebar-link td-sidebar-link__page" id=m-docsbestpracticesnamed-invocations><span>Named Invocations</span></a>
</li><li class="td-sidebar-nav__section-title td-sidebar-nav__section without-child collapse" id=m-docsbestpracticesone-statement-per-line-li>
<a href=/docs/bestpractices/one-statement-per-line/ class="align-left pl-0 td-sidebar-link td-sidebar-link__page" id=m-docsbestpracticesone-statement-per-line><span>One Statement per Line</span></a>
</li><li class="td-sidebar-nav__section-title td-sidebar-nav__section without-child collapse" id=m-docsbestpracticesseparate-if-and-else-li>
<a href=/docs/bestpractices/separate-if-and-else/ class="align-left pl-0 td-sidebar-link td-sidebar-link__page" id=m-docsbestpracticesseparate-if-and-else><span>Seperate if and else</span></a>
</li><li class="td-sidebar-nav__section-title td-sidebar-nav__section without-child collapse" id=m-docsbestpracticesspacing-binary-operators-li>
<a href=/docs/bestpractices/spacing-binary-operators/ class="align-left pl-0 td-sidebar-link td-sidebar-link__page" id=m-docsbestpracticesspacing-binary-operators><span>Spacing Binary Operators</span></a>
</li><li class="td-sidebar-nav__section-title td-sidebar-nav__section without-child collapse" id=m-docsbestpracticessubscribercodeunits-li>
<a href=/docs/bestpractices/subscribercodeunits/ class="align-left pl-0 td-sidebar-link td-sidebar-link__page" id=m-docsbestpracticessubscribercodeunits><span>Subscriber Codeunits</span></a>
</li><li class="td-sidebar-nav__section-title td-sidebar-nav__section without-child collapse" id=m-docsbestpracticessuggested-abbreviations-li>
<a href=/docs/bestpractices/suggested-abbreviations/ class="align-left pl-0 td-sidebar-link td-sidebar-link__page" id=m-docsbestpracticessuggested-abbreviations><span>Suggested Abbreviations</span></a>
</li><li class="td-sidebar-nav__section-title td-sidebar-nav__section without-child collapse" id=m-docsbestpracticesunnecessary-else-li>
<a href=/docs/bestpractices/unnecessary-else/ class="align-left pl-0 td-sidebar-link td-sidebar-link__page" id=m-docsbestpracticesunnecessary-else><span>Unnecessary else</span></a>
</li><li class="td-sidebar-nav__section-title td-sidebar-nav__section without-child collapse" id=m-docsbestpracticesunnecessary-truefalse-li>
<a href=/docs/bestpractices/unnecessary-truefalse/ class="align-left pl-0 td-sidebar-link td-sidebar-link__page" id=m-docsbestpracticesunnecessary-truefalse><span>Unnecessary true/false</span></a>
</li><li class="td-sidebar-nav__section-title td-sidebar-nav__section without-child collapse" id=m-docsbestpracticesvariable-naming-li>
<a href=/docs/bestpractices/variable-naming/ class="align-left pl-0 td-sidebar-link td-sidebar-link__page" id=m-docsbestpracticesvariable-naming><span>Variable Naming</span></a>
</li><li class="td-sidebar-nav__section-title td-sidebar-nav__section without-child collapse" id=m-docsbestpracticesvariables-declarations-order-li>
<a href=/docs/bestpractices/variables-declarations-order/ class="align-left pl-0 td-sidebar-link td-sidebar-link__page" id=m-docsbestpracticesvariables-declarations-order><span>Variables Declarations Order</span></a>
</li>
</ul>
</li><li class="td-sidebar-nav__section-title td-sidebar-nav__section with-child active-path" id=m-docsnavpatterns-li>
<a href=/docs/navpatterns/ class="align-left pl-0 td-sidebar-link td-sidebar-link__section" id=m-docsnavpatterns><span>NAV Patterns Archive</span></a>
<ul class="ul-2 foldable">
<li class="td-sidebar-nav__section-title td-sidebar-nav__section with-child active-path" id=m-docsnavpatternspatterns-li>
<a href=/docs/navpatterns/patterns/ class="align-left pl-0 td-sidebar-link td-sidebar-link__section" id=m-docsnavpatternspatterns><span>Patterns</span></a>
<ul class="ul-3 foldable">
<li class="td-sidebar-nav__section-title td-sidebar-nav__section without-child" id=m-docsnavpatternspatternsactivity-log-li>
<a href=/docs/navpatterns/patterns/activity-log/ class="align-left pl-0 td-sidebar-link td-sidebar-link__page" id=m-docsnavpatternspatternsactivity-log><span>Activity Logs</span></a>
</li><li class="td-sidebar-nav__section-title td-sidebar-nav__section without-child" id=m-docsnavpatternspatternsargument-table-li>
<a href=/docs/navpatterns/patterns/argument-table/ class="align-left pl-0 td-sidebar-link td-sidebar-link__page" id=m-docsnavpatternspatternsargument-table><span>Argument Table</span></a>
</li><li class="td-sidebar-nav__section-title td-sidebar-nav__section with-child" id=m-docsnavpatternspatternsblocked-entity-li>
<a href=/docs/navpatterns/patterns/blocked-entity/ class="align-left pl-0 td-sidebar-link td-sidebar-link__section" id=m-docsnavpatternspatternsblocked-entity><span>Blocked Entity</span></a>
<ul class="ul-4 foldable">
<li class="td-sidebar-nav__section-title td-sidebar-nav__section without-child collapse" id=m-docsnavpatternspatternsblocked-entitydata-driven-blocked-entity-li>
<a href=/docs/navpatterns/patterns/blocked-entity/data-driven-blocked-entity/ class="align-left pl-0 td-sidebar-link td-sidebar-link__page" id=m-docsnavpatternspatternsblocked-entitydata-driven-blocked-entity><span>Data Driven Blocked Entity</span></a>
</li>
</ul>
</li><li class="td-sidebar-nav__section-title td-sidebar-nav__section without-child" id=m-docsnavpatternspatternscached-web-service-calls-li>
<a href=/docs/navpatterns/patterns/cached-web-service-calls/ class="align-left pl-0 td-sidebar-link td-sidebar-link__page" id=m-docsnavpatternspatternscached-web-service-calls><span>Cached Web Server Calls</span></a>
</li><li class="td-sidebar-nav__section-title td-sidebar-nav__section without-child" id=m-docsnavpatternspatternsconditional-cascading-update-li>
<a href=/docs/navpatterns/patterns/conditional-cascading-update/ class="align-left pl-0 td-sidebar-link td-sidebar-link__page" id=m-docsnavpatternspatternsconditional-cascading-update><span>Conditional Cascading Update</span></a>
</li><li class="td-sidebar-nav__section-title td-sidebar-nav__section without-child" id=m-docsnavpatternspatternscopy-document-li>
<a href=/docs/navpatterns/patterns/copy-document/ class="align-left pl-0 td-sidebar-link td-sidebar-link__page" id=m-docsnavpatternspatternscopy-document><span>Copy Document</span></a>
</li><li class="td-sidebar-nav__section-title td-sidebar-nav__section without-child" id=m-docsnavpatternspatternscreate-data-from-templates-li>
<a href=/docs/navpatterns/patterns/create-data-from-templates/ class="align-left pl-0 td-sidebar-link td-sidebar-link__page" id=m-docsnavpatternspatternscreate-data-from-templates><span>Create Data from Templates</span></a>
</li><li class="td-sidebar-nav__section-title td-sidebar-nav__section without-child" id=m-docsnavpatternspatternscreate-urls-to-nav-clients-li>
<a href=/docs/navpatterns/patterns/create-urls-to-nav-clients/ class="align-left pl-0 td-sidebar-link td-sidebar-link__page" id=m-docsnavpatternspatternscreate-urls-to-nav-clients><span>Create URLs to NAV Clients</span></a>
</li><li class="td-sidebar-nav__section-title td-sidebar-nav__section without-child" id=m-docsnavpatternspatternscreating-custom-charts-li>
<a href=/docs/navpatterns/patterns/creating-custom-charts/ class="align-left pl-0 td-sidebar-link td-sidebar-link__page" id=m-docsnavpatternspatternscreating-custom-charts><span>Creating Custom Charts</span></a>
</li><li class="td-sidebar-nav__section-title td-sidebar-nav__section without-child" id=m-docsnavpatternspatternscross-session-events-li>
<a href=/docs/navpatterns/patterns/cross-session-events/ class="align-left pl-0 td-sidebar-link td-sidebar-link__page" id=m-docsnavpatternspatternscross-session-events><span>Cross Session Events</span></a>
</li><li class="td-sidebar-nav__section-title td-sidebar-nav__section without-child" id=m-docsnavpatternspatternscurrently-active-record-li>
<a href=/docs/navpatterns/patterns/currently-active-record/ class="align-left pl-0 td-sidebar-link td-sidebar-link__page" id=m-docsnavpatternspatternscurrently-active-record><span>Currently Active Record</span></a>
</li><li class="td-sidebar-nav__section-title td-sidebar-nav__section without-child" id=m-docsnavpatternspatternsdata-migration-facade-li>
<a href=/docs/navpatterns/patterns/data-migration-facade/ class="align-left pl-0 td-sidebar-link td-sidebar-link__page" id=m-docsnavpatternspatternsdata-migration-facade><span>Data Migration Façade</span></a>
</li><li class="td-sidebar-nav__section-title td-sidebar-nav__section without-child" id=m-docsnavpatternspatternsdiscovery-event-li>
<a href=/docs/navpatterns/patterns/discovery-event/ class="align-left pl-0 td-sidebar-link td-sidebar-link__page" id=m-docsnavpatternspatternsdiscovery-event><span>Discovery Event</span></a>
</li><li class="td-sidebar-nav__section-title td-sidebar-nav__section without-child" id=m-docsnavpatternspatternsdocument-li>
<a href=/docs/navpatterns/patterns/document/ class="align-left pl-0 td-sidebar-link td-sidebar-link__page" id=m-docsnavpatternspatternsdocument><span>Document</span></a>
</li><li class="td-sidebar-nav__section-title td-sidebar-nav__section without-child" id=m-docsnavpatternspatternseasy-update-of-setup-or-supplementary-information-li>
<a href=/docs/navpatterns/patterns/easy-update-of-setup-or-supplementary-information/ class="align-left pl-0 td-sidebar-link td-sidebar-link__page" id=m-docsnavpatternspatternseasy-update-of-setup-or-supplementary-information><span>Easy Update Of Setup Or Supplementary Information</span></a>
</li><li class="td-sidebar-nav__section-title td-sidebar-nav__section without-child" id=m-docsnavpatternspatternserror-message-processing-li>
<a href=/docs/navpatterns/patterns/error-message-processing/ class="align-left pl-0 td-sidebar-link td-sidebar-link__page" id=m-docsnavpatternspatternserror-message-processing><span>Error Message Processing</span></a>
</li><li class="td-sidebar-nav__section-title td-sidebar-nav__section without-child" id=m-docsnavpatternspatternsextending-the-role-center-headlines-li>
<a href=/docs/navpatterns/patterns/extending-the-role-center-headlines/ class="align-left pl-0 td-sidebar-link td-sidebar-link__page" id=m-docsnavpatternspatternsextending-the-role-center-headlines><span>Extending the Role Center Headlines</span></a>
</li><li class="td-sidebar-nav__section-title td-sidebar-nav__section without-child" id=m-docsnavpatternspatternsfeature-localization-for-data-structures-li>
<a href=/docs/navpatterns/patterns/feature-localization-for-data-structures/ class="align-left pl-0 td-sidebar-link td-sidebar-link__page" id=m-docsnavpatternspatternsfeature-localization-for-data-structures><span>Feature Localization For Data Structures</span></a>
</li><li class="td-sidebar-nav__section-title td-sidebar-nav__section without-child" id=m-docsnavpatternspatternshooks-li>
<a href=/docs/navpatterns/patterns/hooks/ class="align-left pl-0 td-sidebar-link td-sidebar-link__page" id=m-docsnavpatternspatternshooks><span>Hooks</span></a>
</li><li class="td-sidebar-nav__section-title td-sidebar-nav__section without-child" id=m-docsnavpatternspatternsimplementation-of-surrogate-keys-using-autoincrement-pattern-li>
<a href=/docs/navpatterns/patterns/implementation-of-surrogate-keys-using-autoincrement-pattern/ class="align-left pl-0 td-sidebar-link td-sidebar-link__page" id=m-docsnavpatternspatternsimplementation-of-surrogate-keys-using-autoincrement-pattern><span>Surrogate keys using Autoincrement Pattern</span></a>
</li><li class="td-sidebar-nav__section-title td-sidebar-nav__section without-child" id=m-docsnavpatternspatternsinstructions-in-the-ui-li>
<a href=/docs/navpatterns/patterns/instructions-in-the-ui/ class="align-left pl-0 td-sidebar-link td-sidebar-link__page" id=m-docsnavpatternspatternsinstructions-in-the-ui><span>Instructions in the UI</span></a>
</li><li class="td-sidebar-nav__section-title td-sidebar-nav__section without-child" id=m-docsnavpatternspatternsintegration-of-addresses-li>
<a href=/docs/navpatterns/patterns/integration-of-addresses/ class="align-left pl-0 td-sidebar-link td-sidebar-link__page" id=m-docsnavpatternspatternsintegration-of-addresses><span>Integration of Addresses</span></a>
</li><li class="td-sidebar-nav__section-title td-sidebar-nav__section without-child" id=m-docsnavpatternspatternsjournal-error-processing-li>
<a href=/docs/navpatterns/patterns/journal-error-processing/ class="align-left pl-0 td-sidebar-link td-sidebar-link__page" id=m-docsnavpatternspatternsjournal-error-processing><span>Journal Error Processing</span></a>
</li><li class="td-sidebar-nav__section-title td-sidebar-nav__section without-child" id=m-docsnavpatternspatternsjournal-template-batch-line-li>
<a href=/docs/navpatterns/patterns/journal-template-batch-line/ class="align-left pl-0 td-sidebar-link td-sidebar-link__page" id=m-docsnavpatternspatternsjournal-template-batch-line><span>Journal Template Batch Line</span></a>
</li><li class="td-sidebar-nav__section-title td-sidebar-nav__section without-child" id=m-docsnavpatternspatternsmaster-data-li>
<a href=/docs/navpatterns/patterns/master-data/ class="align-left pl-0 td-sidebar-link td-sidebar-link__page" id=m-docsnavpatternspatternsmaster-data><span>Master Data</span></a>
</li><li class="td-sidebar-nav__section-title td-sidebar-nav__section without-child" id=m-docsnavpatternspatternsmulti-file-download-li>
<a href=/docs/navpatterns/patterns/multi-file-download/ class="align-left pl-0 td-sidebar-link td-sidebar-link__page" id=m-docsnavpatternspatternsmulti-file-download><span>Multi-file Download</span></a>
</li><li class="td-sidebar-nav__section-title td-sidebar-nav__section without-child" id=m-docsnavpatternspatternsmulti-page-list-li>
<a href=/docs/navpatterns/patterns/multi-page-list/ class="align-left pl-0 td-sidebar-link td-sidebar-link__page" id=m-docsnavpatternspatternsmulti-page-list><span>Multi-Page List</span></a>
</li><li class="td-sidebar-nav__section-title td-sidebar-nav__section without-child" id=m-docsnavpatternspatternsmultilanguage-application-data-li>
<a href=/docs/navpatterns/patterns/multilanguage-application-data/ class="align-left pl-0 td-sidebar-link td-sidebar-link__page" id=m-docsnavpatternspatternsmultilanguage-application-data><span>Multilanguage Application Data</span></a>
</li><li class="td-sidebar-nav__section-title td-sidebar-nav__section with-child" id=m-docsnavpatternspatternsnet-exception-handling-in-cal-li>
<a href=/docs/navpatterns/patterns/net-exception-handling-in-cal/ class="align-left pl-0 td-sidebar-link td-sidebar-link__section" id=m-docsnavpatternspatternsnet-exception-handling-in-cal><span>NET Exception Handling in CAL</span></a>
<ul class="ul-4 foldable">
<li class="td-sidebar-nav__section-title td-sidebar-nav__section without-child collapse" id=m-docsnavpatternspatternsnet-exception-handling-in-caltryfunction-net-exception-handling-in-cal-li>
<a href=/docs/navpatterns/patterns/net-exception-handling-in-cal/tryfunction-net-exception-handling-in-cal/ class="align-left pl-0 td-sidebar-link td-sidebar-link__page" id=m-docsnavpatternspatternsnet-exception-handling-in-caltryfunction-net-exception-handling-in-cal><span>TryFunction NET Exception Handling in CAL</span></a>
</li>
</ul>
</li><li class="td-sidebar-nav__section-title td-sidebar-nav__section without-child" id=m-docsnavpatternspatternsno-series-li>
<a href=/docs/navpatterns/patterns/no-series/ class="align-left pl-0 td-sidebar-link td-sidebar-link__page" id=m-docsnavpatternspatternsno-series><span>No Series</span></a>
</li><li class="td-sidebar-nav__section-title td-sidebar-nav__section with-child" id=m-docsnavpatternspatternsnotifications-li>
<a href=/docs/navpatterns/patterns/notifications/ class="align-left pl-0 td-sidebar-link td-sidebar-link__section" id=m-docsnavpatternspatternsnotifications><span>Notifications</span></a>
<ul class="ul-4 foldable">
<li class="td-sidebar-nav__section-title td-sidebar-nav__section without-child collapse" id=m-docsnavpatternspatternsnotificationsin-context-notifications-li>
<a href=/docs/navpatterns/patterns/notifications/in-context-notifications/ class="align-left pl-0 td-sidebar-link td-sidebar-link__page" id=m-docsnavpatternspatternsnotificationsin-context-notifications><span>In-context Notifications</span></a>
</li><li class="td-sidebar-nav__section-title td-sidebar-nav__section without-child collapse" id=m-docsnavpatternspatternsnotificationsnotification-lifecycle-management-pattern-li>
<a href=/docs/navpatterns/patterns/notifications/notification-lifecycle-management-pattern/ class="align-left pl-0 td-sidebar-link td-sidebar-link__page" id=m-docsnavpatternspatternsnotificationsnotification-lifecycle-management-pattern><span>Notification Lifecycle Management Pattern</span></a>
</li>
</ul>
</li><li class="td-sidebar-nav__section-title td-sidebar-nav__section without-child" id=m-docsnavpatternspatternsobserver-li>
<a href=/docs/navpatterns/patterns/observer/ class="align-left pl-0 td-sidebar-link td-sidebar-link__page" id=m-docsnavpatternspatternsobserver><span>Observer</span></a>
</li><li class="td-sidebar-nav__section-title td-sidebar-nav__section without-child" id=m-docsnavpatternspatternsposting-routine-select-behavior-li>
<a href=/docs/navpatterns/patterns/posting-routine-select-behavior/ class="align-left pl-0 td-sidebar-link td-sidebar-link__page" id=m-docsnavpatternspatternsposting-routine-select-behavior><span>Posting Routine - Select Behavior</span></a>
</li><li class="td-sidebar-nav__section-title td-sidebar-nav__section without-child" id=m-docsnavpatternspatternsproduct-name-li>
<a href=/docs/navpatterns/patterns/product-name/ class="align-left pl-0 td-sidebar-link td-sidebar-link__page" id=m-docsnavpatternspatternsproduct-name><span>Product Name</span></a>
</li><li class="td-sidebar-nav__section-title td-sidebar-nav__section with-child active-path" id=m-docsnavpatternspatternsqueries-li>
<a href=/docs/navpatterns/patterns/queries/ class="align-left pl-0 td-sidebar-link td-sidebar-link__section" id=m-docsnavpatternspatternsqueries><span>Queries</span></a>
<ul class="ul-4 foldable">
<li class="td-sidebar-nav__section-title td-sidebar-nav__section without-child" id=m-docsnavpatternspatternsqueriesselect-distinct-with-queries-li>
<a href=/docs/navpatterns/patterns/queries/select-distinct-with-queries/ class="align-left pl-0 td-sidebar-link td-sidebar-link__page" id=m-docsnavpatternspatternsqueriesselect-distinct-with-queries><span>SELECT DISTINCT with Queries</span></a>
</li><li class="td-sidebar-nav__section-title td-sidebar-nav__section without-child" id=m-docsnavpatternspatternsqueriesuse-queries-to-detect-duplicate-records-li>
<a href=/docs/navpatterns/patterns/queries/use-queries-to-detect-duplicate-records/ class="align-left pl-0 td-sidebar-link td-sidebar-link__page" id=m-docsnavpatternspatternsqueriesuse-queries-to-detect-duplicate-records><span>Use Queries to Detect Duplicate Records</span></a>
</li><li class="td-sidebar-nav__section-title td-sidebar-nav__section without-child active-path" id=m-docsnavpatternspatternsqueriesuse-queries-to-replace-nested-loops-li>
<a href=/docs/navpatterns/patterns/queries/use-queries-to-replace-nested-loops/ class="align-left pl-0 active td-sidebar-link td-sidebar-link__page" id=m-docsnavpatternspatternsqueriesuse-queries-to-replace-nested-loops><span class=td-sidebar-nav-active-item>Use Queries to Replace Nested Loops</span></a>
</li>
</ul>
</li><li class="td-sidebar-nav__section-title td-sidebar-nav__section without-child" id=m-docsnavpatternspatternsread-once-initialization-and-validation-li>
<a href=/docs/navpatterns/patterns/read-once-initialization-and-validation/ class="align-left pl-0 td-sidebar-link td-sidebar-link__page" id=m-docsnavpatternspatternsread-once-initialization-and-validation><span>Read-once Initialization and Validation</span></a>
</li><li class="td-sidebar-nav__section-title td-sidebar-nav__section without-child" id=m-docsnavpatternspatternsreleased-entity-li>
<a href=/docs/navpatterns/patterns/released-entity/ class="align-left pl-0 td-sidebar-link td-sidebar-link__page" id=m-docsnavpatternspatternsreleased-entity><span>Released Entity</span></a>
</li><li class="td-sidebar-nav__section-title td-sidebar-nav__section without-child" id=m-docsnavpatternspatternsreport-selection-li>
<a href=/docs/navpatterns/patterns/report-selection/ class="align-left pl-0 td-sidebar-link td-sidebar-link__page" id=m-docsnavpatternspatternsreport-selection><span>Report Selection</span></a>
</li><li class="td-sidebar-nav__section-title td-sidebar-nav__section with-child" id=m-docsnavpatternspatternssecurity-li>
<a href=/docs/navpatterns/patterns/security/ class="align-left pl-0 td-sidebar-link td-sidebar-link__section" id=m-docsnavpatternspatternssecurity><span>Security</span></a>
<ul class="ul-4 foldable">
<li class="td-sidebar-nav__section-title td-sidebar-nav__section without-child collapse" id=m-docsnavpatternspatternssecurity1-sensitive-data-encapsulation-li>
<a href=/docs/navpatterns/patterns/security/1-sensitive-data-encapsulation/ class="align-left pl-0 td-sidebar-link td-sidebar-link__page" id=m-docsnavpatternspatternssecurity1-sensitive-data-encapsulation><span>Sensitive Data Encapsulation</span></a>
</li><li class="td-sidebar-nav__section-title td-sidebar-nav__section without-child collapse" id=m-docsnavpatternspatternssecurity2-data-encryption-li>
<a href=/docs/navpatterns/patterns/security/2-data-encryption/ class="align-left pl-0 td-sidebar-link td-sidebar-link__page" id=m-docsnavpatternspatternssecurity2-data-encryption><span>Data Encryption</span></a>
</li><li class="td-sidebar-nav__section-title td-sidebar-nav__section without-child collapse" id=m-docsnavpatternspatternssecurity3-single-point-of-access-li>
<a href=/docs/navpatterns/patterns/security/3-single-point-of-access/ class="align-left pl-0 td-sidebar-link td-sidebar-link__page" id=m-docsnavpatternspatternssecurity3-single-point-of-access><span>Single Point of Access</span></a>
</li><li class="td-sidebar-nav__section-title td-sidebar-nav__section without-child collapse" id=m-docsnavpatternspatternssecurity4-masked-text-li>
<a href=/docs/navpatterns/patterns/security/4-masked-text/ class="align-left pl-0 td-sidebar-link td-sidebar-link__page" id=m-docsnavpatternspatternssecurity4-masked-text><span>Masked Text</span></a>
</li><li class="td-sidebar-nav__section-title td-sidebar-nav__section without-child collapse" id=m-docsnavpatternspatternssecurity5-ssl-in-nav-li>
<a href=/docs/navpatterns/patterns/security/5-ssl-in-nav/ class="align-left pl-0 td-sidebar-link td-sidebar-link__page" id=m-docsnavpatternspatternssecurity5-ssl-in-nav><span>SSL in NAV</span></a>
</li>
</ul>
</li><li class="td-sidebar-nav__section-title td-sidebar-nav__section without-child" id=m-docsnavpatternspatternssetup-specificity-fallback-li>
<a href=/docs/navpatterns/patterns/setup-specificity-fallback/ class="align-left pl-0 td-sidebar-link td-sidebar-link__page" id=m-docsnavpatternspatternssetup-specificity-fallback><span>Setup Specificity Fallback</span></a>
</li><li class="td-sidebar-nav__section-title td-sidebar-nav__section without-child" id=m-docsnavpatternspatternssilent-file-upload-and-download-li>
<a href=/docs/navpatterns/patterns/silent-file-upload-and-download/ class="align-left pl-0 td-sidebar-link td-sidebar-link__page" id=m-docsnavpatternspatternssilent-file-upload-and-download><span>Silent File Upload and Download</span></a>
</li><li class="td-sidebar-nav__section-title td-sidebar-nav__section with-child" id=m-docsnavpatternspatternssingleton-li>
<a href=/docs/navpatterns/patterns/singleton/ class="align-left pl-0 td-sidebar-link td-sidebar-link__section" id=m-docsnavpatternspatternssingleton><span>Singleton</span></a>
<ul class="ul-4 foldable">
<li class="td-sidebar-nav__section-title td-sidebar-nav__section without-child collapse" id=m-docsnavpatternspatternssingletonsingleton-codeunit-li>
<a href=/docs/navpatterns/patterns/singleton/singleton-codeunit/ class="align-left pl-0 td-sidebar-link td-sidebar-link__page" id=m-docsnavpatternspatternssingletonsingleton-codeunit><span>Singleton Codeunit</span></a>
</li><li class="td-sidebar-nav__section-title td-sidebar-nav__section with-child collapse" id=m-docsnavpatternspatternssingletonsingleton-table-li>
<a href=/docs/navpatterns/patterns/singleton/singleton-table/ class="align-left pl-0 td-sidebar-link td-sidebar-link__section" id=m-docsnavpatternspatternssingletonsingleton-table><span>Singleton Table</span></a>
<ul class="ul-5 foldable">
<li class="td-sidebar-nav__section-title td-sidebar-nav__section without-child collapse" id=m-docsnavpatternspatternssingletonsingleton-tablecue-table-li>
<a href=/docs/navpatterns/patterns/singleton/singleton-table/cue-table/ class="align-left pl-0 td-sidebar-link td-sidebar-link__page" id=m-docsnavpatternspatternssingletonsingleton-tablecue-table><span>Cue Table</span></a>
</li><li class="td-sidebar-nav__section-title td-sidebar-nav__section without-child collapse" id=m-docsnavpatternspatternssingletonsingleton-tablesetup-table-li>
<a href=/docs/navpatterns/patterns/singleton/singleton-table/setup-table/ class="align-left pl-0 td-sidebar-link td-sidebar-link__page" id=m-docsnavpatternspatternssingletonsingleton-tablesetup-table><span>Setup Table</span></a>
</li>
</ul>
</li>
</ul>
</li><li class="td-sidebar-nav__section-title td-sidebar-nav__section without-child" id=m-docsnavpatternspatternsstandard-journal-li>
<a href=/docs/navpatterns/patterns/standard-journal/ class="align-left pl-0 td-sidebar-link td-sidebar-link__page" id=m-docsnavpatternspatternsstandard-journal><span>Standard Journal</span></a>
</li><li class="td-sidebar-nav__section-title td-sidebar-nav__section without-child" id=m-docsnavpatternspatternstemporary-dataset-report-li>
<a href=/docs/navpatterns/patterns/temporary-dataset-report/ class="align-left pl-0 td-sidebar-link td-sidebar-link__page" id=m-docsnavpatternspatternstemporary-dataset-report><span>Temporary Dataset Report</span></a>
</li><li class="td-sidebar-nav__section-title td-sidebar-nav__section without-child" id=m-docsnavpatternspatternstotals-and-discounts-on-subpages-sales-and-purchases-li>
<a href=/docs/navpatterns/patterns/totals-and-discounts-on-subpages-sales-and-purchases/ class="align-left pl-0 td-sidebar-link td-sidebar-link__page" id=m-docsnavpatternspatternstotals-and-discounts-on-subpages-sales-and-purchases><span>Totals and Discounts on Subpages Sales and Purchases</span></a>
</li><li class="td-sidebar-nav__section-title td-sidebar-nav__section without-child" id=m-docsnavpatternspatternstransfer-custom-fields-li>
<a href=/docs/navpatterns/patterns/transfer-custom-fields/ class="align-left pl-0 td-sidebar-link td-sidebar-link__page" id=m-docsnavpatternspatternstransfer-custom-fields><span>Transfer Custom Fields</span></a>
</li><li class="td-sidebar-nav__section-title td-sidebar-nav__section without-child" id=m-docsnavpatternspatternsvariant-facade-li>
<a href=/docs/navpatterns/patterns/variant-facade/ class="align-left pl-0 td-sidebar-link td-sidebar-link__page" id=m-docsnavpatternspatternsvariant-facade><span>Variant Facade</span></a>
</li>
</ul>
</li><li class="td-sidebar-nav__section-title td-sidebar-nav__section with-child" id=m-docsnavpatterns2-anti-patterns-li>
<a href=/docs/navpatterns/2-anti-patterns/ class="align-left pl-0 td-sidebar-link td-sidebar-link__section" id=m-docsnavpatterns2-anti-patterns><span>2. Anti-Patterns</span></a>
<ul class="ul-3 foldable">
<li class="td-sidebar-nav__section-title td-sidebar-nav__section without-child collapse" id=m-docsnavpatterns2-anti-patternsnav-upgrade-li>
<a href=/docs/navpatterns/2-anti-patterns/nav-upgrade/ class="align-left pl-0 td-sidebar-link td-sidebar-link__page" id=m-docsnavpatterns2-anti-patternsnav-upgrade><span>Nav Upgrade</span></a>
</li><li class="td-sidebar-nav__section-title td-sidebar-nav__section without-child collapse" id=m-docsnavpatterns2-anti-patternsreusable-bugs-li>
<a href=/docs/navpatterns/2-anti-patterns/reusable-bugs/ class="align-left pl-0 td-sidebar-link td-sidebar-link__page" id=m-docsnavpatterns2-anti-patternsreusable-bugs><span>Reusable Bugs</span></a>
</li>
</ul>
</li><li class="td-sidebar-nav__section-title td-sidebar-nav__section with-child" id=m-docsnavpatterns3-cal-coding-guidelines-li>
<a href=/docs/navpatterns/3-cal-coding-guidelines/ class="align-left pl-0 td-sidebar-link td-sidebar-link__section" id=m-docsnavpatterns3-cal-coding-guidelines><span>3. CAL Coding Guidelines</span></a>
<ul class="ul-3 foldable">
<li class="td-sidebar-nav__section-title td-sidebar-nav__section with-child collapse" id=m-docsnavpatterns3-cal-coding-guidelinesdesign-li>
<a href=/docs/navpatterns/3-cal-coding-guidelines/design/ class="align-left pl-0 td-sidebar-link td-sidebar-link__section" id=m-docsnavpatterns3-cal-coding-guidelinesdesign><span>Design</span></a>
<ul class="ul-4 foldable">
<li class="td-sidebar-nav__section-title td-sidebar-nav__section without-child collapse" id=m-docsnavpatterns3-cal-coding-guidelinesdesignby-reference-parameters-li>
<a href=/docs/navpatterns/3-cal-coding-guidelines/design/by-reference-parameters/ class="align-left pl-0 td-sidebar-link td-sidebar-link__page" id=m-docsnavpatterns3-cal-coding-guidelinesdesignby-reference-parameters><span>By Reference Parameters</span></a>
</li><li class="td-sidebar-nav__section-title td-sidebar-nav__section without-child collapse" id=m-docsnavpatterns3-cal-coding-guidelinesdesignclass-coupling-li>
<a href=/docs/navpatterns/3-cal-coding-guidelines/design/class-coupling/ class="align-left pl-0 td-sidebar-link td-sidebar-link__page" id=m-docsnavpatterns3-cal-coding-guidelinesdesignclass-coupling><span>Class Coupling</span></a>
</li><li class="td-sidebar-nav__section-title td-sidebar-nav__section without-child collapse" id=m-docsnavpatterns3-cal-coding-guidelinesdesigncyclomatic-complexity-li>
<a href=/docs/navpatterns/3-cal-coding-guidelines/design/cyclomatic-complexity/ class="align-left pl-0 td-sidebar-link td-sidebar-link__page" id=m-docsnavpatterns3-cal-coding-guidelinesdesigncyclomatic-complexity><span>Cyclomatic Complexity</span></a>
</li><li class="td-sidebar-nav__section-title td-sidebar-nav__section without-child collapse" id=m-docsnavpatterns3-cal-coding-guidelinesdesignencapsulate-local-functionality-li>
<a href=/docs/navpatterns/3-cal-coding-guidelines/design/encapsulate-local-functionality/ class="align-left pl-0 td-sidebar-link td-sidebar-link__page" id=m-docsnavpatterns3-cal-coding-guidelinesdesignencapsulate-local-functionality><span>Encapsulate Local Functionality</span></a>
</li><li class="td-sidebar-nav__section-title td-sidebar-nav__section without-child collapse" id=m-docsnavpatterns3-cal-coding-guidelinesdesignfindset-findfirst-findlast-li>
<a href=/docs/navpatterns/3-cal-coding-guidelines/design/findset-findfirst-findlast/ class="align-left pl-0 td-sidebar-link td-sidebar-link__page" id=m-docsnavpatterns3-cal-coding-guidelinesdesignfindset-findfirst-findlast><span>FINDSET FINDFIRST FINDLAST</span></a>
</li><li class="td-sidebar-nav__section-title td-sidebar-nav__section without-child collapse" id=m-docsnavpatterns3-cal-coding-guidelinesdesigninitialized-variables-li>
<a href=/docs/navpatterns/3-cal-coding-guidelines/design/initialized-variables/ class="align-left pl-0 td-sidebar-link td-sidebar-link__page" id=m-docsnavpatterns3-cal-coding-guidelinesdesigninitialized-variables><span>Initialized Variables</span></a>
</li><li class="td-sidebar-nav__section-title td-sidebar-nav__section without-child collapse" id=m-docsnavpatterns3-cal-coding-guidelinesdesignmaintainability-index-li>
<a href=/docs/navpatterns/3-cal-coding-guidelines/design/maintainability-index/ class="align-left pl-0 td-sidebar-link td-sidebar-link__page" id=m-docsnavpatterns3-cal-coding-guidelinesdesignmaintainability-index><span>Maintainability Index</span></a>
</li><li class="td-sidebar-nav__section-title td-sidebar-nav__section without-child collapse" id=m-docsnavpatterns3-cal-coding-guidelinesdesignparameter-placeholders-li>
<a href=/docs/navpatterns/3-cal-coding-guidelines/design/parameter-placeholders/ class="align-left pl-0 td-sidebar-link td-sidebar-link__page" id=m-docsnavpatterns3-cal-coding-guidelinesdesignparameter-placeholders><span>Parameter Placeholders</span></a>
</li><li class="td-sidebar-nav__section-title td-sidebar-nav__section without-child collapse" id=m-docsnavpatterns3-cal-coding-guidelinesdesignstatic-object-invocation-li>
<a href=/docs/navpatterns/3-cal-coding-guidelines/design/static-object-invocation/ class="align-left pl-0 td-sidebar-link td-sidebar-link__page" id=m-docsnavpatterns3-cal-coding-guidelinesdesignstatic-object-invocation><span>Static Object Invocation</span></a>
</li><li class="td-sidebar-nav__section-title td-sidebar-nav__section without-child collapse" id=m-docsnavpatterns3-cal-coding-guidelinesdesignunreachable-code-li>
<a href=/docs/navpatterns/3-cal-coding-guidelines/design/unreachable-code/ class="align-left pl-0 td-sidebar-link td-sidebar-link__page" id=m-docsnavpatterns3-cal-coding-guidelinesdesignunreachable-code><span>Unreachable Code</span></a>
</li><li class="td-sidebar-nav__section-title td-sidebar-nav__section without-child collapse" id=m-docsnavpatterns3-cal-coding-guidelinesdesignunused-initialized-variables-li>
<a href=/docs/navpatterns/3-cal-coding-guidelines/design/unused-initialized-variables/ class="align-left pl-0 td-sidebar-link td-sidebar-link__page" id=m-docsnavpatterns3-cal-coding-guidelinesdesignunused-initialized-variables><span>Unused Initialized Variables</span></a>
</li><li class="td-sidebar-nav__section-title td-sidebar-nav__section without-child collapse" id=m-docsnavpatterns3-cal-coding-guidelinesdesignunused-variables-li>
<a href=/docs/navpatterns/3-cal-coding-guidelines/design/unused-variables/ class="align-left pl-0 td-sidebar-link td-sidebar-link__page" id=m-docsnavpatterns3-cal-coding-guidelinesdesignunused-variables><span>Unused Variables</span></a>
</li><li class="td-sidebar-nav__section-title td-sidebar-nav__section without-child collapse" id=m-docsnavpatterns3-cal-coding-guidelinesdesignvariable-capacity-mismatch-li>
<a href=/docs/navpatterns/3-cal-coding-guidelines/design/variable-capacity-mismatch/ class="align-left pl-0 td-sidebar-link td-sidebar-link__page" id=m-docsnavpatterns3-cal-coding-guidelinesdesignvariable-capacity-mismatch><span>Variable Capacity Mismatch</span></a>
</li><li class="td-sidebar-nav__section-title td-sidebar-nav__section without-child collapse" id=m-docsnavpatterns3-cal-coding-guidelinesdesignwith-scope-name-collision-li>
<a href=/docs/navpatterns/3-cal-coding-guidelines/design/with-scope-name-collision/ class="align-left pl-0 td-sidebar-link td-sidebar-link__page" id=m-docsnavpatterns3-cal-coding-guidelinesdesignwith-scope-name-collision><span>WITH Scope Name Collision</span></a>
</li>
</ul>
</li><li class="td-sidebar-nav__section-title td-sidebar-nav__section without-child collapse" id=m-docsnavpatterns3-cal-coding-guidelinesinternally-used-dot-net-types-li>
<a href=/docs/navpatterns/3-cal-coding-guidelines/internally-used-dot-net-types/ class="align-left pl-0 td-sidebar-link td-sidebar-link__page" id=m-docsnavpatterns3-cal-coding-guidelinesinternally-used-dot-net-types><span>Internally used DotNet Types</span></a>
</li><li class="td-sidebar-nav__section-title td-sidebar-nav__section with-child collapse" id=m-docsnavpatterns3-cal-coding-guidelinesinternationalization-li>
<a href=/docs/navpatterns/3-cal-coding-guidelines/internationalization/ class="align-left pl-0 td-sidebar-link td-sidebar-link__section" id=m-docsnavpatterns3-cal-coding-guidelinesinternationalization><span>Internationalization</span></a>
<ul class="ul-4 foldable">
<li class="td-sidebar-nav__section-title td-sidebar-nav__section without-child collapse" id=m-docsnavpatterns3-cal-coding-guidelinesinternationalizationusing-calcdate-li>
<a href=/docs/navpatterns/3-cal-coding-guidelines/internationalization/using-calcdate/ class="align-left pl-0 td-sidebar-link td-sidebar-link__page" id=m-docsnavpatterns3-cal-coding-guidelinesinternationalizationusing-calcdate><span>Using Calcdate</span></a>
</li>
</ul>
</li><li class="td-sidebar-nav__section-title td-sidebar-nav__section with-child collapse" id=m-docsnavpatterns3-cal-coding-guidelineslocalizability-li>
<a href=/docs/navpatterns/3-cal-coding-guidelines/localizability/ class="align-left pl-0 td-sidebar-link td-sidebar-link__section" id=m-docsnavpatterns3-cal-coding-guidelineslocalizability><span>Localizability</span></a>
<ul class="ul-4 foldable">
<li class="td-sidebar-nav__section-title td-sidebar-nav__section without-child collapse" id=m-docsnavpatterns3-cal-coding-guidelineslocalizabilitycaptionml-for-system-tables-li>
<a href=/docs/navpatterns/3-cal-coding-guidelines/localizability/captionml-for-system-tables/ class="align-left pl-0 td-sidebar-link td-sidebar-link__page" id=m-docsnavpatterns3-cal-coding-guidelineslocalizabilitycaptionml-for-system-tables><span>CaptionML on System Pages</span></a>
</li><li class="td-sidebar-nav__section-title td-sidebar-nav__section without-child collapse" id=m-docsnavpatterns3-cal-coding-guidelineslocalizabilityfieldcaption-and-tablecaption-li>
<a href=/docs/navpatterns/3-cal-coding-guidelines/localizability/fieldcaption-and-tablecaption/ class="align-left pl-0 td-sidebar-link td-sidebar-link__page" id=m-docsnavpatterns3-cal-coding-guidelineslocalizabilityfieldcaption-and-tablecaption><span>FIELDCAPTION and TABLECAPTION</span></a>
</li><li class="td-sidebar-nav__section-title td-sidebar-nav__section without-child collapse" id=m-docsnavpatterns3-cal-coding-guidelineslocalizabilityglobal-text-constants-li>
<a href=/docs/navpatterns/3-cal-coding-guidelines/localizability/global-text-constants/ class="align-left pl-0 td-sidebar-link td-sidebar-link__page" id=m-docsnavpatterns3-cal-coding-guidelineslocalizabilityglobal-text-constants><span>Global Text Constants</span></a>
</li><li class="td-sidebar-nav__section-title td-sidebar-nav__section without-child collapse" id=m-docsnavpatterns3-cal-coding-guidelineslocalizabilityuse-text-constants-li>
<a href=/docs/navpatterns/3-cal-coding-guidelines/localizability/use-text-constants/ class="align-left pl-0 td-sidebar-link td-sidebar-link__page" id=m-docsnavpatterns3-cal-coding-guidelineslocalizabilityuse-text-constants><span>Use Text Constants</span></a>
</li><li class="td-sidebar-nav__section-title td-sidebar-nav__section without-child collapse" id=m-docsnavpatterns3-cal-coding-guidelineslocalizabilityusing-optioncaptionml-li>
<a href=/docs/navpatterns/3-cal-coding-guidelines/localizability/using-optioncaptionml/ class="align-left pl-0 td-sidebar-link td-sidebar-link__page" id=m-docsnavpatterns3-cal-coding-guidelineslocalizabilityusing-optioncaptionml><span>Using OptionCaptionML</span></a>
</li>
</ul>
</li><li class="td-sidebar-nav__section-title td-sidebar-nav__section with-child collapse" id=m-docsnavpatterns3-cal-coding-guidelinesreadability-li>
<a href=/docs/navpatterns/3-cal-coding-guidelines/readability/ class="align-left pl-0 td-sidebar-link td-sidebar-link__section" id=m-docsnavpatterns3-cal-coding-guidelinesreadability><span>Readability</span></a>
<ul class="ul-4 foldable">
<li class="td-sidebar-nav__section-title td-sidebar-nav__section without-child collapse" id=m-docsnavpatterns3-cal-coding-guidelinesreadabilitybegin-as-an-afterword-li>
<a href=/docs/navpatterns/3-cal-coding-guidelines/readability/begin-as-an-afterword/ class="align-left pl-0 td-sidebar-link td-sidebar-link__page" id=m-docsnavpatterns3-cal-coding-guidelinesreadabilitybegin-as-an-afterword><span>Begin as an 'After Word'</span></a>
</li><li class="td-sidebar-nav__section-title td-sidebar-nav__section without-child collapse" id=m-docsnavpatterns3-cal-coding-guidelinesreadabilitybegin-end-li>
<a href=/docs/navpatterns/3-cal-coding-guidelines/readability/begin-end/ class="align-left pl-0 td-sidebar-link td-sidebar-link__page" id=m-docsnavpatterns3-cal-coding-guidelinesreadabilitybegin-end><span>Begin-End - Compound Only</span></a>
</li><li class="td-sidebar-nav__section-title td-sidebar-nav__section without-child collapse" id=m-docsnavpatterns3-cal-coding-guidelinesreadabilitybinary-operator-line-start-li>
<a href=/docs/navpatterns/3-cal-coding-guidelines/readability/binary-operator-line-start/ class="align-left pl-0 td-sidebar-link td-sidebar-link__page" id=m-docsnavpatterns3-cal-coding-guidelinesreadabilitybinary-operator-line-start><span>Binary Operator to Start Line</span></a>
</li><li class="td-sidebar-nav__section-title td-sidebar-nav__section without-child collapse" id=m-docsnavpatterns3-cal-coding-guidelinesreadabilityblank-lines-li>
<a href=/docs/navpatterns/3-cal-coding-guidelines/readability/blank-lines/ class="align-left pl-0 td-sidebar-link td-sidebar-link__page" id=m-docsnavpatterns3-cal-coding-guidelinesreadabilityblank-lines><span>Blank Lines</span></a>
</li><li class="td-sidebar-nav__section-title td-sidebar-nav__section without-child collapse" id=m-docsnavpatterns3-cal-coding-guidelinesreadabilitycase-actions-li>
<a href=/docs/navpatterns/3-cal-coding-guidelines/readability/case-actions/ class="align-left pl-0 td-sidebar-link td-sidebar-link__page" id=m-docsnavpatterns3-cal-coding-guidelinesreadabilitycase-actions><span>CASE Action</span></a>
</li><li class="td-sidebar-nav__section-title td-sidebar-nav__section without-child collapse" id=m-docsnavpatterns3-cal-coding-guidelinesreadabilitycolon-usage-in-case-li>
<a href=/docs/navpatterns/3-cal-coding-guidelines/readability/colon-usage-in-case/ class="align-left pl-0 td-sidebar-link td-sidebar-link__page" id=m-docsnavpatterns3-cal-coding-guidelinesreadabilitycolon-usage-in-case><span>Colon usage in CASE</span></a>
</li><li class="td-sidebar-nav__section-title td-sidebar-nav__section without-child collapse" id=m-docsnavpatterns3-cal-coding-guidelinesreadabilitycomments-curly-brackets-li>
<a href=/docs/navpatterns/3-cal-coding-guidelines/readability/comments-curly-brackets/ class="align-left pl-0 td-sidebar-link td-sidebar-link__page" id=m-docsnavpatterns3-cal-coding-guidelinesreadabilitycomments-curly-brackets><span>Comments inside Curly Brackets</span></a>
</li><li class="td-sidebar-nav__section-title td-sidebar-nav__section without-child collapse" id=m-docsnavpatterns3-cal-coding-guidelinesreadabilitycomments-spacing-li>
<a href=/docs/navpatterns/3-cal-coding-guidelines/readability/comments-spacing/ class="align-left pl-0 td-sidebar-link td-sidebar-link__page" id=m-docsnavpatterns3-cal-coding-guidelinesreadabilitycomments-spacing><span>Comment Spacing</span></a>
</li><li class="td-sidebar-nav__section-title td-sidebar-nav__section without-child collapse" id=m-docsnavpatterns3-cal-coding-guidelinesreadabilityend-else-pair-li>
<a href=/docs/navpatterns/3-cal-coding-guidelines/readability/end-else-pair/ class="align-left pl-0 td-sidebar-link td-sidebar-link__page" id=m-docsnavpatterns3-cal-coding-guidelinesreadabilityend-else-pair><span>END ELSE Pair</span></a>
</li><li class="td-sidebar-nav__section-title td-sidebar-nav__section without-child collapse" id=m-docsnavpatterns3-cal-coding-guidelinesreadabilityindentation-li>
<a href=/docs/navpatterns/3-cal-coding-guidelines/readability/indentation/ class="align-left pl-0 td-sidebar-link td-sidebar-link__page" id=m-docsnavpatterns3-cal-coding-guidelinesreadabilityindentation><span>Indentation</span></a>
</li><li class="td-sidebar-nav__section-title td-sidebar-nav__section without-child collapse" id=m-docsnavpatterns3-cal-coding-guidelinesreadabilitykeyword-pairs-indentation-li>
<a href=/docs/navpatterns/3-cal-coding-guidelines/readability/keyword-pairs-indentation/ class="align-left pl-0 td-sidebar-link td-sidebar-link__page" id=m-docsnavpatterns3-cal-coding-guidelinesreadabilitykeyword-pairs-indentation><span>Keyword Pairs - Indentation</span></a>
</li><li class="td-sidebar-nav__section-title td-sidebar-nav__section without-child collapse" id=m-docsnavpatterns3-cal-coding-guidelinesreadabilityline-start-keywords-li>
<a href=/docs/navpatterns/3-cal-coding-guidelines/readability/line-start-keywords/ class="align-left pl-0 td-sidebar-link td-sidebar-link__page" id=m-docsnavpatterns3-cal-coding-guidelinesreadabilityline-start-keywords><span>Line Start Keywords</span></a>
</li><li class="td-sidebar-nav__section-title td-sidebar-nav__section without-child collapse" id=m-docsnavpatterns3-cal-coding-guidelinesreadabilitylonely-repeat-li>
<a href=/docs/navpatterns/3-cal-coding-guidelines/readability/lonely-repeat/ class="align-left pl-0 td-sidebar-link td-sidebar-link__page" id=m-docsnavpatterns3-cal-coding-guidelinesreadabilitylonely-repeat><span>Lonely Repeat</span></a>
</li><li class="td-sidebar-nav__section-title td-sidebar-nav__section without-child collapse" id=m-docsnavpatterns3-cal-coding-guidelinesreadabilitynamed-invocations-li>
<a href=/docs/navpatterns/3-cal-coding-guidelines/readability/named-invocations/ class="align-left pl-0 td-sidebar-link td-sidebar-link__page" id=m-docsnavpatterns3-cal-coding-guidelinesreadabilitynamed-invocations><span>Named Invocations</span></a>
</li><li class="td-sidebar-nav__section-title td-sidebar-nav__section without-child collapse" id=m-docsnavpatterns3-cal-coding-guidelinesreadabilitynested-withs-li>
<a href=/docs/navpatterns/3-cal-coding-guidelines/readability/nested-withs/ class="align-left pl-0 td-sidebar-link td-sidebar-link__page" id=m-docsnavpatterns3-cal-coding-guidelinesreadabilitynested-withs><span>Nested WITHs</span></a>
</li><li class="td-sidebar-nav__section-title td-sidebar-nav__section without-child collapse" id=m-docsnavpatterns3-cal-coding-guidelinesreadabilityone-statement-per-line-li>
<a href=/docs/navpatterns/3-cal-coding-guidelines/readability/one-statement-per-line/ class="align-left pl-0 td-sidebar-link td-sidebar-link__page" id=m-docsnavpatterns3-cal-coding-guidelinesreadabilityone-statement-per-line><span>One Statement Per Line</span></a>
</li><li class="td-sidebar-nav__section-title td-sidebar-nav__section without-child collapse" id=m-docsnavpatterns3-cal-coding-guidelinesreadabilityseparate-if-and-else-li>
<a href=/docs/navpatterns/3-cal-coding-guidelines/readability/separate-if-and-else/ class="align-left pl-0 td-sidebar-link td-sidebar-link__page" id=m-docsnavpatterns3-cal-coding-guidelinesreadabilityseparate-if-and-else><span>Separate IF and ELSE</span></a>
</li><li class="td-sidebar-nav__section-title td-sidebar-nav__section without-child collapse" id=m-docsnavpatterns3-cal-coding-guidelinesreadabilityspacing-binary-operators-li>
<a href=/docs/navpatterns/3-cal-coding-guidelines/readability/spacing-binary-operators/ class="align-left pl-0 td-sidebar-link td-sidebar-link__page" id=m-docsnavpatterns3-cal-coding-guidelinesreadabilityspacing-binary-operators><span>Spacing Binary Operators</span></a>
</li><li class="td-sidebar-nav__section-title td-sidebar-nav__section without-child collapse" id=m-docsnavpatterns3-cal-coding-guidelinesreadabilityspacing-brackets-and-li>
<a href=/docs/navpatterns/3-cal-coding-guidelines/readability/spacing-brackets-and/ class="align-left pl-0 td-sidebar-link td-sidebar-link__page" id=m-docsnavpatterns3-cal-coding-guidelinesreadabilityspacing-brackets-and><span>Spacing Brackets and ::</span></a>
</li><li class="td-sidebar-nav__section-title td-sidebar-nav__section without-child collapse" id=m-docsnavpatterns3-cal-coding-guidelinesreadabilityspacing-unary-operators-li>
<a href=/docs/navpatterns/3-cal-coding-guidelines/readability/spacing-unary-operators/ class="align-left pl-0 td-sidebar-link td-sidebar-link__page" id=m-docsnavpatterns3-cal-coding-guidelinesreadabilityspacing-unary-operators><span>Spacing Unary Operators</span></a>
</li><li class="td-sidebar-nav__section-title td-sidebar-nav__section without-child collapse" id=m-docsnavpatterns3-cal-coding-guidelinesreadabilitysuggested-abbreviations-li>
<a href=/docs/navpatterns/3-cal-coding-guidelines/readability/suggested-abbreviations/ class="align-left pl-0 td-sidebar-link td-sidebar-link__page" id=m-docsnavpatterns3-cal-coding-guidelinesreadabilitysuggested-abbreviations><span>Suggested Abbreviations</span></a>
</li><li class="td-sidebar-nav__section-title td-sidebar-nav__section without-child collapse" id=m-docsnavpatterns3-cal-coding-guidelinesreadabilitytemporary-variable-naming-li>
<a href=/docs/navpatterns/3-cal-coding-guidelines/readability/temporary-variable-naming/ class="align-left pl-0 td-sidebar-link td-sidebar-link__page" id=m-docsnavpatterns3-cal-coding-guidelinesreadabilitytemporary-variable-naming><span>Temporary Variable Naming</span></a>
</li><li class="td-sidebar-nav__section-title td-sidebar-nav__section without-child collapse" id=m-docsnavpatterns3-cal-coding-guidelinesreadabilitytextconst-suffixes-li>
<a href=/docs/navpatterns/3-cal-coding-guidelines/readability/textconst-suffixes/ class="align-left pl-0 td-sidebar-link td-sidebar-link__page" id=m-docsnavpatterns3-cal-coding-guidelinesreadabilitytextconst-suffixes><span>TextConst Suffixes</span></a>
</li><li class="td-sidebar-nav__section-title td-sidebar-nav__section without-child collapse" id=m-docsnavpatterns3-cal-coding-guidelinesreadabilityunary-operator-line-end-li>
<a href=/docs/navpatterns/3-cal-coding-guidelines/readability/unary-operator-line-end/ class="align-left pl-0 td-sidebar-link td-sidebar-link__page" id=m-docsnavpatterns3-cal-coding-guidelinesreadabilityunary-operator-line-end><span>Unary Operator Line End</span></a>
</li><li class="td-sidebar-nav__section-title td-sidebar-nav__section without-child collapse" id=m-docsnavpatterns3-cal-coding-guidelinesreadabilityunnecessary-compound-parenthesis-li>
<a href=/docs/navpatterns/3-cal-coding-guidelines/readability/unnecessary-compound-parenthesis/ class="align-left pl-0 td-sidebar-link td-sidebar-link__page" id=m-docsnavpatterns3-cal-coding-guidelinesreadabilityunnecessary-compound-parenthesis><span>Unnecessary Compound Parenthesis</span></a>
</li><li class="td-sidebar-nav__section-title td-sidebar-nav__section without-child collapse" id=m-docsnavpatterns3-cal-coding-guidelinesreadabilityunnecessary-else-li>
<a href=/docs/navpatterns/3-cal-coding-guidelines/readability/unnecessary-else/ class="align-left pl-0 td-sidebar-link td-sidebar-link__page" id=m-docsnavpatterns3-cal-coding-guidelinesreadabilityunnecessary-else><span>Unnecessary ELSE</span></a>
</li><li class="td-sidebar-nav__section-title td-sidebar-nav__section without-child collapse" id=m-docsnavpatterns3-cal-coding-guidelinesreadabilityunnecessary-function-parenthesis-li>
<a href=/docs/navpatterns/3-cal-coding-guidelines/readability/unnecessary-function-parenthesis/ class="align-left pl-0 td-sidebar-link td-sidebar-link__page" id=m-docsnavpatterns3-cal-coding-guidelinesreadabilityunnecessary-function-parenthesis><span>Unnecessary Function Parenthesis</span></a>
</li><li class="td-sidebar-nav__section-title td-sidebar-nav__section without-child collapse" id=m-docsnavpatterns3-cal-coding-guidelinesreadabilityunnecessary-separators-li>
<a href=/docs/navpatterns/3-cal-coding-guidelines/readability/unnecessary-separators/ class="align-left pl-0 td-sidebar-link td-sidebar-link__page" id=m-docsnavpatterns3-cal-coding-guidelinesreadabilityunnecessary-separators><span>Unnecessary Separators</span></a>
</li><li class="td-sidebar-nav__section-title td-sidebar-nav__section without-child collapse" id=m-docsnavpatterns3-cal-coding-guidelinesreadabilityunnecessary-truefalse-li>
<a href=/docs/navpatterns/3-cal-coding-guidelines/readability/unnecessary-truefalse/ class="align-left pl-0 td-sidebar-link td-sidebar-link__page" id=m-docsnavpatterns3-cal-coding-guidelinesreadabilityunnecessary-truefalse><span>Unnecessary TRUE/FALSE</span></a>
</li><li class="td-sidebar-nav__section-title td-sidebar-nav__section without-child collapse" id=m-docsnavpatterns3-cal-coding-guidelinesreadabilityvariable-already-scoped-li>
<a href=/docs/navpatterns/3-cal-coding-guidelines/readability/variable-already-scoped/ class="align-left pl-0 td-sidebar-link td-sidebar-link__page" id=m-docsnavpatterns3-cal-coding-guidelinesreadabilityvariable-already-scoped><span>Variable Already Scoped</span></a>
</li><li class="td-sidebar-nav__section-title td-sidebar-nav__section without-child collapse" id=m-docsnavpatterns3-cal-coding-guidelinesreadabilityvariable-naming-li>
<a href=/docs/navpatterns/3-cal-coding-guidelines/readability/variable-naming/ class="align-left pl-0 td-sidebar-link td-sidebar-link__page" id=m-docsnavpatterns3-cal-coding-guidelinesreadabilityvariable-naming><span>Variable Naming</span></a>
</li><li class="td-sidebar-nav__section-title td-sidebar-nav__section without-child collapse" id=m-docsnavpatterns3-cal-coding-guidelinesreadabilityvariables-declarations-order-li>
<a href=/docs/navpatterns/3-cal-coding-guidelines/readability/variables-declarations-order/ class="align-left pl-0 td-sidebar-link td-sidebar-link__page" id=m-docsnavpatterns3-cal-coding-guidelinesreadabilityvariables-declarations-order><span>Variables Declarations Order</span></a>
</li>
</ul>
</li><li class="td-sidebar-nav__section-title td-sidebar-nav__section with-child collapse" id=m-docsnavpatterns3-cal-coding-guidelinesux-li>
<a href=/docs/navpatterns/3-cal-coding-guidelines/ux/ class="align-left pl-0 td-sidebar-link td-sidebar-link__section" id=m-docsnavpatterns3-cal-coding-guidelinesux><span>UX</span></a>
<ul class="ul-4 foldable">
<li class="td-sidebar-nav__section-title td-sidebar-nav__section without-child collapse" id=m-docsnavpatterns3-cal-coding-guidelinesuxactions-images-li>
<a href=/docs/navpatterns/3-cal-coding-guidelines/ux/actions-images/ class="align-left pl-0 td-sidebar-link td-sidebar-link__page" id=m-docsnavpatterns3-cal-coding-guidelinesuxactions-images><span>Actions - Images</span></a>
</li><li class="td-sidebar-nav__section-title td-sidebar-nav__section without-child collapse" id=m-docsnavpatterns3-cal-coding-guidelinesuxconfirm-li>
<a href=/docs/navpatterns/3-cal-coding-guidelines/ux/confirm/ class="align-left pl-0 td-sidebar-link td-sidebar-link__page" id=m-docsnavpatterns3-cal-coding-guidelinesuxconfirm><span>CONFIRM</span></a>
</li><li class="td-sidebar-nav__section-title td-sidebar-nav__section without-child collapse" id=m-docsnavpatterns3-cal-coding-guidelinesuxfielderror-li>
<a href=/docs/navpatterns/3-cal-coding-guidelines/ux/fielderror/ class="align-left pl-0 td-sidebar-link td-sidebar-link__page" id=m-docsnavpatterns3-cal-coding-guidelinesuxfielderror><span>FIELDERROR</span></a>
</li><li class="td-sidebar-nav__section-title td-sidebar-nav__section without-child collapse" id=m-docsnavpatterns3-cal-coding-guidelinesuxmessage-and-error-li>
<a href=/docs/navpatterns/3-cal-coding-guidelines/ux/message-and-error/ class="align-left pl-0 td-sidebar-link td-sidebar-link__page" id=m-docsnavpatterns3-cal-coding-guidelinesuxmessage-and-error><span>MESSAGE and ERROR</span></a>
</li>
</ul>
</li>
</ul>
</li><li class="td-sidebar-nav__section-title td-sidebar-nav__section with-child" id=m-docsnavpatterns4-get-involved-li>
<a href=/docs/navpatterns/4-get-involved/ class="align-left pl-0 td-sidebar-link td-sidebar-link__section" id=m-docsnavpatterns4-get-involved><span>(OLD) Get Involved</span></a>
<ul class="ul-3 foldable">
<li class="td-sidebar-nav__section-title td-sidebar-nav__section without-child collapse" id=m-docsnavpatterns4-get-involvedcode-of-conduct-li>
<a href=/docs/navpatterns/4-get-involved/code-of-conduct/ class="align-left pl-0 td-sidebar-link td-sidebar-link__page" id=m-docsnavpatterns4-get-involvedcode-of-conduct><span>Code of Conduct</span></a>
</li><li class="td-sidebar-nav__section-title td-sidebar-nav__section without-child collapse" id=m-docsnavpatterns4-get-involvedpatterns-authors-li>
<a href=/docs/navpatterns/4-get-involved/patterns-authors/ class="align-left pl-0 td-sidebar-link td-sidebar-link__page" id=m-docsnavpatterns4-get-involvedpatterns-authors><span>Patterns Authors</span></a>
</li><li class="td-sidebar-nav__section-title td-sidebar-nav__section without-child collapse" id=m-docsnavpatterns4-get-involvedtemplate-for-writing-nav-design-patterns-li>
<a href=/docs/navpatterns/4-get-involved/template-for-writing-nav-design-patterns/ class="align-left pl-0 td-sidebar-link td-sidebar-link__page" id=m-docsnavpatterns4-get-involvedtemplate-for-writing-nav-design-patterns><span>Template for writing Nav Design Patterns</span></a>
</li>
</ul>
</li><li class="td-sidebar-nav__section-title td-sidebar-nav__section without-child" id=m-docsnavpatternsrelated-links-li>
<a href=/docs/navpatterns/related-links/ class="align-left pl-0 td-sidebar-link td-sidebar-link__page" id=m-docsnavpatternsrelated-links><span>Related Links</span></a>
</li>
</ul>
</li><li class="td-sidebar-nav__section-title td-sidebar-nav__section with-child" id=m-docscontributing-li>
<a href=/docs/contributing/ class="align-left pl-0 td-sidebar-link td-sidebar-link__section" id=m-docscontributing><span>Contributing</span></a>
<ul class="ul-2 foldable">
<li class="td-sidebar-nav__section-title td-sidebar-nav__section without-child collapse" id=m-docscontributingformattingtips-li>
<a href=/docs/contributing/formattingtips/ class="align-left pl-0 td-sidebar-link td-sidebar-link__page" id=m-docscontributingformattingtips><span>Formatting tips</span></a>
</li><li class="td-sidebar-nav__section-title td-sidebar-nav__section without-child collapse" id=m-docscontributingforkandpr-li>
<a href=/docs/contributing/forkandpr/ class="align-left pl-0 td-sidebar-link td-sidebar-link__page" id=m-docscontributingforkandpr><span>Guide to Fork & PR</span></a>
</li><li class="td-sidebar-nav__section-title td-sidebar-nav__section with-child collapse" id=m-docscontributingtemplates-li>
<a href=/docs/contributing/templates/ class="align-left pl-0 td-sidebar-link td-sidebar-link__section" id=m-docscontributingtemplates><span>Templates</span></a>
<ul class="ul-3 foldable">
<li class="td-sidebar-nav__section-title td-sidebar-nav__section without-child collapse" id=m-docscontributingtemplatesguidelines-li>
<a href=/docs/contributing/templates/guidelines/ class="align-left pl-0 td-sidebar-link td-sidebar-link__page" id=m-docscontributingtemplatesguidelines><span>Title of the Guideline</span></a>
</li><li class="td-sidebar-nav__section-title td-sidebar-nav__section without-child collapse" id=m-docscontributingtemplatespatterns-li>
<a href=/docs/contributing/templates/patterns/ class="align-left pl-0 td-sidebar-link td-sidebar-link__page" id=m-docscontributingtemplatespatterns><span>Title of the pattern</span></a>
</li>
</ul>
</li><li class="td-sidebar-nav__section-title td-sidebar-nav__section without-child collapse" id=m-docscontributingtheapprovalprocess-li>
<a href=/docs/contributing/theapprovalprocess/ class="align-left pl-0 td-sidebar-link td-sidebar-link__page" id=m-docscontributingtheapprovalprocess><span>Understanding the Approval Process</span></a>
</li>
</ul>
</li>
</ul>
</li>
</ul>
</nav>
</div>
</aside>
<aside class="d-none d-xl-block col-xl-2 td-sidebar-toc d-print-none">
<div class="td-page-meta ml-2 pb-1 pt-2 mb-0">
<a href=https://github.com/microsoft/alguidelines/tree/master/content/en/docs/NAVPatterns/patterns/queries/use-queries-to-replace-nested-loops/index.md class=td-page-meta--view target=_blank rel=noopener><i class="fa fa-file-alt fa-fw"></i> View page source</a>
<a href=https://github.com/microsoft/alguidelines/edit/master/content/en/docs/NAVPatterns/patterns/queries/use-queries-to-replace-nested-loops/index.md class=td-page-meta--edit target=_blank rel=noopener><i class="fa fa-edit fa-fw"></i> Edit this page</a>
<a href="https://github.com/microsoft/alguidelines/new/master/content/en/docs/NAVPatterns/patterns/queries/use-queries-to-replace-nested-loops/index.md?filename=change-me.md&value=---%0Atitle%3A+%22Long+Page+Title%22%0AlinkTitle%3A+%22Short+Nav+Title%22%0Aweight%3A+100%0Adescription%3A+%3E-%0A+++++Page+description+for+heading+and+indexes.%0A---%0A%0A%23%23+Heading%0A%0AEdit+this+template+to+create+your+new+page.%0A%0A%2A+Give+it+a+good+name%2C+ending+in+%60.md%60+-+e.g.+%60getting-started.md%60%0A%2A+Edit+the+%22front+matter%22+section+at+the+top+of+the+page+%28weight+controls+how+its+ordered+amongst+other+pages+in+the+same+directory%3B+lowest+number+first%29.%0A%2A+Add+a+good+commit+message+at+the+bottom+of+the+page+%28%3C80+characters%3B+use+the+extended+description+field+for+more+detail%29.%0A%2A+Create+a+new+branch+so+you+can+preview+your+new+file+and+request+a+review+via+Pull+Request.%0A" class=td-page-meta--child target=_blank rel=noopener><i class="fa fa-edit fa-fw"></i> Create child page</a>
<a href="https://github.com/microsoft/alguidelines/issues/new?title=Use%20Queries%20to%20Replace%20Nested%20Loops" class=td-page-meta--issue target=_blank rel=noopener><i class="fab fa-github fa-fw"></i> Create documentation issue</a>
<a href=https://github.com/microsoft/alguidelines/issues/new class=td-page-meta--project-issue target=_blank rel=noopener><i class="fas fa-tasks fa-fw"></i> Create project issue</a>
</div>
<div class=td-toc><nav id=TableOfContents>
<ul>
<li><a href=#abstract>Abstract</a>
<ul>
<li><a href=#description>Description</a></li>
<li><a href=#usage>Usage</a></li>
<li><a href=#nav-specific-examples>NAV Specific Examples</a></li>
<li><a href=#ideas-for-improvement>Ideas for Improvement</a></li>
</ul>
</li>
</ul>
</nav></div>
<div class="taxonomy taxonomy-terms-cloud taxo-tags">
<h5 class=taxonomy-title>Tag Cloud</h5>
<ul class=taxonomy-terms>
<li><a class=taxonomy-term href=https://alguidelines.dev/tags/c/al/ data-taxonomy-term=c/al><span class=taxonomy-label>C/AL</span><span class=taxonomy-count>1</span></a></li>
<li><a class=taxonomy-term href=https://alguidelines.dev/tags/interface/ data-taxonomy-term=interface><span class=taxonomy-label>Interface</span><span class=taxonomy-count>1</span></a></li>
<li><a class=taxonomy-term href=https://alguidelines.dev/tags/nav/ data-taxonomy-term=nav><span class=taxonomy-label>NAV</span><span class=taxonomy-count>1</span></a></li>
<li><a class=taxonomy-term href=https://alguidelines.dev/tags/performance/ data-taxonomy-term=performance><span class=taxonomy-label>Performance</span><span class=taxonomy-count>2</span></a></li>
<li><a class=taxonomy-term href=https://alguidelines.dev/tags/readability/ data-taxonomy-term=readability><span class=taxonomy-label>Readability</span><span class=taxonomy-count>18</span></a></li>
</ul>
</div>
<div class="taxonomy taxonomy-terms-cloud taxo-categories">
<h5 class=taxonomy-title>Categories</h5>
<ul class=taxonomy-terms>
<li><a class=taxonomy-term href=https://alguidelines.dev/categories/archived-pattern/ data-taxonomy-term=archived-pattern><span class=taxonomy-label>Archived Pattern</span><span class=taxonomy-count>1</span></a></li>
<li><a class=taxonomy-term href=https://alguidelines.dev/categories/best-practice/ data-taxonomy-term=best-practice><span class=taxonomy-label>Best Practice</span><span class=taxonomy-count>20</span></a></li>
<li><a class=taxonomy-term href=https://alguidelines.dev/categories/pattern/ data-taxonomy-term=pattern><span class=taxonomy-label>Pattern</span><span class=taxonomy-count>3</span></a></li>
</ul>
</div>
</aside>
<main class="col-12 col-md-9 col-xl-8 pl-md-5" role=main>
<nav aria-label=breadcrumb class=td-breadcrumbs>
<ol class=breadcrumb>
<li class=breadcrumb-item>
<a href=https://alguidelines.dev/docs/>Docs</a>
</li>
<li class=breadcrumb-item>
<a href=https://alguidelines.dev/docs/navpatterns/>NAV Patterns Archive</a>
</li>
<li class=breadcrumb-item>
<a href=https://alguidelines.dev/docs/navpatterns/patterns/>Patterns</a>
</li>
<li class=breadcrumb-item>
<a href=https://alguidelines.dev/docs/navpatterns/patterns/queries/>Queries</a>
</li>
<li class="breadcrumb-item active" aria-current=page>
<a href=https://alguidelines.dev/docs/navpatterns/patterns/queries/use-queries-to-replace-nested-loops/>Use Queries to Replace Nested Loops</a>
</li>
</ol>
</nav>
<div class=td-content>
<h1>Use Queries to Replace Nested Loops</h1>
<header class=article-meta>
</header>
<p><em>Originally by Bogdan Sturzoiu, Microsoft Development Center Copenhagen</em></p>
<h2 id=abstract>Abstract</h2>
<p>This pattern shows how the new query object type introduced in NAV 2013 allows you to replace costly loops when inspecting data from two or more tables.</p>
<h3 id=description>Description</h3>
<p>One of the core operations in a relational database is joining two or more tables. For example, you might need to extract all sales lines in the database together with information regarding the related sales header. This requires joining the Sales Header and Sales Line tables using Sales Header No. as the connecting field.;</p>
<p>The join operation has traditionally been done in C/AL by record looping. When NAV 2013 introduced the query object, it allowed us to produce a data set that is the result of a join operation between two or more tables. This simplifies the problem of finding related records in two tables linked through a foreign key.</p>
<h4 id=pattern-elements>Pattern Elements</h4>
<ol>
<li>Two or more tables that contain records linked through a foreign key: Table 1, Table 2, Table n.</li>
<li>A query object Query X, that joins Table 1, Table 2, etc. based on the connecting key.</li>
<li>A processing codeunit that loops through the query records (or any other code-bearing object).</li>
</ol>
<h4 id=pattern-steps>Pattern Steps</h4>
<ol>
<li>Run the query on the connected tables.</li>
<li>Loop through the records returned by the query.</li>
<li>Process the records.</li>
</ol>
<p><a href=5040.clip_5F00_image002.png><img src=5040.clip_5F00_image002.png alt=" "></a></p>
<p><em>Figure 1. The pattern elements</em></p>
<h3 id=usage>Usage</h3>
<h4 id=sample-problem>Sample Problem</h4>
<p>The Bank Acc. Reconciliation Line table (274) and the Bank Account Ledger Entry table (271) are connected through the Bank Account No. field. Identify the matching pairs of records based on having the same remaining amount and transaction date.</p>
<h4 id=solution-using-nested-loops>Solution Using Nested Loops</h4>
<p>The classic C/AL approach is to:</p>
<ol>
<li>Set the necessary filters on the left table, i.e. table 274.</li>
<li>Loop through the filtered records.</li>
<li>For each record in the filter, find the related records in the right table (table 271) and set the required filters on it.</li>
<li>For each pair of records from the left and right table, decide if they are a solution and if so, apply them to each other.</li>
</ol>
<div class=highlight><pre tabindex=0 style=background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4><code class=language-al data-lang=al><span style=color:#204a87;font-weight:700>PROCEDURE</span><span style=color:#f8f8f8;text-decoration:underline> </span>MatchSingle@<span style=color:#0000cf;font-weight:700>5</span><span style=color:#ce5c00;font-weight:700>(</span>BankAccReconciliation@<span style=color:#0000cf;font-weight:700>1003</span><span style=color:#f8f8f8;text-decoration:underline> </span><span style=color:#000;font-weight:700>:</span><span style=color:#f8f8f8;text-decoration:underline> </span><span style=color:#204a87;font-weight:700>Record</span><span style=color:#f8f8f8;text-decoration:underline> </span><span style=color:#0000cf;font-weight:700>273</span><span style=color:#ce5c00;font-weight:700>)</span><span style=color:#000;font-weight:700>;</span><span style=color:#f8f8f8;text-decoration:underline>
</span><span style=color:#f8f8f8;text-decoration:underline></span><span style=color:#204a87;font-weight:700>VAR</span><span style=color:#f8f8f8;text-decoration:underline>
</span><span style=color:#f8f8f8;text-decoration:underline> </span>BankAccRecLine@<span style=color:#0000cf;font-weight:700>1005</span><span style=color:#f8f8f8;text-decoration:underline> </span><span style=color:#000;font-weight:700>:</span><span style=color:#f8f8f8;text-decoration:underline> </span><span style=color:#204a87;font-weight:700>Record</span><span style=color:#f8f8f8;text-decoration:underline> </span><span style=color:#0000cf;font-weight:700>274</span><span style=color:#000;font-weight:700>;</span><span style=color:#f8f8f8;text-decoration:underline>
</span><span style=color:#f8f8f8;text-decoration:underline> </span>BankAccLedgerEntry@<span style=color:#0000cf;font-weight:700>1006</span><span style=color:#f8f8f8;text-decoration:underline> </span><span style=color:#000;font-weight:700>:</span><span style=color:#f8f8f8;text-decoration:underline> </span><span style=color:#204a87;font-weight:700>Record</span><span style=color:#f8f8f8;text-decoration:underline> </span><span style=color:#0000cf;font-weight:700>271</span><span style=color:#000;font-weight:700>;</span><span style=color:#f8f8f8;text-decoration:underline>
</span><span style=color:#f8f8f8;text-decoration:underline> </span>BankAccEntrySetReconNo@<span style=color:#0000cf;font-weight:700>1007</span><span style=color:#f8f8f8;text-decoration:underline> </span><span style=color:#000;font-weight:700>:</span><span style=color:#f8f8f8;text-decoration:underline> </span><span style=color:#204a87;font-weight:700>Codeunit</span><span style=color:#f8f8f8;text-decoration:underline> </span><span style=color:#0000cf;font-weight:700>375</span><span style=color:#000;font-weight:700>;</span><span style=color:#f8f8f8;text-decoration:underline>
</span><span style=color:#f8f8f8;text-decoration:underline></span><span style=color:#204a87;font-weight:700>BEGIN</span><span style=color:#f8f8f8;text-decoration:underline>
</span><span style=color:#f8f8f8;text-decoration:underline> </span>BankAccRecLine<span style=color:#ce5c00;font-weight:700>.</span>SETRANGE<span style=color:#ce5c00;font-weight:700>(</span>&#34;Bank Account No.&#34;<span style=color:#000;font-weight:700>,</span>BankAccReconciliation<span style=color:#ce5c00;font-weight:700>.</span>&#34;Bank Account No.&#34;<span style=color:#ce5c00;font-weight:700>)</span><span style=color:#000;font-weight:700>;</span><span style=color:#f8f8f8;text-decoration:underline>
</span><span style=color:#f8f8f8;text-decoration:underline> </span>BankAccRecLine<span style=color:#ce5c00;font-weight:700>.</span>SETRANGE<span style=color:#ce5c00;font-weight:700>(</span>&#34;Statement No.&#34;<span style=color:#000;font-weight:700>,</span>BankAccReconciliation<span style=color:#ce5c00;font-weight:700>.</span>&#34;Statement No.&#34;<span style=color:#ce5c00;font-weight:700>)</span><span style=color:#000;font-weight:700>;</span><span style=color:#f8f8f8;text-decoration:underline>
</span><span style=color:#f8f8f8;text-decoration:underline> </span>BankAccRecLine<span style=color:#ce5c00;font-weight:700>.</span>SETFILTER<span style=color:#ce5c00;font-weight:700>(</span>Difference<span style=color:#000;font-weight:700>,</span><span style=color:#4e9a06>&#39;&lt;&gt;%1&#39;</span><span style=color:#000;font-weight:700>,</span><span style=color:#0000cf;font-weight:700>0</span><span style=color:#ce5c00;font-weight:700>)</span><span style=color:#000;font-weight:700>;</span><span style=color:#f8f8f8;text-decoration:underline>
</span><span style=color:#f8f8f8;text-decoration:underline> </span>BankAccRecLine<span style=color:#ce5c00;font-weight:700>.</span>SETRANGE<span style=color:#ce5c00;font-weight:700>(</span><span style=color:#204a87;font-weight:700>Type</span><span style=color:#000;font-weight:700>,</span>BankAccRecLine<span style=color:#ce5c00;font-weight:700>.</span><span style=color:#204a87;font-weight:700>Type</span><span style=color:#000;font-weight:700>::</span>&#34;Bank Account Ledger Entry&#34;<span style=color:#ce5c00;font-weight:700>)</span><span style=color:#000;font-weight:700>;</span><span style=color:#f8f8f8;text-decoration:underline>
</span><span style=color:#f8f8f8;text-decoration:underline>
</span><span style=color:#f8f8f8;text-decoration:underline> </span><span style=color:#204a87;font-weight:700>IF</span><span style=color:#f8f8f8;text-decoration:underline> </span>BankAccRecLine<span style=color:#ce5c00;font-weight:700>.</span>FINDSET<span style=color:#f8f8f8;text-decoration:underline> </span><span style=color:#204a87;font-weight:700>THEN</span><span style=color:#f8f8f8;text-decoration:underline>
</span><span style=color:#f8f8f8;text-decoration:underline> </span><span style=color:#204a87;font-weight:700>REPEAT</span><span style=color:#f8f8f8;text-decoration:underline>
</span><span style=color:#f8f8f8;text-decoration:underline> </span>BankAccLedgerEntry<span style=color:#ce5c00;font-weight:700>.</span>SETRANGE<span style=color:#ce5c00;font-weight:700>(</span>&#34;Bank Account No.&#34;<span style=color:#000;font-weight:700>,</span>BankAccRecLine<span style=color:#ce5c00;font-weight:700>.</span>&#34;Bank Account No.&#34;<span style=color:#ce5c00;font-weight:700>)</span><span style=color:#000;font-weight:700>;</span><span style=color:#f8f8f8;text-decoration:underline>
</span><span style=color:#f8f8f8;text-decoration:underline> </span>BankAccLedgerEntry<span style=color:#ce5c00;font-weight:700>.</span>SETRANGE<span style=color:#ce5c00;font-weight:700>(</span>Open<span style=color:#000;font-weight:700>,</span>TRUE<span style=color:#ce5c00;font-weight:700>)</span><span style=color:#000;font-weight:700>;</span><span style=color:#f8f8f8;text-decoration:underline>
</span><span style=color:#f8f8f8;text-decoration:underline> </span>BankAccLedgerEntry<span style=color:#ce5c00;font-weight:700>.</span>SETRANGE<span style=color:#ce5c00;font-weight:700>(</span>&#34;Statement Status&#34;<span style=color:#000;font-weight:700>,</span>BankAccLedgerEntry<span style=color:#ce5c00;font-weight:700>.</span>&#34;Statement Status&#34;<span style=color:#000;font-weight:700>::</span>Open<span style=color:#ce5c00;font-weight:700>)</span><span style=color:#000;font-weight:700>;</span><span style=color:#f8f8f8;text-decoration:underline>
</span><span style=color:#f8f8f8;text-decoration:underline> </span>BankAccLedgerEntry<span style=color:#ce5c00;font-weight:700>.</span>SETFILTER<span style=color:#ce5c00;font-weight:700>(</span>&#34;Remaining Amount&#34;<span style=color:#000;font-weight:700>,</span><span style=color:#4e9a06>&#39;&lt;&gt;%1&#39;</span><span style=color:#000;font-weight:700>,</span><span style=color:#0000cf;font-weight:700>0</span><span style=color:#ce5c00;font-weight:700>)</span><span style=color:#000;font-weight:700>;</span><span style=color:#f8f8f8;text-decoration:underline>
</span><span style=color:#f8f8f8;text-decoration:underline> </span><span style=color:#204a87;font-weight:700>IF</span><span style=color:#f8f8f8;text-decoration:underline> </span>BankAccLedgerEntry<span style=color:#ce5c00;font-weight:700>.</span>FINDSET<span style=color:#f8f8f8;text-decoration:underline> </span><span style=color:#204a87;font-weight:700>THEN</span><span style=color:#f8f8f8;text-decoration:underline>
</span><span style=color:#f8f8f8;text-decoration:underline> </span><span style=color:#204a87;font-weight:700>REPEAT</span><span style=color:#f8f8f8;text-decoration:underline>
</span><span style=color:#f8f8f8;text-decoration:underline> </span><span style=color:#204a87;font-weight:700>IF</span><span style=color:#f8f8f8;text-decoration:underline> </span><span style=color:#ce5c00;font-weight:700>(</span>BankAccRecLine<span style=color:#ce5c00;font-weight:700>.</span>Difference<span style=color:#f8f8f8;text-decoration:underline> </span>=<span style=color:#f8f8f8;text-decoration:underline> </span>BankAccLedgerEntry<span style=color:#ce5c00;font-weight:700>.</span>&#34;Remaining Amount&#34;<span style=color:#ce5c00;font-weight:700>) </span><span style=color:#204a87;font-weight:700>AND</span><span style=color:#f8f8f8;text-decoration:underline>
</span><span style=color:#f8f8f8;text-decoration:underline> </span><span style=color:#ce5c00;font-weight:700>(</span>BankAccRecLine<span style=color:#ce5c00;font-weight:700>.</span>&#34;Transaction Date&#34;<span style=color:#f8f8f8;text-decoration:underline> </span>=<span style=color:#f8f8f8;text-decoration:underline> </span>BankAccLedgerEntry<span style=color:#ce5c00;font-weight:700>.</span>&#34;Posting Date&#34;<span style=color:#ce5c00;font-weight:700>) </span><span style=color:#204a87;font-weight:700>THEN</span><span style=color:#f8f8f8;text-decoration:underline>
</span><span style=color:#f8f8f8;text-decoration:underline> </span>BankAccEntrySetReconNo<span style=color:#ce5c00;font-weight:700>.</span>ApplyEntries<span style=color:#ce5c00;font-weight:700>(
</span><span style=color:#ce5c00;font-weight:700> </span>BankAccRecLine<span style=color:#000;font-weight:700>,</span>BankAccLedgerEntry<span style=color:#000;font-weight:700>,</span><span style=color:#f8f8f8;text-decoration:underline> </span>Relation<span style=color:#000;font-weight:700>::</span>&#34;One-to-One&#34;<span style=color:#ce5c00;font-weight:700>)</span><span style=color:#000;font-weight:700>;</span><span style=color:#f8f8f8;text-decoration:underline>
</span><span style=color:#f8f8f8;text-decoration:underline> </span><span style=color:#204a87;font-weight:700>UNTIL</span><span style=color:#f8f8f8;text-decoration:underline> </span>BankAccLedgerEntry<span style=color:#ce5c00;font-weight:700>.</span>NEXT<span style=color:#f8f8f8;text-decoration:underline> </span>=<span style=color:#f8f8f8;text-decoration:underline> </span><span style=color:#0000cf;font-weight:700>0</span><span style=color:#000;font-weight:700>;</span><span style=color:#f8f8f8;text-decoration:underline>
</span><span style=color:#f8f8f8;text-decoration:underline> </span><span style=color:#204a87;font-weight:700>UNTIL</span><span style=color:#f8f8f8;text-decoration:underline> </span>BankAccRecLine<span style=color:#ce5c00;font-weight:700>.</span>NEXT<span style=color:#f8f8f8;text-decoration:underline> </span>=<span style=color:#f8f8f8;text-decoration:underline> </span><span style=color:#0000cf;font-weight:700>0</span><span style=color:#000;font-weight:700>;</span><span style=color:#f8f8f8;text-decoration:underline>
</span><span style=color:#f8f8f8;text-decoration:underline></span><span style=color:#204a87;font-weight:700>END</span><span style=color:#000;font-weight:700>;</span><span style=color:#f8f8f8;text-decoration:underline>
</span></code></pre></div><p><strong>Solution Using Query</strong></p>
<p>The new query-based approach involves:</p>
<ol>
<li>Define a query that returns the full filtered join of tables 271 and 274.</li>
<li>Loop through the records returned by the query.</li>
<li>For each query record, decide if it represents a solution and then connect the two table records that formed it through an application.</li>
</ol>
<div class=highlight><pre tabindex=0 style=background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4><code class=language-al data-lang=al><span style=color:#204a87;font-weight:700>PROCEDURE</span><span style=color:#f8f8f8;text-decoration:underline> </span>MatchSingle@<span style=color:#0000cf;font-weight:700>5</span><span style=color:#ce5c00;font-weight:700>(</span>BankAccReconciliation@<span style=color:#0000cf;font-weight:700>1003</span><span style=color:#f8f8f8;text-decoration:underline> </span><span style=color:#000;font-weight:700>:</span><span style=color:#f8f8f8;text-decoration:underline> </span><span style=color:#204a87;font-weight:700>Record</span><span style=color:#f8f8f8;text-decoration:underline> </span><span style=color:#0000cf;font-weight:700>273</span><span style=color:#ce5c00;font-weight:700>)</span><span style=color:#000;font-weight:700>;</span><span style=color:#f8f8f8;text-decoration:underline>
</span><span style=color:#f8f8f8;text-decoration:underline></span><span style=color:#204a87;font-weight:700>VAR</span><span style=color:#f8f8f8;text-decoration:underline>
</span><span style=color:#f8f8f8;text-decoration:underline> </span>BankRecMatchCandidates@<span style=color:#0000cf;font-weight:700>1001</span><span style=color:#f8f8f8;text-decoration:underline> </span><span style=color:#000;font-weight:700>:</span><span style=color:#f8f8f8;text-decoration:underline> </span><span style=color:#204a87;font-weight:700>Query</span><span style=color:#f8f8f8;text-decoration:underline> </span><span style=color:#0000cf;font-weight:700>1252</span><span style=color:#000;font-weight:700>;</span><span style=color:#f8f8f8;text-decoration:underline>
</span><span style=color:#f8f8f8;text-decoration:underline> </span>BankAccEntrySetReconNo@<span style=color:#0000cf;font-weight:700>1007</span><span style=color:#f8f8f8;text-decoration:underline> </span><span style=color:#000;font-weight:700>:</span><span style=color:#f8f8f8;text-decoration:underline> </span><span style=color:#204a87;font-weight:700>Codeunit</span><span style=color:#f8f8f8;text-decoration:underline> </span><span style=color:#0000cf;font-weight:700>375</span><span style=color:#000;font-weight:700>;</span><span style=color:#f8f8f8;text-decoration:underline>
</span><span style=color:#f8f8f8;text-decoration:underline></span><span style=color:#204a87;font-weight:700>BEGIN</span><span style=color:#f8f8f8;text-decoration:underline>
</span><span style=color:#f8f8f8;text-decoration:underline> </span>BankRecMatchCandidates<span style=color:#ce5c00;font-weight:700>.</span>SETRANGE<span style=color:#ce5c00;font-weight:700>(</span>Rec_Line_Bank_Account_No<span style=color:#000;font-weight:700>,</span><span style=color:#f8f8f8;text-decoration:underline>
</span><span style=color:#f8f8f8;text-decoration:underline> </span>BankAccReconciliation<span style=color:#ce5c00;font-weight:700>.</span>&#34;Bank Account No.&#34;<span style=color:#ce5c00;font-weight:700>)</span><span style=color:#000;font-weight:700>;</span><span style=color:#f8f8f8;text-decoration:underline>
</span><span style=color:#f8f8f8;text-decoration:underline> </span>BankRecMatchCandidates<span style=color:#ce5c00;font-weight:700>.</span>SETRANGE<span style=color:#ce5c00;font-weight:700>(</span>Rec_Line_Statement_No<span style=color:#000;font-weight:700>,</span><span style=color:#f8f8f8;text-decoration:underline>
</span><span style=color:#f8f8f8;text-decoration:underline> </span>BankAccReconciliation<span style=color:#ce5c00;font-weight:700>.</span>&#34;Statement No.&#34;<span style=color:#ce5c00;font-weight:700>)</span><span style=color:#000;font-weight:700>;</span><span style=color:#f8f8f8;text-decoration:underline>
</span><span style=color:#f8f8f8;text-decoration:underline>
</span><span style=color:#f8f8f8;text-decoration:underline> </span><span style=color:#204a87;font-weight:700>IF</span><span style=color:#f8f8f8;text-decoration:underline> </span><span style=color:#204a87;font-weight:700>NOT</span><span style=color:#f8f8f8;text-decoration:underline> </span>BankRecMatchCandidates<span style=color:#ce5c00;font-weight:700>.</span>OPEN<span style=color:#f8f8f8;text-decoration:underline> </span><span style=color:#204a87;font-weight:700>THEN</span><span style=color:#f8f8f8;text-decoration:underline>
</span><span style=color:#f8f8f8;text-decoration:underline> </span><span style=color:#204a87;font-weight:700>EXIT</span><span style=color:#000;font-weight:700>;</span><span style=color:#f8f8f8;text-decoration:underline>
</span><span style=color:#f8f8f8;text-decoration:underline>
</span><span style=color:#f8f8f8;text-decoration:underline> </span><span style=color:#204a87;font-weight:700>WHILE</span><span style=color:#f8f8f8;text-decoration:underline> </span>BankRecMatchCandidates<span style=color:#ce5c00;font-weight:700>.</span>READ<span style=color:#f8f8f8;text-decoration:underline> </span><span style=color:#204a87;font-weight:700>DO</span><span style=color:#f8f8f8;text-decoration:underline> </span><span style=color:#204a87;font-weight:700>BEGIN</span><span style=color:#f8f8f8;text-decoration:underline>
</span><span style=color:#f8f8f8;text-decoration:underline> </span>BankAccLedgerEntry<span style=color:#ce5c00;font-weight:700>.</span>GET<span style=color:#ce5c00;font-weight:700>(</span>BankRecMatchCandidates<span style=color:#ce5c00;font-weight:700>.</span>Entry_No<span style=color:#ce5c00;font-weight:700>)</span><span style=color:#000;font-weight:700>;</span><span style=color:#f8f8f8;text-decoration:underline>
</span><span style=color:#f8f8f8;text-decoration:underline> </span>BankAccRecLine<span style=color:#ce5c00;font-weight:700>.</span>GET<span style=color:#ce5c00;font-weight:700>(</span>BankAccRecLine<span style=color:#ce5c00;font-weight:700>.</span>&#34;Statement Type&#34;<span style=color:#000;font-weight:700>::</span>&#34;Bank Reconciliation&#34;<span style=color:#000;font-weight:700>,</span><span style=color:#f8f8f8;text-decoration:underline>
</span><span style=color:#f8f8f8;text-decoration:underline> </span>BankRecMatchCandidates<span style=color:#ce5c00;font-weight:700>.</span>Rec_Line_Bank_Account_No<span style=color:#000;font-weight:700>,</span><span style=color:#f8f8f8;text-decoration:underline>
</span><span style=color:#f8f8f8;text-decoration:underline> </span>BankRecMatchCandidates<span style=color:#ce5c00;font-weight:700>.</span>Rec_Line_Statement_No<span style=color:#000;font-weight:700>,</span><span style=color:#f8f8f8;text-decoration:underline>
</span><span style=color:#f8f8f8;text-decoration:underline> </span>BankRecMatchCandidates<span style=color:#ce5c00;font-weight:700>.</span>Rec_Line_Statement_Line_No<span style=color:#ce5c00;font-weight:700>)</span><span style=color:#000;font-weight:700>;</span><span style=color:#f8f8f8;text-decoration:underline>
</span><span style=color:#f8f8f8;text-decoration:underline> </span>BankAccEntrySetReconNo<span style=color:#ce5c00;font-weight:700>.</span>ApplyEntries<span style=color:#ce5c00;font-weight:700>(</span>BankAccRecLine<span style=color:#000;font-weight:700>,</span>BankAccLedgerEntry<span style=color:#000;font-weight:700>,</span><span style=color:#f8f8f8;text-decoration:underline>
</span><span style=color:#f8f8f8;text-decoration:underline> </span>Relation<span style=color:#000;font-weight:700>::</span>&#34;One-to-One&#34;<span style=color:#ce5c00;font-weight:700>)</span><span style=color:#000;font-weight:700>;</span><span style=color:#f8f8f8;text-decoration:underline>
</span><span style=color:#f8f8f8;text-decoration:underline> </span><span style=color:#204a87;font-weight:700>END</span><span style=color:#000;font-weight:700>;</span><span style=color:#f8f8f8;text-decoration:underline>
</span><span style=color:#f8f8f8;text-decoration:underline></span><span style=color:#204a87;font-weight:700>END</span><span style=color:#000;font-weight:700>;</span><span style=color:#f8f8f8;text-decoration:underline>
</span></code></pre></div><p>where the query 1252 is defined as:</p>
<div class=highlight><pre tabindex=0 style=background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4><code class=language-al data-lang=al>OBJECT<span style=color:#f8f8f8;text-decoration:underline> </span><span style=color:#204a87;font-weight:700>Query</span><span style=color:#f8f8f8;text-decoration:underline> </span><span style=color:#0000cf;font-weight:700>1252</span><span style=color:#f8f8f8;text-decoration:underline> </span>Bank<span style=color:#f8f8f8;text-decoration:underline> </span>Rec<span style=color:#ce5c00;font-weight:700>. </span>Match<span style=color:#f8f8f8;text-decoration:underline> </span>Candidates<span style=color:#f8f8f8;text-decoration:underline>
</span><span style=color:#f8f8f8;text-decoration:underline></span>{<span style=color:#f8f8f8;text-decoration:underline>
</span><span style=color:#f8f8f8;text-decoration:underline> </span>OBJECT<span style=color:#ce5c00;font-weight:700>-</span>PROPERTIES<span style=color:#f8f8f8;text-decoration:underline>
</span><span style=color:#f8f8f8;text-decoration:underline> </span>{<span style=color:#f8f8f8;text-decoration:underline>
</span><span style=color:#f8f8f8;text-decoration:underline> </span><span style=color:#204a87;font-weight:700>Date</span>=<span style=color:#000;font-weight:700>;</span><span style=color:#f8f8f8;text-decoration:underline>
</span><span style=color:#f8f8f8;text-decoration:underline> </span><span style=color:#204a87;font-weight:700>Time</span>=<span style=color:#000;font-weight:700>;</span><span style=color:#f8f8f8;text-decoration:underline>
</span><span style=color:#f8f8f8;text-decoration:underline> </span><span style=color:#204a87;font-weight:700>Version</span><span style=color:#f8f8f8;text-decoration:underline> </span><span style=color:#204a87;font-weight:700>List</span>=<span style=color:#000;font-weight:700>;</span><span style=color:#f8f8f8;text-decoration:underline>
</span><span style=color:#f8f8f8;text-decoration:underline> </span>}<span style=color:#f8f8f8;text-decoration:underline>
</span><span style=color:#f8f8f8;text-decoration:underline> </span>PROPERTIES<span style=color:#f8f8f8;text-decoration:underline>
</span><span style=color:#f8f8f8;text-decoration:underline> </span>{<span style=color:#f8f8f8;text-decoration:underline>
</span><span style=color:#f8f8f8;text-decoration:underline> </span>}<span style=color:#f8f8f8;text-decoration:underline>
</span><span style=color:#f8f8f8;text-decoration:underline> </span><span style=color:#204a87;font-weight:700>ELEMENTS</span><span style=color:#f8f8f8;text-decoration:underline>
</span><span style=color:#f8f8f8;text-decoration:underline> </span>{<span style=color:#f8f8f8;text-decoration:underline>
</span><span style=color:#f8f8f8;text-decoration:underline> </span>{<span style=color:#f8f8f8;text-decoration:underline> </span><span style=color:#0000cf;font-weight:700>1</span><span style=color:#f8f8f8;text-decoration:underline> </span><span style=color:#000;font-weight:700>;</span><span style=color:#f8f8f8;text-decoration:underline> </span><span style=color:#000;font-weight:700>;</span><span style=color:#204a87;font-weight:700>DataItem</span><span style=color:#000;font-weight:700>;</span><span style=color:#f8f8f8;text-decoration:underline> </span><span style=color:#000;font-weight:700>;</span><span style=color:#f8f8f8;text-decoration:underline>
</span><span style=color:#f8f8f8;text-decoration:underline> </span>DataItemTable=Table274<span style=color:#000;font-weight:700>;</span><span style=color:#f8f8f8;text-decoration:underline>
</span><span style=color:#f8f8f8;text-decoration:underline> </span>DataItemTableFilter=Difference=<span style=color:#204a87;font-weight:700>FILTER</span><span style=color:#ce5c00;font-weight:700>(</span>&lt;&gt;<span style=color:#0000cf;font-weight:700>0</span><span style=color:#ce5c00;font-weight:700>)</span><span style=color:#000;font-weight:700>,</span><span style=color:#f8f8f8;text-decoration:underline>
</span><span style=color:#f8f8f8;text-decoration:underline> </span><span style=color:#204a87;font-weight:700>Type</span>=<span style=color:#204a87;font-weight:700>FILTER</span><span style=color:#ce5c00;font-weight:700>(</span>=Bank<span style=color:#f8f8f8;text-decoration:underline> </span>Account<span style=color:#f8f8f8;text-decoration:underline> </span>Ledger<span style=color:#f8f8f8;text-decoration:underline> </span>Entry<span style=color:#ce5c00;font-weight:700>) </span>}<span style=color:#f8f8f8;text-decoration:underline>
</span><span style=color:#f8f8f8;text-decoration:underline> </span>{<span style=color:#f8f8f8;text-decoration:underline> </span><span style=color:#0000cf;font-weight:700>2</span><span style=color:#f8f8f8;text-decoration:underline> </span><span style=color:#000;font-weight:700>;</span><span style=color:#0000cf;font-weight:700>1</span><span style=color:#f8f8f8;text-decoration:underline> </span><span style=color:#000;font-weight:700>;</span><span style=color:#204a87;font-weight:700>Column</span><span style=color:#f8f8f8;text-decoration:underline> </span><span style=color:#000;font-weight:700>;</span>Rec_Line_Bank_Account_No<span style=color:#000;font-weight:700>;</span><span style=color:#f8f8f8;text-decoration:underline>
</span><span style=color:#f8f8f8;text-decoration:underline> </span>DataSource=Bank<span style=color:#f8f8f8;text-decoration:underline> </span>Account<span style=color:#f8f8f8;text-decoration:underline> </span>No<span style=color:#ce5c00;font-weight:700>. </span>}<span style=color:#f8f8f8;text-decoration:underline>
</span><span style=color:#f8f8f8;text-decoration:underline> </span>{<span style=color:#f8f8f8;text-decoration:underline> </span><span style=color:#0000cf;font-weight:700>3</span><span style=color:#f8f8f8;text-decoration:underline> </span><span style=color:#000;font-weight:700>;</span><span style=color:#0000cf;font-weight:700>1</span><span style=color:#f8f8f8;text-decoration:underline> </span><span style=color:#000;font-weight:700>;</span><span style=color:#204a87;font-weight:700>Column</span><span style=color:#f8f8f8;text-decoration:underline> </span><span style=color:#000;font-weight:700>;</span>Rec_Line_Statement_No<span style=color:#000;font-weight:700>;</span><span style=color:#f8f8f8;text-decoration:underline>
</span><span style=color:#f8f8f8;text-decoration:underline> </span>DataSource=Statement<span style=color:#f8f8f8;text-decoration:underline> </span>No<span style=color:#ce5c00;font-weight:700>. </span>}<span style=color:#f8f8f8;text-decoration:underline>
</span><span style=color:#f8f8f8;text-decoration:underline> </span>{<span style=color:#f8f8f8;text-decoration:underline> </span><span style=color:#0000cf;font-weight:700>4</span><span style=color:#f8f8f8;text-decoration:underline> </span><span style=color:#000;font-weight:700>;</span><span style=color:#0000cf;font-weight:700>1</span><span style=color:#f8f8f8;text-decoration:underline> </span><span style=color:#000;font-weight:700>;</span><span style=color:#204a87;font-weight:700>Column</span><span style=color:#f8f8f8;text-decoration:underline> </span><span style=color:#000;font-weight:700>;</span>Rec_Line_Statement_Line_No<span style=color:#000;font-weight:700>;</span><span style=color:#f8f8f8;text-decoration:underline>
</span><span style=color:#f8f8f8;text-decoration:underline> </span>DataSource=Statement<span style=color:#f8f8f8;text-decoration:underline> </span>Line<span style=color:#f8f8f8;text-decoration:underline> </span>No<span style=color:#ce5c00;font-weight:700>. </span>}<span style=color:#f8f8f8;text-decoration:underline>
</span><span style=color:#f8f8f8;text-decoration:underline> </span>{<span style=color:#f8f8f8;text-decoration:underline> </span><span style=color:#0000cf;font-weight:700>5</span><span style=color:#f8f8f8;text-decoration:underline> </span><span style=color:#000;font-weight:700>;</span><span style=color:#0000cf;font-weight:700>1</span><span style=color:#f8f8f8;text-decoration:underline> </span><span style=color:#000;font-weight:700>;</span><span style=color:#204a87;font-weight:700>Column</span><span style=color:#f8f8f8;text-decoration:underline> </span><span style=color:#000;font-weight:700>;</span>Rec_Line_Transaction_Date<span style=color:#000;font-weight:700>;</span><span style=color:#f8f8f8;text-decoration:underline>
</span><span style=color:#f8f8f8;text-decoration:underline> </span>DataSource=Transaction<span style=color:#f8f8f8;text-decoration:underline> </span><span style=color:#204a87;font-weight:700>Date</span><span style=color:#f8f8f8;text-decoration:underline> </span>}<span style=color:#f8f8f8;text-decoration:underline>
</span><span style=color:#f8f8f8;text-decoration:underline> </span>{<span style=color:#f8f8f8;text-decoration:underline> </span><span style=color:#0000cf;font-weight:700>6</span><span style=color:#f8f8f8;text-decoration:underline> </span><span style=color:#000;font-weight:700>;</span><span style=color:#0000cf;font-weight:700>1</span><span style=color:#f8f8f8;text-decoration:underline> </span><span style=color:#000;font-weight:700>;</span><span style=color:#204a87;font-weight:700>Column</span><span style=color:#f8f8f8;text-decoration:underline> </span><span style=color:#000;font-weight:700>;</span>Rec_Line_Difference<span style=color:#f8f8f8;text-decoration:underline> </span><span style=color:#000;font-weight:700>;</span><span style=color:#f8f8f8;text-decoration:underline>
</span><span style=color:#f8f8f8;text-decoration:underline> </span>DataSource=Difference<span style=color:#f8f8f8;text-decoration:underline> </span>}<span style=color:#f8f8f8;text-decoration:underline>
</span><span style=color:#f8f8f8;text-decoration:underline> </span>{<span style=color:#f8f8f8;text-decoration:underline> </span><span style=color:#0000cf;font-weight:700>7</span><span style=color:#f8f8f8;text-decoration:underline> </span><span style=color:#000;font-weight:700>;</span><span style=color:#0000cf;font-weight:700>1</span><span style=color:#f8f8f8;text-decoration:underline> </span><span style=color:#000;font-weight:700>;</span><span style=color:#204a87;font-weight:700>DataItem</span><span style=color:#000;font-weight:700>;</span><span style=color:#f8f8f8;text-decoration:underline> </span><span style=color:#000;font-weight:700>;</span><span style=color:#f8f8f8;text-decoration:underline>
</span><span style=color:#f8f8f8;text-decoration:underline> </span>DataItemTable=Table271<span style=color:#000;font-weight:700>;</span><span style=color:#f8f8f8;text-decoration:underline>
</span><span style=color:#f8f8f8;text-decoration:underline> </span>DataItemTableFilter=Remaining<span style=color:#f8f8f8;text-decoration:underline> </span>Amount=<span style=color:#204a87;font-weight:700>FILTER</span><span style=color:#ce5c00;font-weight:700>(</span>&lt;&gt;<span style=color:#0000cf;font-weight:700>0</span><span style=color:#ce5c00;font-weight:700>)</span><span style=color:#000;font-weight:700>,</span><span style=color:#f8f8f8;text-decoration:underline>
</span><span style=color:#f8f8f8;text-decoration:underline> </span>Open=<span style=color:#204a87;font-weight:700>CONST</span><span style=color:#ce5c00;font-weight:700>(</span>Yes<span style=color:#ce5c00;font-weight:700>)</span><span style=color:#000;font-weight:700>,</span><span style=color:#f8f8f8;text-decoration:underline>
</span><span style=color:#f8f8f8;text-decoration:underline> </span>Statement<span style=color:#f8f8f8;text-decoration:underline> </span>Status=<span style=color:#204a87;font-weight:700>FILTER</span><span style=color:#ce5c00;font-weight:700>(</span>Open<span style=color:#ce5c00;font-weight:700>)</span><span style=color:#000;font-weight:700>;</span><span style=color:#f8f8f8;text-decoration:underline>
</span><span style=color:#f8f8f8;text-decoration:underline> </span>DataItemLink=Bank<span style=color:#f8f8f8;text-decoration:underline> </span>Account<span style=color:#f8f8f8;text-decoration:underline> </span>No<span style=color:#ce5c00;font-weight:700>.</span>=Bank_Acc_Reconciliation_Line<span style=color:#ce5c00;font-weight:700>.</span>&#34;Bank Account o.&#34;<span style=color:#000;font-weight:700>,</span><span style=color:#f8f8f8;text-decoration:underline>
</span><span style=color:#f8f8f8;text-decoration:underline> </span>Remaining<span style=color:#f8f8f8;text-decoration:underline> </span>Amount=Bank_Acc_Reconciliation_Line<span style=color:#ce5c00;font-weight:700>.</span>Difference<span style=color:#000;font-weight:700>,</span><span style=color:#f8f8f8;text-decoration:underline>
</span><span style=color:#f8f8f8;text-decoration:underline> </span>Posting<span style=color:#f8f8f8;text-decoration:underline> </span><span style=color:#204a87;font-weight:700>Date</span>=Bank_Acc_Reconciliation_Line<span style=color:#ce5c00;font-weight:700>.</span>&#34;Transaction Date&#34;<span style=color:#f8f8f8;text-decoration:underline> </span>}<span style=color:#f8f8f8;text-decoration:underline>
</span><span style=color:#f8f8f8;text-decoration:underline> </span>{<span style=color:#f8f8f8;text-decoration:underline> </span><span style=color:#0000cf;font-weight:700>8</span><span style=color:#f8f8f8;text-decoration:underline> </span><span style=color:#000;font-weight:700>;</span><span style=color:#0000cf;font-weight:700>2</span><span style=color:#f8f8f8;text-decoration:underline> </span><span style=color:#000;font-weight:700>;</span><span style=color:#204a87;font-weight:700>Column</span><span style=color:#f8f8f8;text-decoration:underline> </span><span style=color:#000;font-weight:700>;</span><span style=color:#f8f8f8;text-decoration:underline> </span><span style=color:#000;font-weight:700>;</span><span style=color:#f8f8f8;text-decoration:underline>
</span><span style=color:#f8f8f8;text-decoration:underline> </span>DataSource=Entry<span style=color:#f8f8f8;text-decoration:underline> </span>No<span style=color:#ce5c00;font-weight:700>. </span>}<span style=color:#f8f8f8;text-decoration:underline>
</span><span style=color:#f8f8f8;text-decoration:underline> </span>{<span style=color:#f8f8f8;text-decoration:underline> </span><span style=color:#0000cf;font-weight:700>9</span><span style=color:#f8f8f8;text-decoration:underline> </span><span style=color:#000;font-weight:700>;</span><span style=color:#0000cf;font-weight:700>2</span><span style=color:#f8f8f8;text-decoration:underline> </span><span style=color:#000;font-weight:700>;</span><span style=color:#204a87;font-weight:700>Column</span><span style=color:#f8f8f8;text-decoration:underline> </span><span style=color:#000;font-weight:700>;</span>Bank_Account_No<span style=color:#f8f8f8;text-decoration:underline> </span><span style=color:#000;font-weight:700>;</span><span style=color:#f8f8f8;text-decoration:underline>
</span><span style=color:#f8f8f8;text-decoration:underline> </span>DataSource=Bank<span style=color:#f8f8f8;text-decoration:underline> </span>Account<span style=color:#f8f8f8;text-decoration:underline> </span>No<span style=color:#ce5c00;font-weight:700>. </span>}<span style=color:#f8f8f8;text-decoration:underline>
</span><span style=color:#f8f8f8;text-decoration:underline> </span>{<span style=color:#f8f8f8;text-decoration:underline> </span><span style=color:#0000cf;font-weight:700>10</span><span style=color:#f8f8f8;text-decoration:underline> </span><span style=color:#000;font-weight:700>;</span><span style=color:#0000cf;font-weight:700>2</span><span style=color:#f8f8f8;text-decoration:underline> </span><span style=color:#000;font-weight:700>;</span><span style=color:#204a87;font-weight:700>Column</span><span style=color:#f8f8f8;text-decoration:underline> </span><span style=color:#000;font-weight:700>;</span><span style=color:#f8f8f8;text-decoration:underline> </span><span style=color:#000;font-weight:700>;</span><span style=color:#f8f8f8;text-decoration:underline>
</span><span style=color:#f8f8f8;text-decoration:underline> </span>DataSource=Posting<span style=color:#f8f8f8;text-decoration:underline> </span><span style=color:#204a87;font-weight:700>Date</span><span style=color:#f8f8f8;text-decoration:underline> </span>}<span style=color:#f8f8f8;text-decoration:underline>
</span><span style=color:#f8f8f8;text-decoration:underline> </span>{<span style=color:#f8f8f8;text-decoration:underline> </span><span style=color:#0000cf;font-weight:700>11</span><span style=color:#f8f8f8;text-decoration:underline> </span><span style=color:#000;font-weight:700>;</span><span style=color:#0000cf;font-weight:700>2</span><span style=color:#f8f8f8;text-decoration:underline> </span><span style=color:#000;font-weight:700>;</span><span style=color:#204a87;font-weight:700>Column</span><span style=color:#f8f8f8;text-decoration:underline> </span><span style=color:#000;font-weight:700>;</span><span style=color:#f8f8f8;text-decoration:underline> </span><span style=color:#000;font-weight:700>;</span><span style=color:#f8f8f8;text-decoration:underline>
</span><span style=color:#f8f8f8;text-decoration:underline> </span>DataSource=Remaining<span style=color:#f8f8f8;text-decoration:underline> </span>Amount<span style=color:#f8f8f8;text-decoration:underline> </span>}<span style=color:#f8f8f8;text-decoration:underline>
</span><span style=color:#f8f8f8;text-decoration:underline> </span>{<span style=color:#f8f8f8;text-decoration:underline> </span><span style=color:#0000cf;font-weight:700>12</span><span style=color:#f8f8f8;text-decoration:underline> </span><span style=color:#000;font-weight:700>;</span><span style=color:#0000cf;font-weight:700>2</span><span style=color:#f8f8f8;text-decoration:underline> </span><span style=color:#000;font-weight:700>;</span><span style=color:#204a87;font-weight:700>Column</span><span style=color:#f8f8f8;text-decoration:underline> </span><span style=color:#000;font-weight:700>;</span>Bank_Ledger_Entry_Open<span style=color:#000;font-weight:700>;</span><span style=color:#f8f8f8;text-decoration:underline>
</span><span style=color:#f8f8f8;text-decoration:underline> </span>DataSource=Open<span style=color:#f8f8f8;text-decoration:underline> </span>}<span style=color:#f8f8f8;text-decoration:underline>
</span><span style=color:#f8f8f8;text-decoration:underline> </span>{<span style=color:#f8f8f8;text-decoration:underline> </span><span style=color:#0000cf;font-weight:700>13</span><span style=color:#f8f8f8;text-decoration:underline> </span><span style=color:#000;font-weight:700>;</span><span style=color:#0000cf;font-weight:700>2</span><span style=color:#f8f8f8;text-decoration:underline> </span><span style=color:#000;font-weight:700>;</span><span style=color:#204a87;font-weight:700>Column</span><span style=color:#f8f8f8;text-decoration:underline> </span><span style=color:#000;font-weight:700>;</span><span style=color:#f8f8f8;text-decoration:underline> </span><span style=color:#000;font-weight:700>;</span><span style=color:#f8f8f8;text-decoration:underline>
</span><span style=color:#f8f8f8;text-decoration:underline> </span>DataSource=Statement<span style=color:#f8f8f8;text-decoration:underline> </span>Status<span style=color:#f8f8f8;text-decoration:underline> </span>}<span style=color:#f8f8f8;text-decoration:underline>
</span><span style=color:#f8f8f8;text-decoration:underline> </span>}<span style=color:#f8f8f8;text-decoration:underline>
</span><span style=color:#f8f8f8;text-decoration:underline> </span><span style=color:#204a87;font-weight:700>CODE</span><span style=color:#f8f8f8;text-decoration:underline>
</span><span style=color:#f8f8f8;text-decoration:underline> </span>{<span style=color:#f8f8f8;text-decoration:underline>
</span><span style=color:#f8f8f8;text-decoration:underline> </span><span style=color:#204a87;font-weight:700>BEGIN</span><span style=color:#f8f8f8;text-decoration:underline>
</span><span style=color:#f8f8f8;text-decoration:underline> </span><span style=color:#204a87;font-weight:700>END</span><span style=color:#ce5c00;font-weight:700>.
</span><span style=color:#ce5c00;font-weight:700> </span>}<span style=color:#f8f8f8;text-decoration:underline>
</span></code></pre></div><p>When comparing the two implementations, we notice the following advantages of using a query instead of two loops:Comparison</p>
<ol>
<li>A query produces the Cartesian product of tables 1 and 2 faster than by looping through both of them. The advantage grows as there are more tables linked.</li>
</ol>
<p>The query object leverages the power of SQL Server (as it basically executes a SQL query directly against the database server), and as such it only requires one trip to the database to fetch the data, instead of getting the related records on the right side of the join one by one.</p>
<ol>
<li>A query is scalable in the sense that it allows reusing its definition by applying filters when looping through its dataset. So a generic query can be reused for a variety of purposes just by adapting the filters to the programming need. Duplicating traditional record loops in different functions, on the other side, requires extensive code copy-pasting, which can introduce code defects.</li>
<li>Using a query only requires one loop, whereas joining two or more tables requires multiple code loops that quickly become difficult to read and follow.</li>
<li>Queries are easy to create and maintain and generally provide a cleaner design.</li>
</ol>
<h3 id=nav-specific-examples>NAV Specific Examples</h3>
<p>In Microsoft Dynamics NAV 2013 R2, we can see the query object used in the bank account reconciliation matching algorithm. The object is query Bank Rec. Match Candidates query (1252), and it is called by the matching engine in the Match Bank Rec. Lines codeunit (1252).</p>
<h3 id=ideas-for-improvement>Ideas for Improvement</h3>
<p>The query object type could be improved to allow the passing of parameters at runtime, or, in general, being built dynamically at runtime. This will remove the need for multiple static definitions of the same base query used in slightly different contexts.</p>
<div class="text-muted mt-5 pt-3 border-top">
Last modified February 20, 2022: <a href=https://github.com/microsoft/alguidelines/commit/cceb0c945e0383599f497350ca254d5755edda65>Restructure for Docsy theme (cceb0c94)</a>
</div>
</div>
</main>
</div>
</div>
<footer class="bg-dark py-5 row d-print-none">
<div class="container-fluid mx-sm-5">
<div class=row>
<div class="col-6 col-sm-4 text-xs-center order-sm-2">
<ul class="list-inline mb-0">
<li class="list-inline-item mx-2 h3" data-toggle=tooltip data-placement=top title=GitHub aria-label=GitHub>
<a class=text-white target=_blank rel=noopener href=https://github.com/microsoft/alguidelines aria-label=GitHub>
<i class="fab fa-github"></i>
</a>
</li>
<li class="list-inline-item mx-2 h3" data-toggle=tooltip data-placement=top title=Twitter aria-label=Twitter>
<a class=text-white target=_blank rel=noopener href="https://twitter.com/search?q=%23bcalhelp" aria-label=Twitter>
<i class="fab fa-twitter"></i>
</a>
</li>
<li class="list-inline-item mx-2 h3" data-toggle=tooltip data-placement=top title=Discord aria-label=Discord>
<a class=text-white target=_blank rel=noopener href=https://discord.gg/4wbfNv3 aria-label=Discord>
<i class="fab fa-discord"></i>
</a>
</li>
</ul>
</div>
<div class="col-6 col-sm-4 text-right text-xs-center order-sm-3">
</div>
<div class="col-12 col-sm-4 text-center py-2 order-sm-2">
<small class=text-white>&copy; 2022 alguidelines.dev Project All Rights Reserved</small>
</div>
</div>
</div>
</footer>
</div>
<script src=https://cdn.jsdelivr.net/npm/popper.js@1.16.1/dist/umd/popper.min.js integrity=sha384-9/reFTGAW83EW2RDu2S0VKaIzap3H66lZH81PoYlFhbGU+6BZp6G7niu735Sk7lN crossorigin=anonymous></script>
<script src=https://cdn.jsdelivr.net/npm/bootstrap@4.6.1/dist/js/bootstrap.min.js integrity="sha512-UR25UO94eTnCVwjbXozyeVd6ZqpaAE9naiEUBK/A+QDbfSTQFhPGj5lOR6d8tsgbBk84Ggb5A3EkjsOgPRPcKA==" crossorigin=anonymous></script>
<script src=/js/tabpane-persist.js></script>
<script src=/js/main.min.46b25eb30e292e80e9e18facc285e194199cf26288c5a1735cda89fb827eba54.js integrity="sha256-RrJesw4pLoDp4Y+swoXhlBmc8mKIxaFzXNqJ+4J+ulQ=" crossorigin=anonymous></script>
</body>
</html>