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,280 +0,0 @@
1
- # AL Separate If-Else Formatting - Code Examples
2
-
3
- ## Good Examples
4
-
5
- ### Proper If-Else Separation with Clear Structure
6
- ```al
7
- procedure ProcessCustomerStatus(CustomerNo: Code[20])
8
- var
9
- Customer: Record Customer;
10
- begin
11
- if Customer.Get(CustomerNo) then
12
- begin
13
- if not Customer.Blocked then
14
- begin
15
- Customer."Last Contact Date" := Today;
16
- Customer.Modify();
17
- Message('Customer %1 updated successfully', CustomerNo);
18
- end
19
- else
20
- begin
21
- Message('Customer %1 is blocked and cannot be updated', CustomerNo);
22
- end;
23
- end
24
- else
25
- begin
26
- Error('Customer %1 does not exist', CustomerNo);
27
- end;
28
- end;
29
- ```
30
-
31
- ### Multiple If-Else Conditions with Proper Separation
32
- ```al
33
- procedure HandleOrderStatus(var SalesHeader: Record "Sales Header")
34
- begin
35
- if SalesHeader.Status = SalesHeader.Status::Open then
36
- begin
37
- EnableEditingActions();
38
- SetStatusColor('Green');
39
- ShowMessage('Order is open for editing');
40
- end
41
- else if SalesHeader.Status = SalesHeader.Status::Released then
42
- begin
43
- DisableEditingActions();
44
- SetStatusColor('Blue');
45
- ShowMessage('Order has been released');
46
- end
47
- else if SalesHeader.Status = SalesHeader.Status::"Pending Approval" then
48
- begin
49
- DisableEditingActions();
50
- SetStatusColor('Yellow');
51
- ShowMessage('Order is pending approval');
52
- RequestApproval(SalesHeader);
53
- end
54
- else
55
- begin
56
- DisableAllActions();
57
- SetStatusColor('Red');
58
- ShowMessage('Order status is invalid');
59
- end;
60
- end;
61
- ```
62
-
63
- ### Nested If-Else with Clear Block Structure
64
- ```al
65
- procedure ValidateAndProcessOrder(OrderNo: Code[20])
66
- var
67
- SalesHeader: Record "Sales Header";
68
- Customer: Record Customer;
69
- begin
70
- if SalesHeader.Get(SalesHeader."Document Type"::Order, OrderNo) then
71
- begin
72
- if Customer.Get(SalesHeader."Sell-to Customer No.") then
73
- begin
74
- if not Customer.Blocked then
75
- begin
76
- if SalesHeader."Order Date" <> 0D then
77
- begin
78
- ProcessValidOrder(SalesHeader);
79
- Message('Order processed successfully');
80
- end
81
- else
82
- begin
83
- Error('Order date is required');
84
- end;
85
- end
86
- else
87
- begin
88
- Error('Customer %1 is blocked', Customer."No.");
89
- end;
90
- end
91
- else
92
- begin
93
- Error('Customer does not exist');
94
- end;
95
- end
96
- else
97
- begin
98
- Error('Order %1 not found', OrderNo);
99
- end;
100
- end;
101
- ```
102
-
103
- ### Complex Business Logic with Proper If-Else Structure
104
- ```al
105
- procedure CalculateDiscount(CustomerNo: Code[20]; OrderAmount: Decimal): Decimal
106
- var
107
- Customer: Record Customer;
108
- DiscountPct: Decimal;
109
- begin
110
- if Customer.Get(CustomerNo) then
111
- begin
112
- if Customer."Customer Posting Group" = 'VIP' then
113
- begin
114
- if OrderAmount >= 10000 then
115
- begin
116
- DiscountPct := 15;
117
- end
118
- else if OrderAmount >= 5000 then
119
- begin
120
- DiscountPct := 10;
121
- end
122
- else
123
- begin
124
- DiscountPct := 5;
125
- end;
126
- end
127
- else if Customer."Customer Posting Group" = 'PREMIUM' then
128
- begin
129
- if OrderAmount >= 5000 then
130
- begin
131
- DiscountPct := 8;
132
- end
133
- else
134
- begin
135
- DiscountPct := 3;
136
- end;
137
- end
138
- else
139
- begin
140
- if OrderAmount >= 1000 then
141
- begin
142
- DiscountPct := 2;
143
- end
144
- else
145
- begin
146
- DiscountPct := 0;
147
- end;
148
- end;
149
- end
150
- else
151
- begin
152
- DiscountPct := 0;
153
- end;
154
-
155
- exit(DiscountPct);
156
- end;
157
- ```
158
-
159
- ## Bad Examples
160
-
161
- ### Cramped If-Else on Same Lines
162
- ```al
163
- procedure BadIfElseFormatting(CustomerNo: Code[20])
164
- var
165
- Customer: Record Customer;
166
- begin
167
- if Customer.Get(CustomerNo) then begin Customer."Last Contact Date" := Today; Customer.Modify(); end else begin Error('Customer not found'); end; // Bad: entire if-else on one line
168
-
169
- if not Customer.Blocked then Message('Active customer') else Message('Blocked customer'); // Bad: no begin-end blocks, single line
170
- end;
171
- ```
172
-
173
- ### Poor Else Positioning
174
- ```al
175
- procedure PoorElsePositioning(OrderNo: Code[20])
176
- var
177
- SalesHeader: Record "Sales Header";
178
- begin
179
- if SalesHeader.Get(SalesHeader."Document Type"::Order, OrderNo) then
180
- begin
181
- ProcessOrder(SalesHeader);
182
- end else begin // Bad: else on same line as end
183
- Error('Order not found');
184
- end;
185
-
186
- if SalesHeader.Status = SalesHeader.Status::Open then
187
- begin
188
- EnableEditing();
189
- end
190
- else // Bad: else indented incorrectly
191
- begin
192
- DisableEditing();
193
- end;
194
- end;
195
- ```
196
-
197
- ### Missing Begin-End Blocks
198
- ```al
199
- procedure MissingBeginEnd(CustomerNo: Code[20])
200
- var
201
- Customer: Record Customer;
202
- begin
203
- if Customer.Get(CustomerNo) then
204
- Customer."Last Contact Date" := Today;
205
- Customer.Modify(); // Bad: this executes regardless of if condition
206
- else
207
- Error('Customer not found'); // Bad: this causes compilation error
208
-
209
- if Customer.Blocked then
210
- Customer.Blocked := false;
211
- Message('Customer unblocked'); // Bad: this executes regardless of if condition
212
- else
213
- Message('Customer is active');
214
- end;
215
- ```
216
-
217
- ### Inconsistent Formatting Styles
218
- ```al
219
- procedure InconsistentFormatting(OrderNo: Code[20])
220
- var
221
- SalesHeader: Record "Sales Header";
222
- Customer: Record Customer;
223
- begin
224
- // Style 1: proper formatting
225
- if SalesHeader.Get(SalesHeader."Document Type"::Order, OrderNo) then
226
- begin
227
- ProcessOrder(SalesHeader);
228
- end
229
- else
230
- begin
231
- Error('Order not found');
232
- end;
233
-
234
- // Style 2: cramped formatting
235
- if Customer.Get(SalesHeader."Sell-to Customer No.") then begin ProcessCustomer(Customer); end else begin Error('Customer not found'); end;
236
-
237
- // Style 3: missing blocks
238
- if SalesHeader."Order Date" = Today then
239
- Message('Today order')
240
- else
241
- Message('Past order');
242
- end;
243
- ```
244
-
245
- ### Complex Nested Logic Without Clear Structure
246
- ```al
247
- procedure PoorNestedStructure(OrderNo: Code[20])
248
- var
249
- SalesHeader: Record "Sales Header";
250
- Customer: Record Customer;
251
- begin
252
- if SalesHeader.Get(SalesHeader."Document Type"::Order, OrderNo) then if Customer.Get(SalesHeader."Sell-to Customer No.") then if not Customer.Blocked then if SalesHeader."Order Date" <> 0D then ProcessValidOrder(SalesHeader) else Error('No order date') else Error('Customer blocked') else Error('Customer not found') else Error('Order not found'); // Bad: entire nested structure on one line
253
- end;
254
- ```
255
-
256
- ### Poor Else-If Chain Formatting
257
- ```al
258
- procedure PoorElseIfChain(Status: Option Open,Released,Pending,Cancelled)
259
- begin
260
- if Status = Status::Open then begin
261
- EnableEditing();
262
- end else if Status = Status::Released then begin // Bad: else if on same line as end
263
- DisableEditing();
264
- end
265
- else if Status = Status::Pending then // Bad: inconsistent else positioning
266
- begin
267
- RequestApproval();
268
- end else begin // Bad: else on same line as end
269
- ShowError();
270
- end;
271
- end;
272
- ```
273
-
274
- ## Best Practices
275
-
276
- 1. **Separate if and else blocks** with proper line breaks
277
- 2. **Use begin-end blocks** for all multi-statement conditions
278
- 3. **Consistent else positioning** - always on its own line aligned with corresponding if
279
- 4. **Clear visual hierarchy** through proper indentation
280
- 5. **Avoid cramping** multiple conditions or statements on single lines
@@ -1,188 +0,0 @@
1
- # AL Statement Per Line Rule - Code Examples
2
-
3
- ## Good Examples
4
-
5
- ### Single Statement Per Line
6
- ```al
7
- procedure ProcessCustomerOrder(CustomerNo: Code[20])
8
- var
9
- Customer: Record Customer;
10
- SalesHeader: Record "Sales Header";
11
- OrderNo: Code[20];
12
- begin
13
- // Each statement on its own line for clarity
14
- Customer.Get(CustomerNo);
15
- Customer.CalcFields("Balance (LCY)");
16
-
17
- SalesHeader.Init();
18
- SalesHeader."Document Type" := SalesHeader."Document Type"::Order;
19
- SalesHeader."Sell-to Customer No." := CustomerNo;
20
- SalesHeader."Order Date" := Today;
21
- SalesHeader.Insert(true);
22
-
23
- OrderNo := SalesHeader."No.";
24
- Message('Order %1 created successfully', OrderNo);
25
- end;
26
- ```
27
-
28
- ### Variable Declarations - One Per Line
29
- ```al
30
- procedure CalculateOrderTotals(OrderNo: Code[20])
31
- var
32
- SalesHeader: Record "Sales Header";
33
- SalesLine: Record "Sales Line";
34
- TotalAmount: Decimal;
35
- TotalQuantity: Decimal;
36
- LineCount: Integer;
37
- DiscountAmount: Decimal;
38
- begin
39
- SalesHeader.Get(SalesHeader."Document Type"::Order, OrderNo);
40
-
41
- SalesLine.SetRange("Document Type", SalesLine."Document Type"::Order);
42
- SalesLine.SetRange("Document No.", OrderNo);
43
-
44
- if SalesLine.FindSet() then
45
- repeat
46
- TotalAmount += SalesLine."Line Amount";
47
- TotalQuantity += SalesLine.Quantity;
48
- LineCount += 1;
49
- DiscountAmount += SalesLine."Line Discount Amount";
50
- until SalesLine.Next() = 0;
51
-
52
- SalesHeader."Total Amount" := TotalAmount;
53
- SalesHeader."Total Quantity" := TotalQuantity;
54
- SalesHeader.Modify();
55
- end;
56
- ```
57
-
58
- ### Control Flow Statements
59
- ```al
60
- procedure ValidateOrderData(var SalesHeader: Record "Sales Header"): Boolean
61
- var
62
- Customer: Record Customer;
63
- ValidationResult: Boolean;
64
- begin
65
- ValidationResult := true;
66
-
67
- if SalesHeader."Sell-to Customer No." = '' then
68
- ValidationResult := false;
69
-
70
- if ValidationResult then
71
- if not Customer.Get(SalesHeader."Sell-to Customer No.") then
72
- ValidationResult := false;
73
-
74
- if ValidationResult then
75
- if Customer.Blocked then
76
- ValidationResult := false;
77
-
78
- if ValidationResult then
79
- if SalesHeader."Order Date" = 0D then
80
- ValidationResult := false;
81
-
82
- exit(ValidationResult);
83
- end;
84
- ```
85
-
86
- ### Complex Expressions Broken Down
87
- ```al
88
- procedure CalculateComplexPricing(ItemNo: Code[20]; CustomerNo: Code[20]; Quantity: Decimal): Decimal
89
- var
90
- Item: Record Item;
91
- Customer: Record Customer;
92
- BasePrice: Decimal;
93
- CustomerDiscount: Decimal;
94
- VolumeDiscount: Decimal;
95
- FinalPrice: Decimal;
96
- begin
97
- Item.Get(ItemNo);
98
- Customer.Get(CustomerNo);
99
-
100
- BasePrice := Item."Unit Price";
101
- CustomerDiscount := GetCustomerDiscount(CustomerNo);
102
- VolumeDiscount := GetVolumeDiscount(Quantity);
103
-
104
- FinalPrice := BasePrice;
105
- FinalPrice := FinalPrice * (1 - CustomerDiscount / 100);
106
- FinalPrice := FinalPrice * (1 - VolumeDiscount / 100);
107
-
108
- exit(FinalPrice);
109
- end;
110
- ```
111
-
112
- ## Bad Examples
113
-
114
- ### Multiple Statements Per Line
115
- ```al
116
- procedure BadMultipleStatements(CustomerNo: Code[20])
117
- var
118
- Customer: Record Customer; SalesHeader: Record "Sales Header"; OrderNo: Code[20]; // Bad: multiple declarations
119
- begin
120
- Customer.Get(CustomerNo); Customer.CalcFields("Balance (LCY)"); SalesHeader.Init(); // Bad: multiple statements
121
- SalesHeader."Document Type" := SalesHeader."Document Type"::Order; SalesHeader."Sell-to Customer No." := CustomerNo; SalesHeader.Insert(true); // Bad: cramped assignments
122
- OrderNo := SalesHeader."No."; Message('Order %1 created', OrderNo); // Bad: multiple statements
123
- end;
124
- ```
125
-
126
- ### Cramped Control Flow
127
- ```al
128
- procedure BadControlFlow(OrderNo: Code[20])
129
- var
130
- SalesLine: Record "Sales Line"; Total: Decimal; // Bad: multiple declarations
131
- begin
132
- SalesLine.SetRange("Document No.", OrderNo); if SalesLine.FindSet() then repeat Total += SalesLine."Line Amount"; until SalesLine.Next() = 0; // Bad: entire loop on one line
133
- if Total > 1000 then Message('Large order') else Message('Small order'); // Bad: if-else on one line
134
- end;
135
- ```
136
-
137
- ### Complex Expressions on Single Lines
138
- ```al
139
- procedure BadComplexExpressions(ItemNo: Code[20]; CustomerNo: Code[20]; Qty: Decimal): Decimal
140
- var
141
- Item: Record Item; Customer: Record Customer; // Bad: multiple declarations
142
- begin
143
- Item.Get(ItemNo); Customer.Get(CustomerNo); // Bad: multiple statements
144
- exit(Item."Unit Price" * (1 - GetCustomerDiscount(CustomerNo) / 100) * (1 - GetVolumeDiscount(Qty) / 100) * Qty); // Bad: complex calculation on one line
145
- end;
146
- ```
147
-
148
- ### Nested Structures Cramped
149
- ```al
150
- procedure BadNesting(OrderNo: Code[20])
151
- var
152
- SalesLine: Record "Sales Line"; Item: Record Item; // Bad: multiple declarations
153
- begin
154
- SalesLine.SetRange("Document No.", OrderNo); if SalesLine.FindSet() then repeat if SalesLine.Type = SalesLine.Type::Item then if Item.Get(SalesLine."No.") then if Item.Inventory < SalesLine.Quantity then Error('Low inventory') else Item.Modify(); until SalesLine.Next() = 0; // Bad: complex nested logic on one line
155
- end;
156
- ```
157
-
158
- ### Variable Assignments and Calculations Cramped
159
- ```al
160
- procedure BadCalculations()
161
- var
162
- Price, Discount, Tax, Total: Decimal; // Bad: multiple declarations on one line
163
- Qty1, Qty2, Qty3: Integer; // Bad: multiple declarations
164
- begin
165
- Price := 100; Discount := 0.1; Tax := 0.08; Qty1 := 5; Qty2 := 3; Qty3 := 2; // Bad: multiple assignments
166
- Total := (Price * (Qty1 + Qty2 + Qty3)) * (1 - Discount) * (1 + Tax); // Bad: complex calculation
167
- Message('Total: %1', Total); Exit(Total); // Bad: multiple statements
168
- end;
169
- ```
170
-
171
- ### Poor Error Handling Structure
172
- ```al
173
- procedure BadErrorHandling(CustomerNo: Code[20])
174
- var
175
- Customer: Record Customer; ErrorMsg: Text; // Bad: multiple declarations
176
- begin
177
- if not Customer.Get(CustomerNo) then ErrorMsg := 'Customer not found'; if Customer.Blocked then ErrorMsg += ' and blocked'; if ErrorMsg <> '' then Error(ErrorMsg); // Bad: complex error logic on one line
178
- end;
179
- ```
180
-
181
- ## Best Practices
182
-
183
- 1. **One statement per line** - each operation should have its own line
184
- 2. **One variable declaration per line** - easier to read and maintain
185
- 3. **Break complex expressions** into multiple assignment statements
186
- 4. **Separate logical operations** even if they could be combined
187
- 5. **Use meaningful intermediate variables** for complex calculations
188
- 6. **Structure control flow** with proper line breaks and indentation
@@ -1,245 +0,0 @@
1
- # Unnecessary Else Elimination - AL Code Examples
2
-
3
- ## Good Examples
4
-
5
- ### Early Return Pattern
6
- ```al
7
- procedure ValidateCustomerCredit(CustomerNo: Code[20]): Boolean
8
- var
9
- Customer: Record Customer;
10
- CustLedgerEntry: Record "Cust. Ledger Entry";
11
- TotalOutstanding: Decimal;
12
- begin
13
- // Early exit for invalid customer
14
- if not Customer.Get(CustomerNo) then
15
- exit(false);
16
-
17
- // Early exit if credit check disabled
18
- if not Customer."Credit Limit (LCY)" > 0 then
19
- exit(true);
20
-
21
- // Calculate outstanding amount
22
- CustLedgerEntry.SetRange("Customer No.", CustomerNo);
23
- CustLedgerEntry.SetRange(Open, true);
24
- CustLedgerEntry.CalcSums("Remaining Amt. (LCY)");
25
- TotalOutstanding := CustLedgerEntry."Remaining Amt. (LCY)";
26
-
27
- // Direct return without else
28
- exit(TotalOutstanding <= Customer."Credit Limit (LCY)");
29
- end;
30
- ```
31
-
32
- ### Guard Clause Implementation
33
- ```al
34
- procedure ProcessSalesOrder(DocumentNo: Code[20]): Boolean
35
- var
36
- SalesHeader: Record "Sales Header";
37
- SalesLine: Record "Sales Line";
38
- begin
39
- // Guard clause - early exit
40
- if DocumentNo = '' then
41
- exit(false);
42
-
43
- // Guard clause - record validation
44
- if not SalesHeader.Get(SalesHeader."Document Type"::Order, DocumentNo) then
45
- exit(false);
46
-
47
- // Guard clause - status validation
48
- if SalesHeader.Status <> SalesHeader.Status::Open then
49
- exit(false);
50
-
51
- // Main processing logic
52
- SalesLine.SetRange("Document Type", SalesHeader."Document Type");
53
- SalesLine.SetRange("Document No.", SalesHeader."No.");
54
- if SalesLine.FindSet() then
55
- repeat
56
- ProcessSalesLine(SalesLine);
57
- until SalesLine.Next() = 0;
58
-
59
- exit(true);
60
- end;
61
- ```
62
-
63
- ### Streamlined Control Flow
64
- ```al
65
- procedure CalculateItemCost(ItemNo: Code[20]; Quantity: Decimal): Decimal
66
- var
67
- Item: Record Item;
68
- ItemLedgerEntry: Record "Item Ledger Entry";
69
- begin
70
- // Early validation without nested else
71
- if ItemNo = '' then
72
- exit(0);
73
-
74
- if Quantity <= 0 then
75
- exit(0);
76
-
77
- if not Item.Get(ItemNo) then
78
- exit(0);
79
-
80
- // Calculate based on costing method
81
- case Item."Costing Method" of
82
- Item."Costing Method"::FIFO:
83
- exit(CalculateFIFOCost(ItemNo, Quantity));
84
- Item."Costing Method"::LIFO:
85
- exit(CalculateLIFOCost(ItemNo, Quantity));
86
- Item."Costing Method"::Average:
87
- exit(Item."Unit Cost" * Quantity);
88
- else
89
- exit(Item."Last Direct Cost" * Quantity);
90
- end;
91
- end;
92
- ```
93
-
94
- ## Bad Examples
95
-
96
- ### Unnecessary Else Chains
97
- ```al
98
- procedure ValidateCustomerCredit(CustomerNo: Code[20]): Boolean
99
- var
100
- Customer: Record Customer;
101
- CustLedgerEntry: Record "Cust. Ledger Entry";
102
- TotalOutstanding: Decimal;
103
- begin
104
- if CustomerNo = '' then begin
105
- exit(false);
106
- end else begin
107
- if Customer.Get(CustomerNo) then begin
108
- if Customer."Credit Limit (LCY)" > 0 then begin
109
- CustLedgerEntry.SetRange("Customer No.", CustomerNo);
110
- CustLedgerEntry.SetRange(Open, true);
111
- CustLedgerEntry.CalcSums("Remaining Amt. (LCY)");
112
- TotalOutstanding := CustLedgerEntry."Remaining Amt. (LCY)";
113
- if TotalOutstanding <= Customer."Credit Limit (LCY)" then begin
114
- exit(true);
115
- end else begin
116
- exit(false);
117
- end;
118
- end else begin
119
- exit(true);
120
- end;
121
- end else begin
122
- exit(false);
123
- end;
124
- end;
125
- end;
126
- ```
127
-
128
- ### Nested Else Complexity
129
- ```al
130
- procedure ProcessDocument(DocumentType: Integer; DocumentNo: Code[20]): Boolean
131
- var
132
- ProcessingResult: Boolean;
133
- begin
134
- if DocumentType = 1 then begin
135
- ProcessingResult := ProcessSalesDocument(DocumentNo);
136
- if ProcessingResult then begin
137
- exit(true);
138
- end else begin
139
- exit(false);
140
- end;
141
- end else begin
142
- if DocumentType = 2 then begin
143
- ProcessingResult := ProcessPurchaseDocument(DocumentNo);
144
- if ProcessingResult then begin
145
- exit(true);
146
- end else begin
147
- exit(false);
148
- end;
149
- end else begin
150
- if DocumentType = 3 then begin
151
- ProcessingResult := ProcessServiceDocument(DocumentNo);
152
- if ProcessingResult then begin
153
- exit(true);
154
- end else begin
155
- exit(false);
156
- end;
157
- end else begin
158
- exit(false);
159
- end;
160
- end;
161
- end;
162
- end;
163
- ```
164
-
165
- ## Best Practices
166
-
167
- ### Boolean Return Simplification
168
- ```al
169
- procedure IsItemBlocked(ItemNo: Code[20]): Boolean
170
- var
171
- Item: Record Item;
172
- begin
173
- // Good: Direct boolean return
174
- if not Item.Get(ItemNo) then
175
- exit(true);
176
-
177
- exit(Item.Blocked);
178
-
179
- // Avoid: Unnecessary if-then-else for boolean
180
- // if Item.Blocked then
181
- // exit(true)
182
- // else
183
- // exit(false);
184
- end;
185
- ```
186
-
187
- ### Case Statement Optimization
188
- ```al
189
- procedure GetDocumentStatus(Status: Option Open,Released,Pending): Text
190
- begin
191
- // Good: Case with early returns
192
- case Status of
193
- Status::Open:
194
- exit('OPEN');
195
- Status::Released:
196
- exit('RELEASED');
197
- Status::Pending:
198
- exit('PENDING');
199
- else
200
- exit('UNKNOWN');
201
- end;
202
-
203
- // Avoid: Nested if-else chains
204
- // if Status = Status::Open then
205
- // exit('OPEN')
206
- // else if Status = Status::Released then
207
- // exit('RELEASED')
208
- // else if Status = Status::Pending then
209
- // exit('PENDING')
210
- // else
211
- // exit('UNKNOWN');
212
- end;
213
- ```
214
-
215
- ### Exception Handling Pattern
216
- ```al
217
- procedure SafelyProcessRecord(RecordID: RecordID): Boolean
218
- var
219
- RecordRef: RecordRef;
220
- begin
221
- // Early exit on invalid input
222
- if RecordID.TableNo = 0 then
223
- exit(false);
224
-
225
- // Early exit if record doesn't exist
226
- if not RecordRef.Get(RecordID) then
227
- exit(false);
228
-
229
- // Early exit if record is already processed
230
- if IsRecordProcessed(RecordRef) then
231
- exit(true);
232
-
233
- // Main processing
234
- exit(ProcessRecord(RecordRef));
235
- end;
236
- ```
237
-
238
- ## Implementation Guidelines
239
-
240
- 1. **Replace nested if-else with early returns** - Reduce cognitive complexity
241
- 2. **Use guard clauses for validation** - Handle edge cases at procedure start
242
- 3. **Simplify boolean returns** - Return boolean expressions directly
243
- 4. **Prefer case statements** - For multiple discrete value comparisons
244
- 5. **Apply consistent patterns** - Use same structure across similar procedures
245
- 6. **Test thoroughly** - Ensure refactored logic maintains original behavior