bc-code-intelligence-mcp 1.3.3 → 1.3.4

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (548) hide show
  1. package/dist/config/test-enhanced-layer-service.js +10 -10
  2. package/dist/config/test-enhanced-layer-service.js.map +1 -1
  3. package/dist/dev/hot-reload.d.ts +2 -2
  4. package/dist/dev/hot-reload.d.ts.map +1 -1
  5. package/dist/dev/hot-reload.js.map +1 -1
  6. package/dist/index.d.ts +0 -1
  7. package/dist/index.d.ts.map +1 -1
  8. package/dist/index.js +34 -38
  9. package/dist/index.js.map +1 -1
  10. package/dist/layers/index.d.ts +1 -1
  11. package/dist/layers/index.d.ts.map +1 -1
  12. package/dist/layers/index.js +1 -1
  13. package/dist/layers/index.js.map +1 -1
  14. package/dist/services/code-analysis-service.d.ts.map +1 -1
  15. package/dist/services/code-analysis-service.js +4 -0
  16. package/dist/services/code-analysis-service.js.map +1 -1
  17. package/dist/services/knowledge-service.d.ts +21 -10
  18. package/dist/services/knowledge-service.d.ts.map +1 -1
  19. package/dist/services/knowledge-service.js +71 -54
  20. package/dist/services/knowledge-service.js.map +1 -1
  21. package/dist/services/multi-content-layer-service.d.ts +90 -0
  22. package/dist/services/multi-content-layer-service.d.ts.map +1 -1
  23. package/dist/services/multi-content-layer-service.js +380 -0
  24. package/dist/services/multi-content-layer-service.js.map +1 -1
  25. package/dist/services/workflow-service.d.ts +11 -3
  26. package/dist/services/workflow-service.d.ts.map +1 -1
  27. package/dist/services/workflow-service.js +119 -78
  28. package/dist/services/workflow-service.js.map +1 -1
  29. package/dist/streamlined-handlers.d.ts +31 -2
  30. package/dist/streamlined-handlers.d.ts.map +1 -1
  31. package/dist/streamlined-handlers.js +151 -109
  32. package/dist/streamlined-handlers.js.map +1 -1
  33. package/dist/streamlined-tools.d.ts +12 -0
  34. package/dist/streamlined-tools.d.ts.map +1 -1
  35. package/dist/streamlined-tools.js +11 -6
  36. package/dist/streamlined-tools.js.map +1 -1
  37. package/package.json +13 -4
  38. package/embedded-knowledge/.github/ISSUE_TEMPLATE/bug-report.md +0 -24
  39. package/embedded-knowledge/.github/ISSUE_TEMPLATE/content-improvement.md +0 -24
  40. package/embedded-knowledge/.github/ISSUE_TEMPLATE/knowledge-request.md +0 -30
  41. package/embedded-knowledge/AGENTS.md +0 -178
  42. package/embedded-knowledge/CONTRIBUTING.md +0 -58
  43. package/embedded-knowledge/LICENSE +0 -21
  44. package/embedded-knowledge/README.md +0 -32
  45. package/embedded-knowledge/domains/alex-architect/api-delegate-operation-pattern.md +0 -90
  46. package/embedded-knowledge/domains/alex-architect/api-fieldset-registration-pattern.md +0 -113
  47. package/embedded-knowledge/domains/alex-architect/api-interface-design-patterns.md +0 -101
  48. package/embedded-knowledge/domains/alex-architect/api-page-development-patterns.md +0 -87
  49. package/embedded-knowledge/domains/alex-architect/complex-facade-patterns.md +0 -155
  50. package/embedded-knowledge/domains/alex-architect/facade-pattern-al-implementation.md +0 -138
  51. package/embedded-knowledge/domains/alex-architect/facade-pattern-external-api.md +0 -79
  52. package/embedded-knowledge/domains/alex-architect/samples/api-delegate-operation.md +0 -280
  53. package/embedded-knowledge/domains/alex-architect/samples/api-fieldset-registration.md +0 -200
  54. package/embedded-knowledge/domains/alex-architect/samples/api-interface-design.md +0 -565
  55. package/embedded-knowledge/domains/alex-architect/samples/api-page-implementation.md +0 -665
  56. package/embedded-knowledge/domains/alex-architect/samples/complex-facade-patterns.md +0 -325
  57. package/embedded-knowledge/domains/alex-architect/samples/facade-pattern-al.md +0 -696
  58. package/embedded-knowledge/domains/alex-architect/samples/facade-pattern.md +0 -320
  59. package/embedded-knowledge/domains/alex-architect/samples/subscriber-organization.md +0 -102
  60. package/embedded-knowledge/domains/alex-architect/samples/systemid-integration.md +0 -433
  61. package/embedded-knowledge/domains/alex-architect/subscriber-codeunit-size-optimization.md +0 -66
  62. package/embedded-knowledge/domains/alex-architect/systemid-integration.md +0 -115
  63. package/embedded-knowledge/domains/dean-debug/bc24-no-series-conversion-guide.md +0 -360
  64. package/embedded-knowledge/domains/dean-debug/case-statement-performance-best-practices.md +0 -86
  65. package/embedded-knowledge/domains/dean-debug/compound-statements-debugging.md +0 -96
  66. package/embedded-knowledge/domains/dean-debug/custom-dimensions-best-practices.md +0 -70
  67. package/embedded-knowledge/domains/dean-debug/custom-telemetry-implementation.md +0 -84
  68. package/embedded-knowledge/domains/dean-debug/deleteall-performance-tradeoff.md +0 -93
  69. package/embedded-knowledge/domains/dean-debug/deleteall-sql-performance.md +0 -73
  70. package/embedded-knowledge/domains/dean-debug/extension-telemetry-isolation.md +0 -78
  71. package/embedded-knowledge/domains/dean-debug/maintainsiftindex-property-behavior.md +0 -79
  72. package/embedded-knowledge/domains/dean-debug/no-series-implementation-patterns.md +0 -87
  73. package/embedded-knowledge/domains/dean-debug/no-series-module-patterns-bc24.md +0 -209
  74. package/embedded-knowledge/domains/dean-debug/no-series-validation-module-bc24.md +0 -246
  75. package/embedded-knowledge/domains/dean-debug/no-series-validation-patterns.md +0 -107
  76. package/embedded-knowledge/domains/dean-debug/odata-query-optimization.md +0 -105
  77. package/embedded-knowledge/domains/dean-debug/samples/bc24-no-series-conversion.md +0 -186
  78. package/embedded-knowledge/domains/dean-debug/samples/case-performance-optimization.md +0 -60
  79. package/embedded-knowledge/domains/dean-debug/samples/compound-statements-debugging.md +0 -139
  80. package/embedded-knowledge/domains/dean-debug/samples/custom-dimensions.md +0 -190
  81. package/embedded-knowledge/domains/dean-debug/samples/custom-telemetry.md +0 -516
  82. package/embedded-knowledge/domains/dean-debug/samples/deleteall-performance.md +0 -298
  83. package/embedded-knowledge/domains/dean-debug/samples/error-correlation.md +0 -324
  84. package/embedded-knowledge/domains/dean-debug/samples/extension-isolation.md +0 -344
  85. package/embedded-knowledge/domains/dean-debug/samples/logmessage-methods.md +0 -137
  86. package/embedded-knowledge/domains/dean-debug/samples/maintainsiftindex-examples.md +0 -340
  87. package/embedded-knowledge/domains/dean-debug/samples/no-series-implementation.md +0 -810
  88. package/embedded-knowledge/domains/dean-debug/samples/no-series-module-bc24.md +0 -86
  89. package/embedded-knowledge/domains/dean-debug/samples/no-series-validation-module-bc24.md +0 -110
  90. package/embedded-knowledge/domains/dean-debug/samples/no-series-validation.md +0 -758
  91. package/embedded-knowledge/domains/dean-debug/samples/odata-query-optimization.md +0 -665
  92. package/embedded-knowledge/domains/dean-debug/samples/setloadfields-before-case.md +0 -316
  93. package/embedded-knowledge/domains/dean-debug/samples/setloadfields-before-filters.md +0 -223
  94. package/embedded-knowledge/domains/dean-debug/samples/setloadfields-filter-exclusion.md +0 -149
  95. package/embedded-knowledge/domains/dean-debug/samples/setloadfields-optimization.md +0 -412
  96. package/embedded-knowledge/domains/dean-debug/samples/setloadfields-performance.md +0 -211
  97. package/embedded-knowledge/domains/dean-debug/samples/setloadfields-primary-key.md +0 -155
  98. package/embedded-knowledge/domains/dean-debug/samples/sift-technology-fundamentals.md +0 -475
  99. package/embedded-knowledge/domains/dean-debug/samples/singleinstance-subscribers.md +0 -238
  100. package/embedded-knowledge/domains/dean-debug/samples/table-event-batching.md +0 -97
  101. package/embedded-knowledge/domains/dean-debug/samples/table-key-requirements.md +0 -666
  102. package/embedded-knowledge/domains/dean-debug/samples/telemetry-performance.md +0 -319
  103. package/embedded-knowledge/domains/dean-debug/samples/verbosity-strategy.md +0 -236
  104. package/embedded-knowledge/domains/dean-debug/session-logmessage-methods.md +0 -59
  105. package/embedded-knowledge/domains/dean-debug/setloadfields-filter-field-exclusion.md +0 -67
  106. package/embedded-knowledge/domains/dean-debug/setloadfields-performance-impact.md +0 -70
  107. package/embedded-knowledge/domains/dean-debug/setloadfields-performance-optimization.md +0 -90
  108. package/embedded-knowledge/domains/dean-debug/setloadfields-placement-before-case-statements.md +0 -87
  109. package/embedded-knowledge/domains/dean-debug/setloadfields-placement-before-filters.md +0 -70
  110. package/embedded-knowledge/domains/dean-debug/setloadfields-primary-key-optimization.md +0 -74
  111. package/embedded-knowledge/domains/dean-debug/sift-technology-fundamentals.md +0 -81
  112. package/embedded-knowledge/domains/dean-debug/subscriber-singleinstance-performance.md +0 -56
  113. package/embedded-knowledge/domains/dean-debug/table-event-batch-operation-impact.md +0 -66
  114. package/embedded-knowledge/domains/dean-debug/table-key-requirements.md +0 -79
  115. package/embedded-knowledge/domains/dean-debug/telemetry-error-correlation.md +0 -78
  116. package/embedded-knowledge/domains/dean-debug/telemetry-performance-considerations.md +0 -83
  117. package/embedded-knowledge/domains/dean-debug/telemetry-verbosity-strategy.md +0 -76
  118. package/embedded-knowledge/domains/dean-debug/testfield-performance.md +0 -104
  119. package/embedded-knowledge/domains/eva-errors/fielderror-default-messages.md +0 -145
  120. package/embedded-knowledge/domains/eva-errors/fielderror-message-construction.md +0 -104
  121. package/embedded-knowledge/domains/eva-errors/fielderror-method-syntax.md +0 -114
  122. package/embedded-knowledge/domains/eva-errors/samples/fielderror-default-messages.md +0 -356
  123. package/embedded-knowledge/domains/eva-errors/samples/fielderror-syntax.md +0 -256
  124. package/embedded-knowledge/domains/eva-errors/samples/table-safety-validation-patterns.md +0 -101
  125. package/embedded-knowledge/domains/eva-errors/samples/testfield-error-handling.md +0 -108
  126. package/embedded-knowledge/domains/eva-errors/testfield-error-handling.md +0 -80
  127. package/embedded-knowledge/domains/jordan-bridge/al-event-subscriber-architecture.md +0 -98
  128. package/embedded-knowledge/domains/jordan-bridge/automatic-registration.md +0 -123
  129. package/embedded-knowledge/domains/jordan-bridge/business-process-template-patterns.md +0 -96
  130. package/embedded-knowledge/domains/jordan-bridge/error-response-patterns.md +0 -115
  131. package/embedded-knowledge/domains/jordan-bridge/etag-implementation.md +0 -115
  132. package/embedded-knowledge/domains/jordan-bridge/field-control-selection.md +0 -114
  133. package/embedded-knowledge/domains/jordan-bridge/samples/al-event-subscriber-architecture.md +0 -395
  134. package/embedded-knowledge/domains/jordan-bridge/samples/api-error-responses.md +0 -479
  135. package/embedded-knowledge/domains/jordan-bridge/samples/api-field-control.md +0 -548
  136. package/embedded-knowledge/domains/jordan-bridge/samples/api-url-naming.md +0 -287
  137. package/embedded-knowledge/domains/jordan-bridge/samples/business-process-templates.md +0 -434
  138. package/embedded-knowledge/domains/jordan-bridge/samples/etag-implementation.md +0 -508
  139. package/embedded-knowledge/domains/jordan-bridge/samples/task-scheduler-pattern.md +0 -615
  140. package/embedded-knowledge/domains/jordan-bridge/task-scheduler-pattern-implementation.md +0 -144
  141. package/embedded-knowledge/domains/jordan-bridge/url-structure-naming-patterns.md +0 -96
  142. package/embedded-knowledge/domains/maya-mentor/case-multiple-conditions-ranges.md +0 -124
  143. package/embedded-knowledge/domains/maya-mentor/case-statement-syntax-structure.md +0 -84
  144. package/embedded-knowledge/domains/maya-mentor/fielderror-syntax-usage.md +0 -75
  145. package/embedded-knowledge/domains/maya-mentor/fielderror-vs-testfield.md +0 -96
  146. package/embedded-knowledge/domains/maya-mentor/samples/case-statement-multiple-conditions.md +0 -385
  147. package/embedded-knowledge/domains/maya-mentor/samples/case-statement-syntax-structure.md +0 -72
  148. package/embedded-knowledge/domains/maya-mentor/samples/fielderror-syntax-usage.md +0 -48
  149. package/embedded-knowledge/domains/maya-mentor/samples/testfield-basic-syntax.md +0 -49
  150. package/embedded-knowledge/domains/maya-mentor/testfield-basic-syntax.md +0 -67
  151. package/embedded-knowledge/domains/quinn-tester/fielderror-validation-patterns.md +0 -119
  152. package/embedded-knowledge/domains/quinn-tester/rule-execution.md +0 -123
  153. package/embedded-knowledge/domains/quinn-tester/samples/case-error-handling.md +0 -64
  154. package/embedded-knowledge/domains/quinn-tester/samples/fielderror-message-construction.md +0 -60
  155. package/embedded-knowledge/domains/quinn-tester/samples/fielderror-validation-patterns.md +0 -83
  156. package/embedded-knowledge/domains/quinn-tester/samples/rule-execution.md +0 -716
  157. package/embedded-knowledge/domains/quinn-tester/samples/table-safety-validation-patterns.md +0 -101
  158. package/embedded-knowledge/domains/quinn-tester/samples/temporary-table-operation-validation.md +0 -91
  159. package/embedded-knowledge/domains/quinn-tester/table-safety-validation-patterns.md +0 -79
  160. package/embedded-knowledge/domains/quinn-tester/temporary-table-operation-validation.md +0 -79
  161. package/embedded-knowledge/domains/roger-reviewer/al-begin-end-block-structure.md +0 -89
  162. package/embedded-knowledge/domains/roger-reviewer/al-binary-operator-spacing.md +0 -76
  163. package/embedded-knowledge/domains/roger-reviewer/al-blank-line-organization.md +0 -76
  164. package/embedded-knowledge/domains/roger-reviewer/al-case-action-formatting.md +0 -76
  165. package/embedded-knowledge/domains/roger-reviewer/al-code-spacing-conventions.md +0 -81
  166. package/embedded-knowledge/domains/roger-reviewer/al-comment-spacing-standards.md +0 -76
  167. package/embedded-knowledge/domains/roger-reviewer/al-end-else-pairing.md +0 -75
  168. package/embedded-knowledge/domains/roger-reviewer/al-keyword-indentation-rules.md +0 -76
  169. package/embedded-knowledge/domains/roger-reviewer/al-line-start-keyword-positioning.md +0 -76
  170. package/embedded-knowledge/domains/roger-reviewer/al-separate-if-else-formatting.md +0 -76
  171. package/embedded-knowledge/domains/roger-reviewer/al-standard-abbreviations.md +0 -96
  172. package/embedded-knowledge/domains/roger-reviewer/al-statement-per-line-rule.md +0 -76
  173. package/embedded-knowledge/domains/roger-reviewer/al-unnecessary-else-elimination.md +0 -86
  174. package/embedded-knowledge/domains/roger-reviewer/al-variable-declaration-order.md +0 -90
  175. package/embedded-knowledge/domains/roger-reviewer/al-variable-naming-conventions.md +0 -82
  176. package/embedded-knowledge/domains/roger-reviewer/begin-block-statement-clarity.md +0 -78
  177. package/embedded-knowledge/domains/roger-reviewer/begin-end-positioning-patterns.md +0 -76
  178. package/embedded-knowledge/domains/roger-reviewer/binary-operator-line-positioning.md +0 -78
  179. package/embedded-knowledge/domains/roger-reviewer/boolean-expression-simplification-al.md +0 -100
  180. package/embedded-knowledge/domains/roger-reviewer/case-statement-error-handling-troubleshooting.md +0 -115
  181. package/embedded-knowledge/domains/roger-reviewer/compound-statement-readability.md +0 -124
  182. package/embedded-knowledge/domains/roger-reviewer/lonely-repeat-statement-pattern.md +0 -110
  183. package/embedded-knowledge/domains/roger-reviewer/samples/al-begin-end-blocks.md +0 -438
  184. package/embedded-knowledge/domains/roger-reviewer/samples/al-binary-operator-spacing.md +0 -255
  185. package/embedded-knowledge/domains/roger-reviewer/samples/al-comment-spacing-standards.md +0 -209
  186. package/embedded-knowledge/domains/roger-reviewer/samples/al-keyword-indentation-rules.md +0 -218
  187. package/embedded-knowledge/domains/roger-reviewer/samples/al-line-start-keyword-positioning.md +0 -218
  188. package/embedded-knowledge/domains/roger-reviewer/samples/al-separate-if-else-formatting.md +0 -280
  189. package/embedded-knowledge/domains/roger-reviewer/samples/al-statement-per-line-rule.md +0 -188
  190. package/embedded-knowledge/domains/roger-reviewer/samples/al-unnecessary-else-elimination.md +0 -245
  191. package/embedded-knowledge/domains/roger-reviewer/samples/al-variable-declaration-order.md +0 -244
  192. package/embedded-knowledge/domains/roger-reviewer/samples/begin-end-positioning.md +0 -278
  193. package/embedded-knowledge/domains/roger-reviewer/samples/boolean-simplification-examples.md +0 -484
  194. package/embedded-knowledge/domains/roger-reviewer/samples/case-error-handling.md +0 -64
  195. package/embedded-knowledge/domains/roger-reviewer/samples/compound-statement-readability.md +0 -107
  196. package/embedded-knowledge/domains/roger-reviewer/samples/lonely-repeat-examples.md +0 -280
  197. package/embedded-knowledge/domains/sam-coder/al-formatting-consistency-patterns.md +0 -75
  198. package/embedded-knowledge/domains/sam-coder/al-line-comment-formatting.md +0 -67
  199. package/embedded-knowledge/domains/sam-coder/al-lonely-repeat-pattern.md +0 -76
  200. package/embedded-knowledge/domains/sam-coder/al-named-parameter-pattern.md +0 -98
  201. package/embedded-knowledge/domains/sam-coder/al-object-navigation-shortcuts.md +0 -128
  202. package/embedded-knowledge/domains/sam-coder/al-readability-optimization.md +0 -75
  203. package/embedded-knowledge/domains/sam-coder/al-record-find-early-exit.md +0 -95
  204. package/embedded-knowledge/domains/sam-coder/command-queue-pattern-al.md +0 -141
  205. package/embedded-knowledge/domains/sam-coder/deleteall-alternative-implementation.md +0 -91
  206. package/embedded-knowledge/domains/sam-coder/deleteall-method-usage.md +0 -118
  207. package/embedded-knowledge/domains/sam-coder/deleteall-trigger-execution.md +0 -111
  208. package/embedded-knowledge/domains/sam-coder/event-bridge-pattern-al.md +0 -113
  209. package/embedded-knowledge/domains/sam-coder/event-payload-design-patterns.md +0 -127
  210. package/embedded-knowledge/domains/sam-coder/generic-method-patterns-al.md +0 -141
  211. package/embedded-knowledge/domains/sam-coder/manual-binding-conditional-subscribers.md +0 -66
  212. package/embedded-knowledge/domains/sam-coder/nested-compound-best-practices.md +0 -96
  213. package/embedded-knowledge/domains/sam-coder/samples/al-blank-line-organization.md +0 -161
  214. package/embedded-knowledge/domains/sam-coder/samples/al-case-action-formatting.md +0 -177
  215. package/embedded-knowledge/domains/sam-coder/samples/al-lonely-repeat-pattern.md +0 -239
  216. package/embedded-knowledge/domains/sam-coder/samples/al-named-parameter-pattern.md +0 -346
  217. package/embedded-knowledge/domains/sam-coder/samples/al-record-find-early-exit.md +0 -298
  218. package/embedded-knowledge/domains/sam-coder/samples/command-queue-pattern.md +0 -677
  219. package/embedded-knowledge/domains/sam-coder/samples/deleteall-alternative-implementation.md +0 -117
  220. package/embedded-knowledge/domains/sam-coder/samples/deleteall-triggers.md +0 -75
  221. package/embedded-knowledge/domains/sam-coder/samples/deleteall-usage.md +0 -169
  222. package/embedded-knowledge/domains/sam-coder/samples/event-bridge-pattern.md +0 -399
  223. package/embedded-knowledge/domains/sam-coder/samples/event-payload-design.md +0 -356
  224. package/embedded-knowledge/domains/sam-coder/samples/generic-method-patterns.md +0 -889
  225. package/embedded-knowledge/domains/sam-coder/samples/manual-binding.md +0 -84
  226. package/embedded-knowledge/domains/sam-coder/samples/nested-compound-best-practices.md +0 -127
  227. package/embedded-knowledge/domains/sam-coder/samples/single-to-compound-conversion.md +0 -89
  228. package/embedded-knowledge/domains/sam-coder/samples/template-method-pattern.md +0 -516
  229. package/embedded-knowledge/domains/sam-coder/samples/testfield-patterns.md +0 -61
  230. package/embedded-knowledge/domains/sam-coder/samples/type-safe-operations.md +0 -427
  231. package/embedded-knowledge/domains/sam-coder/single-to-compound-conversion.md +0 -122
  232. package/embedded-knowledge/domains/sam-coder/template-method-pattern-al.md +0 -96
  233. package/embedded-knowledge/domains/sam-coder/testfield-patterns.md +0 -101
  234. package/embedded-knowledge/domains/sam-coder/type-safe-operations-al.md +0 -149
  235. package/embedded-knowledge/domains/sam-coder/vs-code-al-keyboard-shortcuts.md +0 -107
  236. package/embedded-knowledge/domains/seth-security/al-temporary-table-safety.md +0 -95
  237. package/embedded-knowledge/domains/seth-security/api-permission-model.md +0 -115
  238. package/embedded-knowledge/domains/seth-security/istemporary-safeguard-pattern.md +0 -78
  239. package/embedded-knowledge/domains/seth-security/samples/al-temporary-table-safety.md +0 -373
  240. package/embedded-knowledge/domains/seth-security/samples/api-permission-model.md +0 -308
  241. package/embedded-knowledge/domains/shared/al-file-naming-conventions.md +0 -146
  242. package/embedded-knowledge/domains/taylor-docs/al-xml-documentation-structure.md +0 -79
  243. package/embedded-knowledge/domains/uma-ux/bc-action-shortcuts-syntax.md +0 -78
  244. package/embedded-knowledge/domains/uma-ux/shortcut-key-user-experience-design.md +0 -81
  245. package/embedded-knowledge/indexes/bc-version-matrix.json +0 -188
  246. package/embedded-knowledge/indexes/domain-catalog.json +0 -106
  247. package/embedded-knowledge/indexes/tags/abbreviations.json +0 -1
  248. package/embedded-knowledge/indexes/tags/abstraction.json +0 -1
  249. package/embedded-knowledge/indexes/tags/access-control.json +0 -1
  250. package/embedded-knowledge/indexes/tags/accessibility.json +0 -1
  251. package/embedded-knowledge/indexes/tags/actions.json +0 -1
  252. package/embedded-knowledge/indexes/tags/advanced-patterns.json +0 -1
  253. package/embedded-knowledge/indexes/tags/advanced.json +0 -1
  254. package/embedded-knowledge/indexes/tags/al-extension.json +0 -1
  255. package/embedded-knowledge/indexes/tags/al-generics.json +0 -1
  256. package/embedded-knowledge/indexes/tags/al-objects.json +0 -1
  257. package/embedded-knowledge/indexes/tags/al-syntax.json +0 -1
  258. package/embedded-knowledge/indexes/tags/algorithm-structure.json +0 -1
  259. package/embedded-knowledge/indexes/tags/alternatives.json +0 -1
  260. package/embedded-knowledge/indexes/tags/analytics.json +0 -1
  261. package/embedded-knowledge/indexes/tags/api-delegates.json +0 -1
  262. package/embedded-knowledge/indexes/tags/api-design.json +0 -1
  263. package/embedded-knowledge/indexes/tags/api-documentation.json +0 -1
  264. package/embedded-knowledge/indexes/tags/api-endpoints.json +0 -1
  265. package/embedded-knowledge/indexes/tags/api-extensibility.json +0 -1
  266. package/embedded-knowledge/indexes/tags/api-fieldsets.json +0 -1
  267. package/embedded-knowledge/indexes/tags/api-integration.json +0 -1
  268. package/embedded-knowledge/indexes/tags/api-interfaces.json +0 -1
  269. package/embedded-knowledge/indexes/tags/api-optimization.json +0 -1
  270. package/embedded-knowledge/indexes/tags/api-pages.json +0 -1
  271. package/embedded-knowledge/indexes/tags/api-patterns.json +0 -1
  272. package/embedded-knowledge/indexes/tags/api-permissions.json +0 -1
  273. package/embedded-knowledge/indexes/tags/api-responses.json +0 -1
  274. package/embedded-knowledge/indexes/tags/api-simplification.json +0 -1
  275. package/embedded-knowledge/indexes/tags/api.json +0 -1
  276. package/embedded-knowledge/indexes/tags/architecture.json +0 -1
  277. package/embedded-knowledge/indexes/tags/async-patterns.json +0 -1
  278. package/embedded-knowledge/indexes/tags/async-processing.json +0 -1
  279. package/embedded-knowledge/indexes/tags/automatic-registration.json +0 -1
  280. package/embedded-knowledge/indexes/tags/batch-operations.json +0 -1
  281. package/embedded-knowledge/indexes/tags/bc24-migration.json +0 -1
  282. package/embedded-knowledge/indexes/tags/begin-blocks.json +0 -1
  283. package/embedded-knowledge/indexes/tags/begin-end.json +0 -1
  284. package/embedded-knowledge/indexes/tags/behavioral-patterns.json +0 -1
  285. package/embedded-knowledge/indexes/tags/best-practices.json +0 -1
  286. package/embedded-knowledge/indexes/tags/binding.json +0 -1
  287. package/embedded-knowledge/indexes/tags/block-structure.json +0 -1
  288. package/embedded-knowledge/indexes/tags/blocks.json +0 -1
  289. package/embedded-knowledge/indexes/tags/boolean-expressions.json +0 -1
  290. package/embedded-knowledge/indexes/tags/branching.json +0 -1
  291. package/embedded-knowledge/indexes/tags/breaking-changes.json +0 -1
  292. package/embedded-knowledge/indexes/tags/breakpoints.json +0 -1
  293. package/embedded-knowledge/indexes/tags/business-foundation.json +0 -1
  294. package/embedded-knowledge/indexes/tags/business-infrastructure.json +0 -1
  295. package/embedded-knowledge/indexes/tags/business-process.json +0 -1
  296. package/embedded-knowledge/indexes/tags/business-rules.json +0 -1
  297. package/embedded-knowledge/indexes/tags/caching.json +0 -1
  298. package/embedded-knowledge/indexes/tags/case-statements.json +0 -1
  299. package/embedded-knowledge/indexes/tags/case.json +0 -1
  300. package/embedded-knowledge/indexes/tags/code-analysis.json +0 -1
  301. package/embedded-knowledge/indexes/tags/code-clarity.json +0 -1
  302. package/embedded-knowledge/indexes/tags/code-comprehension.json +0 -1
  303. package/embedded-knowledge/indexes/tags/code-conversion.json +0 -1
  304. package/embedded-knowledge/indexes/tags/code-formatting.json +0 -1
  305. package/embedded-knowledge/indexes/tags/code-organization.json +0 -1
  306. package/embedded-knowledge/indexes/tags/code-patterns.json +0 -1
  307. package/embedded-knowledge/indexes/tags/code-quality.json +0 -1
  308. package/embedded-knowledge/indexes/tags/code-reuse.json +0 -1
  309. package/embedded-knowledge/indexes/tags/code-simplification.json +0 -1
  310. package/embedded-knowledge/indexes/tags/code-standards.json +0 -1
  311. package/embedded-knowledge/indexes/tags/code-structure.json +0 -1
  312. package/embedded-knowledge/indexes/tags/code-style.json +0 -1
  313. package/embedded-knowledge/indexes/tags/codeunit-design.json +0 -1
  314. package/embedded-knowledge/indexes/tags/command-queue.json +0 -1
  315. package/embedded-knowledge/indexes/tags/comments.json +0 -1
  316. package/embedded-knowledge/indexes/tags/compile-time-validation.json +0 -1
  317. package/embedded-knowledge/indexes/tags/complex-facade.json +0 -1
  318. package/embedded-knowledge/indexes/tags/complexity-hiding.json +0 -1
  319. package/embedded-knowledge/indexes/tags/complexity-management.json +0 -1
  320. package/embedded-knowledge/indexes/tags/compound-statements.json +0 -1
  321. package/embedded-knowledge/indexes/tags/concurrency.json +0 -1
  322. package/embedded-knowledge/indexes/tags/conditional-logic.json +0 -1
  323. package/embedded-knowledge/indexes/tags/conditional.json +0 -1
  324. package/embedded-knowledge/indexes/tags/conflict-resolution.json +0 -1
  325. package/embedded-knowledge/indexes/tags/consistency.json +0 -1
  326. package/embedded-knowledge/indexes/tags/contract-design.json +0 -1
  327. package/embedded-knowledge/indexes/tags/control-flow.json +0 -1
  328. package/embedded-knowledge/indexes/tags/conversion-guide.json +0 -1
  329. package/embedded-knowledge/indexes/tags/correlation.json +0 -1
  330. package/embedded-knowledge/indexes/tags/custom-messages.json +0 -1
  331. package/embedded-knowledge/indexes/tags/data-access.json +0 -1
  332. package/embedded-knowledge/indexes/tags/data-exposure.json +0 -1
  333. package/embedded-knowledge/indexes/tags/data-integrity.json +0 -1
  334. package/embedded-knowledge/indexes/tags/data-loading.json +0 -1
  335. package/embedded-knowledge/indexes/tags/data-manipulation.json +0 -1
  336. package/embedded-knowledge/indexes/tags/data-modeling.json +0 -1
  337. package/embedded-knowledge/indexes/tags/data-patterns.json +0 -1
  338. package/embedded-knowledge/indexes/tags/data-protection.json +0 -1
  339. package/embedded-knowledge/indexes/tags/data-validation.json +0 -1
  340. package/embedded-knowledge/indexes/tags/database.json +0 -1
  341. package/embedded-knowledge/indexes/tags/debugging.json +0 -1
  342. package/embedded-knowledge/indexes/tags/decision-making.json +0 -1
  343. package/embedded-knowledge/indexes/tags/declaration.json +0 -1
  344. package/embedded-knowledge/indexes/tags/default-messages.json +0 -1
  345. package/embedded-knowledge/indexes/tags/defensive-programming.json +0 -1
  346. package/embedded-knowledge/indexes/tags/deleteall.json +0 -1
  347. package/embedded-knowledge/indexes/tags/dependencies.json +0 -1
  348. package/embedded-knowledge/indexes/tags/deployment.json +0 -1
  349. package/embedded-knowledge/indexes/tags/developer-productivity.json +0 -1
  350. package/embedded-knowledge/indexes/tags/development-workflow.json +0 -1
  351. package/embedded-knowledge/indexes/tags/diagnostics.json +0 -1
  352. package/embedded-knowledge/indexes/tags/dimensions.json +0 -1
  353. package/embedded-knowledge/indexes/tags/documentation.json +0 -1
  354. package/embedded-knowledge/indexes/tags/early-exit.json +0 -1
  355. package/embedded-knowledge/indexes/tags/else-clauses.json +0 -1
  356. package/embedded-knowledge/indexes/tags/end-statements.json +0 -1
  357. package/embedded-knowledge/indexes/tags/enterprise-patterns.json +0 -1
  358. package/embedded-knowledge/indexes/tags/entity-relationships.json +0 -1
  359. package/embedded-knowledge/indexes/tags/error-handling.json +0 -1
  360. package/embedded-knowledge/indexes/tags/error-messages.json +0 -1
  361. package/embedded-knowledge/indexes/tags/error-prevention.json +0 -1
  362. package/embedded-knowledge/indexes/tags/error-text.json +0 -1
  363. package/embedded-knowledge/indexes/tags/etag.json +0 -1
  364. package/embedded-knowledge/indexes/tags/event-bridge.json +0 -1
  365. package/embedded-knowledge/indexes/tags/event-payload.json +0 -1
  366. package/embedded-knowledge/indexes/tags/event-routing.json +0 -1
  367. package/embedded-knowledge/indexes/tags/events.json +0 -1
  368. package/embedded-knowledge/indexes/tags/execution-flow.json +0 -1
  369. package/embedded-knowledge/indexes/tags/expressions.json +0 -1
  370. package/embedded-knowledge/indexes/tags/extensibility.json +0 -1
  371. package/embedded-knowledge/indexes/tags/extensions.json +0 -1
  372. package/embedded-knowledge/indexes/tags/facade-composition.json +0 -1
  373. package/embedded-knowledge/indexes/tags/facade-pattern.json +0 -1
  374. package/embedded-knowledge/indexes/tags/field-control.json +0 -1
  375. package/embedded-knowledge/indexes/tags/field-exclusion.json +0 -1
  376. package/embedded-knowledge/indexes/tags/field-registration.json +0 -1
  377. package/embedded-knowledge/indexes/tags/field-state.json +0 -1
  378. package/embedded-knowledge/indexes/tags/field-validation.json +0 -1
  379. package/embedded-knowledge/indexes/tags/fielderror.json +0 -1
  380. package/embedded-knowledge/indexes/tags/fields.json +0 -1
  381. package/embedded-knowledge/indexes/tags/filtering.json +0 -1
  382. package/embedded-knowledge/indexes/tags/filters.json +0 -1
  383. package/embedded-knowledge/indexes/tags/formatting.json +0 -1
  384. package/embedded-knowledge/indexes/tags/generic-methods.json +0 -1
  385. package/embedded-knowledge/indexes/tags/http-status.json +0 -1
  386. package/embedded-knowledge/indexes/tags/if-statements.json +0 -1
  387. package/embedded-knowledge/indexes/tags/implementation.json +0 -1
  388. package/embedded-knowledge/indexes/tags/indentation.json +0 -1
  389. package/embedded-knowledge/indexes/tags/index-summary.json +0 -277
  390. package/embedded-knowledge/indexes/tags/indexing.json +0 -1
  391. package/embedded-knowledge/indexes/tags/inheritance.json +0 -1
  392. package/embedded-knowledge/indexes/tags/integration.json +0 -1
  393. package/embedded-knowledge/indexes/tags/integrity-checking.json +0 -1
  394. package/embedded-knowledge/indexes/tags/intellisense.json +0 -1
  395. package/embedded-knowledge/indexes/tags/interface-design.json +0 -1
  396. package/embedded-knowledge/indexes/tags/interface-segregation.json +0 -1
  397. package/embedded-knowledge/indexes/tags/isolation.json +0 -1
  398. package/embedded-knowledge/indexes/tags/job-processing.json +0 -1
  399. package/embedded-knowledge/indexes/tags/keyboard-navigation.json +0 -1
  400. package/embedded-knowledge/indexes/tags/keywords.json +0 -1
  401. package/embedded-knowledge/indexes/tags/legacy-modernization.json +0 -1
  402. package/embedded-knowledge/indexes/tags/line-breaks.json +0 -1
  403. package/embedded-knowledge/indexes/tags/line-organization.json +0 -1
  404. package/embedded-knowledge/indexes/tags/line-positioning.json +0 -1
  405. package/embedded-knowledge/indexes/tags/localization.json +0 -1
  406. package/embedded-knowledge/indexes/tags/logging.json +0 -1
  407. package/embedded-knowledge/indexes/tags/loose-coupling.json +0 -1
  408. package/embedded-knowledge/indexes/tags/maintainability.json +0 -1
  409. package/embedded-knowledge/indexes/tags/memory-management.json +0 -1
  410. package/embedded-knowledge/indexes/tags/memory-optimization.json +0 -1
  411. package/embedded-knowledge/indexes/tags/memory.json +0 -1
  412. package/embedded-knowledge/indexes/tags/message-design.json +0 -1
  413. package/embedded-knowledge/indexes/tags/message-formatting.json +0 -1
  414. package/embedded-knowledge/indexes/tags/message-patterns.json +0 -1
  415. package/embedded-knowledge/indexes/tags/metadata-driven.json +0 -1
  416. package/embedded-knowledge/indexes/tags/method-comparison.json +0 -1
  417. package/embedded-knowledge/indexes/tags/module-architecture.json +0 -1
  418. package/embedded-knowledge/indexes/tags/module-validation.json +0 -1
  419. package/embedded-knowledge/indexes/tags/monitoring.json +0 -1
  420. package/embedded-knowledge/indexes/tags/multi-layer-facade.json +0 -1
  421. package/embedded-knowledge/indexes/tags/multi-tenancy.json +0 -1
  422. package/embedded-knowledge/indexes/tags/multiple-values.json +0 -1
  423. package/embedded-knowledge/indexes/tags/naming-conventions.json +0 -1
  424. package/embedded-knowledge/indexes/tags/naming.json +0 -1
  425. package/embedded-knowledge/indexes/tags/navigation.json +0 -1
  426. package/embedded-knowledge/indexes/tags/nested-statements.json +0 -1
  427. package/embedded-knowledge/indexes/tags/no-series-conversion.json +0 -1
  428. package/embedded-knowledge/indexes/tags/no-series-validation.json +0 -1
  429. package/embedded-knowledge/indexes/tags/no-series.json +0 -1
  430. package/embedded-knowledge/indexes/tags/number-generation.json +0 -1
  431. package/embedded-knowledge/indexes/tags/object-documentation.json +0 -1
  432. package/embedded-knowledge/indexes/tags/odata.json +0 -1
  433. package/embedded-knowledge/indexes/tags/ondelete.json +0 -1
  434. package/embedded-knowledge/indexes/tags/onvalidate.json +0 -1
  435. package/embedded-knowledge/indexes/tags/operation-delegation.json +0 -1
  436. package/embedded-knowledge/indexes/tags/operation-safety.json +0 -1
  437. package/embedded-knowledge/indexes/tags/operators.json +0 -1
  438. package/embedded-knowledge/indexes/tags/optimization.json +0 -1
  439. package/embedded-knowledge/indexes/tags/order.json +0 -1
  440. package/embedded-knowledge/indexes/tags/organization.json +0 -1
  441. package/embedded-knowledge/indexes/tags/pages.json +0 -1
  442. package/embedded-knowledge/indexes/tags/parameters.json +0 -1
  443. package/embedded-knowledge/indexes/tags/patterns.json +0 -1
  444. package/embedded-knowledge/indexes/tags/performance-optimization.json +0 -1
  445. package/embedded-knowledge/indexes/tags/performance.json +0 -1
  446. package/embedded-knowledge/indexes/tags/placement.json +0 -1
  447. package/embedded-knowledge/indexes/tags/posting-codeunits.json +0 -1
  448. package/embedded-knowledge/indexes/tags/posting.json +0 -1
  449. package/embedded-knowledge/indexes/tags/preconditions.json +0 -1
  450. package/embedded-knowledge/indexes/tags/primary-key.json +0 -1
  451. package/embedded-knowledge/indexes/tags/privacy.json +0 -1
  452. package/embedded-knowledge/indexes/tags/process-automation.json +0 -1
  453. package/embedded-knowledge/indexes/tags/production.json +0 -1
  454. package/embedded-knowledge/indexes/tags/productivity.json +0 -1
  455. package/embedded-knowledge/indexes/tags/query-performance.json +0 -1
  456. package/embedded-knowledge/indexes/tags/queue-management.json +0 -1
  457. package/embedded-knowledge/indexes/tags/ranges.json +0 -1
  458. package/embedded-knowledge/indexes/tags/readability.json +0 -1
  459. package/embedded-knowledge/indexes/tags/record-access.json +0 -1
  460. package/embedded-knowledge/indexes/tags/record-methods.json +0 -1
  461. package/embedded-knowledge/indexes/tags/refactoring.json +0 -1
  462. package/embedded-knowledge/indexes/tags/reference.json +0 -1
  463. package/embedded-knowledge/indexes/tags/repeat-loops.json +0 -1
  464. package/embedded-knowledge/indexes/tags/repeat-statement.json +0 -1
  465. package/embedded-knowledge/indexes/tags/runtime-errors.json +0 -1
  466. package/embedded-knowledge/indexes/tags/runtime.json +0 -1
  467. package/embedded-knowledge/indexes/tags/safeguards.json +0 -1
  468. package/embedded-knowledge/indexes/tags/security.json +0 -1
  469. package/embedded-knowledge/indexes/tags/sequence-management.json +0 -1
  470. package/embedded-knowledge/indexes/tags/serialization.json +0 -1
  471. package/embedded-knowledge/indexes/tags/session-logmessage.json +0 -1
  472. package/embedded-knowledge/indexes/tags/session.json +0 -1
  473. package/embedded-knowledge/indexes/tags/setloadfields.json +0 -1
  474. package/embedded-knowledge/indexes/tags/shortcuts.json +0 -1
  475. package/embedded-knowledge/indexes/tags/sift.json +0 -1
  476. package/embedded-knowledge/indexes/tags/singleinstance.json +0 -1
  477. package/embedded-knowledge/indexes/tags/spacing.json +0 -1
  478. package/embedded-knowledge/indexes/tags/sql-translation.json +0 -1
  479. package/embedded-knowledge/indexes/tags/standards.json +0 -1
  480. package/embedded-knowledge/indexes/tags/statements.json +0 -1
  481. package/embedded-knowledge/indexes/tags/streaming.json +0 -1
  482. package/embedded-knowledge/indexes/tags/strong-typing.json +0 -1
  483. package/embedded-knowledge/indexes/tags/structural-patterns.json +0 -1
  484. package/embedded-knowledge/indexes/tags/structure.json +0 -1
  485. package/embedded-knowledge/indexes/tags/subscribers.json +0 -1
  486. package/embedded-knowledge/indexes/tags/switch.json +0 -1
  487. package/embedded-knowledge/indexes/tags/symbol-search.json +0 -1
  488. package/embedded-knowledge/indexes/tags/syntax.json +0 -1
  489. package/embedded-knowledge/indexes/tags/systemid.json +0 -1
  490. package/embedded-knowledge/indexes/tags/table-configuration.json +0 -1
  491. package/embedded-knowledge/indexes/tags/table-events.json +0 -1
  492. package/embedded-knowledge/indexes/tags/table-keys.json +0 -1
  493. package/embedded-knowledge/indexes/tags/table-safety.json +0 -1
  494. package/embedded-knowledge/indexes/tags/task-scheduler.json +0 -1
  495. package/embedded-knowledge/indexes/tags/telemetry.json +0 -1
  496. package/embedded-knowledge/indexes/tags/template-method.json +0 -1
  497. package/embedded-knowledge/indexes/tags/temporary-tables.json +0 -1
  498. package/embedded-knowledge/indexes/tags/testfield.json +0 -1
  499. package/embedded-knowledge/indexes/tags/tradeoffs.json +0 -1
  500. package/embedded-knowledge/indexes/tags/triggers.json +0 -1
  501. package/embedded-knowledge/indexes/tags/troubleshooting.json +0 -1
  502. package/embedded-knowledge/indexes/tags/type-safety.json +0 -1
  503. package/embedded-knowledge/indexes/tags/url-structure.json +0 -1
  504. package/embedded-knowledge/indexes/tags/user-experience.json +0 -1
  505. package/embedded-knowledge/indexes/tags/user-feedback.json +0 -1
  506. package/embedded-knowledge/indexes/tags/user-interface.json +0 -1
  507. package/embedded-knowledge/indexes/tags/validation-feedback.json +0 -1
  508. package/embedded-knowledge/indexes/tags/validation.json +0 -1
  509. package/embedded-knowledge/indexes/tags/variables.json +0 -1
  510. package/embedded-knowledge/indexes/tags/verbosity.json +0 -1
  511. package/embedded-knowledge/indexes/tags/vs-code.json +0 -1
  512. package/embedded-knowledge/indexes/tags/web-services.json +0 -1
  513. package/embedded-knowledge/indexes/tags/workflow-management.json +0 -1
  514. package/embedded-knowledge/indexes/tags/workflow-optimization.json +0 -1
  515. package/embedded-knowledge/indexes/tags/workflow-templates.json +0 -1
  516. package/embedded-knowledge/indexes/tags/workspace.json +0 -1
  517. package/embedded-knowledge/indexes/tags/xml-documentation.json +0 -1
  518. package/embedded-knowledge/indexes/topic-relationships.json +0 -128
  519. package/embedded-knowledge/methodologies/index.json +0 -81
  520. package/embedded-knowledge/methodologies/phases/analysis-full.md +0 -208
  521. package/embedded-knowledge/methodologies/phases/analysis-quick.md +0 -44
  522. package/embedded-knowledge/methodologies/phases/analysis.md +0 -182
  523. package/embedded-knowledge/methodologies/phases/execution-validation-full.md +0 -174
  524. package/embedded-knowledge/methodologies/phases/execution-validation-quick.md +0 -31
  525. package/embedded-knowledge/methodologies/phases/execution-validation.md +0 -174
  526. package/embedded-knowledge/methodologies/phases/performance-full.md +0 -211
  527. package/embedded-knowledge/methodologies/phases/performance-quick.md +0 -32
  528. package/embedded-knowledge/methodologies/phases/performance.md +0 -211
  529. package/embedded-knowledge/methodologies/phases/verification-full.md +0 -162
  530. package/embedded-knowledge/methodologies/phases/verification-quick.md +0 -48
  531. package/embedded-knowledge/methodologies/phases/verification.md +0 -146
  532. package/embedded-knowledge/methodologies/workflow-enforcement.md +0 -142
  533. package/embedded-knowledge/methodologies/workflows/code-review-workflow.md +0 -99
  534. package/embedded-knowledge/specialists/alex-architect.md +0 -216
  535. package/embedded-knowledge/specialists/casey-copilot.md +0 -226
  536. package/embedded-knowledge/specialists/chris-config.md +0 -267
  537. package/embedded-knowledge/specialists/dean-debug.md +0 -222
  538. package/embedded-knowledge/specialists/eva-errors.md +0 -235
  539. package/embedded-knowledge/specialists/jordan-bridge.md +0 -235
  540. package/embedded-knowledge/specialists/logan-legacy.md +0 -209
  541. package/embedded-knowledge/specialists/maya-mentor.md +0 -211
  542. package/embedded-knowledge/specialists/morgan-market.md +0 -226
  543. package/embedded-knowledge/specialists/quinn-tester.md +0 -235
  544. package/embedded-knowledge/specialists/roger-reviewer.md +0 -234
  545. package/embedded-knowledge/specialists/sam-coder.md +0 -359
  546. package/embedded-knowledge/specialists/seth-security.md +0 -235
  547. package/embedded-knowledge/specialists/taylor-docs.md +0 -257
  548. package/embedded-knowledge/specialists/uma-ux.md +0 -235
@@ -1,484 +0,0 @@
1
- # Boolean Expression Simplification in AL - Code Examples
2
-
3
- ## Overview
4
- Complex boolean expressions in AL code can significantly impact readability, maintainability, and performance. This sample demonstrates systematic approaches to simplifying boolean logic while maintaining functionality and improving code clarity.
5
-
6
- ## Fundamental Simplification Patterns
7
-
8
- ### Example 1: Basic De Morgan's Laws Application
9
-
10
- **Problematic Code:**
11
- ```al
12
- procedure ValidateCustomerOrder(SalesHeader: Record "Sales Header"): Boolean
13
- var
14
- Customer: Record Customer;
15
- begin
16
- Customer.Get(SalesHeader."Sell-to Customer No.");
17
-
18
- // Complex negative condition - hard to read and understand
19
- if not (Customer.Blocked = Customer.Blocked::" ") or
20
- not (SalesHeader.Status = SalesHeader.Status::Open) or
21
- not (SalesHeader."Document Date" >= Today()) then
22
- exit(false);
23
-
24
- exit(true);
25
- end;
26
- ```
27
-
28
- **Simplified Code:**
29
- ```al
30
- procedure ValidateCustomerOrder(SalesHeader: Record "Sales Header"): Boolean
31
- var
32
- Customer: Record Customer;
33
- CustomerBlocked: Boolean;
34
- OrderNotOpen: Boolean;
35
- OrderDateInvalid: Boolean;
36
- begin
37
- Customer.Get(SalesHeader."Sell-to Customer No.");
38
-
39
- // Apply De Morgan's law: not (A or B or C) = (not A) and (not B) and (not C)
40
- // Then simplify by removing double negatives
41
- CustomerBlocked := Customer.Blocked <> Customer.Blocked::" ";
42
- OrderNotOpen := SalesHeader.Status <> SalesHeader.Status::Open;
43
- OrderDateInvalid := SalesHeader."Document Date" < Today();
44
-
45
- // Clear positive logic: ALL conditions must be false for validation to pass
46
- if CustomerBlocked or OrderNotOpen or OrderDateInvalid then
47
- exit(false);
48
-
49
- exit(true);
50
- end;
51
- ```
52
-
53
- ### Example 2: Condition Extraction and Grouping
54
-
55
- **Problematic Code:**
56
- ```al
57
- procedure CanPostSalesDocument(SalesHeader: Record "Sales Header"): Boolean
58
- var
59
- SalesLine: Record "Sales Line";
60
- GeneralLedgerSetup: Record "General Ledger Setup";
61
- UserSetup: Record "User Setup";
62
- begin
63
- GeneralLedgerSetup.Get();
64
- UserSetup.Get(UserId());
65
-
66
- // Extremely complex boolean expression mixing different concerns
67
- if (SalesHeader.Status = SalesHeader.Status::Released) and
68
- (SalesHeader."Posting Date" <> 0D) and
69
- (SalesHeader."Document Date" <> 0D) and
70
- ((SalesHeader."Posting Date" >= GeneralLedgerSetup."Allow Posting From") and
71
- (SalesHeader."Posting Date" <= GeneralLedgerSetup."Allow Posting To")) and
72
- ((UserSetup."Allow Posting From" = 0D) or (SalesHeader."Posting Date" >= UserSetup."Allow Posting From")) and
73
- ((UserSetup."Allow Posting To" = 0D) or (SalesHeader."Posting Date" <= UserSetup."Allow Posting To")) and
74
- (SalesHeader."Sell-to Customer No." <> '') and
75
- (SalesHeader.Amount > 0) then
76
- exit(true)
77
- else
78
- exit(false);
79
- end;
80
- ```
81
-
82
- **Simplified Code:**
83
- ```al
84
- procedure CanPostSalesDocument(SalesHeader: Record "Sales Header"): Boolean
85
- begin
86
- // Break complex validation into logical groups
87
- if not IsDocumentStatusValid(SalesHeader) then
88
- exit(false);
89
-
90
- if not AreDatesValid(SalesHeader) then
91
- exit(false);
92
-
93
- if not IsPostingDateAllowed(SalesHeader."Posting Date") then
94
- exit(false);
95
-
96
- if not IsDocumentContentValid(SalesHeader) then
97
- exit(false);
98
-
99
- exit(true);
100
- end;
101
-
102
- local procedure IsDocumentStatusValid(SalesHeader: Record "Sales Header"): Boolean
103
- begin
104
- exit(SalesHeader.Status = SalesHeader.Status::Released);
105
- end;
106
-
107
- local procedure AreDatesValid(SalesHeader: Record "Sales Header"): Boolean
108
- begin
109
- exit((SalesHeader."Posting Date" <> 0D) and (SalesHeader."Document Date" <> 0D));
110
- end;
111
-
112
- local procedure IsPostingDateAllowed(PostingDate: Date): Boolean
113
- var
114
- GeneralLedgerSetup: Record "General Ledger Setup";
115
- UserSetup: Record "User Setup";
116
- begin
117
- GeneralLedgerSetup.Get();
118
-
119
- // Check system-wide posting date restrictions
120
- if not ((PostingDate >= GeneralLedgerSetup."Allow Posting From") and
121
- (PostingDate <= GeneralLedgerSetup."Allow Posting To")) then
122
- exit(false);
123
-
124
- // Check user-specific posting date restrictions
125
- if UserSetup.Get(UserId()) then
126
- exit(IsWithinUserDateRange(PostingDate, UserSetup));
127
-
128
- exit(true);
129
- end;
130
-
131
- local procedure IsWithinUserDateRange(PostingDate: Date; UserSetup: Record "User Setup"): Boolean
132
- var
133
- WithinFromDate: Boolean;
134
- WithinToDate: Boolean;
135
- begin
136
- WithinFromDate := (UserSetup."Allow Posting From" = 0D) or (PostingDate >= UserSetup."Allow Posting From");
137
- WithinToDate := (UserSetup."Allow Posting To" = 0D) or (PostingDate <= UserSetup."Allow Posting To");
138
-
139
- exit(WithinFromDate and WithinToDate);
140
- end;
141
-
142
- local procedure IsDocumentContentValid(SalesHeader: Record "Sales Header"): Boolean
143
- begin
144
- exit((SalesHeader."Sell-to Customer No." <> '') and (SalesHeader.Amount > 0));
145
- end;
146
- ```
147
-
148
- ## Advanced Boolean Simplification Techniques
149
-
150
- ### Example 3: Short-Circuit Evaluation Optimization
151
-
152
- **Problematic Code:**
153
- ```al
154
- procedure ValidateItemForSale(ItemNo: Code[20]; LocationCode: Code[10]; Quantity: Decimal): Boolean
155
- var
156
- Item: Record Item;
157
- ItemLedgerEntry: Record "Item Ledger Entry";
158
- Location: Record Location;
159
- StockkeepingUnit: Record "Stockkeeping Unit";
160
- AvailableInventory: Decimal;
161
- IsReserved: Boolean;
162
- HasSpecialPricing: Boolean;
163
- begin
164
- // Poor ordering - expensive operations performed regardless of simple checks
165
- Item.Get(ItemNo);
166
- Item.CalcFields(Inventory);
167
- AvailableInventory := CalculateAvailableInventory(ItemNo, LocationCode);
168
- IsReserved := CheckReservationStatus(ItemNo, LocationCode);
169
- HasSpecialPricing := CheckSpecialPricing(ItemNo);
170
- Location.Get(LocationCode);
171
-
172
- if (Item.Blocked = false) and
173
- (Item.Type = Item.Type::Inventory) and
174
- (Location."Use As In-Transit" = false) and
175
- (Quantity > 0) and
176
- (AvailableInventory >= Quantity) and
177
- (IsReserved = false) and
178
- (HasSpecialPricing = true) then
179
- exit(true)
180
- else
181
- exit(false);
182
- end;
183
- ```
184
-
185
- **Optimized Code:**
186
- ```al
187
- procedure ValidateItemForSale(ItemNo: Code[20]; LocationCode: Code[10]; Quantity: Decimal): Boolean
188
- var
189
- Item: Record Item;
190
- Location: Record Location;
191
- begin
192
- // Fast validation first - fail early on simple checks
193
- if Quantity <= 0 then
194
- exit(false);
195
-
196
- if not Item.Get(ItemNo) then
197
- exit(false);
198
-
199
- // Basic item validation
200
- if not IsItemAvailableForSale(Item) then
201
- exit(false);
202
-
203
- // Location validation
204
- if not IsLocationValidForSale(LocationCode) then
205
- exit(false);
206
-
207
- // Expensive operations only after basic validation passes
208
- if not HasSufficientInventory(ItemNo, LocationCode, Quantity) then
209
- exit(false);
210
-
211
- if not IsInventoryUnreserved(ItemNo, LocationCode) then
212
- exit(false);
213
-
214
- if not HasValidPricing(ItemNo) then
215
- exit(false);
216
-
217
- exit(true);
218
- end;
219
-
220
- local procedure IsItemAvailableForSale(Item: Record Item): Boolean
221
- begin
222
- exit((Item.Blocked = false) and (Item.Type = Item.Type::Inventory));
223
- end;
224
-
225
- local procedure IsLocationValidForSale(LocationCode: Code[10]): Boolean
226
- var
227
- Location: Record Location;
228
- begin
229
- if not Location.Get(LocationCode) then
230
- exit(false);
231
-
232
- exit(Location."Use As In-Transit" = false);
233
- end;
234
-
235
- local procedure HasSufficientInventory(ItemNo: Code[20]; LocationCode: Code[10]; RequiredQty: Decimal): Boolean
236
- var
237
- AvailableInventory: Decimal;
238
- begin
239
- AvailableInventory := CalculateAvailableInventory(ItemNo, LocationCode);
240
- exit(AvailableInventory >= RequiredQty);
241
- end;
242
-
243
- local procedure IsInventoryUnreserved(ItemNo: Code[20]; LocationCode: Code[10]): Boolean
244
- begin
245
- exit(not CheckReservationStatus(ItemNo, LocationCode));
246
- end;
247
-
248
- local procedure HasValidPricing(ItemNo: Code[20]): Boolean
249
- begin
250
- exit(CheckSpecialPricing(ItemNo));
251
- end;
252
- ```
253
-
254
- ### Example 4: Complex Range and Set Validation
255
-
256
- **Problematic Code:**
257
- ```al
258
- procedure ValidateGLAccountPosting(GLAccountNo: Code[20]; PostingDate: Date; Amount: Decimal): Boolean
259
- var
260
- GLAccount: Record "G/L Account";
261
- AccountingPeriod: Record "Accounting Period";
262
- GLSetup: Record "General Ledger Setup";
263
- UserSetup: Record "User Setup";
264
- begin
265
- GLAccount.Get(GLAccountNo);
266
- GLSetup.Get();
267
-
268
- // Overly complex condition mixing different validation concerns
269
- if (GLAccount.Blocked = false) and
270
- (GLAccount."Direct Posting" = true) and
271
- ((GLAccount."Account Type" = GLAccount."Account Type"::Posting) or
272
- (GLAccount."Account Type" = GLAccount."Account Type"::"Begin-Total") or
273
- (GLAccount."Account Type" = GLAccount."Account Type"::"End-Total")) and
274
- (PostingDate <> 0D) and
275
- (PostingDate >= GLSetup."Allow Posting From") and
276
- (PostingDate <= GLSetup."Allow Posting To") and
277
- ((Amount > 0) or (Amount < 0)) and
278
- (Amount <> 0) and
279
- ((UserSetup.Get(UserId()) and
280
- ((UserSetup."Allow Posting From" = 0D) or (PostingDate >= UserSetup."Allow Posting From")) and
281
- ((UserSetup."Allow Posting To" = 0D) or (PostingDate <= UserSetup."Allow Posting To"))) or
282
- (not UserSetup.Get(UserId()))) then
283
- exit(true)
284
- else
285
- exit(false);
286
- end;
287
- ```
288
-
289
- **Simplified Code:**
290
- ```al
291
- procedure ValidateGLAccountPosting(GLAccountNo: Code[20]; PostingDate: Date; Amount: Decimal): Boolean
292
- var
293
- GLAccount: Record "G/L Account";
294
- begin
295
- if not GLAccount.Get(GLAccountNo) then
296
- exit(false);
297
-
298
- // Separate validation concerns for clarity
299
- exit(IsAccountValidForPosting(GLAccount) and
300
- IsPostingDateValid(PostingDate) and
301
- IsAmountValid(Amount));
302
- end;
303
-
304
- local procedure IsAccountValidForPosting(GLAccount: Record "G/L Account"): Boolean
305
- begin
306
- if GLAccount.Blocked then
307
- exit(false);
308
-
309
- if not GLAccount."Direct Posting" then
310
- exit(false);
311
-
312
- // Simplified account type check using set inclusion
313
- exit(GLAccount."Account Type" in [
314
- GLAccount."Account Type"::Posting,
315
- GLAccount."Account Type"::"Begin-Total",
316
- GLAccount."Account Type"::"End-Total"
317
- ]);
318
- end;
319
-
320
- local procedure IsPostingDateValid(PostingDate: Date): Boolean
321
- begin
322
- if PostingDate = 0D then
323
- exit(false);
324
-
325
- exit(IsWithinSystemDateRange(PostingDate) and IsWithinUserDateRange(PostingDate));
326
- end;
327
-
328
- local procedure IsWithinSystemDateRange(PostingDate: Date): Boolean
329
- var
330
- GLSetup: Record "General Ledger Setup";
331
- begin
332
- GLSetup.Get();
333
- exit((PostingDate >= GLSetup."Allow Posting From") and
334
- (PostingDate <= GLSetup."Allow Posting To"));
335
- end;
336
-
337
- local procedure IsWithinUserDateRange(PostingDate: Date): Boolean
338
- var
339
- UserSetup: Record "User Setup";
340
- begin
341
- // If no user setup exists, allow posting (system rules apply)
342
- if not UserSetup.Get(UserId()) then
343
- exit(true);
344
-
345
- // Check user-specific date restrictions
346
- if (UserSetup."Allow Posting From" <> 0D) and (PostingDate < UserSetup."Allow Posting From") then
347
- exit(false);
348
-
349
- if (UserSetup."Allow Posting To" <> 0D) and (PostingDate > UserSetup."Allow Posting To") then
350
- exit(false);
351
-
352
- exit(true);
353
- end;
354
-
355
- local procedure IsAmountValid(Amount: Decimal): Boolean
356
- begin
357
- // Simplified: amount must be non-zero (positive or negative)
358
- exit(Amount <> 0);
359
- end;
360
- ```
361
-
362
- ## Performance-Oriented Boolean Optimization
363
-
364
- ### Example 5: Database Query Optimization Through Boolean Logic
365
-
366
- **Problematic Code:**
367
- ```al
368
- procedure FindEligibleCustomersForPromotion(): List of [Code[20]]
369
- var
370
- Customer: Record Customer;
371
- CustomerList: List of [Code[20]];
372
- SalesHeader: Record "Sales Header";
373
- TotalSales: Decimal;
374
- HasRecentOrder: Boolean;
375
- IsHighValue: Boolean;
376
- IsActiveAccount: Boolean;
377
- begin
378
- // Inefficient: processes all customers regardless of basic criteria
379
- if Customer.FindSet() then
380
- repeat
381
- // Multiple database hits per customer
382
- Customer.CalcFields("Sales (LCY)");
383
- TotalSales := Customer."Sales (LCY)";
384
-
385
- SalesHeader.SetRange("Sell-to Customer No.", Customer."No.");
386
- SalesHeader.SetFilter("Order Date", '>=%1', CalcDate('-6M', Today()));
387
- HasRecentOrder := not SalesHeader.IsEmpty();
388
-
389
- IsHighValue := TotalSales > 50000;
390
- IsActiveAccount := Customer.Blocked = Customer.Blocked::" ";
391
-
392
- // Complex condition evaluated for every customer
393
- if (IsActiveAccount = true) and
394
- (IsHighValue = true) and
395
- (HasRecentOrder = true) and
396
- (Customer."Country/Region Code" = 'US') and
397
- (Customer."Customer Posting Group" <> 'CASH') then
398
- CustomerList.Add(Customer."No.");
399
- until Customer.Next() = 0;
400
-
401
- exit(CustomerList);
402
- end;
403
- ```
404
-
405
- **Optimized Code:**
406
- ```al
407
- procedure FindEligibleCustomersForPromotion(): List of [Code[20]]
408
- var
409
- Customer: Record Customer;
410
- CustomerList: List of [Code[20]];
411
- begin
412
- // Pre-filter customers to reduce dataset
413
- SetCustomerFiltersForPromotion(Customer);
414
-
415
- if Customer.FindSet() then
416
- repeat
417
- if IsCustomerEligibleForPromotion(Customer) then
418
- CustomerList.Add(Customer."No.");
419
- until Customer.Next() = 0;
420
-
421
- exit(CustomerList);
422
- end;
423
-
424
- local procedure SetCustomerFiltersForPromotion(var Customer: Record Customer)
425
- begin
426
- // Apply filters early to reduce record set
427
- Customer.SetRange(Blocked, Customer.Blocked::" "); // Active accounts only
428
- Customer.SetRange("Country/Region Code", 'US'); // US customers only
429
- Customer.SetFilter("Customer Posting Group", '<>%1', 'CASH'); // Exclude cash customers
430
- end;
431
-
432
- local procedure IsCustomerEligibleForPromotion(Customer: Record Customer): Boolean
433
- begin
434
- // Short-circuit evaluation: check expensive operations last
435
- exit(IsHighValueCustomer(Customer) and HasRecentActivity(Customer));
436
- end;
437
-
438
- local procedure IsHighValueCustomer(Customer: Record Customer): Boolean
439
- begin
440
- Customer.CalcFields("Sales (LCY)");
441
- exit(Customer."Sales (LCY)" > 50000);
442
- end;
443
-
444
- local procedure HasRecentActivity(Customer: Record Customer): Boolean
445
- var
446
- SalesHeader: Record "Sales Header";
447
- begin
448
- SalesHeader.SetRange("Sell-to Customer No.", Customer."No.");
449
- SalesHeader.SetFilter("Order Date", '>=%1', CalcDate('-6M', Today()));
450
- exit(not SalesHeader.IsEmpty());
451
- end;
452
- ```
453
-
454
- ## Best Practices for Boolean Expression Simplification
455
-
456
- ### Readability Improvements
457
- 1. **Extract conditions into well-named boolean variables** for complex expressions
458
- 2. **Use early return patterns** to avoid deeply nested if-else structures
459
- 3. **Group related conditions** into separate validation methods
460
- 4. **Apply De Morgan's laws** to eliminate complex negative conditions
461
-
462
- ### Performance Optimizations
463
- 1. **Order conditions by evaluation cost** - simple checks first, expensive operations last
464
- 2. **Use short-circuit evaluation** to avoid unnecessary calculations
465
- 3. **Pre-filter datasets** before applying complex boolean logic
466
- 4. **Cache expensive boolean calculations** when used multiple times
467
-
468
- ### Maintainability Patterns
469
- 1. **Separate concerns** - group related validation logic together
470
- 2. **Use meaningful method names** that clearly indicate validation purpose
471
- 3. **Avoid magic numbers and values** in boolean expressions
472
- 4. **Document complex business logic** with comments explaining the reasoning
473
-
474
- ### Common Anti-Patterns to Avoid
475
- 1. **Redundant conditions** like `(Amount > 0) or (Amount < 0)` instead of `Amount <> 0`
476
- 2. **Comparing booleans to true/false** like `if (IsValid = true)` instead of `if IsValid`
477
- 3. **Complex negative conditions** that can be simplified with De Morgan's laws
478
- 4. **Mixing different validation concerns** in single boolean expressions
479
-
480
- ## Related Concepts
481
- - **Guard Clauses**: Using early returns to simplify validation logic
482
- - **Specification Pattern**: Encapsulating business rules in reusable boolean expressions
483
- - **Chain of Responsibility**: Breaking complex validation into sequential checks
484
- - **Short-Circuit Evaluation**: Leveraging AL's boolean evaluation order for performance
@@ -1,64 +0,0 @@
1
- # Case Statement Error Handling - AL Code Samples
2
-
3
- ## Basic Error Handling Pattern
4
-
5
- ```al
6
- procedure ProcessOrderStatus(OrderStatus: Enum "Sales Document Status")
7
- begin
8
- case OrderStatus of
9
- OrderStatus::Open:
10
- ProcessOpenOrder();
11
- OrderStatus::Released:
12
- ProcessReleasedOrder();
13
- OrderStatus::"Pending Approval":
14
- ProcessPendingOrder();
15
- else
16
- Error('Unsupported order status: %1', OrderStatus);
17
- end;
18
- end;
19
- ```
20
-
21
- ## Safe Processing with TryFunction
22
-
23
- ```al
24
- [TryFunction]
25
- procedure ProcessOrderStatusSafe(OrderStatus: Enum "Sales Document Status"): Boolean
26
- begin
27
- case OrderStatus of
28
- OrderStatus::Open:
29
- exit(TryProcessOpenOrder());
30
- OrderStatus::Released:
31
- exit(TryProcessReleasedOrder());
32
- else
33
- exit(false);
34
- end;
35
- end;
36
- ```
37
-
38
- ## Exception Recovery Pattern
39
-
40
- ```al
41
- procedure ProcessWithRecovery(ProcessingType: Text; MaxAttempts: Integer)
42
- var
43
- Attempts: Integer;
44
- Success: Boolean;
45
- begin
46
- repeat
47
- Attempts += 1;
48
- case ProcessingType of
49
- 'STANDARD':
50
- Success := TryStandardProcessing();
51
- 'FALLBACK':
52
- Success := TryFallbackProcessing();
53
- else
54
- Success := false;
55
- end;
56
-
57
- if not Success and (Attempts < MaxAttempts) then
58
- Sleep(1000);
59
- until Success or (Attempts >= MaxAttempts);
60
-
61
- if not Success then
62
- Error('Failed after %1 attempts', MaxAttempts);
63
- end;
64
- ```
@@ -1,107 +0,0 @@
1
- # AL Compound Statement Readability Examples
2
-
3
- ## Basic Conditional Enhancement
4
-
5
- ### Before: Single Statement
6
- ```al
7
- if CustomerExists then
8
- CreateOrder();
9
- ```
10
-
11
- ### After: Compound Statement
12
- ```al
13
- if CustomerExists then begin
14
- CreateOrder();
15
- end;
16
- ```
17
-
18
- ## Complex Conditional Logic
19
-
20
- ### Nested Conditions with Clear Structure
21
- ```al
22
- if ValidateCustomer(CustomerNo) then begin
23
- if CheckCreditLimit(CustomerNo, OrderAmount) then begin
24
- CreateSalesOrder(CustomerNo, OrderAmount);
25
- UpdateCustomerBalance(CustomerNo, OrderAmount);
26
- SendOrderConfirmation(CustomerNo);
27
- end else begin
28
- LogCreditLimitExceeded(CustomerNo, OrderAmount);
29
- NotifyCustomerService(CustomerNo);
30
- end;
31
- end else begin
32
- LogInvalidCustomer(CustomerNo);
33
- RaiseCustomerValidationError(CustomerNo);
34
- end;
35
- ```
36
-
37
- ## Loop Structure Clarification
38
-
39
- ### For Loop with Single Statement
40
- ```al
41
- for i := 1 to ItemCount do begin
42
- ProcessItem(i);
43
- end;
44
- ```
45
-
46
- ### While Loop with Multiple Operations
47
- ```al
48
- while not ItemLedgerEntry.IsEmpty() do begin
49
- ItemLedgerEntry.CalcFields("Remaining Quantity");
50
- if ItemLedgerEntry."Remaining Quantity" > 0 then begin
51
- UpdateInventoryPosition(ItemLedgerEntry);
52
- LogInventoryTransaction(ItemLedgerEntry);
53
- end;
54
- ItemLedgerEntry.Next();
55
- end;
56
- ```
57
-
58
- ## Error Handling Organization
59
-
60
- ### Exception Handling with Compound Blocks
61
- ```al
62
- if not ValidateOrderData(SalesHeader) then begin
63
- LogValidationError(SalesHeader."No.");
64
- NotifyUser('Order validation failed');
65
- exit(false);
66
- end;
67
-
68
- try
69
- ProcessSalesOrder(SalesHeader);
70
- except
71
- on E: Exception do begin
72
- LogException(E.Message, SalesHeader."No.");
73
- RollbackTransaction();
74
- RaiseOrderProcessingError(E.Message);
75
- end;
76
- end;
77
- ```
78
-
79
- ## Case Statement Structure
80
-
81
- ### Clear Case Branch Organization
82
- ```al
83
- case DocumentType of
84
- DocumentType::Quote:
85
- begin
86
- ValidateQuoteData();
87
- UpdateQuoteStatus();
88
- end;
89
- DocumentType::Order:
90
- begin
91
- ValidateOrderData();
92
- ReserveInventory();
93
- UpdateOrderStatus();
94
- end;
95
- DocumentType::Invoice:
96
- begin
97
- ValidateInvoiceData();
98
- PostToGeneralLedger();
99
- UpdateInvoiceStatus();
100
- end;
101
- else
102
- begin
103
- LogUnsupportedDocumentType(DocumentType);
104
- Error('Unsupported document type: %1', DocumentType);
105
- end;
106
- end;
107
- ```