397 lines
No EOL
43 KiB
HTML
397 lines
No EOL
43 KiB
HTML
<!doctype html><html lang=en class="js csstransforms3d">
|
|
<head>
|
|
<meta charset=utf-8>
|
|
<meta name=viewport content="width=device-width,initial-scale=1">
|
|
<meta name=generator content="Hugo 0.89.2">
|
|
<meta name=description content>
|
|
<title>Feature Localization For Data Structures :: AL Guidelines</title>
|
|
<link href=/css/nucleus.css?1636617172 rel=stylesheet>
|
|
<link href=/css/fontawesome-all.min.css?1636617172 rel=stylesheet>
|
|
<link href=/css/featherlight.min.css?1636617172 rel=stylesheet>
|
|
<link href=/css/perfect-scrollbar.min.css?1636617172 rel=stylesheet>
|
|
<link href=/css/auto-complete.css?1636617172 rel=stylesheet>
|
|
<link href=/css/theme.css?1636617172 rel=stylesheet>
|
|
<link href=/css/theme-blue.css?1636617172 rel=stylesheet>
|
|
<link href=/css/variant.css?1636617172 rel=stylesheet>
|
|
<link href=/css/print.css?1636617172 rel=stylesheet media=print>
|
|
<script src=/js/jquery.min.js?1636617172></script>
|
|
<style>:root #header+#content>#left>#rlblock_left{display:none!important}</style>
|
|
</head>
|
|
<body data-url=/navpatterns/1-patterns/feature-localization-for-data-structures/>
|
|
<script>var index_url="/index.json",root_url="/",baseUri=root_url.replace(/\/$/,'')</script>
|
|
<nav id=sidebar>
|
|
<div id=header-wrapper>
|
|
<div id=header>
|
|
<a id=logo href=/ style="color:#f5f5f5;font-family:novacento sans wide,helvetica,tahoma,geneva,arial,sans-serif;font-size:30px;font-weight:700;margin-top:-2px">
|
|
ALGuidelines.dev
|
|
</a>
|
|
<i style=color:#f5f5f5>Code is Poetry</i>
|
|
</div>
|
|
<div class=searchbox>
|
|
<label for=search-by><i class="fas fa-search"></i></label>
|
|
<input data-search-input id=search-by type=search placeholder=Search...>
|
|
<span data-search-clear><i class="fas fa-times"></i></span>
|
|
</div>
|
|
<script src=/js/lunr.min.js?1636617172></script>
|
|
<script src=/js/auto-complete.js?1636617172></script>
|
|
<script src=/js/search.js?1636617172></script>
|
|
</div>
|
|
<div class=highlightable>
|
|
<ul class=topics>
|
|
<li data-nav-id=/welcome/ title=Welcome class=dd-item><a href=/welcome/><b><i class="fas fa-home"></i> </b>Welcome</a><ul></ul></li>
|
|
<li data-nav-id=/bcpatterns/ title="BC Patterns" class=dd-item><a href=/bcpatterns/><b><i class="fas fa-clone"></i> </b>BC Patterns</a><ul></ul></li>
|
|
<li data-nav-id=/bcbestpractices/ title="BC Dev. Best Practices" class=dd-item><a href=/bcbestpractices/><b><i class="fas fa-medal"></i> </b>BC Dev. Best Practices</a><ul></ul></li>
|
|
<li data-nav-id=/navpatterns/ title="NAV Patterns Archive" class="dd-item parent"><a href=/navpatterns/><b><i class="fas fa-save"></i> </b>NAV Patterns Archive</a><ul>
|
|
<li data-nav-id=/navpatterns/1-patterns/ title="1. Patterns" class="dd-item parent"><a href=/navpatterns/1-patterns/>1. Patterns</a><ul>
|
|
<li data-nav-id=/navpatterns/1-patterns/activity-log/ title="Activity Logs" class=dd-item><a href=/navpatterns/1-patterns/activity-log/>Activity Logs</a></li>
|
|
<li data-nav-id=/navpatterns/1-patterns/argument-table/ title="Argument Table" class=dd-item><a href=/navpatterns/1-patterns/argument-table/>Argument Table</a></li>
|
|
<li data-nav-id=/navpatterns/1-patterns/blocked-entity/ title="Blocked Entity" class=dd-item><a href=/navpatterns/1-patterns/blocked-entity/>Blocked Entity</a><ul>
|
|
<li data-nav-id=/navpatterns/1-patterns/blocked-entity/data-driven-blocked-entity/ title="Data Driven Blocked Entity" class=dd-item><a href=/navpatterns/1-patterns/blocked-entity/data-driven-blocked-entity/>Data Driven Blocked Entity</a></li></ul></li>
|
|
<li data-nav-id=/navpatterns/1-patterns/cached-web-service-calls/ title="Cached Web Server Calls" class=dd-item><a href=/navpatterns/1-patterns/cached-web-service-calls/>Cached Web Server Calls</a></li>
|
|
<li data-nav-id=/navpatterns/1-patterns/conditional-cascading-update/ title="Conditional Cascading Update" class=dd-item><a href=/navpatterns/1-patterns/conditional-cascading-update/>Conditional Cascading Update</a></li>
|
|
<li data-nav-id=/navpatterns/1-patterns/copy-document/ title="Copy Document" class=dd-item><a href=/navpatterns/1-patterns/copy-document/>Copy Document</a></li>
|
|
<li data-nav-id=/navpatterns/1-patterns/create-data-from-templates/ title="Create Data from Templates" class=dd-item><a href=/navpatterns/1-patterns/create-data-from-templates/>Create Data from Templates</a></li>
|
|
<li data-nav-id=/navpatterns/1-patterns/create-urls-to-nav-clients/ title="Create URLs to NAV Clients" class=dd-item><a href=/navpatterns/1-patterns/create-urls-to-nav-clients/>Create URLs to NAV Clients</a></li>
|
|
<li data-nav-id=/navpatterns/1-patterns/creating-custom-charts/ title="Creating Custom Charts" class=dd-item><a href=/navpatterns/1-patterns/creating-custom-charts/>Creating Custom Charts</a></li>
|
|
<li data-nav-id=/navpatterns/1-patterns/cross-session-events/ title="Cross Session Events" class=dd-item><a href=/navpatterns/1-patterns/cross-session-events/>Cross Session Events</a></li>
|
|
<li data-nav-id=/navpatterns/1-patterns/currently-active-record/ title="Currently Active Record" class=dd-item><a href=/navpatterns/1-patterns/currently-active-record/>Currently Active Record</a></li>
|
|
<li data-nav-id=/navpatterns/1-patterns/data-migration-facade/ title="Data Migration Facade" class=dd-item><a href=/navpatterns/1-patterns/data-migration-facade/>Data Migration Facade</a></li>
|
|
<li data-nav-id=/navpatterns/1-patterns/discovery-event/ title="Discovery Event" class=dd-item><a href=/navpatterns/1-patterns/discovery-event/>Discovery Event</a></li>
|
|
<li data-nav-id=/navpatterns/1-patterns/document/ title=Document class=dd-item><a href=/navpatterns/1-patterns/document/>Document</a></li>
|
|
<li data-nav-id=/navpatterns/1-patterns/easy-update-of-setup-or-supplementary-information/ title="Easy Update Of Setup Or Supplementary Information" class=dd-item><a href=/navpatterns/1-patterns/easy-update-of-setup-or-supplementary-information/>Easy Update Of Setup Or Supplementary Information</a></li>
|
|
<li data-nav-id=/navpatterns/1-patterns/error-message-processing/ title="Error Message Processing" class=dd-item><a href=/navpatterns/1-patterns/error-message-processing/>Error Message Processing</a></li>
|
|
<li data-nav-id=/navpatterns/1-patterns/extending-the-role-center-headlines/ title="Extending the Role Center Headlines" class=dd-item><a href=/navpatterns/1-patterns/extending-the-role-center-headlines/>Extending the Role Center Headlines</a></li>
|
|
<li data-nav-id=/navpatterns/1-patterns/feature-localization-for-data-structures/ title="Feature Localization For Data Structures" class="dd-item active"><a href=/navpatterns/1-patterns/feature-localization-for-data-structures/>Feature Localization For Data Structures</a></li>
|
|
<li data-nav-id=/navpatterns/1-patterns/hooks/ title=Hooks class=dd-item><a href=/navpatterns/1-patterns/hooks/>Hooks</a></li>
|
|
<li data-nav-id=/navpatterns/1-patterns/implementation-of-surrogate-keys-using-autoincrement-pattern/ title="Surrogate keys using Autoincrement Pattern" class=dd-item><a href=/navpatterns/1-patterns/implementation-of-surrogate-keys-using-autoincrement-pattern/>Surrogate keys using Autoincrement Pattern</a></li>
|
|
<li data-nav-id=/navpatterns/1-patterns/instructions-in-the-ui/ title="Instructions in the UI" class=dd-item><a href=/navpatterns/1-patterns/instructions-in-the-ui/>Instructions in the UI</a></li>
|
|
<li data-nav-id=/navpatterns/1-patterns/integration-of-addresses/ title="Integration of Addresses" class=dd-item><a href=/navpatterns/1-patterns/integration-of-addresses/>Integration of Addresses</a></li>
|
|
<li data-nav-id=/navpatterns/1-patterns/journal-error-processing/ title="Journal Error Processing" class=dd-item><a href=/navpatterns/1-patterns/journal-error-processing/>Journal Error Processing</a></li>
|
|
<li data-nav-id=/navpatterns/1-patterns/journal-template-batch-line/ title="Journal Template Batch Line" class=dd-item><a href=/navpatterns/1-patterns/journal-template-batch-line/>Journal Template Batch Line</a></li>
|
|
<li data-nav-id=/navpatterns/1-patterns/master-data/ title="Master Data" class=dd-item><a href=/navpatterns/1-patterns/master-data/>Master Data</a></li>
|
|
<li data-nav-id=/navpatterns/1-patterns/multi-file-download/ title="Multi-file Download" class=dd-item><a href=/navpatterns/1-patterns/multi-file-download/>Multi-file Download</a></li>
|
|
<li data-nav-id=/navpatterns/1-patterns/multi-page-list/ title="Multi-Page List" class=dd-item><a href=/navpatterns/1-patterns/multi-page-list/>Multi-Page List</a></li>
|
|
<li data-nav-id=/navpatterns/1-patterns/multilanguage-application-data/ title="Multilanguage Application Data" class=dd-item><a href=/navpatterns/1-patterns/multilanguage-application-data/>Multilanguage Application Data</a></li>
|
|
<li data-nav-id=/navpatterns/1-patterns/net-exception-handling-in-cal/ title="NET Exception Handling in CAL" class=dd-item><a href=/navpatterns/1-patterns/net-exception-handling-in-cal/>NET Exception Handling in CAL</a><ul>
|
|
<li data-nav-id=/navpatterns/1-patterns/net-exception-handling-in-cal/tryfunction-net-exception-handling-in-cal/ title="TryFunction NET Exception Handling in CAL" class=dd-item><a href=/navpatterns/1-patterns/net-exception-handling-in-cal/tryfunction-net-exception-handling-in-cal/>TryFunction NET Exception Handling in CAL</a></li></ul></li>
|
|
<li data-nav-id=/navpatterns/1-patterns/no-series/ title="No Series" class=dd-item><a href=/navpatterns/1-patterns/no-series/>No Series</a></li>
|
|
<li data-nav-id=/navpatterns/1-patterns/notifications/ title=Notifications class=dd-item><a href=/navpatterns/1-patterns/notifications/>Notifications</a><ul>
|
|
<li data-nav-id=/navpatterns/1-patterns/notifications/in-context-notifications/ title="In-context Notifications" class=dd-item><a href=/navpatterns/1-patterns/notifications/in-context-notifications/>In-context Notifications</a></li>
|
|
<li data-nav-id=/navpatterns/1-patterns/notifications/notification-lifecycle-management-pattern/ title="Notification Lifecycle Management Pattern" class=dd-item><a href=/navpatterns/1-patterns/notifications/notification-lifecycle-management-pattern/>Notification Lifecycle Management Pattern</a></li></ul></li>
|
|
<li data-nav-id=/navpatterns/1-patterns/observer/ title=Observer class=dd-item><a href=/navpatterns/1-patterns/observer/>Observer</a></li>
|
|
<li data-nav-id=/navpatterns/1-patterns/posting-routine-select-behavior/ title="Posting Routine - Select Behavior" class=dd-item><a href=/navpatterns/1-patterns/posting-routine-select-behavior/>Posting Routine - Select Behavior</a></li>
|
|
<li data-nav-id=/navpatterns/1-patterns/product-name/ title="Product Name" class=dd-item><a href=/navpatterns/1-patterns/product-name/>Product Name</a></li>
|
|
<li data-nav-id=/navpatterns/1-patterns/queries/ title=Queries class=dd-item><a href=/navpatterns/1-patterns/queries/>Queries</a><ul>
|
|
<li data-nav-id=/navpatterns/1-patterns/queries/select-distinct-with-queries/ title="SELECT DISTINCT with Queries" class=dd-item><a href=/navpatterns/1-patterns/queries/select-distinct-with-queries/>SELECT DISTINCT with Queries</a></li>
|
|
<li data-nav-id=/navpatterns/1-patterns/queries/use-queries-to-detect-duplicate-records/ title="use Queries to Detect Duplicate Records" class=dd-item><a href=/navpatterns/1-patterns/queries/use-queries-to-detect-duplicate-records/>use Queries to Detect Duplicate Records</a></li>
|
|
<li data-nav-id=/navpatterns/1-patterns/queries/use-queries-to-replace-nested-loops/ title="Use Queries to Replace Nested Loops" class=dd-item><a href=/navpatterns/1-patterns/queries/use-queries-to-replace-nested-loops/>Use Queries to Replace Nested Loops</a></li></ul></li>
|
|
<li data-nav-id=/navpatterns/1-patterns/read-once-initialization-and-validation/ title="Read-once Initialization and Validation" class=dd-item><a href=/navpatterns/1-patterns/read-once-initialization-and-validation/>Read-once Initialization and Validation</a></li>
|
|
<li data-nav-id=/navpatterns/1-patterns/released-entity/ title="Released Entity" class=dd-item><a href=/navpatterns/1-patterns/released-entity/>Released Entity</a></li>
|
|
<li data-nav-id=/navpatterns/1-patterns/report-selection/ title="Report Selection" class=dd-item><a href=/navpatterns/1-patterns/report-selection/>Report Selection</a></li>
|
|
<li data-nav-id=/navpatterns/1-patterns/security/ title=Security class=dd-item><a href=/navpatterns/1-patterns/security/>Security</a></li>
|
|
<li data-nav-id=/navpatterns/1-patterns/setup-specificity-fallback/ title="Setup Specificity Fallback" class=dd-item><a href=/navpatterns/1-patterns/setup-specificity-fallback/>Setup Specificity Fallback</a></li>
|
|
<li data-nav-id=/navpatterns/1-patterns/silent-file-upload-and-download/ title="Silent File Upload and Download" class=dd-item><a href=/navpatterns/1-patterns/silent-file-upload-and-download/>Silent File Upload and Download</a></li>
|
|
<li data-nav-id=/navpatterns/1-patterns/singleton/ title=Singleton class=dd-item><a href=/navpatterns/1-patterns/singleton/>Singleton</a><ul>
|
|
<li data-nav-id=/navpatterns/1-patterns/singleton/singleton-codeunit/ title="Singleton Codeunit" class=dd-item><a href=/navpatterns/1-patterns/singleton/singleton-codeunit/>Singleton Codeunit</a></li>
|
|
<li data-nav-id=/navpatterns/1-patterns/singleton/singleton-table/ title="Singleton Table" class=dd-item><a href=/navpatterns/1-patterns/singleton/singleton-table/>Singleton Table</a><ul>
|
|
<li data-nav-id=/navpatterns/1-patterns/singleton/singleton-table/cue-table/ title="Cue Table" class=dd-item><a href=/navpatterns/1-patterns/singleton/singleton-table/cue-table/>Cue Table</a></li>
|
|
<li data-nav-id=/navpatterns/1-patterns/singleton/singleton-table/setup-table/ title="Setup Table" class=dd-item><a href=/navpatterns/1-patterns/singleton/singleton-table/setup-table/>Setup Table</a></li></ul></li></ul></li>
|
|
<li data-nav-id=/navpatterns/1-patterns/standard-journal/ title="Standard Journal" class=dd-item><a href=/navpatterns/1-patterns/standard-journal/>Standard Journal</a></li>
|
|
<li data-nav-id=/navpatterns/1-patterns/temporary-dataset-report/ title="Temporary Dataset Report" class=dd-item><a href=/navpatterns/1-patterns/temporary-dataset-report/>Temporary Dataset Report</a></li>
|
|
<li data-nav-id=/navpatterns/1-patterns/totals-and-discounts-on-subpages-sales-and-purchases/ title="Totals and Discounts on Subpages Sales and Purchases" class=dd-item><a href=/navpatterns/1-patterns/totals-and-discounts-on-subpages-sales-and-purchases/>Totals and Discounts on Subpages Sales and Purchases</a></li>
|
|
<li data-nav-id=/navpatterns/1-patterns/transfer-custom-fields/ title="Transfer Custom Fields" class=dd-item><a href=/navpatterns/1-patterns/transfer-custom-fields/>Transfer Custom Fields</a></li>
|
|
<li data-nav-id=/navpatterns/1-patterns/variant-facade/ title="Variant Facade" class=dd-item><a href=/navpatterns/1-patterns/variant-facade/>Variant Facade</a></li></ul></li>
|
|
<li data-nav-id=/navpatterns/2-anti-patterns/ title="2. Anti-Patterns" class=dd-item><a href=/navpatterns/2-anti-patterns/>2. Anti-Patterns</a><ul>
|
|
<li data-nav-id=/navpatterns/2-anti-patterns/nav-upgrade/ title="Nav Upgrade" class=dd-item><a href=/navpatterns/2-anti-patterns/nav-upgrade/>Nav Upgrade</a></li>
|
|
<li data-nav-id=/navpatterns/2-anti-patterns/reusable-bugs/ title="Reusable Bugs" class=dd-item><a href=/navpatterns/2-anti-patterns/reusable-bugs/>Reusable Bugs</a></li></ul></li>
|
|
<li data-nav-id=/navpatterns/3-cal-coding-guidelines/ title="3. CAL Coding Guidelines" class=dd-item><a href=/navpatterns/3-cal-coding-guidelines/>3. CAL Coding Guidelines</a><ul>
|
|
<li data-nav-id=/navpatterns/3-cal-coding-guidelines/design/ title=Design class=dd-item><a href=/navpatterns/3-cal-coding-guidelines/design/>Design</a></li>
|
|
<li data-nav-id=/navpatterns/3-cal-coding-guidelines/internally-used-dot-net-types/ title="Internally-used DotNet Types" class=dd-item><a href=/navpatterns/3-cal-coding-guidelines/internally-used-dot-net-types/>Internally-used DotNet Types</a></li>
|
|
<li data-nav-id=/navpatterns/3-cal-coding-guidelines/internationalization/ title=Internationalization class=dd-item><a href=/navpatterns/3-cal-coding-guidelines/internationalization/>Internationalization</a><ul>
|
|
<li data-nav-id=/navpatterns/3-cal-coding-guidelines/internationalization/using-calcdate/ title="Using Calcdate" class=dd-item><a href=/navpatterns/3-cal-coding-guidelines/internationalization/using-calcdate/>Using Calcdate</a></li></ul></li>
|
|
<li data-nav-id=/navpatterns/3-cal-coding-guidelines/localizability/ title=Localizability class=dd-item><a href=/navpatterns/3-cal-coding-guidelines/localizability/>Localizability</a><ul>
|
|
<li data-nav-id=/navpatterns/3-cal-coding-guidelines/localizability/captionml-for-system-tables/ title="CaptionML on System Pages" class=dd-item><a href=/navpatterns/3-cal-coding-guidelines/localizability/captionml-for-system-tables/>CaptionML on System Pages</a></li>
|
|
<li data-nav-id=/navpatterns/3-cal-coding-guidelines/localizability/fieldcaption-and-tablecaption/ title="FIELDCAPTION and TABLECAPTION" class=dd-item><a href=/navpatterns/3-cal-coding-guidelines/localizability/fieldcaption-and-tablecaption/>FIELDCAPTION and TABLECAPTION</a></li>
|
|
<li data-nav-id=/navpatterns/3-cal-coding-guidelines/localizability/global-text-constants/ title="Global Text Constants" class=dd-item><a href=/navpatterns/3-cal-coding-guidelines/localizability/global-text-constants/>Global Text Constants</a></li>
|
|
<li data-nav-id=/navpatterns/3-cal-coding-guidelines/localizability/use-text-constants/ title="Use Text Constants" class=dd-item><a href=/navpatterns/3-cal-coding-guidelines/localizability/use-text-constants/>Use Text Constants</a></li>
|
|
<li data-nav-id=/navpatterns/3-cal-coding-guidelines/localizability/using-optioncaptionml/ title="Using OptionCaptionML" class=dd-item><a href=/navpatterns/3-cal-coding-guidelines/localizability/using-optioncaptionml/>Using OptionCaptionML</a></li></ul></li>
|
|
<li data-nav-id=/navpatterns/3-cal-coding-guidelines/readability/ title=Readability class=dd-item><a href=/navpatterns/3-cal-coding-guidelines/readability/>Readability</a><ul>
|
|
<li data-nav-id=/navpatterns/3-cal-coding-guidelines/readability/begin-as-an-afterword/ title="Begin as an 'After Word'" class=dd-item><a href=/navpatterns/3-cal-coding-guidelines/readability/begin-as-an-afterword/>Begin as an 'After Word'</a></li>
|
|
<li data-nav-id=/navpatterns/3-cal-coding-guidelines/readability/begin-end/ title="Begin-End - Compound Only" class=dd-item><a href=/navpatterns/3-cal-coding-guidelines/readability/begin-end/>Begin-End - Compound Only</a></li>
|
|
<li data-nav-id=/navpatterns/3-cal-coding-guidelines/readability/binary-operator-line-start/ title="Binary Operator to Start Line" class=dd-item><a href=/navpatterns/3-cal-coding-guidelines/readability/binary-operator-line-start/>Binary Operator to Start Line</a></li>
|
|
<li data-nav-id=/navpatterns/3-cal-coding-guidelines/readability/blank-lines/ title="Blank Lines.md" class=dd-item><a href=/navpatterns/3-cal-coding-guidelines/readability/blank-lines/>Blank Lines.md</a></li>
|
|
<li data-nav-id=/navpatterns/3-cal-coding-guidelines/readability/case-actions/ title="CASE Action" class=dd-item><a href=/navpatterns/3-cal-coding-guidelines/readability/case-actions/>CASE Action</a></li>
|
|
<li data-nav-id=/navpatterns/3-cal-coding-guidelines/readability/colon-usage-in-case/ title="Colon usage in CASE" class=dd-item><a href=/navpatterns/3-cal-coding-guidelines/readability/colon-usage-in-case/>Colon usage in CASE</a></li>
|
|
<li data-nav-id=/navpatterns/3-cal-coding-guidelines/readability/comments-curly-brackets/ title="Comments inside Curly Brackets" class=dd-item><a href=/navpatterns/3-cal-coding-guidelines/readability/comments-curly-brackets/>Comments inside Curly Brackets</a></li>
|
|
<li data-nav-id=/navpatterns/3-cal-coding-guidelines/readability/comments-spacing/ title="Comment Spacing" class=dd-item><a href=/navpatterns/3-cal-coding-guidelines/readability/comments-spacing/>Comment Spacing</a></li>
|
|
<li data-nav-id=/navpatterns/3-cal-coding-guidelines/readability/end-else-pair/ title="END ELSE Pair" class=dd-item><a href=/navpatterns/3-cal-coding-guidelines/readability/end-else-pair/>END ELSE Pair</a></li>
|
|
<li data-nav-id=/navpatterns/3-cal-coding-guidelines/readability/indentation/ title=Indentation class=dd-item><a href=/navpatterns/3-cal-coding-guidelines/readability/indentation/>Indentation</a></li>
|
|
<li data-nav-id=/navpatterns/3-cal-coding-guidelines/readability/keyword-pairs-indentation/ title="Keyword Pairs - Indentation" class=dd-item><a href=/navpatterns/3-cal-coding-guidelines/readability/keyword-pairs-indentation/>Keyword Pairs - Indentation</a></li>
|
|
<li data-nav-id=/navpatterns/3-cal-coding-guidelines/readability/line-start-keywords/ title="Line Start Keywords" class=dd-item><a href=/navpatterns/3-cal-coding-guidelines/readability/line-start-keywords/>Line Start Keywords</a></li>
|
|
<li data-nav-id=/navpatterns/3-cal-coding-guidelines/readability/lonely-repeat/ title="Lonely Repeat" class=dd-item><a href=/navpatterns/3-cal-coding-guidelines/readability/lonely-repeat/>Lonely Repeat</a></li>
|
|
<li data-nav-id=/navpatterns/3-cal-coding-guidelines/readability/named-invocations/ title="Named Invocations" class=dd-item><a href=/navpatterns/3-cal-coding-guidelines/readability/named-invocations/>Named Invocations</a></li>
|
|
<li data-nav-id=/navpatterns/3-cal-coding-guidelines/readability/nested-withs/ title="Nested WITHs" class=dd-item><a href=/navpatterns/3-cal-coding-guidelines/readability/nested-withs/>Nested WITHs</a></li>
|
|
<li data-nav-id=/navpatterns/3-cal-coding-guidelines/readability/one-statement-per-line/ title="One Statement Per Line" class=dd-item><a href=/navpatterns/3-cal-coding-guidelines/readability/one-statement-per-line/>One Statement Per Line</a></li>
|
|
<li data-nav-id=/navpatterns/3-cal-coding-guidelines/readability/separate-if-and-else/ title="Separate IF and ELSE" class=dd-item><a href=/navpatterns/3-cal-coding-guidelines/readability/separate-if-and-else/>Separate IF and ELSE</a></li>
|
|
<li data-nav-id=/navpatterns/3-cal-coding-guidelines/readability/spacing-binary-operators/ title="Spacing Binary Operators" class=dd-item><a href=/navpatterns/3-cal-coding-guidelines/readability/spacing-binary-operators/>Spacing Binary Operators</a></li>
|
|
<li data-nav-id=/navpatterns/3-cal-coding-guidelines/readability/spacing-brackets-and/ title="Spacing Brackets and ::" class=dd-item><a href=/navpatterns/3-cal-coding-guidelines/readability/spacing-brackets-and/>Spacing Brackets and ::</a></li>
|
|
<li data-nav-id=/navpatterns/3-cal-coding-guidelines/readability/spacing-unary-operators/ title="Spacing Unary Operators" class=dd-item><a href=/navpatterns/3-cal-coding-guidelines/readability/spacing-unary-operators/>Spacing Unary Operators</a></li>
|
|
<li data-nav-id=/navpatterns/3-cal-coding-guidelines/readability/suggested-abbreviations/ title="Suggested Abbreviations" class=dd-item><a href=/navpatterns/3-cal-coding-guidelines/readability/suggested-abbreviations/>Suggested Abbreviations</a></li>
|
|
<li data-nav-id=/navpatterns/3-cal-coding-guidelines/readability/temporary-variable-naming/ title="Temporary Variable Naming" class=dd-item><a href=/navpatterns/3-cal-coding-guidelines/readability/temporary-variable-naming/>Temporary Variable Naming</a></li>
|
|
<li data-nav-id=/navpatterns/3-cal-coding-guidelines/readability/textconst-suffixes/ title="TextConst Suffixes" class=dd-item><a href=/navpatterns/3-cal-coding-guidelines/readability/textconst-suffixes/>TextConst Suffixes</a></li>
|
|
<li data-nav-id=/navpatterns/3-cal-coding-guidelines/readability/unary-operator-line-end/ title="Unary Operator Line End" class=dd-item><a href=/navpatterns/3-cal-coding-guidelines/readability/unary-operator-line-end/>Unary Operator Line End</a></li>
|
|
<li data-nav-id=/navpatterns/3-cal-coding-guidelines/readability/unnecessary-compound-parenthesis/ title="Unnecessary Compound Parenthesis" class=dd-item><a href=/navpatterns/3-cal-coding-guidelines/readability/unnecessary-compound-parenthesis/>Unnecessary Compound Parenthesis</a></li>
|
|
<li data-nav-id=/navpatterns/3-cal-coding-guidelines/readability/unnecessary-else/ title="Unnecessary ELSE" class=dd-item><a href=/navpatterns/3-cal-coding-guidelines/readability/unnecessary-else/>Unnecessary ELSE</a></li>
|
|
<li data-nav-id=/navpatterns/3-cal-coding-guidelines/readability/unnecessary-function-parenthesis/ title="Unnecessary Function Parenthesis" class=dd-item><a href=/navpatterns/3-cal-coding-guidelines/readability/unnecessary-function-parenthesis/>Unnecessary Function Parenthesis</a></li>
|
|
<li data-nav-id=/navpatterns/3-cal-coding-guidelines/readability/unnecessary-separators/ title="Unnecessary Separators" class=dd-item><a href=/navpatterns/3-cal-coding-guidelines/readability/unnecessary-separators/>Unnecessary Separators</a></li>
|
|
<li data-nav-id=/navpatterns/3-cal-coding-guidelines/readability/unnecessary-truefalse/ title="Unnecessary TRUE/FALSE" class=dd-item><a href=/navpatterns/3-cal-coding-guidelines/readability/unnecessary-truefalse/>Unnecessary TRUE/FALSE</a></li>
|
|
<li data-nav-id=/navpatterns/3-cal-coding-guidelines/readability/variable-already-scoped/ title="Variable Already Scoped" class=dd-item><a href=/navpatterns/3-cal-coding-guidelines/readability/variable-already-scoped/>Variable Already Scoped</a></li>
|
|
<li data-nav-id=/navpatterns/3-cal-coding-guidelines/readability/variable-naming/ title="Variable Naming" class=dd-item><a href=/navpatterns/3-cal-coding-guidelines/readability/variable-naming/>Variable Naming</a></li>
|
|
<li data-nav-id=/navpatterns/3-cal-coding-guidelines/readability/variables-declarations-order/ title="Variables Declarations Order" class=dd-item><a href=/navpatterns/3-cal-coding-guidelines/readability/variables-declarations-order/>Variables Declarations Order</a></li></ul></li>
|
|
<li data-nav-id=/navpatterns/3-cal-coding-guidelines/ux/ title=UX class=dd-item><a href=/navpatterns/3-cal-coding-guidelines/ux/>UX</a><ul>
|
|
<li data-nav-id=/navpatterns/3-cal-coding-guidelines/ux/actions-images/ title="Actions - Images" class=dd-item><a href=/navpatterns/3-cal-coding-guidelines/ux/actions-images/>Actions - Images</a></li>
|
|
<li data-nav-id=/navpatterns/3-cal-coding-guidelines/ux/confirm/ title=CONFIRM class=dd-item><a href=/navpatterns/3-cal-coding-guidelines/ux/confirm/>CONFIRM</a></li>
|
|
<li data-nav-id=/navpatterns/3-cal-coding-guidelines/ux/fielderror/ title=FIELDERROR class=dd-item><a href=/navpatterns/3-cal-coding-guidelines/ux/fielderror/>FIELDERROR</a></li>
|
|
<li data-nav-id=/navpatterns/3-cal-coding-guidelines/ux/message-and-error/ title="MESSAGE and ERROR" class=dd-item><a href=/navpatterns/3-cal-coding-guidelines/ux/message-and-error/>MESSAGE and ERROR</a></li></ul></li></ul></li>
|
|
<li data-nav-id=/navpatterns/4-get-involved/ title="(OLD) Get Involved" class=dd-item><a href=/navpatterns/4-get-involved/>(OLD) Get Involved</a><ul>
|
|
<li data-nav-id=/navpatterns/4-get-involved/code-of-conduct/ title="Code of Conduct" class=dd-item><a href=/navpatterns/4-get-involved/code-of-conduct/>Code of Conduct</a></li>
|
|
<li data-nav-id=/navpatterns/4-get-involved/patterns-authors/ title="Patterns Authors" class=dd-item><a href=/navpatterns/4-get-involved/patterns-authors/>Patterns Authors</a></li>
|
|
<li data-nav-id=/navpatterns/4-get-involved/template-for-writing-nav-design-patterns/ title="Template for writing Nav Design Patterns" class=dd-item><a href=/navpatterns/4-get-involved/template-for-writing-nav-design-patterns/>Template for writing Nav Design Patterns</a></li></ul></li>
|
|
<li data-nav-id=/navpatterns/related-links/ title="Related Links" class=dd-item><a href=/navpatterns/related-links/>Related Links</a></li></ul></li>
|
|
<li data-nav-id=/contributing/ title=Contributing class=dd-item><a href=/contributing/><b><i class="fas fa-clone"></i> </b>Contributing</a><ul>
|
|
<li data-nav-id=/contributing/forkandpr/ title="Guide to Fork & PR" class=dd-item><a href=/contributing/forkandpr/><b><i class="fas fa-clone"></i> </b>Guide to Fork & PR</a></li>
|
|
<li data-nav-id=/contributing/templates/ title=Templates class=dd-item><a href=/contributing/templates/><b><i class="fas fa-clone"></i> </b>Templates</a><ul>
|
|
<li data-nav-id=/contributing/templates/guidelines/ title="Title of the Guideline" class=dd-item><a href=/contributing/templates/guidelines/>Title of the Guideline</a></li>
|
|
<li data-nav-id=/contributing/templates/patterns/ title="Title of the pattern" class=dd-item><a href=/contributing/templates/patterns/>Title of the pattern</a></li></ul></li>
|
|
<li data-nav-id=/contributing/theapprovalprocess/ title="Understanding the Approval Process" class=dd-item><a href=/contributing/theapprovalprocess/><b><i class="fas fa-clone"></i> </b>Understanding the Approval Process</a></li></ul></li>
|
|
</ul>
|
|
<div id=shortcuts>
|
|
<div class=nav-title>More</div>
|
|
<ul>
|
|
<li><a class=padding href=https://discord.gg/4wbfNv3><i class="fab fa-discord"></i> BC Discord</a></li>
|
|
<li><a class=padding href=https://github.com/microsoft/bcalhelp><i class="fab fa-github"></i> GitHub repo</a></li>
|
|
</ul>
|
|
</div>
|
|
<div id=footer>
|
|
<p>Built with <a href=https://github.com/McShelby/hugo-theme-relearn><i class="fas fa-heart"></i></a> by <a href=https://gohugo.io/>Hugo</a></p>
|
|
</div>
|
|
</div>
|
|
</nav>
|
|
<div id=body>
|
|
<div id=overlay></div>
|
|
<div class="padding highlightable">
|
|
<div id=top-bar>
|
|
<div id=top-github-link>
|
|
<a class=github-link title="Edit this page" href=https://github.com/microsoft/bcalhelp/edit/main/content/NAVPatterns/1-patterns/feature-localization-for-data-structures/index.md target=blank>
|
|
<i class="fas fa-code-branch"></i>
|
|
<span id=top-github-link-text>Edit this page</span>
|
|
</a>
|
|
</div>
|
|
<div id=breadcrumbs>
|
|
<span id=sidebar-toggle-span>
|
|
<a href=# id=sidebar-toggle data-sidebar-toggle>
|
|
<i class="fas fa-bars"></i>
|
|
</a>
|
|
</span>
|
|
<span id=toc-menu><i class="fas fa-list-alt"></i></span>
|
|
<ol class=links itemscope itemtype=http://schema.org/BreadcrumbList>
|
|
<meta itemprop=itemListOrder content="Descending">
|
|
<li itemscope itemtype=https://schema.org/ListItem itemprop=itemListElement><meta itemprop=position content="4"><a itemprop=item href=/><span itemprop=name>Home</span></a> > </li>
|
|
<li itemscope itemtype=https://schema.org/ListItem itemprop=itemListElement><meta itemprop=position content="3"><a itemprop=item href=/navpatterns/><span itemprop=name>NAV Patterns Archive</span></a> > </li>
|
|
<li itemscope itemtype=https://schema.org/ListItem itemprop=itemListElement><meta itemprop=position content="2"><a itemprop=item href=/navpatterns/1-patterns/><span itemprop=name>1. Patterns</span></a> > </li>
|
|
<li itemscope itemtype=https://schema.org/ListItem itemprop=itemListElement><meta itemprop=position content="1"><a itemprop=item href=/navpatterns/1-patterns/feature-localization-for-data-structures/ aria-disabled=true><span itemprop=name>Feature Localization For Data Structures</span></a></li>
|
|
</ol>
|
|
</div>
|
|
<div class=progress>
|
|
<div class=wrapper>
|
|
<nav id=TableOfContents>
|
|
<ul>
|
|
<li><a href=#abstract>Abstract</a></li>
|
|
<li><a href=#description>Description</a>
|
|
<ul>
|
|
<li><a href=#using-a-proxy>Using a Proxy</a></li>
|
|
<li><a href=#pattern-elements>Pattern Elements</a></li>
|
|
<li><a href=#pattern-steps>Pattern Steps</a></li>
|
|
</ul>
|
|
</li>
|
|
<li><a href=#usage>Usage</a></li>
|
|
<li><a href=#nav-usages>NAV Usages</a></li>
|
|
<li><a href=#ideas-for-improvement>Ideas for improvement</a></li>
|
|
</ul>
|
|
</nav>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
<div id=head-tags>
|
|
</div>
|
|
<main id=body-inner>
|
|
<h1>Feature Localization For Data Structures</h1>
|
|
<p><em>Originally by Bogdan Sturzoiu at Microsoft Development Center Copenhagen</em></p>
|
|
<h2 id=abstract>Abstract</h2>
|
|
<p>This pattern shows a solution for integrating W1 features to pre-existing country features that use different tables to achieve similar functionality.</p>
|
|
<h2 id=description>Description</h2>
|
|
<p>It sometimes happens that certain features are requested in a NAV-supported country, but they are not initially considered generic enough to be included in the W1 build. This is how local features, such as Subcontracting in Italy and India, were created or specific banking and payments functionality in Italy, France, Spain, and others.</p>
|
|
<p>Then, at some point in time, a decision is made to create a W1 feature that is closely related to the local functionality but uses a completely different set of tables, pages, etc. The developers now face the following problem: How to enable the newly-developed W1 feature into a country, such that the customers who are accustomed to their local structures can seamlessly continue working without completely (or immediately) switching to the W1 objects.</p>
|
|
<p>This was the issue that was tackled in the NAV 2013 R2, in relation to the SEPA Credit Transfers functionality.</p>
|
|
<h3 id=using-a-proxy>Using a Proxy</h3>
|
|
<p>The generic Proxy pattern is “a class functioning as an interface to something else” (<a href=http://en.wikipedia.org/wiki/Proxy_pattern>Wikipedia</a>).</p>
|
|
<p><a href=5123.Feature-localization-for-data-structures-1.png><img src=5123.Feature-localization-for-data-structures-1.png alt=" "></a></p>
|
|
<p>Figure 1. Proxy in UML</p>
|
|
<h3 id=pattern-elements>Pattern Elements</h3>
|
|
<p>The NAV data model translation of the proxy pattern can be used as explained below.</p>
|
|
<p>The RealSubject is the NAV data model. Variations in table structures, relationships, and numbers are particular to each country. The W1 model is the base for the country-localized data models. However, some countries have heavy localizations which cannot be directly processed by the W1 core objects.</p>
|
|
<p>The proxy is a codeunit that gathers data from wherever it is stored and transforms it to fit into a standard table, which is later used across all localizations.</p>
|
|
<p>The interface is the fixed form in which the data is presented to be consumed by the client.</p>
|
|
<p>The client can be an XML port that is fed from the common data interface. It can also be any other data processor (a codeunit fed to another table, etc.) or data display object (page or report).</p>
|
|
<h3 id=pattern-steps>Pattern Steps</h3>
|
|
<ol>
|
|
<li>
|
|
<p>The user creates records in the local tables.</p>
|
|
</li>
|
|
<li>
|
|
<p>The user invokes an action that must be processed using the W1 feature code.</p>
|
|
</li>
|
|
<li>
|
|
<p>The proxy codeunit moves the data from the local tables to the W1 tables, either into a temporary or persistent set of records, as needed.</p>
|
|
</li>
|
|
<li>
|
|
<p>The W1 code now performs the action on the W1 table data.</p>
|
|
</li>
|
|
</ol>
|
|
<h2 id=usage>Usage</h2>
|
|
<p>In NAV 2013 R2, we released the SEPA Credit Transfer functionality. It involves exporting vendor payments to an XML file that is subsequently processed by the customer’s bank. The payments are exported from the Payment Journal page through a configurable XMLport. Therefore, the data source for these payment lines is the Gen. Journal Line table (81).</p>
|
|
<p>In various countries, we already had payment export functionality, usually into flat bank files. However, the files are generated from different tables than in W1. For example, in Italy, vendor payments are handled through the Vendor Bill Header table (12181) and the Vendor Bill Line table (12182). They are the RealSubject.</p>
|
|
<p>The W1 feature flow is as follows:</p>
|
|
<p><a href=6052.Feature-localization-for-data-structures-2.png><img src=6052.Feature-localization-for-data-structures-2.png alt=" "></a></p>
|
|
<p>Figure 2. W1 object call sequence</p>
|
|
<p><strong>Note:</strong> CT = Credit Transfers, pain = payments initiation (the XML format used for SEPA Credit Transfers and SEPA Direct Debit).</p>
|
|
<p>The key question is: Where to tap into this flow when using a local data structure. For this purpose, a proxy codeunit has been added in W1, called 1222 – SEPA CT-Prepare Source. This codeunit feeds the client (XML1000) data in a standard format (the interface is the Gen. Journal Line table (81)).</p>
|
|
<p>In W1, the codeunit simply outputs the same set of general journal lines that it receives as an input:</p>
|
|
<p>OnRun(VAR Rec : Record “Gen. Journal Line”)</p>
|
|
<p>GenJnlLine.COPYFILTERS(Rec);</p>
|
|
<p>CopyJnlLines(GenJnlLine,Rec);</p>
|
|
<p>LOCAL CopyJnlLines(VAR FromGenJnlLine : Record “Gen. Journal Line”;VAR TempGenJnlLine : TEMPORARY Record “Gen. Journal Line”)</p>
|
|
<p>IF FromGenJnlLine.FINDSET THEN BEGIN</p>
|
|
<p>GenJnlBatch.GET(FromGenJnlLine.“Journal Template Name”,FromGenJnlLine.“Journal Batch Name”);</p>
|
|
<p>REPEAT</p>
|
|
<p>TempGenJnlLine := FromGenJnlLine;</p>
|
|
<p>TempGenJnlLine.INSERT;</p>
|
|
<p>UNTIL FromGenJnlLine.NEXT = 0</p>
|
|
<p>END ELSE</p>
|
|
<p>CreateTempJnlLines(FromGenJnlLine,TempGenJnlLine);</p>
|
|
<p>LOCAL CreateTempJnlLines(VAR FromGenJnlLine : Record “Gen. Journal Line”;VAR TempGenJnlLine : TEMPORARY Record “Gen. Journal Line”)</p>
|
|
<p>// To fill TempGenJnlLine from the source identified by filters set on FromGenJnlLine</p>
|
|
<p>TempGenJnlLine := FromGenJnlLine;</p>
|
|
<p>In a country, such as Italy, the codeunit will have the following functions:</p>
|
|
<ol>
|
|
<li>
|
|
<p>Gets an empty set of general journal lines that carry the local payment document key as a filter on the Document No. field (as opposed to W1 that gets the real set of records to be exported). This is done so that the local data can be extracted at runtime.</p>
|
|
</li>
|
|
<li>
|
|
<p>Selects the local payment data, for example in Italy, in the Vendor Bill Header and Vendor Bill Lines tables.</p>
|
|
</li>
|
|
<li>
|
|
<p>Transforms the local payment data into temporary records of the Gen. Journal Line table.</p>
|
|
</li>
|
|
<li>
|
|
<p>Outputs the temporary general journal lines that will be further processed and exported, exactly as in W1.</p>
|
|
</li>
|
|
</ol>
|
|
<p>OnRun(VAR Rec : Record “Gen. Journal Line”)</p>
|
|
<p>GenJnlLine.COPYFILTERS(Rec);</p>
|
|
<p>CopyJnlLines(GenJnlLine,Rec);</p>
|
|
<p>LOCAL CopyJnlLines(VAR FromGenJnlLine : Record “Gen. Journal Line”;VAR TempGenJnlLine : TEMPORARY Record “Gen. Journal Line”)</p>
|
|
<p>IF FromGenJnlLine.FINDSET THEN BEGIN</p>
|
|
<p>GenJnlBatch.GET(FromGenJnlLine.“Journal Template Name”,FromGenJnlLine.“Journal Batch Name”);</p>
|
|
<p>REPEAT</p>
|
|
<p>TempGenJnlLine := FromGenJnlLine;</p>
|
|
<p>TempGenJnlLine.INSERT;</p>
|
|
<p>UNTIL FromGenJnlLine.NEXT = 0</p>
|
|
<p>END ELSE</p>
|
|
<p>CreateTempJnlLines(FromGenJnlLine,TempGenJnlLine);</p>
|
|
<p>LOCAL CreateTempJnlLines(VAR FromGenJnlLine : Record “Gen. Journal Line”;VAR TempGenJnlLine : TEMPORARY Record “Gen. Journal Line”)</p>
|
|
<p>PaymentDocNo := FromGenJnlLine.GETFILTER(“Document No.");</p>
|
|
<p>VendorBillHeader.GET(PaymentDocNo);</p>
|
|
<p>VendorBillLine.RESET;</p>
|
|
<p>VendorBillLine.SETCURRENTKEY(“Vendor Bill List No.”,“Vendor No.”,“Due Date”,“Vendor Bank Acc. No.”,“Cumulative Transfers”);</p>
|
|
<p>VendorBillLine.SETRANGE(“Vendor Bill List No.",VendorBillHeader.“No.");</p>
|
|
<p>VendorBillLine.SETRANGE(“Cumulative Transfers”,TRUE);</p>
|
|
<p>IF VendorBillLine.FINDSET THEN BEGIN</p>
|
|
<p>CumulativeAmount := 0;</p>
|
|
<p>PrevVendorBillLine := VendorBillLine;</p>
|
|
<p>REPEAT</p>
|
|
<p>VendorBillLine.TESTFIELD(“Document Type”,VendorBillLine.“Document Type”::Invoice);</p>
|
|
<p>IF ((VendorBillLine.“Vendor No.” <> PrevVendorBillLine.“Vendor No.") OR (VendorBillLine.“Vendor Bank Acc. No.” <> PrevVendorBillLine.“Vendor Bank Acc. No.")) THEN BEGIN InsertTempGenJnlLine(TempGenJnlLine,VendorBillHeader,PrevVendorBillLine,CumulativeAmount);</p>
|
|
<p>CumulativeAmount := VendorBillLine.“Amount to Pay”;</p>
|
|
<p>END ELSE</p>
|
|
<p>CumulativeAmount += VendorBillLine.“Amount to Pay”;</p>
|
|
<p>PrevVendorBillLine := VendorBillLine;</p>
|
|
<p>UNTIL VendorBillLine.NEXT = 0; InsertTempGenJnlLine(TempGenJnlLine,VendorBillHeader,PrevVendorBillLine,CumulativeAmount);</p>
|
|
<p>END;</p>
|
|
<p>VendorBillLine.SETRANGE(“Cumulative Transfers”,FALSE);</p>
|
|
<p>IF VendorBillLine.FINDSET THEN</p>
|
|
<p>REPEAT</p>
|
|
<p>VendorBillLine.TESTFIELD(“Document Type”,VendorBillLine.“Document Type”::Invoice); InsertTempGenJnlLine(TempGenJnlLine,VendorBillHeader,VendorBillLine,VendorBillLine.“Amount to Pay”);</p>
|
|
<p>UNTIL VendorBillLine.NEXT = 0;</p>
|
|
<p>LOCAL InsertTempGenJnlLine(VAR TempGenJnlLine : TEMPORARY Record “Gen. Journal Line”;VendorBillHeader : Record “Vendor Bill Header”;VendorBillLine : Record “Vendor Bill Line”;AmountToPay : Decimal)</p>
|
|
<p>WITH TempGenJnlLine DO BEGIN</p>
|
|
<p>INIT;</p>
|
|
<p>“Journal Template Name” := ‘';</p>
|
|
<p>“Journal Batch Name” := ‘';</p>
|
|
<p>“Document Type” := “Document Type”::Payment;</p>
|
|
<p>“Document No.” := VendorBillLine.“Vendor Bill List No.";</p>
|
|
<p>“Line No.” := VendorBillLine.“Line No.";</p>
|
|
<p>“Account No.” := VendorBillLine.“Vendor No.";</p>
|
|
<p>“Account Type” := TempGenJnlLine.“Account Type”::Vendor;</p>
|
|
<p>“Bal. Account Type” := TempGenJnlLine.“Bal. Account Type”::“Bank Account”;</p>
|
|
<p>“Bal. Account No.” := VendorBillHeader.“Bank Account No.";</p>
|
|
<p>“Applies-to Ext. Doc. No.” := VendorBillLine.“External Document No.";</p>
|
|
<p>Amount := AmountToPay;</p>
|
|
<p>“Applies-to Doc. Type” := VendorBillLine.“Document Type”;</p>
|
|
<p>“Applies-to Doc. No.” := VendorBillLine.“Document No.";</p>
|
|
<p>“Currency Code” := VendorBillHeader.“Currency Code”;</p>
|
|
<p>“Due Date” := VendorBillLine.“Due Date”;</p>
|
|
<p>“Posting Date” := VendorBillHeader.“Posting Date”;</p>
|
|
<p>“Recipient Bank Account” := VendorBillLine.“Vendor Bank Acc. No.";</p>
|
|
<p>Description := VendorBillLine.Description;</p>
|
|
<p>“Message to Recipient” := VendorBillLine.“Description 2”;</p>
|
|
<p>INSERT;</p>
|
|
<p>END;</p>
|
|
<p>The derived local feature flow is as follows:</p>
|
|
<p><a href=3058.Feature-localization-for-data-structures-3.png><img src=3058.Feature-localization-for-data-structures-3.png alt=" "></a></p>
|
|
<p>Figure 3. The local country object flow</p>
|
|
<p>As we can see from the diagram, this solution allows integration of the local and W1 features with a minimum amount of changes in W1 code. The only two differences are:</p>
|
|
<ol>
|
|
<li>
|
|
<p>The entry point of the flow is the local table/page.</p>
|
|
</li>
|
|
<li>
|
|
<p>Codeunit 1222 is overloaded to prepare general journal lines from the local records.</p>
|
|
</li>
|
|
</ol>
|
|
<h2 id=nav-usages>NAV Usages</h2>
|
|
<p>The data mapping technique has been used for the SEPA Credit Transfer feature, and will be used in subsequent local integration projects.</p>
|
|
<h2 id=ideas-for-improvement>Ideas for improvement</h2>
|
|
<p>A weak point for this pattern is the need to set a filter on the empty journal line in order to retrieve the local data when exporting from a local page. This can cause problems if the size of the local table document number is larger than the Document No. field (ID 20) in the Gen. Journal line table (81).</p>
|
|
<p>Also, there is a strong need for thorough testing when using this pattern, because there might be differences in the behavior of the local table and table 81. Whatever is acceptable for the local table may not be acceptable for the W1 table. A deep functional analysis is needed to see if the local export feature uses the same constraints as the W1 feature.</p>
|
|
<footer class=footline>
|
|
</footer>
|
|
</main>
|
|
</div>
|
|
<div id=navigation>
|
|
<a class="nav nav-prev" href=/navpatterns/1-patterns/extending-the-role-center-headlines/ title="Extending the Role Center Headlines"><i class="fa fa-chevron-left"></i></a>
|
|
<a class="nav nav-next" href=/navpatterns/1-patterns/hooks/ title=Hooks><i class="fa fa-chevron-right"></i></a>
|
|
</div>
|
|
</div>
|
|
<div style=left:-1000px;overflow:scroll;position:absolute;top:-1000px;border:none;box-sizing:content-box;height:200px;margin:0;padding:0;width:200px>
|
|
<div style=border:none;box-sizing:content-box;height:200px;margin:0;padding:0;width:200px></div>
|
|
</div>
|
|
<script src=/js/clipboard.min.js?1636617172></script>
|
|
<script src=/js/perfect-scrollbar.min.js?1636617172></script>
|
|
<script src=/js/perfect-scrollbar.jquery.min.js?1636617172></script>
|
|
<script src=/js/jquery.svg.pan.zoom.js?1636617172></script>
|
|
<script src=/js/featherlight.min.js?1636617172></script>
|
|
<script src=/js/modernizr.custom-3.6.0.js?1636617172></script>
|
|
<script src=/js/relearn.js?1636617172></script>
|
|
</body>
|
|
</html> |